|
Загрузка. Пожалуйста,
подождите... 
|
  |
Пультовой
режим |
|
SuperMax |
3.4.2009, 12:09
|
Администратор
    
Группа: 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
|
Пользователь
 
Группа: Участники
Сообщений: 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 |
9.4.2009, 13:25
|
Пользователь
 
Группа: Участники
Сообщений: 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
| |