*** empty log message ***
This commit is contained in:
		
							parent
							
								
									3c7fcfe81a
								
							
						
					
					
						commit
						c0d87aaa16
					
				
					 33 changed files with 994 additions and 0 deletions
				
			
		
							
								
								
									
										33
									
								
								mach/m68k4/libem/aciaio.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								mach/m68k4/libem/aciaio.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| .define	.outch1,.outch2,.inch1,.inch2 | ||||
| 
 | ||||
| 	! a0,d4 used | ||||
| 	! character in d1 | ||||
| 
 | ||||
| 	.text | ||||
| .inch1: | ||||
| 	move.l	#acia1,a0 | ||||
| 	bra	.inch | ||||
| .inch2: | ||||
| 	move.l	#acia2,a0 | ||||
| .inch: | ||||
| 	move.b	(a0),d1 | ||||
| 	asr	#1,d1 | ||||
| 	bcc	.inch | ||||
| 	move.b	2(a0),d1 | ||||
| 	and	#0x7f,d1 | ||||
| 	rts | ||||
| 
 | ||||
| .outch1: | ||||
| 	move.l	#acia1,a0 | ||||
| 	bra	.outch | ||||
| .outch2: | ||||
| 	move.l	#acia2,a0 | ||||
| .outch: | ||||
| 	move.b	(a0),d4 | ||||
| 	asr	#2,d4 | ||||
| 	bcc	.outch | ||||
| 	move.b	d1,2(a0) | ||||
| 	rts | ||||
| 
 | ||||
| 
 | ||||
| .align 2
 | ||||
							
								
								
									
										103
									
								
								mach/m68k4/libem/ara.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								mach/m68k4/libem/ara.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,103 @@ | |||
| .define .sar | ||||
| .define .lar | ||||
| .define .aar | ||||
| 
 | ||||
| 	!register usage: | ||||
| 	! a0 : descriptor address | ||||
| 	! d0 : index | ||||
| 	! a1 : base address | ||||
| 	.text | ||||
| .aar: | ||||
| 	movem.l d0/d1/a0/a1,.savreg | ||||
| 	move.l	(sp)+,.retara	! return address | ||||
| 	move.l	(sp)+,a0	! descriptor address | ||||
| 	move.l	(sp)+,d0	! index | ||||
| 	move.l	(sp)+,a1	! base address | ||||
| 	sub.l	(a0),d0		! index - lower bound : relative index | ||||
| 	move.l	8(a0),-(sp)	! # bytes / element | ||||
| 	move.l	d0,-(sp) | ||||
| 	jsr	.mlu | ||||
| 	add.l	d1,a1		! address of element | ||||
| 	move.l	a1,-(sp)	! returned on stack | ||||
| 	move.l	.retara,-(sp) | ||||
| 	movem.l	d0/d1/a0/a1,.savreg | ||||
| 	rts | ||||
| 
 | ||||
| 
 | ||||
| .lar: | ||||
| 	! register usage: like .aar | ||||
| 	! d2 : # bytes / element | ||||
| 
 | ||||
| 	movem.l d0/d1/d2/a0/a1,.savreg | ||||
| 	move.l	(sp)+,.retara	! return address | ||||
| 	move.l	(sp)+,a0 | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.l	(sp)+,a1 | ||||
| 	sub.l	(a0),d0 | ||||
| 	move.l	8(a0),d2	! # bytes / element | ||||
| 	move.l	d0,-(sp) | ||||
| 	move.l	d2,-(sp) | ||||
| 	jsr	.mlu | ||||
| 	add.l	d1,a1		! address of element | ||||
| 	add.l	d2,a1		! a1++ because of predecrement | ||||
| 	clr.l	d1		!?nodig? | ||||
| 	asr	#1,d2 | ||||
| 	bne	3f | ||||
| 	move.b	-(a1),d1	! 1 byte element | ||||
| 	move.l	d1,-(sp) | ||||
| 	bra	5f | ||||
| 3: | ||||
| 	asr	#1,d2 | ||||
| 	bne	4f | ||||
| 	move.w	-(a1),d1	! 2 byte element | ||||
| 	move.l	d1,-(sp) | ||||
| 	bra 	5f | ||||
| 4: | ||||
| 	sub.l	#1,d2 | ||||
| 1: | ||||
| 	move.l	 -(a1),-(sp)	! 4n byte element (n = 1,2,...) | ||||
| 	dbf 	d2,1b | ||||
| 5: | ||||
| 	move.l	.retara,-(sp) | ||||
| 	movem.l	.savreg,d0/d1/d2/a0/a1 | ||||
| 	rts | ||||
| 
 | ||||
| 
 | ||||
| .sar: | ||||
| 	!register usage: same as lar | ||||
| 
 | ||||
