Помощь - Поиск - Пользователи - Календарь
Полная версия: Пультовой режим для БК
MAXIOL > Техника > DEC hardware / software > БК 0010 / 11 / 11M
SuperMax

Description: Elektronika-BK001x microODT rom

Код

BASE=100000      ;100000 for BK0010, 140000 for BK0011m, 160000 for MS1201 & MS1201.01
HRAM=177640      ;system RAM
RSLR=176560      ;KUVT86 port
KBRS=177560      ;console port
BWR=177642      ;locked RAM
TMR=177666
VBE=177670
CTM=177672
HSP=HRAM-24      ;stack 177600-177612
HDM=HRAM-24
VR0=HRAM-22
VSP=HRAM-6
VPC=HRAM-4
VRS=HRAM-2
BFU=HRAM
CPC=177674
SEL1=177716
KBD=KBRS+2
PRRS=KBRS+4
PRD=KBRS+6
RDLR=RSLR+2
RSLT=RSLR+4
RDLT=RSLR+6
CRS=CPC+2
STEP=16
START=12
ADL=200
CHAR=1
INDATA=2
HALT=10
OPM=4
BYTE=20
IDE=40
LB=100
IDEP=200
HALTM=330
USERM=320
FSMM=123456
FSBTD=112233


        .ASECT
.=base

ST:        BR        INI
        .WORD        HIEN
        .WORD        2340
        .WORD        DBEN
        .WORD        2340
        .WORD        IEEN
        .WORD        2340
HLT:        HALT
INI:        MOV        #HALTM,@#SEL1
        MOV        #100,R2
10$:        MOV        #230,@#SEL1
        MOV        #60,R4
20$:        SOB        R4,20$
        MOV        #330,@#SEL1
        MOV        #60,R4
30$:        SOB        R4,30$
        SOB        R2,10$
        CLR        @#VBE
        SWAB        @#TMR
        MOV        @#SEL1,R0
        BIC        #177774,R0
        BIT        #2,R0
        BNE        1$
        MOV        #1000,SP
        MOV        #340,R2
        BIT        #1,R0
        BNE        2$
        MOV        #BASE,R1      ; start BK0010/BK0011 monitor
        BR        4$
2$:        MOV        #160000,R1      ; autoboot BK
        BR        4$
1$:        MOV        #INIMES,R1
100$:        BIT        #200,@#PRRS
        BEQ        100$
        MOVB        (R1)+,@#PRD
        BNE        100$
        BIT        #1,R0
        BEQ        HLT
        MOV        @#24,R1              ; restart DVK from powerfail vector
        MOV        @#26,R2
4$:        MOV        R1,@#CPC
        MOV        R2,@#CRS
        START
IEEN:        MOV        #11,@#HDM
        BR        EN
DBEN:        MOV        #13,@#HDM
        BR        EN
HIEN:        CMP        @#VBE,#FSMM
        BNE        2$
        JSR        PC,BUSER
        BR        WORK
2$:        CMP        @#VBE,#FSBTD
        BNE        3$
        JSR        PC,NODEV
        BR        WORK
3$:        BIT        #2,@#SEL1
        BNE        10$
        CMP        SP,#74
        BLO        10$
        CMP        SP,#100000
        BHI        10$
        MOV        @#CRS,-(SP)
        MOV        @#CPC,-(SP)
        MOV        @#4,@#CPC
        MOV        @#6,@#CRS
        CLR        @#VBE
        START
10$:        MOV        #10,@#HDM
EN:        MOV        SP,@#VSP
        MOV        @#CPC,@#VPC
        MOV        @#CRS,@#VRS
        MOV        #VSP,SP
        MOV        R5,-(SP)
        MOV        R4,-(SP)
        MOV        R3,-(SP)
        MOV        R2,-(SP)
        MOV        R1,-(SP)
        MOV        R0,-(SP)
        MOV        #HSP,SP
        BIT        #ADL,@#TMR
        BNE        1$
        MOV        @#TMR,@#CTM
        SWAB        @#TMR
1$:        CLR        R4
        JSR        PC,PROMPT
        BIS        #IDEP,R4
        MOV        @#VPC,R1
        MOV        R1,R5
        JSR        PC,NPRINT
WORK:        MOV        #HSP,SP
        CLR        @#VBE
        BIC        #IDEP!LB!IDE!BYTE!OPM!INDATA!CHAR,R4
        JSR        PC,TRINI
        JSR        PC,PROMPT
RP:        JSR        PC,NINPUT
        MOV        #COMCHR,R2
        MOV        #SRT,R3
1$:        CMPB        R0,(R2)
        BEQ        JUMP
        INC        R2
        TSTB        (R2)
        BEQ        RP
        TST        (R3)+
        BR        1$
JUMP:        MOV        (R3),R3
        JMP        (R3)
NINPUT:        MOV        R2,-(SP)
        BIT        #IDE,R4
        BEQ        10$
        MOV        #40,R0
101$:        JSR        PC,TTOUT
10$:        CLR        R1
        BIC        #IDE!INDATA!CHAR,R4
1$:        JSR        PC,NINP
        BIT        #CHAR,R4
        BNE        2$
        BIS        #INDATA,R4
        ASL        R1
        ASL        R1
        ASL        R1
        ADD        R0,R1
        BR        1$
2$:        CMPB        R0,#73
        BEQ        101$
        CMPB        R0,#177
        BNE        3$
        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,TTOUT
        BIC        #7,R1
        CLC
        ROR        R1
        ROR        R1
        ROR        R1
        BR        1$
3$:        MOV        #COMCHR,R2
4$:        CMPB        R0,(R2)
        BEQ        5$
        INC        R2
        TSTB        (R2)
        BEQ        1$
        BR        4$
5$:        MOV        (SP)+,R2
        RTS        PC
NINP:        JSR        PC,TTINP
        MOVB        R0,R3
        BIC        #177607,R3
        CMP        #60,R3
        BNE        1$
        JSR        PC,TTOUT
        BIC        #177770,R0
        BIC        #CHAR,R4
        BR        2$
1$:        BIS        #CHAR,R4
2$:        RTS        PC
TTOUT:        BIC        #200,R0
        CMPB        #177,R0
        BNE        TTYOUT
        MOV        #10,R0
        JSR        PC,TTOUT
        MOV        #40,R0
        JSR        PC,TTOUT
        MOV        #10,R0
TTYOUT:        BIT        #200,@#PRRS
        BEQ        TTYOUT
        MOVB        R0,@#PRD
        RTS        PC
TTINP:        BIT        #200,@#KBRS
        BEQ        TTINP
        MOVB        @#KBD,R0
        BIC        #200,R0
        RTS        PC
NPRINT:        MOV        R1,-(SP)
        BIT        #IDEP,R4
        BEQ        10$
        MOV        #40,R0
        JSR        PC,TTOUT
10$:        BIT        #OPM,R4
        BEQ        3$
        MOV        #57,R0
        JSR        PC,TTOUT
3$:        BIT        #LB,R4
        BEQ        4$
        MOV        #134,R0
20$:        JSR        PC,TTOUT
4$:        BIC        #IDEP!LB!OPM,R4
        MOV        #6,R3
        CLR        R0
1$:        ROL        R1
        ROL        R0
        ADD        #60,R0
        JSR        PC,TTOUT
        DEC        R3
        BEQ        2$
        CLR        R0
        ROL        R1
        ROL        R0
        ROL        R1
        ROL        R0
        BR        1$
2$:        MOV        (SP)+,R1
        RTS        PC
INIMES:        .ASCIZ        <33>/H/<33>/J/
        .EVEN
M1$:        JSR        R0,PRINT
        .ASCIZ        <44><100>
        .EVEN
CRLF:        JSR        R0,PRINT
        .ASCIZ        <15><12>
        .EVEN
PROMPT:        JSR        R0,PRINT
        .ASCIZ        <15><12>/@/
        .EVEN
HALTI:        JSR        R0,PRINT
        .ASCIZ        <15><12>/Halt instruction/
        .EVEN
DBUSER:        JSR        R0,PRINT
        .ASCIZ        <15><12>/Double bus error/
        .EVEN
INTERR:        JSR        R0,PRINT
        .ASCIZ        <15><12>/Interrupt error/
        .EVEN
BUSER:        JSR        R0,PRINT
        .ASCIZ        <15><12>/Bus error/
        .EVEN
NODEV:        JSR        R0,PRINT
        .ASCIZ        <15><12>/Device's not available/
        .EVEN
PRINT:        TSTB        (R0)
        BNE        1$
        MOV        (SP)+,R0
        RTS        PC
1$:        BIT        #200,@#PRRS
        BEQ        1$
        MOVB        (R0)+,@#PRD
        BR        PRINT
COMCHR:        .BYTE        53      ; SHIFT+;
        .BYTE        115      ; M
        .BYTE        57      ; /
        .BYTE        15      ; cr
        .BYTE        12      ; lf
        .BYTE        136      ; ^
        .BYTE        100      ; @
        .BYTE        137      ; _
        .BYTE        122      ; R
        .BYTE        107      ; G
        .BYTE        120      ; P
        .BYTE        123      ; S
        .BYTE        77      ; SHIFT+/
        .BYTE        76      ; >
        .BYTE        134      ; \
        .BYTE        174      ; SHIFT+\
        .BYTE        102      ; B
        .BYTE        140      ; SHIFT+@
        .BYTE        0
RCMCH:        .BYTE        53      ; SHIFT+;
        .BYTE        12      ; lf
        .BYTE        136      ; ^
        .BYTE        100      ; @
        .BYTE        140      ; SHIFT+@
        .BYTE        15      ; cr
        .BYTE        0
        .EVEN
SRT:        .WORD        INIR,WHY,OPENU,ENTER,OPENI,OPEND,OPENA
        .WORD        OPENID,OPENR,GOTO,CSTEP,SYSGO,OPENS,GOB
        .WORD        OPENBU,OPENBS,LOAD,OPENAS
SRTR:        .WORD        INIRFR,OPENRI,OPENRD,OPENRA,OPENRS,CLOSER
SG1:        MOV        R3,@#SEL1
        HALT
        MOV        #HALTM,@#SEL1
        RTS        PC
SG2:        MOV        #HALTM,@#SEL1
        .WORD        137
SG3:        HALT
TDEV:        .ASCII        /DY/
        .WORD        177170,DYSRC,10000,DYEND
        .ASCII        /DX/
        .WORD        177170,DXSRC,10000,DXEND
        .ASCII        /DK/
        .WORD        177404,RKSRC,10000,RKEND
        .ASCII        /MT/
        .WORD        172522,MTSRC,10000,MTEND
        .ASCII        /DW/
        .WORD        174020,DWSRC,10000,DWEND
        .ASCII        /MY/
        .WORD        172140,MYSRC,10000,MYEND
        .ASCII        /MX/
        .WORD        177130,MXSRC,10000,MXEND
        .ASCII        /BY/
        .WORD        177130,BYSRC,10000,BYEND
        .ASCII        /BT/
        .WORD        100002,BTSRC,37000,DLDRV
        .ASCII        /BL/
        .WORD        100002,BLSRC,37700,BLEND
        .ASCII        /BF/
        .WORD        176560,BFSRC,10000,BFEND
        .ASCII        /PR/
        .WORD        177550,PRSRC,10000,PREND
        .WORD        0
READER:        MOV        #FSMM,@#VBE
        MOV        R4,R3
        BIC        #177767,R3
        BIS        #320,R3
        MOV        #11501,@#BWR+4
        JSR        PC,@#BWR
        CLR        @#VBE
        RTS        PC
WRITER:        MOV        #FSMM,@#VBE
        BIT        #HALT,R4
        BEQ        1$
        MOV        #HALTM,R3
        CMP        R5,#177677
        BHI        2$
        CMP        R5,#177600
        BLO        2$
3$:        JMP        HIEN
1$:        MOV        #USERM,R3
        CMP        R5,#177657
        BHI        2$
        CMP        R5,#177642
        BHIS        3$
2$:        MOV        #10115,@#BWR+4
        JSR        PC,@#BWR
        CLR        @#VBE
        RTS        PC
TRINI:        MOV        #BWR,R2
        MOV        #SG1,R3
1$:        MOV        (R3)+,(R2)+
        CMP        R3,#SG2
        BNE        1$
        RTS        PC
INIRFR:        MOV        @#BFU,R5
INIR:        MOV        #73,R0
        JSR        PC,TTOUT
        JMP        WORK
WHY:        JSR        PC,TTOUT
        MOV        @#HDM,R0
        CMP        R0,#11
        BNE        1$
        JSR        PC,INTERR
        BR        4$
1$:        CMP        R0,#13
        BNE        2$
        JSR        PC,DBUSER
        BR        4$
2$:        CMP        R0,#10
        BNE        4$
        JSR        PC,HALTI
4$:        JMP        WORK
OPENU:        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,R5
1$:        BIC        #HALT,R4
        BIC        #BYTE,R4
        JMP        MMSR
