HP-IPL/OS 1.5 Build Information =============================== HP-IPL/OS can be built in a variety of ways to support just about any HP21xx minicomputer from the 2114 to the 21MX M/E/F series. Peripheral support is according to what we have available for testing, presently HP-IPL/OS includes drivers for the following... Slot 10 - Time base generator (tbg.ipl) Slot 11 - TTY console interface (built-in) Slot 12 - Papertape Reader (built-in) Slot 13 - Papertape Punch (built-in) Slots 14,15 - 13181/7970 Magtape (magtape.ipl) Slots 16,17 - 13210/7900 disk interface (7900.ipl) Slot 16 - 13037/7906 disk interface (7906.ipl) Slot 17 - HPIB machine interface (hpib.ipl) Slot 20 - 12555 XY plot display (n_rocks.ipl) Slot 20 - 12845 LPT interface (print.ipl) Slot 22 - BACI serial interface (baci.ipl) Slot 23 - Bob Shannon's IDE disk interface (ide.ipl) Most of the slot assignments can be changed using CONFIG, to alter Magtape and XY display slots the affected ipl files must be edited and (re)loaded. Note... the default HPIB slot conflicts with the default 7900 bext/driver, the easiest non-editing way to fix if both are needed is move the HPIB interface to another slot and use CONFIG to change the HPIB slot then regenerate the system (SYSALL DGEN etc). The default LPT slot conflicts with XY, if using both put LPT in a different slot and use CONFIG. Most 32K+ builds include cfge.ipl which allows configuring TTY and optionally BACI slots via the switch register (SR), requires baci.ipl and config.ipl (!SDC) to enable BACI console but can be used alone to set the TTY slot. To reconfigure, after loading via papertape (or any bootloader that halts before running) clear SR, put the TTY slot in SR bits 0-5, and put the BACI slot in bits 6-11. If SR bit 15 is set with SR bits 6-11 zeroed then autostarting is disabled (by making SR 177777), if SR bit 12 is set with SR bits 6-11 containing BACI slot, then configures to use the BACI interface as the console. Run from location 70 (instead of 2) to read the SR bits and reconfigure. I.E to boot to a baci console with the default slot assignments put 12211 in SR, 70 in P and run. The 7906 boot extension can use the cfge reconfig method, if SR bit 5 is set then it halts allowing entry of TTY/BACI slots, continue drops through and runs from location 70. Both the 7900 and 7906 boot extensions auto-detect the drive slots and patch themselves accordingly, so a disk can be moved to a controller in another slot and still boot (run CONFIG afterwards). ABS File Formats ================ The hpos*.abs files were generated by HP-IPL/OS' SYSALL command and include 8 zero bytes at the beginning for the leader and 20 zero bytes at the end. The hpiplos1.abs kernel, 790?bext.abs and oct-d.abs were assembled using the asm21.pl cross-assembler run from a wrapper script that adds a leader of 8 zero bytes. I don't have an official specification for the ABS binary format, the following is as I understand it: Leader - any number of 0 bytes (depends on interface) For each record... Byte - number of words in the record Byte - 0 Byte - high byte of address Byte - low byte of address For each word in record... Byte - high byte of word Byte - low byte of word Byte - high byte of 16-bit checksum of all words in record Byte - low byte of checksum 0 to 4 (?) zero bytes to separate records Trailer - at least 16 (?) zero bytes to terminate load Leading zeros don't seem to cause any problems with the BBL (basic binary loader, aka papertape boot rom) but if loading via BACI the leader needs to be deleted either using a hex editor or by the sending software. Other applications may require hex-editing the ABS files if a specific number of zero leader bytes is required. HP-IPL/OS 8K V1.5 =================== This build is in the hpiplos1.abs file, build date 1/30/08. Assembly source is in the hpiplos1.asm file. ? WORDS DO +DO INDEx +LOOx >STEx IFNZ IFZ IF<0 ENDIx ELSE UNTIx WHILx CASE = < > <= >= <> DEFAxxx ENDCxxx EXECxxx WBOOx AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIxxx OCTAx BINAxx RADIx SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S END EOD DEFIxx DMPS S>SR SR>S PCHR PWRD CHRIx S>X X>S S>Y Y>S S>Z Z>S MUL ASL ASR ROL ROR DIV RUN X>>Y X>>Z Y>>X Z>>X $PRIxx $SWAx $CPY $DUP $DROx $LEN $ADR $XTExx $PUT $GET $CRExxx $STR $HEAx $APPxxx $TAIx $IN $CAT $VAL <>COx >PTP MS STEx IFNZ IFZ IF<0 ENDIx ELSE UNTIx WHILx CASE = < > <= >= <> DEFAxxx ENDCxxx EXECxxx WBOOx AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIxxx OCTAx BINAxx RADIx SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S END EOD DEFIxx DMPS S>SR SR>S PCHR PWRD CHRIx S>X X>S S>Y Y>S S>Z Z>S MUL ASL ASR ROL ROR DIV RUN X>>Y X>>Z Y>>X Z>>X $PRIxx $SWAx $CPY $DUP $DROx $LEN $ADR $XTExx $PUT $GET $CRExxx $STR $HEAx $APPxxx $TAIx $IN $CAT $VAL <>COx >PTP MS TBG TBGZxxx >WDT +WDT -WDT !100xx T>>S TIMExxx PTIMx !WDA !BACx MSBAxx BACx BACIxxx TTYCxx CBUS ?BUS >BUS BUx $ACxxx A>CCxxx USPAxx DMSTxxxx UPTR MSUSxx ABSLxxx GOUSxx GOSYxxxx ALTSxxx ?DMS MKWOxx ENDWxxx DADD D2CPx EMUL EDIV DSWAx $DVAx $DSTx DASL DASR DLSL DLSR DROL DROR FIX FLT FP+ FP- FP* FP/ DFLT DFIX PWR1x $>FP FP>$ FSGN FSQR TTYPx TERMxxxx ESC POS CLS COLOx -COLxx EOD=033601 FREE=024176 Default allocation is 4 1KW data blocks. Package list... Start with hpiplos1.abs extra.ipl (select 32K) oct70.ipl create.ipl debug.ipl version.ipl tbg.ipl baci.ipl hpib.ipl config.ipl cfge.ipl dms.ipl mkword.ipl double.ipl bigshift.ipl float.ipl floatext.ipl hpscreen.ipl TERMINAL to default to ANSI Configuration... Slot 10 - TBG Slot 11 - TTY Slot 12 - PTR Slot 13 - PTP Slot 17 - HPIB Slot 22 - BACI HP-IPL/OS MT 1.51 ================= This build is in the hposmt.abs file, build date 2/13/08. ? WORDS DO +DO INDEx +LOOx >STEx IFNZ IFZ IF<0 ENDIx ELSE UNTIx WHILx CASE = < > <= >= <> DEFAxxx ENDCxxx EXECxxx WBOOx AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIxxx OCTAx BINAxx RADIx SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S END EOD DEFIxx DMPS S>SR SR>S PCHR PWRD CHRIx S>X X>S S>Y Y>S S>Z Z>S MUL ASL ASR ROL ROR DIV RUN X>>Y X>>Z Y>>X Z>>X $PRIxx $SWAx $CPY $DUP $DROx $LEN $ADR $XTExx $PUT $GET $CRExxx $STR $HEAx $APPxxx $TAIx $IN $CAT $VAL <>COx >PTP MS BACx BACIxxx TTYCxx MKWOxx ENDWxxx CFGE !DMS -DMS SDMA UDMA UJUMx SJUMx SPAGx C>ACxxx A>CCxxx USPAxx DMSTxxxx UPTR MSUSxx ABSLxxx GOUSxx GOSYxxxx ALTSxxx ?DMS CONFxx !SDC MTINxx MTRExx MTWRxxx GAP GAPMxxx FS1R BS1R FS1F BS1F RWLP RWOL MTSTxxxx MTBOxx MTWAxx ?MTExxxx EOF RECOxxx FILEx MTSCxx MTGEx IDREx MTDIx DLTF MTSExx MMTIx MTSAxx MTLOxx MS2Mx MT2Mx B2MT MT2B MTSHxx D2MT HELP EOD=032566 FREE=027211 Package list... Start with hpiplos1.abs extra.ipl (select 32K) 3 ALLOCATE for 3KW data memory oct70.ipl create.ipl version.ipl baci.ipl mkword.ipl cfge.ipl dms.ipl config.ipl magtape.ipl mtextra.ipl RENAME +IRQ !IRQ Configuration... Slot 11 - TTY Slot 12 - PTR Slot 13 - PTP Slots 14/15 - Magtape Slot 22 - BACI HP-IPL/OS 7906 1.52 =================== This build is in the hpos7906.abs file, build date 8/1/08. ? WORDS DO +DO INDEx +LOOx >STEx IFNZ IFZ IF<0 ENDIx ELSE UNTIx WHILx CASE = < > <= >= <> DEFAxxx ENDCxxx EXECxxx WBOOx AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIxxx OCTAx BINAxx RADIx SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S END EOD DEFIxx DMPS S>SR SR>S PCHR PWRD CHRIx S>X X>S S>Y Y>S S>Z Z>S MUL ASL ASR ROL ROR DIV RUN X>>Y X>>Z Y>>X Z>>X $PRIxx $SWAx $CPY $DUP $DROx $LEN $ADR $XTExx $PUT $GET $CRExxx $STR $HEAx $APPxxx $TAIx $IN $CAT $VAL <>COx >PTP MS TBG TBGZxxx >WDT +WDT -WDT !100xx T>>S TIMExxx PTIMx !WDA !BACx MSBAxx BACx BACIxxx TTYCxx CBUS ?BUS >BUS BUx $ACxxx A>CCxxx USPAxx DMSTxxxx UPTR MSUSxx ABSLxxx GOUSxx GOSYxxxx ALTSxxx ?DMS MKWOxx ENDWxxx DADD D2CPx EMUL EDIV DSWAx $DVAx $DSTx DASL DASR DLSL DLSR DROL DROR FIX FLT FP+ FP- FP* FP/ DFLT DFIX PWR1x $>FP FP>$ FSGN FSQR TTYPx TERMxxxx ESC POS CLS COLOx -COLxx >IDE FILx UCOMx FSS CWA LAA RAA FPA FSA FCA FNA DNA VNA NDEA DBLA DBHA FSLA FSHA DupCxxxx SCDRx RCDRx ChkBxx ChkDxx DIRExxxxx REOPxx OPEN SEEK DirUxxxxx CLOSx CNF DEL BCOPx RELExxx ?SFS -SFS D2F FCOPx FMOVx FDUP MS2F F2MS ABS2x VRECxxxx XRECxxxx XINIx DHELx EOD=053155 FREE=010622 Package list... Start with hposdms.abs 2 ALLOCATE disk.ipl xdos.ipl 7906.ipl sfs.ipl (updated) sfsutils.ipl xutils.ipl dhelp.ipl Configuration... Slot 10 - TBG Slot 11 - TTY Slot 12 - PTR Slot 13 - PTP Slot 16 - 7906 Slot 17 - HPIB Slot 22 - BACI HP-IPL/OS DEMO 1.51J ==================== This build is in the hposdemo.abs file, build date 4/6/08. ? WORDS DO +DO INDEx +LOOx >STEx IFNZ IFZ IF<0 ENDIx ELSE UNTIx WHILx CASE = < > <= >= <> DEFAxxx ENDCxxx EXECxxx WBOOx AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIxxx OCTAx BINAxx RADIx SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S END EOD DEFIxx DMPS S>SR SR>S PCHR PWRD CHRIx S>X X>S S>Y Y>S S>Z Z>S MUL ASL ASR ROL ROR DIV RUN X>>Y X>>Z Y>>X Z>>X $PRIxx $SWAx $CPY $DUP $DROx $LEN $ADR $XTExx $PUT $GET $CRExxx $STR $HEAx $APPxxx $TAIx $IN $CAT $VAL <>COx >PTP MS TBG TBGZxxx >WDT +WDT -WDT !100xx T>>S TIMExxx PTIMx !WDA !BACx MSBAxx BACx BACIxxx TTYCxx CBUS ?BUS >BUS BUx $ACxxx A>CCxxx USPAxx DMSTxxxx UPTR MSUSxx ABSLxxx GOUSxx GOSYxxxx ALTSxxx ?DMS MKWOxx ENDWxxx DADD D2CPx EMUL EDIV DSWAx $DVAx $DSTx DASL DASR DLSL DLSR DROL DROR FIX FLT FP+ FP- FP* FP/ DFLT DFIX PWR1x $>FP FP>$ FSGN FSQR TTYPx TERMxxxx ESC POS CLS COLOx -COLxx !NOLx ZAM HLT ALTRxx RUNAxx PTHExxxx AAOUx ALTAxx ALTDxxx CLRHxxx ALTHxxx +TD -TD >TD -GD +GD >GD *GT !PRN CKPRx MSPRx +PE -PE CPAG MPAG CLIN CCOL GCHR INSM AMTW PDGC PSGC LNLEx MVWA DISL DIBUx GPAGx PPAGx PBYTx GBYTx UDCHx UDLIx AEBS STMPxx TRCAx AEDIx 78PAx ARLIxxx CKARxxx STTSx STFLx MALOxx MASAxx CALOxx CALIxx ALOAx ALTExx CONGxx ALTGxx CONAxx ECAL DELAx SHOW CYLOx CYLOxx SPEEx 1DCA 1DCAxxx MAZE TTYSxxx TTYGxx LIFE EOD=056362 FREE=003415 Configuration... Slot 10 - Time base generator Slot 11 - TTY console interface Slot 12 - Papertape Reader Slot 13 - Papertape Punch Slot 17 - HPIB machine interface Slot 20 - LPT interface Slot 22 - BACI serial interface Build list... Start with hposdms.abs 3 ALLOCATE nolf.ipl altutil.ipl hp2645.ipl print.ipl fed.ipl (updated) fedutil.ipl (updated) conalt.ipl ecal.ipl cylons.ipl 1dca.ipl maze.ipl ttyscan.ipl FORGET TTYDEMO life.ipl Default is set to ANSI/VT100-compatible screen codes, if using on a HP terminal enter TERMINAL to switch to HP mode. The setting sticks if the build is punched using SYSALL or otherwise saved. If using on a HP2645 terminal also enter *GT to enable a regular text mode. Loaded demos and utilities... MAZE - a maze game 1DCA - one-dimensional cellular automata generator LIFE - Conway's Game of Life [number] CYLONS - displays "cylons" display on switch register ECAL - an electronics calculator RUNABS - loads ABS file attached to PTR (run 77000 to return to HP-IPL/OS) CONGEN - dumps system to console as text-encoded binary ALTGEN - dumps alt.mem to console as text-encoded binary CONALT - loads text-encoded binary into alt.mem AEDIT - edits IPL/text in alt mem (see below for quick-help) ZAM - clears alt.mem (use before editing new file) ALOAD - loads edited IPL code MALOAD - loads MS (PTR) into alt.mem for editing (must end w/ ~TERMINATE~) MASAVE - saves alt.mem to MS (PTP) (adds ~TERMINATE~) CALOAD - loads file pasted to console for editing (enter ~TERMINATE~ to stop) CALIST - lists edited file to console MSPRN - redirects MS out to printer, MSPAPER to return MS to PTR/PTP +PE - enable and disable printer echo for logging commands and output -PE - turn off printer echo To print edited text do MSPRN MASAVE but that adds ~TERMINATE~ to output. If that's not OK enter this APRINT word (use AEDIT then ALOAD)... OCTAL DEFINE APRINT CKARRAY IFZ 2 MSUSER MSPRN #1 ARLINES GET +DO MS$IN STTSP MS$OUT MSCRLF +LOOP MSPAPER ENDIF END CONSOLE Using AEDIT... AEDIT edits data in alternate memory in "array" format, each line is 78 characters with a CRLF in columns 79/80. Data is edited 23 lines at a time, up to 34 pages numbered 00 to 41 octal. Internally AEDIT supports partial pages but as soon as the page is displayed the rest of a partial page is converted to spaces. Upon exit alt mem is zeroed after the last line of non-space data, and the MPAG variable contains the last page number. If using a HP terminal make sure TERMINAL is set to HP mode, default for the "demo" build is VT100/ANSI. Enter ZAM to clear alternate memory before starting a new edit file, AEDIT resumes editing on the page it was on when last exited. Once started the following keystrokes are available... Enter - move the cursor to the start of next line, paging if needed Backspace - deletes previous character, if insert mode moves rest of line Control-A - move the cursor left Control-S - move the cursor right Control-W - move the cursor up Control-Z - move the cursor down Control-V - show the next page Control-C - show the previous page Control-P - go to a specified page Control-D - delete the line the cursor is on (careful!) Control-I - insert a blank line at cursor, pushing everything down Control-T - toggle insert/overwrite mode (on line only) Control-N - select graphics character set (HP terminals only) Control-O - select regular character set Control-Q - quit editing Once an IPL masterpiece has been created (and the editor exited) it can be loaded into the dictionary by doing ALOAD. When doing repeated edits of the same word don't forget to FORGET the previous version to avoid dups and overflowing the dictionary. To save the edited file attach PTP to an output medium - for real hardware stick an eeprom in your PTP emu or however you do it, under sim press control-E and enter attach ptp filename.ext (substitute name, great.ipl, story.txt etc) then enter c to continue the simulation. Enter MASAVE to punch the edited data. Alternatively, set the terminal to capture and enter CALIST (or copy the listed data from the screen). To reload, attach PTR to file and enter MALOAD, or enter CALOAD and paste the data to the screen. Pasting text requires a terminal emulation that permits setting character and line delays.. HyperTerminal, ProComm etc. HP-IPL/OS 16K 1.51 ================== This build is in the hpos16k.abs file, build date 2/13/08. It is intended for older machines such as the 2116 with 16KW memory. ? WORDS DO +DO INDEx +LOOx >STEx IFNZ IFZ IF<0 ENDIx ELSE UNTIx WHILx CASE = < > <= >= <> DEFAxxx ENDCxxx EXECxxx WBOOx AND OR XOR ADD SUB INC DEC NOT 2CPL DUP DROP OVER ROT SWAP GET PUT PNUM CRLF DECIxxx OCTAx BINAxx RADIx SP>S SB>S XP>S XB>S YP>S YB>S ZP>S ZB>S END EOD DEFIxx DMPS S>SR SR>S PCHR PWRD CHRIx S>X X>S S>Y Y>S S>Z Z>S MUL ASL ASR ROL ROR DIV RUN X>>Y X>>Z Y>>X Z>>X $PRIxx $SWAx $CPY $DUP $DROx $LEN $ADR $XTExx $PUT $GET $CRExxx $STR $HEAx $APPxxx $TAIx $IN $CAT $VAL <>COx >PTP MS