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. *** 2023-04-27 * z80: rewrite assembler to remove global states, making it more macroable. Also make all instruction words lowercase and change semantics with regards to immediates and memory references. Also, removed the () syntactic sugar as it wasn't bringing much to the table. See doc/asm/z80. *** 2022-08-25 * Fix inaccuracies in documentation. *** 2022-05-09 * Fix broken font compiler. (Michael Schierl) *** 2022-05-08 * mspan: allow heterogenous media span. Allows medias to fit Collapse OS block organization better. See doc/mspan. * mspan: Replace DRVSWAP ('s' key) with DRVSEL (0-9). See doc/mspan. * trs804p: replace "homebrew" mspan with MSPANSUB implementation. * appleiie: adapt xcomp to MSPAN changes. * z80: rewrite assembler to remove ops suffixes. ops form is now deduced from preceding arguments. see doc/asm/z80. * z80: ajust boot code and drivers for new assembler style. * z80: add some syntactic sugar to the assembler. See doc/asm/z80. * Add <> to core. See doc/dict. * Bring MIN and MAX back to core. See doc/dict. * Change TO semantics. See doc/usage. * Remove [TO] and VAL! which aren't needed anymore. * Add string manipulation words to B4. * Move 'N and LN< SYSVARS around to make some space for '(wnf) and TO?. * xcomp: add CONSTS+ to allow for cleaner SYSVARS declarations. * All SYSVARS are declared at the same place, the first block of core. * Add "word not found" override. See doc/usage. * z80: use RST30 slot for lblval, making all VALUEs 2b more compact. * Re-remove VARIABLE. There are too few cases where it has better tradeoffs than VALUE. It makes more sense to use CREATE 2 ALLOT for those few cases. * ME: it was broken. fixed. * 6809D/6809E: fix breakage caused by core words changes. * 6809D: fix op mixup in GRPC/GRPD. * 6809D: rework so it's more stateful and thus more reusable by 6809E. * 6809E: simplify by relying more on 6809D. * 6809E: fix broken behavior of some indirect address modes. * 6502E: fix breakage caused by core words changes. * 6502E: spit op disassembly in verbose mode. Note: my Apple IIe is broken and I haven't repaired it yet. The change to lblval has been tested through Collapse OS' 6502 emulator, but not on a real machine. I hope I haven't broken it. *** 2022-04-11 * doc: add doc/grok. * doc: sprinkle around some clarifications and typo fixes. * pcat: fix broken NEWLN. (binarycat) * VE: add n and N commands. See doc/ed. * VE: make W stop 1 char further, making it more useful with copy/paste. * VE: remove B (b stays) for which I can't think of an actual use except cute symmetry. *** 2022-03-16 * 6502: optimize (next). * 6502: fix memory corruption bug in MOVE. * appleiie: implement grid scrolling. * VE: Add "C" command. See doc/ed. * xcomp: document PC2A. See doc/cross. * grid: Add STYPEC FILLC and CLRSCR. See doc/grid. * Remove CONSTANT, keeping only VALUE. CONSTANT still exists in xcomp. * Remove Stable ABI. Instead, we insert those forward values through labels at compile time. See doc/bootstrap. * Rename LIT" to S" (looks better). * xcomp: Add ~DOER. See doc/cross. * Add FMTD FMTx and FMTX. See doc/dict. * doc: merge primer.txt into usage.txt. Makes more sense this way. * Make JMPi! and CALLi! implementation optional for most ports. *** 2022-03-06 * appleiie: fix GRID cursor glitch. * New subsystem: MSPAN. See doc/mspan. * appleiie: implement MSPAN. * appleiie: Make GRID implementation faster. * 6502A: fix broken ELSE,. * 6502: properly sign-extend SCNT result. * 6502: make [C]? work with u>$ff. * Remove i>! and make CONSTANT and VALUE the same (again). * 6502D: fix broken reference to ORG. * appleiie: add SPI relay driver, allowing us to have the SD card subsystem running! See doc/hw/6502/appleiie/spi. * sdc: check for error condition in SDC!. *** 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. - 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 RXMEM 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