Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


BruceMcF last won the day on February 20

BruceMcF had the most liked content!

Community Reputation

294 Excellent


Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. That could be. I recall that at around the time Pournelle referred to WYSIWYG as something like WYSIAYG, "What You See Is All You Get", and contrasted it with something like DWITY, "Do What I Tell You".
  2. My dad bought mine for me when it was it's "full price" of $100 ... I went ahead and got the RAM expansion pack. My experience with that plug in RAM expansion pack made "64K RAM built in" an even bigger selling point for the C64. My biggest "never underestimate the incompetence of a 15 year old" moment happened in my mid-20s, when I got back from the Peace Corps and bought a C128D, and when I went to plug in my printer interface, I plugged the power tap from the datasette port in upside down. Now, there WAS a notch, so a datassette power tap COULD be keyed to make it impossible to plug in the wrong way, but the parallel port interface I had didn't bother to do that and relied on user competence instead. Needless to say, I fried the 8510 processor in the unit, which is tied directly to the datasette port. That is, indeed, "why" I brought a C64 to grad school rather than a C128D ... the C128D had been turned into a large and expensive monitor stand.
  3. Mine had working cassette storage, so maybe you just had one with a flaky chip somewhere. But between the constant crashing when the 16K RAM was connected, the membrane keyboard and the speed of operating which was AFAIU due to using the CPU as the display chip so it only executed programs during the vertical blank, it was more than anything an explanation for why I opted for a C64 system when I had the chance.
  4. Yeah, just spitballing. One thing about operand and operator stack approaches on a 65c02 is the hardware stack can be used for the operator stack, so you push (address-1) subroutine return vectors onto the operator stack and normal operator execution routine end with RTS to execute the next operation.
  5. If that Write was the same as the WRITE for CP/M, it was programmed with heavy user input from Jerry Pournelle, who wrote a long running computer user column in Byte magazine but whose primary job was being a science fiction writer ... the CP/M WRITE (Writer's Really Incredible Text Editor) was known for productivity at not getting in your way and letting you write. My first use of WordPerfect was on DOS machines in my Econ department's grad student lab in the early 90's ... but when I ran out of time as a teaching assistant/associate at the department, I landed a class at a two year community college in Knoxville, whose Econ course was, unsurprisingly, basically the same as UT's Econ course, since many of their students were aiming to transfer to UT after they got their Associate degree. There was a gang office and at the back was a terminal to a DEC minicomputer ... and we wrote our tests, quizzes and handouts on WordPerfect on the time share minicomputer system. But the main word processor I used for my first couple of years at grad school was my C64 with a daisywheel printer, 1571 and 1581 disk drives and a compact color TV, writing on TheWriteStuff from Busy Bee software. It had all the formatting I needed to turn out a research essay, and a straightforward nextfile function for papers that were too big to fit into the C64's RAM, a good preview function, and I turned in papers that looked much nicer than the papers done by my classmates, written on a PC and printed on a dot matrix printer.
  6. This can be interesting for the FM channels as well. One reason the DX21 was preferred over the DX27 for bass ... despite both being based on the YM2151 and both sharing the well reputed #01 analog bass patch ... is that it is bi-timbral, so you can have two related but distinct bass patches tuned a couple of cents from each other played as a single instrument and get a bass with a lot of complex harmonics to fill up the bottom of the soundscape. Four FM channels organized as two pairs of instruments for a bi-phonic, bi-timbrel bass patch could be really interesting.
  7. One way to simplify the compilation is to simplify the grammer. For example, suppose that ALL infix operations are evaluated left to right, and without parentheses all right hand side operands are evaluated first. So: 3+5*8-4/3 means: 3+(5*(8-(4/3))). And suppose () are supported. Then you simply parse between operations and operands, push operands on an operand stack, push operations on an operations stack, and when you get to the end of the line you execute the operations stack. ")" goes ahead and executes the current operations stack, and "(" on the operations stack stops executing the operations stack and goes back to executing the bytecode. So in practice, people get used to using () a lot. Now function or procedure calls are just prefix operations, a "proc(" pushes the ( onto the operation stack then the proc, and in proc(x,y,z) the comma is just a separator: (x,y,z) gets executed as ( ... x y z ) on the operand stack and "proc" uses the top two entries on the operand stack. ")" doesn't care whether it is closing an expression or a procedure call, it just executes the current operation stack.
  8. Sadly, someone recently trademarked Chickenlips in the electronic hardware/software field, so I don't think he can do that.
  9. Another alternative is to support an unused and available meta key as a "sticky control", so the sequence <meta><char> has the effect of <control>+<char>. That is also handy if porting the editor later to headless operation where getting the meta key over the serial port is trickier.
  10. Now THAT seems like it makes sense, even to a software hand ... if it happened to be an HCMOS crystal oscillator circuit in the can, fry the inverters, which are the source of the VCC input, and seeing the crystal oscillation instead of a square wave seems likely, since the inverters are what squares up the wave. But anyway, that's second timing is what the August 2018 datasheet says on page 26 ... the fourth line in the timing chart is the write data ... it begins with the data written the previous cycle, which should be valid tDHW after the start of the new cycle with the PHI2=0 transition ... it then crosses over since it is indeterminate until it crosses over again tMDS after the PHI2=1 transition for the rising clock cycle. So the valid write data is from tMDS (max 25ns[+]) after the rising clock cycle until tDHW (min 10ns) after the falling clock cycle. With a glue logic latch, data can be latched on the fall of the clock after the part is selected, as long as the latch is effective within 10ns of the falling clock. _________________________________ [+ At +5VCC, 40ns at +3.0/3.3VCC, 70ns at +2.8VCC, 140ns at +1.8VCC.]
  11. There surely is no way to include the C64 backpointer to include a garbage flag, given that there is no C64 backpointer. He might have found a corner case bug in the 3.5/7.0 GC which is not present in the C64 GC, so it still bears looking at if someone with ca65 assembler chops has a look at the differences in variable creation and garbage collection in the C64 GC and C128 basic code on the github. I'm in the middle of my last semester in Beijing and looking for work in the Fall at the same time, so if I didn't have time mid-semester to transition from acme to ca65 last semester, I definitely don't have the time this semester.
  12. Thanks for that ... it still should be the 128 version of the GC with the bug fixed for the bug fix If you are replacing the brake shoe in your car because the design of the old one was faulty, but the brake line design is also faulty, you'd want to replace that at the same time.
  13. Note that in some countries there is not really such a thing as a release into the public domain of code still in its copyright period ... AFAIU there are some European countries where were a creator could say, "never mind" and the code would be under copyright again ... and that is what is handy about the Creative Commons CC0 license ... it gives a close equivalent to a release into the public domain even in countries where releasing something into the public domain isn't supported. https://creativecommons.org/share-your-work/public-domain/cc0/
  14. This is stack based ... it's just a slightly different style of converting infix notation to postfix execution, which makes it easier for the editor to line up the text of the line with the crunched representation. All disclaimers apply, not arguing its the perfect solution, yadda, yadda, yadda. It's similar to some systems written in Forth for executing infix arithmetic, and what the cruncher is doing is rearranging them to get the precedence correct when the operation stack is executed. Then ")" is the same as end of line, "$FF" above, while "(" is the "execute tokens" routine, so maybe if you had: 10 PRINT 100+(300*200)/(10*5) You get the crunched line: 99 (PRINT token, formatting not needed in runnable code) 01 64 (literal byte value 100) AA (add token) FE (execute tokens token) 02 2C 01 (literal word value 300) AC (multiply token) 01 C8 (literal byte value 200) FF (execute operations token) AD (divide token) FE (execute tokens token) 01 0A (literal byte value 10) AC (multiply token) 01 05 (literal byte value 5) FF (execute operations token) FF (execute operations token) Maybe have a JMP (table,X) executor, with 256 codes available if you have two pages of jump vectors: NextToken: INY FirstToken: LDA (line),Y : ASL : TAX : BCS + : JMP (table1,X) : + JMP (table2,X) If the operations stack is the hardware stack, then return address vectors are pushed for the tokens and "execute operations" is just RTS, with most operations also ending in an RTS ... with exceptions like the "interpret next line" routine that lives on the bottom of the operations stack and "execute tokens", where the token action is to push the address of NextToken-1, and of course branching routines.
  15. Yes, AFAIU, it is in CBM Basic v3.5 ... but my only other Commodore systems were 128's, so v7 is the other Commodore Basic I used. Its garbage collector doesn't bog down nearly as often or nearly as badly.
  • Create New...

Important Information

Please review our Terms of Use