瀏覽代碼

adated to DarwinA2 generic

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7443 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 7 年之前
父節點
當前提交
604847a6d2
共有 1 個文件被更改,包括 8 次插入21 次删除
  1. 8 21
      source/Generic.Unix.I386.Glue.Mod

+ 8 - 21
source/Generic.Unix.I386.Glue.Mod

@@ -15,6 +15,7 @@ VAR
 	dlsym-	: PROCEDURE {C} ( handle: ADDRESS; name: ADDRESS ): ADDRESS;
 	dlopen-	: PROCEDURE {C} ( pathname: ADDRESS; mode: LONGINT ): ADDRESS;
 	dlclose-	: PROCEDURE {C} ( handle: ADDRESS );
+	cout		: PROCEDURE {C} ( ch: CHAR );	(* console output *)
 
 	stackBottom-	: ADDRESS;	(* of main thread *)
 	
@@ -25,41 +26,26 @@ VAR
 
 	PROCEDURE {INITIAL, NOPAF} Header;		(* header needed by OberonLoader *)
 	CODE
-		DB 'Oberon32G.binary'
+		DB 'Oberon32G.binary'	; ID (24 byte)
 		DD 0
 		DD 0
 		DD 0				; size of statially linked binary	( filled in by static linker )
 		DD 0				; #relocations if base = 0	( filled in by static linker )
 		DD 08070000H 	; base 								( set 0 by static linker )
-		DD @Init0		; Loader <-- Oberon 
+		DD @Init0		; Loader <-- Oberon (entrypoint)
 		DD @dlopen		; Loader --> Oberon 
 		DD @dlclose		; Loader --> Oberon 
 		DD @dlsym		; Loader --> Oberon 
 		DD @argc			; Loader --> Oberon 
 		DD @argv			; Loader --> Oberon 
-		DD @environ		; Loader --> Oberon 
+		DD @environ		; Loader --> Oberon
+		DD @cout			; Loader --> Oberon
 	END Header;		
 	
-	PROCEDURE {NOPAF} putc*( file: ADDRESS; c: CHAR );
-	CODE
-		PUSH ECX
-		MOV EAX, 4
-		MOV EBX, [ESP + 12]
-		LEA ECX, [ESP+8]	
-		MOV EDX, 1
-		INT 80H
-		POP ECX
-		JNE fail
-		MOV EAX, [ESP + 4]
-		RET
-		fail:
-		MOV EAX, -1
-		RET
-	END putc;
 	
  	PROCEDURE Char ( c: CHAR );
 	BEGIN
-		putc( 1, c )
+		cout( c )
 	END Char;
 
 
@@ -73,6 +59,7 @@ VAR
 	
 	PROCEDURE {INITIAL, NOPAF} Init0;
 	VAR localvar: LONGINT;
+	CONST CR = 0DX; NL = 0AX;
 	BEGIN
 		baseAdr := ADDRESSOF( Header );
 		endAdr := ADDRESSOF( last );
@@ -98,7 +85,7 @@ END Glue.
 
 Compiler.Compile -p=Linux32G
 		Runtime.Mod Trace.Mod 
-		Generic.Solaris.I386.Glue.Mod  Generic.Solaris.I386.Unix.Mod  Generic.Unix.I386.Machine.Mod	
+		Generic.Unix.I386.Glue.Mod  Generic.Solaris.I386.Unix.Mod  Generic.Unix.I386.Machine.Mod	
 		Heaps.Mod  Generic.Modules.Mod  Generic.Solaris.Objects.Mod  Unix.Kernel.Mod
 		KernelLog.Mod  Streams.Mod  Pipes.Mod  Commands.Mod  TrapWriters.Mod  Generic.Reflection.Mod	
 		Unix.StdIO.Mod  Generic.Unix.Traps.Mod  UTF8Strings.Mod  Files.Mod  Unix.UnixFiles.Mod