$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,