Bochs/bochs/PARAM_TREE.txt

313 lines
10 KiB
Plaintext

$Id: PARAM_TREE.txt,v 1.1 2003-03-15 17:51:36 bdenney Exp $
I'm trying to organize the parameters into a tree structure instead of
a huge flat list. Once the parameter code is improved, I hope to use
parameters to implement save/restore, and to give access to device
state from within the debugger.
-Bryce
Notes:
- get rid of bx_id enumerated type and parameter id numbers (e.g.
BXP_FLOPPYA_PATH) These id numbers are ok for scalar parameters like
"memory size in megabytes" but very bad for parameters of replicated
devices, like com1,2,3,4, ata1,2,3,4, with master and slave, etc. The only
reason that we have id numbers at all is to be able to find the pointer to a
parameter. In a tree structure, the parameters will be found by name
instead.
- when creating a bx_param_c object, specify the parent object. The
parent must be bx_list_c type. In the constructor, the child is
added to the parent's list of children, and (optionally) the child
keeps a pointer to the parent.
- parameters can then be located by their position in the tree, for
example: memory.rom.address. That means to find the bx_list_c called
"memory" in the list of top level objects, then get the bx_list_c called
"rom" in memory's list of children, then get the child called "address"
in rom's list of children.
- alternative notation: memory/rom/address, ata>1>slave>cylinders,
memory'optional_rom'path
- parameters have additional information inside them, like the name,
description, min, max, initial value. Do we need a way to name
this stuff? Invent syntax.... PARAM'FIELD means field FIELD of parameter
PARAM.
memory.ram.size = 32
memory.ram.size'type = BXT_PARAM_NUM
memory.ram.size'max = 4
memory.ram.size'min = 256
memory.ram.size'initial_value = 256
memory.ram.size'parent refers to parameter memory.ram
memory.ram'parent refers to parameter memory
etc.
I'm not sure if this will ever be needed.
- also I don't know if any form of relative pathname would be useful/needed.
If so, probably using slash notation and ".."'s would look the most
familiar to people.
- we need to be able to handle arrays of objects, but I think it can be
done with just another list with names 0, 1, 2, 3, etc.
floppy
floppy.cmd_delay=50
floppy.0.devtype=1
floppy.0.path=/dev/fd0
floppy.1.devtype=1
floppy.1.path=/dev/fd1
- I have written all the parameter names in "C variable name" style,
lowercase with underscores instead of spaces. But for display purposes
it may be k
Proposed organizion of parameters into a tree
memory
ram
size BXP_MEM_SIZE,
rom
address BXP_ROM_ADDRESS,
path BXP_ROM_PATH,
vga_rom_path BXP_VGA_ROM_PATH,
optional_rom
0
path BXP_OPTROM1_PATH,
addr BXP_OPTROM1_ADDRESS,
1
path BXP_OPTROM2_PATH,
addr BXP_OPTROM2_ADDRESS,
2
path BXP_OPTROM3_PATH,
addr BXP_OPTROM3_ADDRESS,
3
path BXP_OPTROM4_PATH,
addr BXP_OPTROM4_ADDRESS,
cmos
path BXP_CMOS_PATH,
image BXP_CMOS_IMAGE,
time0 BXP_CMOS_TIME0,
pit
realtime BXP_REALTIME_PIT,
floppy
cmd_delay BXP_FLOPPY_CMD_DELAY,
0 BXP_FLOPPYA,
devtype BXP_FLOPPYA_DEVTYPE,
path BXP_FLOPPYA_PATH,
type BXP_FLOPPYA_TYPE,
status BXP_FLOPPYA_STATUS,
1 BXP_FLOPPYB,
devtype BXP_FLOPPYB_DEVTYPE,
path BXP_FLOPPYB_PATH,
type BXP_FLOPPYB_TYPE,
status BXP_FLOPPYB_STATUS,
ata
new_drive_support BXP_NEWHARDDRIVESUPPORT,
0
menu (for some reason, I had a separate object for menu)
present BXP_ATA0_PRESENT,
ioaddr1 BXP_ATA0_IOADDR1,
ioaddr2 BXP_ATA0_IOADDR2,
irq BXP_ATA0_IRQ,
master BXP_ATA0_MASTER
present BXP_ATA0_MASTER_PRESENT
type BXP_ATA0_MASTER_TYPE
path BXP_ATA0_MASTER_PATH
cylinders BXP_ATA0_MASTER_CYLINDERS
heads BXP_ATA0_MASTER_HEADS
spt BXP_ATA0_MASTER_SPT
status BXP_ATA0_MASTER_STATUS
model BXP_ATA0_MASTER_MODEL
biosdetect BXP_ATA0_MASTER_BIOSDETECT
translation BXP_ATA0_MASTER_TRANSLATION
slave
(same options as master)
1
(same options as ata.0)
2
(same options as ata.0)
3
(same options as ata.0)
serial
0
enabled BXP_COM1_ENABLED
path BXP_COM1_PATH
1
enabled BXP_COM2_ENABLED
path BXP_COM2_PATH
2
enabled BXP_COM3_ENABLED
path BXP_COM3_PATH
3
enabled BXP_COM4_ENABLED
path BXP_COM4_PATH
usb
1
enabled BXP_USB1_ENABLED,
ioaddr BXP_USB1_IOADDR,
irq BXP_USB1_IRQ,
parallel
0
enabled BXP_PARPORT1_ENABLED,
outfile BXP_PARPORT1_OUTFILE,
1
enabled BXP_PARPORT2_ENABLED,
outfile BXP_PARPORT2_OUTFILE,
ne2k
0 BXP_NE2K,
present BXP_NE2K_PRESENT,
ioaddr BXP_NE2K_IOADDR,
irq BXP_NE2K_IRQ,
macaddr BXP_NE2K_MACADDR,
ethmod BXP_NE2K_ETHMOD,
ethdev BXP_NE2K_ETHDEV,
script BXP_NE2K_SCRIPT,
sb16 BXP_SB16,
present BXP_SB16_PRESENT,
midifile BXP_SB16_MIDIFILE,
wavefile BXP_SB16_WAVEFILE,
logfile BXP_SB16_LOGFILE,
midimode BXP_SB16_MIDIMODE,
wavemode BXP_SB16_WAVEMODE,
loglevel BXP_SB16_LOGLEVEL,
dmatimer BXP_SB16_DMATIMER,
pci
i440fx_support BXP_I440FX_SUPPORT,
# experiment with how to organize the configurable parameters versus
# the variables in the device itself. Try putting the configurable
# parameters into keyboard.conf.*
keyboard BXP_KEYBOARD,
conf
type BXP_KBD_TYPE,
serial_delay BXP_KBD_SERIAL_DELAY,
paste_delay BXP_KBD_PASTE_DELAY,
use_mapping BXP_KEYBOARD_USEMAPPING,
map BXP_KEYBOARD_MAP,
enable_mouse BXP_MOUSE_ENABLED,
user_shortcut BXP_USER_SHORTCUT,
pare BXP_KBD_PARE,
tim BXP_KBD_TIM,
auxb BXP_KBD_AUXB,
keyl BXP_KBD_KEYL,
c_d BXP_KBD_C_D,
sysf BXP_KBD_SYSF,
inpb BXP_KBD_INPB,
outb BXP_KBD_OUTB,
timer_pending BXP_KBD_TIMER_PENDING,
irq1_req BXP_KBD_IRQ1_REQ,
irq12_req BXP_KBD_IRQ12_REQ,
cpu
0 BXP_CPU_PARAMETERS,
general_regs
eax BXP_CPU_EAX,
ebx BXP_CPU_EBX,
ecx BXP_CPU_ECX,
edx BXP_CPU_EDX,
ebp BXP_CPU_EBP,
esi BXP_CPU_ESI,
edi BXP_CPU_EDI,
esp BXP_CPU_ESP,
eip BXP_CPU_EIP,
segment
cs BXP_CPU_SEG_CS,
ds BXP_CPU_SEG_DS,
ss BXP_CPU_SEG_SS,
es BXP_CPU_SEG_ES,
fs BXP_CPU_SEG_FS,
gs BXP_CPU_SEG_GS,
memory_management
ldtr BXP_CPU_SEG_LDTR,
tr BXP_CPU_SEG_TR,
gdtr
base BXP_CPU_GDTR_BASE,
limit BXP_CPU_GDTR_LIMIT,
idtr
base BXP_CPU_IDTR_BASE,
limit BXP_CPU_IDTR_LIMIT,
eflags BXP_CPU_EFLAGS,
id BXP_CPU_EFLAGS_ID,
vip BXP_CPU_EFLAGS_VIP,
vif BXP_CPU_EFLAGS_VIF,
ac BXP_CPU_EFLAGS_AC,
vm BXP_CPU_EFLAGS_VM,
rf BXP_CPU_EFLAGS_RF,
nt BXP_CPU_EFLAGS_NT,
iopl BXP_CPU_EFLAGS_IOPL,
of BXP_CPU_EFLAGS_OF,
df BXP_CPU_EFLAGS_DF,
if BXP_CPU_EFLAGS_IF,
tf BXP_CPU_EFLAGS_TF,
sf BXP_CPU_EFLAGS_SF,
zf BXP_CPU_EFLAGS_ZF,
af BXP_CPU_EFLAGS_AF,
pf BXP_CPU_EFLAGS_PF,
cf BXP_CPU_EFLAGS_CF,
debug
dr0 BXP_CPU_DR0,
dr1 BXP_CPU_DR1,
dr2 BXP_CPU_DR2,
dr3 BXP_CPU_DR3,
dr6 BXP_CPU_DR6,
dr7 BXP_CPU_DR7,
control
cr0 BXP_CPU_CR0,
cr1 BXP_CPU_CR1,
cr2 BXP_CPU_CR2,
cr3 BXP_CPU_CR3,
cr4 BXP_CPU_CR4,
1
(same parameters for cpus 1...15)
config_menus
main BXP_MENU_MAIN,
memory BXP_MENU_MEMORY,
interface BXP_MENU_INTERFACE,
disk BXP_MENU_DISK,
ser_par BXP_MENU_SERIAL_PARALLEL,
sound BXP_MENU_SOUND,
misc BXP_MENU_MISC,
runtime BXP_MENU_RUNTIME,
boot_params
boot_drive BXP_BOOTDRIVE,
floppy_sig_check BXP_FLOPPYSIGCHECK,
load32bitos BXP_LOAD32BITOS,
which BXP_LOAD32BITOS_WHICH,
path BXP_LOAD32BITOS_PATH,
iolog BXP_LOAD32BITOS_IOLOG,
initrd BXP_LOAD32BITOS_INITRD,
time
system_clock_sync BXP_SYSTEM_CLOCK_SYNC,
ips BXP_IPS,
max_ips BXP_MAX_IPS,
vga_update_interval BXP_VGA_UPDATE_INTERVAL,
display
config_interface BXP_SEL_CONFIG_INTERFACE,
display_library BXP_SEL_DISPLAY_LIBRARY,
ask_for_pathname BXP_ASK_FOR_PATHNAME, // what the heck is this?
private_colormap BXP_PRIVATE_COLORMAP,
full_screen BXP_FULLSCREEN,
screen_mode BXP_SCREENMODE,
general
start_mode BXP_BOCHS_START,
text_snapshot_check BXP_TEXT_SNAPSHOT_CHECK,
log
filename BXP_LOG_FILENAME,
prefix BXP_LOG_PREFIX,
debugger_filename BXP_DEBUGGER_LOG_FILENAME,
debugger
running BXP_DEBUG_RUNNING,