ENTER:        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        JMP        WORK
OPENI:        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        INC        R5
        INC        R5
        JMP        MMSR1
OPEND:        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        DEC        R5
        DEC        R5
        JMP        MMSR1
OPENA:        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        JSR        PC,READER
        MOV        R1,R5
        JMP        MMSR1
OPENAS:        JSR        PC,M1$
        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        JSR        PC,READER
        MOV        R1,R5
        MOV        R4,R3
        COM        R3
        BIC        #177767,R3
        BIC        #HALT,R4
        BIS        R3,R4
        JMP        MMSR1
OPENID:        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        JSR        PC,READER
        ADD        R1,R5
        INC        R5
        INC        R5
        JMP        MMSR1
OPENR:        MOV        R5,@#BFU
        JSR        PC,TTOUT
2$:        JSR        PC,NINP
        BIT        #CHAR,R4
        BEQ        MRG
        CMP        R0,#123      ; S
        BNE        2$
        JSR        PC,TTOUT
        BIS        #OPM,R4
        MOV        @#VRS,R1
        JSR        PC,NPRINT
        BIS        #IDE,R4
1$:        JSR        PC,NINPUT
        CMP        R0,#15
        BNE        1$
        BIT        #INDATA,R4
        BEQ        3$
        BIC        #177400,R1
        MOV        R1,@#VRS
3$:        JMP        WORK
MRG:        MOV        R0,R5
        ASL        R5
        ADD        #VR0,R5
        BR        MRG2
MREG:        JSR        PC,CRLF
        MOV        #122,R0
        JSR        PC,TTOUT
MRG1:        MOV        R5,R0
        SUB        #VR0,R0
        ASR        R0
        ADD        #60,R0
        JSR        PC,TTOUT
MRG2:        BIS        #OPM,R4
        MOV        @R5,R1
        JSR        PC,NPRINT
        BIS        #IDE,R4
REP2:        JSR        PC,NINPUT
        MOV        #RCMCH,R2
        MOV        #SRTR,R3
1$:        CMPB        R0,(R2)
        BEQ        2$
        INC        R2
        TSTB        (R2)
        BEQ        REP2
        TST        (R3)+
        BR        1$
2$:        JMP        JUMP
OPENRI:        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,(R5)
1$:        INC        R5
        INC        R5
        CMP        R5,#VRS
        BNE        2$
        MOV        #VR0,R5
2$:        BR        MREG
OPENRD:        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,(R5)
1$:        DEC        R5
        DEC        R5
        CMP        R5,#HDM
        BNE        2$
        MOV        #VPC,R5
2$:        BR        MREG
OPENRA:        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,(R5)
1$:        MOV        (R5),R5
        BIC        #HALT,R4
        JMP        MMSR1
OPENRS:        JSR        PC,M1$
        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,(R5)
1$:        MOV        (R5),R5
        BIS        #HALT,R4
        JMP        MMSR1
CLOSER:        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,(R5)
1$:        MOV        @#BFU,R5
        JMP        WORK
GOTO:        JSR        PC,TTOUT
        CLR        R0
        JSR        PC,TTOUT
        RESET
        MOV        R1,@#CPC
        BR        GO
CSTEP:        JSR        PC,TTOUT
        BIT        #ADL,@#TMR
        BNE        2$
1$:        BIT        #200,@#PRRS
        BEQ        1$
        MOV        @#CTM,@#TMR
        BIT        #100000,@#TMR
        BEQ        2$
        BIS        #ADL,@#TMR
2$:        MOV        #VR0,SP
        MOV        (SP)+,R0
        MOV        (SP)+,R1
        MOV        (SP)+,R2
        MOV        (SP)+,R3
        MOV        (SP)+,R4
        MOV        (SP)+,R5
        MOV        (SP)+,SP
        MOV        @#VPC,@#CPC
        MOV        @#VRS,@#CRS
        CLR        @#VBE
        STEP
SYSGO:        JSR        PC,TTOUT
        CLR        R0
        JSR        PC,TTOUT
        RESET
        MOV        #SG2,R2
        MOV        #BWR,R3
1$:        MOV        (R2)+,(R3)+
        CMP        R2,#SG3
        BNE        1$
        MOV        R1,@#BWR+10
        MOV        #BWR,@#CPC
GO:        MOV        #340,@#CRS
        MOV        #VR0,SP
        MOV        (SP)+,R0
        MOV        (SP)+,R1
        MOV        (SP)+,R2
        MOV        (SP)+,R3
        MOV        (SP)+,R4
        MOV        (SP)+,R5
        MOV        (SP),SP
        CLR        @#VBE
        START
OPENS:        MOV        #44,R0
        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,R5
1$:        BIS        #HALT,R4
        BIC        #BYTE,R4
        BR        MMSR
GOB:        JSR        PC,TTOUT
        BIT        #INDATA,R4
        BEQ        1$
        JSR        PC,WRITER
1$:        JSR        PC,READER
        BIC        #177400,R1
        BIT        #200,R1
        BEQ        3$
        BIC        #200,R1
        COM        R1
        BIC        #177600,R1
        ASL        R1
        SUB        R1,R5
4$:        BR        MMSR1
3$:        ASL        R1
        ADD        R1,R5
        ADD        #2,R5
        BR        MMSR1
OPENBU:        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,R5
1$:        BIC        #HALT,R4
        BIS        #BYTE,R4
        BR        MMSR
OPENBS:        BIT        #INDATA,R4
        BEQ        1$
        MOV        R1,R5
1$:        BIS        #HALT,R4
        BIS        #BYTE,R4
        MOV        #44,R0
        JSR        PC,TTYOUT
        BR        MMSR
MMSR1:        JSR        PC,CRLF
        BIT        #HALT,R4
        BEQ        1$
        MOV        #44,R0
        JSR        PC,TTOUT
1$:        MOV        R5,R1
        JSR        PC,NPRINT
MMSR:        MOV        #57,R0
        JSR        PC,TTOUT
        JSR        PC,READER
        MOV        R1,R2
        JSR        PC,NPRINT
        BIT        #BYTE,R4
        BEQ        1$
        MOV        #40,R0
        JSR        PC,TTOUT
        MOV        R1,R0
        BIC        #177600,R0
        CMP        R0,#40
        BGE        2$
        MOV        #40,R0
2$:        JSR        PC,TTYOUT
        MOV        R1,R0
        SWAB        R0
        BIC        #177600,R0
        CMP        R0,#40
        BGE        3$
        MOV        #40,R0
3$:        JSR        PC,TTYOUT
        BIS        #IDEP,R4
        BIC        #177400,R1
        JSR        PC,NPRINT
        MOV        R2,R1
        SWAB        R1
        BIC        #177400,R1
        BIS        #LB,R4
        JSR        PC,NPRINT
1$:        BIS        #IDE,R4
        JMP        RP
LOAD:        JSR        PC,TTOUT
        JSR        PC,CRLF
        JSR        PC,TRINI
        MOV        #44,R0
        JSR        PC,TTOUT
        MOV        #BFU,R2
        JSR        PC,TTINP
        JSR        PC,TTYOUT
        MOVB        R0,(R2)+
        JSR        PC,TTINP
        JSR        PC,TTYOUT
        MOVB        R0,(R2)+
        JSR        PC,TTINP
        JSR        PC,TTYOUT
        BIC        #177770,R0
        MOV        R0,-(SP)
        MOV        @#BFU,R1
        MOV        #TDEV,R0
1$:        CMP        R1,(R0)
        BEQ        2$
        ADD        #12,R0
        TST        (R0)
        BNE        1$
        JMP        WORK
2$:        MOV        2(R0),R5
        MOV        #FSBTD,@#VBE
        MOV        #USERM,R3
        MOV        #5715,@#BWR+4
        JSR        PC,@#BWR
        MOV        #FSMM,@#VBE
        MOV        #10215,@#BWR+4
        MOV        4(R0),R1
        MOV        6(R0),R5
10$:        MOV        (R1)+,R2
        JSR        PC,@#BWR
        INC        R5
        INC        R5
        CMP        R1,10(R0)
        BNE        10$
        JSR        PC,CRLF
        RESET
        MOV        6(R0),@#CPC
        MOV        (SP)+,R0
        MOV        #340,@#CRS
        CLR        @#VBE
        MOV        #10000,SP
        START
;BOOTSTRAP
DXSRC:        BIC        #177776,R0
        TST        R0
        BEQ        1000$
        MOV        #100267,R2
        BR        1$
1000$:        MOV        #100247,R2
        MOV        #40000,@#177170
1$:        MOV        #177170,R1
2$:        BITB        R2,(R1)
        BEQ        2$
        MOVB        #7,R3
        MOV        R1,R0
        MOV        R2,(R0)+
        BR        4$
3$:        MOV        #1,(R0)
4$:        ASR        R3
        BCS        6$
        MOVB        (PC)+,(R1)
5$:        MOVB        (R0),(R3)+
6$:        BIT        R2,(R1)
        BEQ        6$
        BMI        1$
        BCS        3$
        TSTB        (R1)
        BMI        5$
        CLR        R0
        CMP        #240,(R0)
        BNE        1$
        CMPB        #247,R2
        ADC        R0
        CLR        PC
DXEND:        HALT
DYSRC:        BIC        #177776,R0
        TST        R0
        BEQ        1000$
        MOV        #420,R0
        BR        1$
1000$:        MOV        #400,R0
1$:        MOV        #177170,R3
        MOV        #177172,R4
        MOV        #401,R5
        MOV        #200,R1
        BIT        #400,R0
        BNE        2$
        ASL        R1
2$:        CLR        R2
3$:        BIC        #177357,R0
4$:        BIS        #7,R0
5$:        MOV        R0,(R3)
6$:        BIT        #100200,(R3)
        BEQ        6$
        BMI        5$
        MOVB        R5,(R4)
7$:        BIT        #100200,(R3)
        BEQ        7$
        BMI        5$
        SWAB        R5
        MOVB        R5,(R4)
        SWAB        R5
8$:        BIT        #100040,(R3)
        BEQ        8$
        BMI        4$
        BIC        #177357,R0
        BIS        #3,R0
9$:        MOV        R0,(R3)
10$:        BIT        #100200,(R3)
        BEQ        10$
        BMI        9$
        MOV        R1,(R4)
11$:        BIT        #100200,(R3)
        BEQ        11$
        BMI        9$
        MOV        R2,(R4)
12$:        BIT        #100040,(R3)        
        BEQ        12$
        BMI        9$
        CMPB        (R5)+,(R5)+
        ADD        R1,R2
        ADD        R1,R2
        CMP        R2,#1000
        BCS        3$
        MOV        R0,R1
        CLR        R0
        BIT        #20,R1
        BEQ        13$
        INC        R0
13$:        BIC        #177377,R1
        CLR        PC
DYEND:        HALT
MXSRC:        MOV        #177130,R1
44$:        BIC        #177774,R0
        MOV        #10000,SP
        MOV        R0,-(SP)
        MOV        R1,R4
        MOV        #000100,(R4)
        MOV        #177777,R5
70$:        SOB        R5,70$
        ASL        R0
        ASL        R0
        BIS        R0,(R4)
        MOV        #047040,R5
104$:        SOB        R5,104$
        JSR        PC,322$
        MOV        R4,R5
        TST        (R5)+
        CLR        R0
        MOV        #001000,R1
        BIS        #040000,(R4)
130$:        TST        (R4)
        BPL        130$
        TST        (R5)
136$:        TST        (R4)
        BPL        136$
        TST        (R5)
        JSR        PC,234$
        MOV        #001000,R0
        MOV        #001600,R1
        JSR        PC,234$
        BIC        #040000,(R4)
        MOV        #000200,R1
        BIS        #010000,(R4)
        BIS        #040000,(R4)
204$:        TST        (R4)
        BPL        204$
        TST        (R5)
212$:        TST        (R4)
        BPL        212$
        TST        (R5)
        JSR        PC,234$
        BIC        #40000,(R4)
        CLR        PC
234$:        MOV        #000200,R3
        CLR        -(SP)
242$:        TST        (R4)
        BPL        242$
        MOV        (R5),(R0)
        ADD        (R0)+,(SP)
        DEC        R1
        BEQ        260$
        SOB        R3,242$
260$:        TST        (R4)
        BPL        260$
        CMP        (R5),(SP)+
        BEQ        300$
        TST        (SP)+
        MOV        (SP),R0
        JMP        MXSRC
300$:        TST        R1
        BNE        234$
        RTS        PC
306$:        BIS        #000020,(R4)
        MOV        #023420,R5
316$:        SOB        R5,316$
        RTS        PC
322$:        BIC        #000040,(R4)
326$:        BIT        #004000,(R4)
        BNE        342$
        JSR        PC,306$
        BR        326$
342$:        RTS        PC
MXEND:        HALT
PRSRC:        JSR        PC,PRINS
        BR        100$
1$:        HALT
100$:        MOV        PC,SP
        CMP        -(SP),-(SP)
        MOV        PC,R5
        ADD        #112,R5
        CLR        R1