| 	movem.l	d0/d1/a0/a1,.savreg | ||||
| 	move.l	(sp)+,.retara | ||||
| 	move.l	(sp)+,a0 | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.l	(sp)+,a1 | ||||
| 	sub.l	(a0),d0 | ||||
| 	move.l	8(a0),d2	! # bytes / element | ||||
| 	move.l	d0,-(sp) | ||||
| 	move.l	d2,-(sp) | ||||
| 	jsr	.mlu | ||||
| 	add.l	d1,a1 | ||||
| 	clr.l	d1		!?nodig? | ||||
| 	asr	#1,d2 | ||||
| 	bne	3f | ||||
| 	move.l	(sp)+,d1 | ||||
| 	move.b	d1,(a1)		! 1 byte element  | ||||
| 	bra	4f | ||||
| 3: | ||||
| 	asr	#1,d2 | ||||
| 	bne	5f | ||||
| 	move.l	(sp)+,d1 | ||||
| 	move.w	d1,(a1)		! 2 byte element  | ||||
| 	bra	4f | ||||
| 5: | ||||
| 	sub.l	#1,d2 | ||||
| 1: | ||||
| 	move.l	(sp)+,(a1)+	! 4n byte element (n = 1,2,...) | ||||
| 	dbf	d2,1b | ||||
| 4: | ||||
| 	move.l	.retara,-(sp) | ||||
| 	movem.l	.savreg,d0/d1/a0/a1 | ||||
| 	rts | ||||
| .data | ||||
| .retara:	.long 0
 | ||||
| .align 2
 | ||||
							
								
								
									
										36
									
								
								mach/m68k4/libem/ari.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								mach/m68k4/libem/ari.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| .define .sari | ||||
| .define .lari | ||||
| .define .aari | ||||
| 
 | ||||
| 	.text | ||||
| .aari: | ||||
| 	move.l	(sp)+,.retari	! return address | ||||
| 	cmp.l	#4, (sp)+	! size of descriptor elements | ||||
| 	bne	9f | ||||
| 	jsr	.aar | ||||
| 	move.l	.retari,-(sp) | ||||
| 	rts | ||||
| 
 | ||||
| 
 | ||||
| .lari: | ||||
| 	move.l	(sp)+,.retari	! return address | ||||
| 	cmp.l	#4, (sp)+	! size of descriptor elements | ||||
| 	bne	9f | ||||
| 	jsr	.lar | ||||
| 	move.l	.retari,-(sp) | ||||
| 	rts | ||||
| 9: | ||||
| 	move.w	#EILLINS,-(sp) | ||||
| 	jmp	.fat | ||||
| 
 | ||||
| 
 | ||||
| .sari: | ||||
| 	move.l	(sp)+,.retari	! return address | ||||
| 	cmp.l	#4, (sp)+	! size of descriptor elements | ||||
| 	bne	9b | ||||
| 	jsr	.sar | ||||
| 	move.l	.retari,-(sp) | ||||
| 	rts | ||||
| .data | ||||
| .retari:	.long 0
 | ||||
| .align 2
 | ||||
							
								
								
									
										24
									
								
								mach/m68k4/libem/cii.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								mach/m68k4/libem/cii.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| .define	.cii | ||||
| 
 | ||||
| 	.text | ||||
| .cii: | ||||
| 	movem.l	a0/d0/d1,.savreg | ||||
| 	move.l	(sp)+,a0	! return address | ||||
| 	move	(sp)+,d0	! destination size | ||||
| 	sub	(sp)+,d0	! destination - source size | ||||
| 	bgt	1f | ||||
| 	sub	d0,sp		! pop extra bytes | ||||
| 	bra	3f | ||||
| 1: | ||||
| 	move	(sp),d1 | ||||
| 	ext.l	d1 | ||||
| 	swap	d1 | ||||
| 	asr	#1,d0 | ||||
| 2: | ||||
| 	move.w	d1,-(sp) | ||||
| 	dbf	d0,2b | ||||
| 3: | ||||
| 	move.l	a0,-(sp) | ||||
| 	movem.l	.savreg,a0/d0/d1 | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										22
									
								
								mach/m68k4/libem/cmi.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								mach/m68k4/libem/cmi.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| .define	.cmi, .cmi_ | ||||
| 
 | ||||
| 	! NUM == 4 | ||||
| 	! result in d1 | ||||
| 	.text | ||||
| .cmi: | ||||
| .cmi_: | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	d0,.savd0 | ||||
| 	move.l	#1,d1 | ||||
| 	move.l	(sp)+,d0 | ||||
| 	cmp.l	(sp)+,d0 | ||||
| 	bne	1f | ||||
| 	clr.l	d1 | ||||
| 	1: | ||||
| 	ble	2f | ||||
| 	neg.l	d1 | ||||
| 	2: | ||||
| 	move.l	.savd0,d0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										19
									
								
								mach/m68k4/libem/cmp.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								mach/m68k4/libem/cmp.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| .define	.cmp | ||||
| 
 | ||||
| 	.text | ||||
| .cmp: | ||||
| 	move.l	(sp)+,.savret	! return address | ||||
| 	move.l	d0,.savd0 | ||||
| 	move.l	#1,d1 | ||||
| 	move.l	(sp)+,d0 | ||||
| 	cmp.l	(sp)+,d0 | ||||
| 	bne	1f | ||||
| 	clr.l	d1 | ||||
| 	1: | ||||
| 	bcs	2f | ||||
| 	neg.l	d1 | ||||
| 	2: | ||||
| 	move.l	.savd0,d0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										22
									
								
								mach/m68k4/libem/cms.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								mach/m68k4/libem/cms.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| .define	.cms | ||||
