From ad800075ebf6c376746e70c1204ecbf1308c528f Mon Sep 17 00:00:00 2001 From: ceriel Date: Mon, 12 Nov 1990 17:13:45 +0000 Subject: [PATCH] Albert Koelmans latest version --- mach/arm/libmon/LIST | 3 + mach/arm/libmon/Makefile | 15 + mach/arm/libmon/svc.s | 905 +++++++++++++++++++++++++++++++++++++++ mach/arm/libmon/swi.s | 94 ++++ 4 files changed, 1017 insertions(+) create mode 100644 mach/arm/libmon/LIST create mode 100644 mach/arm/libmon/Makefile create mode 100644 mach/arm/libmon/svc.s create mode 100644 mach/arm/libmon/swi.s diff --git a/mach/arm/libmon/LIST b/mach/arm/libmon/LIST new file mode 100644 index 000000000..99279eecf --- /dev/null +++ b/mach/arm/libmon/LIST @@ -0,0 +1,3 @@ +libros_s.a +svc.s +swi.s diff --git a/mach/arm/libmon/Makefile b/mach/arm/libmon/Makefile new file mode 100644 index 000000000..1df001383 --- /dev/null +++ b/mach/arm/libmon/Makefile @@ -0,0 +1,15 @@ +all: + +install: + ../../install libros_s.a tail_ros + +cmp: + -../../compare libros_s.a tail_ros + +clean: + +opr : + make pr | opr + +pr: + @arch pv libros_s.a | pr -h `pwd`/libros_s.a diff --git a/mach/arm/libmon/svc.s b/mach/arm/libmon/svc.s new file mode 100644 index 000000000..40a86b04d --- /dev/null +++ b/mach/arm/libmon/svc.s @@ -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 + + diff --git a/mach/arm/libmon/swi.s b/mach/arm/libmon/swi.s new file mode 100644 index 000000000..8af79b967 --- /dev/null +++ b/mach/arm/libmon/swi.s @@ -0,0 +1,94 @@ +.define _Swi, _Swix, _bbc_get, _bbc_vduw, _bbc_vdu +.sect .text + +! Swi(code, regpt) + +_Swi: + ADR R11,_100 + LDR R10,[R11] + LDR R9,[R12] + AND R10,R10,#0xFF000000 + AND R9,R9,#0xFFFFFF + ORR R10,R10,R9 + STR R10,[R11] + LDR R11,[R12,#4] ! PT TO REGS + STMFD R12<,{R4,R5,R6,R7} + LDR R0,[R11,#0] + LDR R1,[R11,#4] + LDR R2,[R11,#8] + LDR R3,[R11,#12] + LDR R4,[R11,#16] + LDR R5,[R11,#20] + LDR R6,[R11,#24] + LDR R7,[R11,#28] + LDR R8,[R11,#32] + LDR R9,[R11,#36] +_100: + SWI 0 + STR R0,[R11,#0] + STR R1,[R11,#4] + STR R2,[R11,#8] + STR R3,[R11,#12] + STR R4,[R11,#16] + STR R5,[R11,#20] + STR R6,[R11,#24] + STR R7,[R11,#28] + STR R8,[R11,#32] + STR R9,[R11,#36] + LDMFD R12<,{R4,R5,R6,R7} + MOV.S R15,R14 + +_Swix: + ADR R11,_101 + LDR R10,[R11] + LDR R9,[R12] + AND R10,R10,#0xFF000000 + AND R9,R9,#0xFFFFFF + ORR R10,R10,R9 + ORR R10,R10,#0x20000 + STR R10,[R11] + LDR R11,[R12,#4] + STMFD R12<,{R4,R5,R6,R7} + LDR R0,[R11,#0] + LDR R1,[R11,#4] + LDR R2,[R11,#8] + LDR R3,[R11,#12] + LDR R4,[R11,#16] + LDR R5,[R11,#20] + LDR R6,[R11,#24] + LDR R7,[R11,#28] + LDR R8,[R11,#32] + LDR R9,[R11,#36] +_101: + SWI 0 + STR R0,[R11,#0] + STR R1,[R11,#4] + STR R2,[R11,#8] + STR R3,[R11,#12] + STR R4,[R11,#16] + STR R5,[R11,#20] + STR R6,[R11,#24] + STR R7,[R11,#28] + STR R8,[R11,#32] + STR R9,[R11,#36] + MOV.VC R0, #0 + LDMFD R12<,{R4,R5,R6,R7} + MOV.S R15,R14 + +! the rest is for Acorn compatibility + +_bbc_get: + SWI 4 ! READC + MOV.S R15,R14 + +_bbc_vduw: + LDR R0,[R12] + SWI 0 !WRITEC + MOV R0,R0,LSR #8 + SWI 0 + MOV.S R15,R14 + +_bbc_vdu: + LDR R0,[R12] + SWI 0 + MOV.S R15,R14 -- 2.34.1