blob: 0ae03f19f4d0ef726727b5049eab9375982055e5 [file] [log] [blame]
--
-- Copyright (C) 2015 secunet Security Networks AG
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
with System;
with System.Machine_Code;
package body HW.Port_IO
with
Refined_State => (State => null),
SPARK_Mode => Off
is
generic
type Word is private;
procedure Port_In (Value : out Word; Port : Port_Type);
procedure Port_In (Value : out Word; Port : Port_Type) is
begin
System.Machine_Code.Asm
("in %1, %0",
Inputs => (Port_Type'Asm_Input ("Nd", Port)),
Outputs => (Word'Asm_Output ("=a", Value)),
Volatile => True);
end Port_In;
procedure InB_Body is new Port_In (Word => Word8);
procedure InB (Value : out Word8; Port : Port_Type) renames InB_Body;
procedure InW_Body is new Port_In (Word => Word16);
procedure InW (Value : out Word16; Port : Port_Type) renames InW_Body;
procedure InL_Body is new Port_In (Word => Word32);
procedure InL (Value : out Word32; Port : Port_Type) renames InL_Body;
----------------------------------------------------------------------------
generic
type Word is private;
procedure Port_Out (Port : Port_Type; Value : Word);
procedure Port_Out (Port : Port_Type; Value : Word) is
begin
System.Machine_Code.Asm
("out %1, %0",
Inputs => (Port_Type'Asm_Input ("Nd", Port),
Word'Asm_Input ("a", Value)),
Volatile => True);
end Port_Out;
procedure OutB_Body is new Port_Out (Word => Word8);
procedure OutB (Port : Port_Type; Value : Word8) renames OutB_Body;
procedure OutW_Body is new Port_Out (Word => Word16);
procedure OutW (Port : Port_Type; Value : Word16) renames OutW_Body;
procedure OutL_Body is new Port_Out (Word => Word32);
procedure OutL (Port : Port_Type; Value : Word32) renames OutL_Body;
end HW.Port_IO;
-- vim: set ts=8 sts=3 sw=3 et: