This file contains, in reverse chronological order, the list of changes for
each of the releases that followed the break away from Git. For changes prior
to that, download the git archive from
http://collapseos.org and use "git log".
Many of these releases break bootstrapping. This means that if you begin with
an up-to-date Collapse OS on a system that self-hosts and simply update your
blkfs media to that of the new release, you won't be able to build a new system.
Most of the time, the reason for it is trivial and all you need to do is to
sprinkle some "shim words" around. Sometimes, it's not trivial.
All of this to say: most of the time, the easiest way to deploy an updated
Collapse OS after a new release is to build the binary from a POSIX machine.
*** 2022-02-21
* appleiie: Implement GRID.
* Make BLKSUB variables separate from SYSVARS.
* Reduce SYSVARS size to $60 bytes.
* core: add 0>= and [C]?.
* ed+ve: make find command faster with [C]?
* Add a new concept: Word tables. See doc/wordtbl.
* ve: use word table to avoid littering the dict with command words and thus
avoid conflicts with other apps of this type.
* Restrict DUMP ASCII view to the $20-$7e range. On the Apple IIe, letting chars
over $80 be displayed as is results in some control characters spouting out,
messing everything. In ME too.
* blkfs: defragment the B0-B199 range.
* Move nC, from B001 to core.
* 8086A: add [m] [M] [r] [x] modrms. See doc/asm/8086.
* 8086A: add MOV[ALm,AXm,mAL,mAX].
* 8086A: add ADC.
* 8086A: add []i form to ADD ADC SUB CMP.
* Remove the HAL as we know it. It still exists, but has a different purpose.
See doc/asm.
* Implement all native words that don't absolutely need to be native, as ?:
words, in pure forth. This allows new ports to be much, much more barebone and
only implement "speedup" words as needed.
* cvm: remove all native words that aren't absolutely needed. This is, of
course, obscenely inefficient, but because the CVM runs on obscenely fast
CPUs, slowdown is barely noticeable. This allows the CVM to properly test
forth implementation of optional native words.
* Remove anonymous words from kernel (they're still in xcomp). This was added as
a companion to the HAL, but they don't make sense any more.
* Remove CDOES>. It only makes sense with the HAL.
*** 2022-02-16
* appleiie: Add BLK subsystem using ProDOS' MLI.
* appleiie: Move to $2000 and allow creation of disks that boot directly to COS.
* Remove B register. Its benefits weren't worth its weight. The A register saves
a lot of stack juggling, but the B register, although somewhat convenient,
doesn't save as much.
* Add AC@ and AC! words.
* z80: assign IY to A register role.
* ed: fix P cmd which didn't properly clear IBUF.
* Rearrange xcomp/asm/hal so that code is better decoupled and simpler. This
allows the removal of SYSVARS BIN( and ORG from the kernel, which were only
there as clutches. See doc/cross and doc/asm/intro.
* sms: simplify xcomp units.
* pcat: implement NEWLN. (binarycat)
* ve: make selected line in status bar 1-based. (binarycat)
*** 2022-01-28
- appleiie: liftoff! Still rough around the edges, but we have prompt, obvious
words work, we can define new words. See doc/hw/6502/appleiie.
- tools: add "csum".
- add anonymous words to kernel, not only xcomp. See doc/usage.
- Remove CODE[ CODE] and (c), which have no advantage over CODE~.
- hal: add JMP(i) instruction. Makes *ALIAS a lot more straightforward on many
arches, most of all on 6502.
- Make EXECUTE and NOT into arch-specific words.
- hal: remove >JMP and Z>! which aren't used anymore.
- z80: simplify FIND.
- doc: clarify doc/bootstrap.
*** 2022-01-15
- doc: improve drivers and subsystems documentation.
- doc: add doc/design.
- Add WORD! which is a remix of the old W"". See doc/dict.
- Add WAITW. See doc/dict.
- xcomp: add ?: and ?CODE to simplify optional word definitions.
- xcomp: make '? mean the same things as in core. This was getting confusing.
- xcomp: add :~. See doc/cross.
- 6809: add Dragon 32 keyboard layout, but the right one this time...
(Tormod Volden)
- z80: Take advantage of ?: and ?CODE for some juicy overrides.
- z80: Optimize HAL C>! word.
- Fix bug in FORGET which I had introduced with a dumb "optimization".
- avr: add "Arduino blinker" program.
- avr: add "Arduino SPI spitter" program. see doc/hw/avr/spispit.
- avr: add STS, LDS, LPM to AVRA.
- doc: add "SPI hack through game port" to Apple IIe docs.
*** 2021-12-17
- VE: add WIPE shortcut. See doc/ed.
- VE: Replace 't' command with a more powerful bookmark system. See doc/ed.
- Fix broken z80mbc2 xcomp.
- Deduplicate INBUF code.
- Simplify WORD.
- Replace ESCAPE! hack with a proper \S.
- z80: extend the "stable" boot code to $66 with a hardcoded RETN in there. It's
not always the right thing to do, but in many case, might avoid tricky
debugging sessions.
- cvm: fix broken RXTX mode.
- Add RX/TX subsystem. See doc/rxtx.
- Rename and move "Remote Shell" from B150 to "RX/TX Tools" in B010.
See doc/rxtx.
- tools: add blksrv. See doc/blksrv
- Add blksrv client to RX/TX Tools.
- 6809: add Dragon 32 keyboard layout. (Tormod Volden)
*** 2021-11-26
- Fix broken CoCo2 port.
- tools/upload: verify written data instead of received data. This way, if the
EEPROM acts weird, we know.
*** 2021-11-20
- Continue progress with Apple IIe port. Still a WIP.
- Add 6502 emulator. See doc/emul.
- Add 6809 disassembler. See doc/dis.
- Bring the 6809 emulator back from extras and into main blkfs and make it work
with new kernel. Emulators within Collapse OS are useful, not "extras". This
ends the "extras" section.
- Begin littering the blkfs with "Virgil's workspace" sections. See doc/intro.
- tools: make blkdown spit to stdout.
- Fix PS leak in LNLEN.
- ED: Fix awkward typing and printing. (from binarycat)
- ED: rename i to I, now that I isn't in core anymore.
- 8086: make (key?) use cmd 1 of int16h for non-blocking polling. Also, fix bug
where some keystrokes would break the system.
*** 2021-10-30
- I'm back to "Building COS from COS" mode, like with 6809. This time, I'll
build better tooling to make this type of work easier.
- Continue progress with Apple IIe port. Still a WIP.
- HAL: Add >(i) (i)+ and (i)-.
- Use new HAL ops to implement A register words in HAL.
- Add B register.
- Back down on using A register in low-level words. Too many conflicts.
- Rename I to R@.
- Add R~.
- Add NEXT. See doc/usage.txt
- Replace all DO..LOOP with BEGIN..NEXT and remove DO..LOOP.
- Remove 2R>, UNLOOP.
- Change LEAVE so it exits BEGIN..NEXT instead of DO..LOOP.
- Significantly simplify PARSE with the use of A and B registers.
- ED: fix broken _type.
- ME: fix bug where ME would always halt after the first keystroke the second
time it's invoked.
- cvm: add RXTX make option to allow debugging of RX<? and TX>.
- Brought back tests in the core code. With the arch split, blkfs feels less
crowded and it makes more sense to have them close.
- Straigtened out makefiles w.r.t. GNU make vs BSD make.
- trs804p: add disk management system. See doc/hw/z80/trs804p.txt
- 6502: add disassembler.
- Add pager to B124.
*** 2021-10-07
- Continue progress with Apple IIe port. Still a WIP.
- Add INLINE. See doc/usage.txt.
- Rework the HAL significantly. See doc/hal.txt.
- Simplify DOER/DOES> and add CDOES>, a way to have does words with native
code. See doc/usage.txt
- Remove ENTRY which became the same as CODE with DTC.
- Change ALIAS semantics and make it read-only. See doc/usage.txt
- Make *ALIAS and *VALUE read-only and only available to xcomp. This means
removing *TO and [*TO].
- Add layer of indirection in VALUE. lblpush was replaced with lblval.
- z80: move cell routine to RST, making CREATE more compact.
- Bring CONSTANT and CONSTS back
- Bring +! back.
- Make VALUES always initialize to 0.
- Add A register. See doc/usage.txt
*** 2021-09-24
- Fix broken CODE[ ]CODE for any arch with JROFF != 0, that is all but CVM.
- z80: fix scrolling bug in dan SBC drivers. (Daniel Marks)
- Add 6502 assembler.
- Begin a port of Collapse OS for the Apple IIe. This is a WIP.
- Add doc/arch.txt to explain clearly how to do cross-arch deployments.
- Move assemblers to arch-specific blk.fs units.
- Move AVR assembler and related code into its own "portless" arch.
- sms: have the Makefile automatically build the AVR firwmware for PS/2.
*** 2021-09-17
- HAL: add CALLi and (i)>w.
- Simplify DOES> logic with the addition of DOER. See doc/primer.txt.
- Make Collapse OS into a Direct Threaded Code forth. See doc/impl.txt.
- Remove unused I' and J.
- Move MOVE- from core to B120.
- Move PAD to SYSVARS.
- Remove QUIT jump from stable ABI. With DTC, we can easily call it directly.
- Add Dan SBC. See doc/hw/z80/dan.txt. (Daniel Marks)
- trs804p: fix broken RX<?.
- trs804p: improve reliability of floppy driver.
- Extract arch-specific code to separate blk.fs files in /arch/*.
See doc/blk.txt
- Fix broken BS handling in RDLN.
- Extract LNTYPE from RDLN.
- VE: use LNTYPE to make BS work again during typing.
*** 2021-08-31
- Introduce a new concept: the Harmonized Assembly Layer. See doc/hal.txt
- Port the CVM to HAL
- Make the z80 port into a HAL
- Make the 8086 port into a HAL
- Make the 6809 port into a HAL
- Improve doc/boostrap.txt. More detailed, clearer, mentions HAL.
- Fix broken PS dump in .S
- cvm: fix broken xcomp. It wasn't apparent because serial.bin wasn't refreshed
before release and wasn't current.
- z80: Fix broken SIOB<? (Daniel Marks)
- Make STACK? and .S "stack implementation agnostic", that is, don't require
random access to stack memory. 'S 'R S0 R0 disappeared and were replaced by
SCNT and RCNT. The 4 byte buffer over PS doesn't exist anymore.
- 8086: Assign BX register to the "PS TOS" role.
- sdc: make subsystem compatible with older SD cards. (Daniel Marks)
- Fix off-by-one bug in _bchk. (Daniel Marks)
- Overhauled documentation which was getting out of date in quite a few places.
*** 2021-08-13
- trs804p: fix broken recv.fs and boot.fs.
- trs804p: improve self-hosting docs.
- pcat: fix broken mbr.fs and xcomp.fs. (Jakob Krisch)
- tools: fix broken blkup and upload.
- Remove chkPS, macro. We now check for stack underflow "after the fact".
See doc/impl.txt.
- Update CONTRIBUTING to better reflect my current stance.
- Remove INIT from Stable ABI. The name is now hardcoded to "INIT" and called
as such directly by BOOT.
- Add CURRENT field to Stable ABI and remove the "hook" word generation from
XWRAP.
- Move HERESTART logic to xcomp. BOOT now unconditionally initializes HERE from
the LATEST field in Stable ABI.
- at28: remove AT28$ which did C! and ! overrides. Making MOVE native made this
scheme less useful. We let the user make the C!/! overrides herself.
- Remove unused W" system.
- Remove redundant (s) word and replace it, in LIT", with a mix of (br), (b) and
(n).
- z80: fix SDC timing error after a write. (Stefan Paul Noack)
- z80: Use BC register as the Top Of Stack element. See new "Register roles"
section in doc/impl.txt
- add CODE[ word for native code inlining. See doc/asm/intro.txt
- Add missing doc/code/6809.txt document.
- Add CRC16[] in B120.
- Add BLK>MEM in B121.
*** 2021-08-02
- New app: the Memory Editor. See doc/me.txt
- Change FIND/PARSE order during INTERPRET and :. See doc/usage.txt
- VALUES can now contain regular (single) words, not only literals.
- Remove unused BIN+.
- Strings are now passed "unpacked" (sa sl) rather than encoded. This allows a
simplification of the word-reading routine.
- Make FILL, MOVE and MOVE- into native words. They are often performance
bottlenecks and those are the kind of operations that often have specialized
CPU ops (in z80 and 8086 at least).
- cvm: implement grid's NEWLN, allowing scrolling.
- Make hex literal parsing case insensitive.
- Add word INDEX. See doc/blk.txt
- Begin improving code with INDEX-friendly first lines in each block.
- Add "Application loaders" to BLK subsystem. See doc/blk.txt
- z80/sms: fix a couple of broken xcomp units.
- Remove unused LOAD+, LOADR+.
- Remove the ability to nest LOADs, simplifying code.
- Use VALUE instead of VARIABLE for assembler labels.
- Remove unused VARIABLE. We always use either VALUE or CREATE instead.
- grid: remove unused XYMODE. It was only necessary when VE used AT-XY and EMIT,
but now that it mostly uses CELL!, this hack became spurious.
- blk: make BLKDTY into a *VALUE.
- VE: use CELLS! instead of CELL! where appropriate.
*** 2021-07-26
- trs804p: implement fully native drivers and bootloader!
- Make BLK into a separate subsystem and remove indirection
layer in BLK@* and BLK!*. See doc/blk.txt.
- Remove "0b" literals.
- Change "0x" literal prefix to the more traditional (and simple to parse) "$".
- Rename (parse) to PARSE.
- VE: change cmd prefix from $ to % to avoid clashing with literals.
- z80: simplify and optimize FIND implementation.
- Make dict previous entry offsets absolute instead of relative.
- Move HERE and CURRENT initialization, which was previously arch-specific code
to arch-independant Forth code.
- Remove EMPTY and make BOOT user-callable.
- Add word "MEM>BLK" in B121.
- Add word "context" in B122. See doc/usage.txt.
- xcomp: improve error handling and documentation (doc/cross.txt).
- VE: Replace many AT-XY calls with CELL!, making screen refreshes faster and
less noisy.
- grid: Change NEWLN signature, giving more flexibility to video drivers in
handling the event. See doc/grid.txt.
- grid: Add CELLS! optional word, which can greatly speed up screen refreshes.
- Remove RCS metadata which doesn't have much advantage over comparing tarball
snapshots.
- ed+VE: Make IBUF and FBUF into counted strings, making their manipulation more
straightforward.
- Redefine "empty char cell" as $20 rather than $00. Affects WIPE and IBUF/FBUF.
- VE: display all characters as-is rather than spitting chars lower than $20 as
$20. Previously, $00 chars all over the place would make the screen
unreadable, but now it works.
- blkpack: fill with $20 instead of zeroes.
- VE: Stop using RDLN for input. It wasn't working well with IBUF/FBUF as
counted strings.
- Remove KEY> putback buffer which isn't needed anymore. With hindsight,
piggybacking on RDLN from VE wasn't such a clever idea after all. It
introduced significant "side-complexity".
- emul: remove TRS-80 4P emulator. It wasn't emulating at the proper level any
more and I didn't want to write another.
*** 2021-06-16
- Change word type numbering scheme. It's now simpler to decode.
See doc/impl.txt
- Rename CONSTANT to VALUE, *! to VAL!, **! to *VAL!, CONSTS to VALUES.
- Rename :* to ALIAS, :** to *ALIAS.
- Add *VALUE, TO, *TO, [TO] and [*TO]. See doc/usage.txt
- Make CURRENT, HERE, IN(, IN> and BLK> into *VALUE.
- Add KEY> and NL values to avoid SYSVARS offset hardcoding.
- Make SYSVARS more compact.
- Remove unused +!, EOT? and RAM+.
- Simplify VE.
- asm: make ORG and BIN( into VALUEs.
- cvm: make code follow C89 rather than C99, remove usage of stdbool and stdint.
- Re-add 'S and S0, add 'R, R0 and .S
- Remove overflow checks. See doc/impl.txt for rationale.
- Simplify EOT handling in WORD and document EOT quirk in initialization
sequence better. See doc/impl.txt
- Move AVR firmware from doc/hw/z80/sms/code/smsps2ctl.fs to the blkfs. Firmware
for microcontrollers of supported hardware should be part of the OS itself.
- Remove |L and rename |M to L|M.
- Add the "Useful little words" section at B120, starting with nC,.
- trs804p: add support for double-density disks.
- Replace initialization string with initialization wordref in stable ABI.
*** 2021-05-15
- Add native >>, <<, >>8, <<8 words.
- Make |L, |M, RSHIFT and LSHIFT into regular Forth words.
- Rename (entry) to ENTRY.
- Add PAD and have it replace WORDBUF in SYSVARS.
- The 6809 emulator is now usable.
- Little optimizations sprinkled around.
- xcomp: remove a little cruft.
- Stop using null char termination as buffer bound in RDLN. We now use the whole
buffer for typed contents.
- Make LOAD line-based.
- Add line comments with "\".
- Make BLK buffer allocated at compile time.
- Add CONSTS word.
- Re-add tests in extras. This time, they can conveniently be ran from a
"native" Collapse OS machine (rather than needing POSIX), which makes them
more interesting.
- Tidy up 8086 code and improve docs.
- Improve asm docs.
- z80 asm: remove IX- and IY-.
- Remove CARRY? support for *. Unused yet and too complex to implement on 6809.
- 8086: implement CARRY?.
- 6809: implement CARRY?.
- Add RANGE and SRANGE, making loops over memory simpler.
- Simplify literal parsing.
*** 2021-04-21
- cvm: rename "forth" to "cos-grid" and add new "cos-serial" binary.
- z80 asm: add CALLc op.
- z80 asm: Add LDHL(HL), and LDBC(HL), macros.
- z80: use DE instead of BC to store IP. This opens the door to interesting
optimizations. I took inspiration from Brad Rodriguez's CamelForth for
this. I'm not planning, however, on having an in-register TOS like Brad
does. It looks real neat, but Brad doesn't check for overflow/underflow
like I do and I'm thinking I'd mess things up with this kind of scheme.
- z80: optimize next, exec, (br), (n), EXIT, LSHIFT, RSHIFT for speed.
- z80: minimize overflow checks through counter system.
- z80: IY register, which was previously unused, is now reserved for pointing to
SYSVARS.
- Make 2DUP, 2DROP, > into regular Forth words. Not worth keeping as native.
- Add CARRY? mechanism. See usage.txt. Not done for 8086 and 6809 yet.
- In folder extras/, there's a WIP 6809 emulator written in Forth for Collapse
OS. This should make Collapse OS a much cozier development environment.
*** 2021-04-03
- xcomp: add XWRAP".
- asm: remove BREAK,. Too complex and hackish for what it's worth.
- Remove barely used word IMMED?
- 8086 asm: add CMPri, CMPxi, and CMPxI,
- 8086: inline chkPS, code and make more compact.
- z80: make chkPS, parametrizable and inlined.
- z80: optimize lblexec for speed
- 6809 asm: fix broken [] addressing mode.
- trs804p: fix broken emulator.
- cvm: make oflw/uflw checks behave like other ports. It previously cheated,
making CVM behavior slightly different.
- Check for overflow less often. Previously, we would check at every "next"
call. Now, we check upon entering a compiled word and at the end of any
native word with a "positive" PS balance.
- Fix PC/AT MBR for some machines. (Jakob Krisch)
- VE: refactor a little bit.
*** 2021-03-20
- Complete the 6809/CoCo2 port!
- Handle SHIFT in (key?)
- Implement the Grid protocol
- Implement stack overflow/underflow detection
- Implement QUIT and ABORT
- Add doc/hw/6809/coco2.txt
- This makes Collapse OS run properly on the CoCo2. No BLK yet, but otherwise
fully functional. Keyboard debouncing is still a bit shaky, but it doesn't
make the system unusable.
- Big blkfs reshuffling. The idea was to make stuff that belong together con-
tiguous. Also, I brought back arch-specific device drivers into the main
blkfs space. When I created the arch overlay system, I hadn't yet started
offloading docs and code comments to the doc/ folder. Now that it's done,
arch-specific code isn't as heavy as it used to be, so putting everything
under the same blkfs makes sense again. See doc/usage.txt
- Remove PICK: Too complex for what it's worth.
- Remove 'S and S0: When I began, I thought I'd play with PS a lot through
those, but it turns out I never needed them.
- trs80-4p: Allow BREAKing out of I/O induced infinite loops.
- 6809 asm: detect 8-bit branching overflow.
*** 2021-03-03
- 6809 port: we have prompt! a barely usable one, but still feels good!
- Fix bugs in 6809 assembler
- Implement (imperfectly) the XMODEM protocol in the Remote Shell app.
- tools: make blkup slightly faster.
- xcomp: re-add X' which I though wasn't used, but was.
- Remove automated testing. Most of the problems popping up in Collapse OS
development are hardware-related. Moreover, now that I use Collapse OS
to develop Collapse OS, "userland" is pretty well tested that way. This
removal allows me to remove tooling that is annoying to keep around.
- Fix endian issues in core words.
- Remove unused WIPED? from core.
- cvm: make WCOLS/WLINES adjustments easier. only one place to adjust now.
- cvm: simplify the staging program.
- doc: add code subsection.
- Remove unused >< and >=0 and simplify =><=.
- Make z80 boot code more compact
*** 2021-02-19
- Make good progress on 6809 port!
- Add W"" literal, allowing to "compile" WORD-using words. For example,
": foo W" hello" CREATE ;" becomes possible.
- Remove "~C!" mechanism. It was unnecessary and slow. Made the AT28 driver,
the reason for this system, use simple C! and ! overrides.
- Remove 0, 1 and -1 native words and replace them with (b). It makes porting
simpler and makes binaries slightly slimmer overall.
- Make S0 into a Forth word.
- Add []= and make S= into a Forth word.
- Remove CMP and make =, < and > native.
- Improve 6809 assembler.
- Make xcomp tools endian-aware.
- Replace native _find with FIND. We don't need to find words in alternate dicts
anymore now that we have XFIND.
- DOES>: swap PFA and jump address so that more than 2b can be attached it.
As a bonus, fix DOES> on 8086. It was simply broken.
- Improve documentation, especially impl.txt which had a lot of out-of-date
and incomplete information.
*** 2021-02-11
- Add 6809 port WIP! Well, more of a placeholder... or a sneeze, really.
But it's a first step, and it actually runs on actual hardware and was
developed and deployed from Collapse OS itself.
- Rename HERE to H and H@ to HERE. I had it all wrong...
- Make QUIT and ABORT into native words.
- Remove ROLL which wasn't used anywhere.
- Add |T T! and T, words to assemblers. See "Endian-ness" in doc/cross.txt.
- Add "QUIT jump" to stable ABI.
- Fix endian-ness bugs in 6809 assembler
- Add "LIVETGT" helper to assemblers. See "Live Targets" in doc/asm/intro.txt.
- Improve Remote Shell reliability. It's now reliable enough for "rupload" to
be used for real stuff (for example, writing 6809 binaries to EEPROM!)
- tools: make blkunpack right-trim whitespaces.
- trs80-4p can now use both floppy drives.
- trs80-4p add WIP "native" keyboard driver in effort to remove dependency on
TRS-DOS.
- trs80-4p: improve RS-232 driver.
- Place Z80 drivers together in their own little zone in blkfs.
- Make font compilers more compact and fix a few glitches.
*** 2021-01-25
- Make Z80 and 8086 assemblers more compact
- Add 6809 assembler
- Create a new "asm" folder in doc, making it clearer.
- Add KEY> core word
- Fix PS leak in DUMP
- Improve VE
*** 2021-01-19
- Remove "breathing" in tools/. Now that we have proper RTS/CTS in place,
this mechanism is spurious.
- Improve VE.
- Remove C<? word.
- Improve LOAD.
- Remove CURRENT*.
- Improve Remote Shell and add "rupload".
- Allow using aliases in xcomp.
- Improve ACIA drivers in trs80 and rc2014.
- Add "constant" word type, making CONSTANT much faster and usable in cross-
compilation.
- Make Block Editor and Visual Editor a bit more compact in blkfs.
*** 2021-01-05
- Initial RCS-based release
- Remove all git-related files
- Transform .md files into plain text
- Add "make clean" command in every Makefile
- Add top-level "make clean" and "make dist"