905 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			905 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define _EmMon, _EmTrp
 | 
						|
 
 | 
						|
.sect .text
 | 
						|
 
 | 
						|
_EmMon:
 | 
						|
 LDR R11,[R12]
 | 
						|
 CMP R11,#1
 | 
						|
 BNE _2
 | 
						|
!
 | 
						|
! EXIT
 | 
						|
!
 | 
						|
 LDR R2,[R12,#4]
 | 
						|
 MOV R1,#0x41
 | 
						|
 ADD R1,R1,#0x4200
 | 
						|
 ADD R1,R1,#0x450000
 | 
						|
 ADD R1,R1,#0x58000000
 | 
						|
 SWI 17  ! os_exit
 | 
						|
_2:
 | 
						|
 CMP R11,#3
 | 
						|
 BNE _3
 | 
						|
!
 | 
						|
! READ
 | 
						|
!
 | 
						|
 MOV R0,#4
 | 
						|
 LDR R1,[R12,#4]  !fildes
 | 
						|
 CMP R1,#5
 | 
						|
 BGE _22
 | 
						|
!
 | 
						|
! READ FROM THE KEYBOARD
 | 
						|
!
 | 
						|
 LDR R0,[R12,#8]  !buffer
 | 
						|
 MOV R10,R0
 | 
						|
 LDR R1,[R12,#12]  ! char count
 | 
						|
 CMP R1,#256
 | 
						|
 MOV.CS R1,#255   !OS_Readline max
 | 
						|
 MOV R2,#0
 | 
						|
 MOV R3,#126
 | 
						|
 SWI 14  !OS_READLINE
 | 
						|
! CR TO LF
 | 
						|
 LDR.B R0,[R10,R1]
 | 
						|
 CMP R0,#13
 | 
						|
 BNE _23
 | 
						|
 MOV R0,#10
 | 
						|
 STR.B R0,[R10,R1]
 | 
						|
_23:
 | 
						|
 ADD R1,R1,#1 ! INC BUFFER COUNT
 | 
						|
 STMFD R12<,{R1}
 | 
						|
 MOV R0,#0
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
_22:
 | 
						|
! READ FROM A FILE
 | 
						|
 LDR R2,[R12,#8]
 | 
						|
 LDR R3,[R12,#12]
 | 
						|
 STR R5,_savreg
 | 
						|
 STR R4,_savreg2
 | 
						|
 MOV R5,R3
 | 
						|
 SWI 12  !os_gbpb
 | 
						|
 SUB R5,R5,R3
 | 
						|
 STMFD R12<,{R5}
 | 
						|
 MOV R5,#0
 | 
						|
 STMFD R12<,{R5}
 | 
						|
 LDR R5,_savreg
 | 
						|
 LDR R4,_savreg2
 | 
						|
 MOV R15,R14
 | 
						|
_3:
 | 
						|
 CMP R11,#4
 | 
						|
 BNE _4
 | 
						|
!
 | 
						|
! WRITE
 | 
						|
!
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 CMP R1,#5
 | 
						|
 BGE _33
 | 
						|
! WRITE TO THE SCREEN
 | 
						|
 LDR R0,[R12,#8]
 | 
						|
 LDR R1,[R12,#12]
 | 
						|
 SWI 70  !os_writeN
 | 
						|
! APPEND CR TO LINE ENDING WITH LF
 | 
						|
 LDR R0,[R12,#12]
 | 
						|
 SUB R0,R0,#1
 | 
						|
 LDR R1,[R12,#8]
 | 
						|
 LDR.B R2,[R1,R0]
 | 
						|
 CMP R2,#10
 | 
						|
 SWI.EQ 269  !OUTPUT CR
 | 
						|
 LDR R1,[R12,#12]
 | 
						|
 STMFD R12<,{R1}
 | 
						|
 MOV R1,#0
 | 
						|
 STMFD R12<,{R1}
 | 
						|
 MOV R15,R14
 | 
						|
_33:
 | 
						|
! WRITE TO A FILE
 | 
						|
 MOV R0,#2
 | 
						|
 LDR R2,[R12,#8]
 | 
						|
 LDR R3,[R12,#12]
 | 
						|
 STR R5,_savreg
 | 
						|
 STR R4,_savreg2
 | 
						|
 SWI 12  !os_gbpb
 | 
						|
 LDR R1,[R12,#12]   !always success
 | 
						|
 STMFD R12<,{R1}
 | 
						|
 LDR R5,_savreg
 | 
						|
 LDR R4,_savreg2
 | 
						|
 MOV R0,#0
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
_4:
 | 
						|
 CMP R11,#5
 | 
						|
 BNE _5
 | 
						|
!
 | 
						|
! OPEN
 | 
						|
!
 | 
						|
 LDR R2,[R12,#8]
 | 
						|
 CMP R2,#0
 | 
						|
 BNE _46
 | 
						|
 MOV R0,#67  !READ ONLY
 | 
						|
 BAL _45
 | 
						|
_46:
 | 
						|
 CMP R2,#2
 | 
						|
 BNE _44
 | 
						|
 MOV R0,#195  !UPDATE, FILE MUST EXIST
 | 
						|
 BAL _45
 | 
						|
_44:
 | 
						|
 MOV R0,#131  !CREATE AND OPEN FOR UPDATE
 | 
						|
_45:
 | 
						|
 LDR R1,[R12,#4]  !FILE NAME
 | 
						|
 MOV R2,#0  !NO PATH
 | 
						|
 SWI 0x2000D  !Xos_find
 | 
						|
 MOV.VS R0,#0
 | 
						|
 CMP R0,#0 !MAP ERROR CODES
 | 
						|
 MOV.EQ R0,#-1
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R2,#0
 | 
						|
 STMFD R12<,{R2}
 | 
						|
 MOV R15,R14
 | 
						|
_5:
 | 
						|
 CMP R11,#6
 | 
						|
 BNE _6
 | 
						|
!
 | 
						|
! CLOSE
 | 
						|
!
 | 
						|
 MOV R0,#0
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 CMP R1,#5
 | 
						|
 BLT _51  !IGNORE IF NOT FILE
 | 
						|
 SWI 0x2000D  !Xos_find (IGNORE ERRORS)
 | 
						|
_51:
 | 
						|
 MOV R0,#0
 | 
						|
! STMFD R12<,{R0}  !not sure...
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
_6:
 | 
						|
 CMP R11,#8
 | 
						|
 BNE _7
 | 
						|
!
 | 
						|
! CREAT
 | 
						|
!
 | 
						|
 BAL _44
 | 
						|
_7:
 | 
						|
 CMP R11,#10
 | 
						|
 BNE _8
 | 
						|
!
 | 
						|
! UNLINK
 | 
						|
!
 | 
						|
! note that on UNIX, unlink may be
 | 
						|
! done on an open file. This would
 | 
						|
! cause an error on RiscOs, which is ignored
 | 
						|
 MOV R0,#6
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 STR R5,_savreg
 | 
						|
 STR R4,_savreg2
 | 
						|
 CMP R1,#5
 | 
						|
 SWI.GE 0x20008  !os_file
 | 
						|
 LDR R5,_savreg
 | 
						|
 LDR R4,_savreg2
 | 
						|
 MOV R8,#0
 | 
						|
! STMFD R12<,{R8}  ! not sure...
 | 
						|
 STMFD R12<,{R8}
 | 
						|
 MOV R15,R14
 | 
						|
_8:
 | 
						|
 CMP R11,#12
 | 
						|
 BNE _9
 | 
						|
!
 | 
						|
! CHDIR
 | 
						|
!
 | 
						|
 MOV R0,#0
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 SWI 41  !os_fscontrol
 | 
						|
 MOV R0,#0
 | 
						|
 STMFD R12<,{R0}  !not sure...
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
_9:
 | 
						|
 CMP R11,#19
 | 
						|
 BNE _10
 | 
						|
!
 | 
						|
! LSEEK
 | 
						|
!
 | 
						|
 MOV R0,#0  !FIRST GET CURRENT PTR
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 SWI 9  !OS_ARGS
 | 
						|
 MOV R11,R2
 | 
						|
 LDR R3,[R12,#12]  !NOW DO THE LSEEK
 | 
						|
 CMP R3,#2
 | 
						|
 BEQ _92
 | 
						|
 CMP R3,#1
 | 
						|
 BEQ _91
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 LDR R2,[R12,#8]
 | 
						|
_90:
 | 
						|
 MOV R0,#1
 | 
						|
 SWI 9  !os_args
 | 
						|
 BAL _99
 | 
						|
_92:
 | 
						|
 MOV R0,#2
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 SWI 9  !os_args
 | 
						|
 LDR R8,[R12,#8]
 | 
						|
 ADD R2,R2,R8
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 BAL _90
 | 
						|
_91:
 | 
						|
 MOV R0,#0
 | 
						|
 LDR R1,[R12,#4]
 | 
						|
 SWI 9  !os_args
 | 
						|
 LDR R3,[R12,#8]
 | 
						|
 ADD R2,R1,R3
 | 
						|
 BAL _90
 | 
						|
_99:
 | 
						|
 STMFD R12<,{R11}
 | 
						|
 MOV R0,#0
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
_10:
 | 
						|
 CMP R11, #54
 | 
						|
 BNE _1001
 | 
						|
!
 | 
						|
! IOCTL
 | 
						|
! always returns 0
 | 
						|
!
 | 
						|
 MOV R0, #0
 | 
						|
 STMFD R12<, {R0}
 | 
						|
 MOV R15, R14
 | 
						|
!
 | 
						|
! TIMES
 | 
						|
!
 | 
						|
_1001:
 | 
						|
 CMP R11, #43
 | 
						|
 BNE _1003
 | 
						|
 ADR R1,_17
 | 
						|
 MOV R0,#3
 | 
						|
 STR R0,[R1]
 | 
						|
 MOV R0,#14
 | 
						|
 SWI 7  !OS_WORD
 | 
						|
 ADR R0,_17
 | 
						|
 LDR R0,[R0]
 | 
						|
 MOV R1,#0
 | 
						|
 LDR R2,[R12,#4]
 | 
						|
 STR R0,[R2]
 | 
						|
 STR R0,[R2,#4] ! utime = stime
 | 
						|
 STR R1,[R2,#8]
 | 
						|
 STR R1,[R2,#12]
 | 
						|
 STMFD R12<,{R1}
 | 
						|
 MOV R15,R14
 | 
						|
!
 | 
						|
! GETPID
 | 
						|
! returns random number (clock ticks)
 | 
						|
!
 | 
						|
_1003:
 | 
						|
 CMP R11, #20
 | 
						|
 BNE _1002
 | 
						|
 ADR R1,_17
 | 
						|
 MOV R0,#3
 | 
						|
 STR R0,[R1]
 | 
						|
 MOV R0,#14
 | 
						|
 SWI 7  !OS_WORD
 | 
						|
 ADR R0,_17
 | 
						|
 LDR R0,[R0]
 | 
						|
 AND R0,R0,#0xFF
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
!
 | 
						|
! EXECE
 | 
						|
! ONLY FIRST PARAMETER IS USED
 | 
						|
!
 | 
						|
_1002:
 | 
						|
 CMP R11, #59
 | 
						|
 BNE _1000
 | 
						|
 LDR R0,[R12,#4]
 | 
						|
 SWI 5  !OS_CLI
 | 
						|
 MOV R0,#0
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
! 
 | 
						|
! NOT IMPLEMENTED CALLS
 | 
						|
! ---------------------
 | 
						|
! THESE CALLS MAY REQUIRE DIFFERENT
 | 
						|
! STACK HANDLING (THERE MAY BE BUGS HERE!!)
 | 
						|
! (the number of return values does not always
 | 
						|
! correspond to the Ack manual)
 | 
						|
!
 | 
						|
_1000:
 | 
						|
 CMP R11,#7
 | 
						|
 BNE _9726
 | 
						|
 ADR R0,_9607
 | 
						|
 BAL _9352
 | 
						|
_9726:
 | 
						|
 CMP R11,#26
 | 
						|
 BNE _9727
 | 
						|
 ADR R0,_9626
 | 
						|
 BAL _9352
 | 
						|
_9727:
 | 
						|
 CMP R11,#27
 | 
						|
 BNE _9741
 | 
						|
 ADR R0,_9627
 | 
						|
 BAL _9352
 | 
						|
_9741:
 | 
						|
 CMP R11,#41
 | 
						|
 BNE _9742
 | 
						|
 ADR R0,_9641
 | 
						|
 BAL _9352
 | 
						|
_9742:
 | 
						|
 CMP R11,#42
 | 
						|
 BNE _9748
 | 
						|
 ADR R0,_9642
 | 
						|
 BAL _9352
 | 
						|
_9748:
 | 
						|
 CMP R11,#48
 | 
						|
 BNE _9760
 | 
						|
 ADR R0,_9648
 | 
						|
 BAL _9352
 | 
						|
_9760:
 | 
						|
 CMP R11,#60
 | 
						|
 BNE _9709
 | 
						|
 ADR R0,_9660
 | 
						|
 BAL _9352
 | 
						|
_9709:
 | 
						|
 CMP R11,#9
 | 
						|
 BNE _9714
 | 
						|
 ADR R0,_9609
 | 
						|
 BAL _9351
 | 
						|
_9714:
 | 
						|
 CMP R11,#14
 | 
						|
 BNE _9715
 | 
						|
 ADR R0,_9614
 | 
						|
 BAL _9351
 | 
						|
_9715:
 | 
						|
 CMP R11,#15
 | 
						|
 BNE _9716
 | 
						|
 ADR R0,_9615
 | 
						|
 BAL _9351
 | 
						|
_9716:
 | 
						|
 CMP R11,#16
 | 
						|
 BNE _9718
 | 
						|
 ADR R0,_9616
 | 
						|
 BAL _9351
 | 
						|
_9718:
 | 
						|
 CMP R11,#18
 | 
						|
 BNE _9720
 | 
						|
 ADR R0,_9618
 | 
						|
 BAL _9351
 | 
						|
_9720:
 | 
						|
 CMP R11,#20
 | 
						|
 BNE _9721
 | 
						|
 ADR R0,_9620
 | 
						|
 BAL _9351
 | 
						|
_9721:
 | 
						|
 CMP R11,#21
 | 
						|
 BNE _9722
 | 
						|
 ADR R0,_9621
 | 
						|
 BAL _9351
 | 
						|
_9722:
 | 
						|
 CMP R11,#22
 | 
						|
 BNE _9723
 | 
						|
 ADR R0,_9622
 | 
						|
 BAL _9351
 | 
						|
_9723:
 | 
						|
 CMP R11,#23
 | 
						|
 BNE _9724
 | 
						|
 ADR R0,_9623
 | 
						|
 BAL _9351
 | 
						|
_9724:
 | 
						|
 CMP R11,#24
 | 
						|
 BNE _9725
 | 
						|
 ADR R0,_9624
 | 
						|
 BAL _9351
 | 
						|
_9725:
 | 
						|
 CMP R11,#25
 | 
						|
 BNE _9728
 | 
						|
 ADR R0,_9625
 | 
						|
 BAL _9351
 | 
						|
_9728:
 | 
						|
 CMP R11,#28
 | 
						|
 BNE _9729
 | 
						|
 ADR R0,_9628
 | 
						|
 BAL _9351
 | 
						|
_9729:
 | 
						|
 CMP R11,#29
 | 
						|
 BNE _9730
 | 
						|
 ADR R0,_9629
 | 
						|
 BAL _9351
 | 
						|
_9730:
 | 
						|
 CMP R11,#30
 | 
						|
 BNE _9733
 | 
						|
 ADR R0,_9630
 | 
						|
 BAL _9351
 | 
						|
_9733:
 | 
						|
 CMP R11,#33
 | 
						|
 BNE _9734
 | 
						|
 ADR R0,_9633
 | 
						|
 BAL _9351
 | 
						|
_9734:
 | 
						|
 CMP R11,#34
 | 
						|
 BNE _9735
 | 
						|
 ADR R0,_9634
 | 
						|
 BAL _9351
 | 
						|
_9735:
 | 
						|
 CMP R11,#35
 | 
						|
 BNE _9736
 | 
						|
 ADR R0,_9635
 | 
						|
 BAL _9351
 | 
						|
_9736:
 | 
						|
 CMP R11,#36
 | 
						|
 BNE _9737
 | 
						|
 ADR R0,_9636
 | 
						|
 BAL _9351
 | 
						|
_9737:
 | 
						|
 CMP R11,#37
 | 
						|
 BNE _9744
 | 
						|
 ADR R0,_9637
 | 
						|
 BAL _9351
 | 
						|
_9744:
 | 
						|
 CMP R11,#44
 | 
						|
 BNE 9746
 | 
						|
 ADR R0,_9644
 | 
						|
 BAL _9351
 | 
						|
_9746:
 | 
						|
 CMP R11,#46
 | 
						|
 BNE 9747
 | 
						|
 ADR R0,_9646
 | 
						|
 BAL _9351
 | 
						|
_9747:
 | 
						|
 CMP R11,#47
 | 
						|
 BNE 9751
 | 
						|
 ADR R0,_9647
 | 
						|
 BAL _9351
 | 
						|
_9751:
 | 
						|
 CMP R11,#51
 | 
						|
 BNE 9753
 | 
						|
 ADR R0,_9651
 | 
						|
 BAL _9351
 | 
						|
_9753:
 | 
						|
 CMP R11,#53
 | 
						|
 BNE 9756
 | 
						|
 ADR R0,_9653
 | 
						|
 BAL _9351
 | 
						|
_9756:
 | 
						|
 CMP R11,#56
 | 
						|
 BNE 9761
 | 
						|
 ADR R0,_9656
 | 
						|
 BAL _9351
 | 
						|
_9761:
 | 
						|
 ADR R0,_9661
 | 
						|
 BAL _9351
 | 
						|
 | 
						|
 
 | 
						|
.sect .data
 | 
						|
_14:
 | 
						|
.data4 0
 | 
						|
.data4 0
 | 
						|
_15:
 | 
						|
.asciz "Monitor call "
 | 
						|
.data4 0
 | 
						|
.align 4
 | 
						|
_16:
 | 
						|
.asciz ": not implemented"
 | 
						|
.data4 0
 | 
						|
.align 4
 | 
						|
_17:
 | 
						|
.data4 3
 | 
						|
.data4 0
 | 
						|
.align 4
 | 
						|
 | 
						|
.sect .text
 | 
						|
 | 
						|
_EmTrp:
 | 
						|
 SWI 3  !OS_NEWLINE
 | 
						|
 LDR R11,[R12]
 | 
						|
!
 | 
						|
! deal with ignore mask here
 | 
						|
! (not yet implemented)
 | 
						|
!
 | 
						|
 CMP R11,#0
 | 
						|
 BNE _9101
 | 
						|
 ADR R0,_9000
 | 
						|
 BAL _9200
 | 
						|
_9101:
 | 
						|
 CMP R11,#1
 | 
						|
 BNE _9102
 | 
						|
 ADR R0,_9001
 | 
						|
 BAL _9200
 | 
						|
_9102:
 | 
						|
 CMP R11,#2
 | 
						|
 BNE _9103
 | 
						|
 ADR R0,_9002
 | 
						|
 BAL _9200
 | 
						|
_9103:
 | 
						|
 CMP R11,#3
 | 
						|
 BNE _9104
 | 
						|
 ADR R0,_9003
 | 
						|
 BAL _9200
 | 
						|
_9104:
 | 
						|
 CMP R11,#4
 | 
						|
 BNE _9105
 | 
						|
 ADR R0,_9004
 | 
						|
 BAL _9200
 | 
						|
_9105:
 | 
						|
 CMP R11,#5
 | 
						|
 BNE _9106
 | 
						|
 ADR R0,_9005
 | 
						|
 BAL _9200
 | 
						|
_9106:
 | 
						|
 CMP R11,#6
 | 
						|
 BNE _9107
 | 
						|
 ADR R0,_9006
 | 
						|
 BAL _9200
 | 
						|
_9107:
 | 
						|
 CMP R11,#7
 | 
						|
 BNE _9108
 | 
						|
 ADR R0,_9007
 | 
						|
 BAL _9200
 | 
						|
_9108:
 | 
						|
 CMP R11,#8
 | 
						|
 BNE _9109
 | 
						|
 ADR R0,_9008
 | 
						|
 BAL _9200
 | 
						|
_9109:
 | 
						|
 CMP R11,#9
 | 
						|
 BNE _9110
 | 
						|
 ADR R0,_9009
 | 
						|
 BAL _9200
 | 
						|
_9110:
 | 
						|
 CMP R11,#10
 | 
						|
 BNE _9111
 | 
						|
 ADR R0,_9010
 | 
						|
 BAL _9200
 | 
						|
_9111:
 | 
						|
 CMP R11,#11
 | 
						|
 BNE _9112
 | 
						|
 ADR R0,_9011
 | 
						|
 BAL _9200
 | 
						|
_9112:
 | 
						|
 CMP R11,#12
 | 
						|
 BNE _9113
 | 
						|
 ADR R0,_9012
 | 
						|
 BAL _9200
 | 
						|
_9113:
 | 
						|
 CMP R11,#13
 | 
						|
 BNE _9114
 | 
						|
 ADR R0,_9013
 | 
						|
 BAL _9200
 | 
						|
_9114:
 | 
						|
 CMP R11,#14
 | 
						|
 BNE _9115
 | 
						|
 ADR R0,_9014
 | 
						|
 BAL _9200
 | 
						|
_9115:
 | 
						|
 CMP R11,#15
 | 
						|
 BNE _9116
 | 
						|
 ADR R0,_9015
 | 
						|
 BAL _9200
 | 
						|
_9116:
 | 
						|
 CMP R11,#16
 | 
						|
 BNE _9117
 | 
						|
 ADR R0,_9016
 | 
						|
 BAL _9200
 | 
						|
_9117:
 | 
						|
 CMP R11,#17
 | 
						|
 BNE _9118
 | 
						|
 ADR R0,_9017
 | 
						|
 BAL _9200
 | 
						|
_9118:
 | 
						|
 CMP R11,#18
 | 
						|
 BNE _9119
 | 
						|
 ADR R0,_9018
 | 
						|
 BAL _9200
 | 
						|
_9119:
 | 
						|
 CMP R11,#19
 | 
						|
 BNE _9120
 | 
						|
 ADR R0,_9019
 | 
						|
 BAL _9200
 | 
						|
_9120:
 | 
						|
 CMP R11,#20
 | 
						|
 BNE _9121
 | 
						|
 ADR R0,_9020
 | 
						|
 BAL _9200
 | 
						|
_9121:
 | 
						|
 CMP R11,#21
 | 
						|
 BNE _9122
 | 
						|
 ADR R0,_9021
 | 
						|
 BAL _9200
 | 
						|
_9122:
 | 
						|
 CMP R11,#22
 | 
						|
 BNE _9123
 | 
						|
 ADR R0,_9022
 | 
						|
 BAL _9200
 | 
						|
_9123:
 | 
						|
 CMP R11,#23
 | 
						|
 BNE _9124
 | 
						|
 ADR R0,_9023
 | 
						|
 BAL _9200
 | 
						|
_9124:
 | 
						|
 CMP R11,#24
 | 
						|
 BNE _9125
 | 
						|
 ADR R0,_9024
 | 
						|
 BAL _9200
 | 
						|
_9125:
 | 
						|
 CMP R11,#25
 | 
						|
 BNE _9126
 | 
						|
 ADR R0,_9025
 | 
						|
 BAL _9200
 | 
						|
_9126:
 | 
						|
 CMP R11,#26
 | 
						|
 BNE _9127
 | 
						|
 ADR R0,_9026
 | 
						|
 BAL _9200
 | 
						|
_9127:
 | 
						|
 CMP R11,#27
 | 
						|
 BNE _9128
 | 
						|
 ADR R0,_9027
 | 
						|
 BAL _9200
 | 
						|
_9128:
 | 
						|
 CMP R11,#127
 | 
						|
 BGT _9129
 | 
						|
 ADR R0,_9028
 | 
						|
 SWI 2  !OS_WRITE0
 | 
						|
 MOV R0,R11
 | 
						|
 ADR R1,_12
 | 
						|
 MOV R2,#5
 | 
						|
 SWI 217  !CONVERT
 | 
						|
 SUB R1,R1,R0
 | 
						|
 SWI 70  !WRITEN
 | 
						|
 BAL _9300
 | 
						|
_9129:
 | 
						|
 ADR R0,_11
 | 
						|
 SWI 2  !OS_WRITE0
 | 
						|
 MOV R0,R11
 | 
						|
 ADR R1,_12
 | 
						|
 MOV R2,#5
 | 
						|
 SWI 217  !CONVERT
 | 
						|
 SUB R1,R1,R0
 | 
						|
 SWI 70  !WRITEN
 | 
						|
 BAL _9300
 | 
						|
_9200: SWI 2
 | 
						|
_9300:
 | 
						|
 ADR R0, _Lineno
 | 
						|
 LDR R0,[R0]
 | 
						|
 CMP R0,#0
 | 
						|
 BEQ _9301
 | 
						|
 MOV R10,R0
 | 
						|
 ADR R0,_9050
 | 
						|
 SWI 2
 | 
						|
 MOV R0,R10
 | 
						|
 ADR R1,_12
 | 
						|
 MOV R2,#5
 | 
						|
 SWI 217
 | 
						|
 SUB R1,R1,R0
 | 
						|
 SWI 70
 | 
						|
 SWI 3
 | 
						|
 BAL _9302
 | 
						|
_9301:
 | 
						|
 ADR R0,_9501
 | 
						|
 SWI 2
 | 
						|
 SWI 3
 | 
						|
_9302:
 | 
						|
 MOV R0,#1
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 BAL.L _EmMon
 | 
						|
_9351:
 | 
						|
 SWI 2  !WRITE0
 | 
						|
 ADR R0,_16
 | 
						|
 SWI 2 !OS_WRITE0
 | 
						|
 SWI 3 !NEWLINE
 | 
						|
 MOV R0, #0
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
_9352:
 | 
						|
 SWI 2  !WRITE0
 | 
						|
 ADR R0,_16
 | 
						|
 SWI 2 !OS_WRITE0
 | 
						|
 SWI 3 !NEWLINE
 | 
						|
 MOV R0, #0
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 STMFD R12<,{R0}
 | 
						|
 MOV R15,R14
 | 
						|
 | 
						|
 | 
						|
.sect.data
 | 
						|
_11:
 | 
						|
.asciz "Trap "
 | 
						|
.align 4
 | 
						|
_12:
 | 
						|
.data4 0
 | 
						|
.data4 0
 | 
						|
_9000:
 | 
						|
.asciz "Array bound error "
 | 
						|
.align 4
 | 
						|
_9001:
 | 
						|
.asciz "Range bound error "
 | 
						|
.align 4
 | 
						|
_9002:
 | 
						|
.asciz "Set bound error "
 | 
						|
.align 4
 | 
						|
_9003:
 | 
						|
.asciz "Integer overflow "
 | 
						|
.align 4
 | 
						|
_9004:
 | 
						|
.asciz "Floating overflow "
 | 
						|
.align 4
 | 
						|
_9005:
 | 
						|
.asciz "Floating underflow "
 | 
						|
.align 4
 | 
						|
_9006:
 | 
						|
.asciz "Divide by 0 "
 | 
						|
.align 4
 | 
						|
_9007:
 | 
						|
.asciz "Divide by 0.0 "
 | 
						|
.align 4
 | 
						|
_9008:
 | 
						|
.asciz "Undefined integer "
 | 
						|
.align 4
 | 
						|
_9009:
 | 
						|
.asciz "Undefined float "
 | 
						|
.align 4
 | 
						|
_9010:
 | 
						|
.asciz "Conversion error "
 | 
						|
.align 4
 | 
						|
_9011:
 | 
						|
.asciz "unknown trap "
 | 
						|
.align 4
 | 
						|
_9012:
 | 
						|
.asciz "unknown trap "
 | 
						|
.align 4
 | 
						|
_9013:
 | 
						|
.asciz "unknown trap "
 | 
						|
.align 4
 | 
						|
_9014:
 | 
						|
.asciz "unknown trap "
 | 
						|
.align 4
 | 
						|
_9015:
 | 
						|
.asciz "unknown trap "
 | 
						|
.align 4
 | 
						|
_9016:
 | 
						|
.asciz "Stack overflow "
 | 
						|
.align 4
 | 
						|
_9017:
 | 
						|
.asciz "Heap overflow "
 | 
						|
.align 4
 | 
						|
_9018:
 | 
						|
.asciz "Illegal instruction "
 | 
						|
.align 4
 | 
						|
_9019:
 | 
						|
.asciz "Illegal size argument "
 | 
						|
.align 4
 | 
						|
_9020:
 | 
						|
.asciz "Case error "
 | 
						|
.align 4
 | 
						|
_9021:
 | 
						|
.asciz "Addressing non-existent memory "
 | 
						|
.align 4
 | 
						|
_9022:
 | 
						|
.asciz "Bad pointer used "
 | 
						|
.align 4
 | 
						|
_9023:
 | 
						|
.asciz "Program counter out of range "
 | 
						|
.align 4
 | 
						|
_9024:
 | 
						|
.asciz "Bad argument of LAE "
 | 
						|
.align 4
 | 
						|
_9025:
 | 
						|
.asciz "Bad monitor call "
 | 
						|
.align 4
 | 
						|
_9026:
 | 
						|
.asciz "Argument of LIN too high "
 | 
						|
.align 4
 | 
						|
_9027:
 | 
						|
.asciz "GOTO decriptor error "
 | 
						|
.align 4
 | 
						|
_9028:
 | 
						|
.asciz "Language run-time trap "
 | 
						|
.align 4
 | 
						|
_9501:
 | 
						|
.asciz " (line number unknown)"
 | 
						|
.align 4
 | 
						|
_9050:
 | 
						|
.asciz " at line "
 | 
						|
.align 4
 | 
						|
 | 
						|
_9607:
 | 
						|
.asciz "Wait"
 | 
						|
.align 4
 | 
						|
_9609:
 | 
						|
.asciz "Link"
 | 
						|
.align 4
 | 
						|
_9614:
 | 
						|
.asciz "Mknod"
 | 
						|
.align 4
 | 
						|
_9615:
 | 
						|
.asciz "Chmod"
 | 
						|
.align 4
 | 
						|
_9616:
 | 
						|
.asciz "Chown"
 | 
						|
.align 4
 | 
						|
_9618:
 | 
						|
.asciz "Stat"
 | 
						|
.align 4
 | 
						|
_9620:
 | 
						|
.asciz "Getpid"
 | 
						|
.align 4
 | 
						|
_9621:
 | 
						|
.asciz "Mount"
 | 
						|
.align 4
 | 
						|
_9622:
 | 
						|
.asciz "Umount"
 | 
						|
.align 4
 | 
						|
_9623:
 | 
						|
.asciz "Setuid"
 | 
						|
.align 4
 | 
						|
_9624:
 | 
						|
.asciz "Getuid"
 | 
						|
.align 4
 | 
						|
_9625:
 | 
						|
.asciz "Stime"
 | 
						|
.align 4
 | 
						|
_9626:
 | 
						|
.asciz "Ptrace"
 | 
						|
.align 4
 | 
						|
_9627:
 | 
						|
.asciz "Alarm"
 | 
						|
.align 4
 | 
						|
_9628:
 | 
						|
.asciz "Fstat"
 | 
						|
.align 4
 | 
						|
_9629:
 | 
						|
.asciz "Pause"
 | 
						|
.align 4
 | 
						|
_9630:
 | 
						|
.asciz "Utime"
 | 
						|
.align 4
 | 
						|
_9633:
 | 
						|
.asciz "Access"
 | 
						|
.align 4
 | 
						|
_9634:
 | 
						|
.asciz "Nice"
 | 
						|
.align 4
 | 
						|
_9635:
 | 
						|
.asciz "Ftime"
 | 
						|
.align 4
 | 
						|
_9636:
 | 
						|
.asciz "Sync"
 | 
						|
.align 4
 | 
						|
_9637:
 | 
						|
.asciz "Kill"
 | 
						|
.align 4
 | 
						|
_9641:
 | 
						|
.asciz "Dup"
 | 
						|
.align 4
 | 
						|
_9642:
 | 
						|
.asciz "Pipe"
 | 
						|
.align 4
 | 
						|
_9644:
 | 
						|
.asciz "Profil"
 | 
						|
.align 4
 | 
						|
_9646:
 | 
						|
.asciz "Setgid"
 | 
						|
.align 4
 | 
						|
_9647:
 | 
						|
.asciz "Getgid"
 | 
						|
.align 4
 | 
						|
_9648:
 | 
						|
.asciz "Sigtrp"
 | 
						|
.align 4
 | 
						|
_9651:
 | 
						|
.asciz "Acct"
 | 
						|
.align 4
 | 
						|
_9653:
 | 
						|
.asciz "Lock"
 | 
						|
.align 4
 | 
						|
_9656:
 | 
						|
.asciz "Mpxcall"
 | 
						|
.align 4
 | 
						|
_9660:
 | 
						|
.asciz "Umask"
 | 
						|
.align 4
 | 
						|
_9661:
 | 
						|
.asciz "Chroot"
 | 
						|
.align 4
 | 
						|
 | 
						|
.sect .data
 | 
						|
_savreg:
 | 
						|
.data4 0
 | 
						|
_savreg2:
 | 
						|
.data4 0
 | 
						|
 | 
						|
 |