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