| 
 | ||||
| 	! d0 contains set size | ||||
| 
 | ||||
| 	.text | ||||
| .cms: | ||||
| 	move.l	(sp)+,a2	! return address | ||||
| 	move.l	sp,a0 | ||||
| 	move.l	sp,a1 | ||||
| 	add	d0,a1 | ||||
| 	move.w	d0,d1 | ||||
| 	asr	#1,d0 | ||||
| 1: | ||||
| 	cmp	(a0)+,(a1)+ | ||||
| 	bne	2f | ||||
| 	dbf	d0,1b | ||||
| 2: | ||||
| 	asl	#1,d1 | ||||
| 	add	d1,sp | ||||
| 	move.l	d0,-(sp) | ||||
| 	jmp	(a2) | ||||
| .align 2
 | ||||
							
								
								
									
										29
									
								
								mach/m68k4/libem/cmu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								mach/m68k4/libem/cmu.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| .define .cmu | ||||
| 
 | ||||
| 	! d0 : # bytes of 1 block | ||||
| 	.text | ||||
| .cmu: | ||||
| 	movem.l	d2/a0/a1/a2,.savreg | ||||
| 	move.l	(sp)+,a2	! reta | ||||
| 	move.l	sp,a0		! top block | ||||
| 	move.l	sp,a1 | ||||
| 	add.l	d0,a1		! lower block | ||||
| 	move.l	d0,d2 | ||||
| 	asr.l	#2,d0 | ||||
| 	sub.l	#1,d0 | ||||
| 	move.l	#1,d1		! greater | ||||
| 1: | ||||
| 	cmp.l	(a0)+,(a1)+ | ||||
| 	bne	2f | ||||
| 	dbf	d0,1b | ||||
| 	clr.l	d1		! equal | ||||
| 2: | ||||
| 	bcc	3f | ||||
| 	neg.l	d1		! less | ||||
| 3: | ||||
| 	asl.l	#1,d2 | ||||
| 	add.l	d2,sp		! new sp | ||||
| 	move.l	a2,-(sp) | ||||
| 	movem.l	.savreg,d2/a0/a1/a2 | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										29
									
								
								mach/m68k4/libem/csa.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								mach/m68k4/libem/csa.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| .define .csa | ||||
| 
 | ||||
| 	.text | ||||
| .csa: | ||||
| 	movem.l	d0/a0/a1/a2,.savreg | ||||
| 	move.l	(sp)+,a0	! case descriptor | ||||
| 	move.l	(sp)+,d0	! index | ||||
| 	move.l	(a0)+,a1	! default address | ||||
| 	sub.l	(a0)+,d0	! index - lower bound | ||||
| 	blt	1f | ||||
| 	cmp.l	(a0)+,d0	! rel. index <-> upper - lower bound | ||||
| 	bgt	1f | ||||
| 	asl.l	#2,d0 | ||||
| 	add.l	d0,a0 | ||||
| 	move.l	(a0),d0		! test jump address | ||||
| 	beq	1f | ||||
| 	move.l	d0,-(sp) | ||||
| 	bra	3f | ||||
| 1: | ||||
| 	move.l	a1,d0		! test default jump address | ||||
| 	beq	2f | ||||
| 	move.l	a1,-(sp)	! jump address | ||||
| 3: | ||||
| 	movem.l	.savreg,d0/a0/a1/a2 | ||||
| 	rts			! not a real rts | ||||
| 2: | ||||
| 	move.w	#ECASE,-(sp) | ||||
| 	jmp	.fat | ||||
| .align 2
 | ||||
							
								
								
									
										28
									
								
								mach/m68k4/libem/csb.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mach/m68k4/libem/csb.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| .define .csb | ||||
| 
 | ||||
| 	.text | ||||
| .csb: | ||||
| 	movem.l	d0/d1/a0/a1,.savreg | ||||
| 	move.l	(sp)+,a0	! case descriptor | ||||
| 	move.l	(sp)+,d0	! index | ||||
| 	move.l	(a0)+,a1	! default jump address | ||||
| 	move.l	(a0)+,d1	! # entries | ||||
| 	beq	2f | ||||
| 	sub.l	#1,d1 | ||||
| 1: | ||||
| 	cmp.l	(a0)+,d0 | ||||
| 	beq	3f | ||||
| 	tst.l	(a0)+		! skip jump address | ||||
| 	dbf	d1,1b | ||||
| 2: | ||||
| 	move.l	a1,d1		! default jump address | ||||
| 	bne	4f | ||||
| 	move.l	#ECASE,-(sp) | ||||
| 	jmp	.fat | ||||
| 3: | ||||
| 	move.l	(a0)+,a1	! get jump address | ||||
| 4: | ||||
| 	move.l	a1,-(sp) | ||||
| 	movem.l	.savreg,d0/d1/a0/a1 | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										21
									
								
								mach/m68k4/libem/cuu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								mach/m68k4/libem/cuu.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| .define	.ciu | ||||
| .define	.cui | ||||
| .define	.cuu | ||||
| 
 | ||||
| 	.text | ||||
| .ciu: | ||||
| .cui: | ||||
| .cuu: | ||||
| 	move.l	(sp)+,a0	! return address | ||||
| 	move	(sp)+,d0	! destination size | ||||
| 	sub	(sp)+,d0 | ||||
| 	bgt	1f | ||||
| 	sub	d0,sp | ||||
| 	jmp	(a0) | ||||
| 1: | ||||
| 	asr	#1,d0 | ||||
| 2: | ||||
| 	clr	-(sp) | ||||
| 	dbf	d0,2b | ||||
| 	jmp	(a0) | ||||
| .align 2
 | ||||
							
								
								
									
										16
									
								
								mach/m68k4/libem/cvf.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								mach/m68k4/libem/cvf.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| .define	.cfi,.cif,.cfu,.cuf,.cff | ||||
| 
 | ||||
| 	.text | ||||
| 
 | ||||
| 	! this is a dummy float conversion routine | ||||
| .cfi: | ||||
| .cif: | ||||
| .cfu: | ||||
| .cuf: | ||||
| .cff: | ||||
| 	move.l	(sp)+,a0	! return address | ||||
| 	move	(sp)+,d0	! destination size | ||||
| 	sub	(sp)+,d0	! diff. in sizes | ||||
| 	sub	d0,sp | ||||
| 	jmp	(a0) | ||||
| .align 2
 | ||||
							
								
								
									
										37
									
								
								mach/m68k4/libem/dia.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								mach/m68k4/libem/dia.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| .define	.diagnos | ||||
| 
 | ||||
| space	= 040 | ||||
| del	= 0177 | ||||
| 
 | ||||
| 	.text | ||||
| .diagnos: | ||||
| 	move.l	hol0,-(sp) | ||||
| 	move.l	hol0+FILN_AD,d2 | ||||
| 	beq	1f | ||||
| 	move.l	d2,a0 | ||||
| 	move.l	#40,d0 | ||||
| 3: | ||||
| 	move.b	(a0)+,d1 | ||||
| 	beq	2f | ||||
| 	cmp.b	#del,d1 | ||||
| 	bge	1f | ||||
| 	cmp.b	#space,d1 | ||||
| 	blt	1f | ||||
| 	sub	#1,d0 | ||||
| 	bgt	3b | ||||
| 	clr.b	(a1) | ||||
| 2: | ||||
| 	move.l	d2,-(sp) | ||||
| 	pea	fmt | ||||
| 	jsr	_printf | ||||
| 	add	#12,sp | ||||
| 	jmp	_printf | ||||
| 
 | ||||
| 1: | ||||
| 	move.l	#unknwn,d2 | ||||
| 	bra	2b | ||||
| 
 | ||||
| 	.data | ||||
| fmt:	.asciz "%s, line %d: " | ||||
| unknwn:	.asciz "unknown file" | ||||
| .align 2
 | ||||
							
								
								
									
										42
									
								
								mach/m68k4/libem/dvi.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								mach/m68k4/libem/dvi.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| .define .dvi | ||||
| 
 | ||||
|  ! signed long divide | ||||
| 	.text | ||||
| .dvi: | ||||
| 	movem.l	d0/d4,.savdvi | ||||
| 	move.l	(sp)+,.retdvi | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.l	(sp)+,d1 | ||||
| 	clr.l	d4 | ||||
| 	tst.l	d0	! divisor | ||||
| 	bpl	1f | ||||
| 	neg.l	d0 | ||||
| 	not	d4 | ||||
| 1: | ||||
| 	tst.l	d1	! dividend | ||||
| 	bpl	2f | ||||
| 	neg.l	d1 | ||||
| 	not	d4 | ||||
| 	swap	d4 | ||||
| 	not	d4 | ||||
| 	swap	d4 | ||||
| 2: | ||||
| 	move.l	d1,-(sp) | ||||
| 	move.l	d0,-(sp) | ||||
| 	jsr	.dvu | ||||
| 	tst	d4 | ||||
| 	beq	5f | ||||
| 	neg.l	d1	! quotient | ||||
| 5: | ||||
| 	tst.l	d4 | ||||
| 	bpl	6f | ||||
| 	neg.l	d2	! remainder | ||||
| 6: | ||||
| 	movem.l .savdvi,d0/d4 | ||||
| 	move.l	.retdvi,-(sp) | ||||
| 	rts | ||||
| .data | ||||
| .savdvi:	.space 12
 | ||||
| .retdvi:	.long 0
 | ||||
| .text | ||||
| .align 2
 | ||||
							
								
								
									
										34
									
								
								mach/m68k4/libem/dvu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								mach/m68k4/libem/dvu.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| .define .dvu | ||||
| 
 | ||||
|  ! unsigned long divide | ||||
|  ! register usage: | ||||
|  ! 	 : d0 divisor | ||||
|  !         d1 dividend | ||||
|  ! exit  : d1 quotient | ||||
|  !         d2 remainder | ||||
| 	.text | ||||
| .dvu: | ||||
| 	movem.l	d0/d3,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.l	(sp)+,d1 | ||||
| 	tst.l	d0 | ||||
| 	bne	0f | ||||
| 	move.w	#EIDIVZ,-(sp) | ||||
| 	jsr	.trp | ||||
| 0: | ||||
| 	clr.l	d2 | ||||
| 	move.l	#31,d3 | ||||
| 3: | ||||
| 	lsl.l	#1,d1 | ||||
| 	roxl.l	#1,d2 | ||||
| 	cmp.l	d0,d2 | ||||
| 	blt	4f | ||||
| 	sub.l	d0,d2 | ||||
| 	add	#1,d1 | ||||
| 4: | ||||
| 	dbf	d3,3b | ||||
| 	movem.l .savreg,d0/d3 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										26
									
								
								mach/m68k4/libem/exg.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								mach/m68k4/libem/exg.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| .define .exg | ||||
