138 lines
5.3 KiB
C
138 lines
5.3 KiB
C
#ifndef APE_CONFIG_H_
|
||
#define APE_CONFIG_H_
|
||
#include "ape/relocations.h"
|
||
#include "libc/macros.h"
|
||
|
||
/**
|
||
* @fileverview αcτµαlly pδrταblε εxεcµταblε configuration.
|
||
*/
|
||
|
||
/**
|
||
* Post-Initialization Read-Only Code Size Threshold.
|
||
*
|
||
* An executable needs to have at least this much code, before the
|
||
* linker adds non-mandatory 4kb alignments. The benefit is better
|
||
* memory protection. The tradeoff is sparser binaries.
|
||
*/
|
||
#ifndef APE_PIRO_THRESHOLD
|
||
#ifdef CONFIG_DBG
|
||
#define APE_PIRO_THRESHOLD 0x1000
|
||
#else
|
||
#define APE_PIRO_THRESHOLD 0x10000
|
||
#endif
|
||
#endif
|
||
|
||
/**
|
||
* PC Standard I/O Configuration.
|
||
*/
|
||
#ifndef METAL_STDIN
|
||
#define METAL_STDIN COM1
|
||
#endif
|
||
#ifndef METAL_STDOUT
|
||
#define METAL_STDOUT COM1
|
||
#endif
|
||
#ifndef METAL_STDERR
|
||
#define METAL_STDERR COM2 /* will fallback to stdout if COM2 not present */
|
||
#endif
|
||
|
||
/**
|
||
* PC Display Configuration (MDA/CGA)
|
||
* @see www.lammertbies.nl/comm/info/serial-uart.html
|
||
* @see ape/lib/vidya.h
|
||
*/
|
||
#ifndef VIDYA_MODE
|
||
#define VIDYA_MODE VIDYA_MODE_CGA
|
||
#endif
|
||
|
||
/* FPU Control Word (x87) Exception Masks
|
||
@see Intel Manual V1 §8.1.5
|
||
|
||
IM: Invalid Operation ───────────────┐
|
||
DM: Denormal Operand ───────────────┐│
|
||
ZM: Zero Divide ───────────────────┐││
|
||
OM: Overflow ─────────────────────┐│││
|
||
UM: Underflow ───────────────────┐││││
|
||
PM: Precision ──────────────────┐│││││
|
||
PC: Precision Control ────────┐ ││││││
|
||
{float,∅,double,long double} │ ││││││
|
||
RC: Rounding Control ───────┐ │ ││││││
|
||
{even, →-∞, →+∞, →0} │┌┤ ││││││
|
||
┌┤││ ││││││
|
||
d││││rr││││││*/
|
||
#define X87_NORMAL 0b000000000001101111111
|
||
#define X87_DTOA 0b000000000001000000000
|
||
#define X87_DTOA_MASK 0b000000000001100000000
|
||
#ifndef X87_DEFAULT
|
||
#define X87_DEFAULT X87_NORMAL
|
||
#endif
|
||
|
||
/**
|
||
* Serial Line Configuration (8250 UART 16550)
|
||
* @see ape/lib/uart.h
|
||
*/
|
||
#ifndef UART_BAUD_RATE
|
||
#define UART_BAUD_RATE 9600 /* bits per second ∈ [50,115200] */
|
||
#endif
|
||
#define UART_CONF_DLR (1843200 /*hz*/ / 16 /*wut*/ / (UART_BAUD_RATE))
|
||
#ifndef UART_CONF_IIR
|
||
/* ┌interrupt trigger level {1,4,8,14}
|
||
│ ┌enable 64 byte fifo (UART 16750+)
|
||
│ │ ┌select dma mode
|
||
│ │ │┌clear transmit fifo
|
||
│ │ ││┌clear receive fifo
|
||
├┐│ │││┌enable fifos*/
|
||
#define UART_CONF_IIR 0b00000000
|
||
#endif
|
||
#ifndef UART_CONF_LCR
|
||
/* ┌dlab: flips configuration mode state
|
||
│┌enable break signal
|
||
││ ┌parity {none,odd,even,high,low}
|
||
││ │ ┌extra stop bit
|
||
││ │ │┌data word length (bits+5)
|
||
││┌┴┐│├┐*/
|
||
#define UART_CONF_LCR 0b01000011
|
||
#endif
|
||
|
||
/**
|
||
* eXtreme Low Memory.
|
||
*/
|
||
#define XLM(VAR) (XLM_BASE_REAL + XLM_##VAR)
|
||
#define XLMV(VAR) (__xlm + XLM_##VAR)
|
||
#define XLM_BASE_REAL 0x1000
|
||
#define XLM_E820 0
|
||
#define XLM_E820_SIZE 0x2000
|
||
#define XLM_BIOS_DATA_AREA 0x2000
|
||
#define XLM_BIOS_DATA_AREA_SIZE 256
|
||
#define XLM_DRIVE_BASE_TABLE 0x2200 /* drive values are contiguous */
|
||
#define XLM_DRIVE_BASE_TABLE_SIZE 11
|
||
#define XLM_DRIVE_TYPE 0x220b
|
||
#define XLM_DRIVE_TYPE_SIZE 1
|
||
#define XLM_DRIVE_LAST_SECTOR 0x220c /* 1-based inclusive, e.g. 18 */
|
||
#define XLM_DRIVE_LAST_SECTOR_SIZE 1
|
||
#define XLM_DRIVE_LAST_CYLINDER 0x220d /* 0-based incl, e.g. 79 */
|
||
#define XLM_DRIVE_LAST_CYLINDER_SIZE 2
|
||
#define XLM_DRIVE_ATTACHED 0x220f
|
||
#define XLM_DRIVE_ATTACHED_SIZE 1
|
||
#define XLM_DRIVE_LAST_HEAD 0x2210 /* 0-based inclusive, e.g. 1 */
|
||
#define XLM_DRIVE_LAST_HEAD_SIZE 1
|
||
#define XLM_DRIVE 0x2211
|
||
#define XLM_DRIVE_SIZE 1
|
||
#define XLM_HAVEEXTMEMKB 0x2212
|
||
#define XLM_HAVEEXTMEMKB_SIZE 4
|
||
#define XLM_VIDEO_POSITION_FAR_POINTER 0x2216 /* video cursor far pointer */
|
||
#define XLM_VIDEO_POSITION_FAR_POINTER_SIZE 4
|
||
#define XLM_PAGE_TABLE_STACK_POINTER 0x2220
|
||
#define XLM_PAGE_TABLE_STACK_POINTER_SIZE 8
|
||
#define XLM_BADIDT 0x2230
|
||
#define XLM_BADIDT_SIZE 6
|
||
#define XLM_LOADSTATE 0x2240
|
||
#define XLM_LOADSTATE_SIZE 4
|
||
#define XLM_SIZE ROUNDUP(XLM_LOADSTATE + XLM_LOADSTATE_SIZE, 0x1000)
|
||
#define IMAGE_BASE_REAL (XLM_BASE_REAL + XLM_SIZE)
|
||
|
||
#if !defined(__LINKER__) && !defined(__ASSEMBLER__)
|
||
extern char __xlm[XLM_SIZE];
|
||
#endif /* !defined(__LINKER__) && !defined(__ASSEMBLER__) */
|
||
|
||
#endif /* APE_CONFIG_H_ */
|