Initial revision
This commit is contained in:
		
							parent
							
								
									31b5e111bf
								
							
						
					
					
						commit
						945d6a0188
					
				
					 27 changed files with 819 additions and 0 deletions
				
			
		
							
								
								
									
										24
									
								
								mach/m68020/libem/LIST
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								mach/m68020/libem/LIST
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					libem_s.a
 | 
				
			||||||
 | 
					aar.s
 | 
				
			||||||
 | 
					lar.s
 | 
				
			||||||
 | 
					sar.s
 | 
				
			||||||
 | 
					csa.s
 | 
				
			||||||
 | 
					csb.s
 | 
				
			||||||
 | 
					shp.s
 | 
				
			||||||
 | 
					set.s
 | 
				
			||||||
 | 
					inn.s
 | 
				
			||||||
 | 
					fat.s
 | 
				
			||||||
 | 
					trp.s
 | 
				
			||||||
 | 
					mon.s
 | 
				
			||||||
 | 
					nop.s
 | 
				
			||||||
 | 
					dia.s
 | 
				
			||||||
 | 
					printf.s
 | 
				
			||||||
 | 
					cii.s
 | 
				
			||||||
 | 
					cuu.s
 | 
				
			||||||
 | 
					cmi.s
 | 
				
			||||||
 | 
					cms.s
 | 
				
			||||||
 | 
					cmu.s
 | 
				
			||||||
 | 
					cvf.s
 | 
				
			||||||
 | 
					exg.s
 | 
				
			||||||
 | 
					los.s
 | 
				
			||||||
 | 
					sts.s
 | 
				
			||||||
							
								
								
									
										28
									
								
								mach/m68020/libem/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mach/m68020/libem/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					# $Header$
 | 
				
			||||||
 | 
					MACH=m68020
 | 
				
			||||||
 | 
					all:            libem_o.a end.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install: 	all
 | 
				
			||||||
 | 
							../../install libem_o.a tail_em
 | 
				
			||||||
 | 
							../../install end.o end_em
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cmp:		all
 | 
				
			||||||
 | 
							-../../compare libem_o.a tail_em
 | 
				
			||||||
 | 
							-../../compare end.o end_em
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end.o:		end.s
 | 
				
			||||||
 | 
							$(MACH) -I../../../h -c end.s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libem_o.a:	libem_s.a
 | 
				
			||||||
 | 
							ASAR=aal ; export ASAR ;\
 | 
				
			||||||
 | 
							march . libem_o.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
							rm -f *.o libem_o.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					opr :
 | 
				
			||||||
 | 
							make pr | opr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pr:
 | 
				
			||||||
 | 
							@arch pv libem_s.a | pr -h `pwd`/libem_s.a
 | 
				
			||||||
 | 
							@pr `pwd`/end.s
 | 
				
			||||||
							
								
								
									
										32
									
								
								mach/m68020/libem/aar.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								mach/m68020/libem/aar.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					.define	.aar
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.aar:	! (on entry d0 contains the integer size in the descriptor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmp.l	#4, d0
 | 
				
			||||||
 | 
						beq	9f
 | 
				
			||||||
 | 
						move.l	#EILLINS, -(sp)
 | 
				
			||||||
 | 
						jmp	(.fatal)
 | 
				
			||||||
 | 
					9:
 | 
				
			||||||
 | 
						! register usage:
 | 
				
			||||||
 | 
						! a0: descriptor address
 | 
				
			||||||
 | 
						! a1: return address
 | 
				
			||||||
 | 
						! d0: index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						! The address is calculated by taking the relative index
 | 
				
			||||||
 | 
						! (index - lower bound), multiplying that with the element
 | 
				
			||||||
 | 
						! size and adding the result to the array base address.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move.l	(sp)+, a1	! return address
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! descriptor address
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! index
 | 
				
			||||||
 | 
						sub.l	(a0), d0	! relative index
 | 
				
			||||||
 | 
						muls.l	(8,a0), d0
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! array base address
 | 
				
			||||||
 | 
						add.l	d0, a0		! address of array element
 | 
				
			||||||
 | 
						jmp	(a1)		! return
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										27
									
								
								mach/m68020/libem/cii.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								mach/m68020/libem/cii.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					.define	.cii
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.cii:
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! return address
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! destination size
 | 
				
			||||||
 | 
						sub.l	(sp)+, d0	! destination - source size
 | 
				
			||||||
 | 
						bgt	1f
 | 
				
			||||||
 | 
						sub.l	d0, sp		! pop extra bytes
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						clr.l	d1
 | 
				
			||||||
 | 
						tst.l	(sp)
 | 
				
			||||||
 | 
						bne	4f
 | 
				
			||||||
 | 
						not.l	d1		! d1 contains sign of source
 | 
				
			||||||
 | 
					4:
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						move.l	d1, -(sp)
 | 
				
			||||||
 | 
						dbf	d0, 2b
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										28
									
								
								mach/m68020/libem/cmi.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mach/m68020/libem/cmi.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					.define	.cmi
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! on entry d0: # bytes in 1 block
 | 
				
			||||||
 | 
						! on exit d0: result
 | 
				
			||||||
 | 
					.cmi:
 | 
				
			||||||
 | 
						move.l	(sp)+, d2	! return address
 | 
				
			||||||
 | 
						move.l	sp, a0		! address of top block
 | 
				
			||||||
 | 
						lea	(sp,d0.l), a1	! address of lower block
 | 
				
			||||||
 | 
						move.l	d0, d1
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						cmp.l	(a0)+, (a1)+
 | 
				
			||||||
 | 
						bne	2f
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
						bne	1b
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						bge	3f
 | 
				
			||||||
 | 
						neg.l	d0		! less
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						lea	(sp,d1.l*2), sp	! new sp; two blocks popped
 | 
				
			||||||
 | 
						move.l	d2,a0
 | 
				
			||||||
 | 
						jmp	(a0)		! return
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										25
									
								
								mach/m68020/libem/cms.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								mach/m68020/libem/cms.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					.define	.cms
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! d0 contains set size
 | 
				
			||||||
 | 
						! on exit d0 is zero for equal, non-zero for not equal
 | 
				
			||||||
 | 
					.cms:
 | 
				
			||||||
 | 
						move.l	(sp)+, d2	! return address
 | 
				
			||||||
 | 
						move.l	sp, a0		! address of top block
 | 
				
			||||||
 | 
						lea	(sp,d0.l), a1	! address of lower block
 | 
				
			||||||
 | 
						move.l	d0, d1
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						cmp.l	(a0)+, (a1)+
 | 
				
			||||||
 | 
						bne	2f
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
						bne	1b
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						lea	(sp,d1.l*2), sp	! new sp; two blocks popped
 | 
				
			||||||
 | 
						move.l	d2,a0
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										28
									
								
								mach/m68020/libem/cmu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mach/m68020/libem/cmu.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					.define	.cmu
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! on entry d0: # bytes in 1 block
 | 
				
			||||||
 | 
						! on exit d0: result
 | 
				
			||||||
 | 
					.cmu:
 | 
				
			||||||
 | 
						move.l	(sp)+, d2	! return address
 | 
				
			||||||
 | 
						move.l	sp, a0		! address of top block
 | 
				
			||||||
 | 
						lea	(sp,d0.l), a1	! address of lower block
 | 
				
			||||||
 | 
						move.l	d0, d1
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						cmp.l	(a0)+, (a1)+
 | 
				
			||||||
 | 
						bne	2f
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
						bne	1b		! note: on equal carry is set
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						bcc	3f
 | 
				
			||||||
 | 
						neg.l	d0		! less
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						lea	(sp,d1.l*2), sp	! new sp; two blocks popped
 | 
				
			||||||
 | 
						move.l	d2, a0
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										4
									
								
								mach/m68020/libem/compmodule
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								mach/m68020/libem/compmodule
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					if ${MACH?} -c $1 1>&2
 | 
				
			||||||
 | 
					then echo `basename $1 $2`.o
 | 
				
			||||||
 | 
					else exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
							
								
								
									
										25
									
								
								mach/m68020/libem/csa.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								mach/m68020/libem/csa.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					.define	.csa
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.csa:
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! jump table address
 | 
				
			||||||
 | 
						move.l	(a0)+, a1	! default address
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! index
 | 
				
			||||||
 | 
						sub.l	(a0)+, d0	! index - lower bound
 | 
				
			||||||
 | 
						blt	1f
 | 
				
			||||||
 | 
						cmp.l	(a0)+, d0	! rel. index, upper - lower bound
 | 
				
			||||||
 | 
						bgt	1f
 | 
				
			||||||
 | 
						move.l	(a0,d0.l*4), a1	! jump address
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	a1, d0
 | 
				
			||||||
 | 
						beq	2f
 | 
				
			||||||
 | 
						jmp	(a1)		! jump to specified address
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						move.l	#ECASE, -(sp)
 | 
				
			||||||
 | 
						jmp	(.fatal)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										28
									
								
								mach/m68020/libem/csb.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mach/m68020/libem/csb.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					.define	.csb
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.csb:
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! case descriptor
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! index
 | 
				
			||||||
 | 
						move.l	(a0)+, a1	! default jump address
 | 
				
			||||||
 | 
						move.l	(a0)+, d1	! # entries
 | 
				
			||||||
 | 
						beq	3f
 | 
				
			||||||
 | 
						sub.l	#1, d1
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						cmp.l	(a0,d1.w*8), d0
 | 
				
			||||||
 | 
						dbeq	d1, 1b
 | 
				
			||||||
 | 
						bne	3f
 | 
				
			||||||
 | 
						move.l	(4,a0,d1.w*8), a1 ! jump address
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						move.l	a1, d0
 | 
				
			||||||
 | 
						beq	4f
 | 
				
			||||||
 | 
						jmp	(a1)
 | 
				
			||||||
 | 
					4:
 | 
				
			||||||
 | 
						move.l	#ECASE, -(sp)
 | 
				
			||||||
 | 
						jmp	(.fatal)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										25
									
								
								mach/m68020/libem/cuu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								mach/m68020/libem/cuu.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					.define	.ciu, .cui, .cuu
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! only converts between sizes of multiples of four
 | 
				
			||||||
 | 
					.ciu:
 | 
				
			||||||
 | 
					.cui:
 | 
				
			||||||
 | 
					.cuu:
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! return address
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! destination size
 | 
				
			||||||
 | 
						sub.l	(sp)+, d0
 | 
				
			||||||
 | 
						bgt	1f
 | 
				
			||||||
 | 
						sub.l	d0, sp
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						clr.l	-(sp)
 | 
				
			||||||
 | 
						dbf	d0, 2b
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										20
									
								
								mach/m68020/libem/cvf.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mach/m68020/libem/cvf.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					.define	.cfi, .cif,.cfu,.cuf,.cff
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.sect .text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						! this is a dummy float conversion routine
 | 
				
			||||||
 | 
					.cfi:
 | 
				
			||||||
 | 
					.cif:
 | 
				
			||||||
 | 
					.cfu:
 | 
				
			||||||
 | 
					.cuf:
 | 
				
			||||||
 | 
					.cff:
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! return address
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! destination size
 | 
				
			||||||
 | 
						sub.l	(sp)+, d0	! diff. in sizes
 | 
				
			||||||
 | 
						sub.l	d0, sp
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										48
									
								
								mach/m68020/libem/dia.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								mach/m68020/libem/dia.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,48 @@
 | 
				
			||||||
 | 
					.define	.diagnos
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					space	= 040
 | 
				
			||||||
 | 
					del	= 0177
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.range:	.data1 space, del-1
 | 
				
			||||||
 | 
					.align	2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.diagnos:
 | 
				
			||||||
 | 
						movem.l	d0/d1/d2/a0, -(sp)
 | 
				
			||||||
 | 
						move.l	(.lino), -(sp)
 | 
				
			||||||
 | 
						move.l	(.filn), d2
 | 
				
			||||||
 | 
						beq	1f
 | 
				
			||||||
 | 
						move.l	d2, a0
 | 
				
			||||||
 | 
						move.l	#40, d0
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						move.b	(a0)+, d1
 | 
				
			||||||
 | 
						beq	2f
 | 
				
			||||||
 | 
						cmp2.b	(.range), d1
 | 
				
			||||||
 | 
						bcs	1f
 | 
				
			||||||
 | 
						dbf	d0, 3b
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						move.l	d2, -(sp)
 | 
				
			||||||
 | 
						pea	(fmt)
 | 
				
			||||||
 | 
						jsr	(_printf)
 | 
				
			||||||
 | 
						lea	(8, sp), sp
 | 
				
			||||||
 | 
						move.l	(28, sp), (sp)
 | 
				
			||||||
 | 
						jsr	(_printf)
 | 
				
			||||||
 | 
						lea	(4, sp), sp
 | 
				
			||||||
 | 
						movem.l	(sp)+, d0/d1/d2/a0
 | 
				
			||||||
 | 
						move.l	(sp), (4, sp)
 | 
				
			||||||
 | 
						lea	(4, sp), sp
 | 
				
			||||||
 | 
						rts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	#unknwn, d2
 | 
				
			||||||
 | 
						bra	2b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					fmt:		.asciz "%s, line %d: "
 | 
				
			||||||
 | 
					unknwn:		.asciz "unknown file"
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										20
									
								
								mach/m68020/libem/end.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mach/m68020/libem/end.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					.define	endtext,enddata,endbss,_etext,_edata,_end
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						.align 4
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
						.align 4
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
						.align 4
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
						.align 4
 | 
				
			||||||
 | 
					.sect .end ! only for declaration of _end and endbss.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.sect .text
 | 
				
			||||||
 | 
					endtext:
 | 
				
			||||||
 | 
					_etext:
 | 
				
			||||||
 | 
						.sect .data
 | 
				
			||||||
 | 
					enddata:
 | 
				
			||||||
 | 
					_edata:
 | 
				
			||||||
 | 
						.sect .end
 | 
				
			||||||
 | 
					_end:
 | 
				
			||||||
 | 
					endbss:
 | 
				
			||||||
							
								
								
									
										20
									
								
								mach/m68020/libem/exg.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mach/m68020/libem/exg.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					.define	.exg
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! d0 : exchange size in bytes
 | 
				
			||||||
 | 
					.exg:
 | 
				
			||||||
 | 
						lea	(4,sp,d0), a0	! address of bottom block
 | 
				
			||||||
 | 
						lea	(4,sp), a1	! address of top block
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	(a1), d1
 | 
				
			||||||
 | 
						move.l	(a0), (a1)+
 | 
				
			||||||
 | 
						move.l	d1, (a0)+
 | 
				
			||||||
 | 
						dbf	d0, 1b
 | 
				
			||||||
 | 
						rts
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										11
									
								
								mach/m68020/libem/fat.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								mach/m68020/libem/fat.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					.define	.fatal
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.sect .text
 | 
				
			||||||
 | 
					.fatal:
 | 
				
			||||||
 | 
						jsr	(.trp)
 | 
				
			||||||
 | 
						jmp	(EXIT)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										32
									
								
								mach/m68020/libem/inn.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								mach/m68020/libem/inn.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					.define	.inn
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inn:	! d0 bitnumber
 | 
				
			||||||
 | 
						! d1 setsize in bytes
 | 
				
			||||||
 | 
						! on exit: 0 or 1 in d0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move.l	d2, -(sp)
 | 
				
			||||||
 | 
						move.l	d0, d2
 | 
				
			||||||
 | 
						asr.l	#3, d2		! offset from sp in bytes
 | 
				
			||||||
 | 
						eor.l	#3, d2		! longs are stored in high-to-low order
 | 
				
			||||||
 | 
						cmp.l	d1, d2
 | 
				
			||||||
 | 
						bge	1f		! bitnumber too large
 | 
				
			||||||
 | 
						btst	d0, (8,sp,d2.l)
 | 
				
			||||||
 | 
						beq	2f
 | 
				
			||||||
 | 
						move.l	#1, d0
 | 
				
			||||||
 | 
						bra	3f
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	#ESET, -(sp)
 | 
				
			||||||
 | 
						jsr	(.trp)
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						clr.l	d0
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						move.l	(sp)+, d2
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! return address
 | 
				
			||||||
 | 
						add.l	d1, sp		! pop bitset
 | 
				
			||||||
 | 
						jmp	(a0)		! return
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										52
									
								
								mach/m68020/libem/lar.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								mach/m68020/libem/lar.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					.define	.lar
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! (on entry d0 contains the integer size in the descriptor)
 | 
				
			||||||
 | 
					.lar:
 | 
				
			||||||
 | 
						cmp.l	#4, d0
 | 
				
			||||||
 | 
						beq	9f
 | 
				
			||||||
 | 
						move.l	#EILLINS, -(sp)
 | 
				
			||||||
 | 
						jmp	(.fatal)
 | 
				
			||||||
 | 
					9:
 | 
				
			||||||
 | 
						! register usage:
 | 
				
			||||||
 | 
						! a0: descriptor address
 | 
				
			||||||
 | 
						! a1: base address
 | 
				
			||||||
 | 
						! d0: index
 | 
				
			||||||
 | 
						! d1: # bytes / element
 | 
				
			||||||
 | 
						! d2: save return address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						! For address calculation; see comment in 'aar.s'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move.l	(sp)+, d2	! return address
 | 
				
			||||||
 | 
						move.l	(sp)+, a0	! descriptor address
 | 
				
			||||||
 | 
						move.l	(sp)+, d0	! index
 | 
				
			||||||
 | 
						move.l	(sp)+, a1	! array base address
 | 
				
			||||||
 | 
						sub.l	(a0), d0	! relative index
 | 
				
			||||||
 | 
						move.l	(8,a0), d1	! # bytes / element
 | 
				
			||||||
 | 
						cmp.l	#1, d1
 | 
				
			||||||
 | 
						bne	2f
 | 
				
			||||||
 | 
						clr.l	-(sp)
 | 
				
			||||||
 | 
						move.b	(a1,d0.l), (3,sp) ! one byte element
 | 
				
			||||||
 | 
						bra	5f
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						cmp.l	#2, d1
 | 
				
			||||||
 | 
						bne	4f
 | 
				
			||||||
 | 
						clr.l	-(sp)
 | 
				
			||||||
 | 
						move.w	(a1,d0.l*2), (2,sp) ! two byte element
 | 
				
			||||||
 | 
						bra	5f
 | 
				
			||||||
 | 
					4:	
 | 
				
			||||||
 | 
						muls.l	d1, d0
 | 
				
			||||||
 | 
						add.l	d0, a1		! address of 4n byte element
 | 
				
			||||||
 | 
						add.l	d1, a1		! because of predecrement
 | 
				
			||||||
 | 
						asr.l	#2, d1
 | 
				
			||||||
 | 
						sub.l	#1, d1
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	-(a1), -(sp)
 | 
				
			||||||
 | 
						dbf	d1, 1b
 | 
				
			||||||
 | 
					5:
 | 
				
			||||||
 | 
						move.l	d2,a0
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										35
									
								
								mach/m68020/libem/los.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								mach/m68020/libem/los.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					.define .los
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						! d0 : # bytes
 | 
				
			||||||
 | 
						! a0 : source address
 | 
				
			||||||
 | 
						! a1 : return address
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.los:
 | 
				
			||||||
 | 
						move.l	(sp)+, a1
 | 
				
			||||||
 | 
						move.l	(sp)+, d0
 | 
				
			||||||
 | 
						move.l	(sp)+, a0
 | 
				
			||||||
 | 
						cmp.l	#1, d0
 | 
				
			||||||
 | 
						bne	1f
 | 
				
			||||||
 | 
						clr.l	-(sp)
 | 
				
			||||||
 | 
						move.b	(a0), (3,sp)	!1 byte
 | 
				
			||||||
 | 
						bra	3f
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						cmp.l 	#2, d0
 | 
				
			||||||
 | 
						bne	2f
 | 
				
			||||||
 | 
						clr.l	-(sp)
 | 
				
			||||||
 | 
						move.w	(a0), (2,sp)	!2 bytes
 | 
				
			||||||
 | 
						bra	3f
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						add.l	d0, a0		!>=4 bytes
 | 
				
			||||||
 | 
						asr.l 	#2, d0
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					4:	move.l	-(a0), -(sp)	
 | 
				
			||||||
 | 
						dbf	d0, 4b
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						jmp	(a1)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										17
									
								
								mach/m68020/libem/mon.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								mach/m68020/libem/mon.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					.define .mon
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.mon:
 | 
				
			||||||
 | 
						move.l	(sp)+,a0
 | 
				
			||||||
 | 
						pea	(fmt)
 | 
				
			||||||
 | 
						jsr	(.diagnos)
 | 
				
			||||||
 | 
						add.l	#8, sp
 | 
				
			||||||
 | 
						jmp	(EXIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					fmt:	.asciz "system call %d not implemented\n"
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										20
									
								
								mach/m68020/libem/nop.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mach/m68020/libem/nop.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					.define .nop
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.nop:
 | 
				
			||||||
 | 
						move.l	(.limhp),-(sp)
 | 
				
			||||||
 | 
						move.l	(.reghp),-(sp)
 | 
				
			||||||
 | 
						pea	(12, sp)
 | 
				
			||||||
 | 
						move.l	(.lino),-(sp)
 | 
				
			||||||
 | 
						pea	(fmt)
 | 
				
			||||||
 | 
						jsr	(.diagnos)
 | 
				
			||||||
 | 
						lea	(20, sp), sp
 | 
				
			||||||
 | 
						rts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					fmt:	.asciz "test %d, sp 0x%x, .reghp 0x%x, .limhp 0x%x.\n"
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										83
									
								
								mach/m68020/libem/printf.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								mach/m68020/libem/printf.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,83 @@
 | 
				
			||||||
 | 
					.define _printf, _putchar, _getal, _char
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					_getal:
 | 
				
			||||||
 | 
						.space	12
 | 
				
			||||||
 | 
					_char:
 | 
				
			||||||
 | 
						.space	1
 | 
				
			||||||
 | 
						.align  2
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					hexs:
 | 
				
			||||||
 | 
						.ascii	"0123456789abcdef"
 | 
				
			||||||
 | 
						.align	2
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					_printf:
 | 
				
			||||||
 | 
						movem.l	d0/d1/d2/a0/a1/a2/a3/a4/a5/a6, -(sp)
 | 
				
			||||||
 | 
						lea	(44, sp), a6	! a6 <- address of arguments
 | 
				
			||||||
 | 
						move.l	(a6)+, a5	! a5 <- address of format
 | 
				
			||||||
 | 
					next:	move.b	(a5)+, d0
 | 
				
			||||||
 | 
						beq	out
 | 
				
			||||||
 | 
						cmp.b	#'%', d0
 | 
				
			||||||
 | 
						beq	procnt
 | 
				
			||||||
 | 
					put:	move.l	d0, -(sp)
 | 
				
			||||||
 | 
						jsr	(_putchar)	! long argument on stack
 | 
				
			||||||
 | 
						tst.l	(sp)+
 | 
				
			||||||
 | 
						bra	next
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					procnt:	move.b	(a5)+, d0
 | 
				
			||||||
 | 
						cmp.b	#'d', d0	! NOTE: %d means unsigned.
 | 
				
			||||||
 | 
						beq	digit
 | 
				
			||||||
 | 
						cmp.b	#'x', d0
 | 
				
			||||||
 | 
						beq	hex
 | 
				
			||||||
 | 
						cmp.b	#'s', d0
 | 
				
			||||||
 | 
						beq	string
 | 
				
			||||||
 | 
						cmp.b	#'%', d0	! second % has to be printed.
 | 
				
			||||||
 | 
						beq	put
 | 
				
			||||||
 | 
						tst.b	-(a5)		! normal char should be printed
 | 
				
			||||||
 | 
						bra	next
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					string:	move.l	(a6)+, a2	! a2 <- address of string
 | 
				
			||||||
 | 
					sloop:	move.b	(a2)+, d0
 | 
				
			||||||
 | 
						beq	next
 | 
				
			||||||
 | 
						move.l	d0, -(sp)
 | 
				
			||||||
 | 
						jsr	(_putchar)	! long argument on stack
 | 
				
			||||||
 | 
						tst.l	(sp)+
 | 
				
			||||||
 | 
						bra	sloop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					digit:	move.l	(a6)+, d1	! d1 <- integer
 | 
				
			||||||
 | 
						move.l	#_getal+12, a2	! a2 <- ptr to last part of buf
 | 
				
			||||||
 | 
						clr.b	-(a2)		! stringterminator
 | 
				
			||||||
 | 
					1:	divul.l	#10, d2:d1	! d1 <- qotient; d2 <- remainder
 | 
				
			||||||
 | 
						add.l	#'0', d2
 | 
				
			||||||
 | 
						move.b	d2, -(a2)
 | 
				
			||||||
 | 
						tst.l	d1		! if quotient = 0 then ready
 | 
				
			||||||
 | 
						bne	1b
 | 
				
			||||||
 | 
						bra	sloop		! print digitstring.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hex:	move.l	(a6)+, d1	! d1 <- integer
 | 
				
			||||||
 | 
						move.l	#_getal+12, a2	! a2 <- ptr to last part of buf
 | 
				
			||||||
 | 
						clr.b	-(a2)		! stringterminator
 | 
				
			||||||
 | 
						move.l	#7, d2		! loop control
 | 
				
			||||||
 | 
					1:	move.l	d1, d0
 | 
				
			||||||
 | 
						and.l	#15, d0
 | 
				
			||||||
 | 
						move.b	(hexs,d0.w), -(a2) ! hex digit
 | 
				
			||||||
 | 
						asr.l	#4, d1
 | 
				
			||||||
 | 
						dbf	d2, 1b
 | 
				
			||||||
 | 
						bra	sloop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out:
 | 
				
			||||||
 | 
						movem.l	(sp)+, d0/d1/d2/a0/a1/a2/a3/a4/a5/a6
 | 
				
			||||||
 | 
						rts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_putchar:
 | 
				
			||||||
 | 
						move.l	#1, -(sp)
 | 
				
			||||||
 | 
						pea	(11,sp)
 | 
				
			||||||
 | 
						move.l	#1, -(sp)
 | 
				
			||||||
 | 
						jsr	(_write)
 | 
				
			||||||
 | 
						lea	(12, sp), sp
 | 
				
			||||||
 | 
						rts
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										54
									
								
								mach/m68020/libem/sar.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								mach/m68020/libem/sar.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,54 @@
 | 
				
			||||||
 | 
					.define	.sar
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
						! (on entry d0 contains the integer size in the descriptor)
 | 
				
			||||||
 | 
					.sar:
 | 
				
			||||||
 | 
						cmp.l	#4, d0
 | 
				
			||||||
 | 
						beq	9f
 | 
				
			||||||
 | 
						move.l	#EILLINS, -(sp)
 | 
				
			||||||
 | 
						jmp	(.fatal)
 | 
				
			||||||
 | 
					9:
 | 
				
			||||||
 | 
						! register usage:
 | 
				
			||||||
 | 
						! a0: descriptor address
 | 
				
			||||||
 | 
						! a1: base address
 | 
				
			||||||
 | 
						! d0: index
 | 
				
			||||||
 | 
						! d1: # bytes / element
 | 
				
			||||||
 | 
						! d2: return address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						! For address calculation; see comment in 'aar.s'.
 | 
				
			||||||
 | 
						! If the element size is a fraction of EM_WSIZE (4)
 | 
				
			||||||
 | 
						! the calculation is done by adding.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move.l	(sp)+, d2	! return address
 | 
				
			||||||
 | 
						move.l	(sp)+, a0
 | 
				
			||||||
 | 
						move.l	(sp)+, d0
 | 
				
			||||||
 | 
						move.l	(sp)+, a1
 | 
				
			||||||
 | 
						sub.l	(a0), d0
 | 
				
			||||||
 | 
						move.l	(8,a0), d1	! # bytes / element
 | 
				
			||||||
 | 
						cmp.l	#1, d1
 | 
				
			||||||
 | 
						bne 	2f
 | 
				
			||||||
 | 
						move.l	(sp)+, d1
 | 
				
			||||||
 | 
						move.b	d1, (a1,d0.l)	! store one byte element
 | 
				
			||||||
 | 
						bra	5f
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						cmp.l	#2, d1
 | 
				
			||||||
 | 
						bne 	4f
 | 
				
			||||||
 | 
						move.l	(sp)+, d1
 | 
				
			||||||
 | 
						move.w	d1, (a1,d0.l*2)	! store two byte element
 | 
				
			||||||
 | 
						bra	5f
 | 
				
			||||||
 | 
					4:				! here: 4n byte element
 | 
				
			||||||
 | 
						muls.l	d1, d0
 | 
				
			||||||
 | 
						add.l	d0, a1		! address of 4n byte element
 | 
				
			||||||
 | 
						asr.l	#2, d1
 | 
				
			||||||
 | 
						sub.l	#1, d1
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	(sp)+, (a1)+
 | 
				
			||||||
 | 
						dbf	d1, 1b
 | 
				
			||||||
 | 
					5:
 | 
				
			||||||
 | 
						move.l	d2,a0
 | 
				
			||||||
 | 
						jmp	(a0)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										33
									
								
								mach/m68020/libem/set.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								mach/m68020/libem/set.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,33 @@
 | 
				
			||||||
 | 
					.define	.set
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					.sect	.text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.set:	! d0 bitnumber
 | 
				
			||||||
 | 
						! d1 setsize in bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move.l	(sp)+, a0
 | 
				
			||||||
 | 
						move.l	d2, a1
 | 
				
			||||||
 | 
						move.l	d1, d2
 | 
				
			||||||
 | 
						asr.l	#2, d2
 | 
				
			||||||
 | 
						sub.l	#1, d2
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						clr.l	-(sp)
 | 
				
			||||||
 | 
						dbf	d2, 1b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move.l	d0, d2
 | 
				
			||||||
 | 
						asr.l	#3, d2		! offset from sp in bytes
 | 
				
			||||||
 | 
						eor.l	#3, d2		! longs are stored in high-to-low order
 | 
				
			||||||
 | 
						cmp.l	d1, d2
 | 
				
			||||||
 | 
						blt	2f
 | 
				
			||||||
 | 
						move.l	#ESET, -(sp)	! bitnumber too large
 | 
				
			||||||
 | 
						move.l	a1, d2
 | 
				
			||||||
 | 
						move.l	a0, -(sp)
 | 
				
			||||||
 | 
						jmp	(.trp)
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						bset	d0, (sp, d2.l)
 | 
				
			||||||
 | 
						move.l	a1, d2
 | 
				
			||||||
 | 
						jmp	(a0)	! return
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										26
									
								
								mach/m68020/libem/shp.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								mach/m68020/libem/shp.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					.define	.strhp
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.sect .text
 | 
				
			||||||
 | 
					.strhp:
 | 
				
			||||||
 | 
						move.l	(sp)+, a0
 | 
				
			||||||
 | 
						move.l	(sp), d1	! new heap pointer
 | 
				
			||||||
 | 
						cmp.l	(.limhp), d1	! compare new heap pointer with limit
 | 
				
			||||||
 | 
						blt	1f
 | 
				
			||||||
 | 
						add.l	#0x400, d1
 | 
				
			||||||
 | 
						and.l	#~0x3ff, d1
 | 
				
			||||||
 | 
						move.l	d1, (.limhp)
 | 
				
			||||||
 | 
						move.l	d1, -(sp)
 | 
				
			||||||
 | 
						jsr	(_brk)		! allocate 1K bytes of extra storage
 | 
				
			||||||
 | 
						add.l	#4, sp
 | 
				
			||||||
 | 
						bcs	2f
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	(sp)+, (.reghp)	! store new value
 | 
				
			||||||
 | 
						jmp	(a0)		! return
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						move.l	#EHEAP, -(sp)
 | 
				
			||||||
 | 
						jmp	(.fatal)
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										34
									
								
								mach/m68020/libem/sts.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								mach/m68020/libem/sts.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					.define .sts
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						! d0 : # bytes
 | 
				
			||||||
 | 
						! a0 : destination address
 | 
				
			||||||
 | 
						! a1 : return address
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sts:
 | 
				
			||||||
 | 
						move.l	(sp)+, a1
 | 
				
			||||||
 | 
						move.l	(sp)+, d0
 | 
				
			||||||
 | 
						move.l	(sp)+, a0
 | 
				
			||||||
 | 
						cmp.l	#1, d0
 | 
				
			||||||
 | 
						bne	1f
 | 
				
			||||||
 | 
						move.l	(sp)+, d0
 | 
				
			||||||
 | 
						move.b	d0, (a0)
 | 
				
			||||||
 | 
						bra	4f
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1:	cmp.l	#2, d0
 | 
				
			||||||
 | 
						bne	2f
 | 
				
			||||||
 | 
						move.l	(sp)+, d0
 | 
				
			||||||
 | 
						move.w	d0, (a0)
 | 
				
			||||||
 | 
						bra	4f
 | 
				
			||||||
 | 
					2:
 | 
				
			||||||
 | 
						asr.l	#2, d0
 | 
				
			||||||
 | 
						sub.l	#1, d0
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						move.l	(sp)+, (a0)+
 | 
				
			||||||
 | 
						dbf	d0, 3b
 | 
				
			||||||
 | 
					4:
 | 
				
			||||||
 | 
						jmp	(a1)		! return
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
							
								
								
									
										40
									
								
								mach/m68020/libem/trp.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								mach/m68020/libem/trp.s
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					.define	.trp
 | 
				
			||||||
 | 
					.sect .text
 | 
				
			||||||
 | 
					.sect .rom
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					.sect .bss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.sect .text
 | 
				
			||||||
 | 
					.trp:
 | 
				
			||||||
 | 
						movem.l	d0/d1/a0, -(sp)
 | 
				
			||||||
 | 
						move.l	(16, sp), a0	! return address
 | 
				
			||||||
 | 
						move.l	(20, sp), d0	! error number
 | 
				
			||||||
 | 
						move.l	a0, (20, sp)
 | 
				
			||||||
 | 
						move.l	d0, (16, sp)
 | 
				
			||||||
 | 
						move.l	d0,-(sp)
 | 
				
			||||||
 | 
						cmp.l	#16, d0
 | 
				
			||||||
 | 
						bcc	1f
 | 
				
			||||||
 | 
						move.l	(.trpim), d1
 | 
				
			||||||
 | 
						btst	d0, d1
 | 
				
			||||||
 | 
						bne	3f
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
						move.l	(.trppc), a0
 | 
				
			||||||
 | 
						move.l	a0, d0
 | 
				
			||||||
 | 
						beq	9f
 | 
				
			||||||
 | 
						clr.l	(.trppc)
 | 
				
			||||||
 | 
						jsr	(a0)
 | 
				
			||||||
 | 
					3:
 | 
				
			||||||
 | 
						add.l	#4, sp
 | 
				
			||||||
 | 
						movem.l	(sp)+, d0/d1/a0
 | 
				
			||||||
 | 
						add.l	#4, sp
 | 
				
			||||||
 | 
						rts
 | 
				
			||||||
 | 
					9:
 | 
				
			||||||
 | 
						pea	(fmt)
 | 
				
			||||||
 | 
						jsr	(.diagnos)
 | 
				
			||||||
 | 
						lea	(4, sp), sp
 | 
				
			||||||
 | 
						jsr	(__cleanup)
 | 
				
			||||||
 | 
						jmp	(EXIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sect .data
 | 
				
			||||||
 | 
					fmt:	.asciz "trap %d called\n"
 | 
				
			||||||
 | 
					.align 2
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue