diff options
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.adb | 29 |
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; |