Research V6 development
[unix-history] / usr / sys / conf / m45.s
CommitLineData
36cf5f1a
KT
1/ machine language assist
2/ for 11/45 or 11/70 CPUs
3
4.fpp = 1
5
6/ non-UNIX instructions
7mfpi = 6500^tst
8mtpi = 6600^tst
9mfpd = 106500^tst
10mtpd = 106600^tst
11spl = 230
12ldfps = 170100^tst
13stfps = 170200^tst
14wait = 1
15rtt = 6
16reset = 5
17
18HIPRI = 300
19HIGH = 6
20
21/ Mag tape dump
22/ save registers in low core and
23/ write all core onto mag tape.
24/ entry is thru 44 abs
25
26.data
27.globl dump
28dump:
29 bit $1,SSR0
30 bne dump
31
32/ save regs r0,r1,r2,r3,r4,r5,r6,KIA6
33/ starting at abs location 4
34
35 mov r0,4
36 mov $6,r0
37 mov r1,(r0)+
38 mov r2,(r0)+
39 mov r3,(r0)+
40 mov r4,(r0)+
41 mov r5,(r0)+
42 mov sp,(r0)+
43 mov KDSA6,(r0)+
44
45/ dump all of core (ie to first mt error)
46/ onto mag tape. (9 track or 7 track 'binary')
47
48 mov $MTC,r0
49 mov $60004,(r0)+
50 clr 2(r0)
511:
52 mov $-512.,(r0)
53 inc -(r0)
542:
55 tstb (r0)
56 bge 2b
57 tst (r0)+
58 bge 1b
59 reset
60
61/ end of file and loop
62
63 mov $60007,-(r0)
64 br .
65
66.globl start, _end, _edata, _etext, _main
67
68/ 11/45 and 11/70 startup.
69/ entry is thru 0 abs.
70/ since core is shuffled,
71/ this code can be executed but once
72
73start:
74 inc $-1
75 bne .
76 reset
77 clr PS
78
79/ set KI0 to physical 0
80
81 mov $77406,r3
82 mov $KISA0,r0
83 mov $KISD0,r1
84 clr (r0)+
85 mov r3,(r1)+
86
87/ set KI1-6 to eventual text resting place
88
89 mov $_end+63.,r2
90 ash $-6,r2
91 bic $!1777,r2
921:
93 mov r2,(r0)+
94 mov r3,(r1)+
95 add $200,r2
96 cmp r0,$KISA7
97 blos 1b
98
99/ set KI7 to IO seg for escape
100
101 mov $IO,-(r0)
102
103/ set KD0-7 to physical
104
105 mov $KDSA0,r0
106 mov $KDSD0,r1
107 clr r2
1081:
109 mov r2,(r0)+
110 mov r3,(r1)+
111 add $200,r2
112 cmp r0,$KDSA7
113 blos 1b
114
115/ initialization
116/ get a temp (1-word) stack
117/ turn on segmentation
118/ copy text to I space
119/ clear bss in D space
120
121 mov $stk+2,sp
122 mov $65,SSR3 / 22-bit, map, K+U sep
123 bit $20,SSR3
124 beq 1f
125 mov $70.,_cputype
1261:
127 inc SSR0
128 mov $_etext,r0
129 mov $_edata,r1
130 add $_etext-8192.,r1
1311:
132 mov -(r1),-(sp)
133 mtpi -(r0)
134 cmp r1,$_edata
135 bhi 1b
1361:
137 clr (r1)+
138 cmp r1,$_end
139 blo 1b
140
141/ use KI escape to set KD7 to IO seg
142/ set KD6 to first available core
143
144 mov $IO,-(sp)
145 mtpi *$KDSA7
146 mov $_etext-8192.+63.,r2
147 ash $-6,r2
148 bic $!1777,r2
149 add KISA1,r2
150 mov r2,KDSA6
151
152/ set up supervisor D registers
153
154 mov $6,SISD0
155 mov $6,SISD1
156
157/ set up real sp
158/ clear user block
159
160 mov $_u+[usize*64.],sp
161 mov $_u,r0
1621:
163 clr (r0)+
164 cmp r0,sp
165 blo 1b
166/ jsr pc,_isprof
167
168/ set up previous mode and call main
169/ on return, enter user mode at 0R
170
171 mov $30000,PS
172 jsr pc,_main
173 mov $170000,-(sp)
174 clr -(sp)
175 rtt
176
177.globl trap, call
178.globl _trap
179
180/ all traps and interrupts are
181/ vectored thru this routine.
182
183trap:
184 mov PS,saveps
185 tst nofault
186 bne 1f
187 mov SSR0,ssr
188 mov SSR1,ssr+2
189 mov SSR2,ssr+4
190 mov $1,SSR0
191 jsr r0,call1; _trap
192 / no return
1931:
194 mov $1,SSR0
195 mov nofault,(sp)
196 rtt
197.text
198
199.globl _runrun, _swtch
200call1:
201 mov saveps,-(sp)
202 spl 0
203 br 1f
204
205call:
206 mov PS,-(sp)
2071:
208 mov r1,-(sp)
209 mfpd sp
210 mov 4(sp),-(sp)
211 bic $!37,(sp)
212 bit $30000,PS
213 beq 1f
214.if .fpp
215 mov $20,_u+4 / FP maint mode
216.endif
217 jsr pc,*(r0)+
2182:
219 spl HIGH
220 tstb _runrun
221 beq 2f
222 spl 0
223 jsr pc,_savfp
224 jsr pc,_swtch
225 br 2b
2262:
227.if .fpp
228 mov $_u+4,r1
229 bit $20,(r1)
230 bne 2f
231 mov (r1)+,r0
232 ldfps r0
233 movf (r1)+,fr0
234 movf (r1)+,fr1
235 movf fr1,fr4
236 movf (r1)+,fr1
237 movf fr1,fr5
238 movf (r1)+,fr1
239 movf (r1)+,fr2
240 movf (r1)+,fr3
241 ldfps r0
2422:
243.endif
244 tst (sp)+
245 mtpd sp
246 br 2f
2471:
248 bis $30000,PS
249 jsr pc,*(r0)+
250 cmp (sp)+,(sp)+
2512:
252 mov (sp)+,r1
253 tst (sp)+
254 mov (sp)+,r0
255 rtt
256
257.globl _savfp
258_savfp:
259.if .fpp
260 mov $_u+4,r1
261 bit $20,(r1)
262 beq 1f
263 stfps (r1)+
264 movf fr0,(r1)+
265 movf fr4,fr0
266 movf fr0,(r1)+
267 movf fr5,fr0
268 movf fr0,(r1)+
269 movf fr1,(r1)+
270 movf fr2,(r1)+
271 movf fr3,(r1)+
2721:
273.endif
274 rts pc
275
276.globl _incupc
277_incupc:
278 mov r2,-(sp)
279 mov 6(sp),r2 / base of prof with base,leng,off,scale
280 mov 4(sp),r0 / pc
281 sub 4(r2),r0 / offset
282 clc
283 ror r0
284 mul 6(r2),r0 / scale
285 ashc $-14.,r0
286 inc r1
287 bic $1,r1
288 cmp r1,2(r2) / length
289 bhis 1f
290 add (r2),r1 / base
291 mov nofault,-(sp)
292 mov $2f,nofault
293 mfpd (r1)
294 inc (sp)
295 mtpd (r1)
296 br 3f
2972:
298 clr 6(r2)
2993:
300 mov (sp)+,nofault
3011:
302 mov (sp)+,r2
303 rts pc
304
305.globl _display
306_display:
307 dec dispdly
308 bge 2f
309 clr dispdly
310 mov PS,-(sp)
311 mov $HIPRI,PS
312 mov CSW,r1
313 bit $1,r1
314 beq 1f
315 bis $30000,PS
316 dec r1
3171:
318 jsr pc,fuword
319 mov r0,CSW
320 mov (sp)+,PS
321 cmp r0,$-1
322 bne 2f
323 mov $120.,dispdly / 2 sec delay after CSW fault
3242:
325 rts pc
326
327/ Character list get/put
328
329.globl _getc, _putc
330.globl _cfreelist
331
332_getc:
333 mov 2(sp),r1
334 mov PS,-(sp)
335 mov r2,-(sp)
336 spl 5
337 mov 2(r1),r2 / first ptr
338 beq 9f / empty
339 movb (r2)+,r0 / character
340 bic $!377,r0
341 mov r2,2(r1)
342 dec (r1)+ / count
343 bne 1f
344 clr (r1)+
345 clr (r1)+ / last block
346 br 2f
3471:
348 bit $7,r2
349 bne 3f
350 mov -10(r2),(r1) / next block
351 add $2,(r1)
3522:
353 dec r2
354 bic $7,r2
355 mov _cfreelist,(r2)
356 mov r2,_cfreelist
3573:
358 mov (sp)+,r2
359 mov (sp)+,PS
360 rts pc
3619:
362 clr 4(r1)
363 mov $-1,r0
364 mov (sp)+,r2
365 mov (sp)+,PS
366 rts pc
367
368_putc:
369 mov 2(sp),r0
370 mov 4(sp),r1
371 mov PS,-(sp)
372 mov r2,-(sp)
373 mov r3,-(sp)
374 spl 5
375 mov 4(r1),r2 / last ptr
376 bne 1f
377 mov _cfreelist,r2
378 beq 9f
379 mov (r2),_cfreelist
380 clr (r2)+
381 mov r2,2(r1) / first ptr
382 br 2f
3831:
384 bit $7,r2
385 bne 2f
386 mov _cfreelist,r3
387 beq 9f
388 mov (r3),_cfreelist
389 mov r3,-10(r2)
390 mov r3,r2
391 clr (r2)+
3922:
393 movb r0,(r2)+
394 mov r2,4(r1)
395 inc (r1) / count
396 clr r0
397 mov (sp)+,r3
398 mov (sp)+,r2
399 mov (sp)+,PS
400 rts pc
4019:
402 mov pc,r0
403 mov (sp)+,r3
404 mov (sp)+,r2
405 mov (sp)+,PS
406 rts pc
407
408.globl _backup
409.globl _regloc
410_backup:
411 mov 2(sp),r0
412 movb ssr+2,r1
413 jsr pc,1f
414 movb ssr+3,r1
415 jsr pc,1f
416 movb _regloc+7,r1
417 asl r1
418 add r0,r1
419 mov ssr+4,(r1)
420 clr r0
4212:
422 rts pc
4231:
424 mov r1,-(sp)
425 asr (sp)
426 asr (sp)
427 asr (sp)
428 bic $!7,r1
429 movb _regloc(r1),r1
430 asl r1
431 add r0,r1
432 sub (sp)+,(r1)
433 rts pc
434
435
436.globl _fubyte, _subyte
437.globl _fuword, _suword
438.globl _fuibyte, _suibyte
439.globl _fuiword, _suiword
440_fuibyte:
441 mov 2(sp),r1
442 bic $1,r1
443 jsr pc,giword
444 br 2f
445
446_fubyte:
447 mov 2(sp),r1
448 bic $1,r1
449 jsr pc,gword
450
4512:
452 cmp r1,2(sp)
453 beq 1f
454 swab r0
4551:
456 bic $!377,r0
457 rts pc
458
459_suibyte:
460 mov 2(sp),r1
461 bic $1,r1
462 jsr pc,giword
463 mov r0,-(sp)
464 cmp r1,4(sp)
465 beq 1f
466 movb 6(sp),1(sp)
467 br 2f
4681:
469 movb 6(sp),(sp)
4702:
471 mov (sp)+,r0
472 jsr pc,piword
473 clr r0
474 rts pc
475
476_subyte:
477 mov 2(sp),r1
478 bic $1,r1
479 jsr pc,gword
480 mov r0,-(sp)
481 cmp r1,4(sp)
482 beq 1f
483 movb 6(sp),1(sp)
484 br 2f
4851:
486 movb 6(sp),(sp)
4872:
488 mov (sp)+,r0
489 jsr pc,pword
490 clr r0
491 rts pc
492
493_fuiword:
494 mov 2(sp),r1
495fuiword:
496 jsr pc,giword
497 rts pc
498
499_fuword:
500 mov 2(sp),r1
501fuword:
502 jsr pc,gword
503 rts pc
504
505giword:
506 mov PS,-(sp)
507 spl HIGH
508 mov nofault,-(sp)
509 mov $err,nofault
510 mfpi (r1)
511 mov (sp)+,r0
512 br 1f
513
514gword:
515 mov PS,-(sp)
516 spl HIGH
517 mov nofault,-(sp)
518 mov $err,nofault
519 mfpd (r1)
520 mov (sp)+,r0
521 br 1f
522
523_suiword:
524 mov 2(sp),r1
525 mov 4(sp),r0
526suiword:
527 jsr pc,piword
528 rts pc
529
530_suword:
531 mov 2(sp),r1
532 mov 4(sp),r0
533suword:
534 jsr pc,pword
535 rts pc
536
537piword:
538 mov PS,-(sp)
539 spl HIGH
540 mov nofault,-(sp)
541 mov $err,nofault
542 mov r0,-(sp)
543 mtpi (r1)
544 br 1f
545
546pword:
547 mov PS,-(sp)
548 spl HIGH
549 mov nofault,-(sp)
550 mov $err,nofault
551 mov r0,-(sp)
552 mtpd (r1)
5531:
554 mov (sp)+,nofault
555 mov (sp)+,PS
556 rts pc
557
558err:
559 mov (sp)+,nofault
560 mov (sp)+,PS
561 tst (sp)+
562 mov $-1,r0
563 rts pc
564
565.globl _copyin, _copyout
566.globl _copyiin, _copyiout
567_copyiin:
568 jsr pc,copsu
5691:
570 mfpi (r0)+
571 mov (sp)+,(r1)+
572 sob r2,1b
573 br 2f
574
575_copyin:
576 jsr pc,copsu
5771:
578 mfpd (r0)+
579 mov (sp)+,(r1)+
580 sob r2,1b
581 br 2f
582
583_copyiout:
584 jsr pc,copsu
5851:
586 mov (r0)+,-(sp)
587 mtpi (r1)+
588 sob r2,1b
589 br 2f
590
591_copyout:
592 jsr pc,copsu
5931:
594 mov (r0)+,-(sp)
595 mtpd (r1)+
596 sob r2,1b
5972:
598 mov (sp)+,nofault
599 mov (sp)+,r2
600 clr r0
601 rts pc
602
603copsu:
604 mov (sp)+,r0
605 mov r2,-(sp)
606 mov nofault,-(sp)
607 mov r0,-(sp)
608 mov 10(sp),r0
609 mov 12(sp),r1
610 mov 14(sp),r2
611 asr r2
612 mov $1f,nofault
613 rts pc
614
6151:
616 mov (sp)+,nofault
617 mov (sp)+,r2
618 mov $-1,r0
619 rts pc
620
621.globl _idle
622_idle:
623 mov PS,-(sp)
624 spl 0
625 wait
626 mov (sp)+,PS
627 rts pc
628
629.globl _savu, _retu, _aretu
630_savu:
631 spl HIGH
632 mov (sp)+,r1
633 mov (sp),r0
634 mov sp,(r0)+
635 mov r5,(r0)+
636 spl 0
637 jmp (r1)
638
639_aretu:
640 spl 7
641 mov (sp)+,r1
642 mov (sp),r0
643 br 1f
644
645_retu:
646 spl 7
647 mov (sp)+,r1
648 mov (sp),KDSA6
649 mov $_u,r0
6501:
651 mov (r0)+,sp
652 mov (r0)+,r5
653 spl 0
654 jmp (r1)
655
656.globl _spl0, _spl1, _spl4, _spl5, _spl6, _spl7
657_spl0:
658 spl 0
659 rts pc
660
661_spl1:
662 spl 1
663 rts pc
664
665_spl4:
666 spl 4
667 rts pc
668
669_spl5:
670 spl 5
671 rts pc
672
673_spl6:
674 spl 6
675 rts pc
676
677_spl7:
678 spl HIGH
679 rts pc
680
681.globl _copyseg
682_copyseg:
683 mov PS,-(sp)
684 mov 4(sp),SISA0
685 mov 6(sp),SISA1
686 mov $10000+HIPRI,PS
687 mov r2,-(sp)
688 clr r0
689 mov $8192.,r1
690 mov $32.,r2
6911:
692 mfpd (r0)+
693 mtpd (r1)+
694 sob r2,1b
695 mov (sp)+,r2
696 mov (sp)+,PS
697 rts pc
698
699.globl _clearseg
700_clearseg:
701 mov PS,-(sp)
702 mov 4(sp),SISA0
703 mov $10000+HIPRI,PS
704 clr r0
705 mov $32.,r1
7061:
707 clr -(sp)
708 mtpd (r0)+
709 sob r1,1b
710 mov (sp)+,PS
711 rts pc
712
713.globl _dpadd
714_dpadd:
715 mov 2(sp),r0
716 add 4(sp),2(r0)
717 adc (r0)
718 rts pc
719
720.globl _dpcmp
721_dpcmp:
722 mov 2(sp),r0
723 mov 4(sp),r1
724 sub 6(sp),r0
725 sub 8(sp),r1
726 sbc r0
727 bge 1f
728 cmp r0,$-1
729 bne 2f
730 cmp r1,$-512.
731 bhi 3f
7322:
733 mov $-512.,r0
734 rts pc
7351:
736 bne 2f
737 cmp r1,$512.
738 blo 3f
7392:
740 mov $512.,r1
7413:
742 mov r1,r0
743 rts pc
744
745.globl _ldiv
746_ldiv:
747 clr r0
748 mov 2(sp),r1
749 div 4(sp),r0
750 rts pc
751
752.globl _lrem
753_lrem:
754 clr r0
755 mov 2(sp),r1
756 div 4(sp),r0
757 mov r1,r0
758 rts pc
759
760.globl _lshift
761_lshift:
762 mov 2(sp),r1
763 mov (r1)+,r0
764 mov (r1),r1
765 ashc 4(sp),r0
766 mov r1,r0
767 rts pc
768
769.globl csv
770csv:
771 mov r5,r0
772 mov sp,r5
773 mov r4,-(sp)
774 mov r3,-(sp)
775 mov r2,-(sp)
776 jsr pc,(r0)
777
778.globl cret
779cret:
780 mov r5,r1
781 mov -(r1),r4
782 mov -(r1),r3
783 mov -(r1),r2
784 mov r5,sp
785 mov (sp)+,r5
786 rts pc
787
788.globl _u
789_u = 140000
790usize = 16.
791
792CSW = 177570
793PS = 177776
794SSR0 = 177572
795SSR1 = 177574
796SSR2 = 177576
797SSR3 = 172516
798KISA0 = 172340
799KISA1 = 172342
800KISA7 = 172356
801KISD0 = 172300
802KDSA0 = 172360
803KDSA6 = 172374
804KDSA7 = 172376
805KDSD0 = 172320
806MTC = 172522
807SISA0 = 172240
808SISA1 = 172242
809SISD0 = 172200
810SISD1 = 172202
811IO = 177600
812
813.data
814.globl _ka6
815.globl _cputype
816
817_ka6: KDSA6
818_cputype:45.
819stk: 0
820
821.bss
822.globl nofault, ssr
823nofault:.=.+2
824ssr: .=.+6
825dispdly:.=.+2
826saveps: .=.+2
827
828.text
829/ system profiler
830/
831/rtt = 6
832/CCSB = 172542
833/CCSR = 172540
834/PS = 177776
835/
836/.globl _sprof, _xprobuf, _probuf, _probsiz, _mode
837/_probsiz = 7500.+2048.
838/
839/_isprof:
840/ mov $_sprof,104 / interrupt
841/ mov $340,106 / pri
842/ mov $100.,CCSB / count set = 100
843/ mov $113,CCSR / count down, 10kHz, repeat
844/ rts pc
845/
846/_sprof:
847/ mov r0,-(sp)
848/ mov PS,r0
849/ ash $-11.,r0
850/ bic $!14,r0
851/ add $1,_mode+2(r0)
852/ adc _mode(r0)
853/ cmp r0,$14 / user
854/ beq done
855/ mov 2(sp),r0 / pc
856/ asr r0
857/ asr r0
858/ bic $140001,r0
859/ cmp r0,$_probsiz
860/ blo 1f
861/ inc _outside
862/ br done
863/1:
864/ inc _probuf(r0)
865/ bne done
866/ mov r1,-(sp)
867/ mov $_xprobuf,r1
868/2:
869/ cmp (r1)+,r0
870/ bne 3f
871/ inc (r1)
872/ br 4f
873/3:
874/ tst (r1)+
875/ bne 2b
876/ sub $4,r1
877/ mov r0,(r1)+
878/ mov $1,(r1)+
879/4:
880/ mov (sp)+,r1
881/done:
882/ mov (sp)+,r0
883/ mov $113,CCSR
884/ rtt
885/
886/.bss
887/_xprobuf: .=.+512.
888/_probuf:.=.+_probsiz
889/_mode: .=.+16.
890/_outside: .=.+2