HP-IPL/OS Change Log -------------------- [version 1.66 testing] 3/5/21-3/6/21 Changes for newer versions of the SimH hp2100 simulator... Modified 7906.ipl to change STC 6 (102706) to STC 6,C (103706) to fix bug that caused DBOOT LDFB and XLOAD to fail with newer hp2100 simulators (and most likely with real 7906 drives too.. not that it works now). Older versions of SimH hp2100 didn't mind the missing ,C so until recently didn't notice. There is also a missing CLC [slot] and CLF [slot] before running from 2 but doesn't seem to mind, anything disk related should do that itself anyway and by keeping the size the same, existing builds can be patched by finding the 102706 in the !7906 word and changing it to 103706. Modified asm/7906ldr.hpa to notate the STC 6,C change. Ran scripts in scripts/bashscripts/fixallsim.zip to change load filename.abs in all .sim scripts to attach -e ptr filename.abs followed by boot ptr. Made further changes to basprep.sim and .sim scripts under apps/bcsapps to move d s xxxxx to after boot ptr because boot ptr apparently changes s, basprep.sim wouldn't work until I moved the d s lines. Similar changes for msuprep.sim. New sim doesn't support ttime/ktime, removed from scripts. Modified build scripts for 7906 builds to add + to version name. Rebuilt abs/hpos7906.abs, ide/hpos6i.abs and ide/hposmt6i.abs with minor changes to docs to reflect changed version name and build date. Modified mkbcs.ipl to replace load with attach -e ptr/boot ptr method, moved the switch reg deposits etc. Made it bigger and more complicated. Modified hposutil.sim for version, rebuilt abs/hposutil.abs. Fixed an old bug in run_util.sim where it had the wrong dir for msubasic.abs. Left the assembled msumon.abs and msuprep.abs, previously had to assemble first but the prep/mon binaries aren't big so leaving them in apps dir. The perl assembler still works in Ubuntu 20.04, yay. The 7906 bug was real and needed to be fixed (took long enough to notice!) but almost everything else for this reissue are changes to make it more compatible with newer versions of the SimH hp2100 simulator. [version 1.65 testing] 1/1/12 modified ABS2F in xutils.ipl to use loc 157 instead of 100 for temp use (locations 100-147 are supposed to be for apps and user code). Modified scripts make_7906.sim make_7906i.sim make_ide.sim make_idem.sim and make_mt6i.sim to bump version to 1.65, rebuilt hpos7906.abs hpos6i.abs hposide.abs hposidem.abs and hposmt6i.abs. Updated urls in readme.txt (fixed a typo), updated antique HP software licensing information (best I could) with more docs about the sources of the files and recovery process, further detailed in readme_asm.txt. Corrected instructions in msuprep.sim script, loads binaries from apps dir. Added a chart of current ZP temp usage to summary.txt, updated web urls. Corrected comment in sfslib.ipl about ZP usage. 12/27/11 Now uses scripts/asm21lb.pl cross-assembler with DMS/FP support (v1.07) Replaced dmsexit3.hpa with dmsexit3a.asm in the new Asm21 format Edited assembly .sh/.bat scripts to use asm21lb.pl instead of asm21tr.pl [but did not reassemble anything, if any bugs will find out later:-] Removed outdated asm21 script from scripts/bashscripts Added asm21lb.bat to scripts/hp2100bat but left originals in place Updated text docs to refer to the new Asm21 version (as noticed anyway) Added docs/threads.txt with a description of the threaded interpreter [version 1.64A testing] 7/6/11 Edited building.html to add info about v1.6's ERASE and overflow protection Added OREGONPT.txt and added to msubasic.html Updated asm21tr.pl in the scripts directory to fix bugs in ORR and IFZ. Added extasmb.sh to the scripts/bashscripts directory for reassembling the SIO/BCS stuff, updated hpscripts.txt to describe. [version 1.64 testing] 6/14/11 vdosext.ipl - added -IRQ to VLOAD, fixed UFSIZE to wait for slow drive vintage.ipl - reworded LINK messages regarding BCS linker halts Remade hposdev.abs VDOS.ABS and VDOSC.ABS 6/13/11 - changed dmsexit2.hpa to dmsexit3.hpa, modified to clear A/B dms.ipl - added new dmsexit3 code to ALTSAVE, removed spaces from ?DMS mkbcs.ipl - no longer prompts for segments if assembly, uses attach -e ptr to avoid 0-byte files if missing, properly runs the BCS linker with B clear. dm2.ipl and dmenu.ipl - changed HPBASIC re-enter to 2027, changed BCS message altutil.ipl - changed HPBASIC re-enter to 2027 in ALTABS iplnotes.txt - changed HPBASIC re-enter to 2027 in BSAVE sioutil.ipl - rewrote to not depend on exact locations in SIO driver Rebuilt all DMS-containing builds in abs and ide directories. Made make_dev.sim make_vdos.sim and make_vdosc.sim scripts in the scripts dir for rebuilding apps/hposdev.abs and usbadapt/VDOS.ABS and VDOSC.ABS (new names for the VDOS builds). Added SEABATPT.txt to docs/hpbas (sea battle), added to msubasic.html. Added apps/binasm directory with SIO/BCS source code and notes. Updated the vintage binaries in apps/bin to versions assembled from source, the bcs31k.abs configured BCS linker now uses the new bcsttycr.rel driver which works with normal terminals that send only CR when enter is pressed. Added make scripts for the BCS apps in the apps/bcsapps directory, rebuilt to use the new TTY driver and no longer require CRLF enters. Updated the docs in the abs, ide, apps and usbadapt directories. Updated the bcs31k_log.txt file, new SIO config procedure text. [version 1.63A testing] 11/8/10 - added OTHOV.txt to apps/basapps, replaced previous 8KW smovl build with oth8.abs containing a trimmed version of OTHOV, which better represents what can be done using the added calls. It has color :-) Updated the hposdev.abs build in the apps dir to include cross.ipl and XDOS with an IDE driver. [version 1.63 testing] 11/6/10 - added apps/basapps directory containing extensions for HPBASIC... cross.asm - "slim" version of the overlay for 21MX 64KW+ HP-IPL/OS cross2.asm - "fat" version of the overlay for 32KW w/punch/patch menu bspatch.asm - backspace patch for HPBASIC w/cross2 cross.ipl - package for running and passing data to and from HPBASIC svbas.ipl - a word for saving HPBASIC apps to PTP/MS out smovl.asm - "small" version of the overlay for 8KW w/built-in punch BEASTIOV.txt - a version of BEASTI modified to use terminal codes basapps.txt - describes this stuff. Added basic2.abs to apps containing HPBASIC w/cross2, Octapus-D and the backspace patch (super-cool!). Description added to readme_apps.txt. Added octapus.abs to apps containing the binary I started with. [version 1.62A testing] 11/29/10 - added raw hpbasic.abs and prepare.abs binaries to the apps/bin directory, edited scripts/basprep.sim to load these for reconfiguring. Edited apps/readme_apps.txt to include config procedure and more info. Edited scripts/scripts_readme.txt for new config script, updated PC setup info (file associations etc), updated simulated magtape setup info. Edited root readme.txt to add AEDIT flow control note and clarify UDOS info. [version 1.62 testing] 11/28/10 - added apps directory containing binaries and assembly source for vintage applications, moved MSU BASIC and stand alone Octapus source/binaries here, added source code for HPBASIC Rev A with a slightly modified prepare program and a preconfigured 28KW binary, bin directory contains binaries for SIO drivers, compilers, BCS drivers and prepare program, bcsapps directory contains source binaries and notes for BCS programs. Added hposdev.abs build to apps directory with VDOS, vintage.ipl, mkbcs.ipl and other packages for working with vintage code. Added vintage.txt to docs directory explaining how to use VDOS, vintage.ipl and the USB Disk Adapter to configure run and compile BCS software. Added basprep.sim script to the scripts directory for configuring HPBASIC, moved the asm21tr.pl assembler to scripts and adjusted assembly scripts/batches, added QBASIC make_mt program for copying IPL/text files to a magtape image. Added parts list in parts.txt in the usbadapt directory. Edited/created documentation as needed. [version 1.61C testing] 11/25/10 - ugh, vintage stuff is hard :-) should be ok now.. maybe. 11/24/10 - corrected comment in vintage.ipl regarding requirements. 11/23/10 - updated firmware for the PIC-based VDRIVE adapter. Added vintage.ipl package for using VDOS and vintage HP dev tools to assemble, compile and link ASMB, ALGOL and/or FORTRAN programs. [version 1.61 testing] 11/16/10 - Moved vdos.ipl and vdosext.ipl to IPL directory. Modified input driver in VDOS word so that it does not glitch the command line, which can cause issues with interrupts and/or the PIC-based VDRIVE adapter. Modified the VOWCHECK word in vdosext.ipl to wait for all response bytes to correct an issue that was triggered by more than about 100 files in a directory. Updated vdrive_mod.txt. Added usbadapt directory containing info about PIC-based USB disk adapter, includes VDOS builds for 64KW machines and UDOS for 8KW HP-IPL/OS and HPBASIC. Added 8KW BASIC programs to the hpbas directory. Updated readme.txt to include info about VDOS. Updated files_index.html to include new material. Updated ptemu.txt to include info about microcircuit board configuration. Fixed up other stuff as needed (ipl_notes.txt, license for GPL material). [version 1.60 testing] 6/20/10 - Edited summary.txt to correct typos and add more info about the dm2.ipl disk menu, edited docs under scripts to include info about newer OS's (mostly about things that no longer work). 6/9/10 - Modified 1.6 testing kernal so that it sets the default +LOOP step value to 1, otherwise interupting a program that uses >STEP can leave HP-IPL/OS in a broken state. It is still possible to misuse >STEP and break the system but now it should right itself after WBOOT or running from loc 2. Wrote more about using >STEP in the hpiplos.html file. Fixed dm2.ipl so will display Z) plus 6 more files by ascii symbol, fixed dmenu.ipl so will display up to Z) (prev versions stopped at Y). Corrected comments in dm2.ipl to describe HP BASIC support. Added BASIC programs to docs/hpbas directory with descriptions and sample runs in the msubasic.html file. Modified the run_util.sim script to pre-attach msubasic.abs to (maybe) make it easier to make stand-alone ABS files from the BASIC programs, updated the boot_7906dsk0.sim (renamed) script to use BASIC-compatible settings that permit copy/paste. 6/5/10 - New 1.6 testing kernel with the following changes... DEFINE, ADDCODE and FIXLINKS modified to display a DICT OVF error rather than overflowing into block memory. Extra code for this added before dictionary. Moved ADDCODE to just before block words (no longer in internal.ipl). Long error messages removed from VARIABLE and CONSTANT to reduce memory usage. Added @LLP (last load point) variable, modified LPT - print a byte "string" $LPT - print a string NLPT - print a newline (CRLF) Rebuilt hposdemo.abs, hposide.abs and hposidem.abs. IDE build no longer contains HP2645 words, defaults to ANSI. 9/18/08 - added more word listings to ipl_notes.txt. 9/7/08 - updated edit.ipl with the following changes... Renamed MCL to MLP (move line pointer) Renamed DCL to DLINE (harder to delete a line by accident) Added machine-coded BMOV byte-move word (MUCH faster than interpreted) Modified INSERT and DLINE to call BMOV, print [WORKING] while moving bytes Modified FOPEN with better error messages, warns if not CRLF terminated Added ?EDIT word with command help and open file status Replaced raw captured EXPLAIN output with human-readable word names Added load messages and code to ensure BMOV doesn't cross page boundary. [version 1.53 posted 9/1/08] 9/1/08 - updated summary.txt and readme.txt, altered comments in edit.ipl to correct mistakes - there is no HP machine instruction that can byte-shift a memory copy (must start on word boundaries), and the library is now a plain-text file and can be (very slowly) edited using the edit words. 8/30/08 - added new sfslib.ipl library system with the following changes... D2L renamed to D>L, L renamed to L>D, A2L renamed to A>L, L2A renamed to L>A. LDIR now displays the library filename. Added MS>L to replace old MS2L - this one doesn't require specifying the byte size, rather terminates when it receives the 1st 0 after the text. IPL file being imported must end with LIBEND (not CONSOLE). The library file format is now pure-text with no terminating byte. Altered ide build scripts to rearrange things to put most of the optional utilities at the end, rebuilt hposide.abs and hposidem.abs builds. Updated notes in ide_buildinfo.txt. Added ipl_notes.txt with brief descriptions of the included IPL files, notes about dependencies, and extra IPL listings. Removed outdated packages xi79.ipl, lib.ipl, lib2.ipl, a2l.ipl and ms2l.ipl (they remain in the web "files" archive with all the other old cruft). [version 1.52A, used in 7906 sim package] 8/19/08 - updated the dm2.ipl disk menu... Displays the HP-IPL/OS version string in the title. Reprints main keypress prompt if an invalid key pressed, the key that was pressed remains under the cursor for feedback (and less code). Avoid pressing cursor keys etc at the menu prompt, some keyboards send escapes that contain uppercase letters and will run menu items. No longer requires msupatch.ipl but still prompts to use it when saving binaries if both a MSU BASIC binary and the MSUPATCH word are present. Load ABS function provides a way out if inadvertently selected. Text import now properly skips leader zeros before the text. Fixed misplaced CRLF in the binary save feature, drops the empty string if no name is entered at the prompt. [version 1.52 posted 8/9/08] 8/9/08 - Added new IPL... a2l.ipl - utilities for copying editable alt.mem. to/from a library file This makes it possible to compose multi-word "files" to include in a library without having to import the file from papertape (the previous MS2L utility). Unlike MS2L, A2L makes no attempt to convert CONSOLE to LIBEND, rather use the editor to do that. Also included is L2A which copies a specified "file" from the library into alt.mem. with space-padding to permit editing. The file chunk must end with LIBEND on a line by itself to terminate. 8/3/08 - Added new IPL's... bkfile.ipl - dumps/restores encoded files to/from the console sham.ipl - dumps alternate memory in octal and text binpatch.ipl - a utility for altering device assignments in binaries msupatch.ipl - a utility patching the 31KW version of MSU BASIC dm2.ipl - a version of DMENU that supports MSU BASIC Added msubasic.abs to the abs directory. Source/docs is elsewhere. Note... the original HP BASIC is also supported, use dmenu.ipl for automated saving and patching. 8/1/08 - Changed SFS' DIRECTORY word to fail if buffer memory doesn't exist - otherwise upon update all files in the volume are lost! ouch. Streamlined corruption test in DirUpdate to improve and save memory. Rebuilt hpos7906.abs, hposide.abs and hposidem.abs builds. Put back the code for the original IDE bootrom. Modified IDE disk image copy instructions in ide_buildinfo.txt. [version 1.51(J) posted 4/9/08] 4/9/08 - Added dmenu.ipl entry and more fed.ipl info to summary.txt. 4/6/08 - Merged in some of latest AEDIT changes into fed.ipl, including a bugfix when loading max-sized files and less wiggle when moving the cursor. Updated hposdemo.abs to 1.51J. [version 1.51(G) posted 3/29/08] 3/29/08 - Updated the fed.ipl editor with the newer aedit.ipl code which has faster screen updates and avoids accumulative file growth. Immediate-mode IPL loading features remain to avoid defining FED and to define ZAM if no disk, and to automatically cross a 1KW boundary to avoid page errors when loading. Updated the hposdemo.abs build to 1.51G (to match 7906 disk sim version). Updated summary.txt to better describe the new version. 3/27/08 - Updated fedutil.ipl to fix bugs in LDTXT ALOAD and CKARRAY. 2/17/08 - Modified/edited scripts/hp2100bat/readme_bats.txt to include more information about associations and simulating with a telnet client. [version 1.51 posted 2/14/08] 2/14/08 - Modified fed.ipl so that CONSOLE is at the end to be compatible with MS2L (which requires CONSOLE at the end to convert to library format). 2/13/08 - Fixed ASC bug in create.ipl and smallcre.ipl, compacted a few messages to make up for added code, no overall size change. If I have to update might as well tweak a few other things... Modified fedutil.ipl to add ALOAD word for loading AEDITed IPL files, added CKARRAY sub and ARLINES var to deal with partial pages (previously this tripped up some of the utilities) Modified ms2l.ipl to be compatible with lib2.ipl and the original lib.ipl. Modified "demo" build lineup - removed n_rocks.ipl, added print.ipl, fed.ipl/fedutil.ipl, ecal.ipl, cylons.ipl, ttyscan.ipl (for LIFE). Modified "ide" build lineup - now includes print.ipl, ms2l.ipl. Modified "idem" build lineup - has print.ipl and MKWORD/ENDWORD, no HELP. Modified "mt6i" build lineup - now includes mt2f.ipl. 2/9/08 - found bug in CREATE's processing of ASC - if not valid code it overwrote memory and crashed. At first I thought I'd have to live with it, CREATE is quite tricky and wasn't too keen on decreasing free mem just to accomodate incorrectly written code, but eventually found a solution. [version 1.5 posted 2/9/08] 2/8/08 - added Windows-specific batch files for assembling .asm/.hpa files and "running" .abs files in the HP2100 simulator, wrote docs detailing how to set up a development environment and use the build scripts. 2/1/08 - newly added IPL files... fed.ipl - Contains AEDIT, an experimental full-screen "array" text editor fedutil.ipl - utilities for converting regular text to/from array format mkbcs.ipl - outputs a simh script that compiles and links a BCS project mt2f.ipl - a little utility for transfering a magtape file to disk 1/30/08 - added a CLC 0 instruction to the kernel startup, this ensures that the system starts with all I/O control bits clear avoiding possible effects from boot code which leave control and flag both set. Replaced interrupt table with NOPs, the dummy interrupt handler and vector remain for compatibility. Modified config.ipl and n_rocks.ipl to use NOP dummies. No size changes. Rebuilt all builds. 1/29/08 - converted hpiplos1.asm, oct-d.asm and oct-e.asm source files to be compatible with Asm21 by making sure all ASC lines with an odd number of characters includes a space after the last character. Still HPASM and ASMB-compatible. Replaced previous make_kernel.sim script with asm21 script under scripts/bashscripts which permits right-clicking an .asm file in Linux (or via command line), runs it through asm21.pl, adds 8-zero leader and renames files to same base-name as source. [version 1.4 posted 12/18/07] Summary of code changes from 1.31 to 1.4... hpiplos1.asm kernel - CLC and HEADER$ fixes internal.ipl - fixed HEADER$ to not follow word links extra.ipl - fixed DUMP FETCH STASH UNDELETE, optimized PDEF DELETE baci.ipl - CLC fixes ide.ipl - CLC fixes ideldfb.hpa - CLC 0 fix for IDE's LDFB system-binary loader ideboot.hpa - CLC 0 fix for booting (also to ideboot2.hpa ABS booter) magtape.ipl - CLC 0 fix to MTBOOT dmenu.ipl - fixed DMENU's IPL run and forget feature create.ipl - fixed IHASH and hash tables smallcre.ipl - fixed IHASH and hash tables, removed PRESET altutil.ipl - fixed ALTHALT continue-to-run feature n_rocks.ipl - fixed -XYDISPLAY to not conflict with CFGE entry config.ipl - added LPT at loc 272 for printer, removed USER added print.ipl containing printer driver, uses loc 272 for slot removed rcontrol.ipl 12/17/07 - altered !DISK in the "combo" MT/7906/IDE build in hposmt6i.abs (no ipl, code in ide_builds.txt) so that it autodetects both new and old IDE boot/ldfb code at either 77700 or 77600. 12/16/07 - modified magtape.ipl so MTBOOT does CLC 0 before running system, modified ide.ipl so LDFB code does same CLC 0, now org'd at 77600. 12/15/07 - added the IDE builds back into the main archive along with details about the 8052-based HP-IDE interface. Modified -XYDISPLAY in n_rocks.ipl to not conflict with CFGE entry 70. This is a problem if XY stuff runs then user (me) decides to reboot to a BACI console by puting 010000 in SR then running from loc 70. Altered the code to shutdown both the XY board and DMA channel 2, however it does not return the X/Y output to 0/0, more probably needs to be done here (and to the rest of the XY "drivers"). 12/13/07 - fixed typo in CREATE's IHASH function that wasn't causing any real problems but potentially could have caused invalid instructions to be recognized as something else. This required recomputing all hash values in the CASE statements for matching instructions, wasn't going to bother (not important enough to risk all that typing and editing) but then had an idea... copied the hash table code to a separate file then wrote an IPL word which read the file, parsed the comments to calculate the new hash value and printed the corrected tables which were copy/pasted back into the create.ipl and smallcre.ipl files. Modified CONFIG to permit setting LPT slot, placing at location 272 which was originally intended for magtape slot, but due to the complication that would result from trying to slot-patch the magtape words that'll probably never happen - easier and more efficient to simply edit the magtape.ipl and mtbackup.ipl files and rebuild to use different slots. Or use Octapus. The USER option has been removed from CONFIG but location 277 is still reserved for user-written drivers. Added "experimental" printer driver in print.ipl, using loc.272 to patch slot. Removed rcontrol.ipl - too limited and buggy, replaced by dmenu.ipl. Fixed typo ALTHALT word in altutil.ipl, continue (Run) should run now. 12/12/07 - fixed the HEADER$ bug in internal.ipl, manually applied changes to the kernel source in hpiplos1.asm. 12/11/07 - DMENU's IPL run-and-forget function wasn't functioning, while debugging it noticed risky indirection in HEADER$ causing EXPLAIN $GET to fail but only if dms.ipl loaded at specific offsets. Fixed dmenu.ipl. 12/10/07 - removed the PRESET word from smallcre.ipl, the stripped-down version of CREATE for 16KW machines (if needed copy from create.ipl). 12/8/07 - bugfixes for the old extra.ipl words... Fixed DUMP so it always includes the To location Fixed FETCH to add missing ENDIF (that was glaring...) Fixed STASH so that it restores MS after saving definition Fixed UNDELETE so it removes name string(s) from X Tweeks to PDEF and DELETE to use #1 constants instead of literals 12/5/07 - modified baci.ipl with CLC instructions. This should take care of all of the mainstream devices but magtape still leaves control set with flag clear, opposite of desired "normal" but at least avoids blocking interrupts and works under sim. 12/4/07 - modified TTY and PTR code in kernel to add CLC instructions so control is clear and flag left set upon exit of I/O subs. Modified ide.ipl to add CLC instructions. [version 1.31 posted 11/19/07] 11/19/07 - fixed ide.ipl driver's status read function, works now. The problem was stupid, ide.ipl never worked and Bob's IDE system had a long-forgotten hack I added to make CON oct-d.asm - EXTASMB-compatibility mods, fixed search bug oct-e.asm - EXTASMB-compatibility mods, fixed search bug 10/11/07 - IDE build updated, no DEBUG, with magtape. 10/6/07 - summary of fixups for v1.2, started 9/29/07... Fixed typo/bug and removed bell character output from Octapus D/E, updated oct-d.hpa, oct-d.out, oct-e.hpa, oct14.ipl, oct34.ipl and oct70.ipl. Added new PRESET word to create.ipl and smallcre.ipl, this does more or less the same thing as pressing the real preset button does - makes stuff work! Replaced -IRQ and -TBG workarounds in binary loads, updated disk.ipl(DBOOT), magtape.ipl(MTBOOT), xdos.ipl(XLOAD), altutil.ipl (RUNABS, while at it mod'd ALTABS to do a better job at saving basic, and added a ALTRUN word), and conalt.ipl (changed text in CONALT). Changed DMENU in dmenu.ipl to do PRESET before halting to empty system. Moved HLT word from fcam.ipl to altutil.ipl, more convenient there. Corrected incorrect comment in 7906.ipl (supports up to 8 drives, not 4). Changed mtextra.ipl so that MTSHOW erases prompt like XSHOW does, this adds a bit to the size but permits direct copy/paste of code from the listing, avoiding having to export etc. MTBACKUP from mtbackup.ipl was utterly broken (could have sworn it worked... in '02 under old sim), did stuff to it until it worked again, not pretty. Removed the MTDUMP word from mtextra.ipl, buggy and almost never used. Simplified ?DRV in 7900.ipl, removed sim reference. Added load code to altutil.ipl to delete dup ZAM/HLT words. Added new siobcs.ipl with words for running Algol ASMB etc with delete-dup code for its HLT. Detecting and deleting dup words automatically upon load has been my wish for awhile, ended up being fairly easy. There is no prompt to confirm, the technique used by the old extra.ipl (<>CON TEMP CON TEMP MS_RESTORE CON also resets MS redirection to PTR/PTP. That ain't right, only CONSOLE is supposed to do that. Fixed, now it's kernel 1.2. Screen-enabled builds (DMS, 7906, IDE) now use hpscreen.ipl for HP-terminal compatibility, set to ANSI for normal use (TERMINAL to toggle). All builds (except IDE) updated. 9/6/07 - Improved basconv.ipl, no longer converts to uppercase (left in comments to show an easy way to do that), now it prompts for info and terminates normally when the letters EOF read from an input line. [ version 1.1 posted 9/3/07 ] 9/3/07 - Rebuilt hposmt.abs (really just renaming +IRQ to !IRQ) after discovering that SFS >FILE writes don't work (at least under sim) unless interrupts are enabled, even for just a little bit then disabled. Strange. Added the ms2l.ipl file for copying multi-word and create IPL's into the SFS "library" provided by lib.ipl, which can only save single high-level words. Updated oct-d.hpa to configure for HP-IPL/OS' default slots and correct comments, added stand-alone oct-d.out binary. 9/2/07 - changed kernel to fix the problem with TBG - now it should be able to operate in any slot. This involved adding CLC [slot] and ,C to LIA's for TTY, PTR and PTP and adding new locations to the patch lists. Modified magtape.ipl to add a ,C to MTSTATUS' LIA instruction, modified mtextra.ipl MTSHOW to operate properly with 24 line terminals. Created simh scripts for rebuilding, used them to regenerate all builds. The kernel was assembled using the SIO-based EXTASMB paper-tape assembler. 9/1/07 - fixed bug in xdos.ipl's XDEL word (was leaving a value on the stack when not confirmed), modified XLOAD so that it turns off the time-base gen if the -TBG word exists to avoid crashing when loading binaries which do not have a default interrupt table for everything but enable interrupts (BCS etc), causing the pending TBG interrupt to go to who knows where. Now XDOS 1.26. Updated the ecal.ipl file to include new calculation options like inductance, resonance and how much noise is created by a resistor. Updated 7900bext.hpa, no code change just removed a duplicate comment. Added IPL files... altutil.ipl - various words for building/examining/punching stuff in alternate memory and loading/running binaries from PTR. Mainly for disk-less builds. basconv.ipl - converts text from PTR to HPBASIC-compatible code conalt.ipl - permits pasting and running encoded binaries and generating encoded binaries from alternate memory, includes a version of CONGEN. dmenu.ipl - enhanced version of rcontrol.ipl able to run binaries from disk and save basic binaries to disk in a way which preserves or autoruns the program that was entered. fixfst.ipl - words for decoding files contained in FST archives, used to scarf code from the HP Contributed Software Library (the now gone Interex) hpscreen.ipl - a version of screen.ipl able to drive both HP and ANSI terminals, enter TERMINAL to switch (preference sticks with a sys-gen). ldenc.ipl - able to load encoded binaries attached to PTR life.ipl - Conway's Game of Life (req's at least 3 ALLOCATE to run) nolf.ipl - makes HP-IPL/OS ignore linefeeds sent over the console sioutil.ipl - patches the prepared 16KW SIO driver for different slots [ 4/6/07 - posted 3/30/07 version, edited readme etc, added "licensing" info ] 3/30/07 - added rcontrol.ipl - a menuing system with a modified CONSOLE and DMENU which lists specially-named text and IPL files. Text is displayed when selected, IPL files are loaded, run, removed and the menu is redisplayed. Also includes an example autostarting !MENU word customized for "combo1". IPL files must be specially prepared, filename must be "# WORDNAME" and WORDNAME must be the first word in the package to be fully removed. [ 3/6/07 - released to main page as "1.0" ] 2/23/07 - mods to 7906bext.abs/.asm and 7900bext.out/.hpa - the 7900 boot ext can now reconfigure its slots and can load from drives besides 0 (7906 boot ext is drive 0 only, mod was to fix an efficiency bug). Added 7900_bd1.hpa/.out for "booting" 7900 drive 1 for using with TSB-E. 2/22/07 - mod to stand-alone Octapus-D source (ptp to slot 12) 2/21/07 - modified xdos.ipl and xutils.ipl both now version 1.25: XSHOW - adapted for 24-line display, fixed bin-dump function ABS2F - modified to always save as a binary file, avoiding problems with "alien" binaries that begin at location 2 (like the TSB-E loader) Removed XI79 from xutils.ipl, moved to xi79.ipl in case anyone wants it. Added smallconfig.ipl, a smaller config for systems with less stuff. Updated hpos7906.abs and hposide.abs builds. 2/17/07 - minor editing to 7900.ipl. 9/4/06 - fixed 7900.ipl so it would change slots properly. 4/8/06 - Experimental version "1.0" with the following changes... Base DMS/FP version in hposdms.abs... Changed SYSALL in oct70.ipl to add 8 zero bytes before ABS Changed VERSION in version.ipl so that it truncates/pads to req'd len Added cfge.ipl - permits using SR to set tty/baci slots and select console Changed CONFIG in config.ipl to dummy-set unused IRQ vectors, updated text Changed hpib.ipl to allow setting slot Added bigshift.ipl for 32 bit shifts Added float.ipl and floatext.ipl for floating point Added screen.ipl for full-screen cursor control Changes to optionals... Removed tdos and related files, replaced with xdos and sfs Made same SYSALL changes to oct14.ipl and oct34.ipl Rearranged code in sfs.ipl to make easier to load without page errors Fixed 1dca.ipl, 1DSU now clears buffer mem before starting Added experimental "slow" SFS apps lib.ipl and edit.ipl Added capslock.ipl and other misc utilities Added 7906.ipl driver for 7906/7920 disks Added 7906bext.abs to write boot extension The hpos7906.abs and hposide.abs builds add to the hposdms build, the hposmt.abs does not include double, bigshift, hpib and float packages by default but they can easily be added if needed. Overall version number of the distribution started at 1.0 - version numbers of individual packages that have them are not altered except when they undergo code change. Presently the kernel is (still) at 0.58, xdos is at 1.24, sfs is at 0.70 (rearranged but no code change). Please disregard individual package versions unless refering to that package, it's easier for me to remember 1.24 or 0.70 than code-change-dates. ----------------------------- Version 0.58b 9/9/04 (affects all 32K+ builds) Fixed CREATE bug, now SLA,ALS and similar don't get assembled as ALS,SLA instead. Actually a bit smaller now, which caused DMS.IPL to end just shy of a page boundary when loaded so... Added ALTSAVE to DMS.IPL, saves the current system to alt mem and puts a program at 77000 that swaps alt and system and runs from system location 2 - the same function that was embedded in TDOS' TLOAD but now available for general use. Modified MTLOAD in MTEXTRA.IPL so that it runs ALTSAVE first and turns off DMS before loading a system file from tape. Modified TLOAD in TDOS.IPL to use ALTSAVE. Added TREAD TWRITE TDUMP TMKFILE and ALTLOAD to TUTILS.IPL, handy debugging functions and ALTSAVE/ALTLOAD rocks! At some point ALTLOAD should probably be added to DMS.IPL, we'll see how it goes. n TREAD - read disk block n into hpiplos block 0 n TWRITE - same deal for write from to n TDUM - dump disk block n n TMKFILE - enter a text file and save to disk file n ALTLOAD - does 77000 RUN after making sure alt is valid system Another ALTLOAD swaps again so you can instantly switch between two systems so long as you don't show/load a file or otherwise comprimise alt memory. Checks to make sure but not infallable. ----------------------------- Version 0.58a 9/3/04 (only affects disk builds w/ TDOS) TDOS.IPL now contains the word TABS that copies an ABS file mounted on papertape or other MS input to a TDOS system file. Prompts for run addess, written to locations 2/3. Prompts to add exit code, if granted puts 77000 into location 76 and jmp 76,i in location 77. This permits basic1.abs to return to hpiplos when BYE is entered. Usage: file# TABS TLOAD has been modified to save the current system to alternate memory before loading, run from 77000 to restore the previous system. A swap of the lower 31 1KW blocks are performed so after restoring the TLOADed system is present in alt mem. TLOAD now turns off interrupts and DMS before loading. Added the TPRA word to patch the run address of whatever's in alternate memory. If HPBASIC then 2050 TPRA causes it to preserve listing (but doesn't print READY, anyone know a better vector???), 5137 TPRA causes the basic program to auto-run when loaded (found by hacking). After patching use AM2F to save to a TDOS file. Importing basic1.abs... [attach basic1.abs to papertape input] [assuming will be saving to files 3 and 4] ? 3 TABS ;copy initial hpbasic program to file 3 Run address: 100 Add 77 exit? Yes Saving to file 000003 ? 3 TLOAD ;load and run hpbasic READY 100 PRINT "HELLO" 110 END RUN HELLO READY BYE HP-IPL/OS SIM 0.58A ? 5137 TPRA 4 AM2F ;patch run address and save to file 4 ? 4 TLOAD ;load and run hpbasic program LOADING SYSTEM... HELLO READY TDIR has been modified so it only prints the hpiplos version string if the run address is 2000 otherwise prints the run address. ? TDIR File 000000 ..Summary of words from HP-IPL/OS 0.58....Base v File 000001 ..HPIPLOS Change Log..------------------....Vers File 000002 HP-IPL/OS Games .58a File 000003 System binary, runadr = 000100 File 000004 System binary, runadr = 005137 File 000005 System binary, runadr = 002011 ----------------------------- Version 0.58 8/29/04 Added watchdog timer, variables in kernal and CREATE... ABFLG - gets set to 1 if alternate boot performed ABVEC - address of alternate boot startup code WDENA - set to non-zero to enable watchdog WDTMR - the watchdog timer, set to 0 to reset WDTOV - watchdog timeout value, alternate boot when WDTMR = WDTOV The actual watchdog code is in +TBG, TBG.IPL now also defines... n >WDT - set the time out value, 12 octal = 1 second +WDT - turns the watchdog on -WDT - turns the watchdog off +LOOP now supports increments besides 1, n >STEP to set. The terminate value must match exactly or it will loop forever. 32K+ builds include MKWORD and ENDWORD, these let you cram any number of words into a single word without bothering with context markers. The downside is the hidden words can no longer be explained or otherwise accessed but often that's a good thing. Usage... "NAME" MKWORD define/create subroutines/variables define main code that uses subroutines/variables ENDWORD ...to produce a single word named NAME containing everything. Many HP-IPL/OS words and utilities are already encoded that way but done using crytpic manual commands. (besides, needed a couple of tiny words to get past a page boundary, was gonna burn that memory on something so might as well be useful!) Version 0.57B (8/3/04) Added $DVAL and $DSTR to double.ipl, removed BNU$. Removed unpatchable devices from config.ipl (commented out). Modified ide.ipl so that it does not perform a disk reset. Added tdos.ipl containing a simpler example DOS. Added hpib.ipl into the IDE build. Programmed bigshift.ipl containing double-word shifts/rotates (but not included in any binary builds). No kernel changes... but noted "bug" in error-checking for block operations.. accepts 20 octal as a valid block. Ideally they would check to make sure accesses don't exceed top of HP-IPL/OS memory (70000) but existing checks were simply to prevent wildly out of range block values. Assume there is no error-checking. Version 0.57 (1/4/04) Experimental dos stuff deemed too complex, removed. Changed PSUBA vector in loc. 470 to point to PIOCS instead of PIOCH. Modified TBG to get slot# from loc. 270 - when used (disable 1st) Modified BACI to get slot# from loc. 271 - when !BACI runs Removed E function from DEBUG - apparently hasn't worked for a long time yet nobody noticed so I conclude it's not needed :) Modified Octapus so that it uses the console in/out and MS in/out vectors, removed internal slot-patching code, put help at entry+1. Now OCTAPUS-E. Octapus is sensitive to switch register settings, now it ignores the bit that enables the line printer. Best to run with SR=0 until we figure out what the other bits do, if anything. Removed old octapus words, new words... OE runs Octapus-E, OE? prints a command list then runs Octapus-E. SYSALL for the 32K version now displays progress dots. Removed SYSGEN from extra.ipl - never used in favor of SYSALL. VERSION, CONFIG, MKLDR removed from extra.ipl and placed in their own ipl files to permit use as utilities when making 8K builds and to allow more flexibility for 16K and 32K builds. CONFIG modified to allow setting more slot addresses. Not all implemented yet - still have to do MT / disk slots. Added double.ipl with DADD D2CPL EMUL EDIV BNU$ Found/fixed serious DEFINE bug, no more DMPS mania! Location 457 contains warm-boot code address, added WBOOT word. Modified error-handlers to warm-boot instead. Experimental build HP-IPL/OS IDE V0.57I includes older IDE vectored drivers with SBLA and LDFB (ide_old3.ipl), 7900 0.57J includes older 7900 drivers. Neither support drive numbers, limited to drive 0. -------------------------------- Version 0.56E-H (6/29/03) Added experimental low-level disk commands, no changes to DMS/magtape builds and before. 0.56E adds 7900 disk support, 0.56F adds IDE support, 0.56G is demo build with IDE as default, 0.56H (on simulated magtape) has 7900 drivers as default. Version 0.56a (3/16/03) Modified GOUSER/GOSYSTEM prompt-changing in DMS and Demo builds so that 2 SJUMP from user mode works as expected. Version 0.56 (3/15/03) Kernal mods... Added global interrupt enable vector IENAV at location 462. (all oct) Location 461 contains global interrupt enable flag, modified !IRQ to set and -IRQ to clear. IENAV code enables irq's only if set. Location 460 contains the default prompt, copied to 464 on startup. Modified DEFINE to restore the default prompt when done. Added default IRQ vectors to locations 6 thru 25, HLT to 4,5. IPL mods... Added IENAV symbol to CREATE. Modified tbg.ipl defs to JSB IENAV,I rather than STF 0. Modified GOUSER/GOSYSTEM to change prompt to # when in alt-page. Modified MTREAD/MTWRITE to CLF 6 when done. Modified -XYDISPLAY to CLF 7 also. Modified MTGEN to print a dot every 1K to avoid appearing hung. MTGEN SYSALL now save all of low mem to catch all irq vectors. -------------------------------- 0.55 Tweeks (12/6/02) MTDIR now correctly displays filename of file number 1. D2MT now correctly terminates output with CONSOLE. MTRESTORE now displays wait when it might take awhile. MTSHOW forward skip works again. 1DCA/1DSU 1D-automaton demo fixed, enhanced 1DSU. Tweeked builds can be distinguished by having v0.55b at the end and the build type in the middle of the version string. Version 0.55 (12/1/02) Note... from now on end IPL files with CONSOLE rather than <>CON. If you load an old IPL ending with <>CON from MT or other memory sources MS won't be restored after loading until the next restart. Kernal changes - moved version string to location immediately after 2000 to make easier to find and display. Moved CONSOLE from extra package into base dictionary, does <>CON MSPAPER. Modified internal CNSOL subroutine so that it sets MS to paper on powerup or if a define error occurs. Basically, HP-IPL/OS now defaults to papertape MS, no more sillyness. Define your own !startup word, redefine CONSOLE etc if you need MS to default to something besides paper but I don't see much point since anything using MS for anything besides paper does its own MSBACI or whatever before calling MS in/out functions. Leaving MS in a non-paper state is what causes problems! I'd much rather always restart in a known state then change it if I want, than have the first buggy load file cause the system to malfunction and give me a 0 byte file.. grr... If anyone needs I can make a simple IPL file that modifies CONSOLE and other locations and adds back !MSR to make MS "sticky" again but a sticky MS has a bad tendency to gum up the works right when you really need it. I recommend devising custom solutions for different situations rather than relying on persistent MS vectors. IPL changes - MTGEN modified to write 2000 area first, no longer saves blocks, mods for MSUSER changes. Minor change to MTSCAN, took the MTINIT out of the DO loop. Commented out the risky and redundant !MSR from extra.ipl, needed only if MS needs to default to something besides papertape. MSUSER (DMS) changed so it doesn't leave pointer on the stack, affected definitions changed. Added UPTR psuedo-variable to contain the MSUSER pointer. Went through all IPL's changing <>CON at the ends to CONSOLE. Also changed in error-recovery areas of CREATE and other places where resetting MS is desirable. New words in the mtextra.ipl file... MTDIR - displays directory of magtape volume file# MTSEEK - skips to specified file file# MTBOOT - boots specified file (must be bootable) file# MTLOAD - boots, loads bin into memory or text into console file# block# MT2B - copies magtape file to block(s) file# MT2MS - copies magtape file to MS output "Filename" ByteLength MS2MT - copies MS input to magtape file "Filename" FromAdr ToAdr MTSAVE - saves memory to bin file "Filename" block# WordLength B2MT - copies block(s) to magtape file "Defname" D2MT - saves definition to magtape file (filename=Defname) HELP - quick help for new users New words in the mtbackup.ipl file... MTBACKUP - copies an entire tape to MS output in SIMH format. MTRESTORE - copies a SIMH format tape file to magtape, select new Volume or Add to the existing volume. -------------------------------- Version 0.54 included several experimental MT versions. -------------------------------- 0.53C/D/E (11/16/02) "Fixed" magtape MTSTATUS word, needs testing w/ real hardware. Magtape commands now work under simulation. Dropped extra CRLF from MTSCAN (now that I can see what it does!). Altered version letter suffixes for affected binaries. 0.53 (11/13/02) CASE now supports nesting. No limit other than available memory. Added definitions to extra... $EQUAL - pops string and compares to next, if equal pushes 1 else 0 From To $SLICE - pushes a substring of a string $TRIM - removes leading and trailing spaces from string Removed above defs from other packages that defined them. -------------------------------- 0.52B and 0.52C involved MAZE tweeks. 0.52A (10/12/02) Minor commenting changes in various files. Only code change was to xydisp.ipl - replaced xy demos with ROCKS, tweeked a couple $XYPRINT characters. Updated the hpos_all.abs binary. 0.52 (10/9/02) Changed CBOOT kernal code so that prompt is rewritten, avoiding confusion if define is interrupted. Modified CONIN code so that it does not output prompts during redirected loads. Modified all .IPL files to include extra CRLF's since they now have control of text output (except when loading via create, that still displays address prompts as it should). Fixed CREATE bug.. was leaving a value on the stack. Oops. XYDISP mods/additions... Added @BLANK variable, default is enabled. Enter @BLANK 0 PUT if you have a non-blanking scope, PLOT will add an extra point at 0,0 which on round scopes can be positioned just off-screen. @FROM/@TO/XYMOVE - @FROM contains address to start at, @TO contains the last address, X Y XYMOVE adds X and Y to all values in-between @FROM and @TO. Be careful!!! PEN++ - set intensity to default and plot @X/@Y, used by $XYPRINT. "String" $XYPRINT - prints string on XY display. The variable @FSIZE determines the "font size", or more accurately the pixel length of one segment, with letters sized to be 2x2 segments separated by 1 segment before the letter body. The variables @X and @Y determine the coordinates of the lower left corner of the inter-character space. XYHOME positions @X and @Y to start $XYPRINT text at the upper left of the screen. XYCRLF positions to the next line. -------------------------------- 0.51 (9/28/02) Machine-coded EOD definition to rid of pesky side effects. Rearranged definitions so that block and variable support can be dropped if not needed and added a configurator to internal.ipl for better 8K/octapus support. Added 8kextra, cylons, and bacisave.ipl files. Added hpos_all.abs build that includes all options and demos. -------------------------------- 0.50 (9/22/02) Many organizational changes... now the HPASM source is the base 8K build and options are loaded in as needed. Dropped +ADB/-ADB, no longer needed. Also dropped PNEXT (always returns the same soon-memorized number) and RESTART (2 RUN works just as well). If you want to add back... OCTAL DEFINE PNEXT 321 GET PNUM END OCTAL DEFINE RESTART 2 RUN END No major changes to the code itself but many definitions that were internal are now in IPL/CREATE form. Added definitions... (extra) MKLDR - writes IPL equivalent of memory to MS output (dms) GOUSER - copies hpiplos to user map and runs there (dms) SYSEXIT - plants a "go back to user" jump at 40 in sys map (dms) GOSYSTEM - copies hpiplos to system map and runs there -------------------------------- 0.49 (9/8/02) Modified autostart code to use an "enable" flag. Fixed $DEFADR bug. Added definitions... +AUTO enable autostarting -AUTO disable autostarting +ADB enable autostarting of DMS and BACI -ADB disable autostarting of DMS and BACI MTGEN DMS-based version of MTGEN, uses no blocks -------------------------------- 0.48C (9/4/02) Fixed bug in MS_RESTORE and extra MTGEN definitions 0.48D/E binaries contain experimental TBG and DMS-based MTGEN definitions, PTIME should print elapsed processor time since restart but hours is displayed as negative, haven't fixed yet. The raw timer count is stored at locations 474 and 475. 0.48 (9/2/02) Added definitions... CREATE defname assembles low-level definitions addr MSUSER redirect MS in/out to the alternate map (does not pop addr, leaves pointing to next word) MS_SAVE saves current MS byte vectors MS_RESTORE restores previously saved MS byte vectors "defname" $DEFADR pushes word address of definition WHEREIS defname prints word address and span of definition VERSION allows version string to be changed UNDELETE finds and allows restoring of deleted definitions !IRQ turns on interrupts -IRQ turns off interrupts Removed SAVE/LOAD and MTGEN definitions. Removed "dead wood", reused 320 for dummy int vector, added default vectors at locations 10-17, modified SYSGEN and SYSALL to save 10-17 as part of binary. Modified WORDS for wider display. Locations 475 (ISAVE) and 476 (IREST) point to state save and restore subroutines. X/Y not saved so if you change them save them yourself. CREATE (in addition to now being integral without the ~ ~~ markers) now supports all HP instructions listed in the 21MX E-series T.R.H. however multi-word instructions must be manually coded, for example STX followed by DEF XSAVE on the next line. Supports only octal constants in instructions, the trailing "B" if present is ignored for quasi-hpasm compatibility. Multi-switches like ,Z,I are not supported but should not pose a problem, the Z/C bit is determined by the target address and does not need to be specified unless you're doing something weird. Blank/comment lines must begin with the * character, comments after instructions must be spaced far enough over to avoid interpreting as data. -------------------------------- 0.47B (8/2/02) Definitions beginning with ! autostart, put 177777 in SR to disable. Fixed PTWD subroutine so that it doesn't send high bits thru ZCOUT. CONIN (console in) code now ignores nulls. Modified BACI receive code to look more like "book" code. Modified BACI transmit code to set text-was-printed flag (cosmetic). BACI init code now enables character echo. Added "USER TRAP" to all DMS words that shouldn't run in user mode. Renamed !DMS to DMS in source to prevent inadvertent execution (the dmsbaci.abs build has !BACI and !DMS for autostarting) Added definitions... BACICON - switches console to BACI interface TTYCON - switches console to TTY interface ABSLOAD - loads ABS file from MS input into alternate map 0.46A (7/26/02) Added DMS (dynamic memory system) definitions... !DMS - initialises DMS -DMS - disables DMS SDMA - sets DCPC ports A,B (DMA) to system map UDMA - sets DMA to user map adr UJUMP - jumps to address in user map adr SJUMP - jumps to address in system map page dmspage SPAGE - sets page (0-37) to dmspage (0-???) srcadr destadr wordcnt C>ACOPY - copies current map to alternate map srcadr destadr wordcnt A>CCOPY - copies alternate map to current map n USPACE - sets user space to 32KW block n (1st user block = 0) DMSTATUS - pushes value of DMS status register 0.45 (6/23/02) Added CASE and supporting definitions... CASE pops stack and searches for matching condition = n tests for equal to n < n tests for less than n > n tests for greater than n <= n tests for less than or equal to n >= n tests for greater than or equal to n <> n tests for not equal to n DEFAULT optional target if no conditions match ENDCASE terminates the case structure n can be a literal, a variable or a constant. Note.. CASE structures cannot be nested. Example: DEFINE CASETEST "ENTER NUMBER: " $PRINT $IN $VAL CASE = 0 "IT'S ZERO" $PRINT = 1 "IT'S ONE" $PRINT DEFAULT "IT'S NOT ZERO OR ONE" $PRINT ENDCASE ------------------ 0.44 (5/12/02) Removed extra instruction from GAPMARK. Modified ALLOCATE to allocate from @END down. Modified OCTAPUS, ODHELP, ODSETUP and SYSALL to work with the 70000 version of octapus. Removed ENTERCODE. Added commands... BPUT - n dim block BPUT BGET - dim block BGET (n on stack) HIDEDUPS name - renames dup defs to " " RENAME name newname - renames a definition DELETE name - renames definition to " " Modified MTGEN to use new MT commands... MTWAIT - waits for tape ready ?MTERROR - prints error if error condition MTSCAN - prints list of tape contents. Fixed DEFINE so that it exits if no name given. Increased size of input buffer to 76 chars (not counting CR) by moving system stack to 620 octal. SS capacity now 112 words. This fixes that end-of-line bug and other bugs relating to input buffer overflow. (was overwriting stack with CR) ------------------ 0.43 (4/22/02) Wrote a better WORDS, displays free dictionary space also. Removed original WORDS. Used MKHPASM to move entire contents of "all.ipl" into the HPASM source code. Now they're unforgettable... ------------------ 0.42 (4/20/02) Added extra definitions... MARKCON n - compiles a context marker (named ~) GLOBAL - compiles a global marker (named ~~) SETCON n - makes defs following matching ~ marker visible SETCON 0 - hides all contexts FORGET [name] - forgets last thing or everything after specified ERASE - erases all user definitions (and itself until moved to hpasm) n ZEROBLOCK - pops stack and writes 1K word zeros to that block ENTERCODE DEFNAME - prompts for octal to add to primitive definition CONSOLE - alias for <>CON, also resets MS to paper-tape "DEFNAME" n STASH - decompiles DEFNAME to block n, ends with CONSOLE n FETCH - loads definition from block n Modified VARIABLE so you can use comments afterwards. Modified HEADER$ so that it does not output extra spaces when definition name is less than 4 characters. EXPLAIN looks better. Removed old FORGET command. Fixed duplicate NOT FOUND bug in DEFINE. ------------------ 0.41 (4/15/02) Ouch!!! fixed bad bug in FIXLINKS "extra" definition. (had the effect of causing major problems if you FORGET something then DEFINE again.. no final 0 to terminate) ------------------ 0.40 (4/15/02) Now a 32K version - blocks begin at 30000 and extend to 67777, all 16 blocks are preallocated. If you need a 16K build, change @END contents to 3777 (or 33777 if Octapus is used) and change @BLK contents to [@END] + 1 - (#blocks desired * 2000 octal). Make sure you don't get too close to the EOD value. Mag-tape operation in 16K is only barely possible, it takes at least 7 blocks (7K) to do a SYSGEN to memory (MTGEN must be modified). 16K isn't nearly enough to SYSALL to memory, that takes at least 9 blocks (9K). Practically speaking, mag-tape is best left for 32K, however a PT-based system with Octapus is plenty practical. Fixed channel number in MTSTATUS, now 15B. Added MSCRLF definition. ------------------ 0.39 (not posted) Renamed definitions... PSTR to $PRINT MSOUT to MSBOUT MSINP to MSBIN MSWINP to MSWIN Altered comments and all extra/sample source to match. Modified MSWOUT so that it doesn't send high-byte bits to the MS out vector, could potentially cause problems. However MSBOUT will still happily output 16 bit data thru the vector should you provide it. With the existing code this doesn't matter, but if say the MS out vector were pointing to a true 16-bit IO device then you would use MSBOUT to output the 16 bit data (why these were originally named MSOUT etc... however seeing as I know of no true 16-bit IO devices, MSBOUT better describes it) Added zero-page DIPTR variable for use by definer helpers Added @DIPTR definition to allow high-level definitions to access the pointer, particularly the new definer helpers. Added "extra" definitions to help defining definitions... ADDHEADER - adds header to end of dictionary, name defined by TL/TB1/TB2. Sets DIPTR variable to entry point, pushes length and initial address to the Z stack. ADDCODE - pops value to compile from stack and writes to location specified by DIPTR, increments DIPTR. FIXLINKS - pops initial address and length from the Z stack, writes length to initial address, writes contents of DIPTR to initial address + 3. ADDHEADER$ - pops string, sets TL/TB1/TB2 and runs ADDHEADER. For fooling around with creating defs at the console but can be useful from a definition too if you know the name you wish to define. Normally when defining TOKEN would be used to parse for the name afterwards and set TL/TB1/TB2. To create an empty definition named "TEST"... "TEST" ADDHEADER$ @ENSEC ADDCODE @RTSEC ADDCODE FIXLINKS Modified existing VARIABLE/CONSTANT to make use of new helpers.. needs to output machine code but there is a gotcha in that plan - page boundaries! Sounds unlikely but the very first time I tried I encountered one. Solution.. output NOPs to pad if near the boundary. I put the freaky stuff in an ADDMLVAR definition that VARIABLE and CONSTANT call. Now they output machine code. The created defs require 2 more words, no free lunch. Renamed IBLK to INBLOCK and OBLK to OUTBLOCK. Fixed all occurences in all extra source code. Recoded machine variables (the @ definitions) in machine code, everything seemed to get zippier. ------------------ 0.38 4/11/02 Fixed MTSTATUS definition (oops..) Renamed !BACI definition to BACI to prevent possible conflict with proposed auto-start scheme - potentially have to CONFIG first, or board may not be present, so it can't autostart by default. ------------------ 0.37 4/10/02 Reversed MTWRITE/MTREAD - now specify like 24000 1000 MTWRITE to write 1000 words from memory at 24000. Added MTSTATUS definition - returns mag-tape status. Added !BACI definition for initializing BACI, removed calls to init process from other BACI words. Modifications to "extra" definitions - named VAR to VARIABLE and CONST to CONSTANT. Added MTGEN definition to generate a bootable tape containing HPIPLOS, dictionary and Octapus. Shortened VARIABLE/CONSTANT "help" to keep combined binary under 16K. This time, they were too wordy anyway. ------------------ 0.36 4/8/02 Fixed bug in MS$IN ------------------ 0.35 4/7/02 Now a 16K version.. memory was getting tight. Default start of blocks=24000, End of memory=37777 Added EOD definition to hpasm source, removed DICEND from the extra source and modified other definitions accordingly. Modified SAVE to use EOD to minimise amount of data saved. Modified DEFINE to use EOD. Added MT definitions... (hardcoded to channels 14/15) #words address MTREAD - DMA mag-tape read #words address MTWRITE - DMA mag-tape write MTINIT - initialize mag-tape drive GAP - write inter-record gap GAPMARK - write gap and file mark FS1R - forward space one record BS1R - back space one record FS1F - forward space one file BS1F - back space one file RWLP - rewind to load point RWOL - rewind to off line ------------------ 0.34 4/6/02 Enhanced DEBUG definition.. now displays the name of the word at IR, and displays XP/YP/ZP rather than WA/CA. Doesn't show literal and string pushes but at least I sanitized the garbage. DEBUG now checks before it hooks.. you can insert a DEBUG within your program to initiate tracing at a certain point. Modified DMPS definition.. simplified, all threaded now. No longer waste words with redundant empty stack message. Removed DMPM definition in favor of the much better DUMP. Fixed BACI-init bug.. I hope. Added constants to make defining code more readable... @ANVAL - address of Ascii Number VALue (SDIC sets) @CLH - address of console literal handler Added/modified definitions to "ALL" extensions file... DICEND - pushes the current end of dictionary VAR NAME [n] - defines global NAME variable, optional n=#words CONST NAME value - defines global NAME constant SYSALL - now uses DICEND instead of requesting end from user RND2 - now uses variable @SEED rather than hard-coded memory CONFIG - now patches BACI channels too Note: like all defining/token parsing words, VAR and CONST must not be used from inside a definition. Define your global variables and constants outside of DEFINE/END, before they are used. Example usage... VAR V1 OCTAL DEFINE TEST "PUTTING 123456 INTO V1" PSTR CRLF V1 123456 PUT "V1 IS NOW " PSTR V1 GET PNUM END Extra bonus behaviors.. if you specify length too, then you can define multiple vars or var/define on the same line.. OCTAL VAR V1 1 VAR V2 2 DEFINE TEST ..otherwise terminate VAR declarations with a return. CONST compiles Enter-Secondary address if given a recognised definition for value.. CONST @DUMP DUMP ------------------ 0.33 4/2/02 Slightly modified so ZCOUT/ZCHIN can be used as console vectors.. theoretically if pointed to BACI subs (possibly after BACI has been initialised but maybe not?) ALL console IO should go thru the BACI serial interface, totally replacing the TTY. Fixed bug in $VAL - wasn't totally popping string. Modified extra source.. SYSGEN/SYSALL now writes 20 zeros to terminate ABS file. ------------------ 0.32 4/1/02 Changed literal 0's and 1's to #0 and #1, same with address pushes that are now constants. Saved 41 words for 104 words added to provide the constants, plus another 30 something words in the extra definitions at the moment. Fixed bug in MS$IN Tweeked extra defs - PDEF now can list headerless threads Added words... (for testing, hard-coded to channel 22) MSBACI - init and set mass-storage IO to BACI interface >BACI - init and set print output to go to BACI interface MS - direct PCHR/PNUM/PWRD/PSTR output to mass storage >MS and MS>>S to MSWOUT and MSWINP to match MSOUT and MSINP.. so the basic MS operators are.. MSOUT - pop stack and write byte to MS MSINP - read byte from MS and push to stack MSWOUT - pop stack and write high then low bytes to MS MSWINP - input high then low bytes from MS and push to stack Removed ORG 12000 at the beginning of user defs. Modified SAVE to not require papertape (fully directable now) Fixed potential bug in LOAD.. was requiring even # leader zeros. Added words... MS$OUT - pops and writes string from X to mass storage MS$IN - inputs string from mass storage using redirected $IN MSPAPER - sets mass storage vectors to paper-tape ALLOCATE - pops and allocates specified number of blocks IBLK - pops and sets mass storage input to specified block OBLK - pops and sets mass storage output to specified block GETIP - pushes value of input byte pointer SETIP - pops and sets input byte pointer GETOP - pushes value of output byte pointer SETOP - pops and sets output byte pointer More neat definitions like EXPLAIN, DUMP ABSOUT SYSGEN and OCTAPUS/ODHELP/ODSETUP are included in the "all.txt" source file. Starting with this release, also supplying a combined binary containing the core HP-IPL/OS and dictionary, the extra definitions and the 74000 version of octapus and its help display, renamed OCTAPUS-D. Channels will be set up for my sim, CONFIG/ODSETUP for yours. ------------------ 0.29 3/21/02 Bug-fixes etc... Removed toggling comment from CONIN code - problematic. Changed comment character to a single ";" char to comment to the end of line. Comments ignored within strings. Comment-handling code added to SDIC and "DEFINE". Fixed weirdness at the end of the console input line. Modified leader-skip in LOAD so that it won't hang if the device is not present. ------------------ 0.28 3/19/02 Made single instruction change to CIN code so it'll redirect. Added CNSOL subroutine called by CBOOT SDERR and <>CON word. Moved debugger into "DEBUG" definition.. lots of space now. Fixed subtle bug in $STR, was missing an instruction. Added PTPOT (papertape punch out) and PTRIN (papertape reader in) subroutines with ZPTPO and ZPTRI zero-page links. Added ZMINP, ZMOUT vectors for mass-storage in/out, defaults to PTPOT, PTRIN (papertape) subroutines. Added TTYCH, PTPCH, PTRCH channel number locations in page 0 Added PIOCH subroutine - patch IO channels (called by CBOOT) Added page 0 locations for DTOP, DUSER, DLIM to specify dictionary memory, ENDOM to mark the end of HPIPLOS memory, moved user dictionary start to 12000 for lots of mod room. Modified CIN to ignore linefeeds. Lines must be separated by CR (dec.13) in input (just as with terminal). Dos (CRLF) source can be directly loaded from papertape, Unix-format source (LF only) must be converted to either CR or CRLF format before loading. When entering source via redirection, include <>CON at the end and make sure there's a trailing CRLF. Works! Modified CIN to allow commenting, (this is a comment) Added words... <>CON - resets I/O to console >PTP - redirects output to papertape punch S - reads one byte from mass-storage MS>>S - reads two bytes as word from mass-storage S>MS - writes one byte from mass-storage S>>MS - writes two bytes as word to mass-storage PTZERO - writes 20 zeros to papertape if leader needed SAVE - saves user dictionary and memory to "BIN FILE" LOAD - loads "BIN FILE" into memory [naming bug.. S>MS, MS>S were actually named MSOUT, MSINP] Save/Load format.. " BIN" must appear on a word boundry within 16 words of the first non-zero byte. The next CRLF marks the beginning of the binary. For each block there are start and end address words followed by that many words followed by a checksum - simple addition of all words written. At the end of all blocks a zero word marks the end of file. This was very easy to program in pure hpiplos and practically worked first time around, a very exciting moment! The SAVE definition saves from start of user dictionary to defined top of memory, and memory from 100 to 277. For now... ------------------ 0.27 3/16/02 Machine-coded $XTEST function so other machine code can use its guts, also for speed. Now tests both low and high bounds. Hopefully fixed serial backspace behavior. Changed SNGSP to TCON5. Edited here and there, shorted debug help to make room for code. Changed FORGET prompt. Unknown chars represented by "x". Added... $HEAD - pops 1st character from string and pushes to stack $TAIL - pops last char from string and pushes to stack $APPEND - pops stack and appends to string $CAT - combine two strings into one string $IN - inputs from console/device to string until return $VAL - pops string and pushes its value HP-IPL/OS 8K V0.27 ? WORDS DO LOOP +DO INDEX +LOOX IFNZ IFZ IF<0 ENDIX ELSE UNTIX WHILX EXECXXX AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIXXX OCTAX BINAXX SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S DMPS DMPM END DEFIXX DEBUX PCHR PWRD PSTR S>X X>S S>Y Y>S S>Z Z>S S>SR SR>S MUL DIV ASL ASR ROL ROR WORDX PNEXX RUN X>>Y X>>Z Y>>X Z>>X $SWAX $CPY $DUP $DROX $LEN $ADR $XTEXX $PUT $GET $CREXXX FORGXX CHRIX RND RESTXXX $STR $HEAX $APPXXX $TAIX $IN $CAT $VAL EOD=007513 ------------------ 0.26 3/13/02 Added... $STR - pops stack and converts to string on X Fixed IFx/ELSE/ENDIF nesting bug SDERR reports what was not found (first 4 chars) PCHR, PWRD, CRLF now go thru ZOUT for redirection PSTR from 0.25 removed, named $OUT to PSTR [we don't need an "un-directable" print (too much to explain) and PCHR, PWRD, PNUM, PSTR (like it was) is consistent and easy to remember] EXEC moved to core ("EXECUTE" calls) to make dictionary-swap possible without reassembling HP-IPL/OS. Faster too. NZLOOP renamed to WHILE, ZLOOP renamed to UNTIL Simplified PNUM, now just $STR PSTR 40 PCHR ------------------ 0.25 - 3/11/02 String format on stack is now totally different and better. In addition to overall word-count of the "package" (group of things that can be moved about without disturbing contents), there is now a character count for unlimited binary content. Removed but coming back when I write: $CAT and $IN Not in yet but could really use: $APPEND Modified but work about the same: $LEN, anything that pushed strings, FORGET now confirms before removing, PSTR now directs to console and calls the new redirectable $OUT (char vector in ZOUT), CHRIN is now redirectable (ZIN), $IN will be too when I make it, PNEXT now actually prints the info text. Modified and nothing like old ones: $PUT and $GET - now $PUT takes an element number and byte to write, $GET takes element number and replaces with byte from string. Like mem put/get except operates on string on X and works with bytes. New words... n b $CREATE - create a string on X with n bytes of b $ADR - pushes address of first location of string on X $XTEST - idiot checks to make sure not below XB (not foolproof) $OUT - outputs (and removes) the string on X to device $DUP - duplicate string on X RESTART - restart HP-IPL/OS I think that's about it.. EOD=7052, after $IN, $CAT, $APPEND are added back in it will have grown somewhat but it will do more. ------------------ 0.24 - 3/3/02 Added definitions for... $GET - "pops" one char from the beginning of a string on X to S. Adjusts string length accordingly, if no more characters then returns 0 and removes empty string. $PUT - "pushes" one char from S to the beginning of a string on X. String must exist, use 0 S>X to create empty string. $LEN - returns the true character length of string on X without affecting contents. There must be enough room on both X and Y for a copy of the string being examined. RND - pushes random number to the stack. Well sort-of random.. EOD=6770 ------------------ 0.23 - 3/2/02 Fixed $IN bug. String input is harder than I expected! NEXT at 2552, End of Dictionary at 6622. ------------------ 0.22 - 3/2/02 Strings with spaces can now be entered at the console. Fixed bug regarding isolated quote: " " " " ok now, " " " is a detected error (pushes the first space). Added words... DIV - divides - 6 3 DIV leaves 2 on the stack ASL - arithmetic shift left (multiply by 2) ASR - arithmetic shift right (divide by 2) ROL - rotate left, bit 15 goes to 0 ROR - rotate right, bit 0 goes to 15 FORGET - forgets the last thing defined CHRIN - inputs one char and pushes to the system stack $IN - inputs string and pushes to the X stack End of Dictionary at 6601, NEXT at 2553 (octal) ------------------ 0.21 - 3/1/02 New version numbering to reflect pre-1.0 status. Distributed copy of source converted to uppercase. Totally rewrote the string functions, gone are the T1/T2, replaced by Y and Z stacks. Deleted old string definitions, replaced with 16bit (S>X,S>Y,S>Z, X>S,Y>S,Z>S) and string (X>>Y,X>>Z,Y>>X,Z>>X) transfers and basic string functions ($CAT,$CPY,$SWAP,$DROP) Note $CAT used to be called SPLICE and $SWAP was STRSWAP, trying to establish conventions like $ for string defs and >> for string transfers. Added push-pointer and push-base functions for X/Y/Z, useful for accessing the X/Y/Z stacks as arrays. When the system is at the prompt, the start of the dictionary is moved past flow-control definitions that would crash at the prompt. Call to code to do this is inserted in the outer interpreter to ensure. Code to set to the true beginning of dictionary added to the DEFINE and WORDS definitions. WORDS now prints ? instead of . for extra characters. Can multiply now with MUL but no DIV/MOD yet, coming... Reorganised memory to fill up holes, dictionary now starts at 4000 octal but might need to bump that up if the engine grows too much. Refer to source for exact particulars. Debug now starts right after the engine rather than its own ORG. Edited dictionary code so that things can be moved around without breaking (or seriously distorting) the link chain. Arrange at will but watch page boundries and machine code (threads don't care). Present dictionary.... HP-IPL/OS 8K V0.21 ? WORDS DO LOOP +DO INDE? +LOO? IFNZ IFZ IF<0 ENDI? ELSE ZLOO? NZLO?? EXEC??? AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECI??? OCTA? BINA?? SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S DMPS DMPM END DEFI?? DEBU? PCHR PWRD PSTR S>X X>S S>Y Y>S S>Z Z>S S>SR SR>S MUL WORD? PNEX? RUN X>>Y X>>Z Y>>X Z>>X $SWA? $CAT $CPY $DRO? EOD=006253 ----------------------------------------------------------