Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Пультовой режим
 
SuperMax
сообщение 3.4.2009, 12:09
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 4 366
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1




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
сообщение 6.4.2009, 13:31
Сообщение #2


Пользователь
**

Группа: Участники
Сообщений: 20
Регистрация: 6.4.2009
Пользователь №: 32 836



Версия, выложенная вами, мой была опубликована с целью показать собеседнику, как приблизительно должен быть устроен отладчик.
Если выкладывать на форуме, то уж версию не требующую наличия специфических и сложных для повторения регистров, ну и с более корректной эмуляцией кнопки СТОП.
Ниже привожу более поздний вариант, конечно тоже требующий причесывания на вкус пользователя, но желающий от блока только ОЗУ по адресам 0177600..0177657 и 0177670..0177677, микросхемы компорта 1801ВП1-065 или -035, триггера, фиксирующего состояние 03го разряда регистра SEL1 и отключающего ПЗУ монитора, ну и ПЗУ с кодом по тем же адресам, что и монитор. Кто с паяльником дружит - за час спаяет такой блок. (IMG:style_emoticons/default/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
сообщение 7.4.2009, 0:55
Сообщение #3


Пользователь
**

Группа: Участники
Сообщений: 20
Регистрация: 6.4.2009
Пользователь №: 32 836



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


Пользователь
**

Группа: Участники
Сообщений: 20
Регистрация: 6.4.2009
Пользователь №: 32 836



Вот нашел текст БКшного 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
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного
 сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 15.12.2011, 4:38
IBR Romantic Style v2.1a by Fisana http://fisana.sparknet.ru © 2006 IBR Team