diff --git a/bochs/PARAM_TREE.txt b/bochs/PARAM_TREE.txt new file mode 100644 index 000000000..7c6c68030 --- /dev/null +++ b/bochs/PARAM_TREE.txt @@ -0,0 +1,312 @@ +$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, +