ephram@violet.berkeley.edu (Ephram Cohen) (05/02/91)
I have a Phoenix V10.10a BIOS, on a Micronix 386/25 32/64K cache motherboard. I am part of an effort to use the extended memory of the 386 (we have 4 Meg) for audio information. The board we have uses DMA to transfer data to the DAC's. It all works fine with memory below 640K. However, when I move data up into extended memory funny things happen. Sometimes it will produce the desired sound, other times nothing (probably 0's as opposed to not working). I called Micronix and they said that the 386 is using the paging option to seperate linear and physical addresses. Since the DMA takes a physical address the BIOS move memory routine does not now let me specify where my data is going to go (it takes a linear address). What I need to know, and need to controll, is this Where is my data going? I understand that I can not access any of the mapping registers involved from V86 mode (The mode the machine uses for DOS). I must switch into protected mode to do it. I think that I can do all of what I need to do by getting the CR3 register. This will give me the linear address of the paging table so I can do the address calculation myself. Did I miss something here? Is there an easy way to switch the processor to Protected mode to access this register? Can I easily switch back to whatever mode the 386 should be in to resume execution of the program? I have looked in the Phoenix BIOS book published by Addison Wessley but there is no information on this subject. Phoenix has been a week in answering my call. I would greatly appreciate any working code to get at the 386 registers. Thanks 1) will the BIOS (I have Phoenix V10.10A) switch me into 286 mode or 386 mode? (int 15 func 89) ? 2) How do I switch back? I do not know what privelege level I am going to be at when the switch is made. 3) will the registers be preserved when I switch back? can I ROR EAX,10H and expect that after the switch back AX will have the high 16 bits of the EAX register? 4) Does anyone have some tech doc on the BIOS mentioned above? I have called Phoenix but they are slow getting back to me. The reason for all this is simple. I have a DMA capable board and I want to know what physical address I am placing data at. The DMA needs the _Physical_ address and if the linear address is re-mapped I am USCWOAP. I suspect that the paginf feature of the 386 _is_ used by this BIOS. How can I turn it off (I promise never, never to use relocated BIOS features...)? Any help would be appreciated. -- We must prevent those commies from compromising the integrity of our precious bodily fluids. -Gen. Jack D. Ripper Ephram Cohen ephram@violet.berkeley.edu 466 44th St. #1 3210 Tolman Hall