Explorar o código

adated to DarwinA2 generic

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7443 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter %!s(int64=7) %!d(string=hai) anos
pai
achega
604847a6d2
Modificáronse 1 ficheiros con 8 adicións e 21 borrados
  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;
 	dlsym-	: PROCEDURE {C} ( handle: ADDRESS; name: ADDRESS ): ADDRESS;
 	dlopen-	: PROCEDURE {C} ( pathname: ADDRESS; mode: LONGINT ): ADDRESS;
 	dlopen-	: PROCEDURE {C} ( pathname: ADDRESS; mode: LONGINT ): ADDRESS;
 	dlclose-	: PROCEDURE {C} ( handle: ADDRESS );
 	dlclose-	: PROCEDURE {C} ( handle: ADDRESS );
+	cout		: PROCEDURE {C} ( ch: CHAR );	(* console output *)
 
 
 	stackBottom-	: ADDRESS;	(* of main thread *)
 	stackBottom-	: ADDRESS;	(* of main thread *)
 	
 	
@@ -25,41 +26,26 @@ VAR
 
 
 	PROCEDURE {INITIAL, NOPAF} Header;		(* header needed by OberonLoader *)
 	PROCEDURE {INITIAL, NOPAF} Header;		(* header needed by OberonLoader *)
 	CODE
 	CODE
-		DB 'Oberon32G.binary'
+		DB 'Oberon32G.binary'	; ID (24 byte)
 		DD 0
 		DD 0
 		DD 0
 		DD 0
 		DD 0				; size of statially linked binary	( filled in by static linker )
 		DD 0				; size of statially linked binary	( filled in by static linker )
 		DD 0				; #relocations if base = 0	( 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 08070000H 	; base 								( set 0 by static linker )
-		DD @Init0		; Loader <-- Oberon 
+		DD @Init0		; Loader <-- Oberon (entrypoint)
 		DD @dlopen		; Loader --> Oberon 
 		DD @dlopen		; Loader --> Oberon 
 		DD @dlclose		; Loader --> Oberon 
 		DD @dlclose		; Loader --> Oberon 
 		DD @dlsym		; Loader --> Oberon 
 		DD @dlsym		; Loader --> Oberon 
 		DD @argc			; Loader --> Oberon 
 		DD @argc			; Loader --> Oberon 
 		DD @argv			; Loader --> Oberon 
 		DD @argv			; Loader --> Oberon 
-		DD @environ		; Loader --> Oberon 
+		DD @environ		; Loader --> Oberon
+		DD @cout			; Loader --> Oberon
 	END Header;		
 	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 );
  	PROCEDURE Char ( c: CHAR );
 	BEGIN
 	BEGIN
-		putc( 1, c )
+		cout( c )
 	END Char;
 	END Char;
 
 
 
 
@@ -73,6 +59,7 @@ VAR
 	
 	
 	PROCEDURE {INITIAL, NOPAF} Init0;
 	PROCEDURE {INITIAL, NOPAF} Init0;
 	VAR localvar: LONGINT;
 	VAR localvar: LONGINT;
+	CONST CR = 0DX; NL = 0AX;
 	BEGIN
 	BEGIN
 		baseAdr := ADDRESSOF( Header );
 		baseAdr := ADDRESSOF( Header );
 		endAdr := ADDRESSOF( last );
 		endAdr := ADDRESSOF( last );
@@ -98,7 +85,7 @@ END Glue.
 
 
 Compiler.Compile -p=Linux32G
 Compiler.Compile -p=Linux32G
 		Runtime.Mod Trace.Mod 
 		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
 		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	
 		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
 		Unix.StdIO.Mod  Generic.Unix.Traps.Mod  UTF8Strings.Mod  Files.Mod  Unix.UnixFiles.Mod