1/* $FreeBSD$ */
2
3#ifndef TESTMAIN
4#include <machine/cpufunc.h>
5
6/*
7 * outb ( port# c -- )
8 * Store a byte to I/O port number port#
9 */
10void
11ficlOutb(FICL_VM *pVM)
12{
13	u_char c;
14	uint32_t port;
15
16	port=stackPopUNS(pVM->pStack);
17	c=(u_char)stackPopINT(pVM->pStack);
18	outb(port,c);
19}
20
21/*
22 * inb ( port# -- c )
23 * Fetch a byte from I/O port number port#
24 */
25void
26ficlInb(FICL_VM *pVM)
27{
28	u_char c;
29	uint32_t port;
30
31	port=stackPopUNS(pVM->pStack);
32	c=inb(port);
33	stackPushINT(pVM->pStack,c);
34}
35
36/*
37 * Glue function to add the appropriate forth words to access x86 special cpu
38 * functionality.
39 */
40static void ficlCompileCpufunc(FICL_SYSTEM *pSys)
41{
42    FICL_DICT *dp = pSys->dp;
43    assert (dp);
44
45    dictAppendWord(dp, "outb",      ficlOutb,       FW_DEFAULT);
46    dictAppendWord(dp, "inb",       ficlInb,        FW_DEFAULT);
47}
48
49FICL_COMPILE_SET(ficlCompileCpufunc);
50
51#endif
52