0 Members and 1 Guest are viewing this topic.
This has been bugging me for a while now, but I've kept it on the "back burner"...the VDC is accessed at only 1MHz speed... even though the VDC is the "default" device for 2MHz speed (because the VIC can't go that fast)...I'm quite certain this is because the VDC registers are in the $Dxxx region of memory ($d000 ~ $dffff).
Another very interesting and related experiment you can try deals with the MMU. You can access the MMU "special" registers at $ff00~$ff04 at full 2MHz speed. But if you try to access the equivalant MMU registers at $d500~$d504 you will discover that the CPU slows down to 1MHz.
Why? I'm thinking this is due to /IOACC being generated by PLA (U11 pin 43) whenever it receives /IOCS on pin 38. Note the /IOACC signal from PLA goes the VIC-IIe, which in turn slows down ("stretches") the 2MHz clock down to 1MHz speed.
So the "professional" way to implement 2MHz VDC might be to re-write the PLA... but even if you could make your own custom PLA, you still would have to replace the 48-pin monster that is soldered directly to the circuit board! Not something I would ever want to do...
My "hacker" solution is to cut the /IOCS line between U3 and the PLA and insert a simple logic cirucit that calculates NOT /IOCS NAND /CS8563 with the result going to the PLA. See attachment #2...So has anybody tried this? Has anyone heard of this being attempted (and the results)?
Surely there are reasons this might not work... Such as propogation delays through the logic network... or the simple fact the VDC can't talk at 2MHz... but is there any obvious reason it would not work?
I have not tried this. I haven't even installed my 64K VRAM chips! I'm the kind of guy who thinks "if it ain't broke, don't fix it". But I thought I would toss out the idea for the more adventurous guys (and girls) out there.
Obviously, this isn't your trivial hardware hack, as you run the risk of converting a functional C-128 into a large door stop.
BTW, the timing specs for the 8563/8568 suggest they can run at an effective 8 MHz bus rate without any problems
I question whether the change will be perceptible to the average user. Much of the MPU time in driving the display is eaten up in screen kernel processing...
STX $D600 ;[4 or 5] [4]BIT $D600 ;[4] [4]BPL wait ;[2] [2]STA $D601 ;[4] [4];total ;[14 or 15][14]
STX $D600 ;[4 or 5] [4]BIT $D600 ;[4] [4]BPL wait ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]total ;[104 or 105] [96]
QuoteObviously, this isn't your trivial hardware hack, as you run the risk of converting a functional C-128 into a large door stop.I don't think it would damage anything.... if it didn't work, you could just reconnect the original lines.
Anyway, assuming the VDC is ready, a normal C128 would take 14.5 cycles on average and 2MHz-VDC-mod unit would take 14 cycles. Which is only a 3.6% improvement!
However that is using 'conventional' programming. A trick used by several programs is to write consecutively to the VDC once it is ready. The number of consecutive writes possible is determined by the video mode and the DRAM refresh register. It has been reported that over 24 bytes can be written consequtively when in text mode and DRAM refresh of 0. Using the default setting of 5, I have myself observed that at least 8 bytes can written consecutively. So let's consider thatCode: [Select]STX $D600 ;[4 or 5] [4]BIT $D600 ;[4] [4]BPL wait ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]INY ;[2] [2]LDA ($FC),Y;[5] [5]STA $D601 ;[5] [4]total ;[104 or 105] [96]So assuming the VDC is ready and no-page boundry crossing, a stock C128 would take an average of 104.5 cycles, while a modified unit would take 96 cycles... for an improvement of 8.9%... Well that's not very impressive. So I guess this is not a good idea unless somebody is really desperate too eek out a few percent of speed and/or likes doing hardware mods...
Assuming the PCB didn't fall apart from the heat of soldering. You're talking about PCB's that are over a quarter-century old, and were not of the highest quality when new. In fact, as PCBs go, Commodore's were pretty junky. They were designed to be cheap, not good. Traces might start peeling off if you're not careful.
You got that part backwards. At U3 pin 5, /IOCS is an input, one of two active-low enables that set up U3 to make one of its outputs low, enabling SID, CIAs, VDC, etc. PLA pin 38 is an output.