| 
 | ||||
| 	! d0 : exchange size in bytes | ||||
| 	.text | ||||
| .exg: | ||||
| 	move.l	(sp)+,.savret | ||||
| 	movem.l	d1/a1/a2,.savreg | ||||
| 	move.l	sp,a1 | ||||
| 	sub.l	d0,sp | ||||
| 	move.l	sp,a2 | ||||
| 	asr	#1,d0 | ||||
| 	move.l	d0,d1 | ||||
| 1: | ||||
| 	move.l	(a1)+,(a2)+ | ||||
| 	sub	#1,d0 | ||||
| 	bgt	1b | ||||
| 	move.l	sp,a1 | ||||
| 	asr	#1,d1 | ||||
| 1: | ||||
| 	move.l	(a1)+,(a2)+ | ||||
| 	sub	#1,d1 | ||||
| 	bgt	1b | ||||
| 	move.l	a1,sp | ||||
| 	movem.l	.savreg,d1/a1/a2 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
							
								
								
									
										7
									
								
								mach/m68k4/libem/fat.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mach/m68k4/libem/fat.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| .define	.fat | ||||
| 
 | ||||
| 	.text | ||||
| .fat: | ||||
| 	jsr	.trp	 | ||||
| 	jmp	EXIT | ||||
| .align 2
 | ||||
							
								
								
									
										31
									
								
								mach/m68k4/libem/inn.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								mach/m68k4/libem/inn.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| .define .inn | ||||
| 
 | ||||
| ! d0 : set size in bytes | ||||
| ! d1 : bitnumber | ||||
| 
 | ||||
| 	.text | ||||
| .inn: | ||||
| 	movem.l	d1/d2/a0/a1,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d1 | ||||
| 	move.l	sp,a1 | ||||
| 	add.l	d0,a1 | ||||
| 	move.l	sp,a0 | ||||
| 	move.l	d1,d2 | ||||
| 	asr.l	#4,d2 | ||||
| 	!bchg.l	#0,d2 | ||||
| 	cmp.l	d0,d2 | ||||
| 	bcc	1f | ||||
| 	add.l	d2,a0 | ||||
| 	move.l	(a0),d2 | ||||
| 	btst	d1,d2	!eigenlijk .l | ||||
| 	beq	1f | ||||
| 	move.l	#1,d0 | ||||
| 	bra	2f | ||||
| 1: | ||||
| 	clr.l	d0 | ||||
| 2: | ||||
| 	move.l	a1,sp | ||||
| 	movem.l	.savreg,d1/d2/a0/a1 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
							
								
								
									
										25
									
								
								mach/m68k4/libem/lfr.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								mach/m68k4/libem/lfr.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| .define .lfr | ||||
| 
 | ||||
| 	.text | ||||
| .lfr: | ||||
| 	move.l (sp)+,a0 | ||||
| 	cmp #2,d7 | ||||
| 	bne 1f | ||||
| 	move d0,-(sp) | ||||
| 	bra 3f | ||||
| 1: | ||||
| 	cmp #4,d7 | ||||
| 	bne 2f | ||||
| 	move.l d0,-(sp) | ||||
| 	bra 3f | ||||
| 2: | ||||
| 	cmp #8,d7 | ||||
| 	bne 4f | ||||
| 	move.l d1,-(sp) | ||||
| 	move.l d0,-(sp) | ||||
| 3: | ||||
| 	jmp(a0) | ||||
| 4: | ||||
| 	move.w	#EILLINS,-(sp) | ||||
| 	jmp	.fat | ||||
| .align 2
 | ||||
							
								
								
									
										36
									
								
								mach/m68k4/libem/los.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								mach/m68k4/libem/los.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| .define .los | ||||
| 
 | ||||
| 	! d0 : # bytes | ||||
| 	! a0 : source address | ||||
| 	.text | ||||
| .los: | ||||
| 	movem.l	d0/a0,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.l	(sp)+,a0 | ||||
| 	cmp.l	#1,d0 | ||||
| 	bne	1f | ||||
| 	clr.l	d0		!1 byte | ||||
| 	move.b	(a0),d0 | ||||
| 	move.l	d0,-(sp) | ||||
| 	bra	3f | ||||
| 1: | ||||
| 	cmp.l 	#2,d0 | ||||
| 	bne	2f | ||||
| 	clr.l 	d0		!2 bytes | ||||
| 	add.l	#2,a0 | ||||
| 	move.w	(a0),d0 | ||||
| 	move.l	d0,-(sp) | ||||
| 	bra	3f | ||||
| 2: | ||||
| 	add.l	d0,a0		!>=4 bytes | ||||
| 	asr.l 	#2,d0 | ||||
| 
 | ||||
