Brutman wrote:I haven't looked into the audio support on the Jr much. Are you getting your information from the Tech Ref? If so, that is definitive.
Yep, all from the tech ref and also a great book called IBM Pcjr Assembler Language by David C. Willen.
The video memory on the PCjr is going to be a little goofy compared to the Tandy. The VGA (Video Gate Array) on the PCjr will route memory references from B8000 to BFFF0 to the correct physical memory in the first 128K as selected by the registers, but only the first 16KB of memory gets routed. Instead of making memory references to the normal CGA range it's probably less confusing to find the real memory addresses and hit them directly. I don't know how the Tandy handles the video memory, other than it is source from the top end of the memory map so there are no holes or collisions with the interrupt and BIOS RAM areas.
The techref notes that only 16K is mapped; the Assembler book definitely says you need to write to lower memory. It's the only way to do 32K modes anyway.
Jrs are also missing some video modes that Tandy machines have, and there is a well known 'Tandy' modification to add that support to the Jr. Be sure to use PCjr supported modes unless you want to do the mod. I think there is also a mod to enable some Tandy sound changes on the Jr, but I'm not as familiar with it and I'd have to do some research.
The Tandy 1000 has no more modes than the PCjr does; I think the hardware graphics mod was to change how the PCjr maps memory because you can use more than 128K for Tandy, I'm pretty sure. As for the sound mod, I think all it is is hard-wiring both the 8253 beeper and 3-voice chip to the same output so that you can hear both through the PCjr monitor. Normally, you can only route beeper OR 3-voice. Tandy routes everything to the output jack so a lot of games don't bother to set the PCjr routing bits, and you hear zilch.
There are differences in the keyboard handling, but your demo probably doesn't care about the keyboard so that is not an issue.
I'll disable the keyboard if it gains me an interrupt! IRQ 1 isn't needed for DMA timing on PCjr, but it's used to de-serialize the keyboard data. If I disable it I can use it for whatever I like, but I can probably kiss my chances of using the keyboard goodbye until the next reboot.
You are just out of luck on mass storage ... A demo on this machine will favor something cpu and graphics intensive that can be represented compactly.
I don't want mass storage for RUNNING the demo, I want mass storage for BUILDING the demo. Since my compiler+editor+debugger is 440K it won't even fit onto a single disk

so I will have to use another machine to build it, hence the discussion. I still intend to write a small test program for DOSBox to see what that does; if the emulation is good enough, I may just use DOSBox for a theoretical 486-class-speed PCjr to develop on
The target for the demo is, at most, two 360KB disks. As for memory, I'm not sure; while it would be kick-ass to target 128KB, I don't think that's doable this first round. I have two PCjrs, one that is 640K + NEC V20 and another that is 384KB+8088. I think the second one is more representative of what people might have (ie. 8088 and around 256KB RAM after jrconfig and dos) so that is probably what I will build for.