80 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #
 | |
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | |
| .define  LINO_AD,FILN_AD
 | |
| .define  ERANGE,ESET,EHEAP,EILLINS,ECASE
 | |
| .define  hol0,trppc~,trpim~,reghp~,.limhp
 | |
| .define EXIT,WRITE,BRK
 | |
| ! $Header$
 | |
| 
 | |
| #define float 1
 | |
| #define hardfp 1
 | |
| 
 | |
| LINO_AD = 0
 | |
| FILN_AD = 4
 | |
| 
 | |
| ERANGE  = 1
 | |
| ESET    = 2
 | |
| EFOVFL  = 4
 | |
| EFUNFL  = 5
 | |
| EFDIVZ  = 7
 | |
| EFUND   = 011
 | |
| ECONV   = 012
 | |
| EHEAP   = 021
 | |
| EILLINS = 022
 | |
| ECASE   = 024
 | |
| 
 | |
| #ifdef float
 | |
| #ifndef hardfp
 | |
| !	sys     060;.data2 4,fptrap	/ if not commented it will appear as undefined
 | |
| #endif
 | |
| 	sys     060;.data2 010,sig8
 | |
| 	ldfps   $07600
 | |
| #endif
 | |
| 	mov     2(sp),r0
 | |
| 	clr     -2(r0)
 | |
| 	mov     sp,r0
 | |
| 	sub     $4,sp
 | |
| 	mov     4(sp),(sp)
 | |
| 	tst     (r0)+
 | |
| 	mov     r0,2(sp)
 | |
| 1:
 | |
| 	tst     (r0)+
 | |
| 	bne     1b
 | |
| 	cmp     r0,*2(sp)
 | |
| 	blo     1f
 | |
| 	tst     -(r0)
 | |
| 1:
 | |
| 	mov     r0,4(sp)
 | |
| 	jsr     pc,__m_a_i_n
 | |
| 	mov	r0,-(sp)
 | |
| EXIT:
 | |
| 	jsr	pc,__exit
 | |
| 	sys     1
 | |
| 
 | |
| WRITE:	jmp	__write
 | |
| 
 | |
| BRK:	jmp	__brk
 | |
| 
 | |
| 	.sect .data
 | |
| hol0:   .data2 0,0     ! line no
 | |
| 	.data2 0,0     ! file
 | |
| trppc~: .data2 0
 | |
| trpim~: .data2 0
 | |
| reghp~: .data2 _end
 | |
| .limhp: .data2 _end
 | |
| 
 | |
| 	.sect .text
 | |
| sig8:
 | |
| #ifdef float
 | |
| 	mov     r0,-(sp)
 | |
| 	stst    r0
 | |
| 	mov     1f(r0),-(sp)
 | |
| 	jsr     pc,trp~
 | |
| 	sys     060;.data2 010,sig8
 | |
| 	mov     (sp)+,r0
 | |
| 	rti
 | |
| 
 | |
| 	.sect .data
 | |
| 1:      .data2 EILLINS, EILLINS, EFDIVZ, ECONV, EFOVFL, EFUNFL, EFUND, EILLINS
 | |
| 	.sect .text
 | |
| #endif
 |