| 4:	move.l	-(a0),-(sp)	 | ||||
| 	sub.l	#1,d0 | ||||
| 	bgt	4b | ||||
| 3: | ||||
| 	movem.l	.savreg,d0/a0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										36
									
								
								mach/m68k4/libem/mli.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								mach/m68k4/libem/mli.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| .define .mli | ||||
| 
 | ||||
| 
 | ||||
| 	.text | ||||
| .mli: | ||||
| 	move.l	d5,.savmli | ||||
| 	move.l	(sp)+,.retmli | ||||
| 	move.l	(sp)+,d1 | ||||
| 	move.l	(sp)+,d0 | ||||
| 	clr	d5 | ||||
| 	tst.l	d0 | ||||
| 	bpl	1f | ||||
| 	neg.l	d0 | ||||
| 	not	d5 | ||||
| 1: | ||||
| 	tst.l	d1 | ||||
| 	bpl	2f | ||||
| 	neg.l	d1 | ||||
| 	not	d5 | ||||
| 2: | ||||
| 	move.l	d0,-(sp) | ||||
| 	move.l	d1,-(sp) | ||||
| 	jsr	.mlu | ||||
| 	tst	d5 | ||||
| 	beq	3f | ||||
| 	neg.l	d1 | ||||
| 	negx.l	d0 | ||||
| 3: | ||||
| 	move.l	.savmli,d5 | ||||
| 	move.l	.retmli,-(sp) | ||||
| 	rts | ||||
| .data | ||||
| .savmli:	.long 0
 | ||||
| .retmli:	.long 0
 | ||||
| .text | ||||
| .align 2
 | ||||
							
								
								
									
										47
									
								
								mach/m68k4/libem/mlu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								mach/m68k4/libem/mlu.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| .define .mlu | ||||
| 
 | ||||
|  ! entry : d0 multiplicand | ||||
|  !         d1 multiplier | ||||
|  ! exit  : d0 high order result | ||||
|  !         d1 low order result | ||||
| 
 | ||||
| 	.text | ||||
| .mlu: | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d1 | ||||
| 	move.l	(sp)+,d0 | ||||
| 	cmp.l	#32768,d0 | ||||
| 	bgt	1f | ||||
| 	cmp.l	#32768,d1 | ||||
| 	bls	2f | ||||
| 1:	movem.l	d2/d3/d4/d6,.savreg | ||||
| 	move.l	d1,d3 | ||||
| 	move.l	d1,d2 | ||||
| 	swap	d2 | ||||
| 	move.l	d2,d4 | ||||
| 	mulu	d0,d1 | ||||
| 	mulu	d0,d2 | ||||
| 	swap	d0 | ||||
| 	mulu	d0,d3 | ||||
| 	mulu	d4,d0 | ||||
| 	clr.l	d6 | ||||
| 	swap	d1 | ||||
| 	add	d2,d1 | ||||
| 	addx.l	d6,d0 | ||||
| 	add	d3,d1 | ||||
| 	addx.l	d6,d0 | ||||
| 	swap	d1 | ||||
| 	clr	d2 | ||||
| 	clr	d3 | ||||
| 	swap	d2 | ||||
| 	swap	d3 | ||||
| 	add.l	d2,d0 | ||||
| 	add.l	d3,d0 | ||||
| 	movem.l	.savreg,d2/d3/d4/d6 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| 2:	mulu	d0,d1 | ||||
| 	clr	d0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										12
									
								
								mach/m68k4/libem/mon.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								mach/m68k4/libem/mon.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| .define .mon | ||||
| 	.text | ||||
| .mon: | ||||
| 	move.l	(sp)+,a0 | ||||
| 	pea	fmt | ||||
| 	jsr	.diagnos | ||||
| 	add	#6,sp | ||||
| 	jmp	EXIT | ||||
| 
 | ||||
| 	.data | ||||
| fmt:	.asciz "system call %d not implemented" | ||||
| .align 2
 | ||||
							
								
								
									
										13
									
								
								mach/m68k4/libem/nop.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								mach/m68k4/libem/nop.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| .define .nop | ||||
| 
 | ||||
| 	.text | ||||
| .nop: | ||||
| 	move.l	hol0,-(sp) | ||||
| 	pea	fmt | ||||
| 	jsr	.diagnos | ||||
| 	add.l	#8,sp | ||||
| 	rts | ||||
| 
 | ||||
| 	.data | ||||
| fmt:	.asciz "test %d\n" | ||||
| .align 2
 | ||||
							
								
								
									
										77
									
								
								mach/m68k4/libem/printf.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								mach/m68k4/libem/printf.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| .define _printf
 | ||||
| .define _putchar
 | ||||
| .define _getal
 | ||||
| .define _char
 | ||||
| .bss | ||||
| _getal: | ||||
| 	.space	12
 | ||||
| _char: | ||||
| 	.space	1
 | ||||
| .data | ||||
| sav: | ||||
| 	.long	0
 | ||||