2$:        MOV        #0,(SP)
        ROR        (SP)
        BCS        3$
        CLR        (SP)
        BR        4$
3$:        ASL        (SP)
        BNE        4$
        MOV        R1,(SP)
4$:        CLR        R0
        JSR        PC,(R5)
        DECB        R3
        BNE        4$
        JSR        PC,(R5)
        JSR        PC,9$
        MOV        R4,R2
        SUB        #4,R2
        CMP        #2,R2
        BEQ        10$
        JSR        PC,9$
        ADD        (SP),R4
        MOV        R4,R1
5$:        JSR        PC,(R5)
        BGE        7$
        TSTB        R0
        BEQ        4$
6$:        HALT
        BR        4$
7$:        MOVB        R3,(R1)+
        BR        5$
        MOV        17$,R3
        INCB        (R3)
8$:        TSTB        (R3)
        BPL        8$
        MOVB        2(R3),R3
        ADD        R3,R0
        BIC        #177400,R3
        DEC        R2
        RTS        PC
9$:        MOV        (SP)+,12$
        JSR        PC,(R5)
        MOV        R3,R4
        JSR        PC,(R5)
        SWAB        R3
        BIS        R3,R4
        MOV        12$,PC
10$:        JSR        PC,9$
        JSR        PC,(R5)
        TSTB        R0
        BNE        6$
        ASR        R4
        BCC        11$
        HALT
        BR        2$
11$:        ASL        R4
        ADD        (SP),R4
        JMP        (R4)
12$:        .WORD        0
        MOV        #352,14$
        MOV        #765,16$
        JMP        1$
        MOV        17$,R1
        MOV        (PC)+,R2
14$:        .WORD        352
        INC        (R1)
15$:        TSTB        (R1)
        BPL        15$
        MOVB        2(R1),157400(R2)
        INC        14$
16$:        .WORD        765
17$:        .WORD        177550
PRINS:        MOV        PC,R1
        BR        PRFIN+2
PRBEG:        .WORD        0
PRFIN:        .WORD        0
        SUB        #2,R1
        MOV        R1,PRFIN
        MOV        (SP)+,PRBEG
        MOV        @#6,-(SP)
        MOV        @#4,-(SP)
        JSR        PC,1$
        CMP        (SP)+,(SP)+
        DEC        R2
        BR        PROUT
1$:        MOV        (SP)+,@#4
        MOV        #340,@#6
        MOV        #16,R2
PROUT:        MOV        R2,R5
        MOV        #14,R3
1$:        ASL        R5
        SOB        R3,1$
        BIS        #7474,R5
        MOV        PRBEG,R4
2$:        MOV        (R4)+,(R5)+
        CMP        R4,PRFIN
        BNE        2$
        MOV        #14,R3
3$:        ASL        R2
        SOB        R3,3$
        BIS        #7474,R2
        MOV        (SP)+,@#4
        MOV        (SP)+,@#6
        JMP        (R2)
PREND:        HALT
MTSRC:        MOV        PC,R2
        BR        10$
        .WORD        172524
        .WORD        60003
        .WORD        60011
        .WORD        200
        .WORD        100000
10$:        MOV        R2,R0
        TST        (R0)+
        MOV        (R0)+,R1
        DEC        (R1)
        TST        (R0)+
        MOV        (R0)+,-(R1)
1$:        BIT        (R0),(R1)
        BEQ        1$
        TST        (R0)+
        BIT        (R0),-(R1)
        BEQ        2$
6$:        JMP        (R2)
2$:        MOV        R2,R0
        TST        (R0)+
        MOV        (R0)+,R1
        MOV        #177000,(R1)
        MOV        (R0),-(R1)
5$:        BIT        #100200,(R1)
        BEQ        5$
        BMI        6$
        CLR        PC
MTEND:        HALT
RKSRC:        TST        R0
        BNE        10$
        MOV        PC,R2
        BR        1$
10$:        MOV        PC,R2
        MOV        #20000,@#177412
1$:        MOV        #177000,@#177406
        MOV        #5,@#177404
2$:        BIT        #100200,@#177404
        BEQ        2$
        BMI        3$
        CLR        PC
3$:        JMP        (R2)
RKEND:        HALT
DWSRC:        MOV        #174020,R1
1$:        MOV        #10,(R1)
2$:        TST        (R1)
        BMI        2$
        MOV        #1,@#174006
        MOV        #40,@#174016
3$:        TST        (R1)
        BMI        3$
        CLR        R2
        MOV        #400,R3
4$:        TSTB        (R1)
        BPL        4$
        MOV        @#174010,(R2)+
        SOB        R3,4$
        CMP        #240,(R3)
        BNE        1$
        CLR        PC
DWEND:        HALT
MYSRC:        MOV        #172140,R1
        BIC        #177774,R0
1$:        BIT        #100040,(R1)
        BEQ        1$
        MOV        #37,(R1)
2$:        TSTB        (R1)
        BPL        2$
        MOV        R0,@#172142
3$:        BIT        #100040,(R1)
        BEQ        3$
        BMI        1$
        CMP        @#0,#240
        BNE        1$
        CLR        PC
MYEND:        HALT
BLSRC:        MOV        #1000,SP
        MOV        R0,-(SP)
        CMP        @#100000,#167
        BNE        1$
        CMP        @#100002,#254
        BNE        1$
        JSR        PC,@#100140
        MOV        (SP)+,R0
        BIC        #177770,R0
        EMT        40
        JSR        PC,@#100656
        MOV        @#264,R5
        JMP        @R5
1$:        MOV        #HALTM,@#SEL1
        MOV        #FSBTD,@#VBE
        MOV        #HSP,SP
        HALT
BLEND:        HALT
BFSRC:        JSR        PC,BFINS
BTSRC:        MOV        PC,R1
        MOV        #1000,SP
        CLR        R5
        CMP        R1,#37002
        BNE        6000$
        CMP        @#100000,#167
        BNE        2111$
        CMP        @#100002,#254
        BNE        2111$
        JSR        PC,@#100140
        MOV        #1,R5
6000$:        MOV        #12,R2
        JSR        R0,100$
        .ASCIZ        <12><15>/Name:/
        .EVEN
2111$:        MOV        #HALTM,@#SEL1
        MOV        #FSBTD,@#VBE
        MOV        #HSP,SP
        HALT
100$:        TSTB        (R0)
        BEQ        111$
110$:        BIT        #200,@#PRRS
        BEQ        110$
        MOVB        (R0)+,@#PRD
        BR        100$
111$:        TST        (SP)+
        CLR        @#322
        MOV        #326,R1
1$:        BIT        #200,@#KBRS
        BEQ        1$
        MOV        @#KBD,R0
        CMP        R0,#177
        BNE        4$
        MOV        #10,R4
        JSR        PC,7100$
        MOV        #40,R4
        JSR        PC,7100$
        MOV        #10,R4
        JSR        PC,7100$
        INC        R2
        DEC        R1
        BR        1$
4$:        CMP        R0,#15      ;CR
        BEQ        2$
        MOVB        R0,(R1)+
        MOV        R0,R4
        JSR        PC,7100$
        SOB        R2,1$
        BR        3$
2$:        MOVB        #40,(R1)+
        SOB        R2,2$
3$:        MOV        #20040,(R1)+
        MOV        #20040,(R1)+
        MOV        #20040,(R1)+
        MOV        #3,@#320
        MOV        #320,R1
        TST        R5
        BEQ        10$
        JSR        PC,@#116076      ;BT
        BR        20$
10$:        BIT        #ADL,@#TMR
        BEQ        1333$
        SWAB        @#TMR
1333$:        JSR        PC,DLDRV      ;BF
20$:        TSTB        @#321
        BEQ        5$
        CMPB        @#321,#1
        BEQ        6$
        JSR        R0,8$
        .ASCIZ        <12><15>/?FT-F-I/<57>/O error/
        .EVEN
6$:        JSR        R0,8$
        .ASCIZ        <12><15>/?FT-F-File not found/
        .EVEN
5$:        MOV        @#264,R5
        JMP        (R5)
8$:        TSTB        (R0)
        BNE        84$
        HALT
84$:        MOVB        (R0)+,R4
        JSR        PC,7100$
        BR        8$
7100$:        BIT        #200,@#PRRS
        BEQ        7100$
        MOVB        R4,@#PRD
        RTS        PC
DLDRV:        CLR        @#RSLR
        CLR        @#RSLT
        CLR        R5                
        MOVB        @#RDLR,R0        
        MOVB        (R1)+,R0        
        JSR        PC,$TR                
        JSR        PC,$RD                
        MOV        R1,R2                
        ADD        #5,R2                
        MOV        #12,R3                
1$:        MOVB        (R2)+,R0        
        JSR        PC,$TR                
        SOB        R3,1$                
        MOV        #4,R3                
        JSR        PC,$RD                
        MOVB        R0,(R1)+        
        BNE        2$                
        ADD        #6,R2                
4$:        JSR        PC,$RD                
        MOVB        R0,(R2)+        
        SOB        R3,4$                
        MOV        -(R2),R3        
        BEQ        2$                
        TST        (R1)                
        BEQ        5$                
        MOV        (R1),R2                
        BR        6$                
5$:        MOV        -(R2),R2        
        MOV        R2,@#264
6$:        JSR        PC,$RD                
        MOVB        R0,(R2)+        
        ADD        R0,R5                
        SOB        R3,6$                
7$:        JSR        PC,$RD                
        CMPB        R0,R5                
        BEQ        9$                
        MOVB        #2,-(R1)        
9$:        MOV        R5,R0                
        JSR        PC,$TR                
2$:        RTS        PC
$RD:        TSTB        @#RSLR
        BPL        $RD                
        MOVB        @#RDLR,R0        
        RTS        PC                
$TR:        TSTB        @#RSLT
        BPL        $TR                
        MOVB        R0,@#RDLT
        RTS        PC
BFINS:        MOV        PC,R1
        BR        BFFIN+2
BFBEG:        .WORD        0
BFFIN:        .WORD        0
        SUB        #2,R1
        MOV        R1,BFFIN
        MOV        (SP)+,BFBEG
        MOV        @#6,-(SP)
        MOV        @#4,-(SP)
        JSR        PC,1$
        CMP        (SP)+,(SP)+
        DEC        R2
        BR        BFOUT
1$:        MOV        #340,@#6
        MOV        (SP)+,@#4
        MOV        #16,R2
BFOUT:        MOV        R2,R5
        MOV        #14,R3
1$:        ASL        R5
        SOB        R3,1$
        BIS        #7010,R5
        MOV        BFBEG,R4
2$:        MOV        (R4)+,(R5)+
        CMP        R4,BFFIN
        BNE        2$
        MOV        #14,R3
3$:        ASL        R2
        SOB        R3,3$
        BIS        #7010,R2
        MOV        (SP)+,@#4
        MOV        (SP)+,@#6
        JMP        (R2)
BFEND:        HALT
BYSRC:        MOV        #1000,SP
        MOV        @#6,-(SP)
        MOV        @#4,-(SP)
        JSR        PC,11$
        CMP        (SP)+,(SP)+
111$:        MOV        (SP)+,@#4
        MOV        (SP)+,@#6
        MOV        #HALTM,@#SEL1
        MOV        #FSBTD,@#VBE
        MOV        #HSP,SP
        HALT
11$:        MOV        (SP)+,@#4
        MOV        #340,@#6
        CMP        @#160000,#410      ; boot if 1801RE2-253 or -326
        BEQ        301$              ;
        CMP        @#160000,#406      ;
        BNE        111$
301$:        BIC        #177774,R0
        MOV        #2000,R3
        JSR        PC,@#160010
        MOV        #2000,12(R3)
        CLR        22(R3)
        MOVB        R0,34(R3)
300$:        CLR        R0
        MOV        #400,R1
        MOV        #1000,R2
        JSR        PC,@#160004
        BCS        300$
        MOVB        34(R3),R0
        CMP        @#1000,#240
        BNE        301$
        MOV        (SP)+,@#4
        MOV        (SP)+,@#6
        JMP        @#1000
BYEND:        HALT
.=base+7760
        .ASCII        /© 1993 by fLRL/
.=base+17776
        .END        ST

Anonymous
Версия, выложенная вами, мой была опубликована с целью показать собеседнику, как приблизительно должен быть устроен отладчик.
Если выкладывать на форуме, то уж версию не требующую наличия специфических и сложных для повторения регистров, ну и с более корректной эмуляцией кнопки СТОП.
Ниже привожу более поздний вариант, конечно тоже требующий причесывания на вкус пользователя, но желающий от блока только ОЗУ по адресам 0177600..0177657 и 0177670..0177677, микросхемы компорта 1801ВП1-065 или -035, триггера, фиксирующего состояние 03го разряда регистра SEL1 и отключающего ПЗУ монитора, ну и ПЗУ с кодом по тем же адресам, что и монитор. Кто с паяльником дружит - за час спаяет такой блок. smile.gif Тесты вызываются командой T, введенное перед буквой число передается в регистре, но сами тесты не реализованы в приведенном коде, пусть кто-нибудь их допишет, у меня были тесты прошиты в пзу кнгмд, штатные из ТМОС СМ и ДВК. Еще, наряду с фиксатором 03го разряда SEL1, имеется возможность читать состояние какой-либо управляющей клавиши или внешней кнопки в 01м разряде SEL1, задача ее - модификация поведения отладчика: при отработке программы начального пуска, ее удержание провоцирует установку режима эмуляции кнопки СТОП и автозагрузку, а во время обработки нажатия на СТОП - наоборот, заставляет игнорировать установленный режим эмуляции.

Код

; MicroODT for BK0010 / BK0011M / DVK-1(NC80) / MS1201.0 / MS1201.1 / NMS11100.1

.mcall    .addr

base=160000;rom address

bt.dx=1    ;RX11/01 / GMD-7012 LOADER
bt.dy=0    ;RX11/02 LOADER
bt.rk=1    ;RK05 / SM5400 LOADER
bt.mt=1    ;TM11 / SM5300 TAPE LOADER
bt.pr=1    ;PAPER TAPE / LDA LOADER
bt.zdw=1;DVK DW MFM-HDD LOADER, ZELENOGRAD
bt.mx=1    ;DVK MX KNGMD LOADER
bt.my=1    ;DVK MY KMD LOADER
bt.bha=1;SCSI ADAPTIVE SBIC WD33C93 LOADER
bt.bhs=0;OLD SBIC LOADER; DUMB, BUT COMPACT; TAPE ID MUST BE 03
bt.bf=1    ;BASIC KUVT86 NETWORK LOADER
bt.bt=1    ;BK0010 TAPE LOADER, !its HUGE!
bt.vt=1    ;VIRTUAL TAPE LOADER
bt.by=1    ;BY KNGMD LOADER
bt.bl=0    ;BK0010 SERIAL LINE LOADER

test.en=1;ram test; scroll down to TSC label and put some tests there! now its just passing control to user rom

RSLR=176560;KUVT86 network adapter address
PRCSR=177550;paper tape reader / LDA port address
KBRS=177560;console port

;equations below: do not change!

HRAM=177640;work SRAM
BWR=177642;locked SRAM; hardware locking canceled!
VBE=177670
bt.bft=bt.bt+bt.bf
VBH=VBE+2
HSP=HRAM-24;stack
HDM=HRAM-24;14
VR0=HRAM-22;16
VR1=HRAM-20;20
VR2=HRAM-16;22
VR3=HRAM-14;24
VR4=HRAM-12;26
VR5=HRAM-10;30
VSP=HRAM-6;32
VPC=HRAM-4;34
VRS=HRAM-2;36
BFU=HRAM;40
CPC=177674
SEL1=177716
KBD=KBRS+2
PRRS=KBRS+4
PRD=KBRS+6
CRS=CPC+2
STEP=16
START=12
ADL=200
CHAR=1
INDATA=2
HALT=10
OPM=4
BYTE=20
IDE=40
LB=100
IDEP=200
HALTM=330
USERM=320
FSMM=123456
FSBTD=112233
FSHEE=125123


    .ASECT
.=base

ST:    BR    INI
    .WORD    HIEN
    .WORD    2340
    .WORD    DBEN
    .WORD    2340
    .WORD    IEEN
    .WORD    2340
HLT:    HALT
INI:    MOV    #HALTM,@#SEL1
    MOV    #100,R2
10$:    MOV    #230,@#SEL1
    MOV    #60,R4
20$:    SOB    R4,20$
    MOV    #330,@#SEL1
    MOV    #60,R4
30$:    SOB    R4,30$
    SOB    R2,10$
    CLR    @#VBE
    CLRB    @#VBH
    BIT    #2,@#SEL1
    beq    1$
    comb    @#vbh
    MOV    #1000,SP
    MOV    #160000,@#CPC;autoboot
    MOV    #340,@#CRS
    START
1$:    MOV    #ST,R4
    CLR    R2
2$:    ADD    (R4)+,R2
    ADC    R2
    CMP    R4,#BLK0
    BNE    2$
    cmp    R2,#177777
    BEQ    4$
    MOV    #CERR,R1
    BR    100$
4$:    MOV    #INIMES,R1
100$:    BIT    #200,@#PRRS
    BEQ    100$
    MOVB    (R1)+,@#PRD
    BNE    100$
    BR    HLT
IEEN:    MOV    #11,@#HDM
    BR    EN
DBEN:    MOV    #13,@#HDM
    BR    EN
HIEN:    CMP    @#VBE,#FSMM
    BNE    2$
    JSR    PC,BUSER
    JSR    PC,err2
    BR    WORK
2$:    CMP    @#VBE,#FSBTD
    BNE    3$
    JSR    PC,NODEV
    BR    WORK
3$:    cmp    @#vbe,#fshee
    bne    5$
    mov    #12,@#hdm
    br    en
5$:    bit    #2,@#sel1
    bne    4$
    tstb    @#vbh
    beq    4$

;[STOP] emulation
    mov    r0,@#bfu; 177640
    mov    r1,@#bwr; 177642
    mov    #177600,r0
    mov    #SG0,r1
10$:    mov    (r1)+,(r0)+
    cmp    r1,#sg1
    bne    10$
    mov    @#bfu,r0
    mov    @#bwr,r1
    mov    #fshee,@#vbe
    jmp    @#177600


4$:    MOV    #10,@#HDM
EN:    MOV    SP,@#VSP
    MOV    @#CPC,@#VPC
    MOV    @#CRS,@#VRS
    MOV    #VSP,SP
    MOV    R5,-(SP)
    MOV    R4,-(SP)
    MOV    R3,-(SP)
    MOV    R2,-(SP)
    MOV    R1,-(SP)
    MOV    R0,-(SP)
    MOV    #HSP,SP
    CLR    R4
    JSR    PC,PROMPT
    BIS    #IDEP,R4
    MOV    @#VPC,R1
    MOV    R1,R5
    JSR    PC,NPRINT
WORK:    MOV    #HSP,SP
    CLR    @#VBE
    BIC    #IDEP!LB!IDE!BYTE!OPM!INDATA!CHAR,R4
    JSR    PC,TRINI
    JSR    PC,PROMPT
RP:    JSR    PC,NINPUT
    MOV    #COMCHR,R2
    MOV    #SRT,R3
1$:    CMPB    R0,(R2)
    BEQ    JUMP
    INC    R2
    TSTB    (R2)
    BEQ    RP
    TST    (R3)+
    BR    1$
JUMP:    MOV    (R3),R3
    JMP    (R3)
NINPUT:    MOV    R2,-(SP)
    BIT    #IDE,R4
    BEQ    10$
    MOV    #40,R0
101$:    JSR    PC,TTOUT
10$:    CLR    R1
    BIC    #IDE!INDATA!CHAR,R4
1$:    JSR    PC,NINP
    BIT    #CHAR,R4
    BNE    2$
    BIS    #INDATA,R4
    ASL    R1
    ASL    R1
    ASL    R1
    ADD    R0,R1
    BR    1$
2$:    CMPB    R0,#73
    BEQ    101$
    CMPB    R0,#177
    BNE    3$
    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,TTOUT
    BIC    #7,R1
    CLC
    ROR    R1
    ROR    R1
    ROR    R1
    BR    1$
3$:    MOV    #COMCHR,R2
4$:    CMPB    R0,(R2)
    BEQ    5$
    INC    R2
    TSTB    (R2)
    BEQ    1$
    BR    4$
5$:    MOV    (SP)+,R2
    RTS    PC
NINP:    JSR    PC,TTINP
    MOVB    R0,R3
    BIC    #177607,R3
    CMP    #60,R3
    BNE    1$
    JSR    PC,TTOUT
    BIC    #177770,R0
    BIC    #CHAR,R4
    BR    2$
1$:    BIS    #CHAR,R4
2$:    RTS    PC
TTOUT:    BIC    #200,R0
    CMPB    #177,R0
    BNE    TTYOUT
    MOV    #10,R0
    JSR    PC,TTOUT
    MOV    #40,R0
    JSR    PC,TTOUT
    MOV    #10,R0
TTYOUT:    BIT    #200,@#PRRS
    BEQ    TTYOUT
    MOVB    R0,@#PRD
    RTS    PC
TTINP:    BIT    #200,@#KBRS
    BEQ    TTINP
    MOVB    @#KBD,R0
    BIC    #200,R0
    RTS    PC
NPRINT:    MOV    R1,-(SP)
    BIT    #IDEP,R4
    BEQ    10$
    MOV    #40,R0
    JSR    PC,TTOUT
10$:    BIT    #OPM,R4
    BEQ    3$
    MOV    #57,R0
    JSR    PC,TTOUT
3$:    BIT    #LB,R4
    BEQ    4$
    MOV    #134,R0
20$:    JSR    PC,TTOUT
4$:    BIC    #IDEP!LB!OPM,R4
    MOV    #6,R3
    CLR    R0
1$:    ROL    R1
    ROL    R0
    ADD    #60,R0
    JSR    PC,TTOUT
    DEC    R3
    BEQ    2$
    CLR    R0
    ROL    R1
    ROL    R0
    ROL    R1
    ROL    R0
    BR    1$
2$:    MOV    (SP)+,R1
    RTS    PC
CERR:    .ASCII    <15><12><12><7><7>/Wrong SROM checksum! /<7><12>
INIMES:    .ASCIZ    <15><12>/BK0010 Micro ODT v1.4 /
    .EVEN
M1$:    JSR    R0,PRINT
    .ASCIZ    <44><100>
    .EVEN
CRLF:    JSR    R0,PRINT
    .ASCIZ    <15><12>
    .EVEN
PROMPT:    JSR    R0,PRINT
    .ASCIZ    <15><12>/@/
    .EVEN
HALTI:    JSR    R0,PRINT
    .ASCIZ    <15><12>/Halt instruction/
    .EVEN
DBUSER:    JSR    R0,PRINT
    .ASCIZ    <15><12>/Double bus/
    .EVEN
INTERR:    JSR    R0,PRINT
    .ASCIZ    <15><12>/Interrupt/
    .EVEN
ERR2:    JSR    R0,PRINT
    .ASCIZ    / error/
    .EVEN
BUSER:    JSR    R0,PRINT
    .ASCIZ    <15><12>/Bus/
    .EVEN
NODEV:    JSR    R0,PRINT
    .ASCIZ    <15><12>/Device is not available/
    .EVEN
stpe:    jsr    r0,print
    .asciz    <12><15>/[STOP] emulation/
    .even
hena:    jsr    r0,print
    .asciz    / enabled/
    .even
hdis:    jsr    r0,print
    .asciz    / disabled/
    .even
known:    jsr    r0,print
    .asciz    <12><15>/Known devices:/
    .even
PRINT:    TSTB    (R0)
    BNE    1$
    MOV    (SP)+,R0
    RTS    PC
1$:    BIT    #200,@#PRRS
    BEQ    1$
    MOVB    (R0)+,@#PRD
    BR    PRINT
COMCHR:    .BYTE    53; SHIFT+;
    .BYTE    115; M
    .BYTE    57; /
    .BYTE    15; cr
    .BYTE    12; lf
    .BYTE    136; ^
    .BYTE    100; @
    .BYTE    137; _
    .BYTE    122; R
    .BYTE    107; G
    .BYTE    120; P
    .BYTE    123; S
    .BYTE    77; SHIFT+/
    .BYTE    76; >
    .BYTE    134;
    .BYTE    174; SHIFT+
    .BYTE    102; B
    .BYTE    140; SHIFT+@
    .BYTE    110; H
.if ne test.en
    .BYTE    124; T
.endc
    .BYTE    0
RCMCH:    .BYTE    53; SHIFT+;
    .BYTE    12; lf
    .BYTE    136; ^
    .BYTE    100; @
    .BYTE    140; SHIFT+@
    .BYTE    15; cr
    .BYTE    0
    .EVEN
SRT:    .WORD    INIR,WHY,OPENU,ENTER,OPENI,OPEND,OPENA
    .WORD    OPENID,OPENR,GOTO,CSTEP,SYSGO,OPENS,GOB
    .WORD    OPENBU,OPENBS,LOAD,OPENAS,hemul
.if ne test.en
    .word    TSC
.endc
SRTR:    .WORD    INIRFR,OPENRI,OPENRD,OPENRA,OPENRS,CLOSER
SG0:    mov    #userm,@#sel1;0,2,4
    mov    @#cpc,-(sp);6,10
    mov    @#crs,-(sp);12,14
    mov    @#4,@#cpc;16,20,22
    mov    @#6,@#crs;24,26,30
    clr    @#vbe    ;32,34
    step        ;36
SG1:    MOV    R3,@#SEL1
    HALT
    MOV    #HALTM,@#SEL1
    RTS    PC
SG2:    MOV    #HALTM,@#SEL1
    .WORD    137
