cjs
Veteran Member
There are five links to three different source code files and two specific points within them back in message #37.And you could put in links/citations to share and enlighten us all instead of just asserting things, I dunno…
VCF West | Aug 01 - 02 2025, | CHM, Mountain View, CA |
VCF Midwest | Sep 13 - 14 2025, | Schaumburg, IL |
VCF Montreal | Jan 24 - 25, 2026, | RMC Saint Jean, Montreal, Canada |
VCF SoCal | Feb 14 - 15, 2026, | Hotel Fera, Orange CA |
VCF Southwest | May 29 - 31, 2026, | Westin Dallas Fort Worth Airport |
VCF Southeast | June, 2026 | Atlanta, GA |
There are five links to three different source code files and two specific points within them back in message #37.And you could put in links/citations to share and enlighten us all instead of just asserting things, I dunno…
There are five links to three different source code files and two specific points within them back in message #37.
Did you compare the other, non-system-specific code? The first two routines I checked between the Altair 680 BASIC and the MC-10 BASIC, STROUT and copy/LBLE1FE, were identical. (There are some 6803 improvements, there, though, such as replacement of ADDB+ADCA with ADDD in Z02EA/GETSTK.)
Well, that's the crux of our disagreement, I suppose; based on four years of on-and-off dabbling in MS-BASIC source and disassembly for three (four if you count Z80) CPUs, and now 6809 as well, across several different versions of MS-BASIC, and having done some of this disassembly myself, I feel I have a sense of how MS did these things, and I find it not at all unlikely that MS would port their current 8080 BASIC to 6809 rather than cross-assemble an old version of BASIC from 6800 to 6809, producing a massively inefficient (both in speed and space) version which would take a lot of time and effort to optimise, only to end up with an older version of BASIC anyway.I will freely admit that I'm not remotely conversant enough with assembly language to pick through assembly listings for three different CPUs (Only one of which is actually something like like original source, the other's a disassembly) that came out at wildly different times and perfectly reconstruct a family tree of what was ported from where, so... again, I dunno, maybe you in fact are, but pardon me for finding a claim like "the 6809 port is completely separately derived from a later version of BASIC-80" a little remarkable.
One thing you'll notice if you read the source code and disassemblies across various versions and CPUs is that MS tends toward changing and reimplementing as little as possible in the code base. They'll go use an inefficient way of doing things on the 6800 or 6502 because it's the way it was done in the 8080 code from which the 6800 and 6502 code were derived, rather than rewrite it to be more natural for the port.But is that a consequence of it being a "separate port", or is it simply the same techniques being applied by MS when growing a "small" BASIC into a "big" one?
Why, yes, I did happen to do that. The MS-BASIC 5.2 source that you saw in the repo I linked (at least, if you looked at the names of the top level directories) is there for a reason, after all.Just wondering, before you threw this out there as some kind of evidence that 6800 and 6809 BASICs aren't related because CoCo extended BASIC is "fancier", and therefore must be an independent port of BASIC 80, did you do the same with BASIC-80? I just took a look at the source code for Microsoft BASIC-80 5.2, the extended disk version for CP/M circa 1981-ish, on Winworld.
Yes. I've known this for years, and you will find this all over the place. I believe you see this sort of thing for the "if it ain't broke" reasons I described above. (You, of course, are free to propose other opinions on what's going on there.)...but there are also blocks of code in it that are straight out of Altair 4K BASIC. GOSUB and RETURN, for instance, are almost entirely unchanged.
That is curious, though perhaps not that surprising; it could well be that IBM decided to re-use an existing popular pinout (it was the same on pretty much all TRS-80 models IIRC) rather change it for no good reason.And related to Tandy - I've always found it interesting that the 1981 IBM PC used the same cassette interface as the 1980 CoCo (that DIN plug, which also the TRS-80 used).
I don't know if MS or Tandy wrote the CMT support for the PC, but it is, IIRC, in the PC BIOS, not in the ROM BASIC. But though the connector is the same, the CoCo and IBM PC tape formats are different. The bit-level formatting is not too dissimilar: the CoCo does 0 and 1 with one cycle each of 1200 and 2400 Hz, whereas the PC uses a single cycle of 1000 and 2000 Hz for the same. But at the blocking level it changes: CoCo uses a sync leader of 128 bytes of alternating 0/1; PC uses 256 bytes of all 1s; the block format itself is somewhat different (not that there are a huge number of choices for this); and the CoCo uses a 1-byte checksum on each block whereas the PC uses a 2-byte CRC. Also, the hardware is slightly different: the CoCo uses a 6-bit D/A for output, whereas the PC (again, IIRC) just does a standard square wave.I've wondered if Microsoft leveraged that recent 1980 product development experience (BASIC on a 6809, and its tape support) when helping to design and integrate the IBM PC? And just associated with that, perhaps Microsoft proposed to "just use the same tape system that Tandy used" - which conveniently maybe helped retain a lot of the same code for the CoCo BASIC? (or at least to borrow the timing characteristics - of writing/reading to tape).
Replacing a ROM with a faster rated one will not increase performance in any signifigant way. The hardware was constructed to expect the data from the ROM at 600ns. Putting a 250ns ROM in there will only make the ROM have the data sooner.The Model 100 used a 600 ns ROM. The IBM PC ROM was rated at 250 ns. A number of efforts at speeding up the Model 100 line include replacing the ROM with a faster one.
True, but I don't see how that's relevant. (I am guessing you probably do agree with krebizfan that speeding up the Model 100 could include replacing the ROM with a faster one.)Replacing a ROM with a faster rated one will not increase performance in any signifigant way.
Just debunking a popular myth. Off handed assertions of fallacies are a pet peeve.True, but I don't see how that's relevant.
As a small step in the process, I guess it would be warranted.(I am guessing you probably do agree with krebizfan that speeding up the Model 100 could include replacing the ROM with a faster one.)
Fair enough, but why debunk fallacies that nobody has brought up?Just debunking a popular myth. Off handed assertions of fallacies are a pet peeve.
Post #46 specifically mentions an attempt to speed up a computer with a faster ROM. Pointing out that it doesn't work.Fair enough, but why debunk fallacies that nobody has brought up?
Post #46 specifically and carefully says, "A number of efforts at speeding up the Model 100 line include replacing the ROM with a faster one." [Emphasis mine.] Which was what I was pointing out when I suggested that, "you probably do agree with krebizfan that speeding up the Model 100 could include replacing the ROM with a faster one."Post #46 specifically mentions an attempt to speed up a computer with a faster ROM. Pointing out that it doesn't work.
Post #46 specifically and carefully says, "A number of efforts at speeding up the Model 100 line include replacing the ROM with a faster one." [Emphasis mine.] Which was what I was pointing out when I suggested that, "you probably do agree with krebizfan that speeding up the Model 100 could include replacing the ROM with a faster one.
https://forum.vcfed.org/index.php?threads/update-on-my-trs-80-model-100-cp-m-rig.78460/ is a thread that incorporates the idea of a faster ROM as part of the upgrade. Agree with it; disagree with it; it is what it is.
On an M100, to double the speed to 4.9MHz, you also need faster RAM and a faster main ROM.
Well, as a blanket statement, that is wrong. If your memory is slow enough that wait states are being inserted, merely removing the wait states will also require faster memory. (Given how slow that ROM is, this is what I had assumed that krebizfan was talking about, though tweaking other things is also a fair enough way of increasing speed of access to memory.)IE, just as was pointed out here, you don't need the faster memory unless you up the clock speed.
This is not something relevant just to modern systems. In fact, it's as old as home computers themselves. The first MITS PROM board (and one of the earliest S-100 bus boards made), the 88-PMC, had options for adding zero to three wait states to handle slower PROMs. This wasn't a theoretical consideration: it was based on actual published timings for Intel 1702 and 1702A PROMs. (And, of course, part of the reason for the particular and rather complex clock and memory access design of the 8080, as compared with the 6800 and similar systems, is to work with slower memory without having to introduce wait states.)And sure, with more modern systems it's a base assumption that any memory that's not on the same die as the CPU is going to run at some fractional rate of maximum speed.
Yes, but it also implied that krebizfan was making that mistake, whereas any reasonably charitable reading of what he said showed that he was not making that mistake. kb2syd could have started the message with, e.g., "I know you understand this, but for others that don't," or something similar, rather than implying that krebizfan was posting something Wrong On The Internet.The comment you're going to the mat over here was clearly in reference to people who believe that just swapping a faster memory part for a slower one alone will speed up an older computer.
I'm sorry you took "That's no surprise at all to me" as "jumping down your throat." But I felt, based on my knowledge, that it was worth offering an alternative to your theory.Jumping down my throat for an offhand one sentence comment and turning it into a massive mind-reading exercise about how people working at a company 40 years ago....
There's no need to get nasty here. Your theory is, objectively, at least as much based on "psychic intuition" as mine. And I rather feel that the whole discussion was a case more of you jumping down my throat with the ferocity of your defense of your theory, and why mine must be wrong. I don't mind being challenged to explain why I feel my theory is more plausible, but aggressive statements such as, "You have perfect knowledge of this? I’d love to see the docs" are unnecessary, particularly when you have no documentation for your argument, either....I dunno, maybe a defensible chance to show off juuuuust how much fiddling you've done with old code, to the point that it gives you psychic intuition, and I guess I'll hope you really enjoyed it, but... this is something else.
But I felt, based on my knowledge, that it was worth offering an alternative to your theory.
There's no need to get nasty here. Your theory is, objectively, at least as much based on "psychic intuition" as mine.
I suspect your opinion here might be due to not being conversant with assembly: if you go do some 8080, 6800 and 6809 programming I think you'll readily see why a translation from 8080 makes a lot more sense than a translation from 6800. (The key here is that the 6800 has only one index register, whereas the 8080 and 6809 have, effectively, multiple index registers; what this means will become obvious if you do some programming on each of these three systems.)
But at any rate, if you think your opinion is more supportable, do feel free to go do some research and come out with some actual support for it, rather than just sniping at me with, "That doesn't sound plausible to me." I've already given you a repo that contains actual MS source and partial disassemblies for five different versions of MS-BASIC, and links to three more, plus links to considerable ancillary information. So far you've given us an MS-BASIC catalogue and an MC-10 BASIC disassembly that shows a lot of similarity to my Altair 680 BASIC disassembly. (And thanks for that, of course.)
Neither I nor (as far as I can tell) you have the source code or a disassembly of that two-year newer version of BASIC-80, so I don't see how either of us could have noticed how close or far it was.In post #37, where said links were dropped, you just pointed out the command tables are different and then basically asserted that meant they were from entire different ports of a source tree... without apparently noticing that the 6809 version wasn't any closer to the newer version of BASIC-80 you claim it must be from.
And I will answer honestly: yes.I honestly have to ask you: Did you actually spend any time yourself comparing that MC-10 disassembly to Color BASIC?
Yes. That's exactly what you'd expect, since all versions of MS-BASIC, for all CPUs I've seen, have extensive swathes of code that are very much alike. You can see this between Altair BASIC-80 and Altair BASIC-68, and even the early 6502 BASIC. That's why the 6809 and 6800 versions having similar code is very much not any real indication that the 6809 version was via a port of the 6800 version rather than the 8080 version.By happenstance there's a link in the top of that disassembly, to this PDF of "Color BASIC Unraveled", and... I get it, I'm a complete moron, but just sitting here poking through the extensively annotated disassembly of the 6809 version in that PDF and comparing to the 6800 version (which used it as a source to help get the labels reasonably consistent, so it's *way* easier than that awful repo of the Dragon 64 code), and... it looks very much to me like there are extensive swathes of code that are very much alike.
I am saying it seems more likely than not. What I'm not clear is why you are dying on the hill that it must be a port of the 6800 source. Are you convinced that would be easier somehow? I, as someone who's written software for all of the processors involved, believe that it would be more difficult. You of course, are free to believe otherwise, based on whatever you know about these processors and what you've read of the source and disassemblies for various MS-BASICS.This is the hill you're dying on to make the claim that this is a separate port of the 8080 source?
No. I just wanted to point out that there's an alternative, plausible belief to your clearly very firm belief that the 6809 was ported from the 6800, rather than the 8080. I am not clear on why you are so insistent that this is absolutely impossible. (Perhaps you don't believe that it's absolutely or nearly impossible, but that's the way you're coming across.)Or did you just make that whole claim up to be argumentative and blow smoke?
Well, I think it started with your statement, "...but Motorola pushed *source* compatibility between the two as a feature (as Intel did with the 8086/8080), so… do you really think the two code bases would be completely unrelated?" which I (perhaps incorrectly) interpreted as making a claim about the history of the 6809 codebase that I find somewhat dubious.There was zero need to invoke all these weird assertions about the histories of the codebases, at all....