| .text | ||||
| _printf: | ||||
| 	movem.l	d0/d1/d3/a0/a1/a2/a3/a4/a5/a6,.savreg | ||||
| 	move.l	(sp)+,sav	!return address | ||||
| 	move.l	sp,a6		!a6 <- address of arguments | ||||
| 	move.l	(a6)+,a5	!a5 <- address of format | ||||
| 	clr.l	d0		!d0 <- char to be printed | ||||
| next:	move.b	(a5)+,d0 | ||||
| 	beq	out | ||||
| 	cmp.b	#'%',d0 | ||||
| 	beq	procnt | ||||
| put:	move.l	d0,-(sp) | ||||
| 	jsr	_putchar	!argument is long en op de stack | ||||
| 	tst.l	(sp)+ | ||||
| 	jmp	next | ||||
| 
 | ||||
| procnt:	move.b	(a5)+,d0 | ||||
| 	cmp.b	#'d',d0		!NOTE: %d means unsigned. | ||||
| 	beq	digit | ||||
| 	cmp.b	#'s',d0 | ||||
| 	beq	string | ||||
| 	cmp.b	#'%',d0		!second % has to be printed. | ||||
| 	beq	put | ||||
| 	tst.b	-(a5)		!normal char should be printed | ||||
| 	jmp	next | ||||
| 
 | ||||
| string:	move.l	(a6)+,a2	!a2 <- address of string | ||||
| sloop:	move.b	(a2)+,d0 | ||||
| 	beq	next | ||||
| 	move.l	d0,-(sp) | ||||
| 	jsr	_putchar	!argument is long en op de stack | ||||
| 	tst.l	(sp)+ | ||||
| 	jmp	sloop | ||||
| 
 | ||||
| digit:	move.l	(a6)+,d1	!d1 <- integer | ||||
| 	move.l	#_getal+12,a3	!a3 <- ptr to last part of buf | ||||
| 	move.b	#0,-(a3)	!stringterminator | ||||
| dloop:	move.l	d1,-(sp) | ||||
| 	move.l	#10,-(sp) | ||||
| 	jsr	.dvu		!d1 <- quotient d3 <- remainder | ||||
| 	add.l	#'0',d3 | ||||
| 	move.b	d3,-(a3) | ||||
| 	tst.l	d1		!if quotient = 0 then ready | ||||
| 	bne	dloop | ||||
| 	move.l	a3,a2 | ||||
| 	jmp	sloop		!print digitstring. | ||||
| 
 | ||||
| out: | ||||
| 	move.l	sav,-(sp) | ||||
| 	movem.l	.savreg,d0/d1/d3/a0/a1/a2/a3/a4/a5/a6 | ||||
| 	rts | ||||
| 
 | ||||
| 
 | ||||
| _putchar: | ||||
| 	movem.l	d0,.savreg | ||||
| 	move.l	4(sp),d0 | ||||
| 	move.b	d0,_char | ||||
| 	move.l	#1,-(sp) | ||||
| 	move.l	#_char,-(sp) | ||||
| 	move.l	#1,-(sp) | ||||
| 	jsr	_write | ||||
| 	add.l	#12,sp | ||||
| 	movem.l	.savreg,d0 | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										20
									
								
								mach/m68k4/libem/rck.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mach/m68k4/libem/rck.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| .define .rck | ||||
| 
 | ||||
| 	.text | ||||
| .rck: | ||||
| 	movem.l	d0/a0,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,a0	! descriptor address | ||||
| 	move.l	(sp),d0 | ||||
| 	cmp.l	(a0),d0 | ||||
| 	blt	1f | ||||
| 	cmp.l	2(a0),d0 | ||||
| 	ble	2f | ||||
| 1: | ||||
| 	move.l	#ERANGE,-(sp) | ||||
| 	jsr	.trp | ||||
| 2: | ||||
| 	movem.l	.savreg,d0/a0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										26
									
								
								mach/m68k4/libem/ret.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								mach/m68k4/libem/ret.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| .define .ret | ||||
| 
 | ||||
| 	.text | ||||
| .ret: | ||||
| 	beq 3f | ||||
| 	cmp #2,d0 | ||||
| 	bne 1f | ||||
| 	move (sp)+,d0 | ||||
| 	bra 3f | ||||
| 1: | ||||
| 	cmp #4,d0 | ||||
| 	bne 2f | ||||
| 	move.l (sp)+,d0 | ||||
| 	bra 3f | ||||
| 2: | ||||
| 	cmp #8,d0 | ||||
| 	bne 4f | ||||
| 	move.l (sp)+,d0 | ||||
| 	move.l (sp)+,d1 | ||||
| 3: | ||||
| 	unlk a6 | ||||
| 	rts | ||||
| 4: | ||||
| 	move.w	#EILLINS,-(sp) | ||||
| 	jmp	.fat | ||||
| .align 2
 | ||||
							
								
								
									
										13
									
								
								mach/m68k4/libem/sav.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								mach/m68k4/libem/sav.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| .define .savd0 | ||||
| .define .savret | ||||
| .define .savreg | ||||
| 
 | ||||
| .data | ||||
| .savd0: | ||||
| 	.long 0
 | ||||
| .savret: | ||||
| 	.long 0
 | ||||
| .savreg: | ||||
| 	.space 128
 | ||||