SG3:    HALT
TDEV:
.if ne bt.dy
    .ASCII    /DY/
    .WORD    177170,DYSRC,10000,DYEND
.endc
.if ne bt.dx
    .ASCII    /DX/
    .WORD    177170,DXSRC,10000,DXEND
.endc
.if ne bt.bha
    .ASCII    /BH/
    .WORD    177730,BHASRC,10000,BHAEND
.endc
.if ne bt.bhs
    .ASCII    /BH/
    .WORD    177730,BHSRC,10000,BHEND
.endc
.if ne bt.rk
    .ASCII    /DK/
    .WORD    177404,RKSRC,10000,RKEND
.endc
.if ne bt.mt
    .ASCII    /MT/
    .WORD    172522,MTSRC,10000,MTEND
.endc
.if ne bt.zdw
    .ASCII    /DW/
    .WORD    174020,DWSRC,10000,DWEND
.endc
.if ne bt.my
    .ASCII    /MY/
    .WORD    172140,MYSRC,10000,MYEND
.endc
.if ne bt.mx
    .ASCII    /MX/
    .WORD    177130,MXSRC,10000,MXEND
.endc
.if ne bt.by
    .ASCII    /BY/
    .WORD    177130,BYSRC,10000,BYEND
.endc
.if ne bt.bt
    .ASCII    /BT/
    .WORD    SEL1,BTSRC,155400,BTEND
.endc
.if ne bt.vt
    .ASCII    /VT/
    .WORD    KBRS,VTSRC,157600,VTEND
.endc
.if ne bt.bl
    .ASCII    /BL/
    .WORD    SEL1,BLSRC,157400,BLEND
.endc
.if ne bt.bf
    .ASCII    /BF/
    .WORD    RSLR,BFSRC,157000,BFEND
.endc
.if ne bt.pr
    .ASCII    /PR/
    .WORD    PRCSR,PRSRC,10000,PREND
.endc
    .WORD    0

.if ne test.en        ; put some tests here! now its just passing control to user rom
TSC:    JSR    PC,TTOUT
    RESET
    mov    #1000,sp
    mov    #340,@#crs
    mov    #164004,@#cpc; jumping to user address space to my own test rom, replace it as you wish
    clr    @#vbe
    start
.endc

hemul:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    beq    1$
    movb    r1,@#vbh
1$:    call    stpe
    mov    #work,-(sp)
    tstb    @#vbh
    bne    2$
    jmp    hdis
2$:    jmp    hena

READER:    MOV    #FSMM,@#VBE
    MOV    R4,R3
    BIC    #177767,R3
    BIS    #320,R3
    MOV    #11501,@#BWR+4
    JSR    PC,@#BWR
    CLR    @#VBE
    RTS    PC

WRITER:    MOV    #FSMM,@#VBE
    CMP    R5,#177717
    BHI    20$
    CMP    R5,#177600
    BLO    20$
    cmp    r5,#177716
    beq    3$
    cmp    r5,#177704
    bhi    20$
    cmp    r5,#177660
    blo    3$
    cmp    r5,#177670
    blo    20$
3$:    JMP    HIEN
20$:    BIT    #HALT,R4
    BEQ    1$
    MOV    #HALTM,R3
    br    2$
1$:    mov    #userm,r3
2$:    MOV    #10115,@#BWR+4
    JSR    PC,@#BWR
    CLR    @#VBE
    RTS    PC


TRINI:    MOV    #BWR,R2
    MOV    #SG1,R3
1$:    MOV    (R3)+,(R2)+
    CMP    R3,#SG2
    BNE    1$
    RTS    PC
INIRFR:    MOV    @#BFU,R5
INIR:    MOV    #73,R0
    JSR    PC,TTOUT
JW:    JMP    WORK
WHY:    JSR    PC,TTOUT
    MOV    @#HDM,R0
    CMP    R0,#11
    BNE    1$
    JSR    PC,INTERR
    JSR    PC,err2
    BR    4$
1$:    CMP    R0,#13
    BNE    2$
    JSR    PC,DBUSER
42$:    JSR    PC,err2
    BR    4$
2$:    CMP    R0,#10
    BNE    41$
    JSR    PC,HALTI
41$:    cmp    r0,#12
    bne    4$
    call    stpe
    br    42$
4$:    BR    JW
OPENU:    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,R5
1$:    BIC    #HALT,R4
    BIC    #BYTE,R4
    JMP    MMSR
ENTER:    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    BR    JW
OPENI:    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    INC    R5
    INC    R5
    JMP    MMSR1
OPEND:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    DEC    R5
    DEC    R5
    JMP    MMSR1
OPENA:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    JSR    PC,READER
    MOV    R1,R5
    JMP    MMSR1
OPENAS:    JSR    PC,M1$
    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    JSR    PC,READER
    MOV    R1,R5
    MOV    R4,R3
    COM    R3
    BIC    #177767,R3
    BIC    #HALT,R4
    BIS    R3,R4
    JMP    MMSR1
OPENID:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    JSR    PC,READER
    ADD    R1,R5
    INC    R5
    INC    R5
    JMP    MMSR1
OPENR:    MOV    R5,@#BFU
    JSR    PC,TTOUT
2$:    JSR    PC,NINP
    BIT    #CHAR,R4
    BEQ    MRG
    CMP    R0,#123; S
    BNE    2$
    JSR    PC,TTOUT
    BIS    #OPM,R4
    MOV    @#VRS,R1
    JSR    PC,NPRINT
    BIS    #IDE,R4
1$:    JSR    PC,NINPUT
    CMP    R0,#15
    BNE    1$
    BIT    #INDATA,R4
    BEQ    3$
    BIC    #177400,R1
    MOV    R1,@#VRS
3$:    JMP    WORK
MRG:    MOV    R0,R5
    ASL    R5
    ADD    #VR0,R5
    BR    MRG2
MREG:    JSR    PC,CRLF
    MOV    #122,R0
    JSR    PC,TTOUT
MRG1:    MOV    R5,R0
    SUB    #VR0,R0
    ASR    R0
    ADD    #60,R0
    JSR    PC,TTOUT
MRG2:    BIS    #OPM,R4
    MOV    @R5,R1
    JSR    PC,NPRINT
    BIS    #IDE,R4
REP2:    JSR    PC,NINPUT
    MOV    #RCMCH,R2
    MOV    #SRTR,R3
1$:    CMPB    R0,(R2)
    BEQ    2$
    INC    R2
    TSTB    (R2)
    BEQ    REP2
    TST    (R3)+
    BR    1$
2$:    JMP    JUMP
OPENRI:    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,(R5)
1$:    INC    R5
    INC    R5
    CMP    R5,#VRS
    BNE    2$
    MOV    #VR0,R5
2$:    BR    MREG
OPENRD:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,(R5)
1$:    DEC    R5
    DEC    R5
    CMP    R5,#HDM
    BNE    2$
    MOV    #VPC,R5
2$:    BR    MREG
OPENRA:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,(R5)
1$:    MOV    (R5),R5
    BIC    #HALT,R4
    JMP    MMSR1
OPENRS:    JSR    PC,M1$
    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,(R5)
1$:    MOV    (R5),R5
    BIS    #HALT,R4
    JMP    MMSR1
CLOSER:    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,(R5)
1$:    MOV    @#BFU,R5
    JMP    WORK
GOTO:    JSR    PC,TTOUT
    CLR    R0
    JSR    PC,TTOUT
    RESET
    MOV    R1,@#CPC
    BR    GO
CSTEP:    JSR    PC,TTOUT
1$:    BIT    #200,@#PRRS
    BEQ    1$
    MOV    #VR0,SP
    MOV    (SP)+,R0
    MOV    (SP)+,R1
    MOV    (SP)+,R2
    MOV    (SP)+,R3
    MOV    (SP)+,R4
    MOV    (SP)+,R5
    MOV    (SP)+,SP
    MOV    @#VPC,@#CPC
    MOV    @#VRS,@#CRS
    CLR    @#VBE
    STEP
SYSGO:    JSR    PC,TTOUT
    CLR    R0
    JSR    PC,TTOUT
    RESET
    MOV    #SG2,R2
    MOV    #BWR,R3
1$:    MOV    (R2)+,(R3)+
    CMP    R2,#SG3
    BNE    1$
    MOV    R1,@#BWR+10
    MOV    #BWR,@#CPC
GO:    MOV    #340,@#CRS
    MOV    #VR0,SP
    MOV    (SP)+,R0
    MOV    (SP)+,R1
    MOV    (SP)+,R2
    MOV    (SP)+,R3
    MOV    (SP)+,R4
    MOV    (SP)+,R5
    MOV    (SP),SP
    CLR    @#VBE
    START
OPENS:    MOV    #44,R0
    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,R5
1$:    BIS    #HALT,R4
    BIC    #BYTE,R4
    BR    MMSR
GOB:    JSR    PC,TTOUT
    BIT    #INDATA,R4
    BEQ    1$
    JSR    PC,WRITER
1$:    JSR    PC,READER
    mov    r1,-(sp)
    bic    #777,r1
    cmp    r1,#77000
    bne    2$
    mov    (sp)+,r1
    bic    #177700,r1
    tst    r1
    beq    3$
    dec    r1
    br    5$
2$:    mov    (sp)+,r1
    BIC    #177400,R1
    BIT    #200,R1
    BEQ    3$
    BIC    #200,R1
    COM    R1
    BIC    #177600,R1
5$:    ASL    R1
    SUB    R1,R5
4$:    BR    MMSR1
3$:    ASL    R1
    ADD    R1,R5
    ADD    #2,R5
    BR    MMSR1
OPENBU:    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,R5
1$:    BIC    #HALT,R4
    BIS    #BYTE,R4
    BR    MMSR
OPENBS:    BIT    #INDATA,R4
    BEQ    1$
    MOV    R1,R5
1$:    BIS    #HALT,R4
    BIS    #BYTE,R4
    MOV    #44,R0
    JSR    PC,TTYOUT
    BR    MMSR
MMSR1:    JSR    PC,CRLF
    BIT    #HALT,R4
    BEQ    1$
    MOV    #44,R0
    JSR    PC,TTOUT
1$:    MOV    R5,R1
    JSR    PC,NPRINT
MMSR:    MOV    #57,R0
    JSR    PC,TTOUT
    JSR    PC,READER
    MOV    R1,R2
    JSR    PC,NPRINT
    BIT    #BYTE,R4
    BEQ    1$
    MOV    #40,R0
    JSR    PC,TTOUT
    MOV    R1,R0
    BIC    #177600,R0
    CMP    R0,#40
    BGE    2$
    MOV    #40,R0
2$:    JSR    PC,TTYOUT
    MOV    R1,R0
    SWAB    R0
    BIC    #177600,R0
    CMP    R0,#40
    BGE    3$
    MOV    #40,R0
3$:    JSR    PC,TTYOUT
    BIS    #IDEP,R4
    BIC    #177400,R1
    JSR    PC,NPRINT
    MOV    R2,R1
    SWAB    R1
    BIC    #177400,R1
    BIS    #LB,R4
    JSR    PC,NPRINT
1$:    BIS    #IDE,R4
    JMP    RP
LOAD:    BIT    #INDATA,R4
    BNE    3$
    CLR    R1
3$:    MOV    R1,@#177600
    JSR    PC,TTOUT
    JSR    PC,CRLF
    JSR    PC,TRINI
    MOV    #44,R0
    JSR    PC,TTOUT
    MOV    #BFU,R2
    JSR    PC,TTINP
    JSR    PC,TTYOUT
    MOVB    R0,(R2)+
    JSR    PC,TTINP
    JSR    PC,TTYOUT
    MOVB    R0,(R2)+
    JSR    PC,TTINP
    JSR    PC,TTYOUT
    BIC    #177770,R0
    MOV    R0,-(SP)
    MOV    @#BFU,R1
    MOV    #TDEV,R0
1$:    CMP    R1,(R0)
    BEQ    2$
    ADD    #12,R0
    TST    (R0)
    BNE    1$
    call    known
    mov    #tdev,r1
5643$:    mov    #40,r0
    call    ttyout
    mov    (r1),r0
    call    ttyout
    swab    r0
    call    ttyout
    add    #12,r1
    tst    (r1)
    bne    5643$
    JMP    WORK
2$:    TST    @#177600
    BNE    4$
    MOV    2(R0),R5
    BR    5$
4$:    MOV    @#177600,R5
5$:    MOV    #FSBTD,@#VBE
    MOV    #USERM,R3
    MOV    #5715,@#BWR+4
    JSR    PC,@#BWR
    MOV    #FSMM,@#VBE
    MOV    #10215,@#BWR+4
    MOV    4(R0),R1
    MOV    6(R0),R5
10$:    MOV    (R1)+,R2
    JSR    PC,@#BWR
    INC    R5
    INC    R5
    CMP    R1,10(R0)
    BNE    10$
    JSR    PC,CRLF
    RESET
    MOV    6(R0),@#CPC
    MOV    (SP)+,R0
    MOV    @#177600,R1
    MOV    #340,@#CRS
    CLR    @#VBE
    MOV    #10000,SP
    START

;BOOTSTRAP

.if ne bt.dx
DXSRC:    BIC    #177776,R0
    TST    R0
    BEQ    1000$
    MOV    #100267,R2
    BR    1$
1000$:    MOV    #100247,R2
    MOV    #40000,@#177170
1$:    MOV    #177170,R1
2$:    BITB    R2,(R1)
    BEQ    2$
    MOVB    #7,R3
    MOV    R1,R0
    MOV    R2,(R0)+
    BR    4$
3$:    MOV    #1,(R0)
4$:    ASR    R3
    BCS    6$
    MOVB    (PC)+,(R1)
5$:    MOVB    (R0),(R3)+
6$:    BIT    R2,(R1)
    BEQ    6$
    BMI    1$
    BCS    3$
    TSTB    (R1)
    BMI    5$
    CLR    R0
    CMP    #240,(R0)
    BNE    1$
    CMPB    #247,R2
    ADC    R0
    CLR    PC
DXEND:    HALT
.endc
.if ne bt.dy
DYSRC:    BIC    #177776,R0
    TST    R0
    BEQ    1000$
    MOV    #420,R0
    BR    1$
1000$:    MOV    #400,R0
1$:    MOV    #177170,R3
    MOV    #177172,R4
    MOV    #401,R5
    MOV    #200,R1
    BIT    #400,R0
    BNE    2$
    ASL    R1
2$:    CLR    R2
3$:    BIC    #177357,R0
4$:    BIS    #7,R0
5$:    MOV    R0,(R3)
6$:    BIT    #100200,(R3)
    BEQ    6$
    BMI    5$
    MOVB    R5,(R4)
7$:    BIT    #100200,(R3)
    BEQ    7$
    BMI    5$
    SWAB    R5
    MOVB    R5,(R4)
    SWAB    R5
8$:    BIT    #100040,(R3)
    BEQ    8$
    BMI    4$
    BIC    #177357,R0
    BIS    #3,R0
9$:    MOV    R0,(R3)
10$:    BIT    #100200,(R3)
    BEQ    10$
    BMI    9$
    MOV    R1,(R4)
11$:    BIT    #100200,(R3)
    BEQ    11$
    BMI    9$
    MOV    R2,(R4)
12$:    BIT    #100040,(R3)    
    BEQ    12$
    BMI    9$
    CMPB    (R5)+,(R5)+
    ADD    R1,R2
    ADD    R1,R2
    CMP    R2,#1000
    BCS    3$
    MOV    R0,R1
    CLR    R0
    BIT    #20,R1
    BEQ    13$
    INC    R0
13$:    BIC    #177377,R1
    CLR    PC
DYEND:    HALT
.endc
.if ne bt.mx
MXSRC:    MOV    #177130,R1
44$:    BIC    #177774,R0
    MOV    #10000,SP
    MOV    R0,-(SP)
    MOV    R1,R4
    MOV    #000100,(R4)
    MOV    #177777,R5
70$:    SOB    R5,70$
    ASL    R0
    ASL    R0
    BIS    R0,(R4)
    MOV    #047040,R5
104$:    SOB    R5,104$
    JSR    PC,322$
    MOV    R4,R5
    TST    (R5)+
    CLR    R0
    MOV    #001000,R1
    BIS    #040000,(R4)
130$:    TST    (R4)
    BPL    130$
    TST    (R5)
136$:    TST    (R4)
    BPL    136$
    TST    (R5)
    JSR    PC,234$
    MOV    #001000,R0
    MOV    #001600,R1
    JSR    PC,234$
    BIC    #040000,(R4)
    MOV    #000200,R1
    BIS    #010000,(R4)
    BIS    #040000,(R4)
204$:    TST    (R4)
    BPL    204$
    TST    (R5)
212$:    TST    (R4)
    BPL    212$
    TST    (R5)
    JSR    PC,234$
    BIC    #40000,(R4)
    CLR    PC
234$:    MOV    #000200,R3
    CLR    -(SP)
242$:    TST    (R4)
    BPL    242$
    MOV    (R5),(R0)
    ADD    (R0)+,(SP)
    DEC    R1
    BEQ    260$
    SOB    R3,242$
260$:    TST    (R4)
    BPL    260$
    CMP    (R5),(SP)+
    BEQ    300$
    TST    (SP)+
    MOV    (SP),R0
    JMP    MXSRC
300$:    TST    R1
    BNE    234$
    RTS    PC
306$:    BIS    #000020,(R4)
    MOV    #023420,R5
316$:    SOB    R5,316$
    RTS    PC
322$:    BIC    #000040,(R4)
326$:    BIT    #004000,(R4)
    BNE    342$
    JSR    PC,306$
    BR    326$
342$:    RTS    PC
MXEND:    HALT
.endc
.if ne bt.pr
PRSRC:    MOV    R1,17$
    JSR    PC,PRINS
    BR    100$
1$:    HALT
100$:    MOV    PC,SP
    CMP    -(SP),-(SP)
    MOV    PC,R5
    ADD    #112,R5
    CLR    R1
2$:    MOV    #0,(SP)
    ROR    (SP)
    BCS    3$
    CLR    (SP)
    BR    4$
3$:    ASL    (SP)
    BNE    4$
    MOV    R1,(SP)
4$:    CLR    R0
    JSR    PC,(R5)
    DECB    R3
    BNE    4$
    JSR    PC,(R5)
    JSR    PC,9$
    MOV    R4,R2
    SUB    #4,R2
    CMP    #2,R2
    BEQ    10$
    JSR    PC,9$
    ADD    (SP),R4
    MOV    R4,R1
5$:    JSR    PC,(R5)
    BGE    7$
    TSTB    R0
    BEQ    4$
6$:    HALT
    BR    4$
7$:    MOVB    R3,(R1)+
    BR    5$
    MOV    17$,R3
    INCB    (R3)
8$:    TSTB    (R3)
    BPL    8$
    MOVB    2(R3),R3
    ADD    R3,R0
    BIC    #177400,R3
    DEC    R2
    RTS    PC
9$:    MOV    (SP)+,12$
    JSR    PC,(R5)
    MOV    R3,R4
    JSR    PC,(R5)
    SWAB    R3
    BIS    R3,R4
    MOV    12$,PC
10$:    JSR    PC,9$
    JSR    PC,(R5)
    TSTB    R0
    BNE    6$
    ASR    R4
    BCC    11$
    HALT
    BR    2$
11$:    ASL    R4
    ADD    (SP),R4
    JMP    (R4)
12$:    .WORD    0
    MOV    #352,14$
    MOV    #765,16$
    JMP    1$
    MOV    17$,R1
    MOV    (PC)+,R2
14$:    .WORD    352
    INC    (R1)
15$:    TSTB    (R1)
    BPL    15$
    MOVB    2(R1),157400(R2)
    INC    14$
16$:    .WORD    765
17$:    .WORD    PRCSR
PRINS:    MOV    PC,R1
    BR    PRFIN+2
PRBEG:    .WORD    0
PRFIN:    .WORD    0
    SUB    #2,R1
    MOV    R1,PRFIN
    MOV    (SP)+,PRBEG
    MOV    @#6,-(SP)
    MOV    @#4,-(SP)
    JSR    PC,1$
    CMP    (SP)+,(SP)+
    DEC    R2
    BR    PROUT
1$:    MOV    (SP)+,@#4
    MOV    #340,@#6
    MOV    #16,R2
PROUT:    MOV    R2,R5
    MOV    #14,R3
1$:    ASL    R5
    SOB    R3,1$
    BIS    #7474,R5
    MOV    PRBEG,R4
2$:    MOV    (R4)+,(R5)+
    CMP    R4,PRFIN
    BNE    2$
    MOV    #14,R3
3$:    ASL    R2
    SOB    R3,3$
    BIS    #7474,R2
    MOV    (SP)+,@#4
    MOV    (SP)+,@#6
    JMP    (R2)
PREND:    HALT
.endc
.if ne bt.mt
MTSRC:    MOV    PC,R2
    BR    10$
    .WORD    172524
    .WORD    60003
    .WORD    60011
    .WORD    200
    .WORD    100000
10$:    MOV    R2,R0
    TST    (R0)+
    MOV    (R0)+,R1
    DEC    (R1)
    TST    (R0)+
    MOV    (R0)+,-(R1)
1$:    BIT    (R0),(R1)
    BEQ    1$
    TST    (R0)+
    BIT    (R0),-(R1)
    BEQ    2$
6$:    JMP    (R2)
2$:    MOV    R2,R0
    TST    (R0)+
    MOV    (R0)+,R1
    MOV    #177000,(R1)
    MOV    (R0),-(R1)
5$:    BIT    #100200,(R1)
    BEQ    5$
    BMI    6$
    CLR    PC
MTEND:    HALT
.endc
.if ne bt.rk
RKSRC:    TST    R0
    BNE    10$
    MOV    PC,R2
    BR    1$
10$:    MOV    PC,R2
    MOV    #20000,@#177412
1$:    MOV    #177000,@#177406
    MOV    #5,@#177404
2$:    BIT    #100200,@#177404
    BEQ    2$
    BMI    3$
    CLR    PC
3$:    JMP    (R2)
RKEND:    HALT
.endc
.if ne bt.zdw
DWSRC:    MOV    #174020,R1
1$:    MOV    #10,(R1)
2$:    TST    (R1)
    BMI    2$
    MOV    #1,@#174006
    MOV    #40,@#174016
3$:    TST    (R1)
    BMI    3$
    CLR    R2
    MOV    #400,R3
4$:    TSTB    (R1)
    BPL    4$
    MOV    @#174010,(R2)+
    SOB    R3,4$
    CMP    #240,(R3)
    BNE    1$
    CLR    PC
DWEND:    HALT
.endc
.if ne bt.my
MYSRC:    MOV    #172140,R1
    BIC    #177774,R0
1$:    BIT    #100040,(R1)
    BEQ    1$
    MOV    #37,(R1)
2$:    TSTB    (R1)
    BPL    2$
    MOV    R0,@#172142
3$:    BIT    #100040,(R1)
    BEQ    3$
    BMI    1$
    CMP    @#0,#240
    BNE    1$
    CLR    PC
MYEND:    HALT
.endc
.if ne bt.bl
BLSRC:    MOV    PC,SP
    SUB    #12,SP
    MOV    R0,<BLSRC-2>
    .ADDR    #157$,R1
    ASL    R0
    ADD    R1,R0
    MOV    (R0),<BLSRC-4>
    CALL    203$
    CALL    2$
    .ADDR    #<BLSRC-10>,R1
    MOV    #4,R2
    CALL    4$
    TST    R5
    BEQ    1$
    MOV    R5,<BLSRC-10>
1$:    MOV    <BLSRC-10>,R1
    MOV    <BLSRC-6>,R2
    CALL    4$
    MOV    <BLSRC-2>,R0
    MOV    <BLSRC-10>,PC
2$:    MOV    R0,-(SP)
    BIS    #1400,R0
163$:    TSTB    @#SEL1
    BPL    163$
    CLC
    BR    164$
170$:    ASR    R0
164$:    BCC    165$
    MOV    #220,@#SEL1
    BR    166$
165$:    MOV    #200,@#SEL1
    BR    166$
166$:    MOV    <BLSRC-4>,R5
167$:    SOB    R5,167$
    SOB    R4,170$
    MOV    (SP)+,R0
    RTS    PC
203$:    MOV    #SEL1,R3
    MOV    #20,R4
    CLR    R0
172$:    BIT    R4,(R3)
    BEQ    172$
174$:    MOV    #260,(R3)
    BIT    R4,(R3)
    BNE    174$
    MOV    <BLSRC-4>,R5
    ASR    R5
175$:    SOB    R5,175$
    ASR    R4
201$:    MOV    <BLSRC-4>,R5
176$:    SOB    R5,176$
    BIT    #20,(R3)
    BNE    177$
    CLC
    BR    200$
177$:    SEC
    BR    200$
200$:    RORB    R0
    SOB    R4,201$
    MOV    #220,(R3)
    RTS    PC
4$:    MOV    R0,-(SP)
204$:    JSR    PC,203$
    MOVB    R0,(R1)+
    SOB    R2,204$
    MOV    (SP)+,R0
    RTS    PC
157$:    .WORD    14,36,103,213,435,1100,2206,4422,6633
BLEND:
.endc
.if ne bt.bt
btsrc:    mov    pc,sp
    tst    -(sp)
    .addr    #1000$,r1
    mov    r1,drvp
    jmp    btent

10000$:    .byte    0; signal polarity
10001$:    .byte    0; status
10002$:    .word    0; fict.read flag
10003$:    .word    0; address modifier
10004$:    .word    0; ptr to command block
10005$:    .word    0; sp copy
10006$:    .word    0; cksum
10007$:    .word    0; bps timing
10010$:    .word    0; ptr to 10006$

