|
@@ -0,0 +1,905 @@
|
|
|
+.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
|
|
|
+
|
|
|
+
|