summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/ts_386ex/tools/ts_1325_ada/i386_ports.adb
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/i386/ts_386ex/tools/ts_1325_ada/i386_ports.adb')
-rw-r--r--c/src/lib/libbsp/i386/ts_386ex/tools/ts_1325_ada/i386_ports.adb29
1 files changed, 29 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i386/ts_386ex/tools/ts_1325_ada/i386_ports.adb b/c/src/lib/libbsp/i386/ts_386ex/tools/ts_1325_ada/i386_ports.adb
new file mode 100644
index 0000000000..9705d069d8
--- /dev/null
+++ b/c/src/lib/libbsp/i386/ts_386ex/tools/ts_1325_ada/i386_ports.adb
@@ -0,0 +1,29 @@
+with System.Machine_Code;
+use System.Machine_Code;
+
+package body I386_Ports is
+
+ procedure Outport (Addr: in Port_Address; Data: in Byte) is
+ begin
+ Asm ("movb %0, %%al;" &
+ "movw %1, %%dx;" &
+ "outb %%al, %%dx",
+ No_Output_Operands,
+ (Byte'Asm_Input ("g", Data),
+ Port_Address'Asm_Input ("g", Addr)),
+ Clobber => "al dx",
+ Volatile => True);
+ end Outport;
+
+ procedure Inport (Addr: in Port_Address; Data: out Byte) is
+ begin
+ Asm ("movw %1, %%dx;" &
+ "inb %%dx, %%al;" &
+ "movb %%al, %0",
+ Byte'Asm_Output ("=g", Data),
+ Port_Address'Asm_Input ("g", Addr),
+ Clobber => "dx al",
+ Volatile => True);
+ end Inport;
+
+end I386_Ports;