11$:    MOV    R3,-(SP)
    MOV    R2,-(SP)
    MOV    R1,-(SP)
    MOV    R0,-(SP)
    MOV    R4,-(SP)
    RTS    R4

33$:    MOV    (SP)+,R0
    MOV    (SP)+,R0
    MOV    (SP)+,R1
    MOV    (SP)+,R2
    MOV    (SP)+,R3
    RTS    R4

1000$:    JSR    R4,11$
    MOV    R1,10004$
    MOV    #177716,R3
    CLR    10000$
    CLR    10002$
    MOV    @#4,-(SP)
    .addr    #16$,r1
    MOV    r1,@#4
    MOVB    #1,@#VBH
    .addr    #10006$,r1
    mov    r1,10010$
    mov    10004$,r1
    MOV    SP,10005$
    CLR    R0
    JSR    PC,30$
    BR    22$

16$:    MOV    10005$,SP
    MOVB    #4,10001$
    MOV    #220,(R3)
22$:    MOV    10004$,R1
    MOVB    10001$,1(R1)
    CLRB    @#VBH
    MOV    (SP)+,@#4
    JSR    R4,33$
    RTS    PC

36$:    CLR    R0
75$:    CLR    R2
    BISB    (R5)+,R2
    ADD    R2,R0
    ADC    R0
    SOB    R4,75$
    RTS    PC

30$:    MOV    #40,R5
    MOV    #20,(R3)
    MOV    #1,10003$
124$:    CLR    10000$
    JSR    PC,100$
    JSR    PC,101$
    TSTB    10001$
    BNE    102$
    JSR    PC,103$
    MOV    #220,(R3)
102$:    RTS    PC

100$:    MOV    #4000,R2
    CLR    R0
110$:    CLR    R4
105$:    BIT    R5,(R3)
    BEQ    105$
106$:    INC    R4
    BIT    R5,(R3)
    BNE    106$
    SUB    R4,R0
    BMI    107$
    CMP    R0,#2
    BHI    100$
107$:    MOV    R4,R0
    SOB    R2,110$
    CLR    R0
    MOV    #200,R2
113$:    JSR    PC,112$
    ADD    R4,R0
    SOB    R2,113$
    MOV    #7,R2
115$:    ASR    R0
    SOB    R2,115$
    MOV    R0,R4
    ASR    R4
    ADD    R4,R0
    MOV    R0,10007$
122$:    CLR    R4
117$:    INC    R4
    BIT    R5,(R3)
    BNE    117$
    CMP    R4,R0
    BHI    120$
    CLR    R4
121$:    INC    R4
    BIT    R5,(R3)
    BEQ    121$
    CMP    R4,R0
    BCS    122$
    INCB    10000$
120$:    ASL    R0
    CMP    R4,R0
    BHI    123$
    JSR    PC,112$
    RTS    PC
143$:    TST    (SP)+
123$:    TST    (SP)+
    BR    124$
101$:    MOV    10004$,R1
    ADD    #26,R1
    MOV    #24,R2
    JSR    PC,125$
    MOV    #10,R2
130$:    CMP    -(R1),-24(R1)
    BNE    127$
    SOB    R2,130$
    MOV    -(R1),blen
    MOV    -26(R1),baddr
    BNE    132$
    MOV    -(R1),baddr
    BR    132$
127$:    INCB    10001$
132$:    RTS    PC
103$:    MOV    baddr,R1
    MOV    blen,R2
    SUB    10002$,10003$
    BNE    133$
    mov    10010$,r1
133$:    JSR    PC,125$
    mov    10010$,r1
    MOV    #2,R2
    JSR    PC,134$
    TST    10002$
    BNE    135$
    MOV    baddr,R5
    MOV    blen,R4
    JSR    PC,36$
    CMP    R0,10006$
    BEQ    135$
    MOVB    #2,10001$
135$:    RTS    PC
125$:    MOV    10007$,R0
    TSTB    10000$
    BNE    136$
140$:    CLR    R4
137$:    INC    R4
    BIT    R5,(R3)
    BNE    137$
    CMP    R4,R0
    BCS    140$
    BR    141$
136$:    CLR    R4
142$:    INC    R4
    BIT    R5,(R3)
    BEQ    142$
    CMP    R4,R0
    BCS    136$
141$:    ASL    R0
    CMP    R4,R0
    BHI    143$
    JSR    PC,112$
134$:    MOV    #10,R0
146$:    JSR    PC,112$
    CMP    R4,10007$
    BHI    144$
    CLC
    BR    145$
144$:    SEC
145$:    RORB    (R1)
    SOB    R0,146$
    ADD    10003$,R1
207$:    SOB    R2,134$
    RTS    PC
112$:    CLR    R4
    TSTB    10000$
    BNE    147$
150$:    BIT    R5,(R3)
    BNE    150$
151$:    BIT    R5,(R3)
    BEQ    151$
152$:    INC    R4
    BIT    R5,(R3)
    BNE    152$
153$:    INC    R4
    BIT    R5,(R3)
    BEQ    153$
    RTS    PC
147$:    BIT    R5,(R3)
    BEQ    147$
154$:    BIT    R5,(R3)
    BNE    154$
155$:    INC    R4
    BIT    R5,(R3)
    BEQ    155$
156$:    INC    R4
    BIT    R5,(R3)
    BNE    156$
    RTS    PC
.endc
.if ne bt.bft
bfsrc:    mov    pc,sp
    MOV    R1,AF0
    TST    (R1)+
    MOV    R1,AF1
    TST    (R1)+
    MOV    R1,AF2
    TST    (R1)+
    MOV    R1,AF3
    .addr    #dldrv,r1
    mov    r1,drvp
btent:
    MOV    #20,R2
    JSR    R0,100$
    .ASCIZ    <12><15>/Name:/
    .EVEN
100$:    MOVB    (R0)+,r4
    BEQ    111$
    call    7100$
    BR    100$
111$:    TST    (SP)+
    sub    #52,sp
    mov    sp,r1    ;->20
    clr    (r1)+    ;->22
    clr    (r1)+    ;->24
    clr    (r1)+    ;->26
1$:    BIT    #200,@#KBRS
    BEQ    1$
    MOV    @#KBD,R0
    CMP    R0,#177
    BNE    4$
    MOV    #10,R4
    JSR    PC,7100$
    MOV    #40,R4
    JSR    PC,7100$
    MOV    #10,R4
    JSR    PC,7100$
    INC    R2
    DEC    R1
    BR    1$
4$:    CMP    R0,#15;CR
    BEQ    2$
    MOVB    R0,(R1)+
    MOV    R0,R4
    JSR    PC,7100$
    SOB    R2,1$
    BR    3$
2$:    MOVB    #40,(R1)+
    SOB    R2,2$
3$:    sub    #26,r1
    MOV    #3,(r1)
    jsr    pc,@drvp
20$:    TSTB    1(r1)
    BNE    5$
    MOV    baddr,pc
5$:    CMPB    1(r1),#1
    BEQ    6$
    JSR    R0,8$
    .ASCIZ    <12><15>/?FT-F-I/<57>/O error/
    .EVEN
6$:    JSR    R0,8$
    .ASCIZ    <12><15>/?FT-F-File not found/
    .EVEN
8$:    TSTB    (R0)
    BNE    84$
12345$:    HALT
    br    12345$
84$:    MOVB    (R0)+,R4
    JSR    PC,7100$
    BR    8$
7100$:    BIT    #200,@#PRRS
    BEQ    7100$
    MOVB    R4,@#PRD
    RTS    PC
drvp:    .word    0
baddr:    .word    0
blen:    .word    0
AF0:    .WORD    0
AF1:    .WORD    0
AF2:    .WORD    0
AF3:    .WORD    0
btend:
DLDRV:
.endc
.if ne bt.bf
    mov    r1,-(sp)
    CLR    @AF0
    CLR    @AF2
    CLR    R5        
    MOVB    @AF1,R0    
    MOVB    (R1)+,R0    
    JSR    PC,$TR        
    JSR    PC,$RD        
    MOV    R1,R2        
    ADD    #5,R2        
    MOV    #12,R3        
1$:    MOVB    (R2)+,R0    
    JSR    PC,$TR        
    SOB    R3,1$        
    MOV    #4,R3        
    JSR    PC,$RD        
    MOVB    R0,(R1)+    
    BNE    2$        
    ADD    #6,R2        
4$:    JSR    PC,$RD        
    MOVB    R0,(R2)+    
    SOB    R3,4$        
    MOV    -(R2),R3    
    BEQ    2$        
    TST    (R1)        
    BEQ    5$        
    MOV    (R1),R2        
    BR    6$        
5$:    MOV    -(R2),R2    
    MOV    R2,baddr
6$:    JSR    PC,$RD        
    MOVB    R0,(R2)+    
    ADD    R0,R5        
    SOB    R3,6$        
7$:    JSR    PC,$RD        
    CMPB    R0,R5        
    BEQ    9$        
    MOVB    #2,-(R1)    
9$:    MOV    R5,R0        
    JSR    PC,$TR        
2$:    mov    (sp)+,r1
    RTS    PC
$RD:    TSTB    @AF0
    BPL    $RD        
    MOVB    @AF1,R0    
    RTS    PC        
$TR:    TSTB    @AF2
    BPL    $TR        
    MOVB    R0,@AF3
    RTS    PC
BFEND:
.endc
.if ne bt.by
BYSRC:    MOV    #1000,SP
    MOV    @#6,-(SP)
    MOV    @#4,-(SP)
    JSR    PC,11$
    CMP    (SP)+,(SP)+
111$:    MOV    (SP)+,@#4
    MOV    (SP)+,@#6
    MOV    #HALTM,@#SEL1
    MOV    #FSBTD,@#VBE
    MOV    #HSP,SP
    HALT
11$:    MOV    (SP)+,@#4
    MOV    #340,@#6
    CMP    @#160000,#410
    BEQ    301$
    CMP    @#160000,#406
    BNE    111$
301$:    BIC    #177774,R0
    MOV    #2000,R3
    JSR    PC,@#160010
    MOV    #2000,12(R3)
    CLR    22(R3)
    MOVB    R0,34(R3)
300$:    CLR    R0
    MOV    #400,R1
    MOV    #1000,R2
    JSR    PC,@#160004
    BCS    300$
    MOVB    34(R3),R0
    CMP    @#1000,#240
    BNE    301$
    MOV    (SP)+,@#4
    MOV    (SP)+,@#6
    JMP    @#1000
BYEND:    HALT
.endc
.if ne bt.vt
VTSRC:    TST    R1
    BEQ    1011$
    MOV    R1,1001$
1011$:    MOV    PC,SP
    mov    r0,r5
    CLR    R3
    MOV    (PC)+,R1
1001$:    .WORD    KBRS
1$:    MOV    PC,R4
    ADD    (PC)+,R4
    .WORD    <100$-.>+2
2$:    MOVB    (R4)+,R0
    BMI    4$
3$:    TSTB    4(R1)
    BPL    3$
    MOVB    R0,6(R1)
    BR    2$
4$:    INC    101$
    JSR    PC,7$
    BEQ    5$
    MOV    #6400,R3
    mov    r5,r0
    CLR    PC
5$:    MOV    #1000,R2
6$:    JSR    PC,7$
    MOVB    R0,(R3)+
    DEC    R2
    BNE    6$
    BR    1$
7$:    TSTB    (R1)
    BPL    7$
    MOVB    2(R1),R0
    RTS    PC
100$:    .word    25037,0
101$:    .word    0,177777
VTEND:    HALT

.endc
.if ne bt.bhs
BHSRC:    clr    r3
100$:    sob    r4,100$
    mov    #30,r4
    sob    r3,100$
    mov    #177730,r3
    mov    #177734,r4
    mov    #177736,r5
    call    clst
    clr    (r5)
    mov    #7,(r4)
    mov    #30,(r5)
    clr    (r4)
    call    clst
    cmp    r0,#7
    bne    2$
    jmp    err
2$:    jsr    r0,4$
    .byte    007,211,200,000,000,000,000,000
    .byte    000,000,000,000,000,000,000,000
    .byte    000,000,000,000,000,000,000,000
    .byte    011,000
4$:    movb    (sp)+,25(r0)
    call    secc    ;test unit ready
5$:    tstb    (r3)
    bpl    5$
    mov    #27,(r5)
    cmp    #26,(r4)
    beq    6$    ;timeout?
    jmp    err
6$:    movb    #33,3(r0)
    movb    #1,7(r0)
    call    secc    ;spin up / load
    call    clst
    movb    #1,3(r0)
    clrb    7(r0)
    call    secc    ;rezero / rewind
    call    clst
;reading!
    movb    #10,3(r0)
    incb    7(r0)
    cmpb    25(r0),#3
    bne    7$
    incb    4(r0)
7$:    movb    #2,23(r0)
    call    secc
    clr    r2
10$:    bit    #100200,(r3)
    beq    10$
    bpl    11$
    movb    2(r3),(r2)+
    br    10$