| .text | ||||
| .align 2
 | ||||
							
								
								
									
										32
									
								
								mach/m68k4/libem/set.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								mach/m68k4/libem/set.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| .define .set | ||||
| 
 | ||||
| 	! d0 : setsize in bytes | ||||
| 	! d1 : bitnumber | ||||
| 	.text | ||||
| .set: | ||||
| 	movem.l	d1/d2/a1,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d1 | ||||
| 	move.l	d0,d2 | ||||
| 	asr.l	#2,d2 | ||||
| 1: | ||||
| 	clr.l	-(sp)		!create empty set | ||||
| 	sub.l	#1,d2 | ||||
| 	bgt	1b | ||||
| 	move.l	sp,a1		! set base | ||||
| 	move.l	d1,d2 | ||||
| 	asr.l	#4,d2 | ||||
| 	!bchg	#0,d2 | ||||
| 	cmp.l	d0,d2 | ||||
| 	bcs	1f | ||||
| 	move.w	#ESET,-(sp) | ||||
| 	move.l	.savret,-(sp) | ||||
| 	jmp	.trp | ||||
| 1: | ||||
| 	add.l	d2,a1 | ||||
| 	move.l	(a1),d2 | ||||
| 	bset	d1,d2 | ||||
| 	move.l	d2,(a1) | ||||
| 	movem.l	.savreg,d1/d2/a1 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
							
								
								
									
										23
									
								
								mach/m68k4/libem/shp.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								mach/m68k4/libem/shp.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| .define	.strhp | ||||
| 
 | ||||
| 	.text | ||||
| .strhp: | ||||
| 	move.l	d0,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d0	! heap pointer | ||||
| 	move.l	d0,.reghp | ||||
| 	cmp.l	.limhp,d0 | ||||
| 	blt	1f | ||||
| 	add.l	#0x400,d0 | ||||
| 	and.l	#~0x3ff,d0 | ||||
| 	move.l	d0,.limhp | ||||
| 	cmp.l	d0,sp | ||||
| 	ble	2f | ||||
| 1: | ||||
| 	move.l	.savreg,d0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| 2: | ||||
| 	move.w	#EHEAP,-(sp) | ||||
| 	jmp	.fat | ||||
| .align 2
 | ||||
							
								
								
									
										13
									
								
								mach/m68k4/libem/sig.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								mach/m68k4/libem/sig.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| .define	.sig | ||||
| 
 | ||||
| 	.text | ||||
| .sig: | ||||
| 	movem.l	a1/a2,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,a1	! trap pc | ||||
| 	move.l	.trppc,-(sp) | ||||
| 	move.l	a1,.trppc | ||||
| 	movem.l	.savreg,a1/a2 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										33
									
								
								mach/m68k4/libem/sts.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								mach/m68k4/libem/sts.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| .define .sts | ||||
| 
 | ||||
| 	! d0 : # bytes | ||||
| 	! a0 : destination address | ||||
| 	.text | ||||
| .sts: | ||||
| 	movem.l	d0/a0,.savreg | ||||
| 	move.l	(sp)+,.savret | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.l	(sp)+,a0 | ||||
| 	cmp	#1,d0 | ||||
| 	bne	1f | ||||
| 	move.l	(sp)+,d0 | ||||
| 	move.b	d0,(a0) | ||||
| 	bra	4f | ||||
| 
 | ||||
| 1:	cmp	#2,d0 | ||||
| 	bne	2f | ||||
| 	move.l	(sp)+,d0 | ||||
| 	add.l	#2,a0 | ||||
| 	move.w	d0,(a0) | ||||
| 	bra	4f | ||||
| 2: | ||||
| 	asr	#2,d0 | ||||
| 	sub.l	#1,d0 | ||||
| 3: | ||||
| 	move.l	(sp)+,(a0)+ | ||||
| 	dbf	d0,3b | ||||
| 4: | ||||
| 	movem.l	.savreg,d0/a0 | ||||
| 	move.l	.savret,-(sp) | ||||
| 	rts | ||||
| .align 2
 | ||||
							
								
								
									
										29
									
								
								mach/m68k4/libem/trp.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								mach/m68k4/libem/trp.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| .define	.trp | ||||
| 
 | ||||
| 	.text | ||||
| .trp: | ||||
| 	move.l	(sp)+,a2	! return address | ||||
| 	move.w	(sp)+,d0	! error number | ||||
| 	move.l	a2,-(sp) | ||||
| 	move.w	d0,-(sp) | ||||
| 	cmp	#16,d0 | ||||
| 	bcc	1f | ||||
| 	btst	d0,.trpim | ||||
| 	bne	3f | ||||
| 1: | ||||
| 	move.l	.trppc,a0 | ||||
| 	move.l	a0,d0 | ||||
| 	beq	9f | ||||
| 	clr.l	.trppc | ||||
| 	jsr	(a0) | ||||
| 3: | ||||
| 	add	#2,sp | ||||
| 	rts | ||||
| 9: | ||||
| 	pea	fmt | ||||
| 	jsr	.diagnos | ||||
| 	jmp	EXIT | ||||
| 
 | ||||
| 	.data | ||||
| fmt:	.asciz "trap %d called\n" | ||||
| .align 2
 | ||||
		Loading…
	
	Add table
		
		Reference in a new issue