Locomotive BASIC 1.1 on the Amstrad CPC6128 had a fairly decent FILL command. It wasn't the fastest, but then what FILL routines in BASIC were back then? It would do a decent job of filling complex shapes though.
This was one of the differences between 1.1 and the BASIC 1.0 supplied with the CPC464.
By the time mice wheels became widely available (starting with the Microsoft IntelliMouse; the Genius EasyScroll was earlier, but we can ignore that here), support for DOS was a secondary concern, and the “standard” DOS drivers and tools never supported them. As a result, there are limited avenues for wheel support in DOS itself, and DOS emulation ...
Woz was exceptional, but not the only one with this (moderate level of ?) skill in machine language. Lots of teens/kids learned to poke (from Basic) absolute hex machine code into memory on several models of personal computers (not just the Apple I/II). I knew some who could speak out-loud a small subroutine in hex for the 6502, no assembly language or ...
One thing is certain: Steve Wozniak was very good at hand assembling 6502. Instead of writing assembler mnemonics he could simply type in the necessary hex code.
I realize this isn't a proper answer but this anecdote is simply too good to relegate to a comment. It comes from Bill Atkinson remarking on Steve doing some assembler work:
The other thing that ...
As explained on Steven Weyhrich's great and authoritative Apple II History Site, Wozniak simply sat down and wrote his Integer-BASIC (*1) on paper, while assembling it at the same time by hand. In his own words:
I had no assembler, that was another thing. To use an assembler, they figured that somebody was going to buy this processor to use for a ...
Commodore BASIC has a quirk that it will run a FOR loop at least once. This is what allows your t variable to update at least once, allowing the loop to be valid.
Raffzahn's explained how it works, but according to BASIC standards, it shouldn't. The ANSI/NBS Special Publication 500-70/1 test suite from 1980 go into great detail about how BASIC should behave. ...
From what I can gather, the code should be understood as if it read
30 ? "start " t0
40 t=t0+t*60 : t1=t
70 t=t+1 : if t<=t1 then goto 50
80 ? "end "t
where t1 is a hidden variable, invisible to your code. In other words, FOR i = a TO b has neither of the two semantics you hypothesised: ...
FOR T=<target value> TO T uses T as a temporary variable to store the target value inside the FOR stack frame, where it is used later to compare with the actual value of T after an iteration. This eliminates the need for a second, helper variable. Works whenever T is/can be set within the loop.
The Long Read:
I imitated the code in CBM prg ...
40 for t=t0+t*60 to t
... will repeat at least once and then for as long as t0+t*60 (i.e. start time + duration) does not equal t.
captures t0+t*60 (the desired end time) such that t can be reused; and
after the first iteration, continuously tests ti (which has been stored to t) against the desired end time.
i.e. Commodore's implementation of for ...
Well, this is to be expected; the BIOS Data Area has only four slots for I/O addresses of serial ports, with slots for parallel ports immediately following. In the MEMORY.LST file from Ralf Brown’s, we can find the following entries0:
MEM 0040h:0000h - BASE I/O ADDRESS OF FIRST SERIAL I/O PORT
MEM 0040h:0002h - BASE I/O ADDRESS OF SECOND SERIAL I/O PORT
The BIOS list only contains addresses of up to four standard 8250-type COM ports found at boot at the standard addresses.
It will not contain more than four ports, it will not contain any non-8250 type COM ports, and COM ports at non-standard addresses, such as PCIE COM ports, and USB COM ports which don't have an IO address to begin with. It will not ...
The BIOS data area only has room for addresses of four com ports, at 40:00 through 40:07.
More serial ports would be driven by some device driver with some other place to store the address(es) and IRQ(s).