11$:    mov    #27,(r5)
    cmp    #26,(r4)
    bne    err
    mov    #17,(r5)
    tst    (r4)
    bne    err
    cmp    @#0,#240
    bne    err
    MOVB    25(R0),R0
    clr    pc
err:    halt
    br    err    
clst:    tstb    (r3)
    bpl    clst
    mov    #27,(r5)
    tst    (r4)
    return
secc:    mov    r0,-(sp)
    clr    @r5
    mov    #31,r1
1$:    movb    (r0)+,@r4
    sob    r1,1$
    mov    (sp)+,r0
    return
BHEND:

.endc
.if ne bt.bha

crd1=10;read scsi-1
cinq=22;inquiry
cmsl=25;mode select
crew=1;rewind/recalibrate
crsn=3;request sense
cstu=33;load/unload/start/stop unit
bhasrc:
    mov    #10000,sp
    mov    #4,@#177730
    clr    r5
    clr    r3
    clr    @#177730
1$:    sob    r5,1$
    mov    #30,r5
    sob    r3,1$
    clr    r2
    call    ebt
    halt
    br    bhasrc
ebt:    sub    #40,sp
    mov    sp,r1
    mov    r0,32(r1); save r0
    mov    r0,34(r1); boot lun
    mov    r2,36(r1); high load address
    bic    #177770,r0
    bic    #177437,34(r1)
    cmp    r0,#7
    beq    1000$
    movb    r0,35(r1); device id
    call    sdfl
    clrb    30(r1)
    call    ssnd
    call    scls
    call    srdy
    cmp    r0,#26
    bne    1000$
    movb    #cinq,3(r1)
    movb    #32,7(r1)
    movb    #32,24(r1)
    mov    r1,-(sp)
    call    ssnd
1$:    call    scls
    bcc    2$
    movb    @#177732,(r1)+
    br    1$
2$:    mov    (sp)+,r1
    cmpb    @r1,#1
    bne    3$
    bisb    #1,36(r1)
    br    10$
3$:    cmpb    @r1,#5
    beq    10$
    tstb    @r1
    bne    1000$
    .addr    #ifc01,r3
    mov    r1,r0
    mov    #6,r2
    add    #10,r0
4$:    cmpb    (r0)+,(r3)+
    bne    10$
    sob    r2,4$
    call    sdfl
    movb    #cmsl,3(r1)
    bisb    #20,4(r1)
    movb    #54,7(r1)
    movb    #54,24(r1)
    call    ssnd
    .addr    #sfc01,r3
5$:    call    scls
    bcc    11$
    movb    (r3)+,@#177732
    br    5$
1000$:    mov    32(r1),r0
    add    #40,sp
    sec
    return
11$:    
10$:    call    sdfl
    tstb    36(r1)
    bne    20$
    movb    #cstu,3(r1)
    movb    #1,7(r1)
    call    ssnd
    call    scls
20$:    call    srdy
    movb    #crew,3(r1)
    call    ssnd
    call    scls
    call    srdy
    movb    #crd1,3(r1)
    movb    #1,7(r1)
    bisb    36(r1),4(r1)
    movb    #2,23(r1)
    call    ssnd
    mov    36(r1),r2
    clrb    r2
30$:    call    scls
    bcc    31$
    movb    @#177732,(r2)+
    br    30$
31$:    cmp    r0,#26
    bne    50$
    mov    #17,@#177736
    tst    @#177734
    bne    1000$
    sub    #1000,r2
    cmp    @r2,#240
    bne    1000$
    mov    32(r1),r0
    mov    #177730,r1
    add    #42,sp
    clc
    jmp    @r2
50$:    mov    #4,@#177730
    clr    r0
    clr    @#177730
51$:    sob    r5,51$
    mov    #30,r5
    sob    r0,51$
    br    1000$
srdy:    call    sdfl    ; test unit ready
    call    ssnd
    call    scls
    br    sdfl
scls:    tst    @#177730; wait for data/status, carry on data
    beq    scls
    bmi    2$
    mov    #27,@r5
    mov    @r4,r0
    tst    (pc)+
2$:    sec
    return
ssnd:    clr    (r5)    ; send command string to sbic
    mov    r1,-(sp)
    mov    #31,r3
1$:    movb    (r1)+,(r4)
    sob    r3,1$
    mov    (sp)+,r1
    return
sdfl:    mov    #177734,r4; work buffer for new command
    mov    #177736,r5
    mov    #15,r3
1$:    clr    (r1)+
    sob    r3,1$
    sub    #32,r1
    mov    r1,r3
    movb    #7,(r3)+
    movb    #211,(r3)+
    movb    #200,(r3)+
    movb    #11,30(r1)
    movb    34(r1),4(r1)
    movb    35(r1),25(r1)
    return
            ;mode select string for teac fc-01
sfc01:    .byte    000,050,000,010
    .byte    000,000,000,000,000,000,002,000
    .byte    005,036,001,364,002,022,002,000
    .byte    000,120,000,120,000,120,000,036
    .byte    000,000,226,005,106,140,001,000
    .byte    000,000,045,000,000,000,000,000
            ;identify string for teac fc-01
ifc01:    .word    42524,41501,20040,20040,41506,30455
bhaend:
.endc

cksum:    .word    -1; correct checksum before fusing to prom!

blk0:

.=base+17776
    .word    0

    .END    ST

Anonymous
Если кто вчера скачал мой предыдущий пост - будьте внимательны, я просмотрел текст и нашел и исправил баг с кнопкой СТОП, изменены 5 строк: сохранение и восстановление R0 и R1 в обработчике происходит в СОЗУ с адресами, увеличенными на 4, т.к. в коде доступа к стеку в режиме USER добавилась одна команда - обнуление ячейки с кодом причины ошибки; если у нас происходит зависание при попытке сохранить в стеке текущие PC и RS, то выдается сообщение об ошибке эмуляции СТОПа, далее же ячейка кода останова в старом листинге не обнулялась и при двойном нажатии на СТОП выдавалось такое же сообщение вместо повторного прерывания по 4му вектору.
Anonymous
Вот нашел текст БКшного SCSI-загрузчика из вышеприведенного отладчика с подробными комментариями, схему может потом еще дам, если кого заинтересует.

Код

;bootstrap ROM for Western Digital WD33C93 SCSI Bus Interface Controller
;BK0010/11(M) version

base=175000; ROM address
sbic=177730; sbic CSR address

bh$csr=sbic; control/status register
bh$dr=sbic+2; data register
bh$rf=sbic+4; reg. file access register
bh$sr=sbic+6; status register / register file ptr on write
crd1=10    ; read scsi-1
cinq=22    ; inquiry
cmsl=25    ; mode select
crew=1    ; rewind/recalibrate
cstu=33    ; load/unload/start/stop unit
id=34
flg=32

.asect
.=base

bhboot:    clr    %0    ; if we wont boot from id=0, put id to %0
            ; and start from <base+2>
    mov    #1000,%6; set SP to make happy BK std monitor
        ; to save old SP set %0 and start from <base+6>
    mov    %0,-(%6); initial boot scsi id
    clr    -(%6)    ; clear fixed blk length flag
    sub    #32,%6    ; allocate work buffer
    mov    %6,%1    ; %1 used as cmd buffer ptr
    call    hrst    ; reset

10003$:    call    sdfl    ; reinit controller
    clrb    30(%1)    ; cmd=0 = soft reset & sample own id
    call    sctr    ; send reset, then test unit ready
    cmp    %0,#26
    bne    10001$    ; no device, skip this id
    movb    #cinq,3(%1); inquiry
    movb    #32,7(%1); 032 bytes in cmd length field
    movb    #32,24(%1); same for dma byte counter register
    mov    %1,%2
    call    gstr    ; get inquiry data
    cmpb    (%1),#1    ; it's a sequental access device?
    bne    3$
    inc    flg(%1)    ; yes - set fixed block length bit
    br    10$
3$:    cmpb    (%1),#4    ; it's a WORM device?
    beq    10$
    cmpb    (%1),#5    ; it's a CDROM device?
    beq    10$
    cmpb    (%1),#7    ; it's a OM device?
    beq    10$
    tstb    (%1)    ; it's a block random access device?
    beq    20$
    br    10001$    ; anything else - skip this id
50$:    call    hrst    ; reset on unexpected phase
10001$:    inc    id(%1)    ; next device
    cmp    id(%1),#7; do not allow sbic to select itself
    bne    10003$
10002$:    halt        ; halt
    br    10002$
20$:    mov    #ifc01,%0; lets see: is it teac fc-01 floppy?
    mov    %1,%2
    mov    #14,%3
    add    #10,%2
4$:    cmpb    (%0)+,(%2)+
    bne    10$    ; no, go to read code
    sob    %3,4$
    call    sdfl    ; yes, and we need to set up some parameters
    mov    %0,%2
    movb    #cmsl,3(%1); using mode select cmd
    bisb    #20,4(%1); use scsi-2 table format
    movb    #54,7(%1); send 054 bytes
    movb    #54,24(%1)
    call    ssnd
5$:    call    scls
    bcc    11$
    movb    (%2)+,@#bh$dr; after cmp id string, %2 points to ms table
    br    5$
11$:    call    1010$    ; check status, we wont boot from fc01 if
            ; 80cyl*2hd*18sec*HighDensity mode unavailable

; ok, we booting...

10$:    call    sdfl
    movb    #cstu,3(%1); spinup cmd for disk, load for tape
    movb    #1,7(%1); use #3 here for no-caddy CDs, this value
            ; forces tea/coffee cup to fall down
    call    sctr    ; send spinup & test ready (clear CC, if any)
    movb    #crew,3(%1); recalibrate for disk, rewind for tape
    call    sctr    ; send rewind & test ready (clear CC, if any)
    movb    #crd1,3(%1); read
    movb    #1,7(%1); one block
    bisb    flg(%1),4(%1); fbs bit for tape
    movb    #2,23(%1); load byte counter by (01000>>010)
    mov    #1000,%2; at 01000
    call    gstr    ; get data
    call    1010$    ; check status
    cmp    @#1000,#240; bootable media?
    bne    10001$    ; go next id
    mov    id(%1),%0; restore current scsi id
    mov    #bh$csr,%1; sbic addr
    add    #36,%6    ; restore sp
    jmp    @#1000


; test status, if wrong - jump to next device with or w/out reset
1010$:    cmp    %0,#26    ; sbic status
    beq    1$
    tst    (%6)+
    br    50$
1$:    mov    #17,(%5); set ptr to drive status register
    tst    (%4)    ; clean?
    beq    2$
    tst    (%6)+
    br    10001$
2$:    return


; send cmd to sbic and get data from scsi device
gstr:    call    ssnd
1$:    call    scls
    bcc    2$
    movb    @#bh$dr,(%2)+
    br    1$
2$:    return

; hardware reset and pause for device' internal startup procedure
; (e.g. for some lazy CDs and tapes)
hrst:    mov    #4,@#bh$csr
    clr    %5
    clr    @#bh$csr
2$:    mov    #30,%4
1$:    sob    %4,1$
    sob    r5,2$
    return

;send command, clear status, then test ready
sctr:    call    scgs

; test unit ready, on exit - buffer prepared for new cmd
srdy:    call    sdfl
    call    scgs
    br    sdfl

; send command string and get status
scgs:    call    ssnd

; wait for data/status, carry on data, status in %0
scls:    tst    @#bh$csr
    beq    scls
    bmi    2$
    mov    #27,(%5); sbic's status register
    mov    (%4),%0
    tst    (%7)+
2$:    sec
    return

; send command string to sbic
ssnd:    clr    (%5)    ; clear sbic's register file ptr
    mov    %1,-(%6)
    mov    #31,%3
1$:    movb    (%1)+,(%4)
    sob    %3,1$
    mov    (%6)+,%1
    return

; prepare cmd-string buffer for a new command
sdfl:    mov    #bh$rf,%4
    mov    #bh$sr,%5
    mov    #15,%3
1$:    clr    (%1)+    ; clear it
    sob    %3,1$
    sub    #32,%1
    mov    %1,%3
    mov    #sbics,%2; set sbic's id, mode and timeout
    movb    (%2)+,(%3)+
    movb    (%2)+,(%3)+
    movb    (%2)+,(%3)+
    movb    id(%1),25(%1); set target id
    movb    #11,30(%1); select w/out ATN and transfer command
    return

; identify string for teac fc-01
ifc01:    .word    42524,41501,20040,20040,41506,30455

; mode select string for teac fc-01
sfc01:    .byte    000,050,000,010
    .byte    000,000,000,000,000,000,002,000
    .byte    005,036,001,364,002,022,002,000
    .byte    000,120,000,120,000,120,000,036
    .byte    000,000,226,005,106,140,001,000
    .byte    000,000,045,000,000,000,000,000

; sbic settings
sbics:    .byte    7,211,200,377

    .end    bhboot

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2018 Invision Power Services, Inc.