![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
SuperMax |
![]()
Сообщение
#1
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 336 Регистрация: 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 |
![]()
Сообщение
#2
|
Пользователь ![]() ![]() Группа: Участники Сообщений: 25 Регистрация: 6.4.2009 Пользователь №: 32 836 ![]() |
Версия, выложенная вами, мой была опубликована с целью показать собеседнику, как приблизительно должен быть устроен отладчик.
Если выкладывать на форуме, то уж версию не требующую наличия специфических и сложных для повторения регистров, ну и с более корректной эмуляцией кнопки СТОП. Ниже привожу более поздний вариант, конечно тоже требующий причесывания на вкус пользователя, но желающий от блока только ОЗУ по адресам 0177600..0177657 и 0177670..0177677, микросхемы компорта 1801ВП1-065 или -035, триггера, фиксирующего состояние 03го разряда регистра 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 |
![]()
Сообщение
#3
|
Пользователь ![]() ![]() Группа: Участники Сообщений: 25 Регистрация: 6.4.2009 Пользователь №: 32 836 ![]() |
Если кто вчера скачал мой предыдущий пост - будьте внимательны, я просмотрел текст и нашел и исправил баг с кнопкой СТОП, изменены 5 строк: сохранение и восстановление R0 и R1 в обработчике происходит в СОЗУ с адресами, увеличенными на 4, т.к. в коде доступа к стеку в режиме USER добавилась одна команда - обнуление ячейки с кодом причины ошибки; если у нас происходит зависание при попытке сохранить в стеке текущие PC и RS, то выдается сообщение об ошибке эмуляции СТОПа, далее же ячейка кода останова в старом листинге не обнулялась и при двойном нажатии на СТОП выдавалось такое же сообщение вместо повторного прерывания по 4му вектору.
|
Anonymous |
![]()
Сообщение
#4
|
Пользователь ![]() ![]() Группа: Участники Сообщений: 25 Регистрация: 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 |
![]() ![]() |
Текстовая версия | Сейчас: 16.3.2025, 6:24 |