• Please review our updated Terms and Rules here

Does XT-IDE use DMA? If not then.....

Ruud

Veteran Member
Joined
Nov 30, 2009
Messages
1,369
Location
Heerlen, NL
AFAIK XT-IDE does not use DMA on a 8088 machine to exchange data with an HDD or CF card. If XT-IDE does, then I have a problem. If it doesn't, then I still have a question.

But first: I created this little machine: http://www.baltissen.org/newhtm/mini-v20.htm , a PCB containing an 8088 or (preferably) a V20, RAM, ROM, one ISA slot, a 16450 UART and some glue logic. Not having DMA means I need to exchange data with a FDD by polling the registers. But regarding an HDD, if XT-IDE does not use DMA at all, I don't see almost any reason why I cannot use it as-is. Let's assume that:
- the INT 10h routines for the video are replaced by ones sending the data to the UART,
- the keyboard routines are replaced by routines reading data from the UART
- the INT13h are replaced by ones not using DMA

My question: am I overlooking something?
 
Unlike the floppy controller, which is unbuffered, IDE hard disks implement at least a sector buffer; often quite a bit more. Thus, one can issue a read or write without worrying about lost data. The 5170 MFM HDC BIOS code, for example, doesn't use DMA at all for hard disk operations. This doesn't mean that you can't use 8237 DMA or even bus mastering, but that would be the exception, not the rule.
 
A simple XT-CF implementation works fine in a machine without a DMA controller with the stock XTIDE bios. (Several Tandy 1000 models don’t have DMA unless expanded with the original now-unobtainable memory cards; their BIOSes also can run the floppy controller in either PIO or DMA modes, but that’s neither here nor there when it comes to the hard disk’s separate driver in the option ROM.)

If your machine is compatible enough to work with PC BIOS extensions the only possible problem could be with the XTIDE’s boot menu displays. (I have no idea how they coded that, I’d assume it’s done with standard BIOS calls but it does detect color or mono display controller, I think.)

For a machine as minimal as yours I’d definitely recommend an XT-CF-lite (8-bit subset, works only with CF cards and IDE-SD adapters) over the full XT-IDE. You can do it easily with just two chips, don’t need to bother with latches for the full 16 bit bus.
 
Last edited:
It sounds like an interesting project you have going. I'm curious how PC compatible you'll be able to manage without using a PIC for the interrupt handling. I believe the IBM PCjr is an working example of a "mostly PC-compatible" machine that both lacks DMA and runs the 8088 in minimum mode, but it does have an 8259A.

(Shouldn't matter for the XUB, though, a basic XT-IDE/CF-lite doesn't use an interrupt either, all polling.)

EDIT: Actually also curious how "regular" MS-DOS will feel about not having an 8253 PIT...
 
Last edited:
My project: http://www.baltissen.org/newhtm/mini-v20.htm

EDIT: Actually also curious how "regular" MS-DOS will feel about not having an 8253 PIT...
Commodore once made an 8088 card for their CBM-II computers but never marketed it. I made a replica and even expanded it. Michael Pleban was able to run MS-DOS 3.3 on it. The card does have a 8259 on board but not an 8253.
 
Commodore once made an 8088 card for their CBM-II computers but never marketed it. I made a replica and even expanded it. Michael Pleban was able to run MS-DOS 3.3 on it. The card does have a 8259 on board but not an 8253.

Did the commodore board tap the CBM’s “native” clock interrupt for timekeeping? I don’t think the timer interrupt necessarily needs to come from a PIT (although anything that touches the PC speaker or otherwise tries to program it expecting a PC will probably die hard) but won’t MS-DOS want something?

(Maybe no timer interrupt is something you can paper over for MS-DOS at the BIOS level, I genuinely don’t know. But I do suspect it’ll trip up quite a few applications.)

EDIT: I found some hard to follow hand-drawn schematics for the Commodore 8088 board, and if I've managed to trace it correctly IRQ0 on the 8259 is connected (through an inverter) to PB6 on the 6526 that's on the board. I don't know much about that chip but skimming the datsheet I think it might be using TIMERB to generate the clock interrupt in a vaguely PC-compatible way. (IE, using an underflow every 18.whatever times per second to get the clock.)
 
Last edited:
EDIT: I found some hard to follow hand-drawn schematics for the Commodore 8088 board, and if I've managed to trace it correctly IRQ0 on the 8259 is connected (through an inverter) to PB6 on the 6526 that's on the board.

Because curiosity is a terrible thing I dug a little more and according to [https://github.com/MichalPleban/cbm2-pc-emulator/]this[/url] the Commodore 8088 board actually used IRQ7 for the clock interrupt instead of IRQ0 (incompatibility papered over in the BIOS) but otherwise, yeah, it's basically using the CIA in place of a PIT. Of course if you actually do need a programmable timer a CIA probably isn't a fantastic choice these days unless you're sitting on a pile of them.
 
Of course if you actually do need a programmable timer a CIA probably isn't a fantastic choice these days unless you're sitting on a pile of them.
Why, if I may ask? A 6526 has two programmable 16-bit timers on board.

Regarding the schematics, I have them in Eagle and can provide them in Eagle format or as PNG. Just email me.
 
Why, if I may ask? A 6526 has two programmable 16-bit timers on board.

I’m sure it’s a perfectly fine part, but it was proprietary to a single company, hasn’t been made for 25 years, and is kind of sought after for repairing the aging original machines that used it. (Thus what I said about if you were sitting on a pile of them.)

The 8253/54 isn’t exactly available in every corner store either, but if you’re going to use a discontinued part in your new design for an MS-DOS compatible SBC it seems like it makes more sense to use the one directly hardware compatible with IBM PCs but, hey, if you only care about having some timers and are writing your own BIOS there’s probably something out there still being made that you could use instead. (An obvious, if overkill, idea would be something like an AVR MCU.)
 
Back
Top