From ac01070ff9977f0b9c2645898f038f238755739d Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Wed, 3 Mar 2021 16:03:32 +0000 Subject: [PATCH] Removed files which shouldnt be on git --- .gitignore | 85 +- software/CPM/CPM00_MZ800/asm.com | Bin 8192 -> 0 bytes software/CPM/CPM00_MZ800/copy.asm | 142 - software/CPM/CPM00_MZ800/copydisk.com | Bin 2048 -> 0 bytes software/CPM/CPM00_MZ800/copysys.com | Bin 2048 -> 0 bytes software/CPM/CPM00_MZ800/ddt.com | Bin 4864 -> 0 bytes software/CPM/CPM00_MZ800/del.com | Bin 512 -> 0 bytes software/CPM/CPM00_MZ800/diskdef.com | Bin 3584 -> 0 bytes software/CPM/CPM00_MZ800/diskedit.com | Bin 7680 -> 0 bytes software/CPM/CPM00_MZ800/dump.asm | 209 - software/CPM/CPM00_MZ800/ed.com | Bin 6656 -> 0 bytes software/CPM/CPM00_MZ800/eject.com | Bin 128 -> 0 bytes software/CPM/CPM00_MZ800/files.com | Bin 1152 -> 0 bytes software/CPM/CPM00_MZ800/format.com | Bin 4096 -> 0 bytes software/CPM/CPM00_MZ800/load.com | Bin 1792 -> 0 bytes software/CPM/CPM00_MZ800/pcpm.sys | Bin 14848 -> 0 bytes software/CPM/CPM00_MZ800/pip.com | Bin 7168 -> 0 bytes software/CPM/CPM00_MZ800/random.asm | 345 - software/CPM/CPM00_MZ800/setup.com | Bin 9472 -> 0 bytes software/CPM/CPM00_MZ800/stat.com | Bin 4608 -> 0 bytes software/CPM/CPM00_MZ800/submit.com | Bin 1280 -> 0 bytes software/CPM/CPM00_MZ800/terminal.asm | 53 - software/CPM/CPM00_MZ800/time.com | Bin 768 -> 0 bytes software/CPM/CPM00_MZ800/vccp.cfg | 13 - software/CPM/CPM00_MZ800/vccp.com | Bin 7680 -> 0 bytes software/CPM/CPM00_MZ800/xsub.com | Bin 1024 -> 0 bytes software/CPM/CPM00_SYSTEM/BBCBASIC.COM | Bin 13696 -> 0 bytes software/CPM/CPM00_SYSTEM/DDT.COM | Bin 4864 -> 0 bytes software/CPM/CPM00_SYSTEM/ZSID-FIX.DOC | 74 - software/CPM/CPM00_SYSTEM/ZSID-PAT.COM | Bin 10240 -> 0 bytes software/CPM/CPM00_SYSTEM/ZSID.COM | Bin 10240 -> 0 bytes software/CPM/CPM00_SYSTEM/ZSID.PAT | 37 - software/CPM/CPM00_SYSTEM/ZSID_ORIG.COM | Bin 10240 -> 0 bytes software/CPM/CPM00_SYSTEM/asciart.bas | 23 - software/CPM/CPM00_SYSTEM/asm.com | Bin 8192 -> 0 bytes software/CPM/CPM00_SYSTEM/autoexec.sub | 3 - software/CPM/CPM00_SYSTEM/autoexec.txt | 12 - software/CPM/CPM00_SYSTEM/d.com | Bin 1408 -> 0 bytes software/CPM/CPM00_SYSTEM/ddt.com | Bin 4864 -> 0 bytes software/CPM/CPM00_SYSTEM/dump.com | Bin 512 -> 0 bytes software/CPM/CPM00_SYSTEM/ed.com | Bin 6656 -> 0 bytes software/CPM/CPM00_SYSTEM/genhex.com | Bin 768 -> 0 bytes software/CPM/CPM00_SYSTEM/gpeled.bas | 61 - software/CPM/CPM00_SYSTEM/gpio.bas | 82 - software/CPM/CPM00_SYSTEM/hello.asm | 33 - software/CPM/CPM00_SYSTEM/hello.com | Bin 128 -> 0 bytes software/CPM/CPM00_SYSTEM/load.com | Bin 1792 -> 0 bytes software/CPM/CPM00_SYSTEM/mac.com | Bin 16384 -> 0 bytes software/CPM/CPM00_SYSTEM/mbasic.com | Bin 24576 -> 0 bytes software/CPM/CPM00_SYSTEM/mbasic85.com | Bin 24320 -> 0 bytes software/CPM/CPM00_SYSTEM/peg.com | Bin 7296 -> 0 bytes software/CPM/CPM00_SYSTEM/pip.com | Bin 7680 -> 0 bytes software/CPM/CPM00_SYSTEM/rtc.bas | 19 - software/CPM/CPM00_SYSTEM/startrek.bas | 446 - software/CPM/CPM00_SYSTEM/stat.com | Bin 5376 -> 0 bytes software/CPM/CPM00_SYSTEM/submit.com | Bin 1280 -> 0 bytes software/CPM/CPM00_SYSTEM/trekinst.bas | 133 - software/CPM/CPM00_SYSTEM/userled.bas | 33 - software/CPM/CPM00_SYSTEM/xmodem.cfg | 210 - software/CPM/CPM00_SYSTEM/xmodem.com | Bin 4224 -> 0 bytes software/CPM/CPM00_SYSTEM/xsub.com | Bin 768 -> 0 bytes software/CPM/CPM00_SYSTEM/zde16.com | Bin 16896 -> 0 bytes software/CPM/CPM00_SYSTEM/zdenst16.com | Bin 10624 -> 0 bytes software/CPM/CPM01_TURBOP/art.txt | 263 - software/CPM/CPM01_TURBOP/readme.txt | 1 - software/CPM/CPM01_TURBOP/sa.pas | 65 - software/CPM/CPM01_TURBOP/tinst.com | Bin 25472 -> 0 bytes software/CPM/CPM01_TURBOP/tinst.dta | Bin 4992 -> 0 bytes software/CPM/CPM01_TURBOP/tinst.msg | Bin 4096 -> 0 bytes software/CPM/CPM01_TURBOP/turbo.com | Bin 30720 -> 0 bytes software/CPM/CPM01_TURBOP/turbo.msg | 101 - software/CPM/CPM01_TURBOP/turbo.ovr | Bin 1152 -> 0 bytes software/CPM/CPM01_TURBOP/turbomsg.ovr | Bin 1280 -> 0 bytes software/CPM/CPM02_HI_C/$exec.com | Bin 1152 -> 0 bytes software/CPM/CPM02_HI_C/assert.h | Bin 512 -> 0 bytes software/CPM/CPM02_HI_C/c.com | Bin 19456 -> 0 bytes software/CPM/CPM02_HI_C/cgen.com | Bin 44288 -> 0 bytes software/CPM/CPM02_HI_C/conio.h | Bin 640 -> 0 bytes software/CPM/CPM02_HI_C/cpm.h | Bin 3584 -> 0 bytes software/CPM/CPM02_HI_C/cpp.com | Bin 25984 -> 0 bytes software/CPM/CPM02_HI_C/cref.com | Bin 16896 -> 0 bytes software/CPM/CPM02_HI_C/crtcpm.obj | Bin 384 -> 0 bytes software/CPM/CPM02_HI_C/ctype.h | Bin 896 -> 0 bytes software/CPM/CPM02_HI_C/debug.com | Bin 13568 -> 0 bytes software/CPM/CPM02_HI_C/dehuff.com | Bin 12032 -> 0 bytes software/CPM/CPM02_HI_C/exec.h | Bin 384 -> 0 bytes software/CPM/CPM02_HI_C/float.h | Bin 2176 -> 0 bytes software/CPM/CPM02_HI_C/hitech.h | Bin 2048 -> 0 bytes software/CPM/CPM02_HI_C/libc.lib | Bin 61056 -> 0 bytes software/CPM/CPM02_HI_C/libf.lib | Bin 25472 -> 0 bytes software/CPM/CPM02_HI_C/libr.com | Bin 18048 -> 0 bytes software/CPM/CPM02_HI_C/limits.h | Bin 768 -> 0 bytes software/CPM/CPM02_HI_C/link.com | Bin 30080 -> 0 bytes software/CPM/CPM02_HI_C/math.h | Bin 512 -> 0 bytes software/CPM/CPM02_HI_C/objtohex.com | Bin 24448 -> 0 bytes software/CPM/CPM02_HI_C/optim.com | Bin 28160 -> 0 bytes software/CPM/CPM02_HI_C/p1.com | Bin 39936 -> 0 bytes software/CPM/CPM02_HI_C/readme.txt | 18 - software/CPM/CPM02_HI_C/rrtcpm.obj | Bin 768 -> 0 bytes software/CPM/CPM02_HI_C/setjmp.h | Bin 256 -> 0 bytes software/CPM/CPM02_HI_C/signal.h | Bin 1152 -> 0 bytes software/CPM/CPM02_HI_C/stat.h | Bin 768 -> 0 bytes software/CPM/CPM02_HI_C/stdarg.h | Bin 256 -> 0 bytes software/CPM/CPM02_HI_C/stddef.h | Bin 384 -> 0 bytes software/CPM/CPM02_HI_C/stdio.h | Bin 2560 -> 0 bytes software/CPM/CPM02_HI_C/stdlib.h | Bin 1024 -> 0 bytes software/CPM/CPM02_HI_C/string.h | Bin 1280 -> 0 bytes software/CPM/CPM02_HI_C/sys.h | Bin 1024 -> 0 bytes software/CPM/CPM02_HI_C/time.h | Bin 896 -> 0 bytes software/CPM/CPM02_HI_C/unixio.h | Bin 768 -> 0 bytes software/CPM/CPM02_HI_C/zas.com | Bin 37632 -> 0 bytes software/CPM/CPM03_FORTRAN80/cpmio.mac | 87 - software/CPM/CPM03_FORTRAN80/crcklist.crc | 16 - software/CPM/CPM03_FORTRAN80/cref80.com | Bin 3968 -> 0 bytes software/CPM/CPM03_FORTRAN80/dskdrv.mac | 860 -- software/CPM/CPM03_FORTRAN80/dtbf.mac | 56 - software/CPM/CPM03_FORTRAN80/f80.com | Bin 27264 -> 0 bytes software/CPM/CPM03_FORTRAN80/fchain.mac | 460 - software/CPM/CPM03_FORTRAN80/forlib.rel | Bin 26752 -> 0 bytes software/CPM/CPM03_FORTRAN80/init.mac | 51 - software/CPM/CPM03_FORTRAN80/ioinit.mac | 41 - software/CPM/CPM03_FORTRAN80/l80.com | Bin 10752 -> 0 bytes software/CPM/CPM03_FORTRAN80/lib.com | Bin 4736 -> 0 bytes software/CPM/CPM03_FORTRAN80/lptdrv.mac | 112 - software/CPM/CPM03_FORTRAN80/luntb.mac | 23 - software/CPM/CPM03_FORTRAN80/m80.com | Bin 20096 -> 0 bytes software/CPM/CPM03_FORTRAN80/readme.txt | 1 - software/CPM/CPM03_FORTRAN80/ttydrv.mac | 235 - software/CPM/CPM04_MBASIC/bascom.com | Bin 32768 -> 0 bytes software/CPM/CPM04_MBASIC/bascom.hlp | 379 - software/CPM/CPM04_MBASIC/bascom2.hlp | 691 - software/CPM/CPM04_MBASIC/baslib.rel | Bin 24960 -> 0 bytes software/CPM/CPM04_MBASIC/brun.com | Bin 15488 -> 0 bytes software/CPM/CPM04_MBASIC/cref.com | Bin 3968 -> 0 bytes software/CPM/CPM04_MBASIC/cref80.com | Bin 3968 -> 0 bytes software/CPM/CPM04_MBASIC/l80.com | Bin 10752 -> 0 bytes software/CPM/CPM04_MBASIC/lib80.com | Bin 4736 -> 0 bytes software/CPM/CPM04_MBASIC/m80.com | Bin 20096 -> 0 bytes software/CPM/CPM04_MBASIC/mbasic.com | Bin 24320 -> 0 bytes software/CPM/CPM04_MBASIC/obslib.rel | Bin 48384 -> 0 bytes software/CPM/CPM04_MBASIC/rantest.asc | Bin 640 -> 0 bytes software/CPM/CPM04_MBASIC/rantest.bas | 17 - software/CPM/CPM04_MBASIC/rantest.com | Bin 1408 -> 0 bytes software/CPM/CPM04_MBASIC/rantest.rel | Bin 640 -> 0 bytes software/CPM/CPM04_MBASIC/readme.txt | 54 - software/CPM/CPM04_MBASIC/sample.bas | 2 - software/CPM/CPM04_MBASIC/sample.com | Bin 640 -> 0 bytes software/CPM/CPM04_MBASIC/sample.rel | Bin 256 -> 0 bytes software/CPM/CPM05_COBOL80_v13/CB80.COM | Bin 5248 -> 0 bytes software/CPM/CPM05_COBOL80_v13/CB80.IRL | Bin 19968 -> 0 bytes software/CPM/CPM05_COBOL80_v13/CB80.OV1 | Bin 13568 -> 0 bytes software/CPM/CPM05_COBOL80_v13/CB80.OV2 | Bin 13568 -> 0 bytes software/CPM/CPM05_COBOL80_v13/CB80.OV3 | Bin 16000 -> 0 bytes software/CPM/CPM05_COBOL80_v13/LK80.COM | Bin 7040 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CB80.COM | Bin 5632 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CB80.IRL | Bin 34688 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CB80.OV1 | Bin 15616 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CB80.OV2 | Bin 15232 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CB80.OV3 | Bin 16512 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CBASE2.COM | Bin 20992 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CIRCOM.BAS | Bin 1536 -> 0 bytes software/CPM/CPM06_COBOL80_v20/CRUN2.COM | Bin 17408 -> 0 bytes software/CPM/CPM06_COBOL80_v20/DEMOGRAF.BAS | 412 - software/CPM/CPM06_COBOL80_v20/GRAPHCOM.BAS | 4 - software/CPM/CPM06_COBOL80_v20/GRAPHR.BAS | 321 - software/CPM/CPM06_COBOL80_v20/GSXPREP.BAS | 16 - software/CPM/CPM06_COBOL80_v20/LIB.COM | Bin 7168 -> 0 bytes software/CPM/CPM06_COBOL80_v20/LINK.COM | Bin 15744 -> 0 bytes software/CPM/CPM06_COBOL80_v20/LK80.COM | Bin 6912 -> 0 bytes software/CPM/CPM06_COBOL80_v20/READ.ME | 780 - software/CPM/CPM06_COBOL80_v20/TSTCIR.BAS | 46 - software/CPM/CPM07_COBOL80/CALL.ASM | 23 - software/CPM/CPM07_COBOL80/CALL.CBL | 26 - software/CPM/CPM07_COBOL80/CALL.INT | Bin 1280 -> 0 bytes software/CPM/CPM07_COBOL80/CALL.PRL | Bin 277 -> 0 bytes software/CPM/CPM07_COBOL80/CLI | Bin 2816 -> 0 bytes software/CPM/CPM07_COBOL80/CLI.CBL | 240 - software/CPM/CPM07_COBOL80/CLI.COM | Bin 25085 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL | Bin 22808 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.COM | Bin 34583 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.ERR | 160 - software/CPM/CPM07_COBOL80/COBOL.I51 | Bin 13824 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.I52 | Bin 19967 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.I53 | Bin 10240 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.I56 | Bin 2560 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.I59 | Bin 8704 -> 0 bytes software/CPM/CPM07_COBOL80/COBOL.ISR | Bin 256 -> 0 bytes software/CPM/CPM07_COBOL80/CONFIG | Bin 14080 -> 0 bytes software/CPM/CPM07_COBOL80/IXSIO.INT | Bin 15896 -> 0 bytes software/CPM/CPM07_COBOL80/PI.CBL | 83 - software/CPM/CPM07_COBOL80/RUN.COM | Bin 26282 -> 0 bytes software/CPM/CPM07_COBOL80/STOCK1.CBL | 59 - software/CPM/CPM07_COBOL80/STOCK2.CBL | 119 - software/CPM/CPM07_COBOL80/TESTCALL.CBL | 19 - software/CPM/CPM07_COBOL80/TESTCALL.INT | Bin 1280 -> 0 bytes software/CPM/CPM08_Z80FORTH/%DISC.DOC | 27 - software/CPM/CPM08_Z80FORTH/280FORTH | 4071 ------ software/CPM/CPM08_Z80FORTH/280FORTH.280 | 4071 ------ software/CPM/CPM08_Z80FORTH/280FORTH.COM | Bin 6912 -> 0 bytes software/CPM/CPM08_Z80FORTH/280FORTH.HEX | 215 - software/CPM/CPM08_Z80FORTH/280FORTH.MAC | 4210 ------ software/CPM/CPM08_Z80FORTH/280FORTH.OCM | Bin 6912 -> 0 bytes software/CPM/CPM08_Z80FORTH/280FORTH.OZ8 | 4162 ------ software/CPM/CPM08_Z80FORTH/280FORTH.UPD | 44 - software/CPM/CPM08_Z80FORTH/280FORTH.Z80 | 4207 ------ software/CPM/CPM08_Z80FORTH/CONPRTIO.280 | 149 - software/CPM/CPM08_Z80FORTH/CONPRTIO.Z80 | 157 - software/CPM/CPM08_Z80FORTH/DISCIO.280 | 424 - software/CPM/CPM08_Z80FORTH/DISCIO.Z80 | 429 - software/CPM/CPM08_Z80FORTH/EDITOR.DOC | 71 - software/CPM/CPM08_Z80FORTH/PIP.COM | Bin 7424 -> 0 bytes software/CPM/CPM08_Z80FORTH/SCREENS.FRT | Bin 62464 -> 0 bytes software/CPM/CPM08_Z80FORTH/SETGETCL.280 | 79 - software/CPM/CPM08_Z80FORTH/STARTUP.FRT | 1 - software/CPM/CPM08_Z80FORTH/STAT.COM | Bin 5376 -> 0 bytes software/CPM/CPM08_Z80FORTH/XDIR.COM | Bin 2816 -> 0 bytes software/CPM/CPM08_Z80FORTH/Z280.MAC | 149 - software/CPM/CPM09_CPMTEX/TEX.COM | Bin 7424 -> 0 bytes software/CPM/CPM09_CPMTEX/TEXP.COM | Bin 7424 -> 0 bytes software/CPM/CPM09_CPMTEX/TEXPAT1.ASM | 33 - software/CPM/CPM09_CPMTEX/TEXPAT1.HEX | 5 - software/CPM/CPM09_CPMTEX/TEXPAT1.PRN | 35 - software/CPM/CPM09_CPMTEX/TEXPAT2.ASM | 28 - software/CPM/CPM09_CPMTEX/TEXPAT2.HEX | 4 - software/CPM/CPM09_CPMTEX/TEXPAT2.PRN | 29 - software/CPM/CPM10_DISKUTILFUNC5/DUF05.ASM | 3244 ----- software/CPM/CPM10_DISKUTILFUNC5/DUF05.COM | Bin 7424 -> 0 bytes software/CPM/CPM10_DISKUTILFUNC5/DUF05.PDF | Bin 10482 -> 0 bytes software/CPM/CPM11_MAC80/BUTTONS.LIB | 15 - software/CPM/CPM11_MAC80/COMPARE.LIB | 59 - software/CPM/CPM11_MAC80/DISK.DOC | 24 - software/CPM/CPM11_MAC80/DOWHILE.LIB | 41 - software/CPM/CPM11_MAC80/DSTACK.LIB | 468 - software/CPM/CPM11_MAC80/I8085.LIB | 17 - software/CPM/CPM11_MAC80/INTER.LIB | 80 - software/CPM/CPM11_MAC80/MAC.COM | Bin 11776 -> 0 bytes software/CPM/CPM11_MAC80/NCOMPARE.LIB | 77 - software/CPM/CPM11_MAC80/NSWP.COM | Bin 11008 -> 0 bytes software/CPM/CPM11_MAC80/PIP.COM | Bin 7040 -> 0 bytes software/CPM/CPM11_MAC80/READ.ME | 2 - software/CPM/CPM11_MAC80/SAMPLE.ASM | 11 - software/CPM/CPM11_MAC80/SELECT.LIB | 74 - software/CPM/CPM11_MAC80/SEQIO.LIB | 439 - software/CPM/CPM11_MAC80/SIMPIO.LIB | 26 - software/CPM/CPM11_MAC80/STACK.LIB | 56 - software/CPM/CPM11_MAC80/TREADLES.LIB | 21 - software/CPM/CPM11_MAC80/WHEN.LIB | 36 - software/CPM/CPM11_MAC80/Z80.DOC | 402 - software/CPM/CPM11_MAC80/Z80.LIB | 601 - .../CPM/CPM12_PASCALMTP_v561/AMD9511X.CMD | 3 - software/CPM/CPM12_PASCALMTP_v561/AMDIO.SRC | 35 - software/CPM/CPM12_PASCALMTP_v561/APUSUB.MAC | 99 - software/CPM/CPM12_PASCALMTP_v561/ATWNB.SRC | 95 - .../CPM/CPM12_PASCALMTP_v561/BCDREALS.ERL | Bin 3328 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/CALC.SRC | 110 - software/CPM/CPM12_PASCALMTP_v561/CHN.MAC | 72 - software/CPM/CPM12_PASCALMTP_v561/CPMRD.SRC | 26 - software/CPM/CPM12_PASCALMTP_v561/CWT.MAC | 56 - .../CPM/CPM12_PASCALMTP_v561/DBUGHELP.TXT | 23 - .../CPM/CPM12_PASCALMTP_v561/DEBUGGER.ERL | Bin 11392 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/DIS8080.COM | Bin 22784 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/DIV.MAC | 325 - software/CPM/CPM12_PASCALMTP_v561/FIBDEF.LIB | 25 - software/CPM/CPM12_PASCALMTP_v561/FPREALS.ERL | Bin 7680 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/FPRTNS.ERL | Bin 1408 -> 0 bytes .../CPM/CPM12_PASCALMTP_v561/FULLHEAP.ERL | Bin 2432 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/GET.SRC | 48 - software/CPM/CPM12_PASCALMTP_v561/HLT.MAC | 18 - software/CPM/CPM12_PASCALMTP_v561/INDEXER.DOC | 9 - software/CPM/CPM12_PASCALMTP_v561/INDEXER.PAS | Bin 6656 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/IOCHK.BLD | 4 - software/CPM/CPM12_PASCALMTP_v561/IOERR.SRC | 27 - software/CPM/CPM12_PASCALMTP_v561/LIBMT.COM | Bin 23808 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/LINKMT.COM | Bin 12032 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MOD1.SRC | 13 - software/CPM/CPM12_PASCALMTP_v561/MOD2.SRC | 12 - software/CPM/CPM12_PASCALMTP_v561/MTERRS.TXT | 134 - software/CPM/CPM12_PASCALMTP_v561/MTPLUS.000 | Bin 13056 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.001 | Bin 11136 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.002 | Bin 7168 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.003 | Bin 7424 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.004 | Bin 17024 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.005 | Bin 8704 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.006 | Bin 6272 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/MTPLUS.COM | Bin 36224 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/OVLMGR.MAC | 450 - software/CPM/CPM12_PASCALMTP_v561/PASLIB.ERL | Bin 24960 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/PINI.SRC | 78 - software/CPM/CPM12_PASCALMTP_v561/PROG.SRC | 34 - software/CPM/CPM12_PASCALMTP_v561/PUT.SRC | 23 - .../CPM/CPM12_PASCALMTP_v561/RANDOMIO.ERL | Bin 2688 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/READ.ME | 727 - software/CPM/CPM12_PASCALMTP_v561/RNB.SRC | 95 - software/CPM/CPM12_PASCALMTP_v561/RNC.SRC | 32 - software/CPM/CPM12_PASCALMTP_v561/ROVLMGR.ERL | Bin 896 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/RST.MAC | 196 - software/CPM/CPM12_PASCALMTP_v561/SPPFIX.COM | Bin 19840 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/STRIP.CMD | 2 - software/CPM/CPM12_PASCALMTP_v561/STRIP.SRC | 165 - .../CPM/CPM12_PASCALMTP_v561/TRAN9511.ERL | Bin 512 -> 0 bytes .../CPM/CPM12_PASCALMTP_v561/TRAN9511.SRC | 57 - .../CPM/CPM12_PASCALMTP_v561/TRANCEND.ERL | Bin 3328 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/UTILMOD.ERL | Bin 384 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/UTILMOD.SRC | 52 - software/CPM/CPM12_PASCALMTP_v561/WNC.SRC | 25 - software/CPM/CPM12_PASCALMTP_v561/XBDOS.SRC | 57 - software/CPM/CPM12_PASCALMTP_v561/XREF.COM | Bin 26368 -> 0 bytes software/CPM/CPM12_PASCALMTP_v561/XREF.DOC | 23 - software/CPM/CPM12_PASCALMTP_v561/XREF.SRC | 504 - software/CPM/CPM13_MTPUG_01/ARCTAN.ERL | Bin 896 -> 0 bytes software/CPM/CPM13_MTPUG_01/ARCTAN.SRC | 85 - software/CPM/CPM13_MTPUG_01/CMPXLIB.ERL | Bin 1536 -> 0 bytes software/CPM/CPM13_MTPUG_01/CMPXLIB.SRC | 91 - software/CPM/CPM13_MTPUG_01/CMPXTEST.COM | Bin 14592 -> 0 bytes software/CPM/CPM13_MTPUG_01/CMPXTEST.ERL | Bin 1280 -> 0 bytes software/CPM/CPM13_MTPUG_01/CMPXTEST.SRC | 55 - software/CPM/CPM13_MTPUG_01/CP#M-DEC.DOC | 106 - software/CPM/CPM13_MTPUG_01/CPMTODEC.COM | Bin 3840 -> 0 bytes software/CPM/CPM13_MTPUG_01/DECTOCPM.COM | Bin 3584 -> 0 bytes software/CPM/CPM13_MTPUG_01/EXP.ERL | Bin 1152 -> 0 bytes software/CPM/CPM13_MTPUG_01/EXP.SRC | 130 - software/CPM/CPM13_MTPUG_01/F.PAS | 14 - software/CPM/CPM13_MTPUG_01/FILSIZ.ERL | Bin 256 -> 0 bytes software/CPM/CPM13_MTPUG_01/FILSIZ.SRC | 18 - software/CPM/CPM13_MTPUG_01/GNB.ERL | Bin 384 -> 0 bytes software/CPM/CPM13_MTPUG_01/GNB.SRC | 58 - software/CPM/CPM13_MTPUG_01/GNBCHK.COM | Bin 14848 -> 0 bytes software/CPM/CPM13_MTPUG_01/GNBCHK.ERL | Bin 1408 -> 0 bytes software/CPM/CPM13_MTPUG_01/GNBCHK.SRC | 59 - software/CPM/CPM13_MTPUG_01/GRAPH.DOC | 17 - software/CPM/CPM13_MTPUG_01/GRAPH.PAS | 195 - software/CPM/CPM13_MTPUG_01/LIST.COM | Bin 1280 -> 0 bytes software/CPM/CPM13_MTPUG_01/LISTDEC.COM | Bin 2176 -> 0 bytes software/CPM/CPM13_MTPUG_01/LN.ERL | Bin 640 -> 0 bytes software/CPM/CPM13_MTPUG_01/LN.SRC | 108 - software/CPM/CPM13_MTPUG_01/MATHLIB.ERL | Bin 1664 -> 0 bytes software/CPM/CPM13_MTPUG_01/MATHLIB.SRC | 118 - software/CPM/CPM13_MTPUG_01/MATHTEST.COM | Bin 16640 -> 0 bytes software/CPM/CPM13_MTPUG_01/MATHTEST.ERL | Bin 1280 -> 0 bytes software/CPM/CPM13_MTPUG_01/MATHTEST.SRC | 59 - software/CPM/CPM13_MTPUG_01/MODEM.LIB | 667 - software/CPM/CPM13_MTPUG_01/MODEM.PAS | 684 - software/CPM/CPM13_MTPUG_01/MTPUG01.BAK | 50 - software/CPM/CPM13_MTPUG_01/MTPUG01.DOC | 50 - software/CPM/CPM13_MTPUG_01/NSBH19.DOC | 47 - software/CPM/CPM13_MTPUG_01/NSBH19.SRC | 359 - software/CPM/CPM13_MTPUG_01/PAGE.COM | Bin 14208 -> 0 bytes software/CPM/CPM13_MTPUG_01/PAGE.DOC | 14 - software/CPM/CPM13_MTPUG_01/PAGE.PAS | 172 - software/CPM/CPM13_MTPUG_01/PLOT.BAK | 315 - software/CPM/CPM13_MTPUG_01/PLOT.MOD | 331 - software/CPM/CPM13_MTPUG_01/RANDOM.REL | Bin 512 -> 0 bytes software/CPM/CPM13_MTPUG_01/RANDOM.SRC | 181 - software/CPM/CPM13_MTPUG_01/RNB.ERL | Bin 768 -> 0 bytes software/CPM/CPM13_MTPUG_01/RNB.SRC | 78 - software/CPM/CPM13_MTPUG_01/SBGETCH.SRC | 31 - software/CPM/CPM13_MTPUG_01/SD.COM | Bin 1408 -> 0 bytes software/CPM/CPM13_MTPUG_01/SEND.COM | Bin 768 -> 0 bytes software/CPM/CPM13_MTPUG_01/SHIFT.COM | Bin 7168 -> 0 bytes software/CPM/CPM13_MTPUG_01/SHIFT.DOC | 10 - software/CPM/CPM13_MTPUG_01/SINCOS.ERL | Bin 768 -> 0 bytes software/CPM/CPM13_MTPUG_01/SINCOS.SRC | 81 - software/CPM/CPM13_MTPUG_01/TRANCEND.DOC | 21 - software/CPM/CPM13_MTPUG_01/TRANCEND.TWL | Bin 2432 -> 0 bytes software/CPM/CPM14_MTPUG_02/CALCULAT.CMD | 5 - software/CPM/CPM14_MTPUG_02/CALCULAT.COM | Bin 24064 -> 0 bytes software/CPM/CPM14_MTPUG_02/CALCULAT.DOC | 40 - software/CPM/CPM14_MTPUG_02/CALCULAT.ERL | Bin 11136 -> 0 bytes software/CPM/CPM14_MTPUG_02/CALCULAT.PAS | 581 - software/CPM/CPM14_MTPUG_02/CP#M-DEC.DOC | 113 - software/CPM/CPM14_MTPUG_02/CPMTODEC.ASM | 1198 -- software/CPM/CPM14_MTPUG_02/DECTOCPM.ASM | 1099 -- software/CPM/CPM14_MTPUG_02/HEATH.DOC | 72 - software/CPM/CPM14_MTPUG_02/HEATH.ERL | Bin 1024 -> 0 bytes software/CPM/CPM14_MTPUG_02/HEATH.PAS | 285 - software/CPM/CPM14_MTPUG_02/LISTDEC.ASM | 625 - software/CPM/CPM14_MTPUG_02/MTPUG.002 | 35 - software/CPM/CPM14_MTPUG_02/MTPUG.BAK | 35 - software/CPM/CPM14_MTPUG_02/SEND.COM | Bin 768 -> 0 bytes software/CPM/CPM14_MTPUG_02/SPEAKER.DOC | 43 - software/CPM/CPM14_MTPUG_02/SPEAKER.ERL | Bin 14464 -> 0 bytes software/CPM/CPM14_MTPUG_02/SPEAKER.PAS | 958 -- software/CPM/CPM14_MTPUG_02/XREF.CMD | 3 - software/CPM/CPM14_MTPUG_02/XREF.COM | Bin 28672 -> 0 bytes software/CPM/CPM14_MTPUG_02/XREF.DOC | 38 - software/CPM/CPM14_MTPUG_02/XREF.ERL | Bin 10496 -> 0 bytes software/CPM/CPM14_MTPUG_02/XREF.PAS | 717 - software/CPM/CPM15_MTPUG_03/-MTPUG.003 | 0 software/CPM/CPM15_MTPUG_03/ACOUSTIC.PAS | 214 - software/CPM/CPM15_MTPUG_03/CALCAL.SRC | Bin 6912 -> 0 bytes software/CPM/CPM15_MTPUG_03/CIRCQUE.PAS | 72 - software/CPM/CPM15_MTPUG_03/CMPXLIB.DOC | 39 - software/CPM/CPM15_MTPUG_03/CMPXLIB.SRC | 234 - software/CPM/CPM15_MTPUG_03/CRT.PAS | 136 - software/CPM/CPM15_MTPUG_03/CUBE.COM | Bin 15488 -> 0 bytes software/CPM/CPM15_MTPUG_03/CUBE.ERL | Bin 9728 -> 0 bytes software/CPM/CPM15_MTPUG_03/CUBE.SRC | 285 - software/CPM/CPM15_MTPUG_03/CUBESOLV.COM | Bin 18688 -> 0 bytes software/CPM/CPM15_MTPUG_03/CUBESOLV.ERL | Bin 15360 -> 0 bytes software/CPM/CPM15_MTPUG_03/CUBESOLV.SRC | 583 - software/CPM/CPM15_MTPUG_03/CUBEUTIL.SRC | Bin 5888 -> 0 bytes software/CPM/CPM15_MTPUG_03/DCMODEM.PAS | 219 - software/CPM/CPM15_MTPUG_03/DIRFILE.ERL | Bin 2688 -> 0 bytes software/CPM/CPM15_MTPUG_03/DIRFILE.SRC | Bin 4992 -> 0 bytes software/CPM/CPM15_MTPUG_03/EPSON.DOC | Bin 2816 -> 0 bytes software/CPM/CPM15_MTPUG_03/EPSON.ERL | Bin 9728 -> 0 bytes software/CPM/CPM15_MTPUG_03/EPSON.SRC | 504 - software/CPM/CPM15_MTPUG_03/EPSON2.ERL | Bin 2304 -> 0 bytes software/CPM/CPM15_MTPUG_03/EPSON2.SRC | 182 - software/CPM/CPM15_MTPUG_03/FNC9511.SRC | 140 - software/CPM/CPM15_MTPUG_03/MATHLIBS.DOC | 29 - software/CPM/CPM15_MTPUG_03/MTPUG.003 | 90 - software/CPM/CPM15_MTPUG_03/MTPUG.BAK | 82 - software/CPM/CPM15_MTPUG_03/NSB.DOC | 13 - software/CPM/CPM15_MTPUG_03/NSB.SRC | 387 - software/CPM/CPM15_MTPUG_03/NSBCUR19.DOC | 262 - software/CPM/CPM15_MTPUG_03/NSBCUR19.SRC | 427 - software/CPM/CPM15_MTPUG_03/POWRLIB.SRC | Bin 1920 -> 0 bytes software/CPM/CPM15_MTPUG_03/RINGING.CMD | 2 - software/CPM/CPM15_MTPUG_03/RINGING.PAS | 56 - software/CPM/CPM15_MTPUG_03/SEND.COM | Bin 768 -> 0 bytes software/CPM/CPM15_MTPUG_03/STATLIB.SRC | 114 - software/CPM/CPM15_MTPUG_03/TERMINAL.CMD | 2 - software/CPM/CPM15_MTPUG_03/TERMINAL.PAS | 261 - software/CPM/CPM15_MTPUG_03/TRIGLIB.SRC | 136 - software/CPM/CPM15_MTPUG_03/UTILITY.PAS | 22 - software/CPM/CPM15_MTPUG_03/VARIO.SRC | Bin 4352 -> 0 bytes software/CPM/CPM16_MTPUG_04/-MTPUG.004 | 0 software/CPM/CPM16_MTPUG_04/-MTPUG.DOC | 47 - software/CPM/CPM16_MTPUG_04/COMPARE.COM | Bin 12416 -> 0 bytes software/CPM/CPM16_MTPUG_04/COMPARE.ERL | Bin 4480 -> 0 bytes software/CPM/CPM16_MTPUG_04/COMPARE.SRC | 346 - software/CPM/CPM16_MTPUG_04/CPMNAME.SRC | 80 - software/CPM/CPM16_MTPUG_04/DIRFILE.SRC | 153 - software/CPM/CPM16_MTPUG_04/DIRFILE.SUB | 4 - software/CPM/CPM16_MTPUG_04/HEXDMP.COM | Bin 12416 -> 0 bytes software/CPM/CPM16_MTPUG_04/HEXDMP.DOC | 5 - software/CPM/CPM16_MTPUG_04/HEXDMP.ERL | Bin 1024 -> 0 bytes software/CPM/CPM16_MTPUG_04/HEXDMP.SRC | 48 - software/CPM/CPM16_MTPUG_04/HL.CMD | 3 - software/CPM/CPM16_MTPUG_04/HL.SRC | 131 - software/CPM/CPM16_MTPUG_04/HL1.SRC | 464 - software/CPM/CPM16_MTPUG_04/HL2.SRC | 270 - software/CPM/CPM16_MTPUG_04/HL3.SRC | 259 - software/CPM/CPM16_MTPUG_04/INDEXER.DOC | 15 - software/CPM/CPM16_MTPUG_04/INDEXER.SRC | 300 - software/CPM/CPM16_MTPUG_04/INDEXER.SUB | 3 - software/CPM/CPM16_MTPUG_04/LONGLINE.PAS | 55 - software/CPM/CPM16_MTPUG_04/NADY.PAS | 339 - software/CPM/CPM16_MTPUG_04/P1.SRC | 108 - software/CPM/CPM16_MTPUG_04/P2.SRC | 182 - software/CPM/CPM16_MTPUG_04/P3.SRC | 48 - software/CPM/CPM16_MTPUG_04/P4.SRC | 42 - software/CPM/CPM16_MTPUG_04/P6.SRC | 67 - software/CPM/CPM16_MTPUG_04/P7.SRC | 35 - software/CPM/CPM16_MTPUG_04/P8.SRC | 79 - software/CPM/CPM16_MTPUG_04/PLOTLIB.BLD | 9 - software/CPM/CPM16_MTPUG_04/PLOTLIB.CON | 2 - software/CPM/CPM16_MTPUG_04/PLOTLIB.DEF | 21 - software/CPM/CPM16_MTPUG_04/PLOTLIB.DOC | 74 - software/CPM/CPM16_MTPUG_04/PLOTLIB.TYP | 3 - software/CPM/CPM16_MTPUG_04/PTABLE.PAS | 36 - software/CPM/CPM16_MTPUG_04/PTEST.CMD | 3 - software/CPM/CPM16_MTPUG_04/PTEST.SRC | 43 - software/CPM/CPM16_MTPUG_04/PTEST1.CMD | 3 - software/CPM/CPM16_MTPUG_04/PTEST1.SRC | 43 - software/CPM/CPM16_MTPUG_04/PTRS2.PAS | 155 - software/CPM/CPM16_MTPUG_04/QQSORT.PAS | 183 - software/CPM/CPM16_MTPUG_04/QSORT.PAS | 114 - software/CPM/CPM16_MTPUG_04/SD.COM | Bin 1408 -> 0 bytes software/CPM/CPM16_MTPUG_04/SEND.COM | Bin 768 -> 0 bytes software/CPM/CPM16_MTPUG_04/SHELL.PAS | 119 - software/CPM/CPM16_MTPUG_04/SWEEP.COM | Bin 26496 -> 0 bytes software/CPM/CPM16_MTPUG_04/XREF.COM | Bin 26368 -> 0 bytes software/CPM/CPM16_MTPUG_04/XREF.DOC | 22 - software/CPM/CPM16_MTPUG_04/XREF.ERL | Bin 7552 -> 0 bytes software/CPM/CPM16_MTPUG_04/XREF.SRC | 537 - software/CPM/CPM16_MTPUG_04/XREF.SUB | 3 - software/CPM/CPM16_MTPUG_04/ZCOMPR.PAS | 85 - software/CPM/CPM17_MTPUG_05/-MTPUG.005 | 0 software/CPM/CPM17_MTPUG_05/-MTPUG.DOC | 26 - software/CPM/CPM17_MTPUG_05/CEOL.ASM | 9 - software/CPM/CPM17_MTPUG_05/CEOL.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/CEOP.ASM | 9 - software/CPM/CPM17_MTPUG_05/CEOP.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/CLS.ASM | 11 - software/CPM/CPM17_MTPUG_05/CLS.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/CPMNAME.SRC | 80 - software/CPM/CPM17_MTPUG_05/CPOS.ASM | 40 - software/CPM/CPM17_MTPUG_05/CPOS.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/CTOP.ASM | 10 - software/CPM/CPM17_MTPUG_05/CTOP.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/CUOFF.ASM | 12 - software/CPM/CPM17_MTPUG_05/CUOFF.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/CUON.ASM | 10 - software/CPM/CPM17_MTPUG_05/CUON.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/DATE.ASM | 48 - software/CPM/CPM17_MTPUG_05/DATE.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/DAY.ASM | 50 - software/CPM/CPM17_MTPUG_05/DAY.REL | Bin 256 -> 0 bytes software/CPM/CPM17_MTPUG_05/DC.ASM | 10 - software/CPM/CPM17_MTPUG_05/DC.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/DL.ASM | 10 - software/CPM/CPM17_MTPUG_05/DL.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/EBL.ASM | 10 - software/CPM/CPM17_MTPUG_05/EBL.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/ERASEL.ASM | 10 - software/CPM/CPM17_MTPUG_05/ERASEL.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/EXTERNAL.DOC | 113 - software/CPM/CPM17_MTPUG_05/G2TEXT.ERL | Bin 896 -> 0 bytes software/CPM/CPM17_MTPUG_05/G2TEXT.SRC | 71 - software/CPM/CPM17_MTPUG_05/HOME.ASM | 11 - software/CPM/CPM17_MTPUG_05/HOME.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/IC.ASM | 11 - software/CPM/CPM17_MTPUG_05/IC.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/IL.ASM | 10 - software/CPM/CPM17_MTPUG_05/IL.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/KBOFF.ASM | 10 - software/CPM/CPM17_MTPUG_05/KBOFF.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/KBON.ASM | 10 - software/CPM/CPM17_MTPUG_05/KBON.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/LOEWNER.DOC | 135 - software/CPM/CPM17_MTPUG_05/OFF25.ASM | 12 - software/CPM/CPM17_MTPUG_05/OFF25.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/ON25.ASM | 10 - software/CPM/CPM17_MTPUG_05/ON25.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/PROCREF.COM | Bin 12160 -> 0 bytes software/CPM/CPM17_MTPUG_05/PROCREF.ERL | Bin 2176 -> 0 bytes software/CPM/CPM17_MTPUG_05/PROCREF.SRC | 191 - software/CPM/CPM17_MTPUG_05/RESTC.ASM | 10 - software/CPM/CPM17_MTPUG_05/RESTC.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/REVOFF.ASM | 11 - software/CPM/CPM17_MTPUG_05/REVOFF.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/REVON.ASM | 11 - software/CPM/CPM17_MTPUG_05/REVON.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/SAVEC.ASM | 10 - software/CPM/CPM17_MTPUG_05/SAVEC.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/TIME.ASM | 45 - software/CPM/CPM17_MTPUG_05/TIME.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/XIC.ASM | 11 - software/CPM/CPM17_MTPUG_05/XIC.REL | Bin 128 -> 0 bytes software/CPM/CPM17_MTPUG_05/Z19LIB.ERL | Bin 24192 -> 0 bytes software/CPM/CPM18_MTPUG_06/-MTPUG.006 | 0 software/CPM/CPM18_MTPUG_06/-MTPUG.DOC | 141 - software/CPM/CPM18_MTPUG_06/BESY.PAS | 91 - software/CPM/CPM18_MTPUG_06/CFIT1.PAS | 77 - software/CPM/CPM18_MTPUG_06/CFIT1A.PAS | 92 - software/CPM/CPM18_MTPUG_06/CFIT2.PAS | 96 - software/CPM/CPM18_MTPUG_06/CFIT4.PAS | 106 - software/CPM/CPM18_MTPUG_06/CURSOR.ERL | Bin 768 -> 0 bytes software/CPM/CPM18_MTPUG_06/CURSOR.MAC | 515 - software/CPM/CPM18_MTPUG_06/CURSOR2.ERL | Bin 256 -> 0 bytes software/CPM/CPM18_MTPUG_06/CURSOR2.SRC | 21 - software/CPM/CPM18_MTPUG_06/DETERM.PAS | 71 - software/CPM/CPM18_MTPUG_06/DIFFUS.PAS | 142 - software/CPM/CPM18_MTPUG_06/ERF4.PAS | 81 - software/CPM/CPM18_MTPUG_06/ERFD.PAS | 50 - software/CPM/CPM18_MTPUG_06/ERFD3.PAS | 83 - software/CPM/CPM18_MTPUG_06/ERFSIMP.PAS | 79 - software/CPM/CPM18_MTPUG_06/FITPOL.PAS | 148 - software/CPM/CPM18_MTPUG_06/GAUSID.PAS | 179 - software/CPM/CPM18_MTPUG_06/GAUSS.PAS | 169 - software/CPM/CPM18_MTPUG_06/GAUSSJ.LIB | 167 - software/CPM/CPM18_MTPUG_06/GD-LINF1.LIB | 77 - software/CPM/CPM18_MTPUG_06/GD-LINF2.LIB | 79 - software/CPM/CPM18_MTPUG_06/JULIAN.LIB | 19 - software/CPM/CPM18_MTPUG_06/LEAST1.PAS | 182 - software/CPM/CPM18_MTPUG_06/LEAST2.PAS | 164 - software/CPM/CPM18_MTPUG_06/LEAST3.PAS | 158 - software/CPM/CPM18_MTPUG_06/LEAST6.PAS | 149 - software/CPM/CPM18_MTPUG_06/LINFIT1.LIB | 40 - software/CPM/CPM18_MTPUG_06/LINFIT2.LIB | 44 - software/CPM/CPM18_MTPUG_06/MATR1.PAS | 107 - software/CPM/CPM18_MTPUG_06/MEANS.PAS | 54 - software/CPM/CPM18_MTPUG_06/NEWDR.PAS | 39 - software/CPM/CPM18_MTPUG_06/NEWDR2.PAS | 45 - software/CPM/CPM18_MTPUG_06/NEWTON-L.LIB | 42 - software/CPM/CPM18_MTPUG_06/NEWTON.LIB | 32 - software/CPM/CPM18_MTPUG_06/NLIN3.PAS | 193 - software/CPM/CPM18_MTPUG_06/PLOT.LIB | 147 - software/CPM/CPM18_MTPUG_06/RANDG.LIB | 20 - software/CPM/CPM18_MTPUG_06/RANDOM.LIB | 20 - software/CPM/CPM18_MTPUG_06/RANDOM.PAS | 26 - software/CPM/CPM18_MTPUG_06/ROMB1.PAS | 91 - software/CPM/CPM18_MTPUG_06/ROMB3.PAS | 96 - software/CPM/CPM18_MTPUG_06/SIMP1.PAS | 64 - software/CPM/CPM18_MTPUG_06/SIMPS.LIB | 50 - software/CPM/CPM18_MTPUG_06/SIMQ1.PAS | 139 - software/CPM/CPM18_MTPUG_06/SOLVEC.PAS | 178 - software/CPM/CPM18_MTPUG_06/SOLVGJ.PAS | 100 - software/CPM/CPM18_MTPUG_06/SOLVGJ2.PAS | 110 - software/CPM/CPM18_MTPUG_06/SOLVGV.PAS | 273 - software/CPM/CPM18_MTPUG_06/SORT-B.LIB | 34 - software/CPM/CPM18_MTPUG_06/SORT-Q-N.LIB | 74 - software/CPM/CPM18_MTPUG_06/SORT-Q-R.LIB | 58 - software/CPM/CPM18_MTPUG_06/SORT-S.LIB | 43 - software/CPM/CPM18_MTPUG_06/SQUARE.LIB | 33 - software/CPM/CPM18_MTPUG_06/TERMINAL.BLD | 4 - software/CPM/CPM18_MTPUG_06/TERMINAL.ERL | Bin 896 -> 0 bytes software/CPM/CPM18_MTPUG_06/TERMINAL.IF | 27 - software/CPM/CPM18_MTPUG_06/TRAP1.PAS | 55 - software/CPM/CPM18_MTPUG_06/TRAP2.PAS | 56 - software/CPM/CPM18_MTPUG_06/TRAPEZ.LIB | 43 - software/CPM/CPM18_MTPUG_06/TSTBES.PAS | 83 - software/CPM/CPM18_MTPUG_06/TSTGAM.PAS | 48 - software/CPM/CPM18_MTPUG_06/TSTSORT.PAS | 76 - software/CPM/CPM19_MTPUG_07/-MTPUG.007 | 0 software/CPM/CPM19_MTPUG_07/-MTPUG.DOC | 56 - software/CPM/CPM19_MTPUG_07/3740UTIL.COM | Bin 12800 -> 0 bytes software/CPM/CPM19_MTPUG_07/3740UTIL.DOC | 232 - software/CPM/CPM19_MTPUG_07/ALOCK.Z80 | 50 - software/CPM/CPM19_MTPUG_07/AUNLCK.Z80 | 48 - software/CPM/CPM19_MTPUG_07/BCD.DOC | 13 - software/CPM/CPM19_MTPUG_07/BCD.ERL | Bin 3072 -> 0 bytes software/CPM/CPM19_MTPUG_07/DISKIO.DOC | 37 - software/CPM/CPM19_MTPUG_07/DISKIO.SRC | 52 - software/CPM/CPM19_MTPUG_07/FOTOSATS.DOC | 217 - software/CPM/CPM19_MTPUG_07/FOTOSATS.PRM | Bin 256 -> 0 bytes software/CPM/CPM19_MTPUG_07/FOTOSATS.SRC | 353 - software/CPM/CPM19_MTPUG_07/GRAPH.DOC | 140 - software/CPM/CPM19_MTPUG_07/GRAPHADM.SRC | 795 -- software/CPM/CPM19_MTPUG_07/GRHP.SRC | 802 -- software/CPM/CPM19_MTPUG_07/LOCK.PAS | 76 - software/CPM/CPM19_MTPUG_07/MYLIB.ERL | Bin 3584 -> 0 bytes software/CPM/CPM19_MTPUG_07/PRETTY.COM | Bin 16128 -> 0 bytes software/CPM/CPM19_MTPUG_07/PRETTY.DOC | 22 - software/CPM/CPM19_MTPUG_07/PRETTY.SRC | Bin 5376 -> 0 bytes software/CPM/CPM19_MTPUG_07/PRMAC.COM | Bin 11904 -> 0 bytes software/CPM/CPM19_MTPUG_07/PRMAC.DOC | 22 - software/CPM/CPM19_MTPUG_07/PRMAC.SRC | Bin 3584 -> 0 bytes software/CPM/CPM19_MTPUG_07/SETDMA.Z80 | 40 - software/CPM/CPM19_MTPUG_07/SHARE.PAS | 50 - software/CPM/CPM19_MTPUG_07/SHAREFIL.DOC | 190 - software/CPM/CPM19_MTPUG_07/SHAREFIL.TST | 163 - software/CPM/CPM19_MTPUG_07/SHARELIB.ERL | Bin 1792 -> 0 bytes software/CPM/CPM19_MTPUG_07/TYPESET.DOC | 184 - software/CPM/CPM19_MTPUG_07/TYPESET.PRM | Bin 256 -> 0 bytes software/CPM/CPM19_MTPUG_07/TYPESET.SRC | 348 - software/CPM/CPM19_MTPUG_07/UNLOCK.PAS | 76 - software/CPM/CPM19_MTPUG_07/UOPEN.Z80 | 47 - software/CPM/CPM19_MTPUG_07/USET.PAS | 203 - software/CPM/CPM20_MTPUG_08/-MTPUG.008 | 0 software/CPM/CPM20_MTPUG_08/-MTPUG.DOC | 65 - software/CPM/CPM20_MTPUG_08/CHROFF.DAT | Bin 256 -> 0 bytes software/CPM/CPM20_MTPUG_08/CHRVEC.DAT | Bin 896 -> 0 bytes software/CPM/CPM20_MTPUG_08/DMP.SRC | 909 -- software/CPM/CPM20_MTPUG_08/ELEVATOR.CMD | 1 - software/CPM/CPM20_MTPUG_08/ELEVATOR.DAT | 8 - software/CPM/CPM20_MTPUG_08/ELEVATOR.PAS | 773 - software/CPM/CPM20_MTPUG_08/MPMTEST.SRC | 180 - software/CPM/CPM20_MTPUG_08/MPMTESTQ.SRC | 335 - software/CPM/CPM20_MTPUG_08/MPMTTIME.SRC | 54 - software/CPM/CPM20_MTPUG_08/MPMUTIL.DOC | 533 - software/CPM/CPM20_MTPUG_08/MPMUTIL.I86 | 546 - software/CPM/CPM20_MTPUG_08/MPMUTIL.R86 | Bin 640 -> 0 bytes software/CPM/CPM20_MTPUG_08/PASMAT.CMD | Bin 31744 -> 0 bytes software/CPM/CPM20_MTPUG_08/PASMAT.COM | Bin 39936 -> 0 bytes software/CPM/CPM20_MTPUG_08/PASMAT.DOC | 284 - software/CPM/CPM20_MTPUG_08/PMTEST.TST | 84 - software/CPM/CPM20_MTPUG_08/PMXREF.TST | 506 - software/CPM/CPM20_MTPUG_08/SERIO.SRC | 89 - software/CPM/CPM20_MTPUG_08/TESTGR.SRC | 179 - software/CPM/CPM20_MTPUG_08/WRDATA.SRC | 195 - software/CPM/CPM21_MTPUG_09/-MTPUG.DOC | 57 - software/CPM/CPM21_MTPUG_09/BLOCKR.SRC | 45 - software/CPM/CPM21_MTPUG_09/CONSTTAB.PAS | 330 - software/CPM/CPM21_MTPUG_09/FIBDEF.LIB | 25 - software/CPM/CPM21_MTPUG_09/FILES.CMD | 12 - software/CPM/CPM21_MTPUG_09/INPUTFAS.PAS | 156 - software/CPM/CPM21_MTPUG_09/INPUTSTD.PAS | 88 - software/CPM/CPM21_MTPUG_09/MARKREL.SRC | 94 - software/CPM/CPM21_MTPUG_09/MSA326.DOC | 9 - software/CPM/CPM21_MTPUG_09/MSA326A.PAS | 45 - software/CPM/CPM21_MTPUG_09/MSA326B.PAS | 54 - software/CPM/CPM21_MTPUG_09/MSA326C.PAS | 124 - software/CPM/CPM21_MTPUG_09/MSA326D.PAS | 53 - software/CPM/CPM21_MTPUG_09/PASERROR.PAS | 22 - software/CPM/CPM21_MTPUG_09/PLANE.SRC | 374 - software/CPM/CPM21_MTPUG_09/ROUTTAB.PAS | 484 - software/CPM/CPM21_MTPUG_09/SCANNER.PAS | 572 - software/CPM/CPM21_MTPUG_09/SWEEP.COM | Bin 28288 -> 0 bytes software/CPM/CPM21_MTPUG_09/SYNONYM.COM | Bin 1024 -> 0 bytes software/CPM/CPM21_MTPUG_09/TYPE1TAB.PAS | 308 - software/CPM/CPM21_MTPUG_09/TYPE2TAB.PAS | 418 - software/CPM/CPM21_MTPUG_09/TYPE3TAB.PAS | 286 - software/CPM/CPM21_MTPUG_09/TYPECHK.BLD | 11 - software/CPM/CPM21_MTPUG_09/TYPECHK.CMD | 2 - software/CPM/CPM21_MTPUG_09/TYPECHK.COM | Bin 31744 -> 0 bytes software/CPM/CPM21_MTPUG_09/TYPECHK.DEC | 114 - software/CPM/CPM21_MTPUG_09/TYPECHK.PAS | 462 - software/CPM/CPM21_MTPUG_09/TYPECHK.SUB | 14 - software/CPM/CPM21_MTPUG_09/VARTAB.PAS | 198 - software/CPM/CPM22_MTPUG_10/-MTPUG.010 | 0 software/CPM/CPM22_MTPUG_10/-MTPUG.DOC | 53 - software/CPM/CPM22_MTPUG_10/CPMNAME.PAS | 90 - software/CPM/CPM22_MTPUG_10/CPMNAME.SRC | 80 - software/CPM/CPM22_MTPUG_10/FACT2K.DOC | 41 - software/CPM/CPM22_MTPUG_10/FACT2K.IN | 18 - software/CPM/CPM22_MTPUG_10/FACT2K.OUT | 45 - software/CPM/CPM22_MTPUG_10/FACT2K.PAS | 104 - software/CPM/CPM22_MTPUG_10/FFT.DOC | 135 - software/CPM/CPM22_MTPUG_10/FFTKF.DOC | 48 - software/CPM/CPM22_MTPUG_10/FFTKF.IN | Bin 512 -> 0 bytes software/CPM/CPM22_MTPUG_10/FFTKF.OUT | Bin 2944 -> 0 bytes software/CPM/CPM22_MTPUG_10/FFTKF.PAS | 64 - software/CPM/CPM22_MTPUG_10/FFTLIB.PAS | 360 - software/CPM/CPM22_MTPUG_10/LAB.PAS | 387 - software/CPM/CPM22_MTPUG_10/PASFFT1.SRC | Bin 2560 -> 0 bytes software/CPM/CPM22_MTPUG_10/PASFFT2.SRC | Bin 2304 -> 0 bytes software/CPM/CPM22_MTPUG_10/PASFFT3.SRC | Bin 2560 -> 0 bytes software/CPM/CPM22_MTPUG_10/PASFFT4.SRC | Bin 2688 -> 0 bytes software/CPM/CPM22_MTPUG_10/PASMAT.CMD | 4 - software/CPM/CPM22_MTPUG_10/PASMAT.KMD | 2 - software/CPM/CPM22_MTPUG_10/PASMAT.PAS | 955 -- software/CPM/CPM22_MTPUG_10/PASMAT.SRC | 955 -- software/CPM/CPM22_MTPUG_10/PASMAT.SU | 8 - software/CPM/CPM22_MTPUG_10/PASMAT.SUB | 9 - software/CPM/CPM22_MTPUG_10/PMCOMENT.PAS | 494 - software/CPM/CPM22_MTPUG_10/PMCOMENT.SRC | 494 - software/CPM/CPM22_MTPUG_10/PMDEFS.IN | 155 - software/CPM/CPM22_MTPUG_10/PMDEFS.INC | 155 - software/CPM/CPM22_MTPUG_10/PMFILEIO.PAS | 284 - software/CPM/CPM22_MTPUG_10/PMFILEIO.SRC | 284 - software/CPM/CPM22_MTPUG_10/PMINIT.PAS | 220 - software/CPM/CPM22_MTPUG_10/PMINIT.SRC | 220 - software/CPM/CPM22_MTPUG_10/PMPARSE.PAS | 1087 -- software/CPM/CPM22_MTPUG_10/PMPARSE.SRC | 1082 -- software/CPM/CPM22_MTPUG_10/RNB.SRC | 114 - software/CPM/CPM23_PLI/ACK.PLI | 27 - software/CPM/CPM23_PLI/ACKTST.PLI | 40 - software/CPM/CPM23_PLI/ALLTST.PLI | 33 - software/CPM/CPM23_PLI/CALL.PLI | 26 - software/CPM/CPM23_PLI/CHESS.PLI | 731 - software/CPM/CPM23_PLI/COPY.PLI | 19 - software/CPM/CPM23_PLI/COPYLPT.PLI | 77 - software/CPM/CPM23_PLI/CREATE.PLI | 45 - software/CPM/CPM23_PLI/DFACT.PLI | 22 - software/CPM/CPM23_PLI/DIOCALLS.PLI | 354 - software/CPM/CPM23_PLI/DIOCOPY.PLI | 137 - software/CPM/CPM23_PLI/DIOMOD.DCL | 49 - software/CPM/CPM23_PLI/DIORAND.PLI | 145 - software/CPM/CPM23_PLI/DIV2.ASM | 52 - software/CPM/CPM23_PLI/DPOLY.PLI | 30 - software/CPM/CPM23_PLI/DTEST.PLI | 14 - software/CPM/CPM23_PLI/DUMP.PLI | 27 - software/CPM/CPM23_PLI/DUMP2.PLI | 41 - software/CPM/CPM23_PLI/ENTER.PLI | 56 - software/CPM/CPM23_PLI/EPOLY.PLI | 38 - software/CPM/CPM23_PLI/EXPR1.PLI | 61 - software/CPM/CPM23_PLI/EXPR2.PLI | 91 - software/CPM/CPM23_PLI/FACT.PLI | 17 - software/CPM/CPM23_PLI/FCB.DCL | 16 - software/CPM/CPM23_PLI/FDIV2.ASM | 63 - software/CPM/CPM23_PLI/FDTEST.PLI | 14 - software/CPM/CPM23_PLI/FFACT.PLI | 18 - software/CPM/CPM23_PLI/FIB.PLI | 18 - software/CPM/CPM23_PLI/FSCAN.PLI | 44 - software/CPM/CPM23_PLI/GOTO.PLI | 37 - software/CPM/CPM23_PLI/GRADE.PLI | 38 - software/CPM/CPM23_PLI/IFACT.PLI | 14 - software/CPM/CPM23_PLI/INVERT1.PLI | 61 - software/CPM/CPM23_PLI/INVERT2.PLI | 25 - software/CPM/CPM23_PLI/KEYFILE.PLI | 30 - software/CPM/CPM23_PLI/LIB.COM | Bin 7168 -> 0 bytes software/CPM/CPM23_PLI/LINK.COM | Bin 13056 -> 0 bytes software/CPM/CPM23_PLI/MACASM.PLI | 154 - software/CPM/CPM23_PLI/MATSIZ.LIB | 4 - software/CPM/CPM23_PLI/MATSIZE.LIB | 4 - software/CPM/CPM23_PLI/NET.PLI | 217 - software/CPM/CPM23_PLI/NETASM.PLI | 222 - software/CPM/CPM23_PLI/OPTIMIST.COM | Bin 8192 -> 0 bytes software/CPM/CPM23_PLI/OPTIMIST.PLI | 44 - software/CPM/CPM23_PLI/PLANT1.EMP | Bin 896 -> 0 bytes software/CPM/CPM23_PLI/PLANT2.EMP | Bin 896 -> 0 bytes software/CPM/CPM23_PLI/PLI.COM | Bin 7552 -> 0 bytes software/CPM/CPM23_PLI/PLI0.OVL | Bin 17920 -> 0 bytes software/CPM/CPM23_PLI/PLI1.OVL | Bin 32512 -> 0 bytes software/CPM/CPM23_PLI/PLI2.OVL | Bin 31232 -> 0 bytes software/CPM/CPM23_PLI/PLIDIO.ASM | 607 - software/CPM/CPM23_PLI/PLILIB.IRL | Bin 41472 -> 0 bytes software/CPM/CPM23_PLI/POLY.PLI | 31 - software/CPM/CPM23_PLI/RANDOM.PLI | 68 - software/CPM/CPM23_PLI/READ.ME | 4 - software/CPM/CPM23_PLI/RECORD.DCL | 9 - software/CPM/CPM23_PLI/REPORT.PLI | 56 - software/CPM/CPM23_PLI/RETRIEVE.PLI | 55 - software/CPM/CPM23_PLI/REV.PLI | 50 - software/CPM/CPM23_PLI/REVERT.PLI | 25 - software/CPM/CPM23_PLI/RMAC.COM | Bin 13568 -> 0 bytes software/CPM/CPM23_PLI/SELECT.PLI | 78 - software/CPM/CPM23_PLI/TEST.PLI | 28 - software/CPM/CPM23_PLI/TITLE.PLI | 179 - software/CPM/CPM23_PLI/UPDATE.PLI | 57 - software/CPM/CPM23_PLI/WAGE.PLI | 34 - software/CPM/CPM24_PLI80_v13/ACK.PLI | 27 - software/CPM/CPM24_PLI80_v13/DFACT.PLI | 22 - software/CPM/CPM24_PLI80_v13/LIB.COM | Bin 7168 -> 0 bytes software/CPM/CPM24_PLI80_v13/LINK.COM | Bin 15616 -> 0 bytes software/CPM/CPM24_PLI80_v13/OPTIMIST.PLI | 44 - software/CPM/CPM24_PLI80_v13/PLI.COM | Bin 7680 -> 0 bytes software/CPM/CPM24_PLI80_v13/PLI0.OVL | Bin 18176 -> 0 bytes software/CPM/CPM24_PLI80_v13/PLI1.OVL | Bin 32512 -> 0 bytes software/CPM/CPM24_PLI80_v13/PLI2.OVL | Bin 31616 -> 0 bytes software/CPM/CPM24_PLI80_v13/PLILIB.IRL | Bin 44416 -> 0 bytes software/CPM/CPM24_PLI80_v13/RMAC.COM | Bin 13568 -> 0 bytes software/CPM/CPM24_PLI80_v13/XREF.COM | Bin 15488 -> 0 bytes software/CPM/CPM25_PLI80_v14/A.PLI | 6 - software/CPM/CPM25_PLI80_v14/ACK.PLI | 34 - software/CPM/CPM25_PLI80_v14/ACKTST.PLI | 45 - software/CPM/CPM25_PLI80_v14/ALLTST.PLI | 35 - software/CPM/CPM25_PLI80_v14/ANNUITY.PLI | 83 - software/CPM/CPM25_PLI80_v14/CALL.PLI | 35 - software/CPM/CPM25_PLI80_v14/COPY.PLI | 24 - software/CPM/CPM25_PLI80_v14/COPYLPT.PLI | 81 - software/CPM/CPM25_PLI80_v14/CPMDIO.ASM | 608 - software/CPM/CPM25_PLI80_v14/CREATE.PLI | 49 - software/CPM/CPM25_PLI80_v14/DECPOLY.PLI | 33 - software/CPM/CPM25_PLI80_v14/DEMO.PLI | 15 - software/CPM/CPM25_PLI80_v14/DEPREC.PLI | 298 - software/CPM/CPM25_PLI80_v14/DFACT.PLI | 26 - software/CPM/CPM25_PLI80_v14/DIO80.DCL | 5 - software/CPM/CPM25_PLI80_v14/DIOCALLS.PLI | 440 - software/CPM/CPM25_PLI80_v14/DIOCOPY.PLI | 155 - software/CPM/CPM25_PLI80_v14/DIOMOD.DCL | 50 - software/CPM/CPM25_PLI80_v14/DIORAND.PLI | 151 - software/CPM/CPM25_PLI80_v14/DIV2.ASM | 52 - software/CPM/CPM25_PLI80_v14/DTEST.PLI | 20 - software/CPM/CPM25_PLI80_v14/ENTER.PLI | 62 - software/CPM/CPM25_PLI80_v14/EXPR1.PLI | 70 - software/CPM/CPM25_PLI80_v14/EXPR2.PLI | 99 - software/CPM/CPM25_PLI80_v14/FCB.DCL | 16 - software/CPM/CPM25_PLI80_v14/FDIV2.ASM | 63 - software/CPM/CPM25_PLI80_v14/FDTEST.PLI | 18 - software/CPM/CPM25_PLI80_v14/FFACT.PLI | 24 - software/CPM/CPM25_PLI80_v14/FLTPOLY.PLI | 33 - software/CPM/CPM25_PLI80_v14/FLTPOLY2.PLI | 39 - software/CPM/CPM25_PLI80_v14/FSCAN.PLI | 51 - software/CPM/CPM25_PLI80_v14/IFACT.PLI | 20 - software/CPM/CPM25_PLI80_v14/INVERT.PLI | 30 - software/CPM/CPM25_PLI80_v14/KEYFILE.PLI | 33 - software/CPM/CPM25_PLI80_v14/LABELS.PLI | 45 - software/CPM/CPM25_PLI80_v14/LIB.COM | Bin 7168 -> 0 bytes software/CPM/CPM25_PLI80_v14/LINK.COM | Bin 15744 -> 0 bytes software/CPM/CPM25_PLI80_v14/LOAN1.PLI | 42 - software/CPM/CPM25_PLI80_v14/LOAN2.PLI | 221 - software/CPM/CPM25_PLI80_v14/MAININVT.PLI | 65 - software/CPM/CPM25_PLI80_v14/MATSIZE.LIB | 4 - software/CPM/CPM25_PLI80_v14/MPMCALLA.PLI | 515 - software/CPM/CPM25_PLI80_v14/MPMCALLB.PLI | 323 - software/CPM/CPM25_PLI80_v14/MPMDIO.ASM | 495 - software/CPM/CPM25_PLI80_v14/MPMDIO.DCL | 35 - software/CPM/CPM25_PLI80_v14/NETWORK.PLI | 267 - software/CPM/CPM25_PLI80_v14/OPTIMIST (2).PLI | 49 - software/CPM/CPM25_PLI80_v14/OPTIMIST.COM | Bin 8704 -> 0 bytes software/CPM/CPM25_PLI80_v14/OPTIMIST.PLI | 44 - software/CPM/CPM25_PLI80_v14/PLI.COM | Bin 8064 -> 0 bytes software/CPM/CPM25_PLI80_v14/PLI0.OVL | Bin 18048 -> 0 bytes software/CPM/CPM25_PLI80_v14/PLI1.OVL | Bin 34816 -> 0 bytes software/CPM/CPM25_PLI80_v14/PLI2.OVL | Bin 33792 -> 0 bytes software/CPM/CPM25_PLI80_v14/PLILIB.IRL | Bin 71808 -> 0 bytes software/CPM/CPM25_PLI80_v14/RECORD.DCL | 9 - software/CPM/CPM25_PLI80_v14/RELNOTES.PRN | Bin 34688 -> 0 bytes software/CPM/CPM25_PLI80_v14/REPORT.PLI | 55 - software/CPM/CPM25_PLI80_v14/RETRIEVE.PLI | 56 - software/CPM/CPM25_PLI80_v14/REVERSE.PLI | 54 - software/CPM/CPM25_PLI80_v14/REVERT.PLI | 34 - software/CPM/CPM25_PLI80_v14/RFACT.PLI | 24 - software/CPM/CPM25_PLI80_v14/RMAC.COM | Bin 13568 -> 0 bytes software/CPM/CPM25_PLI80_v14/SAMPLE.PLI | 41 - software/CPM/CPM25_PLI80_v14/TEST.PLI | 35 - software/CPM/CPM25_PLI80_v14/UPDATE.PLI | 67 - software/CPM/CPM25_PLI80_v14/XREF.COM | Bin 15488 -> 0 bytes software/CPM/CPM25_PLI80_v14/Z80.LIB | 457 - software/CPM/CPM26_TPASCAL_v300a/cmdlin.pas | Bin 768 -> 0 bytes software/CPM/CPM26_TPASCAL_v300a/lister.pas | Bin 5632 -> 0 bytes software/CPM/CPM26_TPASCAL_v300a/mc-mod00.inc | 43 - software/CPM/CPM26_TPASCAL_v300a/mc-mod01.inc | 74 - software/CPM/CPM26_TPASCAL_v300a/mc-mod02.inc | 150 - software/CPM/CPM26_TPASCAL_v300a/mc-mod03.inc | 195 - software/CPM/CPM26_TPASCAL_v300a/mc-mod04.inc | 294 - software/CPM/CPM26_TPASCAL_v300a/mc-mod05.inc | 394 - software/CPM/CPM26_TPASCAL_v300a/mc.hlp | 145 - software/CPM/CPM26_TPASCAL_v300a/mc.pas | 160 - software/CPM/CPM26_TPASCAL_v300a/mcdemo.mcs | Bin 11904 -> 0 bytes software/CPM/CPM26_TPASCAL_v300a/read.me | 184 - software/CPM/CPM26_TPASCAL_v300a/tinst.com | Bin 25472 -> 0 bytes software/CPM/CPM26_TPASCAL_v300a/tinst.dta | Bin 4608 -> 0 bytes software/CPM/CPM26_TPASCAL_v300a/tinst.msg | 123 - software/CPM/CPM26_TPASCAL_v300a/turbo.com | Bin 30848 -> 0 bytes software/CPM/CPM26_TPASCAL_v300a/turbo.msg | 101 - software/CPM/CPM26_TPASCAL_v300a/turbo.ovr | Bin 1152 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/INSTALL.COM | Bin 33024 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/MAILMRGE.OVR | Bin 7936 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/MERGPRIN.OVR | Bin 8192 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/READ.ME | 88 - software/CPM/CPM27_WORDSTAR_v30/WIMSGS.OVR | Bin 1024 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/WS.COM | Bin 15872 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/WSMSGS.OVR | Bin 28416 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/WSOVLY1.OVR | Bin 34304 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/WSU.COM | Bin 15872 -> 0 bytes software/CPM/CPM27_WORDSTAR_v30/ws3.hex | Bin 896 -> 0 bytes software/CPM/CPM28_PLM80/ASM80.EXE | Bin 156857 -> 0 bytes software/CPM/CPM28_PLM80/PLM80.EXE | Bin 185628 -> 0 bytes software/CPM/CPM28_PLM80/README.TXT | 128 - software/CPM/CPM29_ZSID_v14/READ.ME | 10 - software/CPM/CPM29_ZSID_v14/ZSID-FIX.DOC | 74 - software/CPM/CPM29_ZSID_v14/ZSID-PAT.COM | Bin 10240 -> 0 bytes software/CPM/CPM29_ZSID_v14/ZSID.COM | Bin 10240 -> 0 bytes software/CPM/CPM29_ZSID_v14/ZSID.PAT | 37 - software/CPM/CPM30_WORDSTAR_v400/ANAGRAM.COM | Bin 1280 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/CHAPTER1.DOC | 2 - software/CPM/CPM30_WORDSTAR_v400/CHAPTER2.DOC | 2 - software/CPM/CPM30_WORDSTAR_v400/CHAPTER3.DOC | 2 - software/CPM/CPM30_WORDSTAR_v400/DIARY.DOC | 74 - software/CPM/CPM30_WORDSTAR_v400/DICTSORT.COM | Bin 1792 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/FIND.COM | Bin 1280 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/HOMONYMS.TXT | Bin 5597 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/HYEXCEPT.TXT | 358 - software/CPM/CPM30_WORDSTAR_v400/HYPHEN.COM | Bin 8192 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/LOOKUP.COM | Bin 2048 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/MAINDICT.CMP | Bin 166912 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/MARKFIX.COM | Bin 3584 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/MOVEPRN.COM | Bin 4992 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/PATCH.LST | 1877 --- software/CPM/CPM30_WORDSTAR_v400/PRINT.TST | 143 - software/CPM/CPM30_WORDSTAR_v400/READ.ME | 2141 --- software/CPM/CPM30_WORDSTAR_v400/README | 15 - software/CPM/CPM30_WORDSTAR_v400/REVIEW.COM | Bin 5376 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/RULER.DOC | 22 - software/CPM/CPM30_WORDSTAR_v400/SAMPLE1.DOC | 17 - software/CPM/CPM30_WORDSTAR_v400/SAMPLE2.DOC | 15 - software/CPM/CPM30_WORDSTAR_v400/SAMPLE3.DOC | 5 - software/CPM/CPM30_WORDSTAR_v400/SPELL.COM | Bin 4096 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/TABLE.DOC | 17 - software/CPM/CPM30_WORDSTAR_v400/TEXT.DOC | 94 - software/CPM/CPM30_WORDSTAR_v400/TW.COM | Bin 3072 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WC.COM | Bin 1280 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WINSTALL.COM | Bin 20480 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WORDFREQ.COM | Bin 2560 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WS.COM | Bin 6784 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WS.OVR | Bin 52864 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSCHANGE.COM | Bin 34944 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSCHANGE.OVR | Bin 21888 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSCHHELP.OVR | Bin 29056 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSHELP.OVR | Bin 25856 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSINDEX.XCL | 232 - software/CPM/CPM30_WORDSTAR_v400/WSMSGS.OVR | Bin 13440 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSPRINT.OVR | Bin 152704 -> 0 bytes software/CPM/CPM30_WORDSTAR_v400/WSSHORT.OVR | Bin 512 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/CD.COM | Bin 5632 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/DEMO.TXT | 20 - software/CPM/CPM31_WORDSTAR_v330/MAILMRGE.OVR | Bin 13312 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/PRINT.TST | 121 - software/CPM/CPM31_WORDSTAR_v330/Read.me | 2 - software/CPM/CPM31_WORDSTAR_v330/SAMPLE.TXT | 73 - software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.DCT | Bin 97280 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.OVR | Bin 17920 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/WINSTALL.COM | Bin 29184 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/WS.INS | Bin 58240 -> 0 bytes .../WS330 patch points.txt | 72 - software/CPM/CPM31_WORDSTAR_v330/WSMSGS.OVR | Bin 30080 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/WSOVLY1.OVR | Bin 33536 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/WSU.COM | Bin 17664 -> 0 bytes .../CPM/CPM31_WORDSTAR_v330/WSbondwell.COM | Bin 17664 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/WSheath.COM | Bin 17664 -> 0 bytes .../CPM/CPM31_WORDSTAR_v330/WSkayproii.COM | Bin 17664 -> 0 bytes .../CPM/CPM31_WORDSTAR_v330/WSosborne1.COM | Bin 17664 -> 0 bytes .../CPM31_WORDSTAR_v330/WStelevideo950.COM | Bin 17664 -> 0 bytes software/CPM/CPM31_WORDSTAR_v330/ws3.hex | Bin 896 -> 0 bytes software/CPM/CPM32_ZCPR3/!(C)1988 | Bin 384 -> 0 bytes software/CPM/CPM32_ZCPR3/!NZ-COM | 0 software/CPM/CPM32_ZCPR3/!VERS--1.2H | 0 software/CPM/CPM32_ZCPR3/ALIAS.CMD | Bin 2688 -> 0 bytes software/CPM/CPM32_ZCPR3/ARUNZ.COM | Bin 6272 -> 0 bytes software/CPM/CPM32_ZCPR3/BGZRDS19.LBR | Bin 896 -> 0 bytes software/CPM/CPM32_ZCPR3/CLEDINST.COM | Bin 4992 -> 0 bytes software/CPM/CPM32_ZCPR3/CLEDSAVE.COM | Bin 1024 -> 0 bytes software/CPM/CPM32_ZCPR3/CONFIG.LBR | Bin 21760 -> 0 bytes software/CPM/CPM32_ZCPR3/COPY.COM | Bin 6784 -> 0 bytes software/CPM/CPM32_ZCPR3/CPSET.COM | Bin 2304 -> 0 bytes software/CPM/CPM32_ZCPR3/CRUNCH.COM | Bin 5632 -> 0 bytes software/CPM/CPM32_ZCPR3/DOCFILES.LBR | Bin 20480 -> 0 bytes software/CPM/CPM32_ZCPR3/EDITNDR.COM | Bin 6528 -> 0 bytes software/CPM/CPM32_ZCPR3/FCP.LBR | Bin 10496 -> 0 bytes software/CPM/CPM32_ZCPR3/FF.COM | Bin 3968 -> 0 bytes software/CPM/CPM32_ZCPR3/HELP.COM | Bin 4736 -> 0 bytes software/CPM/CPM32_ZCPR3/HLPFILES.LBR | Bin 17408 -> 0 bytes software/CPM/CPM32_ZCPR3/IF.COM | Bin 4480 -> 0 bytes software/CPM/CPM32_ZCPR3/JETLDR.COM | Bin 9088 -> 0 bytes software/CPM/CPM32_ZCPR3/LBREXT.COM | Bin 8192 -> 0 bytes software/CPM/CPM32_ZCPR3/LBRHELP.COM | Bin 5120 -> 0 bytes software/CPM/CPM32_ZCPR3/LDIR.COM | Bin 2048 -> 0 bytes software/CPM/CPM32_ZCPR3/LPUT.COM | Bin 6144 -> 0 bytes software/CPM/CPM32_ZCPR3/LSH-HELP.COM | Bin 2688 -> 0 bytes software/CPM/CPM32_ZCPR3/LSH.COM | Bin 8704 -> 0 bytes software/CPM/CPM32_ZCPR3/LSH.WZ | Bin 12032 -> 0 bytes software/CPM/CPM32_ZCPR3/LSHINST.COM | Bin 10880 -> 0 bytes software/CPM/CPM32_ZCPR3/LX.COM | Bin 3712 -> 0 bytes software/CPM/CPM32_ZCPR3/MKZCM.COM | Bin 6016 -> 0 bytes software/CPM/CPM32_ZCPR3/NAME.COM | Bin 1408 -> 0 bytes software/CPM/CPM32_ZCPR3/NZ-DBASE.INF | Bin 2304 -> 0 bytes software/CPM/CPM32_ZCPR3/NZBLITZ.COM | Bin 1920 -> 0 bytes software/CPM/CPM32_ZCPR3/NZBLTZ14.CFG | Bin 1408 -> 0 bytes software/CPM/CPM32_ZCPR3/NZBLTZ14.HZP | Bin 4480 -> 0 bytes software/CPM/CPM32_ZCPR3/NZCOM.COM | Bin 10624 -> 0 bytes software/CPM/CPM32_ZCPR3/NZCOM.LBR | Bin 13440 -> 0 bytes software/CPM/CPM32_ZCPR3/NZCPR.LBR | Bin 37760 -> 0 bytes software/CPM/CPM32_ZCPR3/PATH.COM | Bin 3456 -> 0 bytes software/CPM/CPM32_ZCPR3/PUBLIC.COM | Bin 2048 -> 0 bytes software/CPM/CPM32_ZCPR3/PWD.COM | Bin 3328 -> 0 bytes software/CPM/CPM32_ZCPR3/RCP.LBR | Bin 20096 -> 0 bytes software/CPM/CPM32_ZCPR3/RELEASE.NOT | 266 - software/CPM/CPM32_ZCPR3/SAINST.COM | Bin 4864 -> 0 bytes software/CPM/CPM32_ZCPR3/SALIAS.COM | Bin 7936 -> 0 bytes software/CPM/CPM32_ZCPR3/SAVENDR.COM | Bin 1536 -> 0 bytes software/CPM/CPM32_ZCPR3/SDZ.COM | Bin 6016 -> 0 bytes software/CPM/CPM32_ZCPR3/SHOW.COM | Bin 11008 -> 0 bytes software/CPM/CPM32_ZCPR3/SUB.COM | Bin 2688 -> 0 bytes software/CPM/CPM32_ZCPR3/TCAP.LBR | Bin 2176 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ.INF | 31 - software/CPM/CPM32_ZCPR3/TCJ25.WZ | Bin 4224 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ26.WZ | Bin 12032 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ27.WZ | Bin 15360 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ28.WZ | Bin 20352 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ29.WZ | Bin 25728 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ30.WZ | Bin 17792 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ31UPD.WZ | Bin 33792 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ32.WZ | Bin 22912 -> 0 bytes software/CPM/CPM32_ZCPR3/TCJ33UPD.WZ | Bin 25344 -> 0 bytes software/CPM/CPM32_ZCPR3/TCSELECT.COM | Bin 3072 -> 0 bytes software/CPM/CPM32_ZCPR3/TY3ERA.COM | Bin 3328 -> 0 bytes software/CPM/CPM32_ZCPR3/TY3REN.COM | Bin 3968 -> 0 bytes software/CPM/CPM32_ZCPR3/TY4ERA.COM | Bin 1408 -> 0 bytes software/CPM/CPM32_ZCPR3/TY4REN.COM | Bin 1152 -> 0 bytes software/CPM/CPM32_ZCPR3/TY4SAVE.COM | Bin 2048 -> 0 bytes software/CPM/CPM32_ZCPR3/TY4SP.COM | Bin 896 -> 0 bytes software/CPM/CPM32_ZCPR3/UNCRUNCH.COM | Bin 8064 -> 0 bytes software/CPM/CPM32_ZCPR3/VIEW.COM | Bin 7424 -> 0 bytes software/CPM/CPM32_ZCPR3/XTCAP.COM | Bin 3584 -> 0 bytes software/CPM/CPM32_ZCPR3/Z3LOC.COM | Bin 2048 -> 0 bytes software/CPM/CPM32_ZCPR3/Z3TCAP.TCP | Bin 11136 -> 0 bytes software/CPM/CPM32_ZCPR3/ZCNFG.COM | Bin 6144 -> 0 bytes software/CPM/CPM32_ZCPR3/ZERR.COM | Bin 3712 -> 0 bytes software/CPM/CPM32_ZCPR3/ZEX.COM | Bin 11008 -> 0 bytes software/CPM/CPM32_ZCPR3/ZF-DIM.COM | Bin 14848 -> 0 bytes software/CPM/CPM32_ZCPR3/ZF-REV.COM | Bin 14848 -> 0 bytes software/CPM/CPM32_ZCPR3/ZFILEB38.LZT | Bin 15872 -> 0 bytes software/CPM/CPM32_ZCPR3/ZFILER.CMD | 28 - software/CPM/CPM32_ZCPR3/ZFILER.COM | Bin 14848 -> 0 bytes software/CPM/CPM32_ZCPR3/ZHELPERS.LZT | Bin 2432 -> 0 bytes software/CPM/CPM32_ZCPR3/ZLT.COM | Bin 6016 -> 0 bytes software/CPM/CPM32_ZCPR3/ZNODES66.LZT | Bin 2304 -> 0 bytes software/CPM/CPM32_ZCPR3/ZSYSTEM.IZF | Bin 3200 -> 0 bytes software/CPM/CPM32_ZCPR3/nzcom.env | Bin 128 -> 0 bytes software/CPM/CPM32_ZCPR3/nzcom.zcm | Bin 640 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ARUNZ.COM | Bin 6272 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/CLEDINST.COM | Bin 4992 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/CLEDSAVE.COM | Bin 1024 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/COMMON.CRC | Bin 3200 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/CONFIG.LBR | Bin 21760 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/COPY.COM | Bin 6784 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/CPSET.COM | Bin 2304 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/CRUNCH.COM | Bin 5632 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/DOCFILES.LBR | Bin 20480 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/EDITNDR.COM | Bin 6528 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/FCP.LBR | Bin 10496 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/FF.COM | Bin 3968 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/HLPFILES.LBR | Bin 17408 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/IF.COM | Bin 4480 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/JETLDR.COM | Bin 9088 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LBREXT.COM | Bin 8192 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LBRHELP.COM | Bin 5120 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LDIR.COM | Bin 2048 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LPUT.COM | Bin 6144 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LSH-HELP.COM | Bin 2688 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LSH.COM | Bin 8704 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LSH.WZ | Bin 12032 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LSHINST.COM | Bin 10880 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/LX.COM | Bin 3712 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/NAME.COM | Bin 1408 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/PATH.COM | Bin 3456 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/PWD.COM | Bin 3328 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/RCP.LBR | Bin 20096 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/SAINST.COM | Bin 4864 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/SALIAS.COM | Bin 7936 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/SAVENDR.COM | Bin 1536 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/SDZ.COM | Bin 6016 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TCAP.LBR | Bin 2176 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TCJ.INF | 31 - software/CPM/CPM33_ZCPR3_COMMON/TCSELECT.COM | Bin 3072 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TY3ERA.COM | Bin 3328 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TY3REN.COM | Bin 3968 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TY4ERA.COM | Bin 1408 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TY4REN.COM | Bin 1152 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TY4SAVE.COM | Bin 2048 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/TY4SP.COM | Bin 896 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/UNCRUNCH.COM | Bin 8064 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/VIEW.COM | Bin 7424 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/XTCAP.COM | Bin 3584 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/Z3TCAP.TCP | Bin 11136 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZCNFG.COM | Bin 6144 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZERR.COM | Bin 3712 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZEX.COM | Bin 11008 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZF-DIM.COM | Bin 14848 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZF-REV.COM | Bin 14848 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZFILEB38.LZT | Bin 15872 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZFILER.CMD | 28 - software/CPM/CPM33_ZCPR3_COMMON/ZHELPERS.LZT | Bin 2432 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZLT.COM | Bin 6016 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZNODES66.LZT | Bin 2304 -> 0 bytes software/CPM/CPM33_ZCPR3_COMMON/ZSYSTEM.IZF | Bin 3200 -> 0 bytes software/CPM/CPM_MC_5/ALGEBRA.ARI | 412 - software/CPM/CPM_MC_5/ALL.SYS | Bin 36608 -> 0 bytes software/CPM/CPM_MC_5/ARITH%.MUS | 149 - software/CPM/CPM_MC_5/ARITH.MUS | 668 - software/CPM/CPM_MC_5/ARRAY.ARI | 210 - software/CPM/CPM_MC_5/ATRG.TRG | 75 - software/CPM/CPM_MC_5/CLES1.ARI | 203 - software/CPM/CPM_MC_5/CLES2.ARI | 178 - software/CPM/CPM_MC_5/CLES3.ALG | 458 - software/CPM/CPM_MC_5/CLES4.ALG | 275 - software/CPM/CPM_MC_5/CLES5.ALG | 349 - software/CPM/CPM_MC_5/CONTINUE.COM | Bin 128 -> 0 bytes software/CPM/CPM_MC_5/CUBIC.MU | Bin 1024 -> 0 bytes software/CPM/CPM_MC_5/DEMO.ALL | 190 - software/CPM/CPM_MC_5/DIF.ALG | 106 - software/CPM/CPM_MC_5/EQN.ALG | 59 - software/CPM/CPM_MC_5/FACTORS.MU | 38 - software/CPM/CPM_MC_5/FLOAT.MU | Bin 2048 -> 0 bytes software/CPM/CPM_MC_5/HEX.MU | Bin 384 -> 0 bytes software/CPM/CPM_MC_5/INT%.DIF | 16 - software/CPM/CPM_MC_5/INT.DIF | 197 - software/CPM/CPM_MC_5/INTMORE.INT | 214 - software/CPM/CPM_MC_5/LIM%.DIF | 16 - software/CPM/CPM_MC_5/LIM.DIF | 316 - software/CPM/CPM_MC_5/LOG%.ALG | 25 - software/CPM/CPM_MC_5/LOG.ALG | 71 - software/CPM/CPM_MC_5/MATRIX.ARR | 219 - software/CPM/CPM_MC_5/MUMATH%.DOC | 429 - software/CPM/CPM_MC_5/MUSIMP.COM | Bin 16384 -> 0 bytes software/CPM/CPM_MC_5/MUSIMP.OBJ | Bin 16384 -> 0 bytes software/CPM/CPM_MC_5/PI.MU | Bin 384 -> 0 bytes software/CPM/CPM_MC_5/PLES1.TRA | 578 - software/CPM/CPM_MC_5/PLES2.TRA | 297 - software/CPM/CPM_MC_5/PLES3.TRA | 441 - software/CPM/CPM_MC_5/PLES4.TRA | 395 - software/CPM/CPM_MC_5/PLES5.TRA | 392 - software/CPM/CPM_MC_5/PLOT.MU | 189 - software/CPM/CPM_MC_5/READ.ME | 13 - software/CPM/CPM_MC_5/SERIES%.DIF | 314 - software/CPM/CPM_MC_5/SIGMA.ALG | 97 - software/CPM/CPM_MC_5/SOLVE.EQN | 134 - software/CPM/CPM_MC_5/SOLVE4%.EQN | 161 - software/CPM/CPM_MC_5/TAYLOR.DIF | 21 - software/CPM/CPM_MC_5/TAYLOR.MU | 67 - software/CPM/CPM_MC_5/TRACE.MUS | 161 - software/CPM/CPM_MC_5/TRGNEG%.ALG | 79 - software/CPM/CPM_MC_5/TRGNEG.ALG | 154 - software/CPM/CPM_MC_5/TRGPOS.ALG | 102 - software/CPM/CPM_MC_5/UNPARSE.MUS | 191 - software/CPM/CPM_MC_C0/-(C)1988 | 0 software/CPM/CPM_MC_C0/-BGII.134 | 0 software/CPM/CPM_MC_C0/-PLUPERF.SYS | 0 software/CPM/CPM_MC_C0/BG.HLP | 495 - software/CPM/CPM_MC_C0/BG.REL | Bin 46080 -> 0 bytes software/CPM/CPM_MC_C0/BG134.DOC | 311 - software/CPM/CPM_MC_C0/BGHIST.HLP | 124 - software/CPM/CPM_MC_C0/BGHIST07.OCP | Bin 4096 -> 0 bytes software/CPM/CPM_MC_C0/BGINFO.HLP | 287 - software/CPM/CPM_MC_C0/EX.COM | Bin 2560 -> 0 bytes software/CPM/CPM_MC_C0/FILES.TXT | 11 - software/CPM/CPM_MC_C0/H19SCRN.DRV | Bin 1536 -> 0 bytes software/CPM/CPM_MC_C0/K8384FNK.FNK | Bin 768 -> 0 bytes software/CPM/CPM_MC_C0/K83SCRN.DRV | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C0/K84SCRN.DRV | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C0/KAYPRO.BG | Bin 128 -> 0 bytes software/CPM/CPM_MC_C0/MAKENDR.COM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_C0/ON!TVI.DRV | Bin 1536 -> 0 bytes software/CPM/CPM_MC_C0/PUTBG.COM | Bin 18432 -> 0 bytes software/CPM/CPM_MC_C0/Q.COM | Bin 6144 -> 0 bytes software/CPM/CPM_MC_C0/RELEASE.NOT | 343 - software/CPM/CPM_MC_C0/REMOVE.COM | Bin 1024 -> 0 bytes software/CPM/CPM_MC_C0/S19FNK.FNK | Bin 768 -> 0 bytes software/CPM/CPM_MC_C0/SECURE.COM | Bin 3072 -> 0 bytes software/CPM/CPM_MC_C0/SETBG.COM | Bin 18432 -> 0 bytes software/CPM/CPM_MC_C0/SETTERM.COM | Bin 20480 -> 0 bytes software/CPM/CPM_MC_C0/SPOOLER.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_C0/SYNONYM.COM | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C0/TERMBASE.DAT | Bin 6656 -> 0 bytes software/CPM/CPM_MC_C0/TVI.DRV | Bin 1536 -> 0 bytes software/CPM/CPM_MC_C0/WS30RDRW.HEX | Bin 384 -> 0 bytes software/CPM/CPM_MC_C0/WS33RDRW.HEX | Bin 384 -> 0 bytes software/CPM/CPM_MC_C0/WSKAYPRO.BG | Bin 128 -> 0 bytes software/CPM/CPM_MC_C0/WYSE50.DRV | Bin 1536 -> 0 bytes software/CPM/CPM_MC_C0/ZEX31A.COM | Bin 4992 -> 0 bytes software/CPM/CPM_MC_C1/-TINY#C.254 | 0 software/CPM/CPM_MC_C1/-TINY#C.265 | 0 software/CPM/CPM_MC_C1/BDSCIO.H | 179 - software/CPM/CPM_MC_C1/BUGS.C | 340 - software/CPM/CPM_MC_C1/C.CCC | Bin 128 -> 0 bytes software/CPM/CPM_MC_C1/C.DOC | 431 - software/CPM/CPM_MC_C1/CC0T.C | 94 - software/CPM/CPM_MC_C1/CC1.COM | Bin 10496 -> 0 bytes software/CPM/CPM_MC_C1/CC2.COM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_C1/CHARLIST.C | 177 - software/CPM/CPM_MC_C1/CLIB.COM | Bin 4352 -> 0 bytes software/CPM/CPM_MC_C1/CLINKC.COM | Bin 2944 -> 0 bytes software/CPM/CPM_MC_C1/CONVERT.C | 138 - software/CPM/CPM_MC_C1/CTC.ASM | 634 - software/CPM/CPM_MC_C1/DISK.C | 286 - software/CPM/CPM_MC_C1/DISKTRAN.C | 81 - software/CPM/CPM_MC_C1/DIVINE.C | 49 - software/CPM/CPM_MC_C1/EL2.TC | 0 software/CPM/CPM_MC_C1/EL2LF.TC | 59 - software/CPM/CPM_MC_C1/ELINE.TC | 1 - software/CPM/CPM_MC_C1/ELINELF.TC | 53 - software/CPM/CPM_MC_C1/ENDLINE.TC | Bin 3200 -> 0 bytes software/CPM/CPM_MC_C1/FACT.TC | Bin 256 -> 0 bytes software/CPM/CPM_MC_C1/FALLOUT.C | 173 - software/CPM/CPM_MC_C1/FILECOMP.C | 275 - software/CPM/CPM_MC_C1/FLOAT.C | 315 - software/CPM/CPM_MC_C1/FLOATSUM.C | 39 - software/CPM/CPM_MC_C1/GETPUT.TC | 1 - software/CPM/CPM_MC_C1/GLOBALS.WP | 40 - software/CPM/CPM_MC_C1/GUESSNUM.TC | Bin 896 -> 0 bytes software/CPM/CPM_MC_C1/LIFE.C | 278 - software/CPM/CPM_MC_C1/LIFE.CRL | Bin 640 -> 0 bytes software/CPM/CPM_MC_C1/LINES.C | 483 - software/CPM/CPM_MC_C1/LIST.C | 161 - software/CPM/CPM_MC_C1/LPR.C | 128 - software/CPM/CPM_MC_C1/MACDEFS.WP | 44 - software/CPM/CPM_MC_C1/MM.C | 181 - software/CPM/CPM_MC_C1/MYLIB.C | 160 - software/CPM/CPM_MC_C1/OTHELLO.C | 527 - software/CPM/CPM_MC_C1/P.C | 66 - software/CPM/CPM_MC_C1/PNUM.C | 40 - software/CPM/CPM_MC_C1/PPONG.C | 263 - software/CPM/CPM_MC_C1/PPS.DOC | 23 - software/CPM/CPM_MC_C1/PPS.TC | Bin 5120 -> 0 bytes software/CPM/CPM_MC_C1/PPSLF.TC | Bin 5504 -> 0 bytes software/CPM/CPM_MC_C1/PRESSUP.C | 341 - software/CPM/CPM_MC_C1/QUEUE.C | 216 - software/CPM/CPM_MC_C1/R2.MAP | Bin 768 -> 0 bytes software/CPM/CPM_MC_C1/RALLY.C | 411 - software/CPM/CPM_MC_C1/RALLY.MAP | Bin 2048 -> 0 bytes software/CPM/CPM_MC_C1/STDLIB.C | 370 - software/CPM/CPM_MC_C1/STDLIB1.C | 457 - software/CPM/CPM_MC_C1/STDLIB2.C | 647 - software/CPM/CPM_MC_C1/STONE.C | 433 - software/CPM/CPM_MC_C1/STONE.COM | Bin 11776 -> 0 bytes software/CPM/CPM_MC_C1/STONE.CRL | Bin 768 -> 0 bytes software/CPM/CPM_MC_C1/TC.ASM | 2492 ---- software/CPM/CPM_MC_C1/TC.COM | Bin 5888 -> 0 bytes software/CPM/CPM_MC_C1/TCASM.DOC | 148 - software/CPM/CPM_MC_C1/TELNET.C | 859 -- software/CPM/CPM_MC_C1/UCSD2CPM.C | 504 - software/CPM/CPM_MC_C1/UCSDIR.C | 255 - software/CPM/CPM_MC_C1/UTIL-WP.C | 257 - software/CPM/CPM_MC_C1/WDZITDO.C | 145 - software/CPM/CPM_MC_C1/WP.C | 516 - software/CPM/CPM_MC_C1/WP.DOC | 92 - software/CPM/CPM_MC_C1/WP.OUT | 199 - software/CPM/CPM_MC_C1/~TINY#C1.010 | 0 software/CPM/CPM_MC_C2/ACOS.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/ACOSH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/APL-SVAR.DOC | 37 - software/CPM/CPM_MC_C2/APL.COM | Bin 32512 -> 0 bytes software/CPM/CPM_MC_C2/APL.DOC | Bin 1920 -> 0 bytes software/CPM/CPM_MC_C2/APL.NOT | 507 - software/CPM/CPM_MC_C2/ASIN.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/ASINH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/ATAN.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/ATANH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/CN.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/COMPLEX.AWS | Bin 3072 -> 0 bytes software/CPM/CPM_MC_C2/COSECH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/COSH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/COTH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/CRCKLIST.CRC | 44 - software/CPM/CPM_MC_C2/DN.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/DROP.ACO | Bin 512 -> 0 bytes software/CPM/CPM_MC_C2/DTR.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/FACT.ACO | Bin 512 -> 0 bytes software/CPM/CPM_MC_C2/GAMMA.ACO | Bin 512 -> 0 bytes software/CPM/CPM_MC_C2/GEN.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/INNERPRO.ACO | Bin 512 -> 0 bytes software/CPM/CPM_MC_C2/IP.ACO | 1 - software/CPM/CPM_MC_C2/J.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/JELF.ACO | Bin 768 -> 0 bytes software/CPM/CPM_MC_C2/LAMINATE.ACO | 1 - software/CPM/CPM_MC_C2/LIFE.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/MATDIV.ACO | Bin 1536 -> 0 bytes software/CPM/CPM_MC_C2/MATINV.ACO | 1 - software/CPM/CPM_MC_C2/NOTES.ACO | Bin 3584 -> 0 bytes software/CPM/CPM_MC_C2/PERM.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/REVERSE.ACO | 1 - software/CPM/CPM_MC_C2/ROTATE.ACO | 1 - software/CPM/CPM_MC_C2/RTD.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/SECH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/SINH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/SN.ACO | 1 - software/CPM/CPM_MC_C2/TAKE.ACO | Bin 512 -> 0 bytes software/CPM/CPM_MC_C2/TANH.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/TRANSPOS.ACO | 1 - software/CPM/CPM_MC_C2/TRIGFNS.AWS | Bin 2560 -> 0 bytes software/CPM/CPM_MC_C2/UNIMAT.ACO | Bin 256 -> 0 bytes software/CPM/CPM_MC_C2/WSFNS.AWS | Bin 9984 -> 0 bytes software/CPM/CPM_MC_C3/BIT.JRL | Bin 384 -> 0 bytes software/CPM/CPM_MC_C3/BIT.LIB | 45 - software/CPM/CPM_MC_C3/BIT.SYM | Bin 640 -> 0 bytes software/CPM/CPM_MC_C3/CHAINLIB.JRL | Bin 1152 -> 0 bytes software/CPM/CPM_MC_C3/CHAINLIB.LIB | 31 - software/CPM/CPM_MC_C3/CHAINLIB.SYM | Bin 256 -> 0 bytes software/CPM/CPM_MC_C3/CRCKLIST.CRC | 51 - software/CPM/CPM_MC_C3/ERROR.MSG | 1 - software/CPM/CPM_MC_C3/FLOATIO.JRL | Bin 10368 -> 0 bytes software/CPM/CPM_MC_C3/FLOATIO.LIB | 64 - software/CPM/CPM_MC_C3/FLOATIO.SYM | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C3/FLOATOPS.JRL | Bin 5120 -> 0 bytes software/CPM/CPM_MC_C3/FLOATOPS.LIB | 109 - software/CPM/CPM_MC_C3/FLOATOPS.SYM | Bin 1408 -> 0 bytes software/CPM/CPM_MC_C3/IO.JRL | Bin 8320 -> 0 bytes software/CPM/CPM_MC_C3/IO.LIB | 63 - software/CPM/CPM_MC_C3/IO.SYM | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C3/JANUS.COM | Bin 25728 -> 0 bytes software/CPM/CPM_MC_C3/JANUS1.OVL | Bin 20224 -> 0 bytes software/CPM/CPM_MC_C3/JANUS2.COM | Bin 32896 -> 0 bytes software/CPM/CPM_MC_C3/JANUS2A.COM | Bin 40960 -> 0 bytes software/CPM/CPM_MC_C3/JANUS2B.COM | Bin 36480 -> 0 bytes software/CPM/CPM_MC_C3/JANUS3.COM | Bin 39552 -> 0 bytes software/CPM/CPM_MC_C3/JANUS4.COM | Bin 8320 -> 0 bytes software/CPM/CPM_MC_C3/JLIB80.JRL | Bin 6272 -> 0 bytes software/CPM/CPM_MC_C3/JLIB80.LIB | 153 - software/CPM/CPM_MC_C3/JLIB80.SYM | Bin 4608 -> 0 bytes software/CPM/CPM_MC_C3/JLINK.COM | Bin 18560 -> 0 bytes software/CPM/CPM_MC_C3/KALAHA.PKG | 521 - software/CPM/CPM_MC_C3/LONGIO.JRL | Bin 2304 -> 0 bytes software/CPM/CPM_MC_C3/LONGIO.LIB | 34 - software/CPM/CPM_MC_C3/LONGIO.SYM | Bin 384 -> 0 bytes software/CPM/CPM_MC_C3/LONGOPS.JRL | Bin 1664 -> 0 bytes software/CPM/CPM_MC_C3/LONGOPS.LIB | 62 - software/CPM/CPM_MC_C3/LONGOPS.SYM | Bin 896 -> 0 bytes software/CPM/CPM_MC_C3/MATHLIB.JRL | Bin 21376 -> 0 bytes software/CPM/CPM_MC_C3/MATHLIB.LIB | 70 - software/CPM/CPM_MC_C3/MATHLIB.SYM | Bin 896 -> 0 bytes software/CPM/CPM_MC_C3/MATMUL.PKG | 97 - software/CPM/CPM_MC_C3/MEMCHK.COM | Bin 5504 -> 0 bytes software/CPM/CPM_MC_C3/OPCODE.JRL | Bin 256 -> 0 bytes software/CPM/CPM_MC_C3/OPCODE.LIB | 293 - software/CPM/CPM_MC_C3/OPCODE.SYM | Bin 7296 -> 0 bytes software/CPM/CPM_MC_C3/PRIME.PKG | 32 - software/CPM/CPM_MC_C3/QSORT.PKG | 208 - software/CPM/CPM_MC_C3/RANDIO.LIB | 133 - software/CPM/CPM_MC_C3/RANDIO.PKG | 439 - software/CPM/CPM_MC_C3/RANDOM.JRL | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C3/RANDOM.LIB | 18 - software/CPM/CPM_MC_C3/RANDOM.SYM | Bin 256 -> 0 bytes software/CPM/CPM_MC_C3/SECT.LIB | 19 - software/CPM/CPM_MC_C3/SFLOATIO.JRL | Bin 8192 -> 0 bytes software/CPM/CPM_MC_C3/SFLOATIO.LIB | 42 - software/CPM/CPM_MC_C3/SFLOATIO.SYM | Bin 640 -> 0 bytes software/CPM/CPM_MC_C3/SFLOATOP.JRL | Bin 4864 -> 0 bytes software/CPM/CPM_MC_C3/SFLOATOP.LIB | 109 - software/CPM/CPM_MC_C3/SFLOATOP.SYM | Bin 1408 -> 0 bytes software/CPM/CPM_MC_C3/SMATHLIB.JRL | Bin 18560 -> 0 bytes software/CPM/CPM_MC_C3/SMATHLIB.LIB | 73 - software/CPM/CPM_MC_C3/SMATHLIB.SYM | Bin 896 -> 0 bytes software/CPM/CPM_MC_C3/SRANDOM.JRL | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C3/SRANDOM.LIB | 18 - software/CPM/CPM_MC_C3/SRANDOM.SYM | Bin 256 -> 0 bytes software/CPM/CPM_MC_C3/STANDARD.SYM | Bin 2944 -> 0 bytes software/CPM/CPM_MC_C3/STRLIB.JRL | Bin 5760 -> 0 bytes software/CPM/CPM_MC_C3/STRLIB.LIB | 37 - software/CPM/CPM_MC_C3/STRLIB.SYM | Bin 640 -> 0 bytes software/CPM/CPM_MC_C3/TIMELIB.LIB | 39 - software/CPM/CPM_MC_C3/TIMELIB.PKG | 124 - software/CPM/CPM_MC_C3/TIMELIB.SYM | Bin 640 -> 0 bytes software/CPM/CPM_MC_C3/UTIL.JRL | Bin 384 -> 0 bytes software/CPM/CPM_MC_C3/UTIL.LIB | 47 - software/CPM/CPM_MC_C3/UTIL.SYM | Bin 1024 -> 0 bytes software/CPM/CPM_MC_C3/XREF.PKG | 261 - software/CPM/CPM_MC_C4/CDADDS.MAC | Bin 4224 -> 0 bytes software/CPM/CPM_MC_C4/CDADDS.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDADM3.MAC | Bin 4864 -> 0 bytes software/CPM/CPM_MC_C4/CDADM3.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDANSI.MAC | Bin 4864 -> 0 bytes software/CPM/CPM_MC_C4/CDANSI.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDBEE.MAC | Bin 4352 -> 0 bytes software/CPM/CPM_MC_C4/CDBEE.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDHZ15.MAC | Bin 4352 -> 0 bytes software/CPM/CPM_MC_C4/CDHZ15.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDISB.MAC | Bin 3968 -> 0 bytes software/CPM/CPM_MC_C4/CDISB.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDPERK.MAC | Bin 3968 -> 0 bytes software/CPM/CPM_MC_C4/CDPERK.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDSROC.MAC | Bin 3968 -> 0 bytes software/CPM/CPM_MC_C4/CDSROC.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDWH19.MAC | Bin 4096 -> 0 bytes software/CPM/CPM_MC_C4/CDWH19.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/CDZEPH.MAC | Bin 4352 -> 0 bytes software/CPM/CPM_MC_C4/CDZEPH.REL | Bin 512 -> 0 bytes software/CPM/CPM_MC_C4/COBLBX.REL | Bin 27904 -> 0 bytes software/CPM/CPM_MC_C4/COBLIB.REL | Bin 52864 -> 0 bytes software/CPM/CPM_MC_C4/COBLOC | Bin 128 -> 0 bytes software/CPM/CPM_MC_C4/COBOL.COM | Bin 32000 -> 0 bytes software/CPM/CPM_MC_C4/COBOL1.OVR | Bin 12416 -> 0 bytes software/CPM/CPM_MC_C4/COBOL2.OVR | Bin 13056 -> 0 bytes software/CPM/CPM_MC_C4/COBOL3.OVR | Bin 18176 -> 0 bytes software/CPM/CPM_MC_C4/COBOL4.OVR | Bin 6400 -> 0 bytes software/CPM/CPM_MC_C4/CREF80.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_C4/CRTDRV.REL | Bin 384 -> 0 bytes software/CPM/CPM_MC_C4/CRTEST.COB | Bin 7040 -> 0 bytes software/CPM/CPM_MC_C4/CVISAM.COM | Bin 39168 -> 0 bytes software/CPM/CPM_MC_C4/DEBUG.REL | Bin 5120 -> 0 bytes software/CPM/CPM_MC_C4/L80.COM | Bin 10752 -> 0 bytes software/CPM/CPM_MC_C4/LD80.COM | Bin 17280 -> 0 bytes software/CPM/CPM_MC_C4/LIB.COM | Bin 4736 -> 0 bytes software/CPM/CPM_MC_C4/M80.COM | Bin 19200 -> 0 bytes software/CPM/CPM_MC_C4/REBUILD.COM | Bin 19456 -> 0 bytes software/CPM/CPM_MC_C4/RECOVR.COB | Bin 5376 -> 0 bytes software/CPM/CPM_MC_C4/RUNCOB.COM | Bin 18944 -> 0 bytes software/CPM/CPM_MC_C4/SEQCVT.COM | Bin 5376 -> 0 bytes software/CPM/CPM_MC_C4/SQUARO.COB | Bin 2304 -> 0 bytes software/CPM/CPM_MC_C5/ASL.REL | Bin 8960 -> 0 bytes software/CPM/CPM_MC_C5/BERRIES.PLT | 10 - software/CPM/CPM_MC_C5/CATALOG | 42 - software/CPM/CPM_MC_C5/CHAIN.REL | Bin 256 -> 0 bytes software/CPM/CPM_MC_C5/CHAIN.SUB | 10 - software/CPM/CPM_MC_C5/COMPILE.SUB | 7 - software/CPM/CPM_MC_C5/CPM.HLP | 925 -- software/CPM/CPM_MC_C5/DISK.COM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_C5/DO.COM | Bin 2176 -> 0 bytes software/CPM/CPM_MC_C5/GOLDI.PLT | 62 - software/CPM/CPM_MC_C5/HIPILOT.PLT | 44 - software/CPM/CPM_MC_C5/ILIB.REL | Bin 11520 -> 0 bytes software/CPM/CPM_MC_C5/LESSON1.PLT | 11 - software/CPM/CPM_MC_C5/LESSON2.PLT | 11 - software/CPM/CPM_MC_C5/LESSONS.PLT | 25 - software/CPM/CPM_MC_C5/LMENU.PLT | 45 - software/CPM/CPM_MC_C5/MATCH.PZ | 77 - software/CPM/CPM_MC_C5/MATCH.REL | Bin 768 -> 0 bytes software/CPM/CPM_MC_C5/MATCH.SRC | 256 - software/CPM/CPM_MC_C5/PILOT#P.COM | Bin 14336 -> 0 bytes software/CPM/CPM_MC_C5/PILOT#P.DOC | 418 - software/CPM/CPM_MC_C5/PILOT#P.HDR | 58 - software/CPM/CPM_MC_C5/PILOT#P.PAS | 648 - software/CPM/CPM_MC_C5/PILOT#P.REF | 270 - software/CPM/CPM_MC_C5/PILOT#P.SUB | 9 - software/CPM/CPM_MC_C5/PILOT#PR.HDR | 69 - software/CPM/CPM_MC_C5/PRIMS.PZ | 36 - software/CPM/CPM_MC_C5/SAGE.PLT | 161 - software/CPM/CPM_MC_C5/SAMPLE1.PLT | 17 - software/CPM/CPM_MC_C5/SAMPLE2.PLT | 37 - software/CPM/CPM_MC_C5/SAMPLE3.PLT | 59 - software/CPM/CPM_MC_C5/SAMPLE4.PLT | 26 - software/CPM/CPM_MC_C5/SAMPLE5.PLT | 24 - software/CPM/CPM_MC_C5/SAMPLE6.PLT | 47 - software/CPM/CPM_MC_C5/SAMPLE7.PLT | 29 - software/CPM/CPM_MC_C5/TUTORIAL.PLT | 98 - software/CPM/CPM_MC_C5/WAIT.PZ | 27 - software/CPM/CPM_MC_C5/WAIT.REL | Bin 256 -> 0 bytes software/CPM/CPM_MC_C5/WAIT.SRC | 83 - software/CPM/CPM_MC_C5/XDIR.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_C6/S0FILEIO.MAC | 87 - software/CPM/CPM_MC_C6/S1FILEIO.MAC | 87 - software/CPM/CPM_MC_C6/S2FILEIO.MAC | 87 - software/CPM/CPM_MC_C6/S3FILEIO.MAC | 87 - software/CPM/CPM_MC_C6/SBBLINE.MAC | 89 - software/CPM/CPM_MC_C6/SBDOS.MAC | 27 - software/CPM/CPM_MC_C6/SBIOS.MAC | 80 - software/CPM/CPM_MC_C6/SBLINE.MAC | 99 - software/CPM/CPM_MC_C6/SCAPS.MAC | 25 - software/CPM/CPM_MC_C6/SCAPSTR.MAC | 35 - software/CPM/CPM_MC_C6/SCATH.MAC | 34 - software/CPM/CPM_MC_C6/SCCOUT.MAC | 60 - software/CPM/CPM_MC_C6/SCIN.MAC | 44 - software/CPM/CPM_MC_C6/SCLINE.MAC | 58 - software/CPM/CPM_MC_C6/SCLOUT.MAC | 60 - software/CPM/CPM_MC_C6/SCODEND.MAC | 30 - software/CPM/CPM_MC_C6/SCOMP.MAC | 57 - software/CPM/CPM_MC_C6/SCOMPHD.MAC | 28 - software/CPM/CPM_MC_C6/SCONDIN.MAC | 34 - software/CPM/CPM_MC_C6/SCOUT.MAC | 47 - software/CPM/CPM_MC_C6/SCPOUT.MAC | 60 - software/CPM/CPM_MC_C6/SCRC.MAC | 121 - software/CPM/CPM_MC_C6/SCRC1.MAC | 121 - software/CPM/CPM_MC_C6/SCRC2.MAC | 119 - software/CPM/CPM_MC_C6/SCRLF.MAC | 43 - software/CPM/CPM_MC_C6/SCST.MAC | 46 - software/CPM/CPM_MC_C6/SDIR.MAC | 1312 -- software/CPM/CPM_MC_C6/SEN.MAC | 24 - software/CPM/CPM_MC_C6/SEPRINT.MAC | 27 - software/CPM/CPM_MC_C6/SEPSTR.MAC | 92 - software/CPM/CPM_MC_C6/SEVAL.MAC | 147 - software/CPM/CPM_MC_C6/SEVAL1.MAC | 67 - software/CPM/CPM_MC_C6/SEVAL2.MAC | 75 - software/CPM/CPM_MC_C6/SEVAL3.MAC | 67 - software/CPM/CPM_MC_C6/SEVAL4.MAC | 59 - software/CPM/CPM_MC_C6/SFCLOS.MAC | 34 - software/CPM/CPM_MC_C6/SFDEL.MAC | 29 - software/CPM/CPM_MC_C6/SFEXIST.MAC | 32 - software/CPM/CPM_MC_C6/SFILEIO.MAC | 419 - software/CPM/CPM_MC_C6/SFILL.MAC | 71 - software/CPM/CPM_MC_C6/SFMAKE.MAC | 31 - software/CPM/CPM_MC_C6/SFNAME.MAC | 246 - software/CPM/CPM_MC_C6/SFOPEN.MAC | 65 - software/CPM/CPM_MC_C6/SFREAD.MAC | 30 - software/CPM/CPM_MC_C6/SFRENAME.MAC | 81 - software/CPM/CPM_MC_C6/SFWRIT.MAC | 30 - software/CPM/CPM_MC_C6/SHDR.MAC | 9 - software/CPM/CPM_MC_C6/SINITFCB.MAC | 48 - software/CPM/CPM_MC_C6/SINLINE.MAC | 286 - software/CPM/CPM_MC_C6/SINSTR.MAC | 72 - software/CPM/CPM_MC_C6/SLA2HC.MAC | 39 - software/CPM/CPM_MC_C6/SLADC.MAC | 76 - software/CPM/CPM_MC_C6/SLCRLF.MAC | 43 - software/CPM/CPM_MC_C6/SLHL4HC.MAC | 29 - software/CPM/CPM_MC_C6/SLHL5DC.MAC | 98 - software/CPM/CPM_MC_C6/SLOUT.MAC | 47 - software/CPM/CPM_MC_C6/SLPRINT.MAC | 26 - software/CPM/CPM_MC_C6/SLPSTR.MAC | 91 - software/CPM/CPM_MC_C6/SMA2HC.MAC | 41 - software/CPM/CPM_MC_C6/SMADC.MAC | 85 - software/CPM/CPM_MC_C6/SMATH.MAC | 294 - software/CPM/CPM_MC_C6/SMHL4HC.MAC | 29 - software/CPM/CPM_MC_C6/SMHL5DC.MAC | 116 - software/CPM/CPM_MC_C6/SMOVE.MAC | 132 - software/CPM/CPM_MC_C6/SPA2HC.MAC | 39 - software/CPM/CPM_MC_C6/SPADC.MAC | 76 - software/CPM/CPM_MC_C6/SPAUSE.MAC | 124 - software/CPM/CPM_MC_C6/SPHL4HC.MAC | 29 - software/CPM/CPM_MC_C6/SPHL5DC.MAC | 98 - software/CPM/CPM_MC_C6/SPOUT.MAC | 47 - software/CPM/CPM_MC_C6/SPRINT.MAC | 26 - software/CPM/CPM_MC_C6/SPSTR.MAC | 91 - software/CPM/CPM_MC_C6/SRAND.MAC | 82 - software/CPM/CPM_MC_C6/SRIN.MAC | 44 - software/CPM/CPM_MC_C6/SSCANNER.MAC | 74 - software/CPM/CPM_MC_C6/SSORT.MAC | 563 - software/CPM/CPM_MC_C6/SUD.MAC | 103 - software/CPM/CPM_MC_C6/SVERSION.MAC | 31 - software/CPM/CPM_MC_C6/SYSLIB.HLP | 357 - software/CPM/CPM_MC_C6/SYSLIB.REL | Bin 13696 -> 0 bytes software/CPM/CPM_MC_C6/SYSLIB.WS | 3313 ----- software/CPM/CPM_MC_C6/SYSLIB1.HLP | 277 - software/CPM/CPM_MC_C6/SYSLIB2.HLP | 88 - software/CPM/CPM_MC_C6/SYSLIB3.HLP | 174 - software/CPM/CPM_MC_C6/SYSLIB4.HLP | 146 - software/CPM/CPM_MC_C6/SYSLIB5.HLP | 146 - software/CPM/CPM_MC_C6/SYSLIB6.HLP | 79 - software/CPM/CPM_MC_C6/SYSLIB7.HLP | 188 - software/CPM/CPM_MC_C6/SYSLIB8.HLP | 173 - software/CPM/CPM_MC_C6/SYSLIB9.HLP | 198 - software/CPM/CPM_MC_C6/SYSLIBA.HLP | 156 - software/CPM/CPM_MC_C6/SYSLIBB.HLP | 104 - software/CPM/CPM_MC_C6/SYSLIBC.HLP | 254 - software/CPM/CPM_MC_C6/SYSLIBHD.WS | 368 - software/CPM/CPM_MC_C6/SYSLIBHD2.WS | 383 - software/CPM/CPM_MC_C6/SYSLIBI.WS | 209 - software/CPM/CPM_MC_C6/SYSLIBID.WS | 94 - software/CPM/CPM_MC_C6/SYSLIBR.WS | 150 - software/CPM/CPM_MC_C6/SYSLIBS.WS | 1676 --- software/CPM/CPM_MC_C6/SYSLIBUG.WS | 2905 ---- software/CPM/CPM_MC_C6/SYSTEST.MAC | 130 - software/CPM/CPM_MC_C6/SYSTEST1.MAC | 115 - software/CPM/CPM_MC_C6/SYSTEST2.MAC | 152 - software/CPM/CPM_MC_C6/SYSTEST3.MAC | 149 - software/CPM/CPM_MC_C6/SYSTEST4.MAC | 245 - software/CPM/CPM_MC_C6/SYSTEST5.MAC | 99 - software/CPM/CPM_MC_C6/SYSTEST6.MAC | 212 - software/CPM/CPM_MC_C6/SZCPR.MAC | 292 - software/CPM/CPM_MC_C6/SZFNAME.MAC | 777 - software/CPM/CPM_MC_C6/SZGPINS.MAC | 141 - software/CPM/CPM_MC_C6/Z2SYS.4MO | 89 - software/CPM/CPM_MC_C7/ANIMAL.BBC | Bin 425 -> 0 bytes software/CPM/CPM_MC_C7/ANIMAL.DAT | Bin 1280 -> 0 bytes software/CPM/CPM_MC_C7/BBCBASIC.COM | Bin 14848 -> 0 bytes software/CPM/CPM_MC_C7/BBCBASIC.ORG | Bin 14848 -> 0 bytes software/CPM/CPM_MC_C7/BBCBASIC.TXT | 369 - software/CPM/CPM_MC_C7/BBCDIST.MAC | 225 - software/CPM/CPM_MC_C7/BBCDIST.ORG | 210 - software/CPM/CPM_MC_C7/BBCDIST.SUB | 13 - software/CPM/CPM_MC_C7/CONVERT.COM | Bin 2304 -> 0 bytes software/CPM/CPM_MC_C7/CRC.COM | Bin 2688 -> 0 bytes software/CPM/CPM_MC_C7/CRCKLIST.CRC | 27 - software/CPM/CPM_MC_C7/F-INDEX.BBC | Bin 6784 -> 0 bytes software/CPM/CPM_MC_C7/F-RAND0.BBC | Bin 1408 -> 0 bytes software/CPM/CPM_MC_C7/F-RAND1.BBC | Bin 2304 -> 0 bytes software/CPM/CPM_MC_C7/F-RAND2.BBC | Bin 8064 -> 0 bytes software/CPM/CPM_MC_C7/F-RSER1.BBC | Bin 384 -> 0 bytes software/CPM/CPM_MC_C7/F-RSER2.BBC | Bin 1152 -> 0 bytes software/CPM/CPM_MC_C7/F-RSTD.BBC | Bin 1152 -> 0 bytes software/CPM/CPM_MC_C7/F-WESER1.BBC | Bin 1024 -> 0 bytes software/CPM/CPM_MC_C7/F-WESER2.BBC | Bin 3072 -> 0 bytes software/CPM/CPM_MC_C7/F-WSER1.BBC | Bin 640 -> 0 bytes software/CPM/CPM_MC_C7/F-WSER2.BBC | Bin 2944 -> 0 bytes software/CPM/CPM_MC_C7/F-WSTD.BBC | Bin 2560 -> 0 bytes software/CPM/CPM_MC_C7/MERGE.BBC | Bin 768 -> 0 bytes software/CPM/CPM_MC_C7/READ.ME | 26 - software/CPM/CPM_MC_C7/SORT.BBC | Bin 1920 -> 0 bytes software/CPM/CPM_MC_C7/SORTREAL.BBC | Bin 2048 -> 0 bytes software/CPM/CPM_MC_C8/CONTENTS.TXT | 0 software/CPM/CPM_MC_C9/CONTENTS.TXT | 0 software/CPM/CPM_MC_D0/ADV.COM | Bin 36224 -> 0 bytes software/CPM/CPM_MC_D0/ADVDDIA.SAV | Bin 1408 -> 0 bytes software/CPM/CPM_MC_D0/ADVDDOM.SAV | Bin 1408 -> 0 bytes software/CPM/CPM_MC_D0/ADVI.DAT | Bin 31872 -> 0 bytes software/CPM/CPM_MC_D0/ADVI.PTR | Bin 3968 -> 0 bytes software/CPM/CPM_MC_D0/ADVT.DAT | Bin 107392 -> 0 bytes software/CPM/CPM_MC_D0/ADVT.PTR | Bin 15488 -> 0 bytes software/CPM/CPM_MC_D0/ALIENS.COM | Bin 14592 -> 0 bytes software/CPM/CPM_MC_D0/BIGTREK.BAS | Bin 39936 -> 0 bytes software/CPM/CPM_MC_D0/CATCHUM.COM | Bin 29312 -> 0 bytes software/CPM/CPM_MC_D0/CATCHUM.DAT | Bin 512 -> 0 bytes software/CPM/CPM_MC_D0/CATCONF.COM | Bin 22528 -> 0 bytes software/CPM/CPM_MC_D0/CHESS.PAS | 3608 ----- software/CPM/CPM_MC_D0/CHESS.PQS | Bin 51712 -> 0 bytes software/CPM/CPM_MC_D0/CLONE.COM | Bin 26880 -> 0 bytes software/CPM/CPM_MC_D0/CLONE.DAT | 1 - software/CPM/CPM_MC_D0/HITCH.COM | Bin 8832 -> 0 bytes software/CPM/CPM_MC_D0/HITCHHIK.DAT | Bin 113664 -> 0 bytes software/CPM/CPM_MC_D0/HUNT.COM | Bin 31488 -> 0 bytes software/CPM/CPM_MC_D0/HUNT.DOC | 4 - software/CPM/CPM_MC_D0/LADCONF.COM | Bin 22528 -> 0 bytes software/CPM/CPM_MC_D0/LADDER.COM | Bin 40320 -> 0 bytes software/CPM/CPM_MC_D0/LADDER.DAT | Bin 512 -> 0 bytes software/CPM/CPM_MC_D0/MONSTER.BAS | 149 - software/CPM/CPM_MC_D0/MONSTER.DOC | 54 - software/CPM/CPM_MC_D0/OTHELLO.COM | Bin 12032 -> 0 bytes software/CPM/CPM_MC_D0/PLANET.COM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_D0/PLANETFA.DAT | Bin 109568 -> 0 bytes software/CPM/CPM_MC_D0/QIX.COM | Bin 31104 -> 0 bytes software/CPM/CPM_MC_D0/QIX.DAT | 12 - software/CPM/CPM_MC_D0/QIX.DOC | 23 - software/CPM/CPM_MC_D0/QIXNSTL.INF | 40 - software/CPM/CPM_MC_D0/SARGON.COM | Bin 14720 -> 0 bytes software/CPM/CPM_MC_D0/SCREEN.001 | 19 - software/CPM/CPM_MC_D0/SCREEN.002 | 19 - software/CPM/CPM_MC_D0/SCREEN.003 | 19 - software/CPM/CPM_MC_D0/SCREEN.004 | 18 - software/CPM/CPM_MC_D0/STAR.COM | Bin 36608 -> 0 bytes software/CPM/CPM_MC_D0/WANDERER.COM | Bin 9216 -> 0 bytes software/CPM/CPM_MC_D0/WANDERER.TXT | 180 - software/CPM/CPM_MC_D0/WORM.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_D0/WORTE.TXT | 87 - software/CPM/CPM_MC_D0/ZORK1.COM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_D0/ZORK1.DAT | Bin 84992 -> 0 bytes software/CPM/CPM_MC_D0/ZORK2.COM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_D0/ZORK2.DAT | Bin 90112 -> 0 bytes software/CPM/CPM_MC_D0/ZORK3.COM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_D0/ZORK3.DAT | Bin 82944 -> 0 bytes software/CPM/CPM_MC_D1/ALGEBRA.ARI | 412 - software/CPM/CPM_MC_D1/ALL.SYS | Bin 36608 -> 0 bytes software/CPM/CPM_MC_D1/ARITH%.MUS | 149 - software/CPM/CPM_MC_D1/ARITH.MUS | 668 - software/CPM/CPM_MC_D1/ARRAY.ARI | 210 - software/CPM/CPM_MC_D1/ATRG.TRG | 75 - software/CPM/CPM_MC_D1/CLES1.ARI | 203 - software/CPM/CPM_MC_D1/CLES2.ARI | 178 - software/CPM/CPM_MC_D1/CLES3.ALG | 458 - software/CPM/CPM_MC_D1/CLES4.ALG | 275 - software/CPM/CPM_MC_D1/CLES5.ALG | 349 - software/CPM/CPM_MC_D1/CONTINUE.COM | Bin 128 -> 0 bytes software/CPM/CPM_MC_D1/CUBIC.MU | Bin 1024 -> 0 bytes software/CPM/CPM_MC_D1/DEMO.ALL | 190 - software/CPM/CPM_MC_D1/DIF.ALG | 106 - software/CPM/CPM_MC_D1/EQN.ALG | 59 - software/CPM/CPM_MC_D1/FACTORS.MU | 38 - software/CPM/CPM_MC_D1/FLOAT.MU | Bin 2048 -> 0 bytes software/CPM/CPM_MC_D1/HEX.MU | Bin 384 -> 0 bytes software/CPM/CPM_MC_D1/INT%.DIF | 16 - software/CPM/CPM_MC_D1/INT.DIF | 197 - software/CPM/CPM_MC_D1/INTMORE.INT | 214 - software/CPM/CPM_MC_D1/LIM%.DIF | 16 - software/CPM/CPM_MC_D1/LIM.DIF | 316 - software/CPM/CPM_MC_D1/LOG%.ALG | 25 - software/CPM/CPM_MC_D1/LOG.ALG | 71 - software/CPM/CPM_MC_D1/MATRIX.ARR | 219 - software/CPM/CPM_MC_D1/MUMATH%.DOC | 429 - software/CPM/CPM_MC_D1/MUSIMP.COM | Bin 16384 -> 0 bytes software/CPM/CPM_MC_D1/MUSIMP.OBJ | Bin 16384 -> 0 bytes software/CPM/CPM_MC_D1/PI.MU | Bin 384 -> 0 bytes software/CPM/CPM_MC_D1/PLES1.TRA | 578 - software/CPM/CPM_MC_D1/PLES2.TRA | 297 - software/CPM/CPM_MC_D1/PLES3.TRA | 441 - software/CPM/CPM_MC_D1/PLES4.TRA | 395 - software/CPM/CPM_MC_D1/PLES5.TRA | 392 - software/CPM/CPM_MC_D1/PLOT.MU | 189 - software/CPM/CPM_MC_D1/READ.ME | 13 - software/CPM/CPM_MC_D1/SERIES%.DIF | 314 - software/CPM/CPM_MC_D1/SIGMA.ALG | 97 - software/CPM/CPM_MC_D1/SOLVE.EQN | 134 - software/CPM/CPM_MC_D1/SOLVE4%.EQN | 161 - software/CPM/CPM_MC_D1/TAYLOR.DIF | 21 - software/CPM/CPM_MC_D1/TAYLOR.MU | 67 - software/CPM/CPM_MC_D1/TRACE.MUS | 161 - software/CPM/CPM_MC_D1/TRGNEG%.ALG | 79 - software/CPM/CPM_MC_D1/TRGNEG.ALG | 154 - software/CPM/CPM_MC_D1/TRGPOS.ALG | 102 - software/CPM/CPM_MC_D1/UNPARSE.MUS | 191 - software/CPM/CPM_MC_D2/820.ASM | 48 - software/CPM/CPM_MC_D2/820.HEX | 7 - software/CPM/CPM_MC_D2/820INIT.COM | Bin 1024 -> 0 bytes software/CPM/CPM_MC_D2/ALSPA.ASM | 36 - software/CPM/CPM_MC_D2/ALTOS.ASM | 83 - software/CPM/CPM_MC_D2/ARCHIVES.ASM | 41 - software/CPM/CPM_MC_D2/ATTACHE.ASM | 68 - software/CPM/CPM_MC_D2/BULLET.ASM | 38 - software/CPM/CPM_MC_D2/CCS.ASM | 39 - software/CPM/CPM_MC_D2/COMP.ASM | 58 - software/CPM/CPM_MC_D2/DYNA.ASM | 48 - software/CPM/CPM_MC_D2/EAGLE.ASM | 52 - software/CPM/CPM_MC_D2/HRZ.ASM | 46 - software/CPM/CPM_MC_D2/IO1.ASM | 35 - software/CPM/CPM_MC_D2/MOLEC.ASM | 38 - software/CPM/CPM_MC_D2/MORROW.ASM | 116 - software/CPM/CPM_MC_D2/NNC.ASM | 46 - software/CPM/CPM_MC_D2/SDS.ASM | 59 - software/CPM/CPM_MC_D2/SOL.ASM | 35 - software/CPM/CPM_MC_D2/TRS.ASM | 36 - software/CPM/CPM_MC_D2/TU-ART.ASM | 39 - software/CPM/CPM_MC_D2/VECTOR.ASM | 63 - software/CPM/CPM_MC_D2/XTALK.COM | Bin 11008 -> 0 bytes software/CPM/CPM_MC_D2/XTALK.HLP | 314 - software/CPM/CPM_MC_D2/ZENITH.ASM | 38 - software/CPM/CPM_MC_D3/-README.1ST | 88 - software/CPM/CPM_MC_D3/BAUD.ZY | Bin 2816 -> 0 bytes software/CPM/CPM_MC_D3/CATCH.ZY | Bin 1280 -> 0 bytes software/CPM/CPM_MC_D3/CF.ZY | Bin 7936 -> 0 bytes software/CPM/CPM_MC_D3/CHAT.ZY | Bin 9728 -> 0 bytes software/CPM/CPM_MC_D3/DIR.ZY | Bin 1536 -> 0 bytes software/CPM/CPM_MC_D3/FILE.ZY | Bin 4480 -> 0 bytes software/CPM/CPM_MC_D3/FLAGS.ZY | Bin 1280 -> 0 bytes software/CPM/CPM_MC_D3/KERMIT.IY | Bin 512 -> 0 bytes software/CPM/CPM_MC_D3/KUTIL.ZY | Bin 5120 -> 0 bytes software/CPM/CPM_MC_D3/MAKEQT.SUB | 10 - software/CPM/CPM_MC_D3/ODDS.ZY | Bin 5760 -> 0 bytes software/CPM/CPM_MC_D3/QT-PATCH.ZY | Bin 4224 -> 0 bytes software/CPM/CPM_MC_D3/QT43EFX2.ARK | Bin 4480 -> 0 bytes software/CPM/CPM_MC_D3/QTCHAT.DYC | Bin 11776 -> 0 bytes software/CPM/CPM_MC_D3/QTERM.CYM | Bin 12800 -> 0 bytes software/CPM/CPM_MC_D3/QTERM.DYC | Bin 10496 -> 0 bytes software/CPM/CPM_MC_D3/QTERM.FOR | 13 - software/CPM/CPM_MC_D3/QTERM.PYT | Bin 6784 -> 0 bytes software/CPM/CPM_MC_D3/QTERM.ZY | Bin 8064 -> 0 bytes software/CPM/CPM_MC_D3/QTERM43E.LBR | Bin 54272 -> 0 bytes software/CPM/CPM_MC_D3/RECV.ZY | Bin 1024 -> 0 bytes software/CPM/CPM_MC_D3/RECVK.ZY | Bin 1152 -> 0 bytes software/CPM/CPM_MC_D3/RECVX.ZY | Bin 1792 -> 0 bytes software/CPM/CPM_MC_D3/SEND.ZY | Bin 1024 -> 0 bytes software/CPM/CPM_MC_D3/SENDK.ZY | Bin 1024 -> 0 bytes software/CPM/CPM_MC_D3/SENDX.ZY | Bin 2048 -> 0 bytes software/CPM/CPM_MC_D3/SHRINK.ZY | Bin 512 -> 0 bytes software/CPM/CPM_MC_D3/SRSCRN.ZY | Bin 1920 -> 0 bytes software/CPM/CPM_MC_D3/SRUTIL.ZY | Bin 4608 -> 0 bytes software/CPM/CPM_MC_D3/TERMCAP.IY | Bin 256 -> 0 bytes software/CPM/CPM_MC_D3/TERMIO.ZY | Bin 4352 -> 0 bytes software/CPM/CPM_MC_D3/VARS.IY | Bin 640 -> 0 bytes software/CPM/CPM_MC_D3/VERSION.IY | Bin 384 -> 0 bytes software/CPM/CPM_MC_D3/VT100.ZY | Bin 2688 -> 0 bytes software/CPM/CPM_MC_D3/WHATS.NEW | 74 - software/CPM/CPM_MC_D3/XMODEM.IY | Bin 384 -> 0 bytes software/CPM/CPM_MC_D3/XUTIL.ZY | Bin 1536 -> 0 bytes software/CPM/CPM_MC_D4/CLINK.COM | Bin 7168 -> 0 bytes software/CPM/CPM_MC_D4/CLINK.DOC | 469 - software/CPM/CPM_MC_D4/CLINKREV.ASM | 3214 ----- software/CPM/CPM_MC_D4/CLINKREV.COM | Bin 7168 -> 0 bytes software/CPM/CPM_MC_D4/CLINKREV.HEX | 450 - software/CPM/CPM_MC_D4/CLINKREV.SYM | 92 - software/CPM/CPM_MC_D4/CSUS.DOC | 15 - software/CPM/CPM_MC_D4/CSUS1 | 19 - software/CPM/CPM_MC_D4/CSUS2 | 19 - software/CPM/CPM_MC_D4/CSUS3 | 19 - software/CPM/CPM_MC_D4/CSUS4 | 19 - software/CPM/CPM_MC_D4/CSUS5 | 19 - software/CPM/CPM_MC_D4/CSUSCYBR.DOC | 4 - software/CPM/CPM_MC_D4/CSUSRM | 19 - software/CPM/CPM_MC_D4/SACBULL | 19 - software/CPM/CPM_MC_D5/ADDS.DEF | Bin 128 -> 0 bytes software/CPM/CPM_MC_D5/AR.COM | Bin 8320 -> 0 bytes software/CPM/CPM_MC_D5/BITMAP.COM | Bin 768 -> 0 bytes software/CPM/CPM_MC_D5/CAT.COM | Bin 6272 -> 0 bytes software/CPM/CPM_MC_D5/CMP.COM | Bin 5248 -> 0 bytes software/CPM/CPM_MC_D5/COMPARE4.COM | Bin 5248 -> 0 bytes software/CPM/CPM_MC_D5/CPU.COM | Bin 19200 -> 0 bytes software/CPM/CPM_MC_D5/CRT.DAT | Bin 128 -> 0 bytes software/CPM/CPM_MC_D5/CUR.COM | Bin 6528 -> 0 bytes software/CPM/CPM_MC_D5/DATE.COM | Bin 5760 -> 0 bytes software/CPM/CPM_MC_D5/DATE.DTE | 12 - software/CPM/CPM_MC_D5/DC.COM | Bin 25216 -> 0 bytes software/CPM/CPM_MC_D5/DHEADER.PRN | 145 - software/CPM/CPM_MC_D5/DIFF.COM | Bin 7296 -> 0 bytes software/CPM/CPM_MC_D5/DIFF32.COM | Bin 7296 -> 0 bytes software/CPM/CPM_MC_D5/DIFF48.COM | Bin 7296 -> 0 bytes software/CPM/CPM_MC_D5/DIFF56.COM | Bin 7296 -> 0 bytes software/CPM/CPM_MC_D5/DISK.COM | Bin 27136 -> 0 bytes software/CPM/CPM_MC_D5/DOCTOR.COM | Bin 6528 -> 0 bytes software/CPM/CPM_MC_D5/DPATCHDJ.HEX | 5 - software/CPM/CPM_MC_D5/GREP.COM | Bin 7040 -> 0 bytes software/CPM/CPM_MC_D5/HAZEL.COM | Bin 8832 -> 0 bytes software/CPM/CPM_MC_D5/HAZEL.DEF | Bin 128 -> 0 bytes software/CPM/CPM_MC_D5/HELP | 352 - software/CPM/CPM_MC_D5/HELP.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_D5/HELP.DOC | 535 - software/CPM/CPM_MC_D5/HELP.TXT | 352 - software/CPM/CPM_MC_D5/HELP1.HLP | 396 - software/CPM/CPM_MC_D5/HELP2.HLP | 352 - software/CPM/CPM_MC_D5/HELP3.HLP | 804 -- software/CPM/CPM_MC_D5/I.HLP | 220 - software/CPM/CPM_MC_D5/INDEX.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_D5/INSTALL.COM | Bin 15360 -> 0 bytes software/CPM/CPM_MC_D5/INUSE.COM | Bin 5248 -> 0 bytes software/CPM/CPM_MC_D5/IPATCHDJ.HEX | 4 - software/CPM/CPM_MC_D5/MANUAL.PRN | 618 - software/CPM/CPM_MC_D5/MTEST.COM | Bin 4608 -> 0 bytes software/CPM/CPM_MC_D5/MTEST2.COM | Bin 9728 -> 0 bytes software/CPM/CPM_MC_D5/PG.COM | Bin 6272 -> 0 bytes software/CPM/CPM_MC_D5/PR.COM | Bin 9216 -> 0 bytes software/CPM/CPM_MC_D5/PRINT.COM | Bin 1408 -> 0 bytes software/CPM/CPM_MC_D5/README.1ST | 88 - software/CPM/CPM_MC_D5/RM.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_D5/RPL.COM | Bin 8192 -> 0 bytes software/CPM/CPM_MC_D5/SLEEP.COM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_D5/SORT.COM | Bin 8320 -> 0 bytes software/CPM/CPM_MC_D5/SPLIT.COM | Bin 6272 -> 0 bytes software/CPM/CPM_MC_D5/SUM.COM | Bin 6400 -> 0 bytes software/CPM/CPM_MC_D5/TOKEN.COM | Bin 6400 -> 0 bytes software/CPM/CPM_MC_D5/TR.COM | Bin 8832 -> 0 bytes software/CPM/CPM_MC_D5/U2.DOC | 768 - software/CPM/CPM_MC_D5/U2.TFS | 495 - software/CPM/CPM_MC_D5/UNIQ.COM | Bin 6784 -> 0 bytes software/CPM/CPM_MC_D5/WORD.COM | Bin 6400 -> 0 bytes software/CPM/CPM_MC_D5/XDIR.COM | Bin 2176 -> 0 bytes software/CPM/CPM_MC_D6/AUTO.AQM | Bin 1664 -> 0 bytes software/CPM/CPM_MC_D6/AUTOLOAD.AQM | Bin 2432 -> 0 bytes software/CPM/CPM_MC_D6/BARSTOW.DQR | Bin 14464 -> 0 bytes software/CPM/CPM_MC_D6/BYE2-16.LBR | Bin 100096 -> 0 bytes software/CPM/CPM_MC_D6/BYECOM.MQC | Bin 2560 -> 0 bytes software/CPM/CPM_MC_D6/BYESUB.ASM | 72 - software/CPM/CPM_MC_D6/CHAT19.AQM | Bin 6656 -> 0 bytes software/CPM/CPM_MC_D6/FILFND11.AQM | Bin 10752 -> 0 bytes software/CPM/CPM_MC_D6/HDOS2CPM.AQM | Bin 17536 -> 0 bytes software/CPM/CPM_MC_D6/KPRO-BY2.HQP | Bin 2560 -> 0 bytes software/CPM/CPM_MC_D6/KPROTERM.TXT | 60 - software/CPM/CPM_MC_D6/KPZCPR1A.LBR | Bin 3712 -> 0 bytes software/CPM/CPM_MC_D6/KZCPR1.LBR | Bin 6272 -> 0 bytes software/CPM/CPM_MC_D6/M712AC.AQM | Bin 10240 -> 0 bytes software/CPM/CPM_MC_D6/M712AF.AQM | Bin 7168 -> 0 bytes software/CPM/CPM_MC_D6/M712AL.AQM | Bin 7808 -> 0 bytes software/CPM/CPM_MC_D6/M712AP.AQM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_D6/M712CP.AQM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_D6/M712DP.AQM | Bin 6912 -> 0 bytes software/CPM/CPM_MC_D6/M712GP.AQM | Bin 6656 -> 0 bytes software/CPM/CPM_MC_D6/M712H8.AQM | Bin 7808 -> 0 bytes software/CPM/CPM_MC_D6/M712HP.AQM | Bin 7680 -> 0 bytes software/CPM/CPM_MC_D6/M712HZ.AQM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_D6/M712IN.AQM | Bin 8064 -> 0 bytes software/CPM/CPM_MC_D6/M712KP.AQM | Bin 7680 -> 0 bytes software/CPM/CPM_MC_D6/M712MD.AQM | Bin 6912 -> 0 bytes software/CPM/CPM_MC_D6/M712MM.AQM | Bin 8320 -> 0 bytes software/CPM/CPM_MC_D6/M712MX.AQM | Bin 8064 -> 0 bytes software/CPM/CPM_MC_D6/M712NE.AQM | Bin 6784 -> 0 bytes software/CPM/CPM_MC_D6/M712NM.AQM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_D6/M712OS.AQM | Bin 8064 -> 0 bytes software/CPM/CPM_MC_D6/M712OT.AQM | Bin 10112 -> 0 bytes software/CPM/CPM_MC_D6/M712OX.AQM | Bin 8192 -> 0 bytes software/CPM/CPM_MC_D6/M712PC.AQM | Bin 8832 -> 0 bytes software/CPM/CPM_MC_D6/M712PM.AQM | Bin 5248 -> 0 bytes software/CPM/CPM_MC_D6/M712QS.AQM | Bin 8448 -> 0 bytes software/CPM/CPM_MC_D6/M712R1.AQM | Bin 7296 -> 0 bytes software/CPM/CPM_MC_D6/M712SY2.AQM | Bin 6784 -> 0 bytes software/CPM/CPM_MC_D6/M712TV.AQM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_D6/M712VT.AQM | Bin 8320 -> 0 bytes software/CPM/CPM_MC_D6/M712XE.AQM | Bin 7552 -> 0 bytes software/CPM/CPM_MC_D6/M712ZB.AQM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_D6/MDM706KP.OQJ | Bin 14976 -> 0 bytes software/CPM/CPM_MC_D6/MDM712.AQM | Bin 73088 -> 0 bytes software/CPM/CPM_MC_D6/MDM712.COM | Bin 16896 -> 0 bytes software/CPM/CPM_MC_D6/MDM712.DOC | 848 -- software/CPM/CPM_MC_D6/MDM712.DQC | Bin 23296 -> 0 bytes software/CPM/CPM_MC_D6/MDM712.IQF | Bin 3200 -> 0 bytes software/CPM/CPM_MC_D6/MDM712.MSG | 29 - software/CPM/CPM_MC_D6/MDM712.TQT | Bin 2304 -> 0 bytes software/CPM/CPM_MC_D6/MDM712.UQD | Bin 3712 -> 0 bytes software/CPM/CPM_MC_D6/MDM712IN.DEX | 33 - software/CPM/CPM_MC_D6/MODEM903.AQM | Bin 1152 -> 0 bytes software/CPM/CPM_MC_D6/MODEM903.LBR | Bin 151552 -> 0 bytes software/CPM/CPM_MC_D6/MODEM903.UQD | Bin 896 -> 0 bytes software/CPM/CPM_MC_D6/NEWBD23A.AQM | Bin 4992 -> 0 bytes software/CPM/CPM_MC_D6/RAMDISK.LBR | Bin 17920 -> 0 bytes software/CPM/CPM_MC_D6/RBBS27.LBR | Bin 64000 -> 0 bytes software/CPM/CPM_MC_D6/RBBS31.LBR | Bin 28288 -> 0 bytes software/CPM/CPM_MC_D6/RELOC.TQT | Bin 11392 -> 0 bytes software/CPM/CPM_MC_D6/RELOCCPM.OBJ | Bin 512 -> 0 bytes software/CPM/CPM_MC_D6/SECTION.AQM | Bin 7168 -> 0 bytes software/CPM/CPM_MC_D6/SECURE.AQM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_D6/SECURTY2.AQM | Bin 3456 -> 0 bytes software/CPM/CPM_MC_D6/SMDM53KP.AQM | Bin 59520 -> 0 bytes software/CPM/CPM_MC_D6/TAG2.LBR | Bin 6400 -> 0 bytes software/CPM/CPM_MC_D6/TYPE20.LBR | Bin 36736 -> 0 bytes software/CPM/CPM_MC_D6/USRPW35.AQM | Bin 12928 -> 0 bytes software/CPM/CPM_MC_D6/WHATSNEW.LBR | Bin 3328 -> 0 bytes software/CPM/CPM_MC_D6/XMDM52KP.OBJ | Bin 2432 -> 0 bytes software/CPM/CPM_MC_D6/XMODM75C.LBR | Bin 92672 -> 0 bytes software/CPM/CPM_MC_D6/ZCPR2-KP.LBR | Bin 7808 -> 0 bytes software/CPM/CPM_MC_D7/-LT31FIL.LST | 23 - software/CPM/CPM_MC_D7/-LT31LBR.DOC | 108 - software/CPM/CPM_MC_D7/-READ.ME | 30 - software/CPM/CPM_MC_D7/-README.1ST | 14 - software/CPM/CPM_MC_D7/64180.MAC | 120 - software/CPM/CPM_MC_D7/64180OPS.MAC | 41 - software/CPM/CPM_MC_D7/64180OPS.TRY | Bin 128 -> 0 bytes software/CPM/CPM_MC_D7/CCINSTAL.MAC | 276 - software/CPM/CPM_MC_D7/CCITCRC.COM | Bin 1920 -> 0 bytes software/CPM/CPM_MC_D7/DDTDISA.MAC | 1676 --- software/CPM/CPM_MC_D7/DDTZ27.COM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_D7/DDTZ27.DOC | 564 - software/CPM/CPM_MC_D7/DDTZ27.MAC | 2235 --- software/CPM/CPM_MC_D7/DOSPATCH | 39 - software/CPM/CPM_MC_D7/JOB.DOC | 11 - software/CPM/CPM_MC_D7/JOB15.COM | Bin 3072 -> 0 bytes software/CPM/CPM_MC_D7/JOB15.MAC | 1177 -- software/CPM/CPM_MC_D7/LT.COM | Bin 4608 -> 0 bytes software/CPM/CPM_MC_D7/LT31.COM | Bin 6912 -> 0 bytes software/CPM/CPM_MC_D7/LT31.DOC | 1522 -- software/CPM/CPM_MC_D7/LT31.FOR | 22 - software/CPM/CPM_MC_D7/LT31.MAC | 2006 --- software/CPM/CPM_MC_D7/MAKEDDT.BAT | 31 - software/CPM/CPM_MC_D7/MAKEDDT.JOB | 35 - software/CPM/CPM_MC_D7/MAKEDDTZ.JOB | 26 - software/CPM/CPM_MC_D7/MAKEDDTZ.SUB | 26 - software/CPM/CPM_MC_D7/OPTYPE.MAC | 812 -- software/CPM/CPM_MC_D7/OPTYPE.TRY | Bin 1536 -> 0 bytes software/CPM/CPM_MC_D7/OPTYPE.Z80 | 816 -- software/CPM/CPM_MC_D7/UNC.REL | Bin 1664 -> 0 bytes software/CPM/CPM_MC_D7/UNC.SLR | Bin 1920 -> 0 bytes software/CPM/CPM_MC_D7/UNLZH.REL | Bin 2304 -> 0 bytes software/CPM/CPM_MC_D7/UNLZH.SLR | Bin 2432 -> 0 bytes software/CPM/CPM_MC_D7/XTDOPS.LIB | 147 - software/CPM/CPM_MC_D7/XTDOPS.MAC | 103 - software/CPM/CPM_MC_D7/XTDOPS.TRY | Bin 256 -> 0 bytes software/CPM/CPM_MC_D8/CONTENTS.TXT | 0 software/CPM/CPM_MC_D9/CONTENTS.TXT | 0 software/CPM/CPM_MC_E0/ARCV.COM | Bin 3968 -> 0 bytes software/CPM/CPM_MC_E0/AS.COM | Bin 23040 -> 0 bytes software/CPM/CPM_MC_E0/ASM.COM | Bin 8192 -> 0 bytes software/CPM/CPM_MC_E0/C.LIB | Bin 35456 -> 0 bytes software/CPM/CPM_MC_E0/CC.COM | Bin 39296 -> 0 bytes software/CPM/CPM_MC_E0/CLRDIR.COM | Bin 1619 -> 0 bytes software/CPM/CPM_MC_E0/CNM.COM | Bin 12800 -> 0 bytes software/CPM/CPM_MC_E0/CR.COM | Bin 6144 -> 0 bytes software/CPM/CPM_MC_E0/CRC.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_E0/CRCK.COM | Bin 1536 -> 0 bytes software/CPM/CPM_MC_E0/CRUNCH.COM | Bin 4608 -> 0 bytes software/CPM/CPM_MC_E0/CTYPE.H | 21 - software/CPM/CPM_MC_E0/CZ.COM | Bin 39040 -> 0 bytes software/CPM/CPM_MC_E0/DBGINST.COM | Bin 6016 -> 0 bytes software/CPM/CPM_MC_E0/DCON.COM | Bin 10240 -> 0 bytes software/CPM/CPM_MC_E0/DCON.CTL | 32 - software/CPM/CPM_MC_E0/DCON.DOC | 259 - software/CPM/CPM_MC_E0/DCON.SYM | 211 - software/CPM/CPM_MC_E0/DDT.COM | Bin 4864 -> 0 bytes software/CPM/CPM_MC_E0/DDTZ.COM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_E0/DDTZ.DOC | 564 - software/CPM/CPM_MC_E0/DDTZ80.COM | Bin 9984 -> 0 bytes software/CPM/CPM_MC_E0/DDTZ80.DOC | Bin 5888 -> 0 bytes software/CPM/CPM_MC_E0/DEBUGZ.COM | Bin 11008 -> 0 bytes software/CPM/CPM_MC_E0/DEBUGZ.HLP | 1 - software/CPM/CPM_MC_E0/DIF.COM | Bin 2944 -> 0 bytes software/CPM/CPM_MC_E0/DIRX.COM | Bin 3072 -> 0 bytes software/CPM/CPM_MC_E0/DUMP.COM | Bin 256 -> 0 bytes software/CPM/CPM_MC_E0/ED.COM | Bin 6656 -> 0 bytes software/CPM/CPM_MC_E0/ERRNO.H | 15 - software/CPM/CPM_MC_E0/FCNTL.H | 8 - software/CPM/CPM_MC_E0/FIND.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_E0/HEX80.COM | Bin 14208 -> 0 bytes software/CPM/CPM_MC_E0/HIST.UTL | Bin 1280 -> 0 bytes software/CPM/CPM_MC_E0/IO.H | 83 - software/CPM/CPM_MC_E0/LBREXT.COM | Bin 8576 -> 0 bytes software/CPM/CPM_MC_E0/LIB.COM | Bin 7168 -> 0 bytes software/CPM/CPM_MC_E0/LIBC.H | 40 - software/CPM/CPM_MC_E0/LIBUTIL.COM | Bin 16128 -> 0 bytes software/CPM/CPM_MC_E0/LINK.COM | Bin 15744 -> 0 bytes software/CPM/CPM_MC_E0/LN.COM | Bin 23296 -> 0 bytes software/CPM/CPM_MC_E0/LOAD.COM | Bin 1792 -> 0 bytes software/CPM/CPM_MC_E0/M.LIB | Bin 25344 -> 0 bytes software/CPM/CPM_MC_E0/MAC.COM | Bin 11776 -> 0 bytes software/CPM/CPM_MC_E0/MAKE.COM | Bin 2560 -> 0 bytes software/CPM/CPM_MC_E0/MATH.H | 12 - software/CPM/CPM_MC_E0/MBASIC.COM | Bin 24320 -> 0 bytes software/CPM/CPM_MC_E0/MEX114.LBR | Bin 145152 -> 0 bytes software/CPM/CPM_MC_E0/MXO.ASM | 737 - software/CPM/CPM_MC_E0/NSWP207.DOC | 71 - software/CPM/CPM_MC_E0/NULU.COM | Bin 15616 -> 0 bytes software/CPM/CPM_MC_E0/PIP.COM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_E0/POWER.COM | Bin 16384 -> 0 bytes software/CPM/CPM_MC_E0/POWER.HLP | 645 - software/CPM/CPM_MC_E0/QTERM.DAT | Bin 128 -> 0 bytes software/CPM/CPM_MC_E0/QTERMS.LIB | Bin 8192 -> 0 bytes software/CPM/CPM_MC_E0/RMAC.COM | Bin 13568 -> 0 bytes software/CPM/CPM_MC_E0/ROM.LIB | Bin 11392 -> 0 bytes software/CPM/CPM_MC_E0/SETJMP.H | 5 - software/CPM/CPM_MC_E0/SETQTERM.COM | Bin 11648 -> 0 bytes software/CPM/CPM_MC_E0/SGTTY.H | 20 - software/CPM/CPM_MC_E0/SID.COM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_E0/SIDSYM.COM | Bin 3968 -> 0 bytes software/CPM/CPM_MC_E0/SQZ.COM | Bin 16768 -> 0 bytes software/CPM/CPM_MC_E0/STAT.COM | Bin 5248 -> 0 bytes software/CPM/CPM_MC_E0/STDIO.H | 62 - software/CPM/CPM_MC_E0/SUBMIT.COM | Bin 1280 -> 0 bytes software/CPM/CPM_MC_E0/SUPERSUB.COM | Bin 2176 -> 0 bytes software/CPM/CPM_MC_E0/SWEEP.COM | Bin 11264 -> 0 bytes software/CPM/CPM_MC_E0/T.LIB | Bin 4736 -> 0 bytes software/CPM/CPM_MC_E0/TAIL.COM | Bin 1024 -> 0 bytes software/CPM/CPM_MC_E0/TRACE.UTL | Bin 1280 -> 0 bytes software/CPM/CPM_MC_E0/TYPEZ.COM | Bin 5120 -> 0 bytes software/CPM/CPM_MC_E0/UNARC.COM | Bin 4736 -> 0 bytes software/CPM/CPM_MC_E0/UNCR.COM | Bin 8576 -> 0 bytes software/CPM/CPM_MC_E0/UNLOAD.COM | Bin 1408 -> 0 bytes software/CPM/CPM_MC_E0/UNZIP.COM | Bin 3328 -> 0 bytes software/CPM/CPM_MC_E0/VFILER.CZM | Bin 6272 -> 0 bytes software/CPM/CPM_MC_E0/VFILER.DZC | Bin 1408 -> 0 bytes software/CPM/CPM_MC_E0/VFILERSC.AZM | Bin 1664 -> 0 bytes software/CPM/CPM_MC_E0/VIDATT.Z80 | 69 - software/CPM/CPM_MC_E0/WASH15.AZM | Bin 17280 -> 0 bytes software/CPM/CPM_MC_E0/WASH15.CZM | Bin 1920 -> 0 bytes software/CPM/CPM_MC_E0/WASH15.DZC | Bin 7424 -> 0 bytes software/CPM/CPM_MC_E0/WASH15.LBR | Bin 26752 -> 0 bytes software/CPM/CPM_MC_E0/XSUB.COM | Bin 768 -> 0 bytes software/CPM/CPM_MC_E0/ZAP.COM | Bin 9856 -> 0 bytes software/CPM/CPM_MC_E0/ZDE.COM | Bin 16896 -> 0 bytes software/CPM/CPM_MC_E0/ZDENST.COM | Bin 10624 -> 0 bytes software/CPM/CPM_MC_E0/ZSID.COM | Bin 10240 -> 0 bytes software/CPM/CPM_MC_E0/dump.sym | 30 - software/CPM/CPM_MC_E0/lz.com | Bin 6016 -> 0 bytes software/CPM/CPM_MC_E0/nswp207.com | Bin 11776 -> 0 bytes software/CPM/CPM_MC_E0/z80dis.com | Bin 9216 -> 0 bytes software/CPM/CPM_MC_E0/z80dis.doc | 42 - software/CPM/CPM_MC_E1/0CONTENTS.TXT | 3 - software/CPM/CPM_MC_E1/CREF80.COM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_E1/F80.COM | Bin 28672 -> 0 bytes software/CPM/CPM_MC_E1/FORLIB.REL | Bin 26112 -> 0 bytes software/CPM/CPM_MC_E1/HELLO.MAC | 15 - software/CPM/CPM_MC_E1/HELLOF.FOR | 4 - software/CPM/CPM_MC_E1/L80.COM | Bin 10752 -> 0 bytes software/CPM/CPM_MC_E1/LIB80.COM | Bin 5120 -> 0 bytes software/CPM/CPM_MC_E1/M80.COM | Bin 20224 -> 0 bytes software/CPM/CPM_MC_E1/M80SRC.MAC | 11846 ---------------- software/CPM/CPM_MC_E1/MBASIC.COM | Bin 24320 -> 0 bytes software/CPM/CPM_MC_E1/MC.SUB | 5 - software/CPM/CPM_MC_E1/OBSLIB.REL | Bin 48640 -> 0 bytes software/CPM/CPM_MC_E2/ARCV.COM | Bin 3968 -> 0 bytes software/CPM/CPM_MC_E2/AS.COM | Bin 23040 -> 0 bytes software/CPM/CPM_MC_E2/C.LIB | Bin 35456 -> 0 bytes software/CPM/CPM_MC_E2/CC.COM | Bin 39296 -> 0 bytes software/CPM/CPM_MC_E2/CC.MSG | Bin 3456 -> 0 bytes software/CPM/CPM_MC_E2/CNM.COM | Bin 12800 -> 0 bytes software/CPM/CPM_MC_E2/CRC.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_E2/CTYPE.H | 20 - software/CPM/CPM_MC_E2/CZ.COM | Bin 39040 -> 0 bytes software/CPM/CPM_MC_E2/ERRNO.H | 14 - software/CPM/CPM_MC_E2/EXMPL.C | 9 - software/CPM/CPM_MC_E2/FCNTL.H | 7 - software/CPM/CPM_MC_E2/HEX80.COM | Bin 14208 -> 0 bytes software/CPM/CPM_MC_E2/IO.H | 82 - software/CPM/CPM_MC_E2/LIBC.H | 39 - software/CPM/CPM_MC_E2/LIBUTIL.COM | Bin 16128 -> 0 bytes software/CPM/CPM_MC_E2/LN.COM | Bin 23296 -> 0 bytes software/CPM/CPM_MC_E2/M.LIB | Bin 25344 -> 0 bytes software/CPM/CPM_MC_E2/MATH.H | 11 - software/CPM/CPM_MC_E2/ROM.LIB | Bin 11392 -> 0 bytes software/CPM/CPM_MC_E2/SETJMP.H | 4 - software/CPM/CPM_MC_E2/SGTTY.H | 19 - software/CPM/CPM_MC_E2/SIDSYM.COM | Bin 3968 -> 0 bytes software/CPM/CPM_MC_E2/SQZ.COM | Bin 16768 -> 0 bytes software/CPM/CPM_MC_E2/STDIO.H | 61 - software/CPM/CPM_MC_E2/T.LIB | Bin 4736 -> 0 bytes software/CPM/CPM_MC_E2/c.txt | 14 - software/CPM/CPM_MC_E2/m.txt | 5 - software/CPM/CPM_MC_E2/rom.txt | 5 - software/CPM/CPM_MC_E2/t.txt | 1 - software/CPM/CPM_MC_E3/CMDLIN.PAS | Bin 768 -> 0 bytes software/CPM/CPM_MC_E3/HELLO.PAS | 6 - software/CPM/CPM_MC_E3/LISTER.PAS | Bin 5632 -> 0 bytes software/CPM/CPM_MC_E3/MC-MOD00.INC | 43 - software/CPM/CPM_MC_E3/MC-MOD01.INC | 74 - software/CPM/CPM_MC_E3/MC-MOD02.INC | 150 - software/CPM/CPM_MC_E3/MC-MOD03.COM | Bin 8192 -> 0 bytes software/CPM/CPM_MC_E3/MC-MOD03.INC | 195 - software/CPM/CPM_MC_E3/MC-MOD04.INC | 294 - software/CPM/CPM_MC_E3/MC-MOD05.INC | 394 - software/CPM/CPM_MC_E3/MC.COM | Bin 21632 -> 0 bytes software/CPM/CPM_MC_E3/MC.HLP | 145 - software/CPM/CPM_MC_E3/MC.PAS | 160 - software/CPM/CPM_MC_E3/MCDEMO.MCS | Bin 11904 -> 0 bytes software/CPM/CPM_MC_E3/READ.ME | 180 - software/CPM/CPM_MC_E3/TINST.COM | Bin 25472 -> 0 bytes software/CPM/CPM_MC_E3/TINST.DTA | Bin 4480 -> 0 bytes software/CPM/CPM_MC_E3/TINST.MSG | 123 - software/CPM/CPM_MC_E3/TURBO.COM | Bin 30720 -> 0 bytes software/CPM/CPM_MC_E3/TURBO.MSG | 101 - software/CPM/CPM_MC_E3/TURBO.OVR | Bin 1152 -> 0 bytes software/CPM/CPM_MC_E4/ARITH.MAC | 596 - software/CPM/CPM_MC_E4/ASM.SCR | 1 - software/CPM/CPM_MC_E4/ASM.TXT | 386 - software/CPM/CPM_MC_E4/ASMTEST.SCR | 1 - software/CPM/CPM_MC_E4/BLK2TXT.SCR | 1 - software/CPM/CPM_MC_E4/BREAKGO.SCR | 1 - software/CPM/CPM_MC_E4/COMPARE.MAC | 223 - software/CPM/CPM_MC_E4/COMPILE.MAC | 469 - software/CPM/CPM_MC_E4/CONTROL.MAC | 548 - software/CPM/CPM_MC_E4/DICT.MAC | 268 - software/CPM/CPM_MC_E4/DISCLAIM.TXT | 11 - software/CPM/CPM_MC_E4/DISK.MAC | 1611 --- software/CPM/CPM_MC_E4/DOS.MAC | 159 - software/CPM/CPM_MC_E4/DOSLIB.SCR | 1 - software/CPM/CPM_MC_E4/DX.COM | Bin 28160 -> 0 bytes software/CPM/CPM_MC_E4/DXFORTH.GLO | 2004 --- software/CPM/CPM_MC_E4/DXFORTH.TXT | 948 -- software/CPM/CPM_MC_E4/DXFORTH.WDS | 491 - software/CPM/CPM_MC_E4/EDITOR.SCR | 1 - software/CPM/CPM_MC_E4/EXTEND.SCR | 1 - software/CPM/CPM_MC_E4/FACILITY.MAC | 207 - software/CPM/CPM_MC_E4/FCOPY.SCR | 1 - software/CPM/CPM_MC_E4/FILES.TXT | 67 - software/CPM/CPM_MC_E4/FILE_ID.DIZ | 32 - software/CPM/CPM_MC_E4/FLOAT.MAC | 2253 --- software/CPM/CPM_MC_E4/FORTH-F.COM | Bin 24960 -> 0 bytes software/CPM/CPM_MC_E4/FORTH.COM | Bin 21120 -> 0 bytes software/CPM/CPM_MC_E4/INSTALL.COM | Bin 9472 -> 0 bytes software/CPM/CPM_MC_E4/INSTALL.DTA | Bin 4736 -> 0 bytes software/CPM/CPM_MC_E4/INSTALL.SCR | 1 - software/CPM/CPM_MC_E4/IO.MAC | 99 - software/CPM/CPM_MC_E4/KERNEL.Z80 | 2628 ---- software/CPM/CPM_MC_E4/LOCALS.SCR | 1 - software/CPM/CPM_MC_E4/MAKEF.SUB | 8 - software/CPM/CPM_MC_E4/MEMORY.MAC | 149 - software/CPM/CPM_MC_E4/MISC.SCR | 1 - software/CPM/CPM_MC_E4/MISER.SCR | 1 - software/CPM/CPM_MC_E4/MULTI.SCR | 1 - software/CPM/CPM_MC_E4/MULTI.TXT | 303 - software/CPM/CPM_MC_E4/NEWAPP.SCR | 1 - software/CPM/CPM_MC_E4/NUMBER.MAC | 203 - software/CPM/CPM_MC_E4/OVERLAY.SCR | 1 - software/CPM/CPM_MC_E4/SED.SCR | 1 - software/CPM/CPM_MC_E4/STACK.MAC | 278 - software/CPM/CPM_MC_E4/STKCHK.SCR | 1 - software/CPM/CPM_MC_E4/STRING.MAC | 291 - software/CPM/CPM_MC_E4/TOOLS.SCR | 1 - software/CPM/CPM_MC_E4/TXT2BLK.SCR | 1 - software/CPM/CPM_MC_E4/WHATSNEW.TXT | 16 - software/CPM/CPM_MC_E5/A.PLI | 6 - software/CPM/CPM_MC_E5/ACK.PLI | 34 - software/CPM/CPM_MC_E5/ACKTST.PLI | 45 - software/CPM/CPM_MC_E5/ALLTST.PLI | 35 - software/CPM/CPM_MC_E5/ANNUITY.PLI | 83 - software/CPM/CPM_MC_E5/CALL.PLI | 35 - software/CPM/CPM_MC_E5/CHESS.PLI | 731 - software/CPM/CPM_MC_E5/COPY.PLI | 24 - software/CPM/CPM_MC_E5/COPYLPT.PLI | 81 - software/CPM/CPM_MC_E5/CPMDIO.ASM | 608 - software/CPM/CPM_MC_E5/CREATE.PLI | 49 - software/CPM/CPM_MC_E5/DECPOLY.PLI | 33 - software/CPM/CPM_MC_E5/DEMO.PLI | 15 - software/CPM/CPM_MC_E5/DEPREC.PLI | 298 - software/CPM/CPM_MC_E5/DFACT.PLI | 26 - software/CPM/CPM_MC_E5/DIO80.DCL | 5 - software/CPM/CPM_MC_E5/DIOCALLS.PLI | 440 - software/CPM/CPM_MC_E5/DIOCOPY.PLI | 155 - software/CPM/CPM_MC_E5/DIOMOD.DCL | 50 - software/CPM/CPM_MC_E5/DIORAND.PLI | 151 - software/CPM/CPM_MC_E5/DIV2.ASM | 52 - software/CPM/CPM_MC_E5/DTEST.PLI | 20 - software/CPM/CPM_MC_E5/ENTER.PLI | 62 - software/CPM/CPM_MC_E5/EXPR1.PLI | 70 - software/CPM/CPM_MC_E5/EXPR2.PLI | 99 - software/CPM/CPM_MC_E5/FCB.DCL | 16 - software/CPM/CPM_MC_E5/FDIV2.ASM | 63 - software/CPM/CPM_MC_E5/FDTEST.PLI | 18 - software/CPM/CPM_MC_E5/FFACT.PLI | 24 - software/CPM/CPM_MC_E5/FLTPOLY.PLI | 33 - software/CPM/CPM_MC_E5/FLTPOLY2.PLI | 39 - software/CPM/CPM_MC_E5/FSCAN.PLI | 51 - software/CPM/CPM_MC_E5/IFACT.PLI | 20 - software/CPM/CPM_MC_E5/INVERT.PLI | 30 - software/CPM/CPM_MC_E5/KEYFILE.PLI | 33 - software/CPM/CPM_MC_E5/LABELS.PLI | 45 - software/CPM/CPM_MC_E5/LIB.COM | Bin 7168 -> 0 bytes software/CPM/CPM_MC_E5/LINK.COM | Bin 15744 -> 0 bytes software/CPM/CPM_MC_E5/LOAN1.PLI | 42 - software/CPM/CPM_MC_E5/LOAN2.PLI | 221 - software/CPM/CPM_MC_E5/MAININVT.PLI | 65 - software/CPM/CPM_MC_E5/MATSIZE.LIB | 4 - software/CPM/CPM_MC_E5/MPMCALLA.PLI | 515 - software/CPM/CPM_MC_E5/MPMCALLB.PLI | 323 - software/CPM/CPM_MC_E5/MPMDIO.ASM | 495 - software/CPM/CPM_MC_E5/MPMDIO.DCL | 35 - software/CPM/CPM_MC_E5/NETWORK.PLI | 267 - software/CPM/CPM_MC_E5/OPTIMIS2.PLI | 49 - software/CPM/CPM_MC_E5/OPTIMIST.COM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_E5/OPTIMIST.PLI | 44 - software/CPM/CPM_MC_E5/PLI.COM | Bin 8064 -> 0 bytes software/CPM/CPM_MC_E5/PLI0.OVL | Bin 18048 -> 0 bytes software/CPM/CPM_MC_E5/PLI1.OVL | Bin 34816 -> 0 bytes software/CPM/CPM_MC_E5/PLI2.OVL | Bin 33792 -> 0 bytes software/CPM/CPM_MC_E5/PLILIB.IRL | Bin 71808 -> 0 bytes software/CPM/CPM_MC_E5/RECORD.DCL | 9 - software/CPM/CPM_MC_E5/RELNOTES.PRN | Bin 34688 -> 0 bytes software/CPM/CPM_MC_E5/REPORT.PLI | 55 - software/CPM/CPM_MC_E5/RETRIEVE.PLI | 56 - software/CPM/CPM_MC_E5/REVERSE.PLI | 54 - software/CPM/CPM_MC_E5/REVERT.PLI | 34 - software/CPM/CPM_MC_E5/RFACT.PLI | 24 - software/CPM/CPM_MC_E5/RMAC.COM | Bin 13568 -> 0 bytes software/CPM/CPM_MC_E5/SAMPLE.PLI | 41 - software/CPM/CPM_MC_E5/TEST.PLI | 35 - software/CPM/CPM_MC_E5/UPDATE.PLI | 67 - software/CPM/CPM_MC_E5/XREF.COM | Bin 15488 -> 0 bytes software/CPM/CPM_MC_E5/Z80.LIB | 457 - software/CPM/CPM_MC_E6/ALGINTRO.TXT | 271 - software/CPM/CPM_MC_E6/ALGOLM.COM | Bin 13568 -> 0 bytes software/CPM/CPM_MC_E6/ALGSTART.TXT | 78 - software/CPM/CPM_MC_E6/ARRAY.ALG | 87 - software/CPM/CPM_MC_E6/BLK.INP | 6 - software/CPM/CPM_MC_E6/BLKTEST.ALG | 32 - software/CPM/CPM_MC_E6/BOOLINT.ALG | 16 - software/CPM/CPM_MC_E6/CASETEST.ALG | 32 - software/CPM/CPM_MC_E6/CASETWO.ALG | 18 - software/CPM/CPM_MC_E6/COMERR.TXT | 70 - software/CPM/CPM_MC_E6/FILE1.INP | 2 - software/CPM/CPM_MC_E6/FILE2.INP | 2 - software/CPM/CPM_MC_E6/FLYTEST.ALG | 17 - software/CPM/CPM_MC_E6/GOTOTEST.ALG | 28 - software/CPM/CPM_MC_E6/HANOI.ALG | 41 - software/CPM/CPM_MC_E6/LUNAR.ALG | 49 - software/CPM/CPM_MC_E6/ONEND2.ALG | 39 - software/CPM/CPM_MC_E6/PERM.ALG | 56 - software/CPM/CPM_MC_E6/READWORD.ALG | 59 - software/CPM/CPM_MC_E6/RFILE.INP | 4 - software/CPM/CPM_MC_E6/RUNALG.COM | Bin 14336 -> 0 bytes software/CPM/CPM_MC_E6/RUNERR.TXT | 63 - software/CPM/CPM_MC_E6/RWINT.ALG | 18 - software/CPM/CPM_MC_E6/SIISTR.ALG | 18 - software/CPM/CPM_MC_E6/SORT.ALG | 74 - software/CPM/CPM_MC_E6/STRING.ALG | 19 - software/CPM/CPM_MC_E6/STRTST.ALG | 14 - software/CPM/CPM_MC_E6/USRMAN.TXT | 1499 -- software/CPM/CPM_MC_E6/WINPUT.INP | 2 - software/CPM/CPM_MC_E7/ARCS-DEP.CAL | Bin 102 -> 0 bytes software/CPM/CPM_MC_E7/BRKEVN.CAL | Bin 102 -> 0 bytes software/CPM/CPM_MC_E7/BUDGET.CAL | Bin 102 -> 0 bytes software/CPM/CPM_MC_E7/CHECKS.CAL | Bin 102 -> 0 bytes software/CPM/CPM_MC_E7/DATTIM.COM | Bin 2304 -> 0 bytes software/CPM/CPM_MC_E7/INSTALL.COM | Bin 15744 -> 0 bytes software/CPM/CPM_MC_E7/INSTALL.DAT | Bin 14464 -> 0 bytes software/CPM/CPM_MC_E7/INSTALL.OVL | Bin 49536 -> 0 bytes software/CPM/CPM_MC_E7/MAINTAIN.COM | Bin 13312 -> 0 bytes software/CPM/CPM_MC_E7/RULE-78.CAL | Bin 10752 -> 0 bytes software/CPM/CPM_MC_E7/SAMPLE.CAL | Bin 5120 -> 0 bytes software/CPM/CPM_MC_E7/SC.HLP | 158 - software/CPM/CPM_MC_E7/SC2.COM | Bin 28544 -> 0 bytes software/CPM/CPM_MC_E7/SC2.HLP | 254 - software/CPM/CPM_MC_E7/SC2.OVL | Bin 20224 -> 0 bytes software/CPM/CPM_MC_E7/SDI.COM | Bin 9344 -> 0 bytes software/CPM/CPM_MC_E7/SDI.OVL | Bin 15744 -> 0 bytes software/CPM/CPM_MC_E7/TEN.CAL | Bin 1280 -> 0 bytes software/CPM/CPM_MC_E7/TENMIN.CAL | Bin 1920 -> 0 bytes software/CPM/CPM_MC_E8/CONTENTS.TXT | 0 software/CPM/CPM_MC_E9/CONTENTS.TXT | 0 software/CPM/CPM_MC_F0/ASM.COM | Bin 8192 -> 0 bytes software/CPM/CPM_MC_F0/B29.COM | Bin 15104 -> 0 bytes software/CPM/CPM_MC_F0/B29INST.COM | Bin 6528 -> 0 bytes software/CPM/CPM_MC_F0/B29V304.WS | 657 - software/CPM/CPM_MC_F0/CR.COM | Bin 6144 -> 0 bytes software/CPM/CPM_MC_F0/CREF80.COM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_F0/DDT.COM | Bin 4864 -> 0 bytes software/CPM/CPM_MC_F0/DDTZ.COM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_F0/DDTZ.DOC | 564 - software/CPM/CPM_MC_F0/DDTZ80.COM | Bin 9984 -> 0 bytes software/CPM/CPM_MC_F0/DDTZ80.DOC | Bin 5888 -> 0 bytes software/CPM/CPM_MC_F0/DEBUGZ.LBR | Bin 62208 -> 0 bytes software/CPM/CPM_MC_F0/DUMP.COM | Bin 512 -> 0 bytes software/CPM/CPM_MC_F0/ED.COM | Bin 6656 -> 0 bytes software/CPM/CPM_MC_F0/LBREXT.COM | Bin 8576 -> 0 bytes software/CPM/CPM_MC_F0/LINK.COM | Bin 15744 -> 0 bytes software/CPM/CPM_MC_F0/LOAD.COM | Bin 1792 -> 0 bytes software/CPM/CPM_MC_F0/LS.COM | Bin 3072 -> 0 bytes software/CPM/CPM_MC_F0/LU.COM | Bin 20224 -> 0 bytes software/CPM/CPM_MC_F0/LZ.COM | Bin 6016 -> 0 bytes software/CPM/CPM_MC_F0/MAC.COM | Bin 11776 -> 0 bytes software/CPM/CPM_MC_F0/MC.SUB | 5 - software/CPM/CPM_MC_F0/NSWP207.COM | Bin 11776 -> 0 bytes software/CPM/CPM_MC_F0/NSWP207.DOC | 70 - software/CPM/CPM_MC_F0/NSWP207.LBR | Bin 226 -> 0 bytes software/CPM/CPM_MC_F0/NULU.COM | Bin 15616 -> 0 bytes software/CPM/CPM_MC_F0/NULU.TXT | 694 - software/CPM/CPM_MC_F0/PIP.COM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_F0/RMAC.COM | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F0/SHOWSEC.COM | Bin 2688 -> 0 bytes software/CPM/CPM_MC_F0/SID.COM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_F0/SPEED.COM | Bin 1152 -> 0 bytes software/CPM/CPM_MC_F0/STAT.COM | Bin 5248 -> 0 bytes software/CPM/CPM_MC_F0/SUBMIT.COM | Bin 1280 -> 0 bytes software/CPM/CPM_MC_F0/SUPERSUB.COM | Bin 2176 -> 0 bytes software/CPM/CPM_MC_F0/SURVEY.COM | Bin 1152 -> 0 bytes software/CPM/CPM_MC_F0/SURVEY.MAC | Bin 14464 -> 0 bytes software/CPM/CPM_MC_F0/UNARC.COM | Bin 4736 -> 0 bytes software/CPM/CPM_MC_F0/UNCR.COM | Bin 8576 -> 0 bytes software/CPM/CPM_MC_F0/UNERA.MAC | Bin 15458 -> 0 bytes software/CPM/CPM_MC_F0/UNZIP.COM | Bin 3328 -> 0 bytes software/CPM/CPM_MC_F0/USQ.COM | Bin 1920 -> 0 bytes software/CPM/CPM_MC_F0/VFILER.COM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_F0/VFILER.DOC | 43 - software/CPM/CPM_MC_F0/VFILERSC.ASM | 87 - software/CPM/CPM_MC_F0/WASH15.ASM | 1325 -- software/CPM/CPM_MC_F0/WASH15.COM | Bin 2944 -> 0 bytes software/CPM/CPM_MC_F0/WASH15.DOC | 446 - software/CPM/CPM_MC_F0/XSUB.COM | Bin 768 -> 0 bytes software/CPM/CPM_MC_F0/ZAP.COM | Bin 9856 -> 0 bytes software/CPM/CPM_MC_F0/ZCNFG.COM | Bin 8064 -> 0 bytes software/CPM/CPM_MC_F0/ZCNFG24.CFG | Bin 4608 -> 0 bytes software/CPM/CPM_MC_F0/ZDE.COM | Bin 16896 -> 0 bytes software/CPM/CPM_MC_F0/ZDE40.COM | Bin 16896 -> 0 bytes software/CPM/CPM_MC_F0/ZDENST.COM | Bin 10624 -> 0 bytes software/CPM/CPM_MC_F0/ZSID.COM | Bin 10240 -> 0 bytes software/CPM/CPM_MC_F0/ZTRAN4.COM | Bin 4096 -> 0 bytes software/CPM/CPM_MC_F0/pmautoae.com | Bin 30976 -> 0 bytes software/CPM/CPM_MC_F1/diskio.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/ppide.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/ppide.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/ppidexz.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/ppidexz.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/readme.txt | 3 - software/CPM/CPM_MC_F1/romrenam.bat | 43 - software/CPM/CPM_MC_F1/std.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/std.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/stdxz.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/stdxz.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/zpp.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/zpp.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/zppxz.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/zppxz.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/ztd.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/ztd.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F1/ztdxz.com | Bin 48640 -> 0 bytes software/CPM/CPM_MC_F1/ztdxz.sys | Bin 13568 -> 0 bytes software/CPM/CPM_MC_F2/!(C)1988.TXT | Bin 384 -> 0 bytes software/CPM/CPM_MC_F2/!NZ-COM.TXT | 0 software/CPM/CPM_MC_F2/!VERS--1.2H | 0 software/CPM/CPM_MC_F2/ALIAS.CMD | Bin 2688 -> 0 bytes software/CPM/CPM_MC_F2/ARUNZ.COM | Bin 6272 -> 0 bytes software/CPM/CPM_MC_F2/BGZRDS19.LBR | Bin 896 -> 0 bytes software/CPM/CPM_MC_F2/CLEDINST.COM | Bin 4992 -> 0 bytes software/CPM/CPM_MC_F2/CLEDSAVE.COM | Bin 1024 -> 0 bytes software/CPM/CPM_MC_F2/COMMON.CRC | Bin 3200 -> 0 bytes software/CPM/CPM_MC_F2/CONFIG.LBR | Bin 21760 -> 0 bytes software/CPM/CPM_MC_F2/COPY.COM | Bin 6784 -> 0 bytes software/CPM/CPM_MC_F2/CPSET.COM | Bin 2304 -> 0 bytes software/CPM/CPM_MC_F2/CRUNCH.COM | Bin 5632 -> 0 bytes software/CPM/CPM_MC_F2/DOCFILES.LBR | Bin 20480 -> 0 bytes software/CPM/CPM_MC_F2/EDITNDR.COM | Bin 6528 -> 0 bytes software/CPM/CPM_MC_F2/FCP.LBR | Bin 10496 -> 0 bytes software/CPM/CPM_MC_F2/FF.COM | Bin 3968 -> 0 bytes software/CPM/CPM_MC_F2/HELP.COM | Bin 4736 -> 0 bytes software/CPM/CPM_MC_F2/HLPFILES.LBR | Bin 17408 -> 0 bytes software/CPM/CPM_MC_F2/IF.COM | Bin 4480 -> 0 bytes software/CPM/CPM_MC_F2/JETLDR.COM | Bin 9088 -> 0 bytes software/CPM/CPM_MC_F2/LBREXT.COM | Bin 8192 -> 0 bytes software/CPM/CPM_MC_F2/LBRHELP.COM | Bin 5120 -> 0 bytes software/CPM/CPM_MC_F2/LDIR.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_F2/LPUT.COM | Bin 6144 -> 0 bytes software/CPM/CPM_MC_F2/LSH-HELP.COM | Bin 2688 -> 0 bytes software/CPM/CPM_MC_F2/LSH.COM | Bin 8704 -> 0 bytes software/CPM/CPM_MC_F2/LSH.WZ | Bin 12032 -> 0 bytes software/CPM/CPM_MC_F2/LSHINST.COM | Bin 10880 -> 0 bytes software/CPM/CPM_MC_F2/LX.COM | Bin 3712 -> 0 bytes software/CPM/CPM_MC_F2/MKZCM.COM | Bin 6016 -> 0 bytes software/CPM/CPM_MC_F2/NAME.COM | Bin 1408 -> 0 bytes software/CPM/CPM_MC_F2/NZ-DBASE.INF | Bin 2304 -> 0 bytes software/CPM/CPM_MC_F2/NZBLITZ.COM | Bin 1920 -> 0 bytes software/CPM/CPM_MC_F2/NZBLTZ14.CFG | Bin 1408 -> 0 bytes software/CPM/CPM_MC_F2/NZBLTZ14.HZP | Bin 4480 -> 0 bytes software/CPM/CPM_MC_F2/NZCOM.COM | Bin 10624 -> 0 bytes software/CPM/CPM_MC_F2/NZCOM.LBR | Bin 13440 -> 0 bytes software/CPM/CPM_MC_F2/NZCPR.LBR | Bin 37760 -> 0 bytes software/CPM/CPM_MC_F2/PATH.COM | Bin 3456 -> 0 bytes software/CPM/CPM_MC_F2/PUBLIC.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_F2/PWD.COM | Bin 3328 -> 0 bytes software/CPM/CPM_MC_F2/RCP.LBR | Bin 20096 -> 0 bytes software/CPM/CPM_MC_F2/RELEASE.NOT | 266 - software/CPM/CPM_MC_F2/SAINST.COM | Bin 4864 -> 0 bytes software/CPM/CPM_MC_F2/SALIAS.COM | Bin 7936 -> 0 bytes software/CPM/CPM_MC_F2/SAVENDR.COM | Bin 1536 -> 0 bytes software/CPM/CPM_MC_F2/SDZ.COM | Bin 6016 -> 0 bytes software/CPM/CPM_MC_F2/SHOW.COM | Bin 11008 -> 0 bytes software/CPM/CPM_MC_F2/SUB.COM | Bin 2688 -> 0 bytes software/CPM/CPM_MC_F2/TCAP.LBR | Bin 2176 -> 0 bytes software/CPM/CPM_MC_F2/TCJ.INF | 31 - software/CPM/CPM_MC_F2/TCJ25.WZ | Bin 4224 -> 0 bytes software/CPM/CPM_MC_F2/TCJ26.WZ | Bin 12032 -> 0 bytes software/CPM/CPM_MC_F2/TCJ27.WZ | Bin 15360 -> 0 bytes software/CPM/CPM_MC_F2/TCJ28.WZ | Bin 20352 -> 0 bytes software/CPM/CPM_MC_F2/TCJ29.WZ | Bin 25728 -> 0 bytes software/CPM/CPM_MC_F2/TCJ30.WZ | Bin 17792 -> 0 bytes software/CPM/CPM_MC_F2/TCJ31UPD.WZ | Bin 33792 -> 0 bytes software/CPM/CPM_MC_F2/TCJ32.WZ | Bin 22912 -> 0 bytes software/CPM/CPM_MC_F2/TCJ33UPD.WZ | Bin 25344 -> 0 bytes software/CPM/CPM_MC_F2/TCSELECT.COM | Bin 3072 -> 0 bytes software/CPM/CPM_MC_F2/TY3ERA.COM | Bin 3328 -> 0 bytes software/CPM/CPM_MC_F2/TY3REN.COM | Bin 3968 -> 0 bytes software/CPM/CPM_MC_F2/TY4ERA.COM | Bin 1408 -> 0 bytes software/CPM/CPM_MC_F2/TY4REN.COM | Bin 1152 -> 0 bytes software/CPM/CPM_MC_F2/TY4SAVE.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_F2/TY4SP.COM | Bin 896 -> 0 bytes software/CPM/CPM_MC_F2/UNCRUNCH.COM | Bin 8064 -> 0 bytes software/CPM/CPM_MC_F2/VIEW.COM | Bin 7424 -> 0 bytes software/CPM/CPM_MC_F2/XTCAP.COM | Bin 3584 -> 0 bytes software/CPM/CPM_MC_F2/Z3LOC.COM | Bin 2048 -> 0 bytes software/CPM/CPM_MC_F2/Z3TCAP.TCP | Bin 11136 -> 0 bytes software/CPM/CPM_MC_F2/ZCNFG.COM | Bin 6144 -> 0 bytes software/CPM/CPM_MC_F2/ZERR.COM | Bin 3712 -> 0 bytes software/CPM/CPM_MC_F2/ZEX.COM | Bin 11008 -> 0 bytes software/CPM/CPM_MC_F2/ZF-DIM.COM | Bin 14848 -> 0 bytes software/CPM/CPM_MC_F2/ZF-REV.COM | Bin 14848 -> 0 bytes software/CPM/CPM_MC_F2/ZFILEB38.LZT | Bin 15872 -> 0 bytes software/CPM/CPM_MC_F2/ZFILER.CMD | 28 - software/CPM/CPM_MC_F2/ZHELPERS.LZT | Bin 2432 -> 0 bytes software/CPM/CPM_MC_F2/ZLT.COM | Bin 6016 -> 0 bytes software/CPM/CPM_MC_F2/ZNODES66.LZT | Bin 2304 -> 0 bytes software/CPM/CPM_MC_F2/ZSYSTEM.IZF | Bin 3200 -> 0 bytes software/CPM/CPM_MC_F3/BALSHEET.CSD | Bin 2048 -> 0 bytes software/CPM/CPM_MC_F3/BATCH.OVR | Bin 512 -> 0 bytes software/CPM/CPM_MC_F3/CD.COM | Bin 5632 -> 0 bytes software/CPM/CPM_MC_F3/CLIENTSR.DEF | Bin 1792 -> 0 bytes software/CPM/CPM_MC_F3/CLIENTSR.DTA | Bin 768 -> 0 bytes software/CPM/CPM_MC_F3/CLIENTSR.NDX | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/COLTAB.MAC | 276 - software/CPM/CPM_MC_F3/CS.COM | Bin 12544 -> 0 bytes software/CPM/CPM_MC_F3/CS.OVR | Bin 41472 -> 0 bytes software/CPM/CPM_MC_F3/CSDUMP.COM | Bin 12544 -> 0 bytes software/CPM/CPM_MC_F3/CSDUMP.OVR | Bin 20224 -> 0 bytes software/CPM/CPM_MC_F3/CSMASK.MSK | Bin 6656 -> 0 bytes software/CPM/CPM_MC_F3/CUSTOMER.DTA | Bin 768 -> 0 bytes software/CPM/CPM_MC_F3/CUSTOMER.DTB | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/CUSTOMER.NDX | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/CUSTOMER.NDY | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/DATASTAR.COM | Bin 26624 -> 0 bytes software/CPM/CPM_MC_F3/DINSTALL.COM | Bin 11264 -> 0 bytes software/CPM/CPM_MC_F3/EBCTAB.MAC | 153 - software/CPM/CPM_MC_F3/FORMAT.FMT | Bin 384 -> 0 bytes software/CPM/CPM_MC_F3/FORMGEN.COM | Bin 33792 -> 0 bytes software/CPM/CPM_MC_F3/FORMSORT.COM | Bin 17920 -> 0 bytes software/CPM/CPM_MC_F3/FORMSORT.OVR | Bin 13312 -> 0 bytes software/CPM/CPM_MC_F3/HELP1.CSD | Bin 4864 -> 0 bytes software/CPM/CPM_MC_F3/HELP2.CSD | Bin 5376 -> 0 bytes software/CPM/CPM_MC_F3/HELPER.CSD | Bin 3072 -> 0 bytes software/CPM/CPM_MC_F3/HELPER.DMP | 73 - software/CPM/CPM_MC_F3/INDEX.COM | Bin 3840 -> 0 bytes software/CPM/CPM_MC_F3/INSTCS.COM | Bin 12544 -> 0 bytes software/CPM/CPM_MC_F3/INSTCS.DAT | Bin 5888 -> 0 bytes software/CPM/CPM_MC_F3/INSTCS.OVR | Bin 25856 -> 0 bytes software/CPM/CPM_MC_F3/INVCE.DEF | Bin 2816 -> 0 bytes software/CPM/CPM_MC_F3/INVCE.DTA | Bin 3840 -> 0 bytes software/CPM/CPM_MC_F3/INVCE.NDX | Bin 768 -> 0 bytes software/CPM/CPM_MC_F3/MACHINES.TXT | 167 - software/CPM/CPM_MC_F3/MAILMRGE.OVR | Bin 13312 -> 0 bytes software/CPM/CPM_MC_F3/MENU.COM | Bin 640 -> 0 bytes software/CPM/CPM_MC_F3/MPMPATCH.COM | Bin 3584 -> 0 bytes software/CPM/CPM_MC_F3/NOCOL.REL | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/NOERR.REL | Bin 1152 -> 0 bytes software/CPM/CPM_MC_F3/NOREPORT.REL | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/NOSEL.REL | Bin 128 -> 0 bytes software/CPM/CPM_MC_F3/OKSTATES.DTA | 54 - software/CPM/CPM_MC_F3/OKSTATES.NDX | Bin 512 -> 0 bytes software/CPM/CPM_MC_F3/ORDER.DEF | Bin 2560 -> 0 bytes software/CPM/CPM_MC_F3/PAYMENTS.DEF | Bin 1536 -> 0 bytes software/CPM/CPM_MC_F3/PAYMENTS.DTA | Bin 512 -> 0 bytes software/CPM/CPM_MC_F3/PAYMENTS.NDX | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/PRINT.TST | 121 - software/CPM/CPM_MC_F3/PRODUCTR.DEF | Bin 1792 -> 0 bytes software/CPM/CPM_MC_F3/PRODUCTR.DTA | 11 - software/CPM/CPM_MC_F3/PRODUCTR.NDX | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/PRODUCTS.DTA | Bin 1024 -> 0 bytes software/CPM/CPM_MC_F3/PRODUCTS.NDX | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/PUTEOF.COM | Bin 3584 -> 0 bytes software/CPM/CPM_MC_F3/REDIT.COM | Bin 28416 -> 0 bytes software/CPM/CPM_MC_F3/REMSGS.OVR | Bin 39680 -> 0 bytes software/CPM/CPM_MC_F3/REPORT.COM | Bin 32256 -> 0 bytes software/CPM/CPM_MC_F3/RGEN.COM | Bin 16384 -> 0 bytes software/CPM/CPM_MC_F3/RINSTALL.COM | Bin 30208 -> 0 bytes software/CPM/CPM_MC_F3/RSMSGS.OVR | Bin 8192 -> 0 bytes software/CPM/CPM_MC_F3/SAMPLE.DAT | 646 - software/CPM/CPM_MC_F3/SAMPLE.TXT | 73 - software/CPM/CPM_MC_F3/SORLIB.REL | Bin 40576 -> 0 bytes software/CPM/CPM_MC_F3/SORT.COM | Bin 19200 -> 0 bytes software/CPM/CPM_MC_F3/SORT.REL | Bin 640 -> 0 bytes software/CPM/CPM_MC_F3/SP.COM | Bin 37888 -> 0 bytes software/CPM/CPM_MC_F3/SPELSTAR.DCT | Bin 97280 -> 0 bytes software/CPM/CPM_MC_F3/SPELSTAR.OVR | Bin 17920 -> 0 bytes software/CPM/CPM_MC_F3/STAFF.DEF | Bin 1536 -> 0 bytes software/CPM/CPM_MC_F3/STAFF.DTA | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/STAFF.NDX | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/STARINDX.COM | Bin 34304 -> 0 bytes software/CPM/CPM_MC_F3/STYLE.COM | Bin 19456 -> 0 bytes software/CPM/CPM_MC_F3/SUBRDEMO.MAC | 97 - software/CPM/CPM_MC_F3/SYSEQA.MAC | 24 - software/CPM/CPM_MC_F3/TERMCAP.SYS | Bin 256 -> 0 bytes software/CPM/CPM_MC_F3/WINSTALL.COM | Bin 29184 -> 0 bytes software/CPM/CPM_MC_F3/WM.COM | Bin 13056 -> 0 bytes software/CPM/CPM_MC_F3/WM.HLP | 112 - software/CPM/CPM_MC_F3/WS.COM | Bin 17664 -> 0 bytes software/CPM/CPM_MC_F3/WS.INS | Bin 58240 -> 0 bytes software/CPM/CPM_MC_F3/WSMSGS.OVR | Bin 30080 -> 0 bytes software/CPM/CPM_MC_F3/WSOVLY1.OVR | Bin 33536 -> 0 bytes software/CPM/CPM_MC_F3/WSU.COM | Bin 17664 -> 0 bytes software/CPM/CPM_MC_F4/INSTALL.COM | Bin 6528 -> 0 bytes software/CPM/CPM_MC_F4/INSTALL.DAT | Bin 19840 -> 0 bytes software/CPM/CPM_MC_F4/INSTALL.LD | Bin 30464 -> 0 bytes software/CPM/CPM_MC_F4/INSTALL.MSG | Bin 11904 -> 0 bytes software/CPM/CPM_MC_F4/INSTALL.SPC | Bin 256 -> 0 bytes software/CPM/CPM_MC_F4/MP.COD | Bin 44032 -> 0 bytes software/CPM/CPM_MC_F4/MP.COM | Bin 16768 -> 0 bytes software/CPM/CPM_MC_F4/MP.HLP | Bin 42496 -> 0 bytes software/CPM/CPM_MC_F4/MP40 | Bin 6400 -> 0 bytes software/CPM/CPM_MC_F4/MP40.X | Bin 6400 -> 0 bytes software/CPM/CPM_MC_F4/MP80 | Bin 6400 -> 0 bytes software/CPM/CPM_MC_F4/MP80.x | Bin 6400 -> 0 bytes software/CPM/CPM_MC_F5/DBASE.COM | Bin 19328 -> 0 bytes software/CPM/CPM_MC_F5/DBASEMSG.TXT | 886 -- software/CPM/CPM_MC_F5/DBASEOVR.COM | Bin 41472 -> 0 bytes software/CPM/CPM_MC_F5/INSTALL.COM | Bin 14336 -> 0 bytes software/CPM/CPM_MC_F5/NAMES.DBF | Bin 1024 -> 0 bytes software/CPM/CPM_MC_F5/SP-HELP.CMD | 61 - software/CPM/CPM_MC_F5/SP-MAIN.CMD | 73 - software/CPM/CPM_MC_F6/DWG.LBR | Bin 788992 -> 0 bytes software/CPM/CPM_MC_F6/access.com | Bin 5760 -> 0 bytes software/CPM/CPM_MC_F6/cpmname.com | Bin 6400 -> 0 bytes software/CPM/CPM_MC_F6/dwg-apps.man | 16 - software/CPM/CPM_MC_F6/findfile.com | Bin 6784 -> 0 bytes software/CPM/CPM_MC_F6/map.com | Bin 6400 -> 0 bytes software/CPM/CPM_MC_F6/meta.com | Bin 5760 -> 0 bytes software/CPM/CPM_MC_F6/multifmt.com | Bin 6656 -> 0 bytes software/CPM/CPM_MC_F6/rem.com | Bin 128 -> 0 bytes software/CPM/CPM_MC_F6/setlabel.com | Bin 5632 -> 0 bytes software/CPM/CPM_MC_F6/sysgen.com | Bin 6528 -> 0 bytes software/CPM/CPM_MC_F6/termtype.com | Bin 2944 -> 0 bytes software/CPM/CPM_MC_F6/view.com | Bin 7296 -> 0 bytes software/CPM/CPM_MC_F7/CONTENTS.TXT | 0 software/CPM/CPM_MC_F8/USQ.COM | Bin 10112 -> 0 bytes software/CPM/CPM_MC_F8/autocpm.com | Bin 896 -> 0 bytes software/CPM/CPM_MC_F8/booz.com | Bin 14848 -> 0 bytes software/CPM/CPM_MC_F8/cct.com | Bin 1920 -> 0 bytes software/CPM/CPM_MC_F8/ch.com | Bin 12928 -> 0 bytes software/CPM/CPM_MC_F8/cmp.com | Bin 3840 -> 0 bytes software/CPM/CPM_MC_F8/common.com | Bin 9472 -> 0 bytes software/CPM/CPM_MC_F8/cp.com | Bin 12288 -> 0 bytes software/CPM/CPM_MC_F8/ctype.com | Bin 768 -> 0 bytes software/CPM/CPM_MC_F8/ctype.doc | 67 - software/CPM/CPM_MC_F8/d.com | Bin 4608 -> 0 bytes software/CPM/CPM_MC_F8/dif2.com | Bin 14720 -> 0 bytes software/CPM/CPM_MC_F8/difdoc.doc | 102 - software/CPM/CPM_MC_F8/erase.sub | Bin 256 -> 0 bytes software/CPM/CPM_MC_F8/field.com | Bin 9600 -> 0 bytes software/CPM/CPM_MC_F8/find.com | Bin 13952 -> 0 bytes software/CPM/CPM_MC_F8/fullprmp.sub | 2 - software/CPM/CPM_MC_F8/grep.com | Bin 17664 -> 0 bytes software/CPM/CPM_MC_F8/hcat.com | Bin 9216 -> 0 bytes software/CPM/CPM_MC_F8/lpr.com | Bin 8448 -> 0 bytes software/CPM/CPM_MC_F8/ls.com | Bin 7808 -> 0 bytes software/CPM/CPM_MC_F8/ls.doc | 41 - software/CPM/CPM_MC_F8/merge.com | Bin 7936 -> 0 bytes software/CPM/CPM_MC_F8/merge.doc | 25 - software/CPM/CPM_MC_F8/more.com | Bin 16640 -> 0 bytes software/CPM/CPM_MC_F8/more12.doc | 173 - software/CPM/CPM_MC_F8/normprmp.sub | 2 - software/CPM/CPM_MC_F8/pg.com | Bin 8320 -> 0 bytes software/CPM/CPM_MC_F8/prep.com | Bin 9984 -> 0 bytes software/CPM/CPM_MC_F8/rz.com | Bin 5888 -> 0 bytes software/CPM/CPM_MC_F8/sh.com | Bin 9728 -> 0 bytes software/CPM/CPM_MC_F8/sh.ovr | Bin 9984 -> 0 bytes software/CPM/CPM_MC_F8/sh.txt | 6828 --------- software/CPM/CPM_MC_F8/sh121.com | Bin 11776 -> 0 bytes software/CPM/CPM_MC_F8/shbak.com | Bin 9728 -> 0 bytes software/CPM/CPM_MC_F8/shsave.com | Bin 1024 -> 0 bytes software/CPM/CPM_MC_F8/sort.com | Bin 12544 -> 0 bytes software/CPM/CPM_MC_F8/sort.doc | 35 - software/CPM/CPM_MC_F8/sort2.com | Bin 9728 -> 0 bytes software/CPM/CPM_MC_F8/ssed2.com | Bin 10368 -> 0 bytes software/CPM/CPM_MC_F8/sz.com | Bin 7808 -> 0 bytes software/CPM/CPM_MC_F8/tr.com | Bin 10112 -> 0 bytes software/CPM/CPM_MC_F8/uniq.com | Bin 8448 -> 0 bytes software/CPM/CPM_MC_F8/utool.man | 478 - software/CPM/CPM_MC_F8/utool2.man | 176 - software/CPM/CPM_MC_F8/uudecode.com | Bin 10496 -> 0 bytes software/CPM/CPM_MC_F8/uuencode.com | Bin 10240 -> 0 bytes software/CPM/CPM_MC_F8/vsplit.com | Bin 9088 -> 0 bytes software/CPM/CPM_MC_F8/wc.com | Bin 4864 -> 0 bytes software/CPM/CPM_MC_F8/zcal.com | Bin 1280 -> 0 bytes software/CPM/CPM_MC_F9/CONTENTS.TXT | 0 software/CPM/CPM_RFS_1/BBCBASIC.COM | Bin 13696 -> 0 bytes software/CPM/CPM_RFS_1/CAT.COM | Bin 6272 -> 0 bytes software/CPM/CPM_RFS_1/DDT.COM | Bin 4864 -> 0 bytes software/CPM/CPM_RFS_1/DIFF.COM | Bin 7296 -> 0 bytes software/CPM/CPM_RFS_1/GREP.COM | Bin 7040 -> 0 bytes software/CPM/CPM_RFS_1/M80.COM | Bin 20224 -> 0 bytes software/CPM/CPM_RFS_1/RM.COM | Bin 3840 -> 0 bytes software/CPM/CPM_RFS_1/SORT.COM | Bin 8320 -> 0 bytes software/CPM/CPM_RFS_1/SPLIT.COM | Bin 6272 -> 0 bytes software/CPM/CPM_RFS_1/TR.COM | Bin 8832 -> 0 bytes software/CPM/CPM_RFS_1/XDIR.COM | Bin 2176 -> 0 bytes software/CPM/CPM_RFS_1/ZSID.COM | Bin 10240 -> 0 bytes software/CPM/CPM_RFS_1/asm.com | Bin 8192 -> 0 bytes software/CPM/CPM_RFS_1/dump.com | Bin 512 -> 0 bytes software/CPM/CPM_RFS_1/ed.com | Bin 6656 -> 0 bytes software/CPM/CPM_RFS_1/genhex.com | Bin 768 -> 0 bytes software/CPM/CPM_RFS_1/load.com | Bin 1792 -> 0 bytes software/CPM/CPM_RFS_1/mac.com | Bin 16384 -> 0 bytes software/CPM/CPM_RFS_1/mbasic.com | Bin 24576 -> 0 bytes software/CPM/CPM_RFS_1/mbasic85.com | Bin 24320 -> 0 bytes software/CPM/CPM_RFS_1/peg.com | Bin 7296 -> 0 bytes software/CPM/CPM_RFS_1/pip.com | Bin 7680 -> 0 bytes software/CPM/CPM_RFS_1/stat.com | Bin 5376 -> 0 bytes software/CPM/CPM_RFS_1/submit.com | Bin 1280 -> 0 bytes software/CPM/CPM_RFS_1/xsub.com | Bin 768 -> 0 bytes software/CPM/CPM_RFS_1/zde16.com | Bin 16896 -> 0 bytes software/CPM/CPM_RFS_2/L80.COM | Bin 10752 -> 0 bytes software/CPM/CPM_RFS_2/M80.COM | Bin 20224 -> 0 bytes software/CPM/CPM_RFS_2/bascom.com | Bin 32768 -> 0 bytes software/CPM/CPM_RFS_2/bascom.hlp | 379 - software/CPM/CPM_RFS_2/bascom2.hlp | 691 - software/CPM/CPM_RFS_2/baslib.rel | Bin 24960 -> 0 bytes software/CPM/CPM_RFS_2/brun.com | Bin 15488 -> 0 bytes software/CPM/CPM_RFS_2/cref.com | Bin 3968 -> 0 bytes software/CPM/CPM_RFS_2/cref80.com | Bin 3968 -> 0 bytes software/CPM/CPM_RFS_2/lib80.com | Bin 4736 -> 0 bytes software/CPM/CPM_RFS_2/mbasic.com | Bin 24320 -> 0 bytes software/CPM/CPM_RFS_2/obslib.rel | Bin 48384 -> 0 bytes software/CPM/CPM_RFS_2/rantest.asc | Bin 640 -> 0 bytes software/CPM/CPM_RFS_2/rantest.bas | 17 - software/CPM/CPM_RFS_2/rantest.com | Bin 1408 -> 0 bytes software/CPM/CPM_RFS_2/rantest.rel | Bin 640 -> 0 bytes software/CPM/CPM_RFS_2/readme.txt | 54 - software/MZF/1Z-013B.MZF | Bin 27680 -> 0 bytes software/MZF/2Z009E.MZF | Bin 36992 -> 0 bytes software/MZF/2z-046a.MZF | Bin 45184 -> 0 bytes software/MZF/5Z-009A.MZF | Bin 42240 -> 0 bytes software/MZF/5Z-009B.MZF | Bin 42240 -> 0 bytes software/MZF/6502_Betriebssys.MZF | Bin 5545 -> 0 bytes software/MZF/80A PENCIL.A2_C2.MZF | Bin 6272 -> 0 bytes software/MZF/80A PENCIL.A2_S.MZF | Bin 6272 -> 0 bytes software/MZF/80A_PENCIL.A2_C2.MZF | Bin 6272 -> 0 bytes software/MZF/80A_PENCIL.A2_S.MZF | Bin 6272 -> 0 bytes software/MZF/80zbasic.MZF | Bin 33409 -> 0 bytes software/MZF/A-BASIC_SA-5510.MZF | Bin 12469 -> 0 bytes software/MZF/AIP_-_LOGO_xrr.MZF | Bin 37249 -> 0 bytes software/MZF/APOLLO CHESS v2a.MZF | Bin 11554 -> 0 bytes software/MZF/APOLLO_CHESS_v2a.MZF | Bin 11554 -> 0 bytes software/MZF/B880 MASTER.MZF | Bin 5588 -> 0 bytes software/MZF/B880.A3_P6.MZF | Bin 5844 -> 0 bytes software/MZF/B880_MASTER.MZF | Bin 5588 -> 0 bytes software/MZF/BAS MOD v3.74.MZF | Bin 9118 -> 0 bytes software/MZF/BASIC SA-5575_C.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC SA-5575_S.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC SA-5577_C.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC SA-5577_S.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC SA-5580.MZF | Bin 12469 -> 0 bytes software/MZF/BASIC.MZF | Bin 13079 -> 0 bytes software/MZF/BASIC.SA-5510.MZF | Bin 12469 -> 0 bytes software/MZF/BASIC80A.MZF | Bin 12416 -> 0 bytes software/MZF/BASICRFS.MZF | Bin 12823 -> 0 bytes software/MZF/BASIC_MZ-5Z008.MZF | Bin 34431 -> 0 bytes software/MZF/BASIC_MZ-5Z008_2.MZF | Bin 34431 -> 0 bytes software/MZF/BASIC_MZ-5Z009.MZF | Bin 42225 -> 0 bytes software/MZF/BASIC_MZ-5Z009_modified.MZF | Bin 42225 -> 0 bytes software/MZF/BASIC_OM-1000.MZF | Bin 12400 -> 0 bytes software/MZF/BASIC_OM-1001.MZF | Bin 12400 -> 0 bytes software/MZF/BASIC_OM-500.MZF | Bin 12416 -> 0 bytes software/MZF/BASIC_SA-5575_C.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC_SA-5575_S.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC_SA-5577_C.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC_SA-5577_S.MZF | Bin 14208 -> 0 bytes software/MZF/BASIC_SA-5580.MZF | Bin 12469 -> 0 bytes software/MZF/BASIC_SP-5025.MZF | Bin 12416 -> 0 bytes software/MZF/BAS_MOD_v3.74.MZF | Bin 9118 -> 0 bytes software/MZF/BATTLE_GAME.MZF | Bin 10933 -> 0 bytes software/MZF/BINARY COUNT.MZF | Bin 221 -> 0 bytes software/MZF/BINARY_COUNT.MZF | Bin 221 -> 0 bytes software/MZF/BYTESAVER SA5510.MZF | Bin 303 -> 0 bytes software/MZF/BYTESAVER_SA5510.MZF | Bin 303 -> 0 bytes software/MZF/CLUB COPY.U1.MZF | Bin 1240 -> 0 bytes software/MZF/CLUB MON.A1_M.MZF | Bin 1151 -> 0 bytes software/MZF/CLUB MON.A1_S.MZF | Bin 1151 -> 0 bytes software/MZF/CLUB_COPY.U1.MZF | Bin 1240 -> 0 bytes software/MZF/CLUB_MON.A1_M.MZF | Bin 1151 -> 0 bytes software/MZF/CLUB_MON.A1_S.MZF | Bin 1151 -> 0 bytes software/MZF/COLONY.MZF | Bin 4758 -> 0 bytes software/MZF/COMPILER_A2.MZF | Bin 10308 -> 0 bytes software/MZF/CONVERTER A_700.MZF | Bin 5760 -> 0 bytes software/MZF/CONVERTER.MZF | Bin 1081 -> 0 bytes software/MZF/CONVERTER_A_700.MZF | Bin 5760 -> 0 bytes software/MZF/COPIER.MZF | Bin 577 -> 0 bytes software/MZF/COSMO_BLASTER_MZ700.MZF | Bin 14561 -> 0 bytes software/MZF/CPM_RFS_1.MZF | Bin 327808 -> 0 bytes software/MZF/CPM_RFS_2.MZF | Bin 327808 -> 0 bytes software/MZF/CRUISER3_MZ1500.M12 | Bin 19072 -> 0 bytes software/MZF/DCS MZ80A APPEND.MZF | Bin 331 -> 0 bytes software/MZF/DCS MZ80A RENUM.MZF | Bin 6401 -> 0 bytes software/MZF/DCS_MZ80A_APPEND.MZF | Bin 331 -> 0 bytes software/MZF/DCS_MZ80A_RENUM.MZF | Bin 6401 -> 0 bytes software/MZF/DELETE.MZF | Bin 8575 -> 0 bytes software/MZF/DISASM 8800.A15.MZF | Bin 6272 -> 0 bytes software/MZF/DISASM B800.A15.MZF | Bin 6272 -> 0 bytes software/MZF/DISASM_8800.A15.MZF | Bin 6272 -> 0 bytes software/MZF/DISASM_B800.A15.MZF | Bin 6272 -> 0 bytes software/MZF/DISKEDIT.A4B.MZF | Bin 3008 -> 0 bytes software/MZF/DISKEDIT.A7_40T.MZF | Bin 3456 -> 0 bytes software/MZF/Doordoor.mzt | Bin 18048 -> 0 bytes software/MZF/EXPRESS BAS_700.MZF | Bin 8833 -> 0 bytes software/MZF/EXPRESS COMPILER.MZF | Bin 9088 -> 0 bytes software/MZF/EXPRESS PLUS.MZF | Bin 8833 -> 0 bytes software/MZF/EXPRESS_BAS_700.MZF | Bin 8833 -> 0 bytes software/MZF/EXPRESS_COMPILER.MZF | Bin 9088 -> 0 bytes software/MZF/EXPRESS_PLUS.MZF | Bin 8833 -> 0 bytes software/MZF/EXT.BASIC_OM-500.MZF | Bin 19154 -> 0 bytes software/MZF/FDCOPY.MZF | Bin 9010 -> 0 bytes software/MZF/FDCOPY.MZT | Bin 9011 -> 0 bytes software/MZF/FD_Editor_MZ700.MZF | Bin 3072 -> 0 bytes software/MZF/FLAP.MZF | Bin 46080 -> 0 bytes software/MZF/FRONT_PANEL_v1.5.MZF | Bin 4771 -> 0 bytes software/MZF/Filing(CMT).MZF | Bin 5720 -> 0 bytes software/MZF/Filing_CMT_.MZT | Bin 5721 -> 0 bytes software/MZF/GALAXI_FORM.MZF | Bin 5520 -> 0 bytes software/MZF/GALAXY_INVADERS.MZF | Bin 4429 -> 0 bytes software/MZF/GDP9-BA.MZF | Bin 29606 -> 0 bytes software/MZF/Greedy_Gremlins.MZF | Bin 17695 -> 0 bytes software/MZF/HP4TMZ7.MZF | Bin 21397 -> 0 bytes software/MZF/HP4TMZ7L.MZF | Bin 175 -> 0 bytes software/MZF/HU-BASIC.A1_M.MZF | Bin 25105 -> 0 bytes software/MZF/HU-BASIC.A1_S.MZF | Bin 25105 -> 0 bytes software/MZF/HU-BASIC.A2_80M.MZF | Bin 25106 -> 0 bytes software/MZF/HU-BASIC.A2_80S.MZF | Bin 25106 -> 0 bytes software/MZF/HU-BASIC_V1.3_K.MZF | Bin 24448 -> 0 bytes software/MZF/HUCALC_80A+_C2.MZF | Bin 19072 -> 0 bytes software/MZF/HUCALC_80A+_M.MZF | Bin 19072 -> 0 bytes software/MZF/HUCALC_80A+_S.MZF | Bin 19072 -> 0 bytes software/MZF/HUNCHY.MZF | Bin 16282 -> 0 bytes software/MZF/Hardcopy.MZF | Bin 976 -> 0 bytes software/MZF/INSTRUCS_v1.1.MZF | Bin 6808 -> 0 bytes software/MZF/JIGSAW.MZF | Bin 13543 -> 0 bytes software/MZF/Joy.MZF | Bin 272 -> 0 bytes software/MZF/KNIFORTH.MZF | Bin 5313 -> 0 bytes software/MZF/KUMA_INTERPR..MZF | Bin 11905 -> 0 bytes software/MZF/KuPTest.MZF | Bin 455 -> 0 bytes software/MZF/LAND_ESCAPE.MZF | Bin 14267 -> 0 bytes software/MZF/Lady_Bug_MZ80K.m12 | Bin 18049 -> 0 bytes software/MZF/Le_Mans.MZF | Bin 16169 -> 0 bytes software/MZF/MAGIC_PAINTBOX.MZF | Bin 7229 -> 0 bytes software/MZF/MAN-HUNT.MZF | Bin 2708 -> 0 bytes software/MZF/MEMORY_TEST.MZF | Bin 861 -> 0 bytes software/MZF/MINI_DATACARD..MZF | Bin 5056 -> 0 bytes software/MZF/ML-SP_8002_BBG.MZF | Bin 3713 -> 0 bytes software/MZF/MONITOR6.MZF | Bin 5482 -> 0 bytes software/MZF/MOVING_SEARCHER.MZF | Bin 8480 -> 0 bytes software/MZF/MZ-2Z009.MZF | Bin 34431 -> 0 bytes software/MZF/MZ-700_FORTH.MZF | Bin 5329 -> 0 bytes software/MZF/MZ-80A_GALACTIC.MZF | Bin 16067 -> 0 bytes software/MZF/MZ700BAS.M12 | Bin 27680 -> 0 bytes software/MZF/MZ700BAS.MZF | Bin 27680 -> 0 bytes software/MZF/MZ80A_basic.DSK | Bin 322816 -> 0 bytes software/MZF/Mz1571.MZF | Bin 2999 -> 0 bytes software/MZF/Mzprint.MZF | Bin 496 -> 0 bytes software/MZF/NEW_INVADERS.MZF | Bin 2560 -> 0 bytes software/MZF/OPENING_DATA.MZF | Bin 2176 -> 0 bytes software/MZF/OTHELLO.MZF | Bin 16910 -> 0 bytes software/MZF/PAC-MAN.MZF | Bin 8837 -> 0 bytes software/MZF/PAC-MAN3.MZF | Bin 9979 -> 0 bytes software/MZF/PAINFUL_MAN.MZF | Bin 12178 -> 0 bytes software/MZF/PAINTBOX.BAS.MZF | Bin 4441 -> 0 bytes software/MZF/PCG_BASIC.MZF | Bin 28849 -> 0 bytes software/MZF/PCG_BASIC_MZ700.MZF | Bin 28849 -> 0 bytes software/MZF/PROBE_A_1200.MZF | Bin 6769 -> 0 bytes software/MZF/PROBE_A_8000.MZF | Bin 6769 -> 0 bytes software/MZF/PROBE_A_B600.MZF | Bin 6769 -> 0 bytes software/MZF/Pcgrally_MZ800.MZF | Bin 11856 -> 0 bytes software/MZF/QDCOPY.MZF | Bin 7967 -> 0 bytes software/MZF/QD_BAS_5Z008_MZ700.MZF | Bin 34431 -> 0 bytes software/MZF/RAM_CHECK_A.MZF | Bin 312 -> 0 bytes software/MZF/REALFORT.MZF | Bin 16001 -> 0 bytes software/MZF/ROUND_SHOOT.MZF | Bin 16142 -> 0 bytes software/MZF/S-Basic-Cent-2.MZF | Bin 27681 -> 0 bytes software/MZF/S-MASTER.MZF | Bin 11077 -> 0 bytes software/MZF/SA-5510+KN.COMM..MZF | Bin 14211 -> 0 bytes software/MZF/SA-5510_Compiler.MZF | Bin 16466 -> 0 bytes software/MZF/SA-6510.DSK | Bin 322816 -> 0 bytes software/MZF/SARGON_2.71.MZF | Bin 11648 -> 0 bytes software/MZF/SCRAMBLE_A.MZF | Bin 6209 -> 0 bytes software/MZF/SECTOR_R_W(NEC).MZF | Bin 18384 -> 0 bytes software/MZF/SECTOR_R_W.MZF | Bin 18384 -> 0 bytes software/MZF/SEND-1.MZF | Bin 11799 -> 0 bytes software/MZF/SHARPLAN01.MZF | Bin 26384 -> 0 bytes software/MZF/SHARP_PENCIL.A1.MZF | Bin 6272 -> 0 bytes software/MZF/SHARP_PENCIL.ALF.MZF | Bin 6272 -> 0 bytes software/MZF/SLAVE_v1.1A.MZF | Bin 3340 -> 0 bytes software/MZF/SNAKE&SNAKE_EXP1.MZF | Bin 28958 -> 0 bytes software/MZF/SNOWFLAKES.MZF | Bin 5168 -> 0 bytes software/MZF/SOLO_BASIC.MZF | Bin 17792 -> 0 bytes software/MZF/SP-4015.A1_C.MZF | Bin 16494 -> 0 bytes software/MZF/SP-4015.A1_S.MZF | Bin 16522 -> 0 bytes software/MZF/SP-5060.A1_M.MZF | Bin 15232 -> 0 bytes software/MZF/SP-5060.A1_S.MZF | Bin 15232 -> 0 bytes software/MZF/SP-CONVERT.A1.MZF | Bin 3201 -> 0 bytes software/MZF/SPACE_INVADERS.MZF | Bin 10400 -> 0 bytes software/MZF/STKEEPER2BAS700A.MZF | Bin 7495 -> 0 bytes software/MZF/SUB-MONITOR-700.MZF | Bin 4224 -> 0 bytes software/MZF/SUCOPY_A000.A16.MZF | Bin 9856 -> 0 bytes software/MZF/SUPERFIRE.MZF | Bin 2252 -> 0 bytes software/MZF/SUPERTAPE_2.MZF | Bin 1065 -> 0 bytes software/MZF/SUPER_PUCK-MAN.MZF | Bin 9930 -> 0 bytes software/MZF/SUTAM1F.MZF | Bin 4480 -> 0 bytes software/MZF/SUTAMC9.MZF | Bin 1616 -> 0 bytes software/MZF/SUTAPEBA.MZF | Bin 29060 -> 0 bytes software/MZF/SUTAPEMO.MZF | Bin 1616 -> 0 bytes software/MZF/TETRIS.MZF | Bin 8192 -> 0 bytes software/MZF/TEXT_BASIC_I.MZF | Bin 12416 -> 0 bytes software/MZF/TEXT~ED_v1.2.MZF | Bin 6306 -> 0 bytes software/MZF/TRANS.MZF | Bin 25795 -> 0 bytes software/MZF/TRANS.MZT | Bin 26751 -> 0 bytes software/MZF/UNI=BASIC800.MZF | Bin 46164 -> 0 bytes software/MZF/UNIVERSAL_BASIC.MZF | Bin 46164 -> 0 bytes software/MZF/URAS-700.MZF | Bin 8577 -> 0 bytes software/MZF/Utility.MZT | Bin 2443 -> 0 bytes software/MZF/Utility_2.MZF | Bin 2442 -> 0 bytes software/MZF/Utility_V_1.1.MZF | Bin 2442 -> 0 bytes software/MZF/Utility_V_2.0.MZF | Bin 2442 -> 0 bytes software/MZF/WDPRO_2.37AT.MZF | Bin 12213 -> 0 bytes software/MZF/WDPRO_2.37AT_C2.MZF | Bin 12213 -> 0 bytes software/MZF/Wooky.MZF | Bin 47744 -> 0 bytes software/MZF/XPATCH_5510_v2.2.MZF | Bin 3280 -> 0 bytes software/MZF/Z80MACHINE.A3_C2.MZF | Bin 9600 -> 0 bytes software/MZF/Z80_MACHINE.A1_M.MZF | Bin 9600 -> 0 bytes software/MZF/Z80_MACHINE.A1_S.MZF | Bin 9600 -> 0 bytes software/MZF/Z80_MACHINE.A2_M.MZF | Bin 9600 -> 0 bytes software/MZF/Z80_MACHINE.A3_S.MZF | Bin 9600 -> 0 bytes software/MZF/ZEN7E.A2.MZF | Bin 5515 -> 0 bytes software/MZF/ZSP | Bin 15937 -> 0 bytes software/MZF/ZSP.MZF | Bin 10481 -> 0 bytes software/MZF/Zexas_MZ800.MZF | Bin 28800 -> 0 bytes software/MZF/basic_sa-5510.MZF | Bin 12400 -> 0 bytes software/MZF/bomberman_MZ700.m12 | Bin 8336 -> 0 bytes software/MZF/cannon_ball.m12 | Bin 5248 -> 0 bytes software/MZF/clock1.MZF | Bin 310 -> 0 bytes software/MZF/cmttofd.MZF | Bin 5720 -> 0 bytes software/MZF/cpm22.MZF | Bin 7296 -> 0 bytes software/MZF/diamond.MZF | Bin 17840 -> 0 bytes software/MZF/diskutility.MZF | Bin 2442 -> 0 bytes software/MZF/doordoor | Bin 49286 -> 0 bytes software/MZF/flugsim_MZ700.m12 | Bin 11920 -> 0 bytes software/MZF/fortransosz80.MZF | Bin 12417 -> 0 bytes software/MZF/hi-ramcheck.MZF | Bin 507 -> 0 bytes software/MZF/hudson_basic.MZF | Bin 24449 -> 0 bytes software/MZF/k-basic_v.5.MZF | Bin 30296 -> 0 bytes software/MZF/loader.MZF | Bin 195 -> 0 bytes software/MZF/m_c_Breakout_2.MZF | Bin 5924 -> 0 bytes software/MZF/m_c_Hissing_Sid.MZF | Bin 27969 -> 0 bytes software/MZF/m_c_Race_Chase.MZF | Bin 6455 -> 0 bytes software/MZF/minotaur.MZF | Bin 23553 -> 0 bytes software/MZF/monitor2 | Bin 4096 -> 0 bytes software/MZF/monitor3.MZF | Bin 4240 -> 0 bytes software/MZF/mz-5z009_modified2.MZF | Bin 42240 -> 0 bytes software/MZF/nakamoto_MZ700.m12 | Bin 28977 -> 0 bytes software/MZF/sa-5510_Bas_MZ80K.MZF | Bin 12400 -> 0 bytes software/MZF/sa-6510.MZF | Bin 32384 -> 0 bytes software/MZF/schach2_MZ700.m12 | Bin 20112 -> 0 bytes software/MZF/sdtest.MZF | Bin 11168 -> 0 bytes software/MZF/send-1_MZ700.m12 | Bin 11799 -> 0 bytes software/MZF/sharpmz-test.MZF | Bin 3934 -> 0 bytes software/MZF/sharpmz-test.mzf | Bin 3934 -> 0 bytes software/MZF/tetris-2_MZ800.MZF | Bin 20608 -> 0 bytes software/MZF/textsobs5.MZF | Bin 7396 -> 0 bytes software/MZF/ufo.MZF | Bin 23681 -> 0 bytes 2880 files changed, 84 insertions(+), 252722 deletions(-) delete mode 100644 software/CPM/CPM00_MZ800/asm.com delete mode 100644 software/CPM/CPM00_MZ800/copy.asm delete mode 100644 software/CPM/CPM00_MZ800/copydisk.com delete mode 100644 software/CPM/CPM00_MZ800/copysys.com delete mode 100644 software/CPM/CPM00_MZ800/ddt.com delete mode 100644 software/CPM/CPM00_MZ800/del.com delete mode 100644 software/CPM/CPM00_MZ800/diskdef.com delete mode 100644 software/CPM/CPM00_MZ800/diskedit.com delete mode 100644 software/CPM/CPM00_MZ800/dump.asm delete mode 100644 software/CPM/CPM00_MZ800/ed.com delete mode 100644 software/CPM/CPM00_MZ800/eject.com delete mode 100644 software/CPM/CPM00_MZ800/files.com delete mode 100644 software/CPM/CPM00_MZ800/format.com delete mode 100644 software/CPM/CPM00_MZ800/load.com delete mode 100644 software/CPM/CPM00_MZ800/pcpm.sys delete mode 100644 software/CPM/CPM00_MZ800/pip.com delete mode 100644 software/CPM/CPM00_MZ800/random.asm delete mode 100644 software/CPM/CPM00_MZ800/setup.com delete mode 100644 software/CPM/CPM00_MZ800/stat.com delete mode 100644 software/CPM/CPM00_MZ800/submit.com delete mode 100644 software/CPM/CPM00_MZ800/terminal.asm delete mode 100644 software/CPM/CPM00_MZ800/time.com delete mode 100644 software/CPM/CPM00_MZ800/vccp.cfg delete mode 100644 software/CPM/CPM00_MZ800/vccp.com delete mode 100644 software/CPM/CPM00_MZ800/xsub.com delete mode 100644 software/CPM/CPM00_SYSTEM/BBCBASIC.COM delete mode 100644 software/CPM/CPM00_SYSTEM/DDT.COM delete mode 100644 software/CPM/CPM00_SYSTEM/ZSID-FIX.DOC delete mode 100644 software/CPM/CPM00_SYSTEM/ZSID-PAT.COM delete mode 100644 software/CPM/CPM00_SYSTEM/ZSID.COM delete mode 100644 software/CPM/CPM00_SYSTEM/ZSID.PAT delete mode 100644 software/CPM/CPM00_SYSTEM/ZSID_ORIG.COM delete mode 100644 software/CPM/CPM00_SYSTEM/asciart.bas delete mode 100644 software/CPM/CPM00_SYSTEM/asm.com delete mode 100644 software/CPM/CPM00_SYSTEM/autoexec.sub delete mode 100644 software/CPM/CPM00_SYSTEM/autoexec.txt delete mode 100644 software/CPM/CPM00_SYSTEM/d.com delete mode 100644 software/CPM/CPM00_SYSTEM/ddt.com delete mode 100644 software/CPM/CPM00_SYSTEM/dump.com delete mode 100644 software/CPM/CPM00_SYSTEM/ed.com delete mode 100644 software/CPM/CPM00_SYSTEM/genhex.com delete mode 100644 software/CPM/CPM00_SYSTEM/gpeled.bas delete mode 100644 software/CPM/CPM00_SYSTEM/gpio.bas delete mode 100644 software/CPM/CPM00_SYSTEM/hello.asm delete mode 100644 software/CPM/CPM00_SYSTEM/hello.com delete mode 100644 software/CPM/CPM00_SYSTEM/load.com delete mode 100644 software/CPM/CPM00_SYSTEM/mac.com delete mode 100644 software/CPM/CPM00_SYSTEM/mbasic.com delete mode 100644 software/CPM/CPM00_SYSTEM/mbasic85.com delete mode 100644 software/CPM/CPM00_SYSTEM/peg.com delete mode 100644 software/CPM/CPM00_SYSTEM/pip.com delete mode 100644 software/CPM/CPM00_SYSTEM/rtc.bas delete mode 100644 software/CPM/CPM00_SYSTEM/startrek.bas delete mode 100644 software/CPM/CPM00_SYSTEM/stat.com delete mode 100644 software/CPM/CPM00_SYSTEM/submit.com delete mode 100644 software/CPM/CPM00_SYSTEM/trekinst.bas delete mode 100644 software/CPM/CPM00_SYSTEM/userled.bas delete mode 100644 software/CPM/CPM00_SYSTEM/xmodem.cfg delete mode 100644 software/CPM/CPM00_SYSTEM/xmodem.com delete mode 100644 software/CPM/CPM00_SYSTEM/xsub.com delete mode 100644 software/CPM/CPM00_SYSTEM/zde16.com delete mode 100644 software/CPM/CPM00_SYSTEM/zdenst16.com delete mode 100644 software/CPM/CPM01_TURBOP/art.txt delete mode 100644 software/CPM/CPM01_TURBOP/readme.txt delete mode 100644 software/CPM/CPM01_TURBOP/sa.pas delete mode 100644 software/CPM/CPM01_TURBOP/tinst.com delete mode 100644 software/CPM/CPM01_TURBOP/tinst.dta delete mode 100644 software/CPM/CPM01_TURBOP/tinst.msg delete mode 100644 software/CPM/CPM01_TURBOP/turbo.com delete mode 100644 software/CPM/CPM01_TURBOP/turbo.msg delete mode 100644 software/CPM/CPM01_TURBOP/turbo.ovr delete mode 100644 software/CPM/CPM01_TURBOP/turbomsg.ovr delete mode 100644 software/CPM/CPM02_HI_C/$exec.com delete mode 100644 software/CPM/CPM02_HI_C/assert.h delete mode 100644 software/CPM/CPM02_HI_C/c.com delete mode 100644 software/CPM/CPM02_HI_C/cgen.com delete mode 100644 software/CPM/CPM02_HI_C/conio.h delete mode 100644 software/CPM/CPM02_HI_C/cpm.h delete mode 100644 software/CPM/CPM02_HI_C/cpp.com delete mode 100644 software/CPM/CPM02_HI_C/cref.com delete mode 100644 software/CPM/CPM02_HI_C/crtcpm.obj delete mode 100644 software/CPM/CPM02_HI_C/ctype.h delete mode 100644 software/CPM/CPM02_HI_C/debug.com delete mode 100644 software/CPM/CPM02_HI_C/dehuff.com delete mode 100644 software/CPM/CPM02_HI_C/exec.h delete mode 100644 software/CPM/CPM02_HI_C/float.h delete mode 100644 software/CPM/CPM02_HI_C/hitech.h delete mode 100644 software/CPM/CPM02_HI_C/libc.lib delete mode 100644 software/CPM/CPM02_HI_C/libf.lib delete mode 100644 software/CPM/CPM02_HI_C/libr.com delete mode 100644 software/CPM/CPM02_HI_C/limits.h delete mode 100644 software/CPM/CPM02_HI_C/link.com delete mode 100644 software/CPM/CPM02_HI_C/math.h delete mode 100644 software/CPM/CPM02_HI_C/objtohex.com delete mode 100644 software/CPM/CPM02_HI_C/optim.com delete mode 100644 software/CPM/CPM02_HI_C/p1.com delete mode 100644 software/CPM/CPM02_HI_C/readme.txt delete mode 100644 software/CPM/CPM02_HI_C/rrtcpm.obj delete mode 100644 software/CPM/CPM02_HI_C/setjmp.h delete mode 100644 software/CPM/CPM02_HI_C/signal.h delete mode 100644 software/CPM/CPM02_HI_C/stat.h delete mode 100644 software/CPM/CPM02_HI_C/stdarg.h delete mode 100644 software/CPM/CPM02_HI_C/stddef.h delete mode 100644 software/CPM/CPM02_HI_C/stdio.h delete mode 100644 software/CPM/CPM02_HI_C/stdlib.h delete mode 100644 software/CPM/CPM02_HI_C/string.h delete mode 100644 software/CPM/CPM02_HI_C/sys.h delete mode 100644 software/CPM/CPM02_HI_C/time.h delete mode 100644 software/CPM/CPM02_HI_C/unixio.h delete mode 100644 software/CPM/CPM02_HI_C/zas.com delete mode 100644 software/CPM/CPM03_FORTRAN80/cpmio.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/crcklist.crc delete mode 100644 software/CPM/CPM03_FORTRAN80/cref80.com delete mode 100644 software/CPM/CPM03_FORTRAN80/dskdrv.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/dtbf.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/f80.com delete mode 100644 software/CPM/CPM03_FORTRAN80/fchain.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/forlib.rel delete mode 100644 software/CPM/CPM03_FORTRAN80/init.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/ioinit.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/l80.com delete mode 100644 software/CPM/CPM03_FORTRAN80/lib.com delete mode 100644 software/CPM/CPM03_FORTRAN80/lptdrv.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/luntb.mac delete mode 100644 software/CPM/CPM03_FORTRAN80/m80.com delete mode 100644 software/CPM/CPM03_FORTRAN80/readme.txt delete mode 100644 software/CPM/CPM03_FORTRAN80/ttydrv.mac delete mode 100644 software/CPM/CPM04_MBASIC/bascom.com delete mode 100644 software/CPM/CPM04_MBASIC/bascom.hlp delete mode 100644 software/CPM/CPM04_MBASIC/bascom2.hlp delete mode 100644 software/CPM/CPM04_MBASIC/baslib.rel delete mode 100644 software/CPM/CPM04_MBASIC/brun.com delete mode 100644 software/CPM/CPM04_MBASIC/cref.com delete mode 100644 software/CPM/CPM04_MBASIC/cref80.com delete mode 100644 software/CPM/CPM04_MBASIC/l80.com delete mode 100644 software/CPM/CPM04_MBASIC/lib80.com delete mode 100644 software/CPM/CPM04_MBASIC/m80.com delete mode 100644 software/CPM/CPM04_MBASIC/mbasic.com delete mode 100644 software/CPM/CPM04_MBASIC/obslib.rel delete mode 100644 software/CPM/CPM04_MBASIC/rantest.asc delete mode 100644 software/CPM/CPM04_MBASIC/rantest.bas delete mode 100644 software/CPM/CPM04_MBASIC/rantest.com delete mode 100644 software/CPM/CPM04_MBASIC/rantest.rel delete mode 100644 software/CPM/CPM04_MBASIC/readme.txt delete mode 100644 software/CPM/CPM04_MBASIC/sample.bas delete mode 100644 software/CPM/CPM04_MBASIC/sample.com delete mode 100644 software/CPM/CPM04_MBASIC/sample.rel delete mode 100644 software/CPM/CPM05_COBOL80_v13/CB80.COM delete mode 100644 software/CPM/CPM05_COBOL80_v13/CB80.IRL delete mode 100644 software/CPM/CPM05_COBOL80_v13/CB80.OV1 delete mode 100644 software/CPM/CPM05_COBOL80_v13/CB80.OV2 delete mode 100644 software/CPM/CPM05_COBOL80_v13/CB80.OV3 delete mode 100644 software/CPM/CPM05_COBOL80_v13/LK80.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/CB80.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/CB80.IRL delete mode 100644 software/CPM/CPM06_COBOL80_v20/CB80.OV1 delete mode 100644 software/CPM/CPM06_COBOL80_v20/CB80.OV2 delete mode 100644 software/CPM/CPM06_COBOL80_v20/CB80.OV3 delete mode 100644 software/CPM/CPM06_COBOL80_v20/CBASE2.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/CIRCOM.BAS delete mode 100644 software/CPM/CPM06_COBOL80_v20/CRUN2.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/DEMOGRAF.BAS delete mode 100644 software/CPM/CPM06_COBOL80_v20/GRAPHCOM.BAS delete mode 100644 software/CPM/CPM06_COBOL80_v20/GRAPHR.BAS delete mode 100644 software/CPM/CPM06_COBOL80_v20/GSXPREP.BAS delete mode 100644 software/CPM/CPM06_COBOL80_v20/LIB.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/LINK.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/LK80.COM delete mode 100644 software/CPM/CPM06_COBOL80_v20/READ.ME delete mode 100644 software/CPM/CPM06_COBOL80_v20/TSTCIR.BAS delete mode 100644 software/CPM/CPM07_COBOL80/CALL.ASM delete mode 100644 software/CPM/CPM07_COBOL80/CALL.CBL delete mode 100644 software/CPM/CPM07_COBOL80/CALL.INT delete mode 100644 software/CPM/CPM07_COBOL80/CALL.PRL delete mode 100644 software/CPM/CPM07_COBOL80/CLI delete mode 100644 software/CPM/CPM07_COBOL80/CLI.CBL delete mode 100644 software/CPM/CPM07_COBOL80/CLI.COM delete mode 100644 software/CPM/CPM07_COBOL80/COBOL delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.COM delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.ERR delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.I51 delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.I52 delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.I53 delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.I56 delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.I59 delete mode 100644 software/CPM/CPM07_COBOL80/COBOL.ISR delete mode 100644 software/CPM/CPM07_COBOL80/CONFIG delete mode 100644 software/CPM/CPM07_COBOL80/IXSIO.INT delete mode 100644 software/CPM/CPM07_COBOL80/PI.CBL delete mode 100644 software/CPM/CPM07_COBOL80/RUN.COM delete mode 100644 software/CPM/CPM07_COBOL80/STOCK1.CBL delete mode 100644 software/CPM/CPM07_COBOL80/STOCK2.CBL delete mode 100644 software/CPM/CPM07_COBOL80/TESTCALL.CBL delete mode 100644 software/CPM/CPM07_COBOL80/TESTCALL.INT delete mode 100644 software/CPM/CPM08_Z80FORTH/%DISC.DOC delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.280 delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.COM delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.HEX delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.MAC delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.OCM delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.OZ8 delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.UPD delete mode 100644 software/CPM/CPM08_Z80FORTH/280FORTH.Z80 delete mode 100644 software/CPM/CPM08_Z80FORTH/CONPRTIO.280 delete mode 100644 software/CPM/CPM08_Z80FORTH/CONPRTIO.Z80 delete mode 100644 software/CPM/CPM08_Z80FORTH/DISCIO.280 delete mode 100644 software/CPM/CPM08_Z80FORTH/DISCIO.Z80 delete mode 100644 software/CPM/CPM08_Z80FORTH/EDITOR.DOC delete mode 100644 software/CPM/CPM08_Z80FORTH/PIP.COM delete mode 100644 software/CPM/CPM08_Z80FORTH/SCREENS.FRT delete mode 100644 software/CPM/CPM08_Z80FORTH/SETGETCL.280 delete mode 100644 software/CPM/CPM08_Z80FORTH/STARTUP.FRT delete mode 100644 software/CPM/CPM08_Z80FORTH/STAT.COM delete mode 100644 software/CPM/CPM08_Z80FORTH/XDIR.COM delete mode 100644 software/CPM/CPM08_Z80FORTH/Z280.MAC delete mode 100644 software/CPM/CPM09_CPMTEX/TEX.COM delete mode 100644 software/CPM/CPM09_CPMTEX/TEXP.COM delete mode 100644 software/CPM/CPM09_CPMTEX/TEXPAT1.ASM delete mode 100644 software/CPM/CPM09_CPMTEX/TEXPAT1.HEX delete mode 100644 software/CPM/CPM09_CPMTEX/TEXPAT1.PRN delete mode 100644 software/CPM/CPM09_CPMTEX/TEXPAT2.ASM delete mode 100644 software/CPM/CPM09_CPMTEX/TEXPAT2.HEX delete mode 100644 software/CPM/CPM09_CPMTEX/TEXPAT2.PRN delete mode 100644 software/CPM/CPM10_DISKUTILFUNC5/DUF05.ASM delete mode 100644 software/CPM/CPM10_DISKUTILFUNC5/DUF05.COM delete mode 100644 software/CPM/CPM10_DISKUTILFUNC5/DUF05.PDF delete mode 100644 software/CPM/CPM11_MAC80/BUTTONS.LIB delete mode 100644 software/CPM/CPM11_MAC80/COMPARE.LIB delete mode 100644 software/CPM/CPM11_MAC80/DISK.DOC delete mode 100644 software/CPM/CPM11_MAC80/DOWHILE.LIB delete mode 100644 software/CPM/CPM11_MAC80/DSTACK.LIB delete mode 100644 software/CPM/CPM11_MAC80/I8085.LIB delete mode 100644 software/CPM/CPM11_MAC80/INTER.LIB delete mode 100644 software/CPM/CPM11_MAC80/MAC.COM delete mode 100644 software/CPM/CPM11_MAC80/NCOMPARE.LIB delete mode 100644 software/CPM/CPM11_MAC80/NSWP.COM delete mode 100644 software/CPM/CPM11_MAC80/PIP.COM delete mode 100644 software/CPM/CPM11_MAC80/READ.ME delete mode 100644 software/CPM/CPM11_MAC80/SAMPLE.ASM delete mode 100644 software/CPM/CPM11_MAC80/SELECT.LIB delete mode 100644 software/CPM/CPM11_MAC80/SEQIO.LIB delete mode 100644 software/CPM/CPM11_MAC80/SIMPIO.LIB delete mode 100644 software/CPM/CPM11_MAC80/STACK.LIB delete mode 100644 software/CPM/CPM11_MAC80/TREADLES.LIB delete mode 100644 software/CPM/CPM11_MAC80/WHEN.LIB delete mode 100644 software/CPM/CPM11_MAC80/Z80.DOC delete mode 100644 software/CPM/CPM11_MAC80/Z80.LIB delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/AMD9511X.CMD delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/AMDIO.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/APUSUB.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/ATWNB.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/BCDREALS.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/CALC.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/CHN.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/CPMRD.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/CWT.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/DBUGHELP.TXT delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/DEBUGGER.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/DIS8080.COM delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/DIV.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/FIBDEF.LIB delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/FPREALS.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/FPRTNS.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/FULLHEAP.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/GET.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/HLT.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/INDEXER.DOC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/INDEXER.PAS delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/IOCHK.BLD delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/IOERR.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/LIBMT.COM delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/LINKMT.COM delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MOD1.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MOD2.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTERRS.TXT delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.000 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.001 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.002 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.003 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.004 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.005 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.006 delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/MTPLUS.COM delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/OVLMGR.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/PASLIB.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/PINI.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/PROG.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/PUT.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/RANDOMIO.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/READ.ME delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/RNB.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/RNC.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/ROVLMGR.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/RST.MAC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/SPPFIX.COM delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/STRIP.CMD delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/STRIP.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/TRAN9511.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/TRAN9511.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/TRANCEND.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/UTILMOD.ERL delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/UTILMOD.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/WNC.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/XBDOS.SRC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/XREF.COM delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/XREF.DOC delete mode 100644 software/CPM/CPM12_PASCALMTP_v561/XREF.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/ARCTAN.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/ARCTAN.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/CMPXLIB.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/CMPXLIB.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/CMPXTEST.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/CMPXTEST.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/CMPXTEST.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/CP#M-DEC.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/CPMTODEC.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/DECTOCPM.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/EXP.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/EXP.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/F.PAS delete mode 100644 software/CPM/CPM13_MTPUG_01/FILSIZ.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/FILSIZ.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/GNB.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/GNB.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/GNBCHK.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/GNBCHK.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/GNBCHK.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/GRAPH.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/GRAPH.PAS delete mode 100644 software/CPM/CPM13_MTPUG_01/LIST.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/LISTDEC.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/LN.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/LN.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/MATHLIB.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/MATHLIB.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/MATHTEST.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/MATHTEST.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/MATHTEST.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/MODEM.LIB delete mode 100644 software/CPM/CPM13_MTPUG_01/MODEM.PAS delete mode 100644 software/CPM/CPM13_MTPUG_01/MTPUG01.BAK delete mode 100644 software/CPM/CPM13_MTPUG_01/MTPUG01.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/NSBH19.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/NSBH19.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/PAGE.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/PAGE.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/PAGE.PAS delete mode 100644 software/CPM/CPM13_MTPUG_01/PLOT.BAK delete mode 100644 software/CPM/CPM13_MTPUG_01/PLOT.MOD delete mode 100644 software/CPM/CPM13_MTPUG_01/RANDOM.REL delete mode 100644 software/CPM/CPM13_MTPUG_01/RANDOM.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/RNB.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/RNB.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/SBGETCH.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/SD.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/SEND.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/SHIFT.COM delete mode 100644 software/CPM/CPM13_MTPUG_01/SHIFT.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/SINCOS.ERL delete mode 100644 software/CPM/CPM13_MTPUG_01/SINCOS.SRC delete mode 100644 software/CPM/CPM13_MTPUG_01/TRANCEND.DOC delete mode 100644 software/CPM/CPM13_MTPUG_01/TRANCEND.TWL delete mode 100644 software/CPM/CPM14_MTPUG_02/CALCULAT.CMD delete mode 100644 software/CPM/CPM14_MTPUG_02/CALCULAT.COM delete mode 100644 software/CPM/CPM14_MTPUG_02/CALCULAT.DOC delete mode 100644 software/CPM/CPM14_MTPUG_02/CALCULAT.ERL delete mode 100644 software/CPM/CPM14_MTPUG_02/CALCULAT.PAS delete mode 100644 software/CPM/CPM14_MTPUG_02/CP#M-DEC.DOC delete mode 100644 software/CPM/CPM14_MTPUG_02/CPMTODEC.ASM delete mode 100644 software/CPM/CPM14_MTPUG_02/DECTOCPM.ASM delete mode 100644 software/CPM/CPM14_MTPUG_02/HEATH.DOC delete mode 100644 software/CPM/CPM14_MTPUG_02/HEATH.ERL delete mode 100644 software/CPM/CPM14_MTPUG_02/HEATH.PAS delete mode 100644 software/CPM/CPM14_MTPUG_02/LISTDEC.ASM delete mode 100644 software/CPM/CPM14_MTPUG_02/MTPUG.002 delete mode 100644 software/CPM/CPM14_MTPUG_02/MTPUG.BAK delete mode 100644 software/CPM/CPM14_MTPUG_02/SEND.COM delete mode 100644 software/CPM/CPM14_MTPUG_02/SPEAKER.DOC delete mode 100644 software/CPM/CPM14_MTPUG_02/SPEAKER.ERL delete mode 100644 software/CPM/CPM14_MTPUG_02/SPEAKER.PAS delete mode 100644 software/CPM/CPM14_MTPUG_02/XREF.CMD delete mode 100644 software/CPM/CPM14_MTPUG_02/XREF.COM delete mode 100644 software/CPM/CPM14_MTPUG_02/XREF.DOC delete mode 100644 software/CPM/CPM14_MTPUG_02/XREF.ERL delete mode 100644 software/CPM/CPM14_MTPUG_02/XREF.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/-MTPUG.003 delete mode 100644 software/CPM/CPM15_MTPUG_03/ACOUSTIC.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/CALCAL.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/CIRCQUE.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/CMPXLIB.DOC delete mode 100644 software/CPM/CPM15_MTPUG_03/CMPXLIB.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/CRT.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBE.COM delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBE.ERL delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBE.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBESOLV.COM delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBESOLV.ERL delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBESOLV.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/CUBEUTIL.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/DCMODEM.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/DIRFILE.ERL delete mode 100644 software/CPM/CPM15_MTPUG_03/DIRFILE.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/EPSON.DOC delete mode 100644 software/CPM/CPM15_MTPUG_03/EPSON.ERL delete mode 100644 software/CPM/CPM15_MTPUG_03/EPSON.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/EPSON2.ERL delete mode 100644 software/CPM/CPM15_MTPUG_03/EPSON2.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/FNC9511.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/MATHLIBS.DOC delete mode 100644 software/CPM/CPM15_MTPUG_03/MTPUG.003 delete mode 100644 software/CPM/CPM15_MTPUG_03/MTPUG.BAK delete mode 100644 software/CPM/CPM15_MTPUG_03/NSB.DOC delete mode 100644 software/CPM/CPM15_MTPUG_03/NSB.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/NSBCUR19.DOC delete mode 100644 software/CPM/CPM15_MTPUG_03/NSBCUR19.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/POWRLIB.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/RINGING.CMD delete mode 100644 software/CPM/CPM15_MTPUG_03/RINGING.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/SEND.COM delete mode 100644 software/CPM/CPM15_MTPUG_03/STATLIB.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/TERMINAL.CMD delete mode 100644 software/CPM/CPM15_MTPUG_03/TERMINAL.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/TRIGLIB.SRC delete mode 100644 software/CPM/CPM15_MTPUG_03/UTILITY.PAS delete mode 100644 software/CPM/CPM15_MTPUG_03/VARIO.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/-MTPUG.004 delete mode 100644 software/CPM/CPM16_MTPUG_04/-MTPUG.DOC delete mode 100644 software/CPM/CPM16_MTPUG_04/COMPARE.COM delete mode 100644 software/CPM/CPM16_MTPUG_04/COMPARE.ERL delete mode 100644 software/CPM/CPM16_MTPUG_04/COMPARE.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/CPMNAME.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/DIRFILE.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/DIRFILE.SUB delete mode 100644 software/CPM/CPM16_MTPUG_04/HEXDMP.COM delete mode 100644 software/CPM/CPM16_MTPUG_04/HEXDMP.DOC delete mode 100644 software/CPM/CPM16_MTPUG_04/HEXDMP.ERL delete mode 100644 software/CPM/CPM16_MTPUG_04/HEXDMP.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/HL.CMD delete mode 100644 software/CPM/CPM16_MTPUG_04/HL.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/HL1.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/HL2.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/HL3.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/INDEXER.DOC delete mode 100644 software/CPM/CPM16_MTPUG_04/INDEXER.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/INDEXER.SUB delete mode 100644 software/CPM/CPM16_MTPUG_04/LONGLINE.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/NADY.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/P1.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/P2.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/P3.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/P4.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/P6.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/P7.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/P8.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/PLOTLIB.BLD delete mode 100644 software/CPM/CPM16_MTPUG_04/PLOTLIB.CON delete mode 100644 software/CPM/CPM16_MTPUG_04/PLOTLIB.DEF delete mode 100644 software/CPM/CPM16_MTPUG_04/PLOTLIB.DOC delete mode 100644 software/CPM/CPM16_MTPUG_04/PLOTLIB.TYP delete mode 100644 software/CPM/CPM16_MTPUG_04/PTABLE.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/PTEST.CMD delete mode 100644 software/CPM/CPM16_MTPUG_04/PTEST.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/PTEST1.CMD delete mode 100644 software/CPM/CPM16_MTPUG_04/PTEST1.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/PTRS2.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/QQSORT.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/QSORT.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/SD.COM delete mode 100644 software/CPM/CPM16_MTPUG_04/SEND.COM delete mode 100644 software/CPM/CPM16_MTPUG_04/SHELL.PAS delete mode 100644 software/CPM/CPM16_MTPUG_04/SWEEP.COM delete mode 100644 software/CPM/CPM16_MTPUG_04/XREF.COM delete mode 100644 software/CPM/CPM16_MTPUG_04/XREF.DOC delete mode 100644 software/CPM/CPM16_MTPUG_04/XREF.ERL delete mode 100644 software/CPM/CPM16_MTPUG_04/XREF.SRC delete mode 100644 software/CPM/CPM16_MTPUG_04/XREF.SUB delete mode 100644 software/CPM/CPM16_MTPUG_04/ZCOMPR.PAS delete mode 100644 software/CPM/CPM17_MTPUG_05/-MTPUG.005 delete mode 100644 software/CPM/CPM17_MTPUG_05/-MTPUG.DOC delete mode 100644 software/CPM/CPM17_MTPUG_05/CEOL.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CEOL.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/CEOP.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CEOP.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/CLS.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CLS.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/CPMNAME.SRC delete mode 100644 software/CPM/CPM17_MTPUG_05/CPOS.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CPOS.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/CTOP.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CTOP.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/CUOFF.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CUOFF.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/CUON.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/CUON.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/DATE.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/DATE.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/DAY.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/DAY.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/DC.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/DC.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/DL.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/DL.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/EBL.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/EBL.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/ERASEL.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/ERASEL.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/EXTERNAL.DOC delete mode 100644 software/CPM/CPM17_MTPUG_05/G2TEXT.ERL delete mode 100644 software/CPM/CPM17_MTPUG_05/G2TEXT.SRC delete mode 100644 software/CPM/CPM17_MTPUG_05/HOME.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/HOME.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/IC.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/IC.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/IL.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/IL.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/KBOFF.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/KBOFF.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/KBON.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/KBON.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/LOEWNER.DOC delete mode 100644 software/CPM/CPM17_MTPUG_05/OFF25.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/OFF25.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/ON25.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/ON25.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/PROCREF.COM delete mode 100644 software/CPM/CPM17_MTPUG_05/PROCREF.ERL delete mode 100644 software/CPM/CPM17_MTPUG_05/PROCREF.SRC delete mode 100644 software/CPM/CPM17_MTPUG_05/RESTC.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/RESTC.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/REVOFF.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/REVOFF.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/REVON.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/REVON.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/SAVEC.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/SAVEC.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/TIME.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/TIME.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/XIC.ASM delete mode 100644 software/CPM/CPM17_MTPUG_05/XIC.REL delete mode 100644 software/CPM/CPM17_MTPUG_05/Z19LIB.ERL delete mode 100644 software/CPM/CPM18_MTPUG_06/-MTPUG.006 delete mode 100644 software/CPM/CPM18_MTPUG_06/-MTPUG.DOC delete mode 100644 software/CPM/CPM18_MTPUG_06/BESY.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/CFIT1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/CFIT1A.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/CFIT2.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/CFIT4.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/CURSOR.ERL delete mode 100644 software/CPM/CPM18_MTPUG_06/CURSOR.MAC delete mode 100644 software/CPM/CPM18_MTPUG_06/CURSOR2.ERL delete mode 100644 software/CPM/CPM18_MTPUG_06/CURSOR2.SRC delete mode 100644 software/CPM/CPM18_MTPUG_06/DETERM.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/DIFFUS.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/ERF4.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/ERFD.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/ERFD3.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/ERFSIMP.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/FITPOL.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/GAUSID.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/GAUSS.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/GAUSSJ.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/GD-LINF1.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/GD-LINF2.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/JULIAN.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/LEAST1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/LEAST2.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/LEAST3.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/LEAST6.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/LINFIT1.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/LINFIT2.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/MATR1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/MEANS.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/NEWDR.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/NEWDR2.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/NEWTON-L.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/NEWTON.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/NLIN3.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/PLOT.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/RANDG.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/RANDOM.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/RANDOM.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/ROMB1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/ROMB3.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SIMP1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SIMPS.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/SIMQ1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SOLVEC.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SOLVGJ.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SOLVGJ2.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SOLVGV.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/SORT-B.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/SORT-Q-N.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/SORT-Q-R.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/SORT-S.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/SQUARE.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/TERMINAL.BLD delete mode 100644 software/CPM/CPM18_MTPUG_06/TERMINAL.ERL delete mode 100644 software/CPM/CPM18_MTPUG_06/TERMINAL.IF delete mode 100644 software/CPM/CPM18_MTPUG_06/TRAP1.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/TRAP2.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/TRAPEZ.LIB delete mode 100644 software/CPM/CPM18_MTPUG_06/TSTBES.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/TSTGAM.PAS delete mode 100644 software/CPM/CPM18_MTPUG_06/TSTSORT.PAS delete mode 100644 software/CPM/CPM19_MTPUG_07/-MTPUG.007 delete mode 100644 software/CPM/CPM19_MTPUG_07/-MTPUG.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/3740UTIL.COM delete mode 100644 software/CPM/CPM19_MTPUG_07/3740UTIL.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/ALOCK.Z80 delete mode 100644 software/CPM/CPM19_MTPUG_07/AUNLCK.Z80 delete mode 100644 software/CPM/CPM19_MTPUG_07/BCD.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/BCD.ERL delete mode 100644 software/CPM/CPM19_MTPUG_07/DISKIO.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/DISKIO.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/FOTOSATS.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/FOTOSATS.PRM delete mode 100644 software/CPM/CPM19_MTPUG_07/FOTOSATS.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/GRAPH.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/GRAPHADM.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/GRHP.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/LOCK.PAS delete mode 100644 software/CPM/CPM19_MTPUG_07/MYLIB.ERL delete mode 100644 software/CPM/CPM19_MTPUG_07/PRETTY.COM delete mode 100644 software/CPM/CPM19_MTPUG_07/PRETTY.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/PRETTY.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/PRMAC.COM delete mode 100644 software/CPM/CPM19_MTPUG_07/PRMAC.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/PRMAC.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/SETDMA.Z80 delete mode 100644 software/CPM/CPM19_MTPUG_07/SHARE.PAS delete mode 100644 software/CPM/CPM19_MTPUG_07/SHAREFIL.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/SHAREFIL.TST delete mode 100644 software/CPM/CPM19_MTPUG_07/SHARELIB.ERL delete mode 100644 software/CPM/CPM19_MTPUG_07/TYPESET.DOC delete mode 100644 software/CPM/CPM19_MTPUG_07/TYPESET.PRM delete mode 100644 software/CPM/CPM19_MTPUG_07/TYPESET.SRC delete mode 100644 software/CPM/CPM19_MTPUG_07/UNLOCK.PAS delete mode 100644 software/CPM/CPM19_MTPUG_07/UOPEN.Z80 delete mode 100644 software/CPM/CPM19_MTPUG_07/USET.PAS delete mode 100644 software/CPM/CPM20_MTPUG_08/-MTPUG.008 delete mode 100644 software/CPM/CPM20_MTPUG_08/-MTPUG.DOC delete mode 100644 software/CPM/CPM20_MTPUG_08/CHROFF.DAT delete mode 100644 software/CPM/CPM20_MTPUG_08/CHRVEC.DAT delete mode 100644 software/CPM/CPM20_MTPUG_08/DMP.SRC delete mode 100644 software/CPM/CPM20_MTPUG_08/ELEVATOR.CMD delete mode 100644 software/CPM/CPM20_MTPUG_08/ELEVATOR.DAT delete mode 100644 software/CPM/CPM20_MTPUG_08/ELEVATOR.PAS delete mode 100644 software/CPM/CPM20_MTPUG_08/MPMTEST.SRC delete mode 100644 software/CPM/CPM20_MTPUG_08/MPMTESTQ.SRC delete mode 100644 software/CPM/CPM20_MTPUG_08/MPMTTIME.SRC delete mode 100644 software/CPM/CPM20_MTPUG_08/MPMUTIL.DOC delete mode 100644 software/CPM/CPM20_MTPUG_08/MPMUTIL.I86 delete mode 100644 software/CPM/CPM20_MTPUG_08/MPMUTIL.R86 delete mode 100644 software/CPM/CPM20_MTPUG_08/PASMAT.CMD delete mode 100644 software/CPM/CPM20_MTPUG_08/PASMAT.COM delete mode 100644 software/CPM/CPM20_MTPUG_08/PASMAT.DOC delete mode 100644 software/CPM/CPM20_MTPUG_08/PMTEST.TST delete mode 100644 software/CPM/CPM20_MTPUG_08/PMXREF.TST delete mode 100644 software/CPM/CPM20_MTPUG_08/SERIO.SRC delete mode 100644 software/CPM/CPM20_MTPUG_08/TESTGR.SRC delete mode 100644 software/CPM/CPM20_MTPUG_08/WRDATA.SRC delete mode 100644 software/CPM/CPM21_MTPUG_09/-MTPUG.DOC delete mode 100644 software/CPM/CPM21_MTPUG_09/BLOCKR.SRC delete mode 100644 software/CPM/CPM21_MTPUG_09/CONSTTAB.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/FIBDEF.LIB delete mode 100644 software/CPM/CPM21_MTPUG_09/FILES.CMD delete mode 100644 software/CPM/CPM21_MTPUG_09/INPUTFAS.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/INPUTSTD.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/MARKREL.SRC delete mode 100644 software/CPM/CPM21_MTPUG_09/MSA326.DOC delete mode 100644 software/CPM/CPM21_MTPUG_09/MSA326A.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/MSA326B.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/MSA326C.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/MSA326D.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/PASERROR.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/PLANE.SRC delete mode 100644 software/CPM/CPM21_MTPUG_09/ROUTTAB.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/SCANNER.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/SWEEP.COM delete mode 100644 software/CPM/CPM21_MTPUG_09/SYNONYM.COM delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPE1TAB.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPE2TAB.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPE3TAB.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPECHK.BLD delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPECHK.CMD delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPECHK.COM delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPECHK.DEC delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPECHK.PAS delete mode 100644 software/CPM/CPM21_MTPUG_09/TYPECHK.SUB delete mode 100644 software/CPM/CPM21_MTPUG_09/VARTAB.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/-MTPUG.010 delete mode 100644 software/CPM/CPM22_MTPUG_10/-MTPUG.DOC delete mode 100644 software/CPM/CPM22_MTPUG_10/CPMNAME.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/CPMNAME.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/FACT2K.DOC delete mode 100644 software/CPM/CPM22_MTPUG_10/FACT2K.IN delete mode 100644 software/CPM/CPM22_MTPUG_10/FACT2K.OUT delete mode 100644 software/CPM/CPM22_MTPUG_10/FACT2K.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/FFT.DOC delete mode 100644 software/CPM/CPM22_MTPUG_10/FFTKF.DOC delete mode 100644 software/CPM/CPM22_MTPUG_10/FFTKF.IN delete mode 100644 software/CPM/CPM22_MTPUG_10/FFTKF.OUT delete mode 100644 software/CPM/CPM22_MTPUG_10/FFTKF.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/FFTLIB.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/LAB.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/PASFFT1.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PASFFT2.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PASFFT3.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PASFFT4.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PASMAT.CMD delete mode 100644 software/CPM/CPM22_MTPUG_10/PASMAT.KMD delete mode 100644 software/CPM/CPM22_MTPUG_10/PASMAT.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/PASMAT.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PASMAT.SU delete mode 100644 software/CPM/CPM22_MTPUG_10/PASMAT.SUB delete mode 100644 software/CPM/CPM22_MTPUG_10/PMCOMENT.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/PMCOMENT.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PMDEFS.IN delete mode 100644 software/CPM/CPM22_MTPUG_10/PMDEFS.INC delete mode 100644 software/CPM/CPM22_MTPUG_10/PMFILEIO.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/PMFILEIO.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PMINIT.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/PMINIT.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/PMPARSE.PAS delete mode 100644 software/CPM/CPM22_MTPUG_10/PMPARSE.SRC delete mode 100644 software/CPM/CPM22_MTPUG_10/RNB.SRC delete mode 100644 software/CPM/CPM23_PLI/ACK.PLI delete mode 100644 software/CPM/CPM23_PLI/ACKTST.PLI delete mode 100644 software/CPM/CPM23_PLI/ALLTST.PLI delete mode 100644 software/CPM/CPM23_PLI/CALL.PLI delete mode 100644 software/CPM/CPM23_PLI/CHESS.PLI delete mode 100644 software/CPM/CPM23_PLI/COPY.PLI delete mode 100644 software/CPM/CPM23_PLI/COPYLPT.PLI delete mode 100644 software/CPM/CPM23_PLI/CREATE.PLI delete mode 100644 software/CPM/CPM23_PLI/DFACT.PLI delete mode 100644 software/CPM/CPM23_PLI/DIOCALLS.PLI delete mode 100644 software/CPM/CPM23_PLI/DIOCOPY.PLI delete mode 100644 software/CPM/CPM23_PLI/DIOMOD.DCL delete mode 100644 software/CPM/CPM23_PLI/DIORAND.PLI delete mode 100644 software/CPM/CPM23_PLI/DIV2.ASM delete mode 100644 software/CPM/CPM23_PLI/DPOLY.PLI delete mode 100644 software/CPM/CPM23_PLI/DTEST.PLI delete mode 100644 software/CPM/CPM23_PLI/DUMP.PLI delete mode 100644 software/CPM/CPM23_PLI/DUMP2.PLI delete mode 100644 software/CPM/CPM23_PLI/ENTER.PLI delete mode 100644 software/CPM/CPM23_PLI/EPOLY.PLI delete mode 100644 software/CPM/CPM23_PLI/EXPR1.PLI delete mode 100644 software/CPM/CPM23_PLI/EXPR2.PLI delete mode 100644 software/CPM/CPM23_PLI/FACT.PLI delete mode 100644 software/CPM/CPM23_PLI/FCB.DCL delete mode 100644 software/CPM/CPM23_PLI/FDIV2.ASM delete mode 100644 software/CPM/CPM23_PLI/FDTEST.PLI delete mode 100644 software/CPM/CPM23_PLI/FFACT.PLI delete mode 100644 software/CPM/CPM23_PLI/FIB.PLI delete mode 100644 software/CPM/CPM23_PLI/FSCAN.PLI delete mode 100644 software/CPM/CPM23_PLI/GOTO.PLI delete mode 100644 software/CPM/CPM23_PLI/GRADE.PLI delete mode 100644 software/CPM/CPM23_PLI/IFACT.PLI delete mode 100644 software/CPM/CPM23_PLI/INVERT1.PLI delete mode 100644 software/CPM/CPM23_PLI/INVERT2.PLI delete mode 100644 software/CPM/CPM23_PLI/KEYFILE.PLI delete mode 100644 software/CPM/CPM23_PLI/LIB.COM delete mode 100644 software/CPM/CPM23_PLI/LINK.COM delete mode 100644 software/CPM/CPM23_PLI/MACASM.PLI delete mode 100644 software/CPM/CPM23_PLI/MATSIZ.LIB delete mode 100644 software/CPM/CPM23_PLI/MATSIZE.LIB delete mode 100644 software/CPM/CPM23_PLI/NET.PLI delete mode 100644 software/CPM/CPM23_PLI/NETASM.PLI delete mode 100644 software/CPM/CPM23_PLI/OPTIMIST.COM delete mode 100644 software/CPM/CPM23_PLI/OPTIMIST.PLI delete mode 100644 software/CPM/CPM23_PLI/PLANT1.EMP delete mode 100644 software/CPM/CPM23_PLI/PLANT2.EMP delete mode 100644 software/CPM/CPM23_PLI/PLI.COM delete mode 100644 software/CPM/CPM23_PLI/PLI0.OVL delete mode 100644 software/CPM/CPM23_PLI/PLI1.OVL delete mode 100644 software/CPM/CPM23_PLI/PLI2.OVL delete mode 100644 software/CPM/CPM23_PLI/PLIDIO.ASM delete mode 100644 software/CPM/CPM23_PLI/PLILIB.IRL delete mode 100644 software/CPM/CPM23_PLI/POLY.PLI delete mode 100644 software/CPM/CPM23_PLI/RANDOM.PLI delete mode 100644 software/CPM/CPM23_PLI/READ.ME delete mode 100644 software/CPM/CPM23_PLI/RECORD.DCL delete mode 100644 software/CPM/CPM23_PLI/REPORT.PLI delete mode 100644 software/CPM/CPM23_PLI/RETRIEVE.PLI delete mode 100644 software/CPM/CPM23_PLI/REV.PLI delete mode 100644 software/CPM/CPM23_PLI/REVERT.PLI delete mode 100644 software/CPM/CPM23_PLI/RMAC.COM delete mode 100644 software/CPM/CPM23_PLI/SELECT.PLI delete mode 100644 software/CPM/CPM23_PLI/TEST.PLI delete mode 100644 software/CPM/CPM23_PLI/TITLE.PLI delete mode 100644 software/CPM/CPM23_PLI/UPDATE.PLI delete mode 100644 software/CPM/CPM23_PLI/WAGE.PLI delete mode 100644 software/CPM/CPM24_PLI80_v13/ACK.PLI delete mode 100644 software/CPM/CPM24_PLI80_v13/DFACT.PLI delete mode 100644 software/CPM/CPM24_PLI80_v13/LIB.COM delete mode 100644 software/CPM/CPM24_PLI80_v13/LINK.COM delete mode 100644 software/CPM/CPM24_PLI80_v13/OPTIMIST.PLI delete mode 100644 software/CPM/CPM24_PLI80_v13/PLI.COM delete mode 100644 software/CPM/CPM24_PLI80_v13/PLI0.OVL delete mode 100644 software/CPM/CPM24_PLI80_v13/PLI1.OVL delete mode 100644 software/CPM/CPM24_PLI80_v13/PLI2.OVL delete mode 100644 software/CPM/CPM24_PLI80_v13/PLILIB.IRL delete mode 100644 software/CPM/CPM24_PLI80_v13/RMAC.COM delete mode 100644 software/CPM/CPM24_PLI80_v13/XREF.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/A.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/ACK.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/ACKTST.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/ALLTST.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/ANNUITY.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/CALL.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/COPY.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/COPYLPT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/CPMDIO.ASM delete mode 100644 software/CPM/CPM25_PLI80_v14/CREATE.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DECPOLY.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DEMO.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DEPREC.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DFACT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DIO80.DCL delete mode 100644 software/CPM/CPM25_PLI80_v14/DIOCALLS.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DIOCOPY.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DIOMOD.DCL delete mode 100644 software/CPM/CPM25_PLI80_v14/DIORAND.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/DIV2.ASM delete mode 100644 software/CPM/CPM25_PLI80_v14/DTEST.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/ENTER.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/EXPR1.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/EXPR2.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/FCB.DCL delete mode 100644 software/CPM/CPM25_PLI80_v14/FDIV2.ASM delete mode 100644 software/CPM/CPM25_PLI80_v14/FDTEST.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/FFACT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/FLTPOLY.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/FLTPOLY2.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/FSCAN.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/IFACT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/INVERT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/KEYFILE.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/LABELS.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/LIB.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/LINK.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/LOAN1.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/LOAN2.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/MAININVT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/MATSIZE.LIB delete mode 100644 software/CPM/CPM25_PLI80_v14/MPMCALLA.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/MPMCALLB.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/MPMDIO.ASM delete mode 100644 software/CPM/CPM25_PLI80_v14/MPMDIO.DCL delete mode 100644 software/CPM/CPM25_PLI80_v14/NETWORK.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/OPTIMIST (2).PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/OPTIMIST.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/OPTIMIST.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/PLI.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/PLI0.OVL delete mode 100644 software/CPM/CPM25_PLI80_v14/PLI1.OVL delete mode 100644 software/CPM/CPM25_PLI80_v14/PLI2.OVL delete mode 100644 software/CPM/CPM25_PLI80_v14/PLILIB.IRL delete mode 100644 software/CPM/CPM25_PLI80_v14/RECORD.DCL delete mode 100644 software/CPM/CPM25_PLI80_v14/RELNOTES.PRN delete mode 100644 software/CPM/CPM25_PLI80_v14/REPORT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/RETRIEVE.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/REVERSE.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/REVERT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/RFACT.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/RMAC.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/SAMPLE.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/TEST.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/UPDATE.PLI delete mode 100644 software/CPM/CPM25_PLI80_v14/XREF.COM delete mode 100644 software/CPM/CPM25_PLI80_v14/Z80.LIB delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/cmdlin.pas delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/lister.pas delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc-mod00.inc delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc-mod01.inc delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc-mod02.inc delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc-mod03.inc delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc-mod04.inc delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc-mod05.inc delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc.hlp delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mc.pas delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/mcdemo.mcs delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/read.me delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/tinst.com delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/tinst.dta delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/tinst.msg delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/turbo.com delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/turbo.msg delete mode 100644 software/CPM/CPM26_TPASCAL_v300a/turbo.ovr delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/INSTALL.COM delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/MAILMRGE.OVR delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/MERGPRIN.OVR delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/READ.ME delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/WIMSGS.OVR delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/WS.COM delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/WSMSGS.OVR delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/WSOVLY1.OVR delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/WSU.COM delete mode 100644 software/CPM/CPM27_WORDSTAR_v30/ws3.hex delete mode 100644 software/CPM/CPM28_PLM80/ASM80.EXE delete mode 100644 software/CPM/CPM28_PLM80/PLM80.EXE delete mode 100644 software/CPM/CPM28_PLM80/README.TXT delete mode 100644 software/CPM/CPM29_ZSID_v14/READ.ME delete mode 100644 software/CPM/CPM29_ZSID_v14/ZSID-FIX.DOC delete mode 100644 software/CPM/CPM29_ZSID_v14/ZSID-PAT.COM delete mode 100644 software/CPM/CPM29_ZSID_v14/ZSID.COM delete mode 100644 software/CPM/CPM29_ZSID_v14/ZSID.PAT delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/ANAGRAM.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/CHAPTER1.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/CHAPTER2.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/CHAPTER3.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/DIARY.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/DICTSORT.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/FIND.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/HOMONYMS.TXT delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/HYEXCEPT.TXT delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/HYPHEN.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/LOOKUP.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/MAINDICT.CMP delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/MARKFIX.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/MOVEPRN.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/PATCH.LST delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/PRINT.TST delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/READ.ME delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/README delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/REVIEW.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/RULER.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/SAMPLE1.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/SAMPLE2.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/SAMPLE3.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/SPELL.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/TABLE.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/TEXT.DOC delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/TW.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WC.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WINSTALL.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WORDFREQ.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WS.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WS.OVR delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSCHANGE.COM delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSCHANGE.OVR delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSCHHELP.OVR delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSHELP.OVR delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSINDEX.XCL delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSMSGS.OVR delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSPRINT.OVR delete mode 100644 software/CPM/CPM30_WORDSTAR_v400/WSSHORT.OVR delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/CD.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/DEMO.TXT delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/MAILMRGE.OVR delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/PRINT.TST delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/Read.me delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/SAMPLE.TXT delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.DCT delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.OVR delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WINSTALL.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WS.INS delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WS330 patch points.txt delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSMSGS.OVR delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSOVLY1.OVR delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSU.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSbondwell.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSheath.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSkayproii.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WSosborne1.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/WStelevideo950.COM delete mode 100644 software/CPM/CPM31_WORDSTAR_v330/ws3.hex delete mode 100755 software/CPM/CPM32_ZCPR3/!(C)1988 delete mode 100755 software/CPM/CPM32_ZCPR3/!NZ-COM delete mode 100755 software/CPM/CPM32_ZCPR3/!VERS--1.2H delete mode 100755 software/CPM/CPM32_ZCPR3/ALIAS.CMD delete mode 100755 software/CPM/CPM32_ZCPR3/ARUNZ.COM delete mode 100755 software/CPM/CPM32_ZCPR3/BGZRDS19.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/CLEDINST.COM delete mode 100755 software/CPM/CPM32_ZCPR3/CLEDSAVE.COM delete mode 100755 software/CPM/CPM32_ZCPR3/CONFIG.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/COPY.COM delete mode 100755 software/CPM/CPM32_ZCPR3/CPSET.COM delete mode 100755 software/CPM/CPM32_ZCPR3/CRUNCH.COM delete mode 100755 software/CPM/CPM32_ZCPR3/DOCFILES.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/EDITNDR.COM delete mode 100755 software/CPM/CPM32_ZCPR3/FCP.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/FF.COM delete mode 100755 software/CPM/CPM32_ZCPR3/HELP.COM delete mode 100755 software/CPM/CPM32_ZCPR3/HLPFILES.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/IF.COM delete mode 100755 software/CPM/CPM32_ZCPR3/JETLDR.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LBREXT.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LBRHELP.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LDIR.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LPUT.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LSH-HELP.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LSH.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LSH.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/LSHINST.COM delete mode 100755 software/CPM/CPM32_ZCPR3/LX.COM delete mode 100755 software/CPM/CPM32_ZCPR3/MKZCM.COM delete mode 100755 software/CPM/CPM32_ZCPR3/NAME.COM delete mode 100755 software/CPM/CPM32_ZCPR3/NZ-DBASE.INF delete mode 100755 software/CPM/CPM32_ZCPR3/NZBLITZ.COM delete mode 100755 software/CPM/CPM32_ZCPR3/NZBLTZ14.CFG delete mode 100755 software/CPM/CPM32_ZCPR3/NZBLTZ14.HZP delete mode 100755 software/CPM/CPM32_ZCPR3/NZCOM.COM delete mode 100755 software/CPM/CPM32_ZCPR3/NZCOM.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/NZCPR.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/PATH.COM delete mode 100755 software/CPM/CPM32_ZCPR3/PUBLIC.COM delete mode 100755 software/CPM/CPM32_ZCPR3/PWD.COM delete mode 100755 software/CPM/CPM32_ZCPR3/RCP.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/RELEASE.NOT delete mode 100755 software/CPM/CPM32_ZCPR3/SAINST.COM delete mode 100755 software/CPM/CPM32_ZCPR3/SALIAS.COM delete mode 100755 software/CPM/CPM32_ZCPR3/SAVENDR.COM delete mode 100755 software/CPM/CPM32_ZCPR3/SDZ.COM delete mode 100755 software/CPM/CPM32_ZCPR3/SHOW.COM delete mode 100755 software/CPM/CPM32_ZCPR3/SUB.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TCAP.LBR delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ.INF delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ25.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ26.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ27.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ28.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ29.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ30.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ31UPD.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ32.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCJ33UPD.WZ delete mode 100755 software/CPM/CPM32_ZCPR3/TCSELECT.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TY3ERA.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TY3REN.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TY4ERA.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TY4REN.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TY4SAVE.COM delete mode 100755 software/CPM/CPM32_ZCPR3/TY4SP.COM delete mode 100755 software/CPM/CPM32_ZCPR3/UNCRUNCH.COM delete mode 100755 software/CPM/CPM32_ZCPR3/VIEW.COM delete mode 100755 software/CPM/CPM32_ZCPR3/XTCAP.COM delete mode 100755 software/CPM/CPM32_ZCPR3/Z3LOC.COM delete mode 100755 software/CPM/CPM32_ZCPR3/Z3TCAP.TCP delete mode 100755 software/CPM/CPM32_ZCPR3/ZCNFG.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZERR.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZEX.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZF-DIM.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZF-REV.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZFILEB38.LZT delete mode 100755 software/CPM/CPM32_ZCPR3/ZFILER.CMD delete mode 100755 software/CPM/CPM32_ZCPR3/ZFILER.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZHELPERS.LZT delete mode 100755 software/CPM/CPM32_ZCPR3/ZLT.COM delete mode 100755 software/CPM/CPM32_ZCPR3/ZNODES66.LZT delete mode 100755 software/CPM/CPM32_ZCPR3/ZSYSTEM.IZF delete mode 100644 software/CPM/CPM32_ZCPR3/nzcom.env delete mode 100644 software/CPM/CPM32_ZCPR3/nzcom.zcm delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ARUNZ.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/CLEDINST.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/CLEDSAVE.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/COMMON.CRC delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/CONFIG.LBR delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/COPY.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/CPSET.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/CRUNCH.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/DOCFILES.LBR delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/EDITNDR.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/FCP.LBR delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/FF.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/HLPFILES.LBR delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/IF.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/JETLDR.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LBREXT.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LBRHELP.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LDIR.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LPUT.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LSH-HELP.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LSH.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LSH.WZ delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LSHINST.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/LX.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/NAME.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/PATH.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/PWD.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/RCP.LBR delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/SAINST.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/SALIAS.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/SAVENDR.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/SDZ.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TCAP.LBR delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TCJ.INF delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TCSELECT.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TY3ERA.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TY3REN.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TY4ERA.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TY4REN.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TY4SAVE.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/TY4SP.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/UNCRUNCH.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/VIEW.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/XTCAP.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/Z3TCAP.TCP delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZCNFG.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZERR.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZEX.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZF-DIM.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZF-REV.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZFILEB38.LZT delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZFILER.CMD delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZHELPERS.LZT delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZLT.COM delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZNODES66.LZT delete mode 100644 software/CPM/CPM33_ZCPR3_COMMON/ZSYSTEM.IZF delete mode 100644 software/CPM/CPM_MC_5/ALGEBRA.ARI delete mode 100644 software/CPM/CPM_MC_5/ALL.SYS delete mode 100644 software/CPM/CPM_MC_5/ARITH%.MUS delete mode 100644 software/CPM/CPM_MC_5/ARITH.MUS delete mode 100644 software/CPM/CPM_MC_5/ARRAY.ARI delete mode 100644 software/CPM/CPM_MC_5/ATRG.TRG delete mode 100644 software/CPM/CPM_MC_5/CLES1.ARI delete mode 100644 software/CPM/CPM_MC_5/CLES2.ARI delete mode 100644 software/CPM/CPM_MC_5/CLES3.ALG delete mode 100644 software/CPM/CPM_MC_5/CLES4.ALG delete mode 100644 software/CPM/CPM_MC_5/CLES5.ALG delete mode 100644 software/CPM/CPM_MC_5/CONTINUE.COM delete mode 100644 software/CPM/CPM_MC_5/CUBIC.MU delete mode 100644 software/CPM/CPM_MC_5/DEMO.ALL delete mode 100644 software/CPM/CPM_MC_5/DIF.ALG delete mode 100644 software/CPM/CPM_MC_5/EQN.ALG delete mode 100644 software/CPM/CPM_MC_5/FACTORS.MU delete mode 100644 software/CPM/CPM_MC_5/FLOAT.MU delete mode 100644 software/CPM/CPM_MC_5/HEX.MU delete mode 100644 software/CPM/CPM_MC_5/INT%.DIF delete mode 100644 software/CPM/CPM_MC_5/INT.DIF delete mode 100644 software/CPM/CPM_MC_5/INTMORE.INT delete mode 100644 software/CPM/CPM_MC_5/LIM%.DIF delete mode 100644 software/CPM/CPM_MC_5/LIM.DIF delete mode 100644 software/CPM/CPM_MC_5/LOG%.ALG delete mode 100644 software/CPM/CPM_MC_5/LOG.ALG delete mode 100644 software/CPM/CPM_MC_5/MATRIX.ARR delete mode 100644 software/CPM/CPM_MC_5/MUMATH%.DOC delete mode 100644 software/CPM/CPM_MC_5/MUSIMP.COM delete mode 100644 software/CPM/CPM_MC_5/MUSIMP.OBJ delete mode 100644 software/CPM/CPM_MC_5/PI.MU delete mode 100644 software/CPM/CPM_MC_5/PLES1.TRA delete mode 100644 software/CPM/CPM_MC_5/PLES2.TRA delete mode 100644 software/CPM/CPM_MC_5/PLES3.TRA delete mode 100644 software/CPM/CPM_MC_5/PLES4.TRA delete mode 100644 software/CPM/CPM_MC_5/PLES5.TRA delete mode 100644 software/CPM/CPM_MC_5/PLOT.MU delete mode 100644 software/CPM/CPM_MC_5/READ.ME delete mode 100644 software/CPM/CPM_MC_5/SERIES%.DIF delete mode 100644 software/CPM/CPM_MC_5/SIGMA.ALG delete mode 100644 software/CPM/CPM_MC_5/SOLVE.EQN delete mode 100644 software/CPM/CPM_MC_5/SOLVE4%.EQN delete mode 100644 software/CPM/CPM_MC_5/TAYLOR.DIF delete mode 100644 software/CPM/CPM_MC_5/TAYLOR.MU delete mode 100644 software/CPM/CPM_MC_5/TRACE.MUS delete mode 100644 software/CPM/CPM_MC_5/TRGNEG%.ALG delete mode 100644 software/CPM/CPM_MC_5/TRGNEG.ALG delete mode 100644 software/CPM/CPM_MC_5/TRGPOS.ALG delete mode 100644 software/CPM/CPM_MC_5/UNPARSE.MUS delete mode 100644 software/CPM/CPM_MC_C0/-(C)1988 delete mode 100644 software/CPM/CPM_MC_C0/-BGII.134 delete mode 100644 software/CPM/CPM_MC_C0/-PLUPERF.SYS delete mode 100644 software/CPM/CPM_MC_C0/BG.HLP delete mode 100644 software/CPM/CPM_MC_C0/BG.REL delete mode 100644 software/CPM/CPM_MC_C0/BG134.DOC delete mode 100644 software/CPM/CPM_MC_C0/BGHIST.HLP delete mode 100644 software/CPM/CPM_MC_C0/BGHIST07.OCP delete mode 100644 software/CPM/CPM_MC_C0/BGINFO.HLP delete mode 100644 software/CPM/CPM_MC_C0/EX.COM delete mode 100644 software/CPM/CPM_MC_C0/FILES.TXT delete mode 100644 software/CPM/CPM_MC_C0/H19SCRN.DRV delete mode 100644 software/CPM/CPM_MC_C0/K8384FNK.FNK delete mode 100644 software/CPM/CPM_MC_C0/K83SCRN.DRV delete mode 100644 software/CPM/CPM_MC_C0/K84SCRN.DRV delete mode 100644 software/CPM/CPM_MC_C0/KAYPRO.BG delete mode 100644 software/CPM/CPM_MC_C0/MAKENDR.COM delete mode 100644 software/CPM/CPM_MC_C0/ON!TVI.DRV delete mode 100644 software/CPM/CPM_MC_C0/PUTBG.COM delete mode 100644 software/CPM/CPM_MC_C0/Q.COM delete mode 100644 software/CPM/CPM_MC_C0/RELEASE.NOT delete mode 100644 software/CPM/CPM_MC_C0/REMOVE.COM delete mode 100644 software/CPM/CPM_MC_C0/S19FNK.FNK delete mode 100644 software/CPM/CPM_MC_C0/SECURE.COM delete mode 100644 software/CPM/CPM_MC_C0/SETBG.COM delete mode 100644 software/CPM/CPM_MC_C0/SETTERM.COM delete mode 100644 software/CPM/CPM_MC_C0/SPOOLER.COM delete mode 100644 software/CPM/CPM_MC_C0/SYNONYM.COM delete mode 100644 software/CPM/CPM_MC_C0/TERMBASE.DAT delete mode 100644 software/CPM/CPM_MC_C0/TVI.DRV delete mode 100644 software/CPM/CPM_MC_C0/WS30RDRW.HEX delete mode 100644 software/CPM/CPM_MC_C0/WS33RDRW.HEX delete mode 100644 software/CPM/CPM_MC_C0/WSKAYPRO.BG delete mode 100644 software/CPM/CPM_MC_C0/WYSE50.DRV delete mode 100644 software/CPM/CPM_MC_C0/ZEX31A.COM delete mode 100644 software/CPM/CPM_MC_C1/-TINY#C.254 delete mode 100644 software/CPM/CPM_MC_C1/-TINY#C.265 delete mode 100644 software/CPM/CPM_MC_C1/BDSCIO.H delete mode 100644 software/CPM/CPM_MC_C1/BUGS.C delete mode 100644 software/CPM/CPM_MC_C1/C.CCC delete mode 100644 software/CPM/CPM_MC_C1/C.DOC delete mode 100644 software/CPM/CPM_MC_C1/CC0T.C delete mode 100644 software/CPM/CPM_MC_C1/CC1.COM delete mode 100644 software/CPM/CPM_MC_C1/CC2.COM delete mode 100644 software/CPM/CPM_MC_C1/CHARLIST.C delete mode 100644 software/CPM/CPM_MC_C1/CLIB.COM delete mode 100644 software/CPM/CPM_MC_C1/CLINKC.COM delete mode 100644 software/CPM/CPM_MC_C1/CONVERT.C delete mode 100644 software/CPM/CPM_MC_C1/CTC.ASM delete mode 100644 software/CPM/CPM_MC_C1/DISK.C delete mode 100644 software/CPM/CPM_MC_C1/DISKTRAN.C delete mode 100644 software/CPM/CPM_MC_C1/DIVINE.C delete mode 100644 software/CPM/CPM_MC_C1/EL2.TC delete mode 100644 software/CPM/CPM_MC_C1/EL2LF.TC delete mode 100644 software/CPM/CPM_MC_C1/ELINE.TC delete mode 100644 software/CPM/CPM_MC_C1/ELINELF.TC delete mode 100644 software/CPM/CPM_MC_C1/ENDLINE.TC delete mode 100644 software/CPM/CPM_MC_C1/FACT.TC delete mode 100644 software/CPM/CPM_MC_C1/FALLOUT.C delete mode 100644 software/CPM/CPM_MC_C1/FILECOMP.C delete mode 100644 software/CPM/CPM_MC_C1/FLOAT.C delete mode 100644 software/CPM/CPM_MC_C1/FLOATSUM.C delete mode 100644 software/CPM/CPM_MC_C1/GETPUT.TC delete mode 100644 software/CPM/CPM_MC_C1/GLOBALS.WP delete mode 100644 software/CPM/CPM_MC_C1/GUESSNUM.TC delete mode 100644 software/CPM/CPM_MC_C1/LIFE.C delete mode 100644 software/CPM/CPM_MC_C1/LIFE.CRL delete mode 100644 software/CPM/CPM_MC_C1/LINES.C delete mode 100644 software/CPM/CPM_MC_C1/LIST.C delete mode 100644 software/CPM/CPM_MC_C1/LPR.C delete mode 100644 software/CPM/CPM_MC_C1/MACDEFS.WP delete mode 100644 software/CPM/CPM_MC_C1/MM.C delete mode 100644 software/CPM/CPM_MC_C1/MYLIB.C delete mode 100644 software/CPM/CPM_MC_C1/OTHELLO.C delete mode 100644 software/CPM/CPM_MC_C1/P.C delete mode 100644 software/CPM/CPM_MC_C1/PNUM.C delete mode 100644 software/CPM/CPM_MC_C1/PPONG.C delete mode 100644 software/CPM/CPM_MC_C1/PPS.DOC delete mode 100644 software/CPM/CPM_MC_C1/PPS.TC delete mode 100644 software/CPM/CPM_MC_C1/PPSLF.TC delete mode 100644 software/CPM/CPM_MC_C1/PRESSUP.C delete mode 100644 software/CPM/CPM_MC_C1/QUEUE.C delete mode 100644 software/CPM/CPM_MC_C1/R2.MAP delete mode 100644 software/CPM/CPM_MC_C1/RALLY.C delete mode 100644 software/CPM/CPM_MC_C1/RALLY.MAP delete mode 100644 software/CPM/CPM_MC_C1/STDLIB.C delete mode 100644 software/CPM/CPM_MC_C1/STDLIB1.C delete mode 100644 software/CPM/CPM_MC_C1/STDLIB2.C delete mode 100644 software/CPM/CPM_MC_C1/STONE.C delete mode 100644 software/CPM/CPM_MC_C1/STONE.COM delete mode 100644 software/CPM/CPM_MC_C1/STONE.CRL delete mode 100644 software/CPM/CPM_MC_C1/TC.ASM delete mode 100644 software/CPM/CPM_MC_C1/TC.COM delete mode 100644 software/CPM/CPM_MC_C1/TCASM.DOC delete mode 100644 software/CPM/CPM_MC_C1/TELNET.C delete mode 100644 software/CPM/CPM_MC_C1/UCSD2CPM.C delete mode 100644 software/CPM/CPM_MC_C1/UCSDIR.C delete mode 100644 software/CPM/CPM_MC_C1/UTIL-WP.C delete mode 100644 software/CPM/CPM_MC_C1/WDZITDO.C delete mode 100644 software/CPM/CPM_MC_C1/WP.C delete mode 100644 software/CPM/CPM_MC_C1/WP.DOC delete mode 100644 software/CPM/CPM_MC_C1/WP.OUT delete mode 100644 software/CPM/CPM_MC_C1/~TINY#C1.010 delete mode 100644 software/CPM/CPM_MC_C2/ACOS.ACO delete mode 100644 software/CPM/CPM_MC_C2/ACOSH.ACO delete mode 100644 software/CPM/CPM_MC_C2/APL-SVAR.DOC delete mode 100644 software/CPM/CPM_MC_C2/APL.COM delete mode 100644 software/CPM/CPM_MC_C2/APL.DOC delete mode 100644 software/CPM/CPM_MC_C2/APL.NOT delete mode 100644 software/CPM/CPM_MC_C2/ASIN.ACO delete mode 100644 software/CPM/CPM_MC_C2/ASINH.ACO delete mode 100644 software/CPM/CPM_MC_C2/ATAN.ACO delete mode 100644 software/CPM/CPM_MC_C2/ATANH.ACO delete mode 100644 software/CPM/CPM_MC_C2/CN.ACO delete mode 100644 software/CPM/CPM_MC_C2/COMPLEX.AWS delete mode 100644 software/CPM/CPM_MC_C2/COSECH.ACO delete mode 100644 software/CPM/CPM_MC_C2/COSH.ACO delete mode 100644 software/CPM/CPM_MC_C2/COTH.ACO delete mode 100644 software/CPM/CPM_MC_C2/CRCKLIST.CRC delete mode 100644 software/CPM/CPM_MC_C2/DN.ACO delete mode 100644 software/CPM/CPM_MC_C2/DROP.ACO delete mode 100644 software/CPM/CPM_MC_C2/DTR.ACO delete mode 100644 software/CPM/CPM_MC_C2/FACT.ACO delete mode 100644 software/CPM/CPM_MC_C2/GAMMA.ACO delete mode 100644 software/CPM/CPM_MC_C2/GEN.ACO delete mode 100644 software/CPM/CPM_MC_C2/INNERPRO.ACO delete mode 100644 software/CPM/CPM_MC_C2/IP.ACO delete mode 100644 software/CPM/CPM_MC_C2/J.ACO delete mode 100644 software/CPM/CPM_MC_C2/JELF.ACO delete mode 100644 software/CPM/CPM_MC_C2/LAMINATE.ACO delete mode 100644 software/CPM/CPM_MC_C2/LIFE.ACO delete mode 100644 software/CPM/CPM_MC_C2/MATDIV.ACO delete mode 100644 software/CPM/CPM_MC_C2/MATINV.ACO delete mode 100644 software/CPM/CPM_MC_C2/NOTES.ACO delete mode 100644 software/CPM/CPM_MC_C2/PERM.ACO delete mode 100644 software/CPM/CPM_MC_C2/REVERSE.ACO delete mode 100644 software/CPM/CPM_MC_C2/ROTATE.ACO delete mode 100644 software/CPM/CPM_MC_C2/RTD.ACO delete mode 100644 software/CPM/CPM_MC_C2/SECH.ACO delete mode 100644 software/CPM/CPM_MC_C2/SINH.ACO delete mode 100644 software/CPM/CPM_MC_C2/SN.ACO delete mode 100644 software/CPM/CPM_MC_C2/TAKE.ACO delete mode 100644 software/CPM/CPM_MC_C2/TANH.ACO delete mode 100644 software/CPM/CPM_MC_C2/TRANSPOS.ACO delete mode 100644 software/CPM/CPM_MC_C2/TRIGFNS.AWS delete mode 100644 software/CPM/CPM_MC_C2/UNIMAT.ACO delete mode 100644 software/CPM/CPM_MC_C2/WSFNS.AWS delete mode 100644 software/CPM/CPM_MC_C3/BIT.JRL delete mode 100644 software/CPM/CPM_MC_C3/BIT.LIB delete mode 100644 software/CPM/CPM_MC_C3/BIT.SYM delete mode 100644 software/CPM/CPM_MC_C3/CHAINLIB.JRL delete mode 100644 software/CPM/CPM_MC_C3/CHAINLIB.LIB delete mode 100644 software/CPM/CPM_MC_C3/CHAINLIB.SYM delete mode 100644 software/CPM/CPM_MC_C3/CRCKLIST.CRC delete mode 100644 software/CPM/CPM_MC_C3/ERROR.MSG delete mode 100644 software/CPM/CPM_MC_C3/FLOATIO.JRL delete mode 100644 software/CPM/CPM_MC_C3/FLOATIO.LIB delete mode 100644 software/CPM/CPM_MC_C3/FLOATIO.SYM delete mode 100644 software/CPM/CPM_MC_C3/FLOATOPS.JRL delete mode 100644 software/CPM/CPM_MC_C3/FLOATOPS.LIB delete mode 100644 software/CPM/CPM_MC_C3/FLOATOPS.SYM delete mode 100644 software/CPM/CPM_MC_C3/IO.JRL delete mode 100644 software/CPM/CPM_MC_C3/IO.LIB delete mode 100644 software/CPM/CPM_MC_C3/IO.SYM delete mode 100644 software/CPM/CPM_MC_C3/JANUS.COM delete mode 100644 software/CPM/CPM_MC_C3/JANUS1.OVL delete mode 100644 software/CPM/CPM_MC_C3/JANUS2.COM delete mode 100644 software/CPM/CPM_MC_C3/JANUS2A.COM delete mode 100644 software/CPM/CPM_MC_C3/JANUS2B.COM delete mode 100644 software/CPM/CPM_MC_C3/JANUS3.COM delete mode 100644 software/CPM/CPM_MC_C3/JANUS4.COM delete mode 100644 software/CPM/CPM_MC_C3/JLIB80.JRL delete mode 100644 software/CPM/CPM_MC_C3/JLIB80.LIB delete mode 100644 software/CPM/CPM_MC_C3/JLIB80.SYM delete mode 100644 software/CPM/CPM_MC_C3/JLINK.COM delete mode 100644 software/CPM/CPM_MC_C3/KALAHA.PKG delete mode 100644 software/CPM/CPM_MC_C3/LONGIO.JRL delete mode 100644 software/CPM/CPM_MC_C3/LONGIO.LIB delete mode 100644 software/CPM/CPM_MC_C3/LONGIO.SYM delete mode 100644 software/CPM/CPM_MC_C3/LONGOPS.JRL delete mode 100644 software/CPM/CPM_MC_C3/LONGOPS.LIB delete mode 100644 software/CPM/CPM_MC_C3/LONGOPS.SYM delete mode 100644 software/CPM/CPM_MC_C3/MATHLIB.JRL delete mode 100644 software/CPM/CPM_MC_C3/MATHLIB.LIB delete mode 100644 software/CPM/CPM_MC_C3/MATHLIB.SYM delete mode 100644 software/CPM/CPM_MC_C3/MATMUL.PKG delete mode 100644 software/CPM/CPM_MC_C3/MEMCHK.COM delete mode 100644 software/CPM/CPM_MC_C3/OPCODE.JRL delete mode 100644 software/CPM/CPM_MC_C3/OPCODE.LIB delete mode 100644 software/CPM/CPM_MC_C3/OPCODE.SYM delete mode 100644 software/CPM/CPM_MC_C3/PRIME.PKG delete mode 100644 software/CPM/CPM_MC_C3/QSORT.PKG delete mode 100644 software/CPM/CPM_MC_C3/RANDIO.LIB delete mode 100644 software/CPM/CPM_MC_C3/RANDIO.PKG delete mode 100644 software/CPM/CPM_MC_C3/RANDOM.JRL delete mode 100644 software/CPM/CPM_MC_C3/RANDOM.LIB delete mode 100644 software/CPM/CPM_MC_C3/RANDOM.SYM delete mode 100644 software/CPM/CPM_MC_C3/SECT.LIB delete mode 100644 software/CPM/CPM_MC_C3/SFLOATIO.JRL delete mode 100644 software/CPM/CPM_MC_C3/SFLOATIO.LIB delete mode 100644 software/CPM/CPM_MC_C3/SFLOATIO.SYM delete mode 100644 software/CPM/CPM_MC_C3/SFLOATOP.JRL delete mode 100644 software/CPM/CPM_MC_C3/SFLOATOP.LIB delete mode 100644 software/CPM/CPM_MC_C3/SFLOATOP.SYM delete mode 100644 software/CPM/CPM_MC_C3/SMATHLIB.JRL delete mode 100644 software/CPM/CPM_MC_C3/SMATHLIB.LIB delete mode 100644 software/CPM/CPM_MC_C3/SMATHLIB.SYM delete mode 100644 software/CPM/CPM_MC_C3/SRANDOM.JRL delete mode 100644 software/CPM/CPM_MC_C3/SRANDOM.LIB delete mode 100644 software/CPM/CPM_MC_C3/SRANDOM.SYM delete mode 100644 software/CPM/CPM_MC_C3/STANDARD.SYM delete mode 100644 software/CPM/CPM_MC_C3/STRLIB.JRL delete mode 100644 software/CPM/CPM_MC_C3/STRLIB.LIB delete mode 100644 software/CPM/CPM_MC_C3/STRLIB.SYM delete mode 100644 software/CPM/CPM_MC_C3/TIMELIB.LIB delete mode 100644 software/CPM/CPM_MC_C3/TIMELIB.PKG delete mode 100644 software/CPM/CPM_MC_C3/TIMELIB.SYM delete mode 100644 software/CPM/CPM_MC_C3/UTIL.JRL delete mode 100644 software/CPM/CPM_MC_C3/UTIL.LIB delete mode 100644 software/CPM/CPM_MC_C3/UTIL.SYM delete mode 100644 software/CPM/CPM_MC_C3/XREF.PKG delete mode 100644 software/CPM/CPM_MC_C4/CDADDS.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDADDS.REL delete mode 100644 software/CPM/CPM_MC_C4/CDADM3.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDADM3.REL delete mode 100644 software/CPM/CPM_MC_C4/CDANSI.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDANSI.REL delete mode 100644 software/CPM/CPM_MC_C4/CDBEE.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDBEE.REL delete mode 100644 software/CPM/CPM_MC_C4/CDHZ15.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDHZ15.REL delete mode 100644 software/CPM/CPM_MC_C4/CDISB.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDISB.REL delete mode 100644 software/CPM/CPM_MC_C4/CDPERK.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDPERK.REL delete mode 100644 software/CPM/CPM_MC_C4/CDSROC.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDSROC.REL delete mode 100644 software/CPM/CPM_MC_C4/CDWH19.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDWH19.REL delete mode 100644 software/CPM/CPM_MC_C4/CDZEPH.MAC delete mode 100644 software/CPM/CPM_MC_C4/CDZEPH.REL delete mode 100644 software/CPM/CPM_MC_C4/COBLBX.REL delete mode 100644 software/CPM/CPM_MC_C4/COBLIB.REL delete mode 100644 software/CPM/CPM_MC_C4/COBLOC delete mode 100644 software/CPM/CPM_MC_C4/COBOL.COM delete mode 100644 software/CPM/CPM_MC_C4/COBOL1.OVR delete mode 100644 software/CPM/CPM_MC_C4/COBOL2.OVR delete mode 100644 software/CPM/CPM_MC_C4/COBOL3.OVR delete mode 100644 software/CPM/CPM_MC_C4/COBOL4.OVR delete mode 100644 software/CPM/CPM_MC_C4/CREF80.COM delete mode 100644 software/CPM/CPM_MC_C4/CRTDRV.REL delete mode 100644 software/CPM/CPM_MC_C4/CRTEST.COB delete mode 100644 software/CPM/CPM_MC_C4/CVISAM.COM delete mode 100644 software/CPM/CPM_MC_C4/DEBUG.REL delete mode 100644 software/CPM/CPM_MC_C4/L80.COM delete mode 100644 software/CPM/CPM_MC_C4/LD80.COM delete mode 100644 software/CPM/CPM_MC_C4/LIB.COM delete mode 100644 software/CPM/CPM_MC_C4/M80.COM delete mode 100644 software/CPM/CPM_MC_C4/REBUILD.COM delete mode 100644 software/CPM/CPM_MC_C4/RECOVR.COB delete mode 100644 software/CPM/CPM_MC_C4/RUNCOB.COM delete mode 100644 software/CPM/CPM_MC_C4/SEQCVT.COM delete mode 100644 software/CPM/CPM_MC_C4/SQUARO.COB delete mode 100644 software/CPM/CPM_MC_C5/ASL.REL delete mode 100644 software/CPM/CPM_MC_C5/BERRIES.PLT delete mode 100644 software/CPM/CPM_MC_C5/CATALOG delete mode 100644 software/CPM/CPM_MC_C5/CHAIN.REL delete mode 100644 software/CPM/CPM_MC_C5/CHAIN.SUB delete mode 100644 software/CPM/CPM_MC_C5/COMPILE.SUB delete mode 100644 software/CPM/CPM_MC_C5/CPM.HLP delete mode 100644 software/CPM/CPM_MC_C5/DISK.COM delete mode 100644 software/CPM/CPM_MC_C5/DO.COM delete mode 100644 software/CPM/CPM_MC_C5/GOLDI.PLT delete mode 100644 software/CPM/CPM_MC_C5/HIPILOT.PLT delete mode 100644 software/CPM/CPM_MC_C5/ILIB.REL delete mode 100644 software/CPM/CPM_MC_C5/LESSON1.PLT delete mode 100644 software/CPM/CPM_MC_C5/LESSON2.PLT delete mode 100644 software/CPM/CPM_MC_C5/LESSONS.PLT delete mode 100644 software/CPM/CPM_MC_C5/LMENU.PLT delete mode 100644 software/CPM/CPM_MC_C5/MATCH.PZ delete mode 100644 software/CPM/CPM_MC_C5/MATCH.REL delete mode 100644 software/CPM/CPM_MC_C5/MATCH.SRC delete mode 100644 software/CPM/CPM_MC_C5/PILOT#P.COM delete mode 100644 software/CPM/CPM_MC_C5/PILOT#P.DOC delete mode 100644 software/CPM/CPM_MC_C5/PILOT#P.HDR delete mode 100644 software/CPM/CPM_MC_C5/PILOT#P.PAS delete mode 100644 software/CPM/CPM_MC_C5/PILOT#P.REF delete mode 100644 software/CPM/CPM_MC_C5/PILOT#P.SUB delete mode 100644 software/CPM/CPM_MC_C5/PILOT#PR.HDR delete mode 100644 software/CPM/CPM_MC_C5/PRIMS.PZ delete mode 100644 software/CPM/CPM_MC_C5/SAGE.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE1.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE2.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE3.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE4.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE5.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE6.PLT delete mode 100644 software/CPM/CPM_MC_C5/SAMPLE7.PLT delete mode 100644 software/CPM/CPM_MC_C5/TUTORIAL.PLT delete mode 100644 software/CPM/CPM_MC_C5/WAIT.PZ delete mode 100644 software/CPM/CPM_MC_C5/WAIT.REL delete mode 100644 software/CPM/CPM_MC_C5/WAIT.SRC delete mode 100644 software/CPM/CPM_MC_C5/XDIR.COM delete mode 100644 software/CPM/CPM_MC_C6/S0FILEIO.MAC delete mode 100644 software/CPM/CPM_MC_C6/S1FILEIO.MAC delete mode 100644 software/CPM/CPM_MC_C6/S2FILEIO.MAC delete mode 100644 software/CPM/CPM_MC_C6/S3FILEIO.MAC delete mode 100644 software/CPM/CPM_MC_C6/SBBLINE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SBDOS.MAC delete mode 100644 software/CPM/CPM_MC_C6/SBIOS.MAC delete mode 100644 software/CPM/CPM_MC_C6/SBLINE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCAPS.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCAPSTR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCATH.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCCOUT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCIN.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCLINE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCLOUT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCODEND.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCOMP.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCOMPHD.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCONDIN.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCOUT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCPOUT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCRC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCRC1.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCRC2.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCRLF.MAC delete mode 100644 software/CPM/CPM_MC_C6/SCST.MAC delete mode 100644 software/CPM/CPM_MC_C6/SDIR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEN.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEPRINT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEPSTR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEVAL.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEVAL1.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEVAL2.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEVAL3.MAC delete mode 100644 software/CPM/CPM_MC_C6/SEVAL4.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFCLOS.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFDEL.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFEXIST.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFILEIO.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFILL.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFMAKE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFNAME.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFOPEN.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFREAD.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFRENAME.MAC delete mode 100644 software/CPM/CPM_MC_C6/SFWRIT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SHDR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SINITFCB.MAC delete mode 100644 software/CPM/CPM_MC_C6/SINLINE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SINSTR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLA2HC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLADC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLCRLF.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLHL4HC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLHL5DC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLOUT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLPRINT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SLPSTR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SMA2HC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SMADC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SMATH.MAC delete mode 100644 software/CPM/CPM_MC_C6/SMHL4HC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SMHL5DC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SMOVE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPA2HC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPADC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPAUSE.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPHL4HC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPHL5DC.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPOUT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPRINT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SPSTR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SRAND.MAC delete mode 100644 software/CPM/CPM_MC_C6/SRIN.MAC delete mode 100644 software/CPM/CPM_MC_C6/SSCANNER.MAC delete mode 100644 software/CPM/CPM_MC_C6/SSORT.MAC delete mode 100644 software/CPM/CPM_MC_C6/SUD.MAC delete mode 100644 software/CPM/CPM_MC_C6/SVERSION.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB.REL delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB1.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB2.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB3.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB4.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB5.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB6.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB7.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB8.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIB9.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBA.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBB.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBC.HLP delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBHD.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBHD2.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBI.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBID.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBR.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBS.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSLIBUG.WS delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST1.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST2.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST3.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST4.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST5.MAC delete mode 100644 software/CPM/CPM_MC_C6/SYSTEST6.MAC delete mode 100644 software/CPM/CPM_MC_C6/SZCPR.MAC delete mode 100644 software/CPM/CPM_MC_C6/SZFNAME.MAC delete mode 100644 software/CPM/CPM_MC_C6/SZGPINS.MAC delete mode 100644 software/CPM/CPM_MC_C6/Z2SYS.4MO delete mode 100644 software/CPM/CPM_MC_C7/ANIMAL.BBC delete mode 100644 software/CPM/CPM_MC_C7/ANIMAL.DAT delete mode 100644 software/CPM/CPM_MC_C7/BBCBASIC.COM delete mode 100644 software/CPM/CPM_MC_C7/BBCBASIC.ORG delete mode 100644 software/CPM/CPM_MC_C7/BBCBASIC.TXT delete mode 100644 software/CPM/CPM_MC_C7/BBCDIST.MAC delete mode 100644 software/CPM/CPM_MC_C7/BBCDIST.ORG delete mode 100644 software/CPM/CPM_MC_C7/BBCDIST.SUB delete mode 100644 software/CPM/CPM_MC_C7/CONVERT.COM delete mode 100644 software/CPM/CPM_MC_C7/CRC.COM delete mode 100644 software/CPM/CPM_MC_C7/CRCKLIST.CRC delete mode 100644 software/CPM/CPM_MC_C7/F-INDEX.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-RAND0.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-RAND1.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-RAND2.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-RSER1.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-RSER2.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-RSTD.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-WESER1.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-WESER2.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-WSER1.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-WSER2.BBC delete mode 100644 software/CPM/CPM_MC_C7/F-WSTD.BBC delete mode 100644 software/CPM/CPM_MC_C7/MERGE.BBC delete mode 100644 software/CPM/CPM_MC_C7/READ.ME delete mode 100644 software/CPM/CPM_MC_C7/SORT.BBC delete mode 100644 software/CPM/CPM_MC_C7/SORTREAL.BBC delete mode 100644 software/CPM/CPM_MC_C8/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_C9/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_D0/ADV.COM delete mode 100644 software/CPM/CPM_MC_D0/ADVDDIA.SAV delete mode 100644 software/CPM/CPM_MC_D0/ADVDDOM.SAV delete mode 100644 software/CPM/CPM_MC_D0/ADVI.DAT delete mode 100644 software/CPM/CPM_MC_D0/ADVI.PTR delete mode 100644 software/CPM/CPM_MC_D0/ADVT.DAT delete mode 100644 software/CPM/CPM_MC_D0/ADVT.PTR delete mode 100644 software/CPM/CPM_MC_D0/ALIENS.COM delete mode 100644 software/CPM/CPM_MC_D0/BIGTREK.BAS delete mode 100644 software/CPM/CPM_MC_D0/CATCHUM.COM delete mode 100644 software/CPM/CPM_MC_D0/CATCHUM.DAT delete mode 100644 software/CPM/CPM_MC_D0/CATCONF.COM delete mode 100644 software/CPM/CPM_MC_D0/CHESS.PAS delete mode 100644 software/CPM/CPM_MC_D0/CHESS.PQS delete mode 100644 software/CPM/CPM_MC_D0/CLONE.COM delete mode 100644 software/CPM/CPM_MC_D0/CLONE.DAT delete mode 100644 software/CPM/CPM_MC_D0/HITCH.COM delete mode 100644 software/CPM/CPM_MC_D0/HITCHHIK.DAT delete mode 100644 software/CPM/CPM_MC_D0/HUNT.COM delete mode 100644 software/CPM/CPM_MC_D0/HUNT.DOC delete mode 100644 software/CPM/CPM_MC_D0/LADCONF.COM delete mode 100644 software/CPM/CPM_MC_D0/LADDER.COM delete mode 100644 software/CPM/CPM_MC_D0/LADDER.DAT delete mode 100644 software/CPM/CPM_MC_D0/MONSTER.BAS delete mode 100644 software/CPM/CPM_MC_D0/MONSTER.DOC delete mode 100644 software/CPM/CPM_MC_D0/OTHELLO.COM delete mode 100644 software/CPM/CPM_MC_D0/PLANET.COM delete mode 100644 software/CPM/CPM_MC_D0/PLANETFA.DAT delete mode 100644 software/CPM/CPM_MC_D0/QIX.COM delete mode 100644 software/CPM/CPM_MC_D0/QIX.DAT delete mode 100644 software/CPM/CPM_MC_D0/QIX.DOC delete mode 100644 software/CPM/CPM_MC_D0/QIXNSTL.INF delete mode 100644 software/CPM/CPM_MC_D0/SARGON.COM delete mode 100644 software/CPM/CPM_MC_D0/SCREEN.001 delete mode 100644 software/CPM/CPM_MC_D0/SCREEN.002 delete mode 100644 software/CPM/CPM_MC_D0/SCREEN.003 delete mode 100644 software/CPM/CPM_MC_D0/SCREEN.004 delete mode 100644 software/CPM/CPM_MC_D0/STAR.COM delete mode 100644 software/CPM/CPM_MC_D0/WANDERER.COM delete mode 100644 software/CPM/CPM_MC_D0/WANDERER.TXT delete mode 100644 software/CPM/CPM_MC_D0/WORM.COM delete mode 100644 software/CPM/CPM_MC_D0/WORTE.TXT delete mode 100644 software/CPM/CPM_MC_D0/ZORK1.COM delete mode 100644 software/CPM/CPM_MC_D0/ZORK1.DAT delete mode 100644 software/CPM/CPM_MC_D0/ZORK2.COM delete mode 100644 software/CPM/CPM_MC_D0/ZORK2.DAT delete mode 100644 software/CPM/CPM_MC_D0/ZORK3.COM delete mode 100644 software/CPM/CPM_MC_D0/ZORK3.DAT delete mode 100644 software/CPM/CPM_MC_D1/ALGEBRA.ARI delete mode 100644 software/CPM/CPM_MC_D1/ALL.SYS delete mode 100644 software/CPM/CPM_MC_D1/ARITH%.MUS delete mode 100644 software/CPM/CPM_MC_D1/ARITH.MUS delete mode 100644 software/CPM/CPM_MC_D1/ARRAY.ARI delete mode 100644 software/CPM/CPM_MC_D1/ATRG.TRG delete mode 100644 software/CPM/CPM_MC_D1/CLES1.ARI delete mode 100644 software/CPM/CPM_MC_D1/CLES2.ARI delete mode 100644 software/CPM/CPM_MC_D1/CLES3.ALG delete mode 100644 software/CPM/CPM_MC_D1/CLES4.ALG delete mode 100644 software/CPM/CPM_MC_D1/CLES5.ALG delete mode 100644 software/CPM/CPM_MC_D1/CONTINUE.COM delete mode 100644 software/CPM/CPM_MC_D1/CUBIC.MU delete mode 100644 software/CPM/CPM_MC_D1/DEMO.ALL delete mode 100644 software/CPM/CPM_MC_D1/DIF.ALG delete mode 100644 software/CPM/CPM_MC_D1/EQN.ALG delete mode 100644 software/CPM/CPM_MC_D1/FACTORS.MU delete mode 100644 software/CPM/CPM_MC_D1/FLOAT.MU delete mode 100644 software/CPM/CPM_MC_D1/HEX.MU delete mode 100644 software/CPM/CPM_MC_D1/INT%.DIF delete mode 100644 software/CPM/CPM_MC_D1/INT.DIF delete mode 100644 software/CPM/CPM_MC_D1/INTMORE.INT delete mode 100644 software/CPM/CPM_MC_D1/LIM%.DIF delete mode 100644 software/CPM/CPM_MC_D1/LIM.DIF delete mode 100644 software/CPM/CPM_MC_D1/LOG%.ALG delete mode 100644 software/CPM/CPM_MC_D1/LOG.ALG delete mode 100644 software/CPM/CPM_MC_D1/MATRIX.ARR delete mode 100644 software/CPM/CPM_MC_D1/MUMATH%.DOC delete mode 100644 software/CPM/CPM_MC_D1/MUSIMP.COM delete mode 100644 software/CPM/CPM_MC_D1/MUSIMP.OBJ delete mode 100644 software/CPM/CPM_MC_D1/PI.MU delete mode 100644 software/CPM/CPM_MC_D1/PLES1.TRA delete mode 100644 software/CPM/CPM_MC_D1/PLES2.TRA delete mode 100644 software/CPM/CPM_MC_D1/PLES3.TRA delete mode 100644 software/CPM/CPM_MC_D1/PLES4.TRA delete mode 100644 software/CPM/CPM_MC_D1/PLES5.TRA delete mode 100644 software/CPM/CPM_MC_D1/PLOT.MU delete mode 100644 software/CPM/CPM_MC_D1/READ.ME delete mode 100644 software/CPM/CPM_MC_D1/SERIES%.DIF delete mode 100644 software/CPM/CPM_MC_D1/SIGMA.ALG delete mode 100644 software/CPM/CPM_MC_D1/SOLVE.EQN delete mode 100644 software/CPM/CPM_MC_D1/SOLVE4%.EQN delete mode 100644 software/CPM/CPM_MC_D1/TAYLOR.DIF delete mode 100644 software/CPM/CPM_MC_D1/TAYLOR.MU delete mode 100644 software/CPM/CPM_MC_D1/TRACE.MUS delete mode 100644 software/CPM/CPM_MC_D1/TRGNEG%.ALG delete mode 100644 software/CPM/CPM_MC_D1/TRGNEG.ALG delete mode 100644 software/CPM/CPM_MC_D1/TRGPOS.ALG delete mode 100644 software/CPM/CPM_MC_D1/UNPARSE.MUS delete mode 100644 software/CPM/CPM_MC_D2/820.ASM delete mode 100644 software/CPM/CPM_MC_D2/820.HEX delete mode 100644 software/CPM/CPM_MC_D2/820INIT.COM delete mode 100644 software/CPM/CPM_MC_D2/ALSPA.ASM delete mode 100644 software/CPM/CPM_MC_D2/ALTOS.ASM delete mode 100644 software/CPM/CPM_MC_D2/ARCHIVES.ASM delete mode 100644 software/CPM/CPM_MC_D2/ATTACHE.ASM delete mode 100644 software/CPM/CPM_MC_D2/BULLET.ASM delete mode 100644 software/CPM/CPM_MC_D2/CCS.ASM delete mode 100644 software/CPM/CPM_MC_D2/COMP.ASM delete mode 100644 software/CPM/CPM_MC_D2/DYNA.ASM delete mode 100644 software/CPM/CPM_MC_D2/EAGLE.ASM delete mode 100644 software/CPM/CPM_MC_D2/HRZ.ASM delete mode 100644 software/CPM/CPM_MC_D2/IO1.ASM delete mode 100644 software/CPM/CPM_MC_D2/MOLEC.ASM delete mode 100644 software/CPM/CPM_MC_D2/MORROW.ASM delete mode 100644 software/CPM/CPM_MC_D2/NNC.ASM delete mode 100644 software/CPM/CPM_MC_D2/SDS.ASM delete mode 100644 software/CPM/CPM_MC_D2/SOL.ASM delete mode 100644 software/CPM/CPM_MC_D2/TRS.ASM delete mode 100644 software/CPM/CPM_MC_D2/TU-ART.ASM delete mode 100644 software/CPM/CPM_MC_D2/VECTOR.ASM delete mode 100644 software/CPM/CPM_MC_D2/XTALK.COM delete mode 100644 software/CPM/CPM_MC_D2/XTALK.HLP delete mode 100644 software/CPM/CPM_MC_D2/ZENITH.ASM delete mode 100644 software/CPM/CPM_MC_D3/-README.1ST delete mode 100644 software/CPM/CPM_MC_D3/BAUD.ZY delete mode 100644 software/CPM/CPM_MC_D3/CATCH.ZY delete mode 100644 software/CPM/CPM_MC_D3/CF.ZY delete mode 100644 software/CPM/CPM_MC_D3/CHAT.ZY delete mode 100644 software/CPM/CPM_MC_D3/DIR.ZY delete mode 100644 software/CPM/CPM_MC_D3/FILE.ZY delete mode 100644 software/CPM/CPM_MC_D3/FLAGS.ZY delete mode 100644 software/CPM/CPM_MC_D3/KERMIT.IY delete mode 100644 software/CPM/CPM_MC_D3/KUTIL.ZY delete mode 100644 software/CPM/CPM_MC_D3/MAKEQT.SUB delete mode 100644 software/CPM/CPM_MC_D3/ODDS.ZY delete mode 100644 software/CPM/CPM_MC_D3/QT-PATCH.ZY delete mode 100644 software/CPM/CPM_MC_D3/QT43EFX2.ARK delete mode 100644 software/CPM/CPM_MC_D3/QTCHAT.DYC delete mode 100644 software/CPM/CPM_MC_D3/QTERM.CYM delete mode 100644 software/CPM/CPM_MC_D3/QTERM.DYC delete mode 100644 software/CPM/CPM_MC_D3/QTERM.FOR delete mode 100644 software/CPM/CPM_MC_D3/QTERM.PYT delete mode 100644 software/CPM/CPM_MC_D3/QTERM.ZY delete mode 100644 software/CPM/CPM_MC_D3/QTERM43E.LBR delete mode 100644 software/CPM/CPM_MC_D3/RECV.ZY delete mode 100644 software/CPM/CPM_MC_D3/RECVK.ZY delete mode 100644 software/CPM/CPM_MC_D3/RECVX.ZY delete mode 100644 software/CPM/CPM_MC_D3/SEND.ZY delete mode 100644 software/CPM/CPM_MC_D3/SENDK.ZY delete mode 100644 software/CPM/CPM_MC_D3/SENDX.ZY delete mode 100644 software/CPM/CPM_MC_D3/SHRINK.ZY delete mode 100644 software/CPM/CPM_MC_D3/SRSCRN.ZY delete mode 100644 software/CPM/CPM_MC_D3/SRUTIL.ZY delete mode 100644 software/CPM/CPM_MC_D3/TERMCAP.IY delete mode 100644 software/CPM/CPM_MC_D3/TERMIO.ZY delete mode 100644 software/CPM/CPM_MC_D3/VARS.IY delete mode 100644 software/CPM/CPM_MC_D3/VERSION.IY delete mode 100644 software/CPM/CPM_MC_D3/VT100.ZY delete mode 100644 software/CPM/CPM_MC_D3/WHATS.NEW delete mode 100644 software/CPM/CPM_MC_D3/XMODEM.IY delete mode 100644 software/CPM/CPM_MC_D3/XUTIL.ZY delete mode 100644 software/CPM/CPM_MC_D4/CLINK.COM delete mode 100644 software/CPM/CPM_MC_D4/CLINK.DOC delete mode 100644 software/CPM/CPM_MC_D4/CLINKREV.ASM delete mode 100644 software/CPM/CPM_MC_D4/CLINKREV.COM delete mode 100644 software/CPM/CPM_MC_D4/CLINKREV.HEX delete mode 100644 software/CPM/CPM_MC_D4/CLINKREV.SYM delete mode 100644 software/CPM/CPM_MC_D4/CSUS.DOC delete mode 100644 software/CPM/CPM_MC_D4/CSUS1 delete mode 100644 software/CPM/CPM_MC_D4/CSUS2 delete mode 100644 software/CPM/CPM_MC_D4/CSUS3 delete mode 100644 software/CPM/CPM_MC_D4/CSUS4 delete mode 100644 software/CPM/CPM_MC_D4/CSUS5 delete mode 100644 software/CPM/CPM_MC_D4/CSUSCYBR.DOC delete mode 100644 software/CPM/CPM_MC_D4/CSUSRM delete mode 100644 software/CPM/CPM_MC_D4/SACBULL delete mode 100644 software/CPM/CPM_MC_D5/ADDS.DEF delete mode 100644 software/CPM/CPM_MC_D5/AR.COM delete mode 100644 software/CPM/CPM_MC_D5/BITMAP.COM delete mode 100644 software/CPM/CPM_MC_D5/CAT.COM delete mode 100644 software/CPM/CPM_MC_D5/CMP.COM delete mode 100644 software/CPM/CPM_MC_D5/COMPARE4.COM delete mode 100644 software/CPM/CPM_MC_D5/CPU.COM delete mode 100644 software/CPM/CPM_MC_D5/CRT.DAT delete mode 100644 software/CPM/CPM_MC_D5/CUR.COM delete mode 100644 software/CPM/CPM_MC_D5/DATE.COM delete mode 100644 software/CPM/CPM_MC_D5/DATE.DTE delete mode 100644 software/CPM/CPM_MC_D5/DC.COM delete mode 100644 software/CPM/CPM_MC_D5/DHEADER.PRN delete mode 100644 software/CPM/CPM_MC_D5/DIFF.COM delete mode 100644 software/CPM/CPM_MC_D5/DIFF32.COM delete mode 100644 software/CPM/CPM_MC_D5/DIFF48.COM delete mode 100644 software/CPM/CPM_MC_D5/DIFF56.COM delete mode 100644 software/CPM/CPM_MC_D5/DISK.COM delete mode 100644 software/CPM/CPM_MC_D5/DOCTOR.COM delete mode 100644 software/CPM/CPM_MC_D5/DPATCHDJ.HEX delete mode 100644 software/CPM/CPM_MC_D5/GREP.COM delete mode 100644 software/CPM/CPM_MC_D5/HAZEL.COM delete mode 100644 software/CPM/CPM_MC_D5/HAZEL.DEF delete mode 100644 software/CPM/CPM_MC_D5/HELP delete mode 100644 software/CPM/CPM_MC_D5/HELP.COM delete mode 100644 software/CPM/CPM_MC_D5/HELP.DOC delete mode 100644 software/CPM/CPM_MC_D5/HELP.TXT delete mode 100644 software/CPM/CPM_MC_D5/HELP1.HLP delete mode 100644 software/CPM/CPM_MC_D5/HELP2.HLP delete mode 100644 software/CPM/CPM_MC_D5/HELP3.HLP delete mode 100644 software/CPM/CPM_MC_D5/I.HLP delete mode 100644 software/CPM/CPM_MC_D5/INDEX.COM delete mode 100644 software/CPM/CPM_MC_D5/INSTALL.COM delete mode 100644 software/CPM/CPM_MC_D5/INUSE.COM delete mode 100644 software/CPM/CPM_MC_D5/IPATCHDJ.HEX delete mode 100644 software/CPM/CPM_MC_D5/MANUAL.PRN delete mode 100644 software/CPM/CPM_MC_D5/MTEST.COM delete mode 100644 software/CPM/CPM_MC_D5/MTEST2.COM delete mode 100644 software/CPM/CPM_MC_D5/PG.COM delete mode 100644 software/CPM/CPM_MC_D5/PR.COM delete mode 100644 software/CPM/CPM_MC_D5/PRINT.COM delete mode 100644 software/CPM/CPM_MC_D5/README.1ST delete mode 100644 software/CPM/CPM_MC_D5/RM.COM delete mode 100644 software/CPM/CPM_MC_D5/RPL.COM delete mode 100644 software/CPM/CPM_MC_D5/SLEEP.COM delete mode 100644 software/CPM/CPM_MC_D5/SORT.COM delete mode 100644 software/CPM/CPM_MC_D5/SPLIT.COM delete mode 100644 software/CPM/CPM_MC_D5/SUM.COM delete mode 100644 software/CPM/CPM_MC_D5/TOKEN.COM delete mode 100644 software/CPM/CPM_MC_D5/TR.COM delete mode 100644 software/CPM/CPM_MC_D5/U2.DOC delete mode 100644 software/CPM/CPM_MC_D5/U2.TFS delete mode 100644 software/CPM/CPM_MC_D5/UNIQ.COM delete mode 100644 software/CPM/CPM_MC_D5/WORD.COM delete mode 100644 software/CPM/CPM_MC_D5/XDIR.COM delete mode 100644 software/CPM/CPM_MC_D6/AUTO.AQM delete mode 100644 software/CPM/CPM_MC_D6/AUTOLOAD.AQM delete mode 100644 software/CPM/CPM_MC_D6/BARSTOW.DQR delete mode 100644 software/CPM/CPM_MC_D6/BYE2-16.LBR delete mode 100644 software/CPM/CPM_MC_D6/BYECOM.MQC delete mode 100644 software/CPM/CPM_MC_D6/BYESUB.ASM delete mode 100644 software/CPM/CPM_MC_D6/CHAT19.AQM delete mode 100644 software/CPM/CPM_MC_D6/FILFND11.AQM delete mode 100644 software/CPM/CPM_MC_D6/HDOS2CPM.AQM delete mode 100644 software/CPM/CPM_MC_D6/KPRO-BY2.HQP delete mode 100644 software/CPM/CPM_MC_D6/KPROTERM.TXT delete mode 100644 software/CPM/CPM_MC_D6/KPZCPR1A.LBR delete mode 100644 software/CPM/CPM_MC_D6/KZCPR1.LBR delete mode 100644 software/CPM/CPM_MC_D6/M712AC.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712AF.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712AL.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712AP.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712CP.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712DP.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712GP.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712H8.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712HP.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712HZ.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712IN.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712KP.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712MD.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712MM.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712MX.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712NE.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712NM.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712OS.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712OT.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712OX.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712PC.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712PM.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712QS.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712R1.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712SY2.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712TV.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712VT.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712XE.AQM delete mode 100644 software/CPM/CPM_MC_D6/M712ZB.AQM delete mode 100644 software/CPM/CPM_MC_D6/MDM706KP.OQJ delete mode 100644 software/CPM/CPM_MC_D6/MDM712.AQM delete mode 100644 software/CPM/CPM_MC_D6/MDM712.COM delete mode 100644 software/CPM/CPM_MC_D6/MDM712.DOC delete mode 100644 software/CPM/CPM_MC_D6/MDM712.DQC delete mode 100644 software/CPM/CPM_MC_D6/MDM712.IQF delete mode 100644 software/CPM/CPM_MC_D6/MDM712.MSG delete mode 100644 software/CPM/CPM_MC_D6/MDM712.TQT delete mode 100644 software/CPM/CPM_MC_D6/MDM712.UQD delete mode 100644 software/CPM/CPM_MC_D6/MDM712IN.DEX delete mode 100644 software/CPM/CPM_MC_D6/MODEM903.AQM delete mode 100644 software/CPM/CPM_MC_D6/MODEM903.LBR delete mode 100644 software/CPM/CPM_MC_D6/MODEM903.UQD delete mode 100644 software/CPM/CPM_MC_D6/NEWBD23A.AQM delete mode 100644 software/CPM/CPM_MC_D6/RAMDISK.LBR delete mode 100644 software/CPM/CPM_MC_D6/RBBS27.LBR delete mode 100644 software/CPM/CPM_MC_D6/RBBS31.LBR delete mode 100644 software/CPM/CPM_MC_D6/RELOC.TQT delete mode 100644 software/CPM/CPM_MC_D6/RELOCCPM.OBJ delete mode 100644 software/CPM/CPM_MC_D6/SECTION.AQM delete mode 100644 software/CPM/CPM_MC_D6/SECURE.AQM delete mode 100644 software/CPM/CPM_MC_D6/SECURTY2.AQM delete mode 100644 software/CPM/CPM_MC_D6/SMDM53KP.AQM delete mode 100644 software/CPM/CPM_MC_D6/TAG2.LBR delete mode 100644 software/CPM/CPM_MC_D6/TYPE20.LBR delete mode 100644 software/CPM/CPM_MC_D6/USRPW35.AQM delete mode 100644 software/CPM/CPM_MC_D6/WHATSNEW.LBR delete mode 100644 software/CPM/CPM_MC_D6/XMDM52KP.OBJ delete mode 100644 software/CPM/CPM_MC_D6/XMODM75C.LBR delete mode 100644 software/CPM/CPM_MC_D6/ZCPR2-KP.LBR delete mode 100644 software/CPM/CPM_MC_D7/-LT31FIL.LST delete mode 100644 software/CPM/CPM_MC_D7/-LT31LBR.DOC delete mode 100644 software/CPM/CPM_MC_D7/-READ.ME delete mode 100644 software/CPM/CPM_MC_D7/-README.1ST delete mode 100644 software/CPM/CPM_MC_D7/64180.MAC delete mode 100644 software/CPM/CPM_MC_D7/64180OPS.MAC delete mode 100644 software/CPM/CPM_MC_D7/64180OPS.TRY delete mode 100644 software/CPM/CPM_MC_D7/CCINSTAL.MAC delete mode 100644 software/CPM/CPM_MC_D7/CCITCRC.COM delete mode 100644 software/CPM/CPM_MC_D7/DDTDISA.MAC delete mode 100644 software/CPM/CPM_MC_D7/DDTZ27.COM delete mode 100644 software/CPM/CPM_MC_D7/DDTZ27.DOC delete mode 100644 software/CPM/CPM_MC_D7/DDTZ27.MAC delete mode 100644 software/CPM/CPM_MC_D7/DOSPATCH delete mode 100644 software/CPM/CPM_MC_D7/JOB.DOC delete mode 100644 software/CPM/CPM_MC_D7/JOB15.COM delete mode 100644 software/CPM/CPM_MC_D7/JOB15.MAC delete mode 100644 software/CPM/CPM_MC_D7/LT.COM delete mode 100644 software/CPM/CPM_MC_D7/LT31.COM delete mode 100644 software/CPM/CPM_MC_D7/LT31.DOC delete mode 100644 software/CPM/CPM_MC_D7/LT31.FOR delete mode 100644 software/CPM/CPM_MC_D7/LT31.MAC delete mode 100644 software/CPM/CPM_MC_D7/MAKEDDT.BAT delete mode 100644 software/CPM/CPM_MC_D7/MAKEDDT.JOB delete mode 100644 software/CPM/CPM_MC_D7/MAKEDDTZ.JOB delete mode 100644 software/CPM/CPM_MC_D7/MAKEDDTZ.SUB delete mode 100644 software/CPM/CPM_MC_D7/OPTYPE.MAC delete mode 100644 software/CPM/CPM_MC_D7/OPTYPE.TRY delete mode 100644 software/CPM/CPM_MC_D7/OPTYPE.Z80 delete mode 100644 software/CPM/CPM_MC_D7/UNC.REL delete mode 100644 software/CPM/CPM_MC_D7/UNC.SLR delete mode 100644 software/CPM/CPM_MC_D7/UNLZH.REL delete mode 100644 software/CPM/CPM_MC_D7/UNLZH.SLR delete mode 100644 software/CPM/CPM_MC_D7/XTDOPS.LIB delete mode 100644 software/CPM/CPM_MC_D7/XTDOPS.MAC delete mode 100644 software/CPM/CPM_MC_D7/XTDOPS.TRY delete mode 100644 software/CPM/CPM_MC_D8/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_D9/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_E0/ARCV.COM delete mode 100644 software/CPM/CPM_MC_E0/AS.COM delete mode 100644 software/CPM/CPM_MC_E0/ASM.COM delete mode 100644 software/CPM/CPM_MC_E0/C.LIB delete mode 100644 software/CPM/CPM_MC_E0/CC.COM delete mode 100644 software/CPM/CPM_MC_E0/CLRDIR.COM delete mode 100644 software/CPM/CPM_MC_E0/CNM.COM delete mode 100644 software/CPM/CPM_MC_E0/CR.COM delete mode 100644 software/CPM/CPM_MC_E0/CRC.COM delete mode 100644 software/CPM/CPM_MC_E0/CRCK.COM delete mode 100644 software/CPM/CPM_MC_E0/CRUNCH.COM delete mode 100644 software/CPM/CPM_MC_E0/CTYPE.H delete mode 100644 software/CPM/CPM_MC_E0/CZ.COM delete mode 100644 software/CPM/CPM_MC_E0/DBGINST.COM delete mode 100644 software/CPM/CPM_MC_E0/DCON.COM delete mode 100644 software/CPM/CPM_MC_E0/DCON.CTL delete mode 100644 software/CPM/CPM_MC_E0/DCON.DOC delete mode 100644 software/CPM/CPM_MC_E0/DCON.SYM delete mode 100644 software/CPM/CPM_MC_E0/DDT.COM delete mode 100644 software/CPM/CPM_MC_E0/DDTZ.COM delete mode 100644 software/CPM/CPM_MC_E0/DDTZ.DOC delete mode 100644 software/CPM/CPM_MC_E0/DDTZ80.COM delete mode 100644 software/CPM/CPM_MC_E0/DDTZ80.DOC delete mode 100644 software/CPM/CPM_MC_E0/DEBUGZ.COM delete mode 100644 software/CPM/CPM_MC_E0/DEBUGZ.HLP delete mode 100644 software/CPM/CPM_MC_E0/DIF.COM delete mode 100644 software/CPM/CPM_MC_E0/DIRX.COM delete mode 100644 software/CPM/CPM_MC_E0/DUMP.COM delete mode 100644 software/CPM/CPM_MC_E0/ED.COM delete mode 100644 software/CPM/CPM_MC_E0/ERRNO.H delete mode 100644 software/CPM/CPM_MC_E0/FCNTL.H delete mode 100644 software/CPM/CPM_MC_E0/FIND.COM delete mode 100644 software/CPM/CPM_MC_E0/HEX80.COM delete mode 100644 software/CPM/CPM_MC_E0/HIST.UTL delete mode 100644 software/CPM/CPM_MC_E0/IO.H delete mode 100644 software/CPM/CPM_MC_E0/LBREXT.COM delete mode 100644 software/CPM/CPM_MC_E0/LIB.COM delete mode 100644 software/CPM/CPM_MC_E0/LIBC.H delete mode 100644 software/CPM/CPM_MC_E0/LIBUTIL.COM delete mode 100644 software/CPM/CPM_MC_E0/LINK.COM delete mode 100644 software/CPM/CPM_MC_E0/LN.COM delete mode 100644 software/CPM/CPM_MC_E0/LOAD.COM delete mode 100644 software/CPM/CPM_MC_E0/M.LIB delete mode 100644 software/CPM/CPM_MC_E0/MAC.COM delete mode 100644 software/CPM/CPM_MC_E0/MAKE.COM delete mode 100644 software/CPM/CPM_MC_E0/MATH.H delete mode 100644 software/CPM/CPM_MC_E0/MBASIC.COM delete mode 100644 software/CPM/CPM_MC_E0/MEX114.LBR delete mode 100644 software/CPM/CPM_MC_E0/MXO.ASM delete mode 100644 software/CPM/CPM_MC_E0/NSWP207.DOC delete mode 100644 software/CPM/CPM_MC_E0/NULU.COM delete mode 100644 software/CPM/CPM_MC_E0/PIP.COM delete mode 100644 software/CPM/CPM_MC_E0/POWER.COM delete mode 100644 software/CPM/CPM_MC_E0/POWER.HLP delete mode 100644 software/CPM/CPM_MC_E0/QTERM.DAT delete mode 100644 software/CPM/CPM_MC_E0/QTERMS.LIB delete mode 100644 software/CPM/CPM_MC_E0/RMAC.COM delete mode 100644 software/CPM/CPM_MC_E0/ROM.LIB delete mode 100644 software/CPM/CPM_MC_E0/SETJMP.H delete mode 100644 software/CPM/CPM_MC_E0/SETQTERM.COM delete mode 100644 software/CPM/CPM_MC_E0/SGTTY.H delete mode 100644 software/CPM/CPM_MC_E0/SID.COM delete mode 100644 software/CPM/CPM_MC_E0/SIDSYM.COM delete mode 100644 software/CPM/CPM_MC_E0/SQZ.COM delete mode 100644 software/CPM/CPM_MC_E0/STAT.COM delete mode 100644 software/CPM/CPM_MC_E0/STDIO.H delete mode 100644 software/CPM/CPM_MC_E0/SUBMIT.COM delete mode 100644 software/CPM/CPM_MC_E0/SUPERSUB.COM delete mode 100644 software/CPM/CPM_MC_E0/SWEEP.COM delete mode 100644 software/CPM/CPM_MC_E0/T.LIB delete mode 100644 software/CPM/CPM_MC_E0/TAIL.COM delete mode 100644 software/CPM/CPM_MC_E0/TRACE.UTL delete mode 100644 software/CPM/CPM_MC_E0/TYPEZ.COM delete mode 100644 software/CPM/CPM_MC_E0/UNARC.COM delete mode 100644 software/CPM/CPM_MC_E0/UNCR.COM delete mode 100644 software/CPM/CPM_MC_E0/UNLOAD.COM delete mode 100644 software/CPM/CPM_MC_E0/UNZIP.COM delete mode 100644 software/CPM/CPM_MC_E0/VFILER.CZM delete mode 100644 software/CPM/CPM_MC_E0/VFILER.DZC delete mode 100644 software/CPM/CPM_MC_E0/VFILERSC.AZM delete mode 100644 software/CPM/CPM_MC_E0/VIDATT.Z80 delete mode 100644 software/CPM/CPM_MC_E0/WASH15.AZM delete mode 100644 software/CPM/CPM_MC_E0/WASH15.CZM delete mode 100644 software/CPM/CPM_MC_E0/WASH15.DZC delete mode 100644 software/CPM/CPM_MC_E0/WASH15.LBR delete mode 100644 software/CPM/CPM_MC_E0/XSUB.COM delete mode 100644 software/CPM/CPM_MC_E0/ZAP.COM delete mode 100644 software/CPM/CPM_MC_E0/ZDE.COM delete mode 100644 software/CPM/CPM_MC_E0/ZDENST.COM delete mode 100644 software/CPM/CPM_MC_E0/ZSID.COM delete mode 100644 software/CPM/CPM_MC_E0/dump.sym delete mode 100644 software/CPM/CPM_MC_E0/lz.com delete mode 100644 software/CPM/CPM_MC_E0/nswp207.com delete mode 100644 software/CPM/CPM_MC_E0/z80dis.com delete mode 100644 software/CPM/CPM_MC_E0/z80dis.doc delete mode 100644 software/CPM/CPM_MC_E1/0CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_E1/CREF80.COM delete mode 100644 software/CPM/CPM_MC_E1/F80.COM delete mode 100644 software/CPM/CPM_MC_E1/FORLIB.REL delete mode 100644 software/CPM/CPM_MC_E1/HELLO.MAC delete mode 100644 software/CPM/CPM_MC_E1/HELLOF.FOR delete mode 100644 software/CPM/CPM_MC_E1/L80.COM delete mode 100644 software/CPM/CPM_MC_E1/LIB80.COM delete mode 100644 software/CPM/CPM_MC_E1/M80.COM delete mode 100644 software/CPM/CPM_MC_E1/M80SRC.MAC delete mode 100644 software/CPM/CPM_MC_E1/MBASIC.COM delete mode 100644 software/CPM/CPM_MC_E1/MC.SUB delete mode 100644 software/CPM/CPM_MC_E1/OBSLIB.REL delete mode 100644 software/CPM/CPM_MC_E2/ARCV.COM delete mode 100644 software/CPM/CPM_MC_E2/AS.COM delete mode 100644 software/CPM/CPM_MC_E2/C.LIB delete mode 100644 software/CPM/CPM_MC_E2/CC.COM delete mode 100644 software/CPM/CPM_MC_E2/CC.MSG delete mode 100644 software/CPM/CPM_MC_E2/CNM.COM delete mode 100644 software/CPM/CPM_MC_E2/CRC.COM delete mode 100644 software/CPM/CPM_MC_E2/CTYPE.H delete mode 100644 software/CPM/CPM_MC_E2/CZ.COM delete mode 100644 software/CPM/CPM_MC_E2/ERRNO.H delete mode 100644 software/CPM/CPM_MC_E2/EXMPL.C delete mode 100644 software/CPM/CPM_MC_E2/FCNTL.H delete mode 100644 software/CPM/CPM_MC_E2/HEX80.COM delete mode 100644 software/CPM/CPM_MC_E2/IO.H delete mode 100644 software/CPM/CPM_MC_E2/LIBC.H delete mode 100644 software/CPM/CPM_MC_E2/LIBUTIL.COM delete mode 100644 software/CPM/CPM_MC_E2/LN.COM delete mode 100644 software/CPM/CPM_MC_E2/M.LIB delete mode 100644 software/CPM/CPM_MC_E2/MATH.H delete mode 100644 software/CPM/CPM_MC_E2/ROM.LIB delete mode 100644 software/CPM/CPM_MC_E2/SETJMP.H delete mode 100644 software/CPM/CPM_MC_E2/SGTTY.H delete mode 100644 software/CPM/CPM_MC_E2/SIDSYM.COM delete mode 100644 software/CPM/CPM_MC_E2/SQZ.COM delete mode 100644 software/CPM/CPM_MC_E2/STDIO.H delete mode 100644 software/CPM/CPM_MC_E2/T.LIB delete mode 100644 software/CPM/CPM_MC_E2/c.txt delete mode 100644 software/CPM/CPM_MC_E2/m.txt delete mode 100644 software/CPM/CPM_MC_E2/rom.txt delete mode 100644 software/CPM/CPM_MC_E2/t.txt delete mode 100644 software/CPM/CPM_MC_E3/CMDLIN.PAS delete mode 100644 software/CPM/CPM_MC_E3/HELLO.PAS delete mode 100644 software/CPM/CPM_MC_E3/LISTER.PAS delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD00.INC delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD01.INC delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD02.INC delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD03.COM delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD03.INC delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD04.INC delete mode 100644 software/CPM/CPM_MC_E3/MC-MOD05.INC delete mode 100644 software/CPM/CPM_MC_E3/MC.COM delete mode 100644 software/CPM/CPM_MC_E3/MC.HLP delete mode 100644 software/CPM/CPM_MC_E3/MC.PAS delete mode 100644 software/CPM/CPM_MC_E3/MCDEMO.MCS delete mode 100644 software/CPM/CPM_MC_E3/READ.ME delete mode 100644 software/CPM/CPM_MC_E3/TINST.COM delete mode 100644 software/CPM/CPM_MC_E3/TINST.DTA delete mode 100644 software/CPM/CPM_MC_E3/TINST.MSG delete mode 100644 software/CPM/CPM_MC_E3/TURBO.COM delete mode 100644 software/CPM/CPM_MC_E3/TURBO.MSG delete mode 100644 software/CPM/CPM_MC_E3/TURBO.OVR delete mode 100644 software/CPM/CPM_MC_E4/ARITH.MAC delete mode 100644 software/CPM/CPM_MC_E4/ASM.SCR delete mode 100644 software/CPM/CPM_MC_E4/ASM.TXT delete mode 100644 software/CPM/CPM_MC_E4/ASMTEST.SCR delete mode 100644 software/CPM/CPM_MC_E4/BLK2TXT.SCR delete mode 100644 software/CPM/CPM_MC_E4/BREAKGO.SCR delete mode 100644 software/CPM/CPM_MC_E4/COMPARE.MAC delete mode 100644 software/CPM/CPM_MC_E4/COMPILE.MAC delete mode 100644 software/CPM/CPM_MC_E4/CONTROL.MAC delete mode 100644 software/CPM/CPM_MC_E4/DICT.MAC delete mode 100644 software/CPM/CPM_MC_E4/DISCLAIM.TXT delete mode 100644 software/CPM/CPM_MC_E4/DISK.MAC delete mode 100644 software/CPM/CPM_MC_E4/DOS.MAC delete mode 100644 software/CPM/CPM_MC_E4/DOSLIB.SCR delete mode 100644 software/CPM/CPM_MC_E4/DX.COM delete mode 100644 software/CPM/CPM_MC_E4/DXFORTH.GLO delete mode 100644 software/CPM/CPM_MC_E4/DXFORTH.TXT delete mode 100644 software/CPM/CPM_MC_E4/DXFORTH.WDS delete mode 100644 software/CPM/CPM_MC_E4/EDITOR.SCR delete mode 100644 software/CPM/CPM_MC_E4/EXTEND.SCR delete mode 100644 software/CPM/CPM_MC_E4/FACILITY.MAC delete mode 100644 software/CPM/CPM_MC_E4/FCOPY.SCR delete mode 100644 software/CPM/CPM_MC_E4/FILES.TXT delete mode 100644 software/CPM/CPM_MC_E4/FILE_ID.DIZ delete mode 100644 software/CPM/CPM_MC_E4/FLOAT.MAC delete mode 100644 software/CPM/CPM_MC_E4/FORTH-F.COM delete mode 100644 software/CPM/CPM_MC_E4/FORTH.COM delete mode 100644 software/CPM/CPM_MC_E4/INSTALL.COM delete mode 100644 software/CPM/CPM_MC_E4/INSTALL.DTA delete mode 100644 software/CPM/CPM_MC_E4/INSTALL.SCR delete mode 100644 software/CPM/CPM_MC_E4/IO.MAC delete mode 100644 software/CPM/CPM_MC_E4/KERNEL.Z80 delete mode 100644 software/CPM/CPM_MC_E4/LOCALS.SCR delete mode 100644 software/CPM/CPM_MC_E4/MAKEF.SUB delete mode 100644 software/CPM/CPM_MC_E4/MEMORY.MAC delete mode 100644 software/CPM/CPM_MC_E4/MISC.SCR delete mode 100644 software/CPM/CPM_MC_E4/MISER.SCR delete mode 100644 software/CPM/CPM_MC_E4/MULTI.SCR delete mode 100644 software/CPM/CPM_MC_E4/MULTI.TXT delete mode 100644 software/CPM/CPM_MC_E4/NEWAPP.SCR delete mode 100644 software/CPM/CPM_MC_E4/NUMBER.MAC delete mode 100644 software/CPM/CPM_MC_E4/OVERLAY.SCR delete mode 100644 software/CPM/CPM_MC_E4/SED.SCR delete mode 100644 software/CPM/CPM_MC_E4/STACK.MAC delete mode 100644 software/CPM/CPM_MC_E4/STKCHK.SCR delete mode 100644 software/CPM/CPM_MC_E4/STRING.MAC delete mode 100644 software/CPM/CPM_MC_E4/TOOLS.SCR delete mode 100644 software/CPM/CPM_MC_E4/TXT2BLK.SCR delete mode 100644 software/CPM/CPM_MC_E4/WHATSNEW.TXT delete mode 100644 software/CPM/CPM_MC_E5/A.PLI delete mode 100644 software/CPM/CPM_MC_E5/ACK.PLI delete mode 100644 software/CPM/CPM_MC_E5/ACKTST.PLI delete mode 100644 software/CPM/CPM_MC_E5/ALLTST.PLI delete mode 100644 software/CPM/CPM_MC_E5/ANNUITY.PLI delete mode 100644 software/CPM/CPM_MC_E5/CALL.PLI delete mode 100644 software/CPM/CPM_MC_E5/CHESS.PLI delete mode 100644 software/CPM/CPM_MC_E5/COPY.PLI delete mode 100644 software/CPM/CPM_MC_E5/COPYLPT.PLI delete mode 100644 software/CPM/CPM_MC_E5/CPMDIO.ASM delete mode 100644 software/CPM/CPM_MC_E5/CREATE.PLI delete mode 100644 software/CPM/CPM_MC_E5/DECPOLY.PLI delete mode 100644 software/CPM/CPM_MC_E5/DEMO.PLI delete mode 100644 software/CPM/CPM_MC_E5/DEPREC.PLI delete mode 100644 software/CPM/CPM_MC_E5/DFACT.PLI delete mode 100644 software/CPM/CPM_MC_E5/DIO80.DCL delete mode 100644 software/CPM/CPM_MC_E5/DIOCALLS.PLI delete mode 100644 software/CPM/CPM_MC_E5/DIOCOPY.PLI delete mode 100644 software/CPM/CPM_MC_E5/DIOMOD.DCL delete mode 100644 software/CPM/CPM_MC_E5/DIORAND.PLI delete mode 100644 software/CPM/CPM_MC_E5/DIV2.ASM delete mode 100644 software/CPM/CPM_MC_E5/DTEST.PLI delete mode 100644 software/CPM/CPM_MC_E5/ENTER.PLI delete mode 100644 software/CPM/CPM_MC_E5/EXPR1.PLI delete mode 100644 software/CPM/CPM_MC_E5/EXPR2.PLI delete mode 100644 software/CPM/CPM_MC_E5/FCB.DCL delete mode 100644 software/CPM/CPM_MC_E5/FDIV2.ASM delete mode 100644 software/CPM/CPM_MC_E5/FDTEST.PLI delete mode 100644 software/CPM/CPM_MC_E5/FFACT.PLI delete mode 100644 software/CPM/CPM_MC_E5/FLTPOLY.PLI delete mode 100644 software/CPM/CPM_MC_E5/FLTPOLY2.PLI delete mode 100644 software/CPM/CPM_MC_E5/FSCAN.PLI delete mode 100644 software/CPM/CPM_MC_E5/IFACT.PLI delete mode 100644 software/CPM/CPM_MC_E5/INVERT.PLI delete mode 100644 software/CPM/CPM_MC_E5/KEYFILE.PLI delete mode 100644 software/CPM/CPM_MC_E5/LABELS.PLI delete mode 100644 software/CPM/CPM_MC_E5/LIB.COM delete mode 100644 software/CPM/CPM_MC_E5/LINK.COM delete mode 100644 software/CPM/CPM_MC_E5/LOAN1.PLI delete mode 100644 software/CPM/CPM_MC_E5/LOAN2.PLI delete mode 100644 software/CPM/CPM_MC_E5/MAININVT.PLI delete mode 100644 software/CPM/CPM_MC_E5/MATSIZE.LIB delete mode 100644 software/CPM/CPM_MC_E5/MPMCALLA.PLI delete mode 100644 software/CPM/CPM_MC_E5/MPMCALLB.PLI delete mode 100644 software/CPM/CPM_MC_E5/MPMDIO.ASM delete mode 100644 software/CPM/CPM_MC_E5/MPMDIO.DCL delete mode 100644 software/CPM/CPM_MC_E5/NETWORK.PLI delete mode 100644 software/CPM/CPM_MC_E5/OPTIMIS2.PLI delete mode 100644 software/CPM/CPM_MC_E5/OPTIMIST.COM delete mode 100644 software/CPM/CPM_MC_E5/OPTIMIST.PLI delete mode 100644 software/CPM/CPM_MC_E5/PLI.COM delete mode 100644 software/CPM/CPM_MC_E5/PLI0.OVL delete mode 100644 software/CPM/CPM_MC_E5/PLI1.OVL delete mode 100644 software/CPM/CPM_MC_E5/PLI2.OVL delete mode 100644 software/CPM/CPM_MC_E5/PLILIB.IRL delete mode 100644 software/CPM/CPM_MC_E5/RECORD.DCL delete mode 100644 software/CPM/CPM_MC_E5/RELNOTES.PRN delete mode 100644 software/CPM/CPM_MC_E5/REPORT.PLI delete mode 100644 software/CPM/CPM_MC_E5/RETRIEVE.PLI delete mode 100644 software/CPM/CPM_MC_E5/REVERSE.PLI delete mode 100644 software/CPM/CPM_MC_E5/REVERT.PLI delete mode 100644 software/CPM/CPM_MC_E5/RFACT.PLI delete mode 100644 software/CPM/CPM_MC_E5/RMAC.COM delete mode 100644 software/CPM/CPM_MC_E5/SAMPLE.PLI delete mode 100644 software/CPM/CPM_MC_E5/TEST.PLI delete mode 100644 software/CPM/CPM_MC_E5/UPDATE.PLI delete mode 100644 software/CPM/CPM_MC_E5/XREF.COM delete mode 100644 software/CPM/CPM_MC_E5/Z80.LIB delete mode 100644 software/CPM/CPM_MC_E6/ALGINTRO.TXT delete mode 100644 software/CPM/CPM_MC_E6/ALGOLM.COM delete mode 100644 software/CPM/CPM_MC_E6/ALGSTART.TXT delete mode 100644 software/CPM/CPM_MC_E6/ARRAY.ALG delete mode 100644 software/CPM/CPM_MC_E6/BLK.INP delete mode 100644 software/CPM/CPM_MC_E6/BLKTEST.ALG delete mode 100644 software/CPM/CPM_MC_E6/BOOLINT.ALG delete mode 100644 software/CPM/CPM_MC_E6/CASETEST.ALG delete mode 100644 software/CPM/CPM_MC_E6/CASETWO.ALG delete mode 100644 software/CPM/CPM_MC_E6/COMERR.TXT delete mode 100644 software/CPM/CPM_MC_E6/FILE1.INP delete mode 100644 software/CPM/CPM_MC_E6/FILE2.INP delete mode 100644 software/CPM/CPM_MC_E6/FLYTEST.ALG delete mode 100644 software/CPM/CPM_MC_E6/GOTOTEST.ALG delete mode 100644 software/CPM/CPM_MC_E6/HANOI.ALG delete mode 100644 software/CPM/CPM_MC_E6/LUNAR.ALG delete mode 100644 software/CPM/CPM_MC_E6/ONEND2.ALG delete mode 100644 software/CPM/CPM_MC_E6/PERM.ALG delete mode 100644 software/CPM/CPM_MC_E6/READWORD.ALG delete mode 100644 software/CPM/CPM_MC_E6/RFILE.INP delete mode 100644 software/CPM/CPM_MC_E6/RUNALG.COM delete mode 100644 software/CPM/CPM_MC_E6/RUNERR.TXT delete mode 100644 software/CPM/CPM_MC_E6/RWINT.ALG delete mode 100644 software/CPM/CPM_MC_E6/SIISTR.ALG delete mode 100644 software/CPM/CPM_MC_E6/SORT.ALG delete mode 100644 software/CPM/CPM_MC_E6/STRING.ALG delete mode 100644 software/CPM/CPM_MC_E6/STRTST.ALG delete mode 100644 software/CPM/CPM_MC_E6/USRMAN.TXT delete mode 100644 software/CPM/CPM_MC_E6/WINPUT.INP delete mode 100644 software/CPM/CPM_MC_E7/ARCS-DEP.CAL delete mode 100644 software/CPM/CPM_MC_E7/BRKEVN.CAL delete mode 100644 software/CPM/CPM_MC_E7/BUDGET.CAL delete mode 100644 software/CPM/CPM_MC_E7/CHECKS.CAL delete mode 100644 software/CPM/CPM_MC_E7/DATTIM.COM delete mode 100644 software/CPM/CPM_MC_E7/INSTALL.COM delete mode 100644 software/CPM/CPM_MC_E7/INSTALL.DAT delete mode 100644 software/CPM/CPM_MC_E7/INSTALL.OVL delete mode 100644 software/CPM/CPM_MC_E7/MAINTAIN.COM delete mode 100644 software/CPM/CPM_MC_E7/RULE-78.CAL delete mode 100644 software/CPM/CPM_MC_E7/SAMPLE.CAL delete mode 100644 software/CPM/CPM_MC_E7/SC.HLP delete mode 100644 software/CPM/CPM_MC_E7/SC2.COM delete mode 100644 software/CPM/CPM_MC_E7/SC2.HLP delete mode 100644 software/CPM/CPM_MC_E7/SC2.OVL delete mode 100644 software/CPM/CPM_MC_E7/SDI.COM delete mode 100644 software/CPM/CPM_MC_E7/SDI.OVL delete mode 100644 software/CPM/CPM_MC_E7/TEN.CAL delete mode 100644 software/CPM/CPM_MC_E7/TENMIN.CAL delete mode 100644 software/CPM/CPM_MC_E8/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_E9/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_F0/ASM.COM delete mode 100644 software/CPM/CPM_MC_F0/B29.COM delete mode 100644 software/CPM/CPM_MC_F0/B29INST.COM delete mode 100644 software/CPM/CPM_MC_F0/B29V304.WS delete mode 100644 software/CPM/CPM_MC_F0/CR.COM delete mode 100644 software/CPM/CPM_MC_F0/CREF80.COM delete mode 100644 software/CPM/CPM_MC_F0/DDT.COM delete mode 100644 software/CPM/CPM_MC_F0/DDTZ.COM delete mode 100644 software/CPM/CPM_MC_F0/DDTZ.DOC delete mode 100644 software/CPM/CPM_MC_F0/DDTZ80.COM delete mode 100644 software/CPM/CPM_MC_F0/DDTZ80.DOC delete mode 100644 software/CPM/CPM_MC_F0/DEBUGZ.LBR delete mode 100644 software/CPM/CPM_MC_F0/DUMP.COM delete mode 100644 software/CPM/CPM_MC_F0/ED.COM delete mode 100644 software/CPM/CPM_MC_F0/LBREXT.COM delete mode 100644 software/CPM/CPM_MC_F0/LINK.COM delete mode 100644 software/CPM/CPM_MC_F0/LOAD.COM delete mode 100644 software/CPM/CPM_MC_F0/LS.COM delete mode 100644 software/CPM/CPM_MC_F0/LU.COM delete mode 100644 software/CPM/CPM_MC_F0/LZ.COM delete mode 100644 software/CPM/CPM_MC_F0/MAC.COM delete mode 100644 software/CPM/CPM_MC_F0/MC.SUB delete mode 100644 software/CPM/CPM_MC_F0/NSWP207.COM delete mode 100644 software/CPM/CPM_MC_F0/NSWP207.DOC delete mode 100644 software/CPM/CPM_MC_F0/NSWP207.LBR delete mode 100644 software/CPM/CPM_MC_F0/NULU.COM delete mode 100644 software/CPM/CPM_MC_F0/NULU.TXT delete mode 100644 software/CPM/CPM_MC_F0/PIP.COM delete mode 100644 software/CPM/CPM_MC_F0/RMAC.COM delete mode 100644 software/CPM/CPM_MC_F0/SHOWSEC.COM delete mode 100644 software/CPM/CPM_MC_F0/SID.COM delete mode 100644 software/CPM/CPM_MC_F0/SPEED.COM delete mode 100644 software/CPM/CPM_MC_F0/STAT.COM delete mode 100644 software/CPM/CPM_MC_F0/SUBMIT.COM delete mode 100644 software/CPM/CPM_MC_F0/SUPERSUB.COM delete mode 100644 software/CPM/CPM_MC_F0/SURVEY.COM delete mode 100644 software/CPM/CPM_MC_F0/SURVEY.MAC delete mode 100644 software/CPM/CPM_MC_F0/UNARC.COM delete mode 100644 software/CPM/CPM_MC_F0/UNCR.COM delete mode 100644 software/CPM/CPM_MC_F0/UNERA.MAC delete mode 100644 software/CPM/CPM_MC_F0/UNZIP.COM delete mode 100644 software/CPM/CPM_MC_F0/USQ.COM delete mode 100644 software/CPM/CPM_MC_F0/VFILER.COM delete mode 100644 software/CPM/CPM_MC_F0/VFILER.DOC delete mode 100644 software/CPM/CPM_MC_F0/VFILERSC.ASM delete mode 100644 software/CPM/CPM_MC_F0/WASH15.ASM delete mode 100644 software/CPM/CPM_MC_F0/WASH15.COM delete mode 100644 software/CPM/CPM_MC_F0/WASH15.DOC delete mode 100644 software/CPM/CPM_MC_F0/XSUB.COM delete mode 100644 software/CPM/CPM_MC_F0/ZAP.COM delete mode 100644 software/CPM/CPM_MC_F0/ZCNFG.COM delete mode 100644 software/CPM/CPM_MC_F0/ZCNFG24.CFG delete mode 100644 software/CPM/CPM_MC_F0/ZDE.COM delete mode 100644 software/CPM/CPM_MC_F0/ZDE40.COM delete mode 100644 software/CPM/CPM_MC_F0/ZDENST.COM delete mode 100644 software/CPM/CPM_MC_F0/ZSID.COM delete mode 100644 software/CPM/CPM_MC_F0/ZTRAN4.COM delete mode 100644 software/CPM/CPM_MC_F0/pmautoae.com delete mode 100644 software/CPM/CPM_MC_F1/diskio.com delete mode 100644 software/CPM/CPM_MC_F1/ppide.com delete mode 100644 software/CPM/CPM_MC_F1/ppide.sys delete mode 100644 software/CPM/CPM_MC_F1/ppidexz.com delete mode 100644 software/CPM/CPM_MC_F1/ppidexz.sys delete mode 100644 software/CPM/CPM_MC_F1/readme.txt delete mode 100644 software/CPM/CPM_MC_F1/romrenam.bat delete mode 100644 software/CPM/CPM_MC_F1/std.com delete mode 100644 software/CPM/CPM_MC_F1/std.sys delete mode 100644 software/CPM/CPM_MC_F1/stdxz.com delete mode 100644 software/CPM/CPM_MC_F1/stdxz.sys delete mode 100644 software/CPM/CPM_MC_F1/zpp.com delete mode 100644 software/CPM/CPM_MC_F1/zpp.sys delete mode 100644 software/CPM/CPM_MC_F1/zppxz.com delete mode 100644 software/CPM/CPM_MC_F1/zppxz.sys delete mode 100644 software/CPM/CPM_MC_F1/ztd.com delete mode 100644 software/CPM/CPM_MC_F1/ztd.sys delete mode 100644 software/CPM/CPM_MC_F1/ztdxz.com delete mode 100644 software/CPM/CPM_MC_F1/ztdxz.sys delete mode 100644 software/CPM/CPM_MC_F2/!(C)1988.TXT delete mode 100644 software/CPM/CPM_MC_F2/!NZ-COM.TXT delete mode 100644 software/CPM/CPM_MC_F2/!VERS--1.2H delete mode 100644 software/CPM/CPM_MC_F2/ALIAS.CMD delete mode 100644 software/CPM/CPM_MC_F2/ARUNZ.COM delete mode 100644 software/CPM/CPM_MC_F2/BGZRDS19.LBR delete mode 100644 software/CPM/CPM_MC_F2/CLEDINST.COM delete mode 100644 software/CPM/CPM_MC_F2/CLEDSAVE.COM delete mode 100644 software/CPM/CPM_MC_F2/COMMON.CRC delete mode 100644 software/CPM/CPM_MC_F2/CONFIG.LBR delete mode 100644 software/CPM/CPM_MC_F2/COPY.COM delete mode 100644 software/CPM/CPM_MC_F2/CPSET.COM delete mode 100644 software/CPM/CPM_MC_F2/CRUNCH.COM delete mode 100644 software/CPM/CPM_MC_F2/DOCFILES.LBR delete mode 100644 software/CPM/CPM_MC_F2/EDITNDR.COM delete mode 100644 software/CPM/CPM_MC_F2/FCP.LBR delete mode 100644 software/CPM/CPM_MC_F2/FF.COM delete mode 100644 software/CPM/CPM_MC_F2/HELP.COM delete mode 100644 software/CPM/CPM_MC_F2/HLPFILES.LBR delete mode 100644 software/CPM/CPM_MC_F2/IF.COM delete mode 100644 software/CPM/CPM_MC_F2/JETLDR.COM delete mode 100644 software/CPM/CPM_MC_F2/LBREXT.COM delete mode 100644 software/CPM/CPM_MC_F2/LBRHELP.COM delete mode 100644 software/CPM/CPM_MC_F2/LDIR.COM delete mode 100644 software/CPM/CPM_MC_F2/LPUT.COM delete mode 100644 software/CPM/CPM_MC_F2/LSH-HELP.COM delete mode 100644 software/CPM/CPM_MC_F2/LSH.COM delete mode 100644 software/CPM/CPM_MC_F2/LSH.WZ delete mode 100644 software/CPM/CPM_MC_F2/LSHINST.COM delete mode 100644 software/CPM/CPM_MC_F2/LX.COM delete mode 100644 software/CPM/CPM_MC_F2/MKZCM.COM delete mode 100644 software/CPM/CPM_MC_F2/NAME.COM delete mode 100644 software/CPM/CPM_MC_F2/NZ-DBASE.INF delete mode 100644 software/CPM/CPM_MC_F2/NZBLITZ.COM delete mode 100644 software/CPM/CPM_MC_F2/NZBLTZ14.CFG delete mode 100644 software/CPM/CPM_MC_F2/NZBLTZ14.HZP delete mode 100644 software/CPM/CPM_MC_F2/NZCOM.COM delete mode 100644 software/CPM/CPM_MC_F2/NZCOM.LBR delete mode 100644 software/CPM/CPM_MC_F2/NZCPR.LBR delete mode 100644 software/CPM/CPM_MC_F2/PATH.COM delete mode 100644 software/CPM/CPM_MC_F2/PUBLIC.COM delete mode 100644 software/CPM/CPM_MC_F2/PWD.COM delete mode 100644 software/CPM/CPM_MC_F2/RCP.LBR delete mode 100644 software/CPM/CPM_MC_F2/RELEASE.NOT delete mode 100644 software/CPM/CPM_MC_F2/SAINST.COM delete mode 100644 software/CPM/CPM_MC_F2/SALIAS.COM delete mode 100644 software/CPM/CPM_MC_F2/SAVENDR.COM delete mode 100644 software/CPM/CPM_MC_F2/SDZ.COM delete mode 100644 software/CPM/CPM_MC_F2/SHOW.COM delete mode 100644 software/CPM/CPM_MC_F2/SUB.COM delete mode 100644 software/CPM/CPM_MC_F2/TCAP.LBR delete mode 100644 software/CPM/CPM_MC_F2/TCJ.INF delete mode 100644 software/CPM/CPM_MC_F2/TCJ25.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ26.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ27.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ28.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ29.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ30.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ31UPD.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ32.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCJ33UPD.WZ delete mode 100644 software/CPM/CPM_MC_F2/TCSELECT.COM delete mode 100644 software/CPM/CPM_MC_F2/TY3ERA.COM delete mode 100644 software/CPM/CPM_MC_F2/TY3REN.COM delete mode 100644 software/CPM/CPM_MC_F2/TY4ERA.COM delete mode 100644 software/CPM/CPM_MC_F2/TY4REN.COM delete mode 100644 software/CPM/CPM_MC_F2/TY4SAVE.COM delete mode 100644 software/CPM/CPM_MC_F2/TY4SP.COM delete mode 100644 software/CPM/CPM_MC_F2/UNCRUNCH.COM delete mode 100644 software/CPM/CPM_MC_F2/VIEW.COM delete mode 100644 software/CPM/CPM_MC_F2/XTCAP.COM delete mode 100644 software/CPM/CPM_MC_F2/Z3LOC.COM delete mode 100644 software/CPM/CPM_MC_F2/Z3TCAP.TCP delete mode 100644 software/CPM/CPM_MC_F2/ZCNFG.COM delete mode 100644 software/CPM/CPM_MC_F2/ZERR.COM delete mode 100644 software/CPM/CPM_MC_F2/ZEX.COM delete mode 100644 software/CPM/CPM_MC_F2/ZF-DIM.COM delete mode 100644 software/CPM/CPM_MC_F2/ZF-REV.COM delete mode 100644 software/CPM/CPM_MC_F2/ZFILEB38.LZT delete mode 100644 software/CPM/CPM_MC_F2/ZFILER.CMD delete mode 100644 software/CPM/CPM_MC_F2/ZHELPERS.LZT delete mode 100644 software/CPM/CPM_MC_F2/ZLT.COM delete mode 100644 software/CPM/CPM_MC_F2/ZNODES66.LZT delete mode 100644 software/CPM/CPM_MC_F2/ZSYSTEM.IZF delete mode 100644 software/CPM/CPM_MC_F3/BALSHEET.CSD delete mode 100644 software/CPM/CPM_MC_F3/BATCH.OVR delete mode 100644 software/CPM/CPM_MC_F3/CD.COM delete mode 100644 software/CPM/CPM_MC_F3/CLIENTSR.DEF delete mode 100644 software/CPM/CPM_MC_F3/CLIENTSR.DTA delete mode 100644 software/CPM/CPM_MC_F3/CLIENTSR.NDX delete mode 100644 software/CPM/CPM_MC_F3/COLTAB.MAC delete mode 100644 software/CPM/CPM_MC_F3/CS.COM delete mode 100644 software/CPM/CPM_MC_F3/CS.OVR delete mode 100644 software/CPM/CPM_MC_F3/CSDUMP.COM delete mode 100644 software/CPM/CPM_MC_F3/CSDUMP.OVR delete mode 100644 software/CPM/CPM_MC_F3/CSMASK.MSK delete mode 100644 software/CPM/CPM_MC_F3/CUSTOMER.DTA delete mode 100644 software/CPM/CPM_MC_F3/CUSTOMER.DTB delete mode 100644 software/CPM/CPM_MC_F3/CUSTOMER.NDX delete mode 100644 software/CPM/CPM_MC_F3/CUSTOMER.NDY delete mode 100644 software/CPM/CPM_MC_F3/DATASTAR.COM delete mode 100644 software/CPM/CPM_MC_F3/DINSTALL.COM delete mode 100644 software/CPM/CPM_MC_F3/EBCTAB.MAC delete mode 100644 software/CPM/CPM_MC_F3/FORMAT.FMT delete mode 100644 software/CPM/CPM_MC_F3/FORMGEN.COM delete mode 100644 software/CPM/CPM_MC_F3/FORMSORT.COM delete mode 100644 software/CPM/CPM_MC_F3/FORMSORT.OVR delete mode 100644 software/CPM/CPM_MC_F3/HELP1.CSD delete mode 100644 software/CPM/CPM_MC_F3/HELP2.CSD delete mode 100644 software/CPM/CPM_MC_F3/HELPER.CSD delete mode 100644 software/CPM/CPM_MC_F3/HELPER.DMP delete mode 100644 software/CPM/CPM_MC_F3/INDEX.COM delete mode 100644 software/CPM/CPM_MC_F3/INSTCS.COM delete mode 100644 software/CPM/CPM_MC_F3/INSTCS.DAT delete mode 100644 software/CPM/CPM_MC_F3/INSTCS.OVR delete mode 100644 software/CPM/CPM_MC_F3/INVCE.DEF delete mode 100644 software/CPM/CPM_MC_F3/INVCE.DTA delete mode 100644 software/CPM/CPM_MC_F3/INVCE.NDX delete mode 100644 software/CPM/CPM_MC_F3/MACHINES.TXT delete mode 100644 software/CPM/CPM_MC_F3/MAILMRGE.OVR delete mode 100644 software/CPM/CPM_MC_F3/MENU.COM delete mode 100644 software/CPM/CPM_MC_F3/MPMPATCH.COM delete mode 100644 software/CPM/CPM_MC_F3/NOCOL.REL delete mode 100644 software/CPM/CPM_MC_F3/NOERR.REL delete mode 100644 software/CPM/CPM_MC_F3/NOREPORT.REL delete mode 100644 software/CPM/CPM_MC_F3/NOSEL.REL delete mode 100644 software/CPM/CPM_MC_F3/OKSTATES.DTA delete mode 100644 software/CPM/CPM_MC_F3/OKSTATES.NDX delete mode 100644 software/CPM/CPM_MC_F3/ORDER.DEF delete mode 100644 software/CPM/CPM_MC_F3/PAYMENTS.DEF delete mode 100644 software/CPM/CPM_MC_F3/PAYMENTS.DTA delete mode 100644 software/CPM/CPM_MC_F3/PAYMENTS.NDX delete mode 100644 software/CPM/CPM_MC_F3/PRINT.TST delete mode 100644 software/CPM/CPM_MC_F3/PRODUCTR.DEF delete mode 100644 software/CPM/CPM_MC_F3/PRODUCTR.DTA delete mode 100644 software/CPM/CPM_MC_F3/PRODUCTR.NDX delete mode 100644 software/CPM/CPM_MC_F3/PRODUCTS.DTA delete mode 100644 software/CPM/CPM_MC_F3/PRODUCTS.NDX delete mode 100644 software/CPM/CPM_MC_F3/PUTEOF.COM delete mode 100644 software/CPM/CPM_MC_F3/REDIT.COM delete mode 100644 software/CPM/CPM_MC_F3/REMSGS.OVR delete mode 100644 software/CPM/CPM_MC_F3/REPORT.COM delete mode 100644 software/CPM/CPM_MC_F3/RGEN.COM delete mode 100644 software/CPM/CPM_MC_F3/RINSTALL.COM delete mode 100644 software/CPM/CPM_MC_F3/RSMSGS.OVR delete mode 100644 software/CPM/CPM_MC_F3/SAMPLE.DAT delete mode 100644 software/CPM/CPM_MC_F3/SAMPLE.TXT delete mode 100644 software/CPM/CPM_MC_F3/SORLIB.REL delete mode 100644 software/CPM/CPM_MC_F3/SORT.COM delete mode 100644 software/CPM/CPM_MC_F3/SORT.REL delete mode 100644 software/CPM/CPM_MC_F3/SP.COM delete mode 100644 software/CPM/CPM_MC_F3/SPELSTAR.DCT delete mode 100644 software/CPM/CPM_MC_F3/SPELSTAR.OVR delete mode 100644 software/CPM/CPM_MC_F3/STAFF.DEF delete mode 100644 software/CPM/CPM_MC_F3/STAFF.DTA delete mode 100644 software/CPM/CPM_MC_F3/STAFF.NDX delete mode 100644 software/CPM/CPM_MC_F3/STARINDX.COM delete mode 100644 software/CPM/CPM_MC_F3/STYLE.COM delete mode 100644 software/CPM/CPM_MC_F3/SUBRDEMO.MAC delete mode 100644 software/CPM/CPM_MC_F3/SYSEQA.MAC delete mode 100644 software/CPM/CPM_MC_F3/TERMCAP.SYS delete mode 100644 software/CPM/CPM_MC_F3/WINSTALL.COM delete mode 100644 software/CPM/CPM_MC_F3/WM.COM delete mode 100644 software/CPM/CPM_MC_F3/WM.HLP delete mode 100644 software/CPM/CPM_MC_F3/WS.COM delete mode 100644 software/CPM/CPM_MC_F3/WS.INS delete mode 100644 software/CPM/CPM_MC_F3/WSMSGS.OVR delete mode 100644 software/CPM/CPM_MC_F3/WSOVLY1.OVR delete mode 100644 software/CPM/CPM_MC_F3/WSU.COM delete mode 100644 software/CPM/CPM_MC_F4/INSTALL.COM delete mode 100644 software/CPM/CPM_MC_F4/INSTALL.DAT delete mode 100644 software/CPM/CPM_MC_F4/INSTALL.LD delete mode 100644 software/CPM/CPM_MC_F4/INSTALL.MSG delete mode 100644 software/CPM/CPM_MC_F4/INSTALL.SPC delete mode 100644 software/CPM/CPM_MC_F4/MP.COD delete mode 100644 software/CPM/CPM_MC_F4/MP.COM delete mode 100644 software/CPM/CPM_MC_F4/MP.HLP delete mode 100644 software/CPM/CPM_MC_F4/MP40 delete mode 100644 software/CPM/CPM_MC_F4/MP40.X delete mode 100644 software/CPM/CPM_MC_F4/MP80 delete mode 100644 software/CPM/CPM_MC_F4/MP80.x delete mode 100644 software/CPM/CPM_MC_F5/DBASE.COM delete mode 100644 software/CPM/CPM_MC_F5/DBASEMSG.TXT delete mode 100644 software/CPM/CPM_MC_F5/DBASEOVR.COM delete mode 100644 software/CPM/CPM_MC_F5/INSTALL.COM delete mode 100644 software/CPM/CPM_MC_F5/NAMES.DBF delete mode 100644 software/CPM/CPM_MC_F5/SP-HELP.CMD delete mode 100644 software/CPM/CPM_MC_F5/SP-MAIN.CMD delete mode 100644 software/CPM/CPM_MC_F6/DWG.LBR delete mode 100644 software/CPM/CPM_MC_F6/access.com delete mode 100644 software/CPM/CPM_MC_F6/cpmname.com delete mode 100644 software/CPM/CPM_MC_F6/dwg-apps.man delete mode 100644 software/CPM/CPM_MC_F6/findfile.com delete mode 100644 software/CPM/CPM_MC_F6/map.com delete mode 100644 software/CPM/CPM_MC_F6/meta.com delete mode 100644 software/CPM/CPM_MC_F6/multifmt.com delete mode 100644 software/CPM/CPM_MC_F6/rem.com delete mode 100644 software/CPM/CPM_MC_F6/setlabel.com delete mode 100644 software/CPM/CPM_MC_F6/sysgen.com delete mode 100644 software/CPM/CPM_MC_F6/termtype.com delete mode 100644 software/CPM/CPM_MC_F6/view.com delete mode 100644 software/CPM/CPM_MC_F7/CONTENTS.TXT delete mode 100644 software/CPM/CPM_MC_F8/USQ.COM delete mode 100644 software/CPM/CPM_MC_F8/autocpm.com delete mode 100644 software/CPM/CPM_MC_F8/booz.com delete mode 100644 software/CPM/CPM_MC_F8/cct.com delete mode 100644 software/CPM/CPM_MC_F8/ch.com delete mode 100644 software/CPM/CPM_MC_F8/cmp.com delete mode 100644 software/CPM/CPM_MC_F8/common.com delete mode 100644 software/CPM/CPM_MC_F8/cp.com delete mode 100644 software/CPM/CPM_MC_F8/ctype.com delete mode 100644 software/CPM/CPM_MC_F8/ctype.doc delete mode 100644 software/CPM/CPM_MC_F8/d.com delete mode 100644 software/CPM/CPM_MC_F8/dif2.com delete mode 100644 software/CPM/CPM_MC_F8/difdoc.doc delete mode 100644 software/CPM/CPM_MC_F8/erase.sub delete mode 100644 software/CPM/CPM_MC_F8/field.com delete mode 100644 software/CPM/CPM_MC_F8/find.com delete mode 100644 software/CPM/CPM_MC_F8/fullprmp.sub delete mode 100644 software/CPM/CPM_MC_F8/grep.com delete mode 100644 software/CPM/CPM_MC_F8/hcat.com delete mode 100644 software/CPM/CPM_MC_F8/lpr.com delete mode 100644 software/CPM/CPM_MC_F8/ls.com delete mode 100644 software/CPM/CPM_MC_F8/ls.doc delete mode 100644 software/CPM/CPM_MC_F8/merge.com delete mode 100644 software/CPM/CPM_MC_F8/merge.doc delete mode 100644 software/CPM/CPM_MC_F8/more.com delete mode 100644 software/CPM/CPM_MC_F8/more12.doc delete mode 100644 software/CPM/CPM_MC_F8/normprmp.sub delete mode 100644 software/CPM/CPM_MC_F8/pg.com delete mode 100644 software/CPM/CPM_MC_F8/prep.com delete mode 100644 software/CPM/CPM_MC_F8/rz.com delete mode 100644 software/CPM/CPM_MC_F8/sh.com delete mode 100644 software/CPM/CPM_MC_F8/sh.ovr delete mode 100644 software/CPM/CPM_MC_F8/sh.txt delete mode 100644 software/CPM/CPM_MC_F8/sh121.com delete mode 100644 software/CPM/CPM_MC_F8/shbak.com delete mode 100644 software/CPM/CPM_MC_F8/shsave.com delete mode 100644 software/CPM/CPM_MC_F8/sort.com delete mode 100644 software/CPM/CPM_MC_F8/sort.doc delete mode 100644 software/CPM/CPM_MC_F8/sort2.com delete mode 100644 software/CPM/CPM_MC_F8/ssed2.com delete mode 100644 software/CPM/CPM_MC_F8/sz.com delete mode 100644 software/CPM/CPM_MC_F8/tr.com delete mode 100644 software/CPM/CPM_MC_F8/uniq.com delete mode 100644 software/CPM/CPM_MC_F8/utool.man delete mode 100644 software/CPM/CPM_MC_F8/utool2.man delete mode 100644 software/CPM/CPM_MC_F8/uudecode.com delete mode 100644 software/CPM/CPM_MC_F8/uuencode.com delete mode 100644 software/CPM/CPM_MC_F8/vsplit.com delete mode 100644 software/CPM/CPM_MC_F8/wc.com delete mode 100644 software/CPM/CPM_MC_F8/zcal.com delete mode 100644 software/CPM/CPM_MC_F9/CONTENTS.TXT delete mode 100644 software/CPM/CPM_RFS_1/BBCBASIC.COM delete mode 100644 software/CPM/CPM_RFS_1/CAT.COM delete mode 100644 software/CPM/CPM_RFS_1/DDT.COM delete mode 100644 software/CPM/CPM_RFS_1/DIFF.COM delete mode 100644 software/CPM/CPM_RFS_1/GREP.COM delete mode 100644 software/CPM/CPM_RFS_1/M80.COM delete mode 100644 software/CPM/CPM_RFS_1/RM.COM delete mode 100644 software/CPM/CPM_RFS_1/SORT.COM delete mode 100644 software/CPM/CPM_RFS_1/SPLIT.COM delete mode 100644 software/CPM/CPM_RFS_1/TR.COM delete mode 100644 software/CPM/CPM_RFS_1/XDIR.COM delete mode 100644 software/CPM/CPM_RFS_1/ZSID.COM delete mode 100644 software/CPM/CPM_RFS_1/asm.com delete mode 100644 software/CPM/CPM_RFS_1/dump.com delete mode 100644 software/CPM/CPM_RFS_1/ed.com delete mode 100644 software/CPM/CPM_RFS_1/genhex.com delete mode 100644 software/CPM/CPM_RFS_1/load.com delete mode 100644 software/CPM/CPM_RFS_1/mac.com delete mode 100644 software/CPM/CPM_RFS_1/mbasic.com delete mode 100644 software/CPM/CPM_RFS_1/mbasic85.com delete mode 100644 software/CPM/CPM_RFS_1/peg.com delete mode 100644 software/CPM/CPM_RFS_1/pip.com delete mode 100644 software/CPM/CPM_RFS_1/stat.com delete mode 100644 software/CPM/CPM_RFS_1/submit.com delete mode 100644 software/CPM/CPM_RFS_1/xsub.com delete mode 100644 software/CPM/CPM_RFS_1/zde16.com delete mode 100644 software/CPM/CPM_RFS_2/L80.COM delete mode 100644 software/CPM/CPM_RFS_2/M80.COM delete mode 100644 software/CPM/CPM_RFS_2/bascom.com delete mode 100644 software/CPM/CPM_RFS_2/bascom.hlp delete mode 100644 software/CPM/CPM_RFS_2/bascom2.hlp delete mode 100644 software/CPM/CPM_RFS_2/baslib.rel delete mode 100644 software/CPM/CPM_RFS_2/brun.com delete mode 100644 software/CPM/CPM_RFS_2/cref.com delete mode 100644 software/CPM/CPM_RFS_2/cref80.com delete mode 100644 software/CPM/CPM_RFS_2/lib80.com delete mode 100644 software/CPM/CPM_RFS_2/mbasic.com delete mode 100644 software/CPM/CPM_RFS_2/obslib.rel delete mode 100644 software/CPM/CPM_RFS_2/rantest.asc delete mode 100644 software/CPM/CPM_RFS_2/rantest.bas delete mode 100644 software/CPM/CPM_RFS_2/rantest.com delete mode 100644 software/CPM/CPM_RFS_2/rantest.rel delete mode 100644 software/CPM/CPM_RFS_2/readme.txt delete mode 100644 software/MZF/1Z-013B.MZF delete mode 100644 software/MZF/2Z009E.MZF delete mode 100644 software/MZF/2z-046a.MZF delete mode 100644 software/MZF/5Z-009A.MZF delete mode 100644 software/MZF/5Z-009B.MZF delete mode 100644 software/MZF/6502_Betriebssys.MZF delete mode 100644 software/MZF/80A PENCIL.A2_C2.MZF delete mode 100644 software/MZF/80A PENCIL.A2_S.MZF delete mode 100644 software/MZF/80A_PENCIL.A2_C2.MZF delete mode 100644 software/MZF/80A_PENCIL.A2_S.MZF delete mode 100644 software/MZF/80zbasic.MZF delete mode 100644 software/MZF/A-BASIC_SA-5510.MZF delete mode 100644 software/MZF/AIP_-_LOGO_xrr.MZF delete mode 100644 software/MZF/APOLLO CHESS v2a.MZF delete mode 100644 software/MZF/APOLLO_CHESS_v2a.MZF delete mode 100644 software/MZF/B880 MASTER.MZF delete mode 100644 software/MZF/B880.A3_P6.MZF delete mode 100644 software/MZF/B880_MASTER.MZF delete mode 100644 software/MZF/BAS MOD v3.74.MZF delete mode 100644 software/MZF/BASIC SA-5575_C.MZF delete mode 100644 software/MZF/BASIC SA-5575_S.MZF delete mode 100644 software/MZF/BASIC SA-5577_C.MZF delete mode 100644 software/MZF/BASIC SA-5577_S.MZF delete mode 100644 software/MZF/BASIC SA-5580.MZF delete mode 100644 software/MZF/BASIC.MZF delete mode 100644 software/MZF/BASIC.SA-5510.MZF delete mode 100644 software/MZF/BASIC80A.MZF delete mode 100644 software/MZF/BASICRFS.MZF delete mode 100644 software/MZF/BASIC_MZ-5Z008.MZF delete mode 100644 software/MZF/BASIC_MZ-5Z008_2.MZF delete mode 100644 software/MZF/BASIC_MZ-5Z009.MZF delete mode 100644 software/MZF/BASIC_MZ-5Z009_modified.MZF delete mode 100644 software/MZF/BASIC_OM-1000.MZF delete mode 100644 software/MZF/BASIC_OM-1001.MZF delete mode 100644 software/MZF/BASIC_OM-500.MZF delete mode 100644 software/MZF/BASIC_SA-5575_C.MZF delete mode 100644 software/MZF/BASIC_SA-5575_S.MZF delete mode 100644 software/MZF/BASIC_SA-5577_C.MZF delete mode 100644 software/MZF/BASIC_SA-5577_S.MZF delete mode 100644 software/MZF/BASIC_SA-5580.MZF delete mode 100644 software/MZF/BASIC_SP-5025.MZF delete mode 100644 software/MZF/BAS_MOD_v3.74.MZF delete mode 100644 software/MZF/BATTLE_GAME.MZF delete mode 100644 software/MZF/BINARY COUNT.MZF delete mode 100644 software/MZF/BINARY_COUNT.MZF delete mode 100644 software/MZF/BYTESAVER SA5510.MZF delete mode 100644 software/MZF/BYTESAVER_SA5510.MZF delete mode 100644 software/MZF/CLUB COPY.U1.MZF delete mode 100644 software/MZF/CLUB MON.A1_M.MZF delete mode 100644 software/MZF/CLUB MON.A1_S.MZF delete mode 100644 software/MZF/CLUB_COPY.U1.MZF delete mode 100644 software/MZF/CLUB_MON.A1_M.MZF delete mode 100644 software/MZF/CLUB_MON.A1_S.MZF delete mode 100644 software/MZF/COLONY.MZF delete mode 100644 software/MZF/COMPILER_A2.MZF delete mode 100644 software/MZF/CONVERTER A_700.MZF delete mode 100644 software/MZF/CONVERTER.MZF delete mode 100644 software/MZF/CONVERTER_A_700.MZF delete mode 100644 software/MZF/COPIER.MZF delete mode 100644 software/MZF/COSMO_BLASTER_MZ700.MZF delete mode 100644 software/MZF/CPM_RFS_1.MZF delete mode 100644 software/MZF/CPM_RFS_2.MZF delete mode 100644 software/MZF/CRUISER3_MZ1500.M12 delete mode 100644 software/MZF/DCS MZ80A APPEND.MZF delete mode 100644 software/MZF/DCS MZ80A RENUM.MZF delete mode 100644 software/MZF/DCS_MZ80A_APPEND.MZF delete mode 100644 software/MZF/DCS_MZ80A_RENUM.MZF delete mode 100644 software/MZF/DELETE.MZF delete mode 100644 software/MZF/DISASM 8800.A15.MZF delete mode 100644 software/MZF/DISASM B800.A15.MZF delete mode 100644 software/MZF/DISASM_8800.A15.MZF delete mode 100644 software/MZF/DISASM_B800.A15.MZF delete mode 100644 software/MZF/DISKEDIT.A4B.MZF delete mode 100644 software/MZF/DISKEDIT.A7_40T.MZF delete mode 100644 software/MZF/Doordoor.mzt delete mode 100644 software/MZF/EXPRESS BAS_700.MZF delete mode 100644 software/MZF/EXPRESS COMPILER.MZF delete mode 100644 software/MZF/EXPRESS PLUS.MZF delete mode 100644 software/MZF/EXPRESS_BAS_700.MZF delete mode 100644 software/MZF/EXPRESS_COMPILER.MZF delete mode 100644 software/MZF/EXPRESS_PLUS.MZF delete mode 100644 software/MZF/EXT.BASIC_OM-500.MZF delete mode 100644 software/MZF/FDCOPY.MZF delete mode 100644 software/MZF/FDCOPY.MZT delete mode 100644 software/MZF/FD_Editor_MZ700.MZF delete mode 100644 software/MZF/FLAP.MZF delete mode 100644 software/MZF/FRONT_PANEL_v1.5.MZF delete mode 100644 software/MZF/Filing(CMT).MZF delete mode 100644 software/MZF/Filing_CMT_.MZT delete mode 100644 software/MZF/GALAXI_FORM.MZF delete mode 100644 software/MZF/GALAXY_INVADERS.MZF delete mode 100644 software/MZF/GDP9-BA.MZF delete mode 100644 software/MZF/Greedy_Gremlins.MZF delete mode 100644 software/MZF/HP4TMZ7.MZF delete mode 100644 software/MZF/HP4TMZ7L.MZF delete mode 100644 software/MZF/HU-BASIC.A1_M.MZF delete mode 100644 software/MZF/HU-BASIC.A1_S.MZF delete mode 100644 software/MZF/HU-BASIC.A2_80M.MZF delete mode 100644 software/MZF/HU-BASIC.A2_80S.MZF delete mode 100644 software/MZF/HU-BASIC_V1.3_K.MZF delete mode 100644 software/MZF/HUCALC_80A+_C2.MZF delete mode 100644 software/MZF/HUCALC_80A+_M.MZF delete mode 100644 software/MZF/HUCALC_80A+_S.MZF delete mode 100644 software/MZF/HUNCHY.MZF delete mode 100644 software/MZF/Hardcopy.MZF delete mode 100644 software/MZF/INSTRUCS_v1.1.MZF delete mode 100644 software/MZF/JIGSAW.MZF delete mode 100644 software/MZF/Joy.MZF delete mode 100644 software/MZF/KNIFORTH.MZF delete mode 100644 software/MZF/KUMA_INTERPR..MZF delete mode 100644 software/MZF/KuPTest.MZF delete mode 100644 software/MZF/LAND_ESCAPE.MZF delete mode 100644 software/MZF/Lady_Bug_MZ80K.m12 delete mode 100644 software/MZF/Le_Mans.MZF delete mode 100644 software/MZF/MAGIC_PAINTBOX.MZF delete mode 100644 software/MZF/MAN-HUNT.MZF delete mode 100644 software/MZF/MEMORY_TEST.MZF delete mode 100644 software/MZF/MINI_DATACARD..MZF delete mode 100644 software/MZF/ML-SP_8002_BBG.MZF delete mode 100644 software/MZF/MONITOR6.MZF delete mode 100644 software/MZF/MOVING_SEARCHER.MZF delete mode 100644 software/MZF/MZ-2Z009.MZF delete mode 100644 software/MZF/MZ-700_FORTH.MZF delete mode 100644 software/MZF/MZ-80A_GALACTIC.MZF delete mode 100644 software/MZF/MZ700BAS.M12 delete mode 100644 software/MZF/MZ700BAS.MZF delete mode 100644 software/MZF/MZ80A_basic.DSK delete mode 100644 software/MZF/Mz1571.MZF delete mode 100644 software/MZF/Mzprint.MZF delete mode 100644 software/MZF/NEW_INVADERS.MZF delete mode 100644 software/MZF/OPENING_DATA.MZF delete mode 100644 software/MZF/OTHELLO.MZF delete mode 100644 software/MZF/PAC-MAN.MZF delete mode 100644 software/MZF/PAC-MAN3.MZF delete mode 100644 software/MZF/PAINFUL_MAN.MZF delete mode 100644 software/MZF/PAINTBOX.BAS.MZF delete mode 100644 software/MZF/PCG_BASIC.MZF delete mode 100644 software/MZF/PCG_BASIC_MZ700.MZF delete mode 100644 software/MZF/PROBE_A_1200.MZF delete mode 100644 software/MZF/PROBE_A_8000.MZF delete mode 100644 software/MZF/PROBE_A_B600.MZF delete mode 100644 software/MZF/Pcgrally_MZ800.MZF delete mode 100644 software/MZF/QDCOPY.MZF delete mode 100644 software/MZF/QD_BAS_5Z008_MZ700.MZF delete mode 100644 software/MZF/RAM_CHECK_A.MZF delete mode 100644 software/MZF/REALFORT.MZF delete mode 100644 software/MZF/ROUND_SHOOT.MZF delete mode 100644 software/MZF/S-Basic-Cent-2.MZF delete mode 100644 software/MZF/S-MASTER.MZF delete mode 100644 software/MZF/SA-5510+KN.COMM..MZF delete mode 100644 software/MZF/SA-5510_Compiler.MZF delete mode 100644 software/MZF/SA-6510.DSK delete mode 100644 software/MZF/SARGON_2.71.MZF delete mode 100644 software/MZF/SCRAMBLE_A.MZF delete mode 100644 software/MZF/SECTOR_R_W(NEC).MZF delete mode 100644 software/MZF/SECTOR_R_W.MZF delete mode 100644 software/MZF/SEND-1.MZF delete mode 100644 software/MZF/SHARPLAN01.MZF delete mode 100644 software/MZF/SHARP_PENCIL.A1.MZF delete mode 100644 software/MZF/SHARP_PENCIL.ALF.MZF delete mode 100644 software/MZF/SLAVE_v1.1A.MZF delete mode 100644 software/MZF/SNAKE&SNAKE_EXP1.MZF delete mode 100644 software/MZF/SNOWFLAKES.MZF delete mode 100644 software/MZF/SOLO_BASIC.MZF delete mode 100644 software/MZF/SP-4015.A1_C.MZF delete mode 100644 software/MZF/SP-4015.A1_S.MZF delete mode 100644 software/MZF/SP-5060.A1_M.MZF delete mode 100644 software/MZF/SP-5060.A1_S.MZF delete mode 100644 software/MZF/SP-CONVERT.A1.MZF delete mode 100644 software/MZF/SPACE_INVADERS.MZF delete mode 100644 software/MZF/STKEEPER2BAS700A.MZF delete mode 100644 software/MZF/SUB-MONITOR-700.MZF delete mode 100644 software/MZF/SUCOPY_A000.A16.MZF delete mode 100644 software/MZF/SUPERFIRE.MZF delete mode 100644 software/MZF/SUPERTAPE_2.MZF delete mode 100644 software/MZF/SUPER_PUCK-MAN.MZF delete mode 100644 software/MZF/SUTAM1F.MZF delete mode 100644 software/MZF/SUTAMC9.MZF delete mode 100644 software/MZF/SUTAPEBA.MZF delete mode 100644 software/MZF/SUTAPEMO.MZF delete mode 100644 software/MZF/TETRIS.MZF delete mode 100644 software/MZF/TEXT_BASIC_I.MZF delete mode 100644 software/MZF/TEXT~ED_v1.2.MZF delete mode 100644 software/MZF/TRANS.MZF delete mode 100644 software/MZF/TRANS.MZT delete mode 100644 software/MZF/UNI=BASIC800.MZF delete mode 100644 software/MZF/UNIVERSAL_BASIC.MZF delete mode 100644 software/MZF/URAS-700.MZF delete mode 100644 software/MZF/Utility.MZT delete mode 100644 software/MZF/Utility_2.MZF delete mode 100644 software/MZF/Utility_V_1.1.MZF delete mode 100644 software/MZF/Utility_V_2.0.MZF delete mode 100644 software/MZF/WDPRO_2.37AT.MZF delete mode 100644 software/MZF/WDPRO_2.37AT_C2.MZF delete mode 100644 software/MZF/Wooky.MZF delete mode 100644 software/MZF/XPATCH_5510_v2.2.MZF delete mode 100644 software/MZF/Z80MACHINE.A3_C2.MZF delete mode 100644 software/MZF/Z80_MACHINE.A1_M.MZF delete mode 100644 software/MZF/Z80_MACHINE.A1_S.MZF delete mode 100644 software/MZF/Z80_MACHINE.A2_M.MZF delete mode 100644 software/MZF/Z80_MACHINE.A3_S.MZF delete mode 100644 software/MZF/ZEN7E.A2.MZF delete mode 100644 software/MZF/ZSP delete mode 100644 software/MZF/ZSP.MZF delete mode 100644 software/MZF/Zexas_MZ800.MZF delete mode 100644 software/MZF/basic_sa-5510.MZF delete mode 100644 software/MZF/bomberman_MZ700.m12 delete mode 100644 software/MZF/cannon_ball.m12 delete mode 100644 software/MZF/clock1.MZF delete mode 100644 software/MZF/cmttofd.MZF delete mode 100644 software/MZF/cpm22.MZF delete mode 100644 software/MZF/diamond.MZF delete mode 100644 software/MZF/diskutility.MZF delete mode 100644 software/MZF/doordoor delete mode 100644 software/MZF/flugsim_MZ700.m12 delete mode 100644 software/MZF/fortransosz80.MZF delete mode 100644 software/MZF/hi-ramcheck.MZF delete mode 100644 software/MZF/hudson_basic.MZF delete mode 100644 software/MZF/k-basic_v.5.MZF delete mode 100644 software/MZF/loader.MZF delete mode 100644 software/MZF/m_c_Breakout_2.MZF delete mode 100644 software/MZF/m_c_Hissing_Sid.MZF delete mode 100644 software/MZF/m_c_Race_Chase.MZF delete mode 100644 software/MZF/minotaur.MZF delete mode 100644 software/MZF/monitor2 delete mode 100644 software/MZF/monitor3.MZF delete mode 100644 software/MZF/mz-5z009_modified2.MZF delete mode 100644 software/MZF/nakamoto_MZ700.m12 delete mode 100644 software/MZF/sa-5510_Bas_MZ80K.MZF delete mode 100644 software/MZF/sa-6510.MZF delete mode 100644 software/MZF/schach2_MZ700.m12 delete mode 100644 software/MZF/sdtest.MZF delete mode 100644 software/MZF/send-1_MZ700.m12 delete mode 100644 software/MZF/sharpmz-test.MZF delete mode 100644 software/MZF/sharpmz-test.mzf delete mode 100644 software/MZF/tetris-2_MZ800.MZF delete mode 100644 software/MZF/textsobs5.MZF delete mode 100644 software/MZF/ufo.MZF diff --git a/.gitignore b/.gitignore index 5bf54d5..e284632 100644 --- a/.gitignore +++ b/.gitignore @@ -60,4 +60,87 @@ software/MZF/BASIC.mzf software/OriginalSA-1510.BIN software/asm/.cbios.asm.swo software/dump - +software/NASCAS +software/CAS +software/MZF +software/BAS +software/CPM/CPM00_MZ800 +software/CPM/CPM00_SYSTEM +software/CPM/CPM01_TURBOP +software/CPM/CPM02_HI_C +software/CPM/CPM03_FORTRAN80 +software/CPM/CPM04_MBASIC +software/CPM/CPM05_COBOL80_v13 +software/CPM/CPM06_COBOL80_v20 +software/CPM/CPM07_COBOL80 +software/CPM/CPM08_Z80FORTH +software/CPM/CPM09_CPMTEX +software/CPM/CPM10_DISKUTILFUNC5 +software/CPM/CPM11_MAC80 +software/CPM/CPM12_PASCALMTP_v561 +software/CPM/CPM13_MTPUG_01 +software/CPM/CPM14_MTPUG_02 +software/CPM/CPM15_MTPUG_03 +software/CPM/CPM16_MTPUG_04 +software/CPM/CPM17_MTPUG_05 +software/CPM/CPM18_MTPUG_06 +software/CPM/CPM19_MTPUG_07 +software/CPM/CPM20_MTPUG_08 +software/CPM/CPM21_MTPUG_09 +software/CPM/CPM22_MTPUG_10 +software/CPM/CPM23_PLI +software/CPM/CPM24_PLI80_v13 +software/CPM/CPM25_PLI80_v14 +software/CPM/CPM26_TPASCAL_v300a +software/CPM/CPM27_WORDSTAR_v30 +software/CPM/CPM28_PLM80 +software/CPM/CPM29_ZSID_v14 +software/CPM/CPM30_WORDSTAR_v400 +software/CPM/CPM31_WORDSTAR_v330 +software/CPM/CPM32_ZCPR3 +software/CPM/CPM33_ZCPR3_COMMON +software/CPM/CPM_MC_5 +software/CPM/CPM_MC_C0 +software/CPM/CPM_MC_C1 +software/CPM/CPM_MC_C2 +software/CPM/CPM_MC_C3 +software/CPM/CPM_MC_C4 +software/CPM/CPM_MC_C5 +software/CPM/CPM_MC_C6 +software/CPM/CPM_MC_C7 +software/CPM/CPM_MC_C8 +software/CPM/CPM_MC_C9 +software/CPM/CPM_MC_D0 +software/CPM/CPM_MC_D1 +software/CPM/CPM_MC_D2 +software/CPM/CPM_MC_D3 +software/CPM/CPM_MC_D4 +software/CPM/CPM_MC_D5 +software/CPM/CPM_MC_D6 +software/CPM/CPM_MC_D7 +software/CPM/CPM_MC_D8 +software/CPM/CPM_MC_D9 +software/CPM/CPM_MC_E0 +software/CPM/CPM_MC_E1 +software/CPM/CPM_MC_E2 +software/CPM/CPM_MC_E3 +software/CPM/CPM_MC_E4 +software/CPM/CPM_MC_E5 +software/CPM/CPM_MC_E6 +software/CPM/CPM_MC_E7 +software/CPM/CPM_MC_E8 +software/CPM/CPM_MC_E9 +software/CPM/CPM_MC_F0 +software/CPM/CPM_MC_F1 +software/CPM/CPM_MC_F2 +software/CPM/CPM_MC_F3 +software/CPM/CPM_MC_F4 +software/CPM/CPM_MC_F5 +software/CPM/CPM_MC_F6 +software/CPM/CPM_MC_F7 +software/CPM/CPM_MC_F8 +software/CPM/CPM_MC_F9 +software/CPM/CPM_RFS_1 +software/CPM/CPM_RFS_2 +software/CPM/PLM80 +software/MZB diff --git a/software/CPM/CPM00_MZ800/asm.com b/software/CPM/CPM00_MZ800/asm.com deleted file mode 100644 index a6a54da56f7b59c5e225d308b1a1dacb516d9179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 f&y_55=8GCMk)MBQv%usdgI6 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 diff --git a/software/CPM/CPM00_MZ800/del.com b/software/CPM/CPM00_MZ800/del.com deleted file mode 100644 index 8cfcfdad4bae4ce3bed9c59d51618a05f66e191b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmb2(Q*d$hQ7B6-QZUpra8!6(9K&ST#AFr2uw8+TPx34)gN;!FlVU7G-9H5d4mNH( z`*LN0KYW6MF$_StfB#QyVr&Ni#Ri6WF$PJcI3__ZCS^trhPNBom<5HI>YmjLDGLky zP~>2;N?}!kkCqEdd(;R)c-a( ziAgb$$>i)0Mm`~liHcH8K)n(ltrD5GYZxiofOrs-Acn{T)d{wMbeR5n#R#-a=qjHu z(4vQe0t}L`C7!>nj$t}kxBbM~|BT8K-|cvTv>jJGAJbEinv;%JX_+~xd5O8HdZ`s9 z3ib*N3R+rP3T{9_g}nR{g_P8s)RNQ`1zm+8eSeS?FBb!l1Oo*H$D&k)$ox`;;!+?( xBU0Z_Q^87s0Rmc>4ozqIrw$~}Ds%tS1kqO9Ru^ryAFw)S`;YAwNY%jE4*=kJpArB7 diff --git a/software/CPM/CPM00_MZ800/diskdef.com b/software/CPM/CPM00_MZ800/diskdef.com deleted file mode 100644 index f38f21d236198760644e0f61b4f41622845ed9e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 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 diff --git a/software/CPM/CPM00_MZ800/eject.com b/software/CPM/CPM00_MZ800/eject.com deleted file mode 100644 index cbfe03a8d3a91023565a3a111a0678c62be392e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmV-`0Du1&4n;~uLsTGkWpW@fE-*pub0YyUi2)7;9t_O|0PTAt0m%RWNB}qr9tJZ& zpa*I0k$^Hl013bV0G=9Ql-yx9nMKA^!O%cI5C8-Mp-`wmMl_oYq62Zf=pZr~O@>pU il*k|!hzdgTcz{$Y6$3#)0Z^z^DisQaLZJYFf^ss4t|%)2 diff --git a/software/CPM/CPM00_MZ800/files.com b/software/CPM/CPM00_MZ800/files.com deleted file mode 100644 index b798e149d9a803bad71152a2ddba51f987132b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmZWoO=ufe5T5r|yS8OX>`I49aev-=({wFDkkt^(BCk=2-IO+UQQA;Q>X5`Tm^M*k znOcIfPA>hqB%#;#&`ZzBr4>2UL=`sKns?Aa!4&qe5V<9eO68&?jlD`|t&~DL@L=9I zk9jlmeG`vNz46xM3HC{TfsGzYWk>f@gMzwAq`oCh)8r?S1Q#Lg5#uzBZ@)?mkDN*G zl1Kzm^#icFjP*-{=ERaF??zriaJWmFj_XW?Bj8wlna=ve`h@ajxY03o$!ddtE$}}` z1vO@-QisJ#NUB-B#y z%$CJv5x}*x#@zfz`HN>Sa~%B{UdjcatgOYS7EQzFAaZIm_}(%`;n>lW+RVj}C*UAyjXASfdk zy`;tDM+o^vc`Bz;AObfU-VAsrNu`w=6Eg9~i3$srD<&|}WN~47Eme=kJk8VOyXDGl zGc^>A*}n<15Cj6PQ2e2TQ#zV($AJ=+b$e&*_n4pL4Jo8N!vTDgc($|6Gd1|A*N3>Fn5os-`Yh?DCY}vT?-HTy?Jt?p)vhgfp zbAB-73jxd&G=h+ESY^NPv%kqkJvN`h214dm95%OMvl6p*A!Aa^Dn+XTXA{3KutvpU ze^sm)*3s>dS&OYoUg9+YEL?+UeUM!jGrjK)uT-q3aN`POq!F9pb$=&7fsA7a$XtN| z)Vvh5wql*2PzEAH5SlSH4tHI!YN3F}3jm&_VY4B~-oJ~=DMDTlF(nV8!(x^5ZJp=vWeQ)Q#v^8gW!%hdstwV#ctcqQ>wu23lZ`T?etadSh5O1RJijpfTZx~ug-6ayF)#>!Iw#dxrMRT;y${bz#`khamW9n4yod*7 zK9j(vyXdaQ&$b2|KXe<3)WVCHHrnnfDd^0!u@U#AdERCeN@co?LtoI&sY`s0angO~ z_s9m$9pE~dz2|p~mYjVxvOn!l^y!m9Hs-ff+_xHC{WJmZ$PvE@8gEY;{)x<9_BU2x zAAvC%IN9jZuu?KxGp>Vu;b=~y*p2u(!;(>pieP-^H=@^`pr zPHISBSa1SJFGM3j6}GD`D=}HsPYHZ-IC>?T8D&9r=!TQF1Qhy zTlU9kdsAD^Uh`7>^GOcze4?$RHJ$|XUGVn!fh28i>3WeCKO3q2=0?hKsuCSNw5z8p z8E@liwF_4nqunj7t#o&sW{D-^&5zUM3-NZE?CFTpimC>i7B^PWL?_*{qlzXIv@^at zkw|7iSJ}8W(M|WbJtbS(_tJ`0wTWC6x~HWzPJ!U&7>&^Sm%3h{P3=AO#dr_e;nD!8 zre+%N>;&-T!n!+KlJR?S!1+G7+@3BXJs1&KvvOfXL4t_N(_u1;>1{`-ud3fp;kV=R z4z$cqc&4hVep@xARdw5!2}5oi$NQ4Fm;Lr|*<{eUc8rLESM*7KIZwfAz!TI+*)d}F zlNqM@hUUcsrJ{|>juUp;d*yQ3Ny1KP(T&Diq#WrdH1|5Qbw2iq7PZ))-PPoJsW)1* z=m#g}5nAjmGG8D4Y+#0Udv7=;t769pe{G;Rp?2fk_v0YxK`)=ME zpJZFTtkrvEGICY9E?-#hSf|PK&NC!7K)wTTV;duNaBIdtiR=q^hsb|zU)c#_^^?FA z+dn>eWil9@OhCg4mlG#MuqZ({&>+NKmI+PO*waa=pO&rWeklR9DIM5x187?L;(Ja z{lrd^@ykvuqFwcD$PJu7c)jK+;s~N7E2>8m6j7BtvL?tLQPCt-kQ9$7tD2xnnj(5+ zL6J4dBdUVtQ59Jdp8xEIX92|5e(p-ES#H-R&iq8hv^6XqN*ZQVl zBu($^Cu+TYj&1R(dG-QdB-;y%E#()eMXqC@qU=p_&+Fq}A-|xYAoeEN00YxHMZ5+Vswe-8DeW? z1H@ULY}uER<-wQGYu;R}V_^pB=1qvE6U-VMW3{>+dwFx?Qous7krpEMT?0Xdo8xBpd;_YR2v yT;pW=UgThdc1V4h%nFd1&~5JMcdTC4#sB diff --git a/software/CPM/CPM00_MZ800/load.com b/software/CPM/CPM00_MZ800/load.com deleted file mode 100644 index b9601e002cc09df45e29331795412a0f0be8e217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1792 zcmbtUUu+ab7@xV@Kkaq)%2KFuYT3OzE8PR3=jAMGuXKC6&A<>jV zVhvbnVw6ba!3WR>A@RXzeA7rmeZaJv5~j&SX(A+j!3QZZ_h4c|l&G!W%w1D`c5^p7 zzu)ise)HYTHx~{@jG}*FG$`#Gt{K~kJx1^D=lixBZfRes=9G=Vt9njQ95%cl@B`aO zZ#T-m;~I|Zf>brqZmGH-q8v9}svPoyn&Aj_(T3gR9JAl^Vx|sn_I`E2q;8qP@N6o7kX)s1b zr&952hJOHvs(&yjdg-D+Qt^!uKk#5#NUHh4s8K!OaH$bpEc;c@*jp-lY3qUdh?)rP zPCii0DDK8|?oQN+HF@^Mv+Yq4KPupWWfkVe?gBI-)hg+_1>SJ+Px_Ckc38kw*((v9lz z2zynfagF^DiN|1|W}Hk6w8D5}QHk1da?`mJ^FavP1=_{u)NCgcb~{=AV=Fv9t4BC! z=M!q`T+Cbj&*@h^*r}&$i9fICS>hV^-qPdx4D974F+z~be5nDKedoT;4*5eHl z_hOK&PL48BQTda?=Lzs>XD8Hbf>5(dP)`B1VU02bwG}A6N$Cj1H?GM^A)6p~h+@(L zrvPt)5NdV{{50Ur0&f%e8Ni)u7M7rTfO?Ef%P=Dt3EQ~+eJ4qqC6V7kph-78R zeQO7qjZMNVmCO(TspJk4_Da-hgJ~PlSEKB*x^zkcjAJdWZ}X06@Marf*VUyZDf~#% zrx65f0b%h?DO{3x=iG~Ccaaq|_pOAd(R?%C9qF2eJ_+wiHi&rPmV_PNL`^xLFju4C z5}ubD>)5dtv0|Pi`$*CzQ`vrvH)@U~3z`{g$tT#Tv|=x4au|`#EXgBQP_w;!T|*8( zmF-@l+k~A`>zUK3Q=mPB@3GloR#v%3CmBF`p0F>~Yjaf@jxz}W44xy9Sl~XZ3vbB4 z`0Q^krywI7mGwS?I|;j@F22v%4AjP+Rblz}R?xy#8GpfBg-t6^6Zgy!oFjTc;|X(e z9R17da~aQwzREW`3EvW^uZivoWH-^WK>gYX^er?fHTP%}xS;8cQaTj8pKqnUimZaR zrEUU!U0pn>n1fm#4V;75jinYAA@N1caJ8j1= zl#h--AkQpztN5}gU|JF6%@}2WDd*vN2=Ce9uPB^Zc1YvLHfaxO)O5Ae@CQ+ZJ&Cul zi>mEv?3_wNghH8rn2ac;^<$l=o_Ke>Bk{o)h56ZQ<7d7Zqc5fo)qAwLi>lx*ji32s mjGlO@lG>a25JEp5qvPEuaS5it^Q_Cq&ZMp$uG7T-d;S66tN&L3 diff --git a/software/CPM/CPM00_MZ800/pcpm.sys b/software/CPM/CPM00_MZ800/pcpm.sys deleted file mode 100644 index faebe9798be5b72d8a3c83068e7bd3e62a76f0e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14848 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 diff --git a/software/CPM/CPM00_MZ800/random.asm b/software/CPM/CPM00_MZ800/random.asm deleted file mode 100644 index d581df0..0000000 --- a/software/CPM/CPM00_MZ800/random.asm +++ /dev/null @@ -1,345 +0,0 @@ -;*************************************************** -;* * -;* sample random access program for Personal CP/M * -;* * -;*************************************************** - org 100h ;base of tpa -; -reboot equ 0000h ;system reboot -bdos equ 0005h ;bdos entry point -; -coninp equ 1 ;console input function -conout equ 2 ;console output function -pstring equ 9 ;print string until '$' -rstring equ 10 ;read console buffer -version equ 12 ;return version number -openf equ 15 ;file open function -closef equ 16 ;close function -makef equ 22 ;make file function -readr equ 33 ;read random -writer equ 34 ;write random -wrtrzf equ 40 ;write random zero fill -; -fcb equ 005ch ;default file control block -ranrec equ fcb+33 ;random record position -ranovf equ fcb+35 ;high order (overflow) byte -buff equ 0080h ;buffer address -; -cr equ 0dh ;carriage return -lf equ 0ah ;line feed -; -;*************************************************** -;* * -;* load SP, set-up file for random access * -;* * -;*************************************************** - lxi sp,stack -; -; version 2.3? - mvi c,version - call bdos - cpi 20h ;version 2.3 or better? - jnc versok -; bad version, message and go back - lxi d,badver - call print - jmp reboot -; -versok: -; correct version for random access - mvi c,openf ;open default fcb -rdname: lda fcb+1 - cpi ' ' - jnz opfile - lxi d,entmsg - call print - jmp reboot -; -opfile: lxi d,fcb - call bdos - inr a ;err 255 becomes zero - jnz ready -; -; cannot open file, so create it - mvi c,makef - lxi d,fcb - call bdos - inr a ;err 255 becomes zero - jnz ready -; -; cannot create file, directory full - lxi d,nospace - call print - jmp reboot ;back to ccp -; -;*************************************************** -;* * -;* loop back to "ready" after each command * -;* * -;*************************************************** -; -ready: -; file is ready for processing -; - call readcom ;read next command - shld ranrec ;store input record# - lxi h,ranovf - mov m,c ;set ranrec high byte - cpi 'Q' ;quit? - jnz notq -; -; quit processing, close file - mvi c,closef - lxi d,fcb - call bdos - inr a ;err 255 becomes 0 - jz error ;error message, retry - jmp reboot ;back to ccp -; -;*************************************************** -;* * -;* end of quit command, process write * -;* * -;*************************************************** -notq: -; not the quit command, random write? - cpi 'W' - jnz notw -; -; this is a random write, fill buffer until cr - lxi d,datmsg - call print ;data prompt - mvi c,127 ;up to 127 characters - lxi h,buff ;destination -rloop: ;read next character to buff - push b ;save counter - push h ;next destination - call getchr ;character to a - pop h ;restore counter - pop b ;restore next to fill - cpi cr ;end of line? - jz erloop -; not end, store character - mov m,a - inx h ;next to fill - dcr c ;counter goes down - jnz rloop ;end of buffer? -erloop: -; end of read loop, store 00 - mvi m,0 -; -; write the record to selected record number - mvi c,writer - lxi d,fcb - call bdos - ora a ;error code zero? - jnz error ;message if not - jmp ready ;for another record -; -; -;******************************************************** -;* * -;* end of write command, process write random zero fill * -;* * -;******************************************************** -notw: -; not the quit command, random write zero fill? - cpi 'F' - jnz notf -; -; this is a random write, fill buffer until cr - lxi d,datmsg - call print ;data prompt - mvi c,127 ;up to 127 characters - lxi h,buff ;destination -rloop1: ;read next character to buff - push b ;save counter - push h ;next destination - call getchr ;character to a - pop h ;restore counter - pop b ;restore next to fill - cpi cr ;end of line? - jz erloop1 -; not end, store character - mov m,a - inx h ;next to fill - dcr c ;counter goes down - jnz rloop1 ;end of buffer? -erloop1: -; end of read loop, store 00 - mvi m,0 -; -; write the record to selected record number - mvi c,wrtrzf - lxi d,fcb - call bdos - ora a ;error code zero? - jnz error ;message if not - jmp ready ;for another record -; -;*************************************************** -;* * -;* end of write commands, process read * -;* * -;*************************************************** -notf: -; not a write command, read record? - cpi 'R' - jnz error ;skip if not -; -; read random record - mvi c,readr - lxi d,fcb - call bdos - ora a ;return code 00? - jnz error -; -; read was successful, write to console - call crlf ;new line - mvi c,128 ;max 128 characters - lxi h,buff ;next to get -wloop: - mov a,m ;next character - inx h ;next to get - ani 7fh ;mask parity - jz ready ;for another command if 00 - push b ;save counter - push h ;save next to get - cpi ' ' ;graphic? - cnc putchr ;skip output if not - pop h - pop b - dcr c ;count=count-1 - jnz wloop - jmp ready -; -;*************************************************** -;* * -;* end of read command, all errors end-up here * -;* * -;*************************************************** -; -error: - lxi d,errmsg - call print - jmp ready -; -;*************************************************** -;* * -;* utility subroutines for console i/o * -;* * -;*************************************************** -getchr: - ;read next console character to a - mvi c,coninp - call bdos - ret -; -putchr: - ;write character from a to console - mvi c,conout - mov e,a ;character to send - call bdos ;send character - ret -; -crlf: - ;send carriage return line feed - mvi a,cr ;carriage return - call putchr - mvi a,lf ;line feed - call putchr - ret -; -; -print: - ;print the buffer addressed by de until $ - push d - call crlf - pop d ;new line - mvi c,pstring - call bdos ;print the string - ret -; -readcom: - ;read the next command line to the conbuf - lxi d,prompt - call print ;command? - mvi c,rstring - lxi d,conbuf - call bdos ;read command line -; command line is present, scan it - mvi c,0 ;start with 00 - lxi h,0 ; 0000 - lxi d,conlin;command line -readc: ldax d ;next command character - inx d ;to next command position - ora a ;cannot be end of command - rz -; not zero, numeric? - sui '0' - cpi 10 ;carry if numeric - jnc endrd -; add-in next digit - push psw - mov a,c ;value = ahl - dad h - adc a ;*2 - push a ;save value * 2 - push h - dad h ;*4 - adc a - dad h ;*8 - adc a - pop b ;*2 + *8 = *10 - dad b - pop b - adc b - pop b ;+digit - mov c,b - mvi b,0 - dad b - aci 0 - mov c,a - jnc readc - jmp readcom -endrd: -; end of read, restore value in a - adi '0' ;command - cpi 'a' ;translate case? - rc -; lower case, mask lower case bits - ani 101$1111b - ret ;return with value in chl -; -;*************************************************** -;* * -;* string data area for console messages * -;* * -;*************************************************** -badver: - db 'sorry, you need Personal CP/M $' -nospace: - db 'no directory space$' -datmsg: - db 'type data: $' -errmsg: - db 'error, try again.$' -prompt: - db 'next command? $' -entmsg: - db 'You must enter a filename on command line $' -; -;*************************************************** -;* * -;* fixed and variable data area * -;* * -;*************************************************** -conbuf: db conlen ;length of console buffer -consiz: ds 1 ;resulting size after read -conlin: ds 32 ;length 32 buffer -conlen equ $-consiz -; - ds 32 ;16 level stack -stack: - end - \ No newline at end of file diff --git a/software/CPM/CPM00_MZ800/setup.com b/software/CPM/CPM00_MZ800/setup.com deleted file mode 100644 index ef62086bc161d08334b6f5aee26fad15b14c7255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9472 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

1J?`^i*|;*X23%>)b$qtZTg0qEUF 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 Oj34+5f~@%eI)4Kf;HT06 diff --git a/software/CPM/CPM00_MZ800/terminal.asm b/software/CPM/CPM00_MZ800/terminal.asm deleted file mode 100644 index 8b5bd8f..0000000 --- a/software/CPM/CPM00_MZ800/terminal.asm +++ /dev/null @@ -1,53 +0,0 @@ -; simple minded terminal emulator (with no buffering) - org 100h -boot equ 0 -bdos equ 5 - -auxin equ 3 -auxout equ 4 -auxist equ 7 -auxost equ 8 - -dcio equ 6 -input equ 0FFh -status equ 0FEh - -term: ;start of main program -con$char: - mvi e,input ;get character or status via function #6 - mvi c,dcio - call bdos - ora a ;which returns zero to indictate nothing - jz Aux$ready$chk ;available, so branch to Auxin Stat test - - cpi 3 ;or returns the keyboard character which we - jz boot ;test for control "C" meaning exit program now. - - mov e,a -send$aux: - push d ;save character - mvi c,auxost ;call aux_out_status function - call bdos - pop d - ora a - jz send$aux ;wait for auxout to be ready - - mvi c,auxout ;send (e)'s character out Aux - call bdos - -Aux$ready$chk: - mvi c,auxist ;check if Aux has any characters available - call bdos - ora a ;if return ==false then go back to top of loop - jz con$char - - mvi c,auxin ; else, get the character from Auxin - call bdos - ani 7Fh ;mask any bit 7 parity bits - mov e,a - mvi c,dcio ; then send the character to the console - call bdos - jmp con$char ;jump back to main loop for more. - - end - \ No newline at end of file diff --git a/software/CPM/CPM00_MZ800/time.com b/software/CPM/CPM00_MZ800/time.com deleted file mode 100644 index 76dff343e75be632604292bed9d19d790431e9b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmbtRO-NKx6h8B=#(4vZ&t&vri}&Wb@%h6jF~m4c^hX3XMMf>8hM++vYz$}mK}RWx zR_(-%v~m>@%tAz5st9u%E;K?AwGx@daCwk{P+;15ZzS6Hc#H2l=R1G*b8|5qXxAmM z&9;Dbd!RpZ-m>G!c^FYD%?6Nf*xg&*W_NeE7p2acf)}4mPNuVYE1!9kwlX;joHjIC zn&kuw_oIC6)zqaiKNE+)87lW?LZD^_86LvN zG3`+Qx*WKkI9l5t*Br#2o@ghJj&ga9MItf(2XAZ$j|+Rk!{~%ik=Cqwz@7us>sV1a zqMVe<8OBxj=JvM$i8!aE9rKQ@5;Yoqbv;lq3o9G`*l-ux?GQeVaz(R;jsao6L3HT2 zunrK+Xr4!b9#gh5cRGf`Klp0)>HYD{1OMEnAkf=yP6ynPHgtMvrG7N&af~3yBr_sl z&KOCQ7IPZ#A10hG^lmXe9hqbec~hl`cYz0_X+WX2E?py|5-nw3Zgn5J z7tUy>4)wDe&zV{m6YZ diff --git a/software/CPM/CPM00_MZ800/vccp.cfg b/software/CPM/CPM00_MZ800/vccp.cfg deleted file mode 100644 index f8f7e4a..0000000 --- a/software/CPM/CPM00_MZ800/vccp.cfg +++ /dev/null @@ -1,13 +0,0 @@ -0 ;EXAMPLE 2 -;Files ;Add no.1 command -;Format ; no.2 command - ; no.3 command - ; no.4 command - ; no.5 command - ; no.6 command - ; no.7 command - ; no.8 command - ; no.9 command -;MAX COMMAND=9 -;Set number in First line - \ No newline at end of file diff --git a/software/CPM/CPM00_MZ800/vccp.com b/software/CPM/CPM00_MZ800/vccp.com deleted file mode 100644 index 3017246b7a191076f92f9d6ca002229b422d7d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 diff --git a/software/CPM/CPM00_SYSTEM/BBCBASIC.COM b/software/CPM/CPM00_SYSTEM/BBCBASIC.COM deleted file mode 100644 index a3c0ac09cc398487726e513dc3de146d7e003c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13696 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 E2VUIZ00000 diff --git a/software/CPM/CPM00_SYSTEM/ZSID-FIX.DOC b/software/CPM/CPM00_SYSTEM/ZSID-FIX.DOC deleted file mode 100644 index 6052ea7..0000000 --- a/software/CPM/CPM00_SYSTEM/ZSID-FIX.DOC +++ /dev/null @@ -1,74 +0,0 @@ - - - **************************************************************** - - PATCH TO MAKE ZSID.COM THE SAME DUMP DISPLAY AS DDT AND SID - - RESEARCH BY DATAFACS SYSTEMS, INC. - - **************************************************************** - - - DO THE FOLLOWING: - - ZSID ZSID.COM - - S125F 5F AF <--- PUT THIS IN HIT RETURN - 1260 ?? . "" - - S12C0 CD 00 <---- PUT THIS IN HIT RETURN - 12C1 ?? 00 "" - 12C2 ?? 00 "" - 12C3 06 ?? <---- LEAVE THIS ALONE - 12C4 06 01 <---- PUT THIS IN HIT RETURN - 12C5 ?? . "" - -* S12E1 CD 00 <---- PUT THIS IN HIT RETURN -* 12E2 ?? 00 "" -* 12E3 ?? 00 "" -* 12E4 CD 00 "" -* 12E5 ?? 00 "" -* 12E6 ?? 00 "" - 12E7 13 . <-- **** DONE **** - - CONTROL C OR G0 ZERO AND SAVE THE PROPER AMOUNT - - - IF YOU DON'T TRUST THIS SAVE IT AS A DIFFERENT NAME FIRST - - ******* HAVE FUN AND ENJOY ****** - -* CALLS THE SAME ADDRESS - ------------------------------------------------------------------ - -Addendum by Bob Fisher - De Paul University - -The above patch MAY work, but it depends on what address your cpm -runs at. Try instead the following: - - S125F - 125F 5F AF (SAME AS ABOVE) - 1260 ?? . - - S12C0 CD 18 (PUT IN A RELATIVE JUMP) - 12C1 ?? 01 - 12C2 ?? 00 (THIS DOESN'T MATTER) - 12C3 06 06 (DON'T CHANGE) - 12C4 06 01 - 12C5 ?? . - - S12E1 - 12E1 CD 18 (ANOTHER RELATIVE JUMP) - 12E2 ?? 04 - 12E3 ?? ?? - 12E4 CD 18 (YET ANOTHER RELATIVE JUMP) - 12E5 ?? 01 - 12E6 ?? . - -When ZSID relocates itself an offset is added to bytes 12c2, 12e3, and -12e6. The previous patch left this offset to be interpreted as an opcode. -The result can be benign or disastrous depending on the size of your -cpm. - - \ No newline at end of file diff --git a/software/CPM/CPM00_SYSTEM/ZSID-PAT.COM b/software/CPM/CPM00_SYSTEM/ZSID-PAT.COM deleted file mode 100644 index 30423c9694b847ec91be4998a65a450220011f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 D_{sP3 diff --git a/software/CPM/CPM00_SYSTEM/ZSID.COM b/software/CPM/CPM00_SYSTEM/ZSID.COM deleted file mode 100644 index 91f66893fb128e8f1e4c0ac0345c530050cf1880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 zcmc(Edwd(!o$ncWER8H{EXlSk`8h{YNn(dQ3<=C|84K*%APal{Lb(E-sg87!=0x}GuP6wX4BeuTWp;)w`HER_?oM(nlDA;ZSi&C zRnpql&erhSmYBqTn>*uCX?^S3PHFLiD+7y(X>`=NkQ1$1AsL|-l4u^>P)jB#F?AnM zZ{chSSE*mw$c>L=z6rpioUJcwk$bt*3IFLGJ1cga_zqV&;3`#a=f)S1GlcyvY^zPt zTWjxWxVQe6+MMVF;YNU*gov)$I=#*4-j424fKv1hqkTKtWk&l>qy25P%Z>KkM*A+b z-Iqw*V}N!LqI^dLSLIcU@`0`XexTF>Wx7XuT%1a2|HA1FWBTP|`kXP{Kc+7j(?er= z^O%0kaedKy9m72-ecqTZjp^1geg2qkAJZRJKd_}lyH-xbA`~g@d!lYvkJ+>!QMVG2 zr#5k^whVB`MbKc=ZJjF#$;9wlZuLp?A0lh71>3pT)j=q^&OHw zBmUk)V+{=rcKHv)o)S4TKjE~Am51aK&R<$6o4E0mzYq=Qmowh+QoDQsSlS$pk=1#5 zF&8|ge8K63hl3aK9@VxIh^jA|L~%7l%$AI#MklnJh;jpmx6w;QF`-{B-_9*<5X)(S zs9hj(7iS;t8E3f4;|vi4zW3(=qJ`${4C|Q9ZXo@o1)t^gxg#mc z3sTy8PPZ5qxQWmMc2Uqy=c#BX;fE94G%N!fbxfry>z$;_?{i*q&pDgEKs{%JARs2% z>GophMH`cWnv~Bu`ix!sipYyh7~d$0qKAId?yM?i{VPntKWSfZKoU*#g<@xk0e!(# zxk0NY^35j3PPyHrWx2D`1~B#ed!Fp*ep)ATzo{qr75x17CiwK2tta`}F#L2y)ilZ=2OYcjs;Ik~m~c=PgjJ!j4Pm3n?d z@W}o)ycwbWkVX{fuMH)iDX{kd*e3St(g{m}?ocfSh6nKeQ0UN2a$iArQvD7{s<##l zpN+I>2RWT*kqm{}f`4K>C9XRO?a}j^{CGjor2JEXfuft3Bdp5qLfG}B!SA;P*A*8R zGb!P3Ve%B1XfJatI7cy1w@gkHd|1HryJ9!Qwb;wmQw5?;xvW6s=#LD$v=*}IJXd{< z*V_OganEMG{>*YGS^#T?E zQ2BA5$$uUUK=WC?qub0W&zcyqZkThJ57vXG5pcmiMG_HW>Te*nDi&%FbFg^OtX?R9 zfeq?Rz8J(q-e78nXZy3(oT^M8`e;|+dnSpnr(0(0LZj{+}f8hkC&-mHH+sb-(zoYa@kXmPlZ8SD(kcJwBLiVEv!FcCdl%qHxoh56KxE5zhKdl*>3RG!UG4K}T2=6I*s zNY8IV#S|BO7rJa?;BT1iP@xZ241U0-fnB}a+_!myUJ9sTu0BI~grGTuAfsOyED_3> zYi06njI>^)-fTvcLd4VHtBdM=X5B4!nS%mrT0zOcVia?L)Qe;yS6@u}p6q@4#6O$s zOUe1vc*5^1CaK2#=I-n%{Z!L_bBbu!Tb5-lx_NTatiEUN%l<|`C6Al6y=JT!+LEFa zp`V$R=fxuhdg0_5^AVHwyjjMZI}+|t%1LY$nHyU*kF;nnnf35ku^yYmTD3|oCw<~Z z{S@BCz-r5WT7ut^!8yMU&FR2G)}6i7K(Co^2M8<05{oFI-J87{$Y&QZL~%Y__VSPv zM18b_{={xI@Y{QINk*rELU&pqBsLpFyTYO!Fz2BdkTvUO`J7qoWW?5hy4Fcxm4~!) z%T7F^1UO?s3Ax5sN}3!bsZLtx%#2SY%j8MRvPK8PSBRiJBg*G&)IkzS^&`s?WO%@} z=R^>^L`8ev0>jmk4fLXo6UiajEzpI<%1uRBqKgHw_>fx2sx^YHsILgRrv6e8`9rE= z1+Y=b9@azZT~@tcU2E;l9zDscaci^Mf~N`X!|De@Z`Pt76Hb~i7{xDzlLhLN02ayr zQiQIKW|}FsGX1ZIKjq(9>F z**{^`9VZgjphbDm%2KhR7oyJ)8uFnE+P&E?5sE*sW)HKtV+8KD8w8~P*RFADOLC%|XAH!H}0uxkHiotiZaV=$#5s910Ujwakbjc3Eu zHtk6<)$=Ig^dIvQm#K9{dSLP!Mf!a88%22|bpRD^=+Ql@)v)r0qCQNPa1p(+2u8y; z?2?lViE2q|ZhT_{nH%5KKp1VN2~!g0*jtqS%?A4OVwB7jv(8h%2|45n3w??a1a5f6 z{P2o71kheR7c{9OMZNkN^;nU9T79!fKQEsug4#i|dl{oLXmS5m+hh3L2n@HBck5=R zVxRuD{7I4asI^yl*sA|Y{(-HRRuyv|gnOZln(X;-{~A$pRFBB>Y%m|pf2(2sAP=+U zDeEn2!lt*$*V^*-?xlKh)}gjC5_$F5d_Xqq&6?#y;PJ1;h_?r96zLWscFjiV0p<+E zjdq_Qt`QK-VS_g27{5(JY<*!L=f+T z^?UI!%9z~C;boRSXH$gsoCSM5ZLg?Z#cX+bMJlk|J?&!iSPd751#qy3$GkXpU#{)-?B!MI@U_kMik-ps1$EU`}%d# zO2DEk+c$@!Q7Ig4kvgxBNS%=u1BcGwSy+w+)wn(d@lC-vSofKXnNo&A<&GntJ zmFRB?uUciOuo1ZP!%}#D9HK@cDtN7y8u2Vfe;n^cc(=E=wt-e0wBw*1XR^dsL57w! zOtvU%N726){cF*`wqso!jW?oU&qdy zQYTEzO&jdGhu8T2SU z9%aO%{L!NvuT-{sl@B~hu~+%7M|rnW*;!djPy4Q;rxil#&BXVzNQXrqM-b;eG!N3@ z#`UyuHEs0M#!gBJhfw!@i~7z|-%G5y_zRk$CX#7r@S&FRbcx^gym_`J5{5gh%#;L+v0Kp02Kw*%J8~ z#*Ha1Pdn;wqdAZ^n}Jp+k2)%~2CqRg?Vzh@BDt_j{a=g({!5ua-&zTT%&8s~f{$+{|>z};yoPy){3#;Bpr@yf85*TaXVRam-OkBdod`f?o^Gf1fs?&9twDtbs3>HxH9P3^L-$Nm6t?(< zv;HjYdsF^}v-ejh(rF*1nZ#1kC{g90GwrYJ$}K&YcJjn)mv=fBzd|pjPo>{akB_`B zObLkD@sX+Yd63A|e?h-aO^?#`G;w88J?r!*{44x#$Y-71ucJt~{P+9s1GV5e*9fk8 zj#sMx!vzJJ)n*s-pJ9UxEbE0sV7&D3lRJXs>FunE$a2j2L&3L55#b24{=|g#M`mGT zl9(T%SGbrfPm7Coet*Y9KiWRI-Bqk?c6qy#pCw$=J^CW`5f@xPm3_EP+2`s(6)&`O zPTuEgQxdMzg>t8Bd>rQ-cS#@M5=_4gla8^N19ZSp8dbl?N7Op=F@YuJ4j?yTx@g_Y92cBxWnmtXtbWtT0b zXpW((xJ%uVUN6rtMZ>-PKCHR(OH)SlZSgqo!n`Dv9bLtxrLd)4ZY{mH) zXOPSQNiz?#$$f7b3s}mLW~iW=%Z%7Yl68~;F)8E45hLJz`{|$Kv$+hxvp#+LP5E!i z5S4#Z*0i6dyOOZ|>C9{>)-YHSx#Q9x`IbD^IEyo2&f={tQ~nQ*`r|TYNOeyc)ckST zC>)o-REL|{d_YW%%#M1n3>2UNWK@%7m(m<0ypuSep`ruPjJrCyjAiiUYJa)*ScyIZ zVS+JkW2<(cw0=L$s3qlTC*iyqBvxFK4vXoe++XhOCt`mkyl$7da_!fp%Ex8eWk}^1 z{9%(^QobRb(e5kXhG!bjNQbpADM!k?4`3}(mzCfCx0u)p_}$0;yZkkBE2~U{&=gC8 zCFLNdZT8}h%98zbI^P)CpBl|fXg8L(jql#jogQK5IJjtXupBN+zVmEJ@Op05I!HZD zpP@|HS@oVPA8veTc99CY>4R?VyB;XIj3sPCi=cd(>j#Zt+ zUew;YaUFJO*od^YN9{!fE6c2t5fYjF$aKcY>#w;X6Pw=3o9@|Q$uG-k=;5f)7s!+D zrn?YS?vmgF-ItL+acfU|Sm)F3E`LV(ty_Ed5^;l|wIY{hsZe>^%_hUnbeG?NKka6q zAgA~%f+lPxAQK#g9fMz8Q!yE;z&x7X`4Wsjm1$NxDlP?O2Tl9dVH<*#VZ2JY-pSd> zp)o&im;bgRnKE_{a(4yma+kE_n~zjL=%F`|E0fA5k64!9u_Wb<9&BKg#h$C!<^@s)m$UrqE)k2IcT!9|dN=jmK~q5q zB)5sC*dPAq(6M{wqQ z+Z!6Dln1;ygeq?I@Al$2n)7ORdozqX4A(4wHQRI(H0Q{*l{sc_iEUu#$lgjczzCmv z5Nw^>6jG`Cf(JZp!U;JjK1<+sY4DkthcqfA8>#9P&CE8+Xi z-g)@FydysxbaJVjua@T6e9O=+^h$_uxxA+mpSF}2D)k2W$;w(UtXopmp`ry z_BU>!jLTG|wzE>ZtJ3IVr2nri=tUS%qzJrsSVh<>%s0sxTK>rbFc1P{rbx%_)SgnT%$T z0MaA8zgxE*$6e=ZEE_1VRUvaAe`p7)kT#G!P+?g@s+*n|Wk&*UHPSH-3Ah)8v9R^O zxmqOp+p4QtKlNVrn64f6Cps9z2JG8`%9tm#f@)(6eslFSh)unyuB?V;J^E5PTHV{Z z4U09%FibW8*C_b-Q|;gCCJorm|Iq-p;c}#3?yc@-SGV$IHOjwNBRYRr-K{^UURJ|^ z>Wk>ST3^IEQPr0MpkJv1Z;AX`b+8$B!LHU|@ism}f$Uj=@PF^>9=sQgZK{m1!Z z!DTf$Om7g?&U=*0YPxZg@}Xm8Ct6SsYNHo^D=Ij?2zS4j7ZwFt0<QcqGsRAy)1&w_Os-ihQ(;=5NZ^)na>hU2QtiEZ5ae zH{%qoEUoRD*3?>jYgk&_#5QY7YY|BxgCLw*27gnfmaX()$qoU=nm4;^`?`khxSy!S zaP^_uX8E4kk-*i8y?IpQ%=1KTeT=S-)~}$srdDbQ$wC}j8VfGOha|yz=6(!C1Sf0R z8TSl}1{?*kv`A~hot+Y)omec!GWF|d16=UX%W3&^Z5LA`kxV&D3Du;;v;ISV^?Yqv zjr>vVW;aQ}*vYYaO1p+}!b+txEOuMeWs=@1MB)>T`7?qxd4&CXG)(if;X!yuWT(iA&k5kz$x!U%=+y zX2g|S>KYP=Q-tjsbqHJKjk>0Gs+-=^`Q`6He7_$Hk3mK2uk+?G)_Bj7PbV_laIrdC zr&Ff*+bFW9bst`R*-!O*)a6niR+A-opNg{wO5)L z&A?Xe;GCo1lun;Xj*J63ZJZCM5HmpuzEpl#+k`usYw1tbK}nman;ev;pza&e)O1pP zU24v4ODyaa~Xs}e_e9_HEPlziR3ASg@M6c!cg2AFogyOg4G2-mvDYf>H8};~voV3d;84K9S%pa0=?n0Kf>lDD zbDClio*xJd@BxVmj=?}6;ur|*qE;y)P>k|fg#n+-Duo4MfJ(8!A>QTKB}E)VE>k2D z!+)6HCBz1!RESIc1N($HgdE(%S*?N)4+KDAuVb%M2t};cz`y_%A}+_^F3D$dxJ+@Y z$z>vvqkj+Ki8LUY941Hq?wHGJat!%grl`{ur>;2VAisVPKyt5@JOEYu?L`=Kq2SoDmpWDOm%~!0tHD z2?EDM7Z)FKgzA6Jem^4)D<5|S_5#xv+XIOlgM0bFkku8k28LXea|QMc#$D9u3k^Zx z!F>*sE9}AmVOPLKCCL|ogGhh~!YB4fIQj<(*z>V|C_We(#dpKU}|87?k#qAwIxUeh@CV@*MGn z_Vkkhvd6I};B#7iE*DRjqjtxs6ymH-7bUx+{rv%x3DeDmC=Tr6hkS9qe=y(};7ob{ z3Imb@H}F!RzaP{Ib@D@|X#Xz9ZkJvaM-11; z0}@9#QwWOtVkRpIxnR%%3D%7{h!A#id?fA)^TZmELQoe!o`g&eN5205wEX}5-T8k5 DUO@YQ diff --git a/software/CPM/CPM00_SYSTEM/ZSID.PAT b/software/CPM/CPM00_SYSTEM/ZSID.PAT deleted file mode 100644 index 7aa2319..0000000 --- a/software/CPM/CPM00_SYSTEM/ZSID.PAT +++ /dev/null @@ -1,37 +0,0 @@ -======== -Newsgroups: comp.os.cpm -Subject: Re: CP/M web page has new stuff -From: hp@kbbs.org (Holger Petersen) -Date: Mon, 25 Aug 1997 07:19:08 GMT - -timolmst@cyberramp.net writes: - -> Also, ZSID binary is now available. - -Could you please mention the patch from "Dr. Dobbs Journal #62, Dec 1981 -page 519: ZSID Bug and (Risky?) Patch" ? -It changed the byte at 02AE from C2 to C3. - -Befor, some adresses of FF80 to FFFF would be handled bad in (A)ssemble, -(F)ill, (M)ove and (D)ump - commands: - -A>ZSID -ZSID VERS 1.4 -#A100 -0100 LD HL,0FF7F -0103 LD HL,0FF80 -0106 LD HL,0FFFF -0109 -#L100,108 - 0100 LD HL,FF7F - 0103 LD HL,0080 - 0106 LD HL,00FF - 0109 - -=========================== - -Some months later, I got a letter from Digital Research which 'begged' -for the allowence to use this patch, which I did... - -Greetings, Holger - diff --git a/software/CPM/CPM00_SYSTEM/ZSID_ORIG.COM b/software/CPM/CPM00_SYSTEM/ZSID_ORIG.COM deleted file mode 100644 index 221c0ae6a58eb8209b3fd8d479cefd3fb3cca94f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 THEN GOTO 200 -120 NEXT I -130 PRINT " "; -140 GOTO 210 -200 IF I>9 THEN I=I+7 -205 PRINT CHR$(48+I); -210 NEXT X -220 PRINT -230 NEXT Y diff --git a/software/CPM/CPM00_SYSTEM/asm.com b/software/CPM/CPM00_SYSTEM/asm.com deleted file mode 100644 index a63e5aec663546b7aac7b330a9ebe8be3a46ba33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 diff --git a/software/CPM/CPM00_SYSTEM/dump.com b/software/CPM/CPM00_SYSTEM/dump.com deleted file mode 100644 index 03a77c3ca8b8bebcda6664c086872b01db043691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmXX@L2DC16n<~bu4H9*8)6LA%cPr&iAY)`)lveLL@18>AyNbnIV6HP70IEO(YK`!-p4oZ`##yTvE#b4CQAW{9MI{t&zjaD7R5=qCS|aj0YqPpO3+r-)ccYO2i- zP=3S1@Brt<)-_m+Zq|nB{X_9(ZVwVq!FD1qEsglqi&YP*k1DLZ{g!E*Zm6$S8kJg;kzB4ema~5{lcWA{)7GRhH8}2`3dI5y57ezdS%G>R zF6zRzWD0DPK*;!IWraCiW+7YxJC^Z`B6BU?1Y0Nmiu6d@1~+o~&tSnb6caxR$~@_v zsi_m6vP(c(0ssLh6W>=X{0edhUOvA`MGu}HUwW-#{3G07-qmA5z5|}qMMj6BU-apZ xW(*MNbb53*!t|&h#yQUz?{@faaNl%-d_HgSUtkF%)=zlG^$yq2P3n9C{{b^Cz8e4l diff --git a/software/CPM/CPM00_SYSTEM/ed.com b/software/CPM/CPM00_SYSTEM/ed.com deleted file mode 100644 index a0f0f5410f0542e3e6d05bfcd0fb361d84c73f26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 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 diff --git a/software/CPM/CPM00_SYSTEM/genhex.com b/software/CPM/CPM00_SYSTEM/genhex.com deleted file mode 100644 index 8314d35f07c260e8ac353e293bb39e84e6aafb60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmYjP&ubGw6rP=FLk(t=r9U7km07a~8$HxTEEHTwH``=s%!bX@T9k^2RS*7Z4@KLC zQ1BoKqIeL*gMUE|B02PA7K0lYaVrrCcnFvtvL00Ep&(mlvu*IfyqS6P=KJ1!Z%!{U zCJ(W!j@m2n<-`qfF@C{`JIg0m5?8zH_Cd@h z^P_)W9p!I{+@vU#0zA1Er4gx4PxJsLtr44+HNE&%kg{f5Te)S9D?)M;b8f|2L&hR<&-Y3f$f~=h{iyg$3 zfUomsM1FY?4R+9zn;q#PZT*jwQgzC&=?l1!Ps)lw-%=LWffWjNTdXVe11Y+$>4N`$ NT9*XGo4^9T{R0^&2MhoJ diff --git a/software/CPM/CPM00_SYSTEM/gpeled.bas b/software/CPM/CPM00_SYSTEM/gpeled.bas deleted file mode 100644 index a328e9d..0000000 --- a/software/CPM/CPM00_SYSTEM/gpeled.bas +++ /dev/null @@ -1,61 +0,0 @@ -01 REM ************************************************ -02 REM -03 REM Z80-MBC2 GPE led blink demo: -04 REM -05 REM Blink a led attached to PIN 8 (GPA5) of the GPIO -06 REM connector (J7) until USER key is pressed -07 REM (see A040618 schematic). -08 REM The GPE option must be installed. -09 REM -10 REM ************************************************ -11 REM -12 REM Demo HW wiring (see A040618 schematic): -13 REM -14 REM GPIO -15 REM (J7) -16 REM +-----+ -17 REM | 1 2 | -18 REM | 3 4 | LED RESISTOR -19 REM | 5 6 | 680 -20 REM | 7 8-+--->|-----------/\/\/--+ -21 REM | 9 10| | -22 REM |11 12| | -23 REM |13 14| | -24 REM |15 16| | -25 REM |17 18| | -26 REM |19 20+-----------------------+ GND -27 REM +-----+ -28 REM -29 REM ************************************************ -30 REM -31 PRINT "Press USER key to exit" -32 REM -33 REM * * * * SET USED OPCODES FOR I/O -34 REM -35 KEYUSER = 128 : REM USER KEY read Opcode (0x80) -36 IODIRA = 5 : REM IODIRA write Opcode (0x05) -37 GPIOA = 3 : REM GPIOA write Opcode (0x03) -38 REM -50 OUT 1,IODIRA : OUT 0,0 : REM Set all GPAx as output (IODIRA=0x00) -60 PRINT "Now blinking GPA5 (GPIO port pin 8)..." -64 REM -65 REM * * * * * BLINK LOOP -66 REM -70 OUT 1,GPIOA : OUT 0,32 : REM Set GPA5=1, GPAx=0 (GPIOA=B00100000=32) -80 GOSUB 505 : REM Delay sub -90 OUT 1,GPIOA : OUT 0,0 : REM Clear all pins GPAx (MCP23017) -100 GOSUB 505 : REM Delay sub -130 GOTO 70 -490 REM -500 REM * * * * * DELAY SUB -501 REM -505 FOR J=0 TO 150 -506 OUT 1,KEYUSER : REM Write the USER KEY read Opcode -507 IF INP(0)=1 THEN GOTO 700 : REM Exit if USER key is pressed -510 NEXT J -520 RETURN -690 REM -691 REM * * * * * PROGRAM END -692 REM -700 OUT 1,GPIOA : OUT 0,0 : REM Clear all pins GPAx (MCP23017) -720 PRINT "Terminated by USER Key" diff --git a/software/CPM/CPM00_SYSTEM/gpio.bas b/software/CPM/CPM00_SYSTEM/gpio.bas deleted file mode 100644 index 740555f..0000000 --- a/software/CPM/CPM00_SYSTEM/gpio.bas +++ /dev/null @@ -1,82 +0,0 @@ -1 REM * * * GPIO EXPANSION MODULE (A080117) DEMO * * * -2 REM -3 REM (USER Key -> slow led, GPIO-A(9) Key -> fast led) -4 REM -------------------------------------------------- -5 REM Demo HW wiring (see A080117 schematic): -6 REM -7 REM GPIO-B -8 REM (J3) -9 REM +----+ LED -10 REM | 2 |--->|---+ -11 REM | 3 |--->|---+ RESISTOR -12 REM | 4 |--->|---+ 680 -13 REM | 5 |--->|---+-------/\/\/-----o GND -14 REM | 6 |--->|---+ -15 REM | 7 |--->|---+ -16 REM | 8 |--->|---+ -17 REM | 9 |--->|---+ -18 REM +----+ | -19 REM | -20 REM | -21 REM GPIO-A | -22 REM (J4) | -23 REM +----+ LED | -24 REM | 2 |--->|---+ -25 REM | 3 |--->|---+ -26 REM | 4 |x -27 REM | 5 |x -28 REM | 6 |x -29 REM | 7 |x PUSH BUTTON RESISTOR -30 REM | 8 |x --- 1K -31 REM | 9 |---------o o------------------/\/\/-----o GND -32 REM +----+ -33 REM -34 REM -35 REM -36 REM -------------------------------------------------- -37 REM -38 REM Set MCP23017 GPIOB all pins as output (IODIRB=0x00) -39 OUT 6, 0 -40 REM Set MCP23017 GPIOA 0-1 as output, others as input (IODIRA=0xFC) -41 OUT 5, 252 -42 REM Set MCP23017 GPIOA 2-7 pull-up resistor on (GPPUA=0xFC) -43 OUT 7, 252 -45 REM Left Shift user funcion definition -50 DEF FNLSH(X)=((X*2) AND 255) -55 REM Init GPIO output ports -60 OUT 3, 0 : REM Clear MCP23017 GPIOA port -62 OUT 4, 0 : REM Clear MCP23017 GPIOB port -64 GOSUB 700 : REM Set slow shift -68 REM Main -70 A=1 -80 FOR I=0 TO 7 -90 OUT 4, A : REM Write to MCP23017 GPIOB port -100 GOSUB 500 -110 A=FNLSH(A) -120 NEXT I -130 OUT 4, 0 : REM Clear MCP23017 GPIOB port -135 A=1 -140 FOR I=0 TO 1 -150 OUT 3, A : REM Write to MCP23017 GPIOA port -160 GOSUB 500 -170 A=FNLSH(A) -190 NEXT I -200 OUT 3, 0 : REM Clear MCP23017 GPIOA port -210 GOTO 70 : REM Play it again, Sam... -220 REM -500 REM * * * * * DELAY SUB -505 FOR J=0 TO K -507 IF INP(0)=1 THEN GOSUB 700 : REM Read USER key -508 IF (INP(3) AND 128)=0 THEN GOSUB 600 : REM Read MCP23017 GPIOA 7 key -510 NEXT J -520 RETURN -530 REM -600 REM * * * * * SET FAST SHIFT SUB -610 K=1 -620 OUT 0, 1 : REM USER led ON -630 RETURN -640 REM -700 REM * * * * * SET SLOW SHIFT SUB -710 K=30 -720 OUT 0, 0 : REM USER led OFF -730 RETURN diff --git a/software/CPM/CPM00_SYSTEM/hello.asm b/software/CPM/CPM00_SYSTEM/hello.asm deleted file mode 100644 index bfdb81b..0000000 --- a/software/CPM/CPM00_SYSTEM/hello.asm +++ /dev/null @@ -1,33 +0,0 @@ -;This is a example of the Hello World program. -;Uses 8080 assembler mnemonics. - ORG 100h ;cpm programs start address. - JMP START ;go to program start. -;Variable storage space -MsgStr: DB 13,10,'Hello world.',13,10,0 -Stack1: DW 0 ;place to save old stack. -SBOT: DS 32 ;temp stack for us to use. -;Constants -STOP: EQU $-1 ;top of our stack. -BDOS: EQU 5 ;address of BDOS entry. -;Start of code segment -START: LXI H, 0 ;HL = 0. - DAD SP ;HL = SP. - SHLD Stack1 ;save original stack. - LXI H, STOP ;HL = address of new stack top.? - SPHL ;stack pointer = our stack. - LXI H, MsgStr ;HL = address of staring. - LOOP1: MOV A, M ;read string char. - ORA A ;set cpu flags. - JZ EXIT ;if char = 0 done. - MOV E, A ;E = char to send. - MVI C, 2 ;we want BDOS func 2. - PUSH H ;save HL register. - CALL BDOS ;call BDOS function. - POP H ;restore HL register - INX H ;point to next char. - JMP LOOP1 ;do next char. -;Exit and return code -EXIT: LHLD Stack1 ;read our original stack address. - SPHL ;register SP = value on entry. - RET ;return control back to CPM. - END \ No newline at end of file diff --git a/software/CPM/CPM00_SYSTEM/hello.com b/software/CPM/CPM00_SYSTEM/hello.com deleted file mode 100644 index 4a077dc7b844e9bd6e8321691398859eefea3041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmX?X#>mU%k(!f}uTY*}l#`;z%f-OJAVmNuGB8*wi7+afGX7L#W~|$ODwHvvkLl@I VR)&Ylhg}%8L>Pab1R6sG008cb6JY=V diff --git a/software/CPM/CPM00_SYSTEM/load.com b/software/CPM/CPM00_SYSTEM/load.com deleted file mode 100644 index b9601e002cc09df45e29331795412a0f0be8e217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1792 zcmbtUUu+ab7@xV@Kkaq)%2KFuYT3OzE8PR3=jAMGuXKC6&A<>jV zVhvbnVw6ba!3WR>A@RXzeA7rmeZaJv5~j&SX(A+j!3QZZ_h4c|l&G!W%w1D`c5^p7 zzu)ise)HYTHx~{@jG}*FG$`#Gt{K~kJx1^D=lixBZfRes=9G=Vt9njQ95%cl@B`aO zZ#T-m;~I|Zf>brqZmGH-q8v9}svPoyn&Aj_(T3gR9JAl^Vx|sn_I`E2q;8qP@N6o7kX)s1b zr&952hJOHvs(&yjdg-D+Qt^!uKk#5#NUHh4s8K!OaH$bpEc;c@*jp-lY3qUdh?)rP zPCii0DDK8|?oQN+HF@^Mv+Yq4KPupWWfkVe?gBI-)hg+_1>SJ+Px_Ckc38kw*((v9lz z2zynfagF^DiN|1|W}Hk6w8D5}QHk1da?`mJ^FavP1=_{u)NCgcb~{=AV=Fv9t4BC! z=M!q`T+Cbj&*@h^*r}&$i9fICS>hV^-qPdx4D974F+z~be5nDKedoT;4*5eHl z_hOK&PL48BQTda?=Lzs>XD8Hbf>5(dP)`B1VU02bwG}A6N$Cj1H?GM^A)6p~h+@(L zrvPt)5NdV{{50Ur0&f%e8Ni)u7M7rTfO?Ef%P=Dt3EQ~+eJ4qqC6V7kph-78R zeQO7qjZMNVmCO(TspJk4_Da-hgJ~PlSEKB*x^zkcjAJdWZ}X06@Marf*VUyZDf~#% zrx65f0b%h?DO{3x=iG~Ccaaq|_pOAd(R?%C9qF2eJ_+wiHi&rPmV_PNL`^xLFju4C z5}ubD>)5dtv0|Pi`$*CzQ`vrvH)@U~3z`{g$tT#Tv|=x4au|`#EXgBQP_w;!T|*8( zmF-@l+k~A`>zUK3Q=mPB@3GloR#v%3CmBF`p0F>~Yjaf@jxz}W44xy9Sl~XZ3vbB4 z`0Q^krywI7mGwS?I|;j@F22v%4AjP+Rblz}R?xy#8GpfBg-t6^6Zgy!oFjTc;|X(e z9R17da~aQwzREW`3EvW^uZivoWH-^WK>gYX^er?fHTP%}xS;8cQaTj8pKqnUimZaR zrEUU!U0pn>n1fm#4V;75jinYAA@N1caJ8j1= zl#h--AkQpztN5}gU|JF6%@}2WDd*vN2=Ce9uPB^Zc1YvLHfaxO)O5Ae@CQ+ZJ&Cul zi>mEv?3_wNghH8rn2ac;^<$l=o_Ke>Bk{o)h56ZQ<7d7Zqc5fo)qAwLi>lx*ji32s mjGlO@lG>a25JEp5qvPEuaS5it^Q_Cq&ZMp$uG7T-d;S66tN&L3 diff --git a/software/CPM/CPM00_SYSTEM/mac.com b/software/CPM/CPM00_SYSTEM/mac.com deleted file mode 100644 index 8505de93469acf73d468a91f28d03387cfb06a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 diff --git a/software/CPM/CPM00_SYSTEM/mbasic.com b/software/CPM/CPM00_SYSTEM/mbasic.com deleted file mode 100644 index 4bd7f5ddb7681402e38fc38f0f260f9a0479b0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeIad3;k<`agctEp3v9rYkK_vOt%lrEP!~LYvak63Ws*S5^y3fsRNK(5{3cD(bkP zj*2TTIBrOk#h@tD+)FUIa*+hm!Rk13tzmRBqox{07`^=7=LVSh%=e$~Kfl-a_5Hnm zh1`4Yx#v9RInO!g+0Jt=^U12W^T+5LYW%9d)W)XS#=bvuVP;9%!PJ4&-=rIBo=p8) zsx)m;&C&EFwS(%7b6!aMsK%sTn*A^B8#NwJ?Qh zG)><$ywNys`CCh~morUt(@10N@;B;+>%OkD=N;BRllNn3(u_khe#p70?7$4`%(XLH z7v!sj31xMk&W)Wvr>?OsqC?CBPyVy|TwK!`Wh0YDQ46h&F2-7a{+WffRldjS>d%jFtp9jI zP4(&Q7LTFjTtUmpLhCujyoUYhRSQqQXI-?&dgj=?s=71pQ?(0gn_O>JH97CD~qwD4RlRF!#8ePAysXPB#Lxa`#dc*0V2Hzi- zo|Riq6)hRMLRo!x)zvOMIas%__S~s6=NepN>Ml&AtWBTZZ&i~^V>A6w?Rh6vyL5jR zRlm6T{5_|BTaPw}>(9s5pG{hH_Fwf2YM1T*6Ghc6Jng0yHvp3t7S=VM-?!L$Zd~p8 z`|9dl?^>%)o@}f=??LwC){kXYrnvS@a_!uv{Sxb`5~{Yr;&NF}{<5HMzi~n1{;3OU z_D`#;*&mHI&+lqpc>2kzMXrx)|M)xWc|Wzd_RJre&p&_W3E$6in)YWdZmP4M`G6vg zKH7Yqwk~izZ9S)|t^Fi}qH3F(8_qmjTXk}G^O*-~8=I^Rt_N$mM`|0J7rEX5Hf)_` zUeo@l`jhds_08OYT4bHBs;{vws$1?lPBmH2?rE($`)XB->yyQEUO(Sdd)8|?6SKr8 ztvi#@)UZFL35{CzUszl+(*>B+B2UvSkJuDV4Ztve^vGCXFoktbtaK& ztgHX{vqqnfsydxo)v&n9_XSl~)8u}ss_y(#^XeA5j?~tlJlas#FMv^v3PE|F|W6;5%cx!{7w2?{j!3Ff~N|*ru;tt z_~c`gOLL#goteMZu+(t3;dkTKFO?M!TA_qGabfbxl=M6;-!!WBd9w8`bOX*mTRbj?PW$Th?scNLlY}-?DCF zXV>+jx3%Baxuu6{-n6!TUB{;Owd#$ysyE$n+s*A;sKz^P-g?WHj?DlX0la0+ruFSq z%^jOJcHFXNTf4f3RO%qmshW;EJGPQ$ZthX{wr}aY(f-WlUr4|xm+GET^i|O6hG4Fk?%bwc*LepJy7Bt9&b957 z_;St0E$wU8_7I#m0g0N9t+%S{imcb*{f{E;-5p!EZ5449i>L{xkibM&SSM_6z>+M*siE{(qkWU(5dY%l?0* zB;j$C_0~igRSj-?E2W8{X4-VZ5&C9@B#ug8niRragY~+(x`FL>^_C#fjWX3$GHcf&`~Ks@bUJXzXNdiP_2BTV*FOpJ^muYZV+t znI4c1MV(Hs&|JNW?wQ_{IoQjI`nO~OZc&NX&;6`4>xbz?vzkk<;_h4E^$jQ5jc>}B z-I3e(iTbx?nZxH2{i@5PIj`?rqV_GB>E;9n`*I?qt3;jQmlL_nl=2E>gt@9zj#k+O z_32QapBp>I8`9ckzH^O!7x(filyZcFAX*U34$o4C!fYVb;R*-14U_ng)AhxlwBC@P z-L3SRev~`tl}i1cGVQZ6JuMq?1`+~X)Er(*%YxgS-hfWGRkuZ_(#6a1m(`_9k@vhq zZ&!LbyHYbil~UUMQvL6w+7D&it~vUbrR4ELnf7;5=H*2FGt%JAx7u{?xpg|7&B2~k z3TmH2DaeN%N-iq}NHXs$bwR*q>`E0y`Pm@gmZtjIpOoChnjckHuAVGSr9FzEcO(E{ zHH!et0AM!Vx=xU2bq7gQx+~8z|5DnG9WvtvnPip(xY`6QyF?|Z*<6)_U9K{1kU4C0 zu1cshKk9d}2}!Eo#BjeE&&{tLUY`_@JT=B8SO#^-5v-A$TD<81V8a-pk=->$Xc`n> zo9|~H9Ya#hk%HCchX$QaCLxJOW$@K zj2;-%BjmAPjmZ+u;VSrWA>gL4e;UJ0(3&YyJ#sk>GYb^z*m?OTWv;#S~$7V)~fY%Y-QU((%yUWMF{j3%mL^8QJvL$Zt0WDj2!(CP3F#{6kt81AR2?xX zgo^uBDJQb%a1!&LO31-z1~7qm?$+_bJhPl0r!p&03$wpxypwq%Nf#zChD_{Cl`x;K zRH5%1Wa$1-Gd+1s*yb4N=P@x(pdVqI4n>(-m1eeN`=i$Wy%vo&-kzL-e;%_bnauaW z>Edy=_aJ@?l<-sP82JC`iSOS6Q&HDAfP`f2kXPB-HCR+o zLs2schBm>(UQTwPHrDfd>^%w{7EO?FPC@Qqe@^zBR}fCQsKmSqcQ2$+it0$R-#xT* zxFk(j=u@htSZP6xRFVL3$LNa(HYyl5JSWtV$`D zBG>OyZIT5o9F-q*dhsTNVgQ}s%S;i9E6Xc9*-2=mG zS6aZ7rpP3&TDsD@sGJ`y`GBw0| z*j;l_`yte(|JuOqo+CMu%)FhdjK*{WFK}WGV7i$f3Qu)0@20wtMJSRObPGzt$O9OH z5h86#F*0Gl_?Pnh&q`k)Rc=l+z9Hkewn?iyJlXNUc`*Gdw^%`Dv+z)MG;|CelS6YP zdBn_1OiC(_>X~ODopHF2xpiRp^0abxOxnvgHZ9%hfHahH^fm+|OgQ2V|tc!8))eQqcV zZOml_cR+2k2oJG;N+UH43lh6oNeWk;ia}()Oj8|~WjWXjigM^X$u?mZt4IgX!QR94 zyQ$?&QaTzM)JK#ckR~{2bI_C1G2L`JCN>SA2OVrlDk!OvLAJJ}L$n4**w*wQ+A0V_ z-3XG*DpA7rA4O5^+cIb*Jk$;+#5dRvCevxmmiyW5>8SImA;7(#$Fon7hB2V*K{5*@ zWFmXgCE!gCH(m%Y(@&?T;m6#Q4zBx6sZwn;w!nSapW!5viq|ota^J z5RWr6?ydBdW>g$wN;6D*uDxi7{&nNU`HpI?&B6l}5tJm4O0dy)W{ALU$uK>PI)KF9 znQ@HSoMC!YYB9CTgsbEkHGRKk3@LqgW)v}_8DVq+t11)*<_~9#>vfDinSqrPh+yat zAp$r0070a)oONX6P~7Z-AP@TG8$v_p11z8MA2{$49KIwSVerr{E7~$|BsntHB|u$)3T(b={HuJBlUOiW=r_mO@kFpZ zI2M@A3J|J$0;a!$rJovWt^_BKD8PFbh}hYUzn7JQIsw1mU>+bs5ac~E(`FFz=!8sN z92J8M5kb~E7K+pNV}*SBhq1Bvkr%0%Xw##B%3eUP8jIN`Q*fIzO)^CV9?3j9olwV< zc}GgH!(+v?gQq*jf*CK#4CvjmO9X`xW>qH8EkM&Fep0kEQ>4O3CSHFi4~hd8q`zJQ zkYV}|_+v_|1uW+|u~;knbY{9KuE4;>Sip0vrVr%~cTZ5`%pCDE7QzlfVadKs*KkY` z^Xn9X4$Be5Zyq~B9_VG6Uea2So>$}NnV7L;CDFfR60w*a!;V}NjIThM$LhM99?4`n z3AR5l$yvDN8PX}gQbPFeE930O1O;?)sNhbU_Ia7`{RLrkcwg4gXd7LV1wJQ4_pu+& z6BK7PJ7U1pyIVdu>yk{)a`g&3*pIS=CBvU&T@-{~_LD4VWGFur4VA$`Wmav=0|a#+x6s4to^91gJAFWf2A9 zbe`mDY5ERkZO!h$7F&c#b-50p2;u<68c zLKK@nPKaT<#`(&}wRS_2&K%c^>*{gc$lZoCLD{!soaT)fNJXL>cmc`f;TrW^Za%M# zf*hd~P~*PHLzd==7+43=dpaL{Vm+}YzICBch=}MI)-sNVfMyns1KLinW?u}`FpdZQ zoJCZSAhyN#J>#G`S@hT5Fwf+Y0sc~f(I)!g^6`Rtcwb66J2JjP7-e4>C;Z4R9FMsp zu?T*4`vf6}?HMopk-j(%)gTpMd}Tw94AK828N?uk;(&}V=$!G$AOkMw=#=r?8|nb} z{1To?A0Lr$`GKIw#JMqg6!)?5*}^beFkko+d%Rk>z^!kP<0-`R_89;n+@sS*8v=-XEIBPiYUhvVa7 zbv9(6n?c`eJUpJv_8{_w89t9f^0~s5 ze}VjS#!*AX)`TGQ(Rd&q^yq9uI|V8I^LV1+3wbwG z!5e~1W=b3-wYpHcM~L-ROo;Ta0E{q*p&!BU98d>GnAQng&G?b+f?~LSf-o-dMXsJ# zEgkO%+elDI_7OF5UB|a+!jEpD(48t6+`_2a;3JezVB4z33Iv!plfK-r4`mdZx61$OpJj+GXXP z_Vvsd%;ju9=?><%=7HRR3(F%cM1$Xjf>^p9&;lN6VVrMvwxAlGosDPHCYd9{8q{o) zCImfVb?^|#vJn{I;*7CmbCjAJok%QlsONb!l!ypB7V=r7!62F2Ng1@|2!qW8$%;9` z`k`Lt(eo#wFjjgH6N=1IdpHn`u=Eo%gChhzKZHAK@hB96+NF#E&(i#Sb>?MGpHJSS zq75zmGn=#&06!61d^;~F0?s%4frsg$>{Lv6j1`!KtVQLW zIlv~M`dWrsy!LCEzFw}qD63hd`9`K%EJr4UZoORpfn2BkK;D1U=#Ud&(kzjU!wdr7 zIx<2;M4}v;Ec&lyO{;W-eMaL?BZ3cJ1{lM2FnlO*QL6cE4DlUs%O~(2 z(bLlXF8$Yu9-=Di`j7I1*$U`#pvgIrtnXPFW~N{h?I&Ruovqd}&iO-U!ERLvQB2eX z&aO5Vt3RihsBG?O^*PFeYdD)CsIv8HLRzefQ0wQ^TQ9SV)gA^~zzg*4YBJ&n)W%1o zZQKsE@nNZlJne}*Ju3A;5!#_XHNL2P7nx$Bw)S>@kneSf<(8<8GepqL0TB=c)E+fm zl1duw^N8A@le?fKE~OY%ir9m5 zG=jQqxK-o0(ywWQt=_7E%f;8Ku`|EXm@Yy?*`O(>HvoK8bebE;UX=HtRyS%5=V_yu zVokY?zDJ|8UEHCA$K-Jh@rb43Pk8zC3wn4{UemylI%+<`zNRq*Tz-uy%A%aD&^4`s zj`fa4H+n>4J4U~&34%GZ8sS`z*V#t@No*O4)I~Wnsu5Pu-)ac%j6_Q?f^KzD&i)!f ziG9@4$HZuDy0(iufFT|ak4m(#I5M@Q3Xjf$6Q31|F9@be4NYukCZN?}|l<(GASVsBf6$^txPdN%}t3 zHmw=~d#}M#CEnAO7N=&nawG^3WL8u(OxGHk*RJk>6Vk&a>A0s?*~l~|wn36^1drFI zuQ%Bvc{|^Qb@#JLsu1=Jn&K3WpCtp2LRc}!Crf0MYw=R{W*s!T8l4~ZPxS&X9>vq@08AD=50C>W79$q?$IHIRd z@)M6W){2u4xVYL9-fLinbpN#}PQh$5qU6HVKoG_vmYZ3rDVju#^MGNq;dVn8?;)7D z85f~dHGWn2HR4xm`WOylp8~EPaC*@u#uIOY+y?`Rf?PMAl9wAlmIG-IS(NWh(lG}n zg_#$s*pDY&;}^`xq<|&}ge}}{3%syW{Lmv}ieSFFCqZ^D275kLY9qPGg&yoY9>59@)&ZVJ;zmeTaJ^r{4kjJ^IUJ?v5N^OO9?Dd%Spxg!?duY00tg zvDlt%)7hSB)!Cl5ez7xW!!348kAtqtncvjj**z35{Dn@+u^XidPyf+F^vs-|*bLv4 zoS2DLrY0vgzc-_`=Mn2@Zcg{gS_j*bqme4^?eb}JSZz)>(vDv?VX0mKfFI@&hjNn zig_yMR6=L(;dkg`IX#8$iB{ji9Oguhz0ln=(b_w)wQpiu_e2YGEC)MkJ7b>tXXdU+ zx6Ijf2lvq3Z|vB0R}9Jh>YYWqWLs3beu|mC1Kvi*-%3)s=v+z3fNJa(rZgAcNk~Ac z;`J~Hs5z6v4VO8I_DyK1`Lp=w<(|t85mkLRs7nT*JI_6Z;!5*+jGehb?Qe3S94%g| zNz4gomgWWmpg7@e59S7f+3^!wdwiR7{a_)P-ZRuhYyZUc+b4Dc=Zi_~-MQVD)Rqao z^v$_J-h=*HJp>27koyb`p%s=Xo^loKOkACNtL! z_9_%*>>Dii#N7w_;GK1I9HlEA$Y5kS@D2R{PJG2s00T@Dr?7oD(B(m9XU0BJVHMra zquqH>j{1+f`>uF&x;SzRf* zSenZBkQSt66T2!W>U3Q_NLeQy^k@EZhG>798Vw2j{W40?QZIv<9mro0r&E4QqG zE73Eb=5q%o6M+@JxWgEy5Cxd;a|L&Yp3s{9AwLvk!nln7D<8%NOb%%Mn$H!1NWrms z6byPnF*vN(%RG{SJ;XwrnLoJZH;ht`mj804Mvs;;o?M3>LyEE1L@VZkj}Y~=L*L(= zO~vhD9?V18vncpWjUL)HY-5!ifA)PQ;u59DoUsXeO)-kIHguqL zZ(q14gOlZeS&|of=wJ0#17=QKoZ-D#`dht2Lk-Zs=wTN!jrtzA^^bv5M$j;n9t#_8 z|E16X8d@=)=3{%frG=qik_zp{tMbrU=41gJ6}IUP9b0Vh1kg9=nau`sQvPs8c`!fd zTVhB+s)C+lz*_Fl*k|E11wDJ2^#+m-^k(eKyl>2bQKjBR%==J;!^|pRb{50V9-|NV zxwHZoYy*lSAU`w^koy7hLqi4qq`~R!cU(DQ@OCp33cedS%5sLF1YGKdp8#yBG`HK~ zyfQ}bN3NH7Ee~K%V=JWq?P&@kfK_1!BN)Pg1mCZQP??#JEdA{no&6c>LlyK-hM?2W zylLov)547}2=+Th$LQ_WCpvqcBP)&!v!JGo?i z2-ty1kfo|gRX|=_4D~80ndRB}dwlm46qSdS@w!0P+^+8AafU?tjskwJp*|$c6y=ph zp#baZBGd*D5Wm|o`hI~)p+F8-Sm+Z9f<%0AcNa23f%yfls1U;Ai`qiFg-m<;9|fAL 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Ǔ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 GlKpR~F?_`U diff --git a/software/CPM/CPM00_SYSTEM/pip.com b/software/CPM/CPM00_SYSTEM/pip.com deleted file mode 100644 index a0f3c750265044ed0ae1fb2289c133e83d109b47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 zcmds6eRNdSwZAu$kD1AQWHR}jWbT=pq#zdrGKQ#kkjr=_{X9`pYl4+H`Y(bk!< zrm557fh!uu1gfvS`r2`U#-^!F@%rXKEZi2Zk2Opi7YMXAwFYhs$Jzqb<0o0fY*DDH zs>19*psoD|xGqpPUL7|%gYiy0j+GEx2v0$t*27flU#@m~#TVs*tws>p2 zwY{~vy*1d{9*M_iHpJrX4b=_NNTj_v9GxOGHnmNMsyKdAtSKH&cR-D% zDKpbZBpMIY2O6f;$Lbs6;aH%pDKfo^W)mEbwzf7!raJ9a|3DUPk2Qp=>Tig~;^D@s z8z8L}ELy_gQPmW=vA(&fG0@%yCXx1*8_*XEH$-ENfp|0;XpTmvUZml!stQLM1JNmg zDNW7cae;<-^Od(;SJf~r+%UbZy(O(Erh`X3g^dfuXSRl6WxPEW2}EP5ITx8uiN;#$ z<5knbH^a-&9ScHpqp_I*9+%WbvZ@-QEmdvt`dB!XNfh%TCh>W?eN>ONfs;^N|NFjVKiKF;| zj{{f2MG%dU2{g1$XbA+zPb9-4;hW$@7!-)MhGSgv_^S2@xpQiy>6UQgWOwDpBX1Ueuu$kkna)i|mL)?&{-Ik?X@VA(^kpOwRgjp8)>ctnhiK8Vm zkgx8NhAi5HS$b7Afti|~rLJdn!ReCe@Qc|aBpLm^S>~-J>N!749Ly4L70kbuoA;OL zN3)0x;C(**qa1J;$T&INEuZrrV2J^mVQww|9-~YxE8F}P09rq%)A zQ}$$wo4BZ*tX5QaGM4DeNv%?9mYkVVVITvmeGdMDq#l;|jN8zcR>#XdWg+GvdrBWD zwgD1)xDaoS_$t@yHU@qNI=Ozm5}F~eHZcb(>dSKoE6}dbarw-!D}@hab;AWaSfVXQ zzKQgMO?GW*jy#)?c?>bJFh`!pYOU%VLNGE1Bj!CmGr#noSUqmUd?zD(wUWWiUd~%^|+jfc$XbthWxU0@7To% zedQ%-&}AE$=okT9V&xTSlrZRWaeOaLQeMRjH}K#d$&g>;UHj0LH`2AAcfF1- zPr8eg%O4p&$cGPL*o!VhKE(0g0x#hB8yr6jypZE>ar{l-MI$VZ@UA{|6>}1u;~H>@ zaL=&d3h;sBFyJ^hfaA(hsl{YALphde<&%8k2~3nZ{W~0g8+ZlB`#Ej^uj2Ucq}nde z?%;uu{Y*b-_jCyuD1`*@tI_7$Q{vzb!<8fVNao%C z<#oXapr-awN|zoXuhBB#W)N$}(D(F2ROwPmgrktnrgJ$Lt&E$XdxTrAA+vdr1RzC1c4$x#E6OjH}bc zg?(TpYOatWcd^B47aIyBzs$vPRTC2AHUzM-B2r+ounod7Fgte)l6>l~N=iyCQyex-}Gm}hbT$rhouOJD3r zgGVoc>0XdhI>L@wy>jgX6%KuZctlT)$+ce`V}quNp9 zxZ0sQ>Ks!Xt&UlaI~|K1D;~S1&9Cy6uP#ptv&r@P4#&SnyZ0)1PyxXhp5dCI5=mPFBD4PY!nBfa9^*>>~qrfOHgNk|0&`(;N^$>w$$B@AM~eOW(h=c*?&xNQ67Vd4kz{5wa;Aq z3TMcVL(#|Cz+AeMECt5zB)BPf+~__tC-^u+YsgQ4>A!fEZ{-vlK@aAoIf|D+OB#d`0E$!|sf{tUPO;C$BtjbY3t|eUkQ>8pldLork*${2*_WYQ4%+SgWv$ zhPO%T8Vvt?o|=jH*_Ws8#3gZO`WnB6>2Kw!Pq6_zh5H(oCWX^!M#|#@dE{}yg2bfW z1x|xBfm^T62YNn_3;QdgWfoAIhogmV15^fr?mSZD6(04xzb<&*k1+j#CuBFk5kp^N zXo?5Tq_GhsPMoJJf@_)lcYlpxPId#tddEE}+B*=t%RR~+uAl&XzZch_#_MivV!g+sfM#yQXYncH$-dy1^Wq%4 zu#V*Z(W5+_KIB2%84?Y7EmPOAKJ8PF{Efdx|8Ht)g^*z2hA=sZTf!-+FKNk#5G9hH z88P7&^K(xScie!+@^w$XA#b1y2TBVlwF}#DY;8c^P1|udXcBGt)aGg}`E=tK%moGd zHThIUL|CweDKFyay{3RA?#(xk71DI5wVup-7GI%KG=0fu@|9;vek-%_ff{XTzWf!5 z`x;*;x~T3Vi6h*SNiNiy?8`UkHm+#z=DV!s>H_`!d?=98U*F9u8C5&tMPY@sGYDd+ zDr)1r2;826f%?h8^(-3l9ZF<-4X8ZAJ~75iTxV&_Ywj&T=`)EG&ouPCUSeSBpM-tf z!)k}2SExYV3KL%S%3Ek%x4^Mmz|*o8c>@^8R?#xWGmtX3V1;`MKBlvsXNVPEeYzJ! zDE@l9B*FsCA$G%vSamDILKtcfJ822_Fi5J=>b%_KS=yUKrPmaYN`m$dRDz4Fr1*F( zBkhAI`97J!X>yZ)NljI>3trqg;jLjWE!T%>Yn=s`S)0Lqrv0Emy?{_%&y;6io){3& zVv!7eJL2NkY_a?TEu$SxUvhqd@&YYmQ-)3bHNtLo0ma}8(7C>Vf^Ijq@oov;ARf?@ zs;i;vv{eNZTAz9o@&qtC^6e``Y$Bg<z_1H&jrNB^L*B(}j2GEy$s$gq`X4nMyKgMN<|{9;6+>11R~G>Y zt=ysPX6Mixn|7#wR1uaBcxAKBf(94NYopPm5rzw#b(K-?!!uMMDTBvhN8)z6^jbVL@ymGWYZxwFp&Z# z`E;>LutDGTbgfAA7UQx&)YNm*ZkWr9SL1_AMlk}=NSo4Wz&LEI+wVdaobNvk>|^sr zzhTZQ3LZwpiHDNG67_KEjws&@pCrpmP*3ia+KHIX=CXH*-Qme2N0rNLOH<%{=VBD-32y zh`$qv!d^y?bQAHy5S%Ef)znr?;#Q0KX(1I+uUYB)lT?AK?JE(t6F+$>B5I`C86HNN zh&nS}aZ*XS$clPUoy(Ad^Q0V}YyVOr@4A7_{3g~tT&jAdV2z~zuvD(0^NHV>5m<8xuSq=+ z{jd~oJaluuRE0j6w&$Tz@e|@mUih?7z6vbJ+(qen{A?*4lfx39l&W{4?EA1(6#1*A z*BZq!Jv6gFQ7TsQp7B=ks?3WnGq64*E+u~1yr$)@JR#+YSJTE9Ye(q6vQp(d>__Ds z8aC_wV+ZAL{YwnFpH+yGC|vKs&^mvz+9!9dtQhv|lYQ{gpfc<)1!iX8rq$0p*#c-> z;%RdcFJLj#BMg6xssShMB7X(knxe&hIkhooupPm-;KGM|W|2?5nc>+CFPH0lX0llC z^_glBOZNKsfs8k{bv~77_xiBo@HlJG18tP97kFnh@wV58NT##6R6c@O9#f_qNhi@2 zSc{4>^#~it=D8byE0w#?QK#oJxbQN#C#QO%9L)2%Hy^&_yqu#TfeFdYU+2C;gL`2!^vM=YKX(blp@#p_ais)hmxbL;yAl3 zc==-jz4ETNQhaL+0Xr}ZYVj!ZXzU!NS02yD%M=ZnSYzf+tG=m>;+@`bw9{oF!2^~r z`1flcmx#gJl$U@<}X3C>Kp%a&@_KlGb4~-ICwNdqjU% zxq1?{wf6IJ*Lb``DR09qc#b*=@6ITvUAG>)?uByx4sMb3o^o71f)-qWzQXJGOXYag zPSYGo(M*^06P#u`3ecmHdQ9r;f4|(oYr8sK>eK#{X3)is4t{6n z#uLgr$n25~58!FsAglS?JTIqHFVH*~dRX#GKRv|bS{r4?Alx_Td$hyrdwhWbc-i)j zrM(LbdPNy?dd!$(Hr~0vW9jSZPNz2C&xap4$QCST9ZqeLpVK_kv2^1C1DSW(+K#2q zEimr7JyJQvw-%g%bc_;w&j18Pwqu%8+vTs*Ui9Oq%75kO&i{H;5Cs80A;sypJp7y_ z2wh61kR@baCPukPfM0&luh_mfK~R*-i2tQvA#ocP1!qRC@|0y*7%h#K)Qr(mHd^|# j*#rUq0tUK;zkK<>SaR{5 diff --git a/software/CPM/CPM00_SYSTEM/rtc.bas b/software/CPM/CPM00_SYSTEM/rtc.bas deleted file mode 100644 index 8b6ce26..0000000 --- a/software/CPM/CPM00_SYSTEM/rtc.bas +++ /dev/null @@ -1,19 +0,0 @@ -15 OUT 1,132 : REM Write the DATETIME read Opcode -20 SEC = INP(0) : REM Read a RTC parameter -30 MINUTES = INP(0) : REM Read a RTC parameter -40 HOURS = INP(0) : REM Read a RTC parameter -50 DAY = INP(0) : REM Read a RTC parameter -60 MNTH = INP(0) : REM Read a RTC parameter -70 YEAR = INP(0) : REM Read a RTC parameter -80 TEMP = INP(0) : REM Read a RTC parameter -83 IF TEMP < 128 THEN 90 : REM Two complement correction -85 TEMP = TEMP - 256 -90 PRINT -100 PRINT "THE TIME IS: "; -110 PRINT HOURS; : PRINT ":"; : PRINT MINUTES; : PRINT ":"; : PRINT SEC -120 PRINT "THE DATE IS: "; -125 YEAR= YEAR+ 2000 -130 PRINT DAY; : PRINT "/"; : PRINT MNTH; : PRINT "/"; : PRINT YEAR -135 PRINT "THE TEMPERATURE IS: "; -140 PRINT TEMP; : PRINT "C" -145 PRINT diff --git a/software/CPM/CPM00_SYSTEM/startrek.bas b/software/CPM/CPM00_SYSTEM/startrek.bas deleted file mode 100644 index 64d0170..0000000 --- a/software/CPM/CPM00_SYSTEM/startrek.bas +++ /dev/null @@ -1,446 +0,0 @@ -10 REM SUPER STARTREK - MAY 16,1978 - REQUIRES 24K MEMORY (AT LEAST) -30 REM -40 REM **** **** STAR TREK **** **** -50 REM **** SIMULATION OF A MISSION OF THE STARSHIP ENTERPRISE, -60 REM **** AS SEEN ON THE STAR TREK TV SHOW. -70 REM **** ORIGINAL PROGRAM BY MIKE MAYFIELD, MODIFIED VERSION -80 REM **** PUBLISHED IN DEC'S "101 BASIC GAMES", BY DAVE AHL. -90 REM **** MODIFICATIONS TO THE LATTER (PLUS DEBUGGING) BY BOB -100 REM *** LEEDOM - APRIL & DECEMBER 1974, -110 REM *** WITH A LITTLE HELP FROM HIS FRIENDS . . . -120 REM *** COMMENTS, EPHITETS, AND SUGGESTIONS SOLICITED -- -130 REM *** SEND TO: R.C. LEEDOM -140 REM *** WESTINGHOSE DEFENSE & ELECTRONICS SYSTEMS CNIR -150 REM *** BOX 746, M.S. 338 -160 REM *** BALTIMORE, MD 21203 -170 REM *** -180 REM *** CONVERTED TO MICROSOFT 8 K BASIC 3/16/78 BY JOHN BORDERS -190 REM *** LINE NUMBERS FROM VERSION TREK7 OF 1/12/75 PRESERVED AS -200 REM *** MUCH AS POSSIBLE WHILE USING MULTIPLE STATEMENTS PER LINE -201 REM *** - MODIFIED TO RUN ON GRANT SEARLE'S 9-CHIP Z80 COMPUTER -202 REM *** AND DERIVATIVES 04-AUG-2018 BY N.KENDRICK -203 REM *** (LINKER3000-AT-GMAIL.COM) -205 WIDTH 80 -209 REM NK: POSITIONING USING ANSI ESCAPE SEQUENCES... -210 PRINT CHR$(27);"[2J";:PRINT CHR$(27);"[3;1H"; -211 PRINT "THE USS ENTERPRISE --- NCC-1701" -212 PRINT CHR$(27);"[4;1H";:PRINT -222 FOR YY=1 TO 40 STEP 2:FOR XX=1 TO 200 : NEXT XX -223 PRINT TAB(YY);" ,------*------," -224 PRINT TAB(YY);" ,------------- '--- ------'" -225 PRINT TAB(YY);" '-------- --' / /" -226 PRINT TAB(YY);" ,---' '-------/ /--," -227 PRINT TAB(YY);" '----------------'" -228 PRINT CHR$(27);"[4;1H";:PRINT:NEXT YY -229 PRINT CHR$(27);"[11;1H"; -260 CLEAR 600 -270 Z$=" " -330 DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8),D(8) -370 T=INT(RND(1)*20+20)*100:T0=T:T9=25+INT(RND(1)*10):D0=0:E=3000:E0=E -440 P=10:P0=P:S9=200:S=0:B9=0:K9=0:X$="":X0$=" IS " -470 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2) -475 DEF FNR(R)=INT(RND(R)*7.98+1.01) -490 Q1=FNR(1):Q2=FNR(1):S1=FNR(1):S2=FNR(1) -530 FOR I=1 TO 9:C(I,1)=0:C(I,2)=0:NEXT I -540 C(3,1)=-1:C(2,1)=-1:C(4,1)=-1:C(4,2)=-1:C(5,2)=-1:C(6,2)=-1 -600 C(1,2)=1:C(2,2)=1:C(6,1)=1:C(7,1)=1:C(8,1)=1:C(8,2)=1:C(9,2)=1 -670 FOR I=1 TO 8:D(I)=0:NEXT I -710 A1$="NAVSRSLRSPHATORSHEDAMCOMXXX" -820 FOR I=1 TO 8:FOR J=1 TO 8:K3=0:Z(I,J)=0:R1=RND(1) -850 IF R1>.98 THEN K3=3:K9=K9+3:GOTO 980 -860 IF R1>.95 THEN K3=2:K9=K9+2:GOTO 980 -870 IF R1>.8 THEN K3=1:K9=K9+1 -980 B3=0:IF RND(1)>.96 THEN B3=1:B9=B9+1 -1040 G(I,J)=K3*100+B3*10+FNR(1):NEXT J:NEXT I:IF K9>T9 THEN T9=K9+1 -1100 IF B9<>0 THEN 1200 -1150 IF G(Q1,Q2)<200 THEN G(Q1,Q2)=G(Q1,Q2)+100:K9=K9+1 -1160 B9=1:G(Q1,Q2)=G(Q1,Q2)+10:Q1=FNR(1):Q2=FNR(1) -1200 K7=K9:IF B9<>1 THEN X$="S":X0$=" ARE " -1230 PRINT"YOUR ORDERS ARE AS FOLLOWS:" -1235 PRINT "--------------------------" -1240 PRINT" DESTROY THE";K9;"KLINGON WARSHIPS WHICH HAVE INVADED" -1250 PRINT" THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS" -1260 PRINT" ON STARDATE";T0+T9;CHR$(8);". THIS GIVES YOU";T9; -1261 PRINT"DAYS. THERE";X0$ -1270 PRINT" ";B9; -1271 PRINT"STARBASE";X$;" IN THE GALAXY FOR RESUPPLYING YOUR SHIP." -1280 PRINT: PRINT "PRESS Y TO ACCEPT COMMAND"; -1300 INPUT I5$: -1302 IF LEFT$(I5$,1)="Y" OR LEFT$(I5$,1)="y" THEN 1310 -1303 GOTO 1280 -1310 PRINT CHR$(26) -1320 Z4=Q1:Z5=Q2:K3=0:B3=0:S3=0:G5=0:D4=.5*RND(1):Z(Q1,Q2)=G(Q1,Q2) -1390 IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 1600 -1430 GOSUB 9030:PRINT:IF T0<>T THEN 1490 -1460 PRINT"YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" -1470 PRINT"IN THE GALACTIC QUADRANT, '";G2$;"'.":GOTO 1500 -1490 PRINT"NOW ENTERING ";G2$;" QUADRANT . . ." -1500 PRINT:K3=INT(G(Q1,Q2)*.01):B3=INT(G(Q1,Q2)*.1)-10*K3 -1540 S3=G(Q1,Q2)-100*K3-10*B3:IF K3=0 THEN 1590 -1560 PRINT TAB(3);CHR$(22);" COMBAT AREA CONDITION RED ";CHR$(22) -1561 IF S>200 THEN PRINT:GOTO 1590 -1580 PRINT TAB(3);CHR$(22);" SHIELDS DANGEROUSLY LOW ";CHR$(22) -1581 PRINT -1590 FOR I=1 TO 3:K(I,1)=0:K(I,2)=0:NEXT I -1600 FOR I=1 TO 3:K(I,3)=0:NEXT I:Q$=Z$+Z$+Z$+Z$+Z$+Z$+Z$+LEFT$(Z$,17) -1680 A$="":Z1=S1:Z2=S2:GOSUB 8670:IF K3<1 THEN 1820 -1720 FOR I=1 TO K3:GOSUB 8590:A$="+K+":Z1=R1:Z2=R2 -1780 GOSUB 8670:K(I,1)=R1:K(I,2)=R2:K(I,3)=S9*(.5+RND(1)):NEXT I -1820 IF B3<1 THEN 1910 -1880 GOSUB 8590:A$=">B<":Z1=R1:B4=R1:Z2=R2:B5=R2:GOSUB 8670 -1910 FOR I=1 TO S3:GOSUB 8590:A$=" * ":Z1=R1:Z2=R2:GOSUB 8670:NEXT I -1980 GOSUB 6430 -1990 IF S+E>10 THEN IF E>10 OR D(7)=0 THEN 2060 -2020 PRINT:PRINT TAB(10);CHR$(22);"** FATAL ERROR **";CHR$(22) -2021 PRINT"YOU'VE JUST STRANDED YOUR SHIP IN SPACE." -2030 PRINT"YOU HAVE INSUFFICIENT MANEUVERING ENERGY," -2040 PRINT"AND SHIELD CONTROL IS PRESENTLY INCAPABLE OF" -2050 PRINT"CROSS-CIRCUITING TO ENGINE ROOM!!":PRINT:GOTO 6220 -2060 PRINT:INPUT"COMMAND";A$:PRINT -2080 FOR I=1 TO 9:IF LEFT$(A$,3)<>MID$(A1$,3*I-2,3)THEN 2160 -2140 ON I GOTO 2300,1980,4000,4260,4700,5530,5690,7290,6270 -2160 NEXT I:PRINT"ENTER ONE OF THE FOLLOWING:" -2170 PRINT "--------------------------" -2180 PRINT" NAV (TO SET COURSE)" -2190 PRINT" SRS (FOR SHORT RANGE SENSOR SCAN)" -2200 PRINT" LRS (FOR LONG RANGE SENSOR SCAN)" -2210 PRINT" PHA (TO FIRE PHASERS)" -2220 PRINT" TOR (TO FIRE PHOTON TORPEDOES)" -2230 PRINT" SHE (TO RAISE OR LOWER SHIELDS)" -2240 PRINT" DAM (FOR DAMAGE CONTROL REPORTS)" -2250 PRINT" COM (TO CALL ON LIBRARY-COMPUTER)" -2260 PRINT" XXX (TO RESIGN YOUR COMMAND)":PRINT:GOTO 1990 -2300 INPUT"COURSE (0-9)";C1:IF C1=9 THEN C1=1 -2310 IF C1>=1 AND C1<9 THEN 2350 -2330 PRINT" LT. SULU: 'INCORRECT COURSE DATA, SIR!'":GOTO 1990 -2350 X$="8":IF D(1)<0 THEN X$="0.2" -2360 PRINT"WARP FACTOR (0-";X$;")";:INPUT W1:PRINT -2361 IF D(1)<0 AND W1>.2 THEN 2470 -2380 IF W1>0 AND W1<=8 THEN 2490 -2390 IF W1=0 THEN 1990 -2420 PRINT" CHIEF ENGINEER SCOTT: 'THE ENGINES WON'T TAKE"; -2430 PRINT" WARP";W1;CHR$(8);"!'":GOTO 1990 -2470 PRINT"WARP ENGINES ARE DAMAGED. MAXIUM SPEED = WARP 0.2":GOTO 1990 -2490 N=INT(W1*8+.5):IF E-N>=0 THEN 2590 -2500 PRINT"ENGINEERING: 'INSUFFICIENT ENERGY AVAILABLE" -2510 PRINT" FOR MANEUVERING AT WARP";W1;CHR$(8);"!'" -2530 IF S=1 THEN D6=1 -2770 FOR I=1 TO 8:IF D(I)>=0 THEN 2880 -2790 D(I)=D(I)+D6:IF D(I)>-.1 AND D(I)<0 THEN D(I)=-.1:GOTO 2880 -2800 IF D(I)<0 THEN 2880 -2810 IF D1<>1 THEN D1=1:PRINT"DAMAGE CONTROL REPORT: "; -2840 PRINT TAB(8);:R1=I:GOSUB 8790:PRINT G2$;" REPAIR COMPLETED." -2880 NEXT I:IF RND(1)>.2 THEN 3070 -2910 R1=FNR(1):IF RND(1)>=.6 THEN 3000 -2930 D(R1)=D(R1)-(RND(1)*5+1):PRINT"DAMAGE CONTROL REPORT: "; -2960 GOSUB 8790:PRINT G2$;" DAMAGED":PRINT:GOTO 3070 -3000 D(R1)=D(R1)+RND(1)*3+1:PRINT"DAMAGE CONTROL REPORT: "; -3030 GOSUB 8790:PRINT G2$;" STATE OF REPAIR IMPROVED":PRINT -3070 A$=" ":Z1=INT(S1):Z2=INT(S2):GOSUB 8670 -3110 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):X=S1:Y=S2 -3140 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):Q4=Q1:Q5=Q2 -3170 FOR I=1 TO N:S1=S1+X1:S2=S2+X2 -3171 IF S1<1 OR S1>=9 OR S2<1 OR S2>=9 THEN 3500 -3240 S8=INT(S1)*24+INT(S2)*3-26:IF MID$(Q$,S8,2)=" "THEN 3360 -3320 S1=INT(S1-X1):S2=INT(S2-X2):PRINT"WARP ENGINES SHUT DOWN AT "; -3350 PRINT"SECTOR";S1;CHR$(8);",";S2;"DUE TO BAD NAVIGATION":GOTO 3370 -3360 NEXT I:S1=INT(S1):S2=INT(S2) -3370 A$="":Z1=INT(S1):Z2=INT(S2):GOSUB 8670:GOSUB 3910:T8=1 -3430 IF W1<1 THEN T8=.1*INT(10*W1) -3450 T=T+T8:IF T>T0+T9 THEN 6220 -3480 GOTO 1980 -3500 X=8*Q1+X+N*X1:Y=8*Q2+Y+N*X2:Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8) -3550 S2=INT(Y-Q2*8):IF S1=0 THEN Q1=Q1-1:S1=8 -3590 IF S2=0 THEN Q2=Q2-1:S2=8 -3620 X5=0:IF Q1<1 THEN X5=1:Q1=1:S1=1 -3670 IF Q1>8 THEN X5=1:Q1=8:S1=8 -3710 IF Q2<1 THEN X5=1:Q2=1:S2=1 -3750 IF Q2>8 THEN X5=1:Q2=8:S2=8 -3790 IF X5=0 THEN 3860 -3800 PRINT"LT. UHURA: MESSAGE FROM STARFLEET COMMAND --" -3810 PRINT" 'PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER" -3820 PRINT" IS HEREBY *DENIED*. SHUT DOWN YOUR ENGINES.'" -3830 PRINT"CHIEF ENGINEER SCOTT: 'WARP ENGINES SHUT DOWN" -3840 PRINT" AT SECTOR";S1;CHR$(8);",";S2;"OF QUADRANT"; -3841 PRINT Q1;CHR$(8);",";Q2;CHR$(8);".'" -3850 IF T>T0+T9 THEN 6220 -3860 IF 8*Q1+Q2=8*Q4+Q5 THEN 3370 -3870 T=T+1:GOSUB 3910:GOTO 1320 -3910 E=E-N-10:IF E>=0 THEN RETURN -3930 PRINT"SHIELD CONTROL SUPPLIES ENERGY TO COMPLETE THE MANEUVER." -3940 S=S+E:E=0:IF S<=0 THEN S=0 -3980 RETURN -4000 IF D(3)<0 THEN PRINT"LONG RANGE SENSORS ARE INOPERABLE.":GOTO 1990 -4030 PRINT"LONG RANGE SCAN FOR QUADRANT";Q1;CHR$(8);",";Q2:PRINT -4040 O1$="-------------------":PRINT O1$ -4060 FOR I=Q1-1 TO Q1+1:N(1)=-1:N(2)=-2:N(3)=-3:FOR J=Q2-1 TO Q2+1 -4120 IF I>0 AND I<9 AND J>0 AND J<9 THEN N(J-Q2+2)=G(I,J):Z(I,J)=G(I,J) -4180 NEXT J:FOR L=1 TO 3:PRINT"| "; -4181 IF N(L)<0 THEN PRINT"*** ";:GOTO 4230 -4210 PRINT RIGHT$(STR$(N(L)+1000),3);" "; -4230 NEXT L:PRINT"|":PRINT O1$:NEXT I:GOTO 1990 -4260 IF D(4)<0 THEN PRINT"PHASERS INOPERATIVE.":GOTO 1990 -4265 IF K3>0 THEN 4330 -4270 PRINT"SCIENCE OFFICER SPOCK: 'SENSORS SHOW NO ENEMY SHIPS" -4280 PRINT" IN THIS QUADRANT'":GOTO 1990 -4330 IF D(8)<0 THEN PRINT"COMPUTER FAILURE HAMPERS ACCURACY." -4350 PRINT"PHASERS LOCKED ON TARGET; "; -4360 PRINT"ENERGY AVAILABLE =";E;"UNITS" -4370 INPUT"NUMBER OF UNITS TO FIRE";X:IF X<=0 THEN 1990 -4400 IF E-X<0 THEN 4360 -4410 E=E-X:IF D(7)<0 THEN X=X*RND(1) -4450 H1=INT(X/K3):FOR I=1 TO 3:IF K(I,3)<=0 THEN 4670 -4480 H=INT((H1/FND(0))*(RND(1)+2)):IF H>.15*K(I,3)THEN 4530 -4500 PRINT"SENSORS SHOW NO DAMAGE TO ENEMY AT";K(I,1);CHR$(8); -4501 PRINT",";K(I,2);CHR$(8);".":GOTO 4670 -4530 K(I,3)=K(I,3)-H:PRINT H;"UNIT HIT ON KLINGON AT SECTOR"; -4531 PRINT K(I,1);CHR$(8);","; -4550 PRINT K(I,2);CHR$(8);".":IF K(I,3)<=0 THEN PRINT:PRINT CHR$(22); -4551 PRINT"*** KLINGON DESTROYED ***";CHR$(22):PRINT:GOTO 4580 -4560 PRINT" (SENSORS SHOW";K(I,3);"UNITS REMAINING)":GOTO 4670 -4580 K3=K3-1:K9=K9-1:Z1=K(I,1):Z2=K(I,2):A$=" ":GOSUB 8670 -4650 K(I,3)=0:G(Q1,Q2)=G(Q1,Q2)-100:Z(Q1,Q2)=G(Q1,Q2):IF K9<=0 THEN 6370 -4670 NEXT I:GOSUB 6000:GOTO 1990 -4700 IF P<=0 THEN PRINT"ALL PHOTON TORPEDOES EXPENDED.":GOTO 1990 -4730 IF D(5)<0 THEN PRINT"PHOTON TUBES ARE NOT OPERATIONAL.":GOTO 1990 -4760 INPUT"PHOTON TORPEDO COURSE (1-9)";C1:IF C1=9 THEN C1=1 -4780 IF C1>=1 AND C1<9 THEN 4850 -4790 PRINT"ENSIGN CHEKOV: 'INCORRECT COURSE DATA, SIR!'" -4800 GOTO 1990 -4850 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):E=E-2:P=P-1 -4860 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):X=S1:Y=S2 -4910 PRINT"TORPEDO TRACK:" -4920 X=X+X1:Y=Y+X2:X3=INT(X+.5):Y3=INT(Y+.5) -4960 IF X3<1 OR X3>8 OR Y3<1 OR Y3>8 THEN 5490 -5000 PRINT" ";X3;CHR$(8);",";Y3:A$=" ":Z1=X:Z2=Y -5001 GOSUB 8830 -5050 IF Z3<>0 THEN 4920 -5060 A$="+K+":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5210 -5110 PRINT:PRINT CHR$(22);"*** KLINGON DESTROYED ***";CHR$(22) -5111 PRINT:K3=K3-1:K9=K9-1:IF K9<=0 THEN 6370 -5150 FOR I=1 TO 3:IF X3=K(I,1)AND Y3=K(I,2)THEN 5190 -5180 NEXT I:I=3 -5190 K(I,3)=0:GOTO 5430 -5210 A$=" * ":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5280 -5260 PRINT"STAR AT";X3;",";Y3;"ABSORBED TORPEDO ENERGY.":GOSUB 6000 -5261 GOTO 1990 -5280 A$=">!<":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 4760 -5330 PRINT CHR$(22);"*** STARBASE DESTROYED ***";CHR$(22) -5331 B3=B3-1:B9=B9-1 -5360 IF B9>0 OR K9>T-T0-T9 THEN 5400 -5370 PRINT"THAT DOES IT, CAPTAIN!! YOU ARE HEREBY RELIEVED OF COMMAND" -5380 PRINT"AND SENTENCED TO 99 STARDATES AT HARD LABOR ON CYGNUS 12!!" -5390 GOTO 6270 -5400 PRINT"STARFLEET COMMAND REVIEWING YOUR RECORD TO CONSIDER" -5410 PRINT"COURT MARTIAL!":D0=0 -5430 Z1=X:Z2=Y:A$=" ":GOSUB 8670 -5470 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):GOSUB 6000:GOTO 1990 -5490 PRINT"TORPEDO MISSED.":PRINT:GOSUB 6000:GOTO 1990 -5530 IF D(7)<0 THEN PRINT"SHIELD CONTROL INOPERABLE.":GOTO 1990 -5560 PRINT"ENERGY AVAILABLE =";E+S;:INPUT"NUMBER OF UNITS TO SHIELDS";X -5580 IF X<0 OR S=X THEN PRINT"":GOTO 1990 -5590 IF X<=E+S THEN 5630 -5600 PRINT"SHIELD CONTROL: 'THIS IS NOT THE FEDERATION TREASURY.'" -5610 PRINT"":GOTO 1990 -5630 E=E+S-X:S=X:PRINT"DEFLECTOR CONTROL ROOM:" -5660 PRINT" 'SHIELDS NOW AT";INT(S);"UNITS PER YOUR COMMAND.'" -5661 GOTO 1990 -5690 IF D(6)>=0 THEN 5910 -5700 PRINT"DAMAGE CONTROL REPORT NOT AVAILABLE.":IF D0=0 THEN 1990 -5720 D3=0:FOR I=1 TO 8:IF D(I)<0 THEN D3=D3+.1 -5760 NEXT I:IF D3=0 THEN 1990 -5780 PRINT:D3=D3+D4:IF D3>=1 THEN D3=.9 -5810 PRINT"TECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP;" -5820 PRINT"ESTIMATED TIME TO REPAIR:";.01*INT(100*D3);"STARDATES." -5840 INPUT"WILL YOU AUTHORIZE THE REPAIR ORDER (Y/N)";A$ -5860 IF A$<>"Y"THEN 1990 -5870 FOR I=1 TO 8:IF D(I)<0 THEN D(I)=0 -5890 NEXT I:T=T+D3+.1 -5910 PRINT:PRINT"DEVICE STATE OF REPAIR" -5911 PRINT"------ ---------------":FOR R1=1 TO 8 -5920 GOSUB 8790:PRINT G2$;LEFT$(Z$,25-LEN(G2$));INT(D(R1)*100)*.01 -5950 NEXT R1:PRINT:IF D0<>0 THEN 5720 -5980 GOTO 1990 -6000 IF K3<=0 THEN RETURN -6010 IF D0<>0 THEN PRINT"STARBASE SHIELDS PROTECT THE ENTERPRISE." -6011 RETURN -6040 FOR I=1 TO 3:IF K(I,3)<=0 THEN 6200 -6060 H=INT((K(I,3)/FND(1))*(2+RND(1))) -6061 S=S-H:K(I,3)=K(I,3)/(3+RND(0)) -6080 PRINT:PRINT H;"UNIT HIT ON ENTERPRISE FROM SECTOR"; -6081 PRINT K(I,1);CHR$(8);",";K(I,2);CHR$(8);"." -6090 IF S<=0 THEN 6240 -6100 PRINT" ":IF H<20 THEN 6200 -6120 IF RND(1)>.6 OR H/S<=.02 THEN 6200 -6140 R1=FNR(1):D(R1)=D(R1)-H/S-.5*RND(1):GOSUB 8790 -6170 PRINT"DAMAGE CONTROL: '";G2$;" DAMAGED BY THE HIT'" -6200 NEXT I:RETURN -6220 PRINT:PRINT"IT IS STARDATE";T;CHR$(8);".":PRINT:GOTO 6270 -6240 PRINT:PRINT"THE ENTERPRISE HAS BEEN DESTROYED. THE FEDERATION "; -6250 PRINT"WILL BE CONQUERED.":GOTO 6220 -6270 PRINT"THERE WERE";K9;"KLINGON BATTLE CRUISERS LEFT AT" -6280 PRINT"THE END OF YOUR MISSION." -6290 PRINT:PRINT:IF B9=0 THEN 6360 -6310 PRINT"THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER" -6320 PRINT"FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER," -6330 INPUT"LET HIM STEP FORWARD AND ENTER 'AYE'";A$:IF A$="AYE"THEN 10 -6360 PRINT:PRINT "BACK TO SYSTEM.":END -6370 PRINT"CONGRATULATIONS, CAPTAIN! THE LAST KLINGON BATTLE CRUISER" -6380 PRINT"MENACING THE FEDERATION HAS BEEN DESTROYED.":PRINT -6400 PRINT"YOUR EFFICIENCY RATING IS";1000*(K7/(T-T0))^2:GOTO 6290 -6430 FOR I=S1-1 TO S1+1:FOR J=S2-1 TO S2+1 -6450 IF INT(I+.5)<1 OR INT(I+.5)>8 THEN 6540 -6451 IF INT(J+.5)<1 OR INT(J+.5)>8 THEN 6540 -6490 A$=">B<":Z1=I:Z2=J:GOSUB 8830:IF Z3=1 THEN 6580 -6540 NEXT J:NEXT I:D0=0:GOTO 6650 -6580 D0=1:C$="DOCKED":E=E0:P=P0 -6620 PRINT"SHIELDS DROPPED FOR DOCKING PURPOSES.":S=0:GOTO 6720 -6650 IF K3>0 THEN C$="*RED*":GOTO 6720 -6660 C$="GREEN":IF E=0 THEN 6770 -6730 PRINT:PRINT"*** SHORT RANGE SENSORS ARE OUT ***":PRINT:RETURN -6770 O1$=" +--1---2---3---4---5---6---7---8-+":PRINT O1$ -6771 FOR I=1 TO 8:PRINT I;"|"; -6820 FOR J=(I-1)*24+1 TO(I-1)*24+22 STEP 3:PRINT" ";MID$(Q$,J,3); -6821 NEXT J:PRINT"|";I; -6830 ON I GOTO 6850,6900,6960,7020,7070,7120,7180,7240 -6850 PRINT" STARDATE ";:PRINT INT(T*10)*.1 -6851 GOTO 7260 -6900 PRINT" CONDITION "; -6901 IF C$="*RED*" THEN PRINT CHR$(22);"*RED*";CHR$(22):GOTO 7260 -6902 IF C$="DOCKED" THEN PRINT CHR$(22);"DOCKED";CHR$(22):GOTO 7260 -6903 PRINT C$: GOTO 7260 -6960 PRINT" QUADRANT ";Q1;CHR$(8);",";Q2;CHR$(8) -6961 GOTO 7260 -7020 PRINT" SECTOR ";S1;CHR$(8);",";S2;CHR$(8) -7021 GOTO 7260 -7070 PRINT" PHOTON TORPEDOES ";:PRINT INT(P) -7071 GOTO 7260 -7120 PRINT" TOTAL ENERGY ";:PRINT INT(E+S) -7121 GOTO 7260 -7180 PRINT" SHIELDS ";:PRINT INT(S) -7181 GOTO 7260 -7240 PRINT" KLINGONS REMAINING";:PRINT INT(K9) -7260 NEXT I:PRINT O1$:RETURN -7290 IF D(8)<0 THEN PRINT"COMPUTER DISABLED.":GOTO 1990 -7320 INPUT"COMPUTER ACTIVE AND AWAITING COMMAND";A:IF A<0 THEN 1990 -7350 PRINT:H8=1:ON A+1 GOTO 7540,7900,8070,8500,8150,7400 -7360 PRINT"FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:" -7365 PRINT "-----------------------------------------":PRINT -7370 PRINT" 0 = CUMULATIVE GALTIC RECORD" -7372 PRINT" 1 = STATUS REPORT" -7374 PRINT" 2 = PHOTON TORPEDO DATA" -7376 PRINT" 3 = STARBASE NAV DATA" -7378 PRINT" 4 = DIRECTION/DISTANCE CALCULATOR" -7380 PRINT" 5 = GALAXY 'REGION NAME' MAP":PRINT:GOTO 7320 -7400 H8=0:G5=1:PRINT" THE GALAXY":GOTO 7550 -7540 REM -7542 REM -7543 PRINT:PRINT" "; -7544 PRINT"COMPUTER RECORD OF GALAXY FOR QUADRANT";Q1;CHR$(8);",";Q2 -7546 PRINT -7550 PRINT" 1 2 3 4 5 6 7 8" -7560 O1$=" +-----+-----+-----+-----+-----+-----+-----+-----+" -7570 PRINT O1$:FOR I=1 TO 8:PRINT I;" ";:IF H8=0 THEN 7740 -7630 FOR J=1 TO 8:PRINT"| ";:IF Z(I,J)=0 THEN PRINT"*** ";:GOTO 7720 -7700 PRINT RIGHT$(STR$(Z(I,J)+1000),3);" "; -7720 IF J=8 THEN PRINT "|" -7721 NEXT J:GOTO 7850 -7740 Z4=I:Z5=1:GOSUB 9030:J0=INT(15-.5*LEN(G2$)):PRINT TAB(J0);G2$; -7800 Z5=5:GOSUB 9030:J0=INT(39-.5*LEN(G2$)):PRINT TAB(J0);G2$ -7850 PRINT O1$:NEXT I:PRINT:GOTO 1990 -7900 PRINT " STATUS REPORT:":PRINT " -------------":X$="" -7901 IF K9>1 THEN X$="S" -7940 PRINT K9;"KLINGON";X$;" LEFT." -7960 PRINT" MISSION MUST BE COMPLETED IN";.1*INT((T0+T9-T)*10); -7961 PRINT"STARDATES." -7970 X$="S":IF B9<2 THEN X$="":IF B9<1 THEN 8010 -7980 PRINT" THE FEDERATION IS MAINTAINING";B9; -7981 PRINT"STARBASE";X$;" IN THE GALAXY." -7990 GOTO 5690 -8010 PRINT"YOUR STUPIDITY HAS LEFT YOU ON YOUR OWN IN" -8020 PRINT" THE GALAXY -- YOU HAVE NO STARBASES LEFT!":GOTO 5690 -8070 IF K3<=0 THEN 4270 -8080 X$="":IF K3>1 THEN X$="S" -8090 PRINT"FROM ENTERPRISE TO KLINGON BATTLE CRUSER";X$ -8100 H8=0:FOR I=1 TO 3:IF K(I,3)<=0 THEN 8480 -8110 W1=K(I,1):X=K(I,2) -8120 C1=S1:A=S2:GOTO 8220 -8150 PRINT"DIRECTION/DISTANCE CALCULATOR:" -8160 PRINT"YOU ARE AT QUADRANT ";Q1;CHR$(8);",";Q2;" SECTOR "; -8161 PRINT S1;CHR$(8);",";S2;CHR$(8);"." -8170 INPUT"PLEASE ENTER INITIAL COORDINATES (X,Y)";C1,A -8200 INPUT"FINAL COORDINATES (X,Y)";W1,X -8220 X=X-A:A=C1-W1:IF X<0 THEN 8350 -8250 IF A<0 THEN 8410 -8260 IF X>0 THEN 8280 -8270 IF A=0 THEN C1=5:GOTO 8290 -8280 C1=1 -8290 IF ABS(A)<=ABS(X)THEN 8330 -8310 PRINT"DIRECTION =";C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A)):GOTO 8460 -8330 PRINT"DIRECTION =";C1+(ABS(A)/ABS(X)):GOTO 8460 -8350 IF A>0 THEN C1=3:GOTO 8420 -8360 IF X<>0 THEN C1=5:GOTO 8290 -8410 C1=7 -8420 IF ABS(A)>=ABS(X)THEN 8450 -8430 PRINT"DIRECTION =";C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X)):GOTO 8460 -8450 PRINT"DIRECTION =";C1+(ABS(X)/ABS(A)) -8460 PRINT"DISTANCE =";SQR(X^2+A^2):IF H8=1 THEN 1990 -8480 NEXT I:GOTO 1990 -8500 IF B3<>0 THEN PRINT"FROM ENTERPRISE TO STARBASE:" -8501 W1=B4:X=B5:GOTO 8120 -8510 PRINT"MR. SPOCK: 'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'""; -8520 GOTO 1990 -8590 R1=FNR(1):R2=FNR(1):A$=" ":Z1=R1:Z2=R2:GOSUB 8830 -8591 IF Z3=0 THEN 8590 -8600 RETURN -8670 S8=INT(Z2-.5)*3+INT(Z1-.5)*24+1 -8675 IF LEN(A$)<>3 THEN PRINT"ERROR":STOP -8680 IF S8=1 THEN Q$=A$+RIGHT$(Q$,189):RETURN -8690 IF S8=190 THEN Q$=LEFT$(Q$,189)+A$:RETURN -8700 Q$=LEFT$(Q$,S8-1)+A$+RIGHT$(Q$,190-S8):RETURN -8790 ON R1 GOTO 8792,8794,8796,8798,8800,8802,8804,8806 -8792 G2$="WARP ENGINES":RETURN -8794 G2$="SHORT RANGE SENSORS":RETURN -8796 G2$="LONG RANGE SENSORS":RETURN -8798 G2$="PHASER CONTROL":RETURN -8800 G2$="PHOTON TUBES":RETURN -8802 G2$="DAMAGE CONTROL":RETURN -8804 G2$="SHIELD CONTROL":RETURN -8806 G2$="LIBRARY-COMPUTER":RETURN -8830 Z1=INT(Z1+.5):Z2=INT(Z2+.5):S8=(Z2-1)*3+(Z1-1)*24+1:Z3=0 -8890 IF MID$(Q$,S8,3)<>A$THEN RETURN -8900 Z3=1:RETURN -9030 IF Z5<=4 THEN ON Z4 GOTO 9040,9050,9060,9070,9080,9090,9100,9110 -9035 GOTO 9120 -9040 G2$="ANTARES":GOTO 9210 -9050 G2$="RIGEL":GOTO 9210 -9060 G2$="PROCYON":GOTO 9210 -9070 G2$="VEGA":GOTO 9210 -9080 G2$="CANOPUS":GOTO 9210 -9090 G2$="ALTAIR":GOTO 9210 -9100 G2$="SAGITTARIUS":GOTO 9210 -9110 G2$="POLLUX":GOTO 9210 -9120 ON Z4 GOTO 9130,9140,9150,9160,9170,9180,9190,9200 -9130 G2$="SIRIUS":GOTO 9210 -9140 G2$="DENEB":GOTO 9210 -9150 G2$="CAPELLA":GOTO 9210 -9160 G2$="BETELGEUSE":GOTO 9210 -9170 G2$="ALDEBARAN":GOTO 9210 -9180 G2$="REGULUS":GOTO 9210 -9190 G2$="ARCTURUS":GOTO 9210 -9200 G2$="SPICA" -9210 IF G5<>1 THEN ON Z5 GOTO 9230,9240,9250,9260,9230,9240,9250,9260 -9220 RETURN -9230 G2$=G2$+" I":RETURN -9240 G2$=G2$+" II":RETURN -9250 G2$=G2$+" III":RETURN -9260 G2$=G2$+" IV":RETURN -9999 END diff --git a/software/CPM/CPM00_SYSTEM/stat.com b/software/CPM/CPM00_SYSTEM/stat.com deleted file mode 100644 index 0e49253bc71f14e25e8a98359f8d352b7560f5db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5376 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 diff --git a/software/CPM/CPM00_SYSTEM/submit.com b/software/CPM/CPM00_SYSTEM/submit.com deleted file mode 100644 index f651bfee6be78c05670bef3a1976d7212f66061c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmbVMOK2Nc6n#%KPeBGx|AC4&ej`ttbd*wOk|=nPRj|^KLR^KUpG_Mxk;ayYJmZYV z`uHQu-INBhDqXa+gl2a29xys?v)EWAUQ*uqpOO&iVF=1E*Iy^l#W`aV+ zbjHed^&kF4+os2CYg{>QIL3tOLQc2vd8=ZSO9h&>E!VNjG+Ts(Jj9`gW9D7ksna9V z<+74BEX#Ijwro$Cd+7<&C_Iz1%JpXz8KJ?%Z6d!V-3>mA1m}dHBL;5}U;c(nCeNy0 zlMN{roCEwV$2S1q7n~>B8c^SJ>N}wB-===#)DJ*C#H-dhz6tnYNb%*LIsOUoBOL$A z@h^aPZcA*EsU);ce!c?VFZ4|^q-~PU*6PKGxbx`(Tot|jEZ80ZgONFMt4nPP@jE&=2%MFpANPIv5gYPA2KyQGuiOr8c|71<5`B4A zI;&Qsez>^@wsr*XkZ?`J1vUz>xDt)&vr<*BNolPHH!!~({w3l$e&_5Jo{q?05!e!N zU%R&%j}v^E#e*55H6(Z>ljsdeYa+G)iwJf~ZLq0d2Up1;xglK%M+sziX;_gea0k6% z64V3_)Id9aPrFX=b>16hOTxr#zJ~81 = YOUR STARSHIP'S POSITION" -590 PRINT" +K+ = KLINGON BATTLE CRUISER" -600 PRINT" >!< = FEDERATION STARBASE (REFUEL/REPAIR/RE-ARM HERE!)" -610 PRINT" * = STAR" -620 PRINT -630 PRINT" A CONDENSED 'STATUS REPORT' WILL ALSO BE PRESENTED." -640 PRINT -650 PRINT"\LRS\ COMMAND = LONG RANGE SENSOR SCAN" -660 PRINT" SHOWS CONDITIONS IN SPACE FOR ONE QUADRANT ON EACH SIDE" -670 PRINT" OF THE ENTERPRISE (WHICH IS IN THE MIDDLE OF THE SCAN)" -680 PRINT" THE SCAN IS CODED IN THE FORM \###\, WHERE TH UNITS DIGIT" -690 PRINT" IS THE NUMBER OF STARS, THE TENS DIGIT IS THE NUMBER OF" -700 PRINT" STARBASES, AND THE HUNDRESDS DIGIT IS THE NUMBER OF" -710 PRINT" KLINGONS." -720 PRINT -730 PRINT" EXAMPLE - 207 = 2 KLINGONS, NO STARBASES, & 7 STARS." -740 PRINT:PRINT -741 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26) -750 PRINT"\PHA\ COMMAND = PHASER CONTROL." -760 PRINT" ALLOWS YOU TO DESTROY THE KLINGON BATTLE CRUISERS BY " -770 PRINT" ZAPPING THEM WITH SUITABLY LARGE UNITS OF ENERGY TO" -780 PRINT" DEPLETE THEIR SHIELD POWER. (REMEMBER, KLINGONS HAVE" -790 PRINT" PHASERS TOO!)" -800 PRINT -810 PRINT"\TOR\ COMMAND = PHOTON TORPEDO CONTROL" -820 PRINT" TORPEDO COURSE IS THE SAME AS USED IN WARP ENGINE CONTROL" -830 PRINT" IF YOU HIT THE KLINGON VESSEL, HE IS DESTROYED AND" -840 PRINT" CANNOT FIRE BACK AT YOU. IF YOU MISS, YOU ARE SUBJECT TO" -850 PRINT" HIS PHASER FIRE. IN EITHER CASE, YOU ARE ALSO SUBJECT TO " -860 PRINT" THE PHASER FIRE OF ALL OTHER KLINGONS IN THE QUADRANT." -870 PRINT -880 PRINT" THE LIBRARY-COMPUTER (\COM\ COMMAND) HAS AN OPTION TO " -890 PRINT" COMPUTE TORPEDO TRAJECTORY FOR YOU (OPTION 2)" -900 PRINT -910 PRINT"\SHE\ COMMAND = SHIELD CONTROL" -920 PRINT" DEFINES THE NUMBER OF ENERGY UNITS TO BE ASSIGNED TO THE" -930 PRINT" SHIELDS. ENERGY IS TAKEN FROM TOTAL SHIP'S ENERGY. NOTE" -940 PRINT" THAT THE STATUS DISPLAY TOTAL ENERGY INCLUDES SHIELD ENERGY" -950 PRINT -951 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26) -960 PRINT"\DAM\ COMMAND = DAMMAGE CONTROL REPORT" -970 PRINT" GIVES THE STATE OF REPAIR OF ALL DEVICES. WHERE A NEGATIVE" -980 PRINT" 'STATE OF REPAIR' SHOWS THAT THE DEVICE IS TEMPORARILY" -990 PRINT" DAMAGED." -1000 PRINT -1010 PRINT"\COM\ COMMAND = LIBRARY-COMPUTER" -1020 PRINT" THE LIBRARY-COMPUTER CONTAINS SIX OPTIONS:" -1030 PRINT" OPTION 0 = CUMULATIVE GALACTIC RECORD" -1040 PRINT" THIS OPTION SHOWES COMPUTER MEMORY OF THE RESULTS OF ALL" -1050 PRINT" PREVIOUS SHORT AND LONG RANGE SENSOR SCANS" -1060 PRINT" OPTION 1 = STATUS REPORT" -1070 PRINT" THIS OPTION SHOWS THE NUMBER OF KLINGONS, STARDATES," -1080 PRINT" AND STARBASES REMAINING IN THE GAME." -1090 PRINT" OPTION 2 = PHOTON TORPEDO DATA" -1100 PRINT" WHICH GIVES DIRECTIONS AND DISTANCE FROM THE ENTERPRISE" -1110 PRINT" TO ALL KLINGONS IN YOUR QUADRANT" -1115 PRINT:PRINT -1116 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26) -1117 PRINT"\COM\ COMMAND = LIBRARY-COMPUTER" -1118 PRINT -1120 PRINT" OPTION 3 = STARBASE NAV DATA" -1130 PRINT" THIS OPTION GIVES DIRECTION AND DISTANCE TO ANY " -1140 PRINT" STARBASE WITHIN YOUR QUADRANT" -1150 PRINT" OPTION 4 = DIRECTION/DISTANCE CALCULATOR" -1160 PRINT" THIS OPTION ALLOWS YOU TO ENTER COORDINATES FOR" -1170 PRINT" DIRECTION/DISTANCE CALCULATIONS" -1180 PRINT" OPTION 5 = CALACTIC /REGION NAME/ MAP" -1190 PRINT" THIS OPTION PRINTS THE NAMES OF THE SIXTEEN MAJOR " -1200 PRINT" GALACTIC REGIONS REFERRED TO IN THE GAME." -1210 PRINT:PRINT:PRINT -1220 PRINT "...CHAINING TO STARTREK..." -1230 LOAD "STARTREK.BAS",R -1240 END diff --git a/software/CPM/CPM00_SYSTEM/userled.bas b/software/CPM/CPM00_SYSTEM/userled.bas deleted file mode 100644 index 38a6786..0000000 --- a/software/CPM/CPM00_SYSTEM/userled.bas +++ /dev/null @@ -1,33 +0,0 @@ -01 REM **************************************** -02 REM -03 REM Z80-MBC2 USER led blink demo: -04 REM -05 REM Blink USER led until USER key is pressed -06 REM -07 REM **************************************** -08 REM -13 PRINT "Press USER key to exit" -14 LEDUSER = 0 : REM USER LED write Opcode (0x00) -15 KEYUSER = 128 : REM USER KEY read Opcode (0x80) -16 PRINT "Now blinking..." -18 OUT 1,LEDUSER : REM Write the USER LED write Opcode -20 OUT 0,1 : REM Turn USER LED on -30 GOSUB 505 : REM Delay sub -40 OUT 1,LEDUSER : REM Write the USER LED write Opcode -45 OUT 0,0 : REM Turn USER LED off -50 GOSUB 505 : REM Delay -60 GOTO 18 -490 REM -500 REM * * * * * DELAY SUB -501 REM -505 FOR J=0 TO 150 -506 OUT 1,KEYUSER : REM Write the USER KEY read Opcode -507 IF INP(0)=1 THEN GOTO 700 : REM Exit if USER key is pressed -510 NEXT J -520 RETURN -690 REM -691 REM * * * * * PROGRAM END -692 REM -700 OUT 1,LEDUSER : REM Write the USER LED write Opcode -710 OUT 0,0 : REM Turn USER LED off -720 PRINT "Terminated by USER Key" diff --git a/software/CPM/CPM00_SYSTEM/xmodem.cfg b/software/CPM/CPM00_SYSTEM/xmodem.cfg deleted file mode 100644 index e07dfe9..0000000 --- a/software/CPM/CPM00_SYSTEM/xmodem.cfg +++ /dev/null @@ -1,210 +0,0 @@ -;Configuration file for XMODEM 2.X by M. Eberhard -;Must be named XMODEM.CFG and be on CP/M's default disk. -;This file is extremely verbose, for demonstration. -;Obviously, you can trim it WAY down. - -;How this CFG file works: - -;(These commands may also be on the command line. Command -;line options override .CFG file options.) Type XMODEM with -;no options for more help. - -; Anything after a semicolon on a line is a comment. Tabs, -; spaces, carriage returns, and line feeds are generally -; ignored (though not directly following a slash and not -; between 2 digits of a hex value). - -;/C specifies reception with checksums, rather than with -; CRC error checking. (Transmit error checking is set by -; the other end.) - -;/E specifies a RDR: port that returns with Z set when no -; character is waiting (for the /X1 option) - -;The following /I commands install 8080 code that gets used -;with the /X3 option. /I options are available ib XMODEM -;version 2.4 and later only. - -;/I0 hh hh... specifies up to 8 bytes of 8080 code that -; runs once during initialization, once the .CFG file -; and command line have both been parsed. (USeful for -; setting baud rates, etc.) - -;/I1 hh hh... specifies up to 8 bytes of 8080 code for -; the Tx byte routine. The chr to send is in register c. - -;/I2 hh hh... specifies up to 8 bytes of 8080 code for -; the Rx status routine. The routine should return with -; Z cleared if a chr is waiting. - -;/I3 hh hh... specifies up to 8 bytes of 8080 code for the Rx -; data routine. The chr should be returned in register a. - -;/M causes the following message to be printed on the console - -;/O option specifies a port initialization sequence - -; The first byte is a port address, and all subsequent -; bytes are sent to that port. - -; Note that more than one /O option may be specified, so -; that you can set up the UART and also e.g. the baud rate. - -;/P option specifies a custom serial port, for the X2 option - -; Byte 1 = status port address -; Byte 2 = data port address -; Byte 3 = 00 if port ready bits are active low -; = 01 if port ready bits are active high -; Byte 4 = bit bask for receiver ready bit -; Byte 5 = bit mask for transmitter ready bit - -;/Q suppresses pacifiers during data transfer, useful -; when the transfer port is also the console - -;/X0 uses the CON: port for data transfers -;/X1 uses the RDR:/PUN: port for data transfers (default) -;/X2 uses custom serial port (defined by /P) for data transfers -;/X3 uses patched ports (defined by /I) for data transfers -;(/X3 available in vers. 2.4 and later) - -; RC2014: /Z5 seems to be the best setting -/Z5 ;specify a 2 MHz CPU (any integer from 1 to 9) - -; RC2014: Standard full monty likes /X0 -/X0 ;uses the CON: port for data transfers - -;-------------------------------------------------------------- -;Example port configurations (Un-comment the one you will use.) - -;-------------------------------------------------------------- -;MITS 88-SIO (No initialization required) -; -;/MDirect I/O is configured for 88-SIO -;/P 00 01 00 01 80 ;88-SIO (no init needed) - -;-------------------------------------------------------------- -;MITS 88-2SIO (Typical Motorola 6850 ports) -; -;/MDirect I/O is configured for 88-2SIO Port A -;/X2 ;use custom port defined here -;/P 10 11 01 01 02 ;Port A -;/O 10 03 15 ;8 data, 1 stop, no parity - - -;-------------------------------------------------------------- -;Compupro Interfacer/Interfacer II -;Control bits are set by jumpers. The board will -;XOR whatever you write to the control port with the -;DIP switch setting. This assumes all these jumpers -;are set to their '0' position -; -;/MDirect I/O is configured for Interfacer port A -;/X2 ;use custom port defined here -;/P 01 00 01 02 01 ;Port A -;/O 01 AC ;8 data, no parity, controls high, no ints -; -;/MDirect I/O is configured for Interfacer port B -;/X2 ;use custom port defined here -;/P 03 02 01 02 01 ;Port B -;/O 03 AC ;8 data, no parity, controls high, no ints - -;-------------------------------------------------------------- -;Vector Graphic Bitstreamer/Bitstreamer II, Imsai SIO-2 -;(typical Intel 8251 ports) -; -;/MDirect I/O is configured for Bitstreamer port A -;/X2 ;use custom port defined here -;/P 03 02 01 02 01 ;Port A -;/O 03 AA 40 4E 27 ;8 bits, no parity, ports enabled, etc. -; -;/MDirect I/O is configured for Bitstreamer port B -;/X2 ;use custom port defined here -;/P 05 04 01 02 01 ;Port B -;/O 05 AA 40 4E 27 ;8 bits, no parity, ports enabled, etc. -; -;-------------------------------------------------------------- -;Cromemco TU-ART -; -;/MDirect I/O is configured for TU-ART port A -;/X2 ;use custom port defined here -;/P 20 21 01 40 80 ;Port A -;/O 22 01 ;reset UART -;/O 23 00 ;disable interrupts -;/O 20 C0 ;9600 baud low byte -;/O 22 00 ;9600 baud high bit -; -;/MDirect I/O is configured for TU-ART port B -;/X2 ;use custom port defined here -;/P 50 51 01 40 80 ;Port B -;/O 52 01 ;reset UART -;/O 53 00 ;disable interrupts -;/O 50 a0 ;38.4 Kbaud low byte -;/O 52 10 ;38.4 Kbaud high bit - -;-------------------------------------------------------------- -;CCS 2719 serial ports (Typical Zilog DART ports) -; -;/MDirect I/O is configured for CCS 2719 Port A -;/X2 ;use custom port defined here -;(typical Z80 DART & Z80 CTC configuration) -;/P 55 54 01 01 04 ;Port A -;/O 55 48 01 00 03 C1 04 44 05 EA ;DART: 8 bits, 1 stop, no parity -;/O 50 47 03 ;CTC: 38.4K baud -;**/O 50 47 0C ; CTC: 9600 baud -;**/O 50 47 60 ; CTC: 1200 baud -; -;/MDirect I/O is configured for CCS 2719 Port B -;/X2 ;use custom port defined here -;/P 57 56 01 01 04 ;Port B -;/O 57 48 01 00 03 C1 04 44 05 EA ;DART: 8 bits, 1 stop, no parity -;/O 51 47 03 ;CTC: 38.4K baud -;**/O 51 47 0C ; CTC: 9600 baud -;**/O 51 47 60 ; CTC: 1200 baud - -;-------------------------------------------------------------- -;CCS 2810 serial port (which is also the console) -; -;/MDirect I/O is configured for the 2810's serial port, which is also -;/Mthe console. No progress messages will be printed during transfer. -;/X2 ;use custom port defined here -;/Q ;Quiet mode, because this is also CON: -;/P 25 20 01 01 10 ;2810 serial port -;/O 24 0F ;modem control -;/O 23 83 ;Baud rate divisor access -;/O 21 00 ;High baud rate -;/O 20 0C ;Low baud rate, 9600 baud -;**/O 20 03 ; 38.4K Baud -;**/O 20 60 ; 1200 baud -;/O 23 03 ;Line control -;/O 21 00 ;Ints disabled -;/O 25 00 ;handshake lines active - -;-------------------------------------------------------------- -;Processor Technology 3P+S's serial port -;(No initialization required) -; -;/Direct I/O via the 3P+S serial port -;/X2 ;use custom port defined here -;/P 00 01 01 40 80 - -;-------------------------------------------------------------- -;Processor Technology Sol-20 (with SOLOS ROM) or -;Subsystem B (with CUTER ROM) -; -;/MUSing Solos/Cuter serial I/O -;/X3 ;Use the (following) patched I/O -;/I1 48 3E 01 CD 1C C0 ;Tx: call AOUT with a=1 for serial port -;/I2 3E 01 CD 22 C0 ;Rx status: call AINP with a=1 for serial port -;/I3 ;Rx data: no Rx data routine, since AOUT got -; ;the data. (this line is not actually required) - -;-------------------------------------------------------------- -;Poly-88 with POLEX ROM -; -;/MUsing POLEX for serial I/O -;/X3 ;Use the (following) patched I/O -;/I0 3E 1F CD 18 F4 ;Set baud rate to 9600 -;/I1 CD 12 F4 ;Call PXSOUT to transit -;/I2 CD 0C F4 ;Call PXSTA for status -;/I3 CD 0F F4 ;call PXSIN for data diff --git a/software/CPM/CPM00_SYSTEM/xmodem.com b/software/CPM/CPM00_SYSTEM/xmodem.com deleted file mode 100644 index 8f6d9947e3b7cb6de138c33bdbed73536333c568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4224 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 diff --git a/software/CPM/CPM00_SYSTEM/xsub.com b/software/CPM/CPM00_SYSTEM/xsub.com deleted file mode 100644 index 15e86abfc94ac7ae15b0db899aec96d711d56e58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmaJ-Ur19?82`SZbGy2mb7AblcK>F2M6D4sMuW6^oJmsllHu|`jC9jEbE6uwq?cZL z2z=-{=%I+BkU|FA#fN+0K1^AGK_H?ad+MRr*>|<)&cpe>^EWg|hr`^;SmQvJ9SI37E$JA6N z?XaaxR+^p8=~-q}kFc|QHe;7%{=PB@kp=OJhH|(riuHkN33wm z)TxRl(m_>vMB^N1$^gn(n0*c<>?w~u?3MdO@_84cTHYyhY%JVhpF+WF3H!Mh*F(19 zi7>GV)_X2S6|FT6U%BiLULq>vC)}t&^N~K$Sm*pDpo<_mkX{L-lIFTn8XeI(0X(wb Y+cM%=k)A5D2B>txs!Q>=Q276^zh*|>DF6Tf diff --git a/software/CPM/CPM00_SYSTEM/zde16.com b/software/CPM/CPM00_SYSTEM/zde16.com deleted file mode 100644 index 38ad326a90cdc7a073a4ca812628b0572bd3bad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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'J$$$$$P':::: - .:::::::::::::."$h"$$$$$$$$$hc.-?????'' ,d$$$$$$':::::: - ::::::::::::::::::"?$$$$$$:$,! .:::::'' -:::::::::::::,$$$$$$$$$$$$$$$$$$$$$$$$$$b,`!!`"$$$$:$$`!'c,`` -:::::::::::::J$$$$$$$$$$$$$$$$$$$$$$$$$$$$b, -:::::::::::'J$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$F,?b,`. -::::::::'J$$$$$$$$$$$$$$$$$$P4F,cCCCCCCCCCCCCCCCCCCCCCCCc`",, -:::::::,$$$$$$$$$$$$$$$$$$',CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC><> -::::::'J$$$$$$$$$$$$$$$$$F,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC>,CC \ No newline at end of file diff --git a/software/CPM/CPM01_TURBOP/readme.txt b/software/CPM/CPM01_TURBOP/readme.txt deleted file mode 100644 index 1746a4d..0000000 --- a/software/CPM/CPM01_TURBOP/readme.txt +++ /dev/null @@ -1 +0,0 @@ -In this disk is stored the Turbo Pascal Compiler v3.01A \ No newline at end of file diff --git a/software/CPM/CPM01_TURBOP/sa.pas b/software/CPM/CPM01_TURBOP/sa.pas deleted file mode 100644 index 240238c..0000000 --- a/software/CPM/CPM01_TURBOP/sa.pas +++ /dev/null @@ -1,65 +0,0 @@ -program SA; - -const - MaxX = 100; - MaxY = 50; - -var - FileName: string[15]; - -procedure ClearScreen; - -begin - Write(con, #27,'[2J') -end; - - -procedure Indent; - -begin - Write(con, #27,'[10G') -end; - - -procedure ShowArt; - -var - F: Text; - Line:string[255]; - -begin - assign(F, FileName); - reset(F); - while ((not Eof(F)) and (not KeyPressed)) do begin - readln(F, Line); - {Indent; } - writeln(CON, Line); - delay(12) - end; - close(f) -end; - - -var - Running: boolean; - Ch: char; - -begin - if paramcount > 0 then begin - FileName:= Paramstr(1) - end - else begin - FileName:= 'ART.TXT' - end; - ClearScreen; - writeln('Press Q key to exit'); - writeln; - Running:= true; - while Running do begin - ShowArt; - if KeyPressed then begin - read(kbd, ch); - Running:= (ch <> 'q') - end - end -end. \ No newline at end of file diff --git a/software/CPM/CPM01_TURBOP/tinst.com b/software/CPM/CPM01_TURBOP/tinst.com deleted file mode 100644 index f7304963e2f3ea264b74fe6d02aea6182c035f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25472 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 DD>nmz diff --git a/software/CPM/CPM01_TURBOP/tinst.dta b/software/CPM/CPM01_TURBOP/tinst.dta deleted file mode 100644 index 9d0a0d71d4531a4ac7ed85294927aaff3e0256c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4992 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 CCC+^S diff --git a/software/CPM/CPM01_TURBOP/turbo.msg b/software/CPM/CPM01_TURBOP/turbo.msg deleted file mode 100644 index 701b32b..0000000 --- a/software/CPM/CPM01_TURBOP/turbo.msg +++ /dev/null @@ -1,101 +0,0 @@ - are not allowed - can not be - constant - does not - expression - identifier - file - here - Integer - File -Illegal - or -Undefined - match - real -String -Textfile - out of range - variable - overflow - expected - type -Invalid - pointer -01';' -02':' -03',' -04'(' -05')' -06'=' -07':=' -08'[' -09']' -10'.' -11'..' -12BEGIN -13DO -14END -15OF -17THEN -18TO DOWNTO -20Boolean -21  -22  -23  -24  -25  -26  -27  -28Pointer -29Record -30Simple -31Simple -32 -33 -34 -35 -36Type -37Untyped -40 label -41Unknown syntax error -42 in preceding definitions -43Duplicate label -44Type mismatch -45 -46 and CASE selector -47Operand(s) operator -48 result -49  length -50 length -51 subrange base -52Lower bound > upper bound -53Reserved word -54 assignment -55 exceeds line -56Error in integer -57Error in -58 character in -60s -61 s ands -62Structureds -63s -64s and untypeds -65Untypeds -66I/O -67 s must be parameters -68 componentss -69dering of fields -70Set base -71 GOTO -72Label not within current block -73 FORWARD procedure(s) -74INLINE error -75 use of ABSOLUTE -90 not found -91Unexpected end of source -97Too many nested WITH's -98Memory -99Compilerd WITH's -98Memory -99Compiler \ No newline at end of file diff --git a/software/CPM/CPM01_TURBOP/turbo.ovr b/software/CPM/CPM01_TURBOP/turbo.ovr deleted file mode 100644 index bd9292e22a743c7de744baf3dbafc40805996ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmc&y(MwZd6h9|*aHZY6(`eg+ec!Iwva-6!f*~S`6-bIw5@g0;Y9rckE>mZ*2cLS$ zZ9Z01^al(Hhc6)vVhb*~XcG01%T~x-W?|q%Tj$J9U6QZFI+lMxVDak&hJ==CEk{2#6uL{ zoK8t0;32T&Gotn1onj5?blkp1$twwx(o$2LXiZdrx`xHFMQ0G>EoI3TqcVjlt)$CW zdfU1gW9{9S_Exxyjg@*tBl(%v7hpraJ6?Aq>m5Ah@s1Aq1I+Ciy~R9U=JtEW2H907 zb9vqDrYFF9JLu1@y4_6w4X6oO+v#xDwn1x?*5SzJ>sDncoRxls_4cQUdUY!zTBtr{ zH7qinP33c#M#uIgOw(cW&lEa0!|_5}F5j>bF2u6Z#vcpuxt-@_Gf1Sy)Q=GW0czkV z)WdN&2^XOcu7eAPskZ@`fDlYmpJ(9}yn!^lgAcF*-(VdKC}0(uu@*aU7;obkwXGhX z!gF{5bMO-8p;RKmvjcLUoU0DbCFwnROP72;FXa6vM$KO{)Hnyo4p2v;c8i0_2DBEf zc0mnB?^es@=ARB2S3;21+_G8|$w)m>-Vazsldl^^GD@ypo74}yCyI>RDWG2Nh|c)V hfwXp}i;_jQSZ)4YbiFSImzJ46272f|Y}S3g|1a5Q0>}UW diff --git a/software/CPM/CPM01_TURBOP/turbomsg.ovr b/software/CPM/CPM01_TURBOP/turbomsg.ovr deleted file mode 100644 index 36872a5e90de9d7b321f76f62d2c870b81dbf89b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmc&!U1(ET5T3DZ))y0L0?gG3ubQEOF@ZLw$({G-sH4YG+%t4$kS z`rwl*KryTo!0RP;!V86vhoW31UEm1r4PS4XEx!ei4=Th}>|ofO5U$Smprv6yR|2 zhwb(JHdsKCeiOZ+OK!Vw1e46>_l#hk_d;$V&qvS;S~|7E#=Ype49)0?qFMn5d>1fD zFfy&~u%!U_HL%YqH$axin65n4vT+jn>HB*0!xhr}1SreCIrNmnY4Vks?vh$UvEkiCzEt+gnI+de7MXzr=RS#E=-PL+b~7HZuRIy1M$|novD7 zMdsJ~4~*?xZ~dIkKhtx@%at*fesMOP)gn4QQ~R3Q@{-6+?!sYPjYzu7+Nmd(v;PCa Cy+Bm} diff --git a/software/CPM/CPM02_HI_C/$exec.com b/software/CPM/CPM02_HI_C/$exec.com deleted file mode 100644 index a6ae8f5114e29c25985bd95706879aafb3809b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmd5)Ux-X$6#vdSpV{5ZUUOSCgYwZ{36z$s+})z;6NyNhgA1NnKLpX zIG7E;`jgGz6oX@^W=5o}RlkAy*z{gY0EbeR|Esgg6p*qw&T^&2k28YL|0!1Pf!Atv z{2wa{QZOacpL zK^4pc85)Tan diff --git a/software/CPM/CPM02_HI_C/assert.h b/software/CPM/CPM02_HI_C/assert.h deleted file mode 100644 index 8e0c9703c49ef56a22bbea81a4ae3618ce03ea99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmb7=KTpFj5XD&&DPMr;QI@9a9|2oCfm%?dsvEQAHs{15wJY0c3yAN|#SmaXNLaFb z=eytYJx>N%ia~PgJ-MK*!3d2f)Otfs*7Y-#btq`ll%+Q17;{qEaD?@IargKT;m|na zAv*~VtJFAFKJNN-+UGb{dl+j*FXSu=OKlb^)*Nz=uIUew4zg}!U?f;XUT&-l zoK}Rrv!#=}h#z&RAh9FwW!c(!in6ix?Nv#Bu9!x0yyY%KxVpZXqQ_(Q+U9movNTIC zwK4^%q_a(@K+fP`b&&}5=~J69#I}+SgYL{{%reN*$&cSiwCZ2Pf64Ls#S5`ot`|ZK gA;kT16{9#xK6_&ssy(~-MXjxwLaQu2Kl|r;2iZ1}r2qf` diff --git a/software/CPM/CPM02_HI_C/c.com b/software/CPM/CPM02_HI_C/c.com deleted file mode 100644 index 11d94a4a2b3893032317fc75ede7720e9a82d1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19456 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 EZ{M0ug8%>k diff --git a/software/CPM/CPM02_HI_C/cgen.com b/software/CPM/CPM02_HI_C/cgen.com deleted file mode 100644 index fb2e377727cadb1178996a2589964ba35c1821f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44288 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 diff --git a/software/CPM/CPM02_HI_C/conio.h b/software/CPM/CPM02_HI_C/conio.h deleted file mode 100644 index 1002a0149f51810d845354a4b4c9b2afa3db1cd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmb`FK~KXl428L-QvU!aOOsGrF_rryP6G*Pf&*}#Sn8}1ty3lGp!|C5maVWex#d0k z^K+E4NE0a3#(gXsJYWObQE&~yL-_=zCmk&dQd6c$nk=lL3XR%6zpU4H_h}M`4n?pO zmFl9etTEfTQe^=iL*GP@3UCHG$2I6dD$pZo9GOQzPr>d9D;4Y)3PBKK?_ja1u!7wH z;xS6HEO@FVoRb^{XH3B8OcsZ0XtB*zmht5LD$7`cBEQL(x1#3^LE<YU2b1V4E-0(k}Wo*c)Q{9yH1YmglI(p~+jtI>Is5@MH-&7voD((A`t4m_{NMQoj_fgzt@_`4 z?wv7lys+v^c>>Sr74>~QmQd%y&Jo06rmQfPvC{1#E{4QE1_$nUe*N!v1I6TnXjiL`xqJ`M#EQprN z2mMJPPNwoA){-n_x|Ev~HmHUyRHhPNam+G6k>t@TQGv*#Z;B#N2=?7ZDh^a27h6eZ z2t}p7_`@Qm}Xik?Z1GT_;C>^ z@q6k12R9+UopyKiPtNWxM&qFnr&QJ2doGIs5X5XQ(~U}OX>qRJ@a}#15AKZ1UiSHL zFduzE_FkX!Cuy6=Tx>NGZvaWIe2pHBdMuQ=&I(_PrN5AWA07zqUj&)qG{~YyCH*uo z{0jm{B;H!xpMGWCuw3Z_2Q}wQeSeHoYJrbg7?jfnSI?D0sv^--*kE8DZG%dU>xX+O z0oqdr*%)(!QRXE`&8?zS{1v3@($7}c=%2_%q$Ls2G`?|~tVH&-FnNh&oCIPprJzX{t*u#`rgX)>nEBbRtJo( zSOjU_!0kGc?RL9~b9-u3B1t7JfuVz6_?A{p=*9?+5XO}lqyq{oeJ_pykS?->ihK0p zLJ@0W%(dA}23*R4#_Bm}FbI*GGn83LZ~bsawN>jqlGGdK3Ac*@U?AlDEE_nq30XpD zcb9J-+~JucdOIQW-K8Nxv{4J>P|miShg)}aJrw;{?1|y;?Oo^A6~}D87g<6|6}jya z45nA&gzW?M7-1%ZS|9U1we0RJUB?w4YL--VITr0azImA4T#1i0!%dO+VXe3E{963V zc5#$zOij*j03$^6jq)QeW~4ozo(>D|KBj}&WO#iiy2l13UuW_AFGuFB!>Fcd#abnh zHQmE1!f`&gXAMoVZZ)h|}jz&{7Na2t@B77dY^X4!3+%!Yn&yaI3ZCNM*_Y`_uRgg+=Nw{s( zLgIE6()-iEWUdz1=0u>0N8rLKC_q zFr#;#dar2SG>EWgQ`Qeg%bR9^?p*YY&i1fd6ud#1 zC#<9q4UHIU12)*C&1K~weTgLn+1868Y2k6_YRn*&k1ETt^ObvsQ743T?o8)AabLDU zd*_kcbr7W_hPvX{(C$z*OvjfaXu|Llrz@J*G@f!56Ta+N^O(-yV5l-3t@!<}89BqT=>5jH1*jZ2zm|~a zeZN9tbrq;Zq+u`mhCido9~e*0{=~yzXC9b+Ge7QC$qO%4uT?o3PcKE^Fv9CUh6Qah zn4KVKg>4BO5iy4O3hE=r{Ve*1nyTi^mRDVycUqY{lQYpbRFPEhr}TmViZ))J$FX>`EM$Eo0HzU!!W)w`^UV6+bi|T+GF>>DEuzo1#RW d{xPZ7?97Lk;)9{HY%^D@b-A1V{L}yX^DndQ<(mKi diff --git a/software/CPM/CPM02_HI_C/cpp.com b/software/CPM/CPM02_HI_C/cpp.com deleted file mode 100644 index dbe51271a76337e5d212c3df4a3ff3e62c8fae48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25984 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 A)&Kwi diff --git a/software/CPM/CPM02_HI_C/cref.com b/software/CPM/CPM02_HI_C/cref.com deleted file mode 100644 index d20a44dbe2c7a7b43fd0419c97a5a3acb0ce62f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 E3)UGYq5uE@ diff --git a/software/CPM/CPM02_HI_C/crtcpm.obj b/software/CPM/CPM02_HI_C/crtcpm.obj deleted file mode 100644 index b2723287a437049bbdb970e788a0332b9cb499ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcma)&v2MaJ6h%*x5)`^XD^*=Xw@eu-#0Mb6Ks$8o5}AS!YKtmjRL1s?*q9MBQhy>N zAJDDuIV5v!S-RKn+4tBjns|PI_uNkz;>pC$HkKshw*$KvPEQYm%h$Xxgiv4(_hZq3TBKS;G`R`ZvPdy(&E zv7|3zwpmzON(1f;0saq!_-*vArV3XPm6pt(TxkCdoC9m;Kx$X!Rn|pS#sR1~$1c}z a(v5<&%MeHI8YHKBMnt3jIbR_EJ^lbyQ%F4k diff --git a/software/CPM/CPM02_HI_C/ctype.h b/software/CPM/CPM02_HI_C/ctype.h deleted file mode 100644 index 35ae88f07a6ae6efd4746440d788c40c6e824afa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmchUTWi8F7>0Kn!9TF84#B3%W-G#kU5U^uDS`-s$VZlDZJTt{9rg3-N2>;a}7itSZH9^f#n@IuvH-NHLzA--U9>&1r`bn z2dt@BAy6$!o(L8@G$jQBTK!4}$I}OzO&l(qjDONM^>HS%E_6E_FG(g-f~kivzJ{iO zcciB=hJ6bg&(q~vN>I diff --git a/software/CPM/CPM02_HI_C/debug.com b/software/CPM/CPM02_HI_C/debug.com deleted file mode 100644 index 299a60dede769ba691e92d631908e3d8762d347e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13568 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 KWRw5*&;J8BMDOVU diff --git a/software/CPM/CPM02_HI_C/dehuff.com b/software/CPM/CPM02_HI_C/dehuff.com deleted file mode 100644 index 711976bc233d15c2729229a9693a40b295d4d067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12032 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 K<&t8c2><}7*-xYZ diff --git a/software/CPM/CPM02_HI_C/float.h b/software/CPM/CPM02_HI_C/float.h deleted file mode 100644 index 72f14382cd42d9c359c501c0d947139afdfe6f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2176 zcmbtVO>f#j5bbp%d0unW;#0?p|B&&j*+NLE{eth@Ci`O=7 zq?U^fGw;pJ+qc88hdw^UdAuoE&Wn<73dpvw-DPpf(|ahN9$5js;pN5U#oL5!dCJiE z!)*0sG@dRIMQGTAJWlvgqS)~#vLPEg}l5a|+0_Lz=+P z2bRJnOMkGuWC@fRaKR?48-h=>yYsbG$8`rCj9pac#=9cZbql+asKvMFSBRTM=cC2l zYCQdnsH+;MF06T3hz4OFrzJ0nxY4K-sf|f^DMpgw{6U)YfL$gI;tWD+F}b;&&aM}z zPX;8SICA8H6#IC$V?_zacW}HS0}OB8gM8Sk$Oiu%Eo)0Pkgt!CZMY~31;0=EmT!b2 zknnr$9CLQEqQ6)i;{&fC4m9#acLxzx;HFPPatWTnbASYj^ zhy9x69YN;PMHAg2UlFXEC1D*i9i59wrRJlh0{PlI`}p|sfG0>@rlOJ^hOX-eOiw52 zUL0(+v|$}iGnQbKf=SAxI@8mwZo5ZLRZUDH!N}6Y+#K;uyz&r-K0H6e-VeXY4KnPZ zy9Wm9=UCi#Kg1Zrp+R5f#*i9v~u%6n!x zc~0G`44C2RfKn_hgWZUF*dY!PSHo}SDiMe^t8ulun*>wR%vUlYmAoNNTbF{?#qkUum1P*8%i%f0{{R3 diff --git a/software/CPM/CPM02_HI_C/hitech.h b/software/CPM/CPM02_HI_C/hitech.h deleted file mode 100644 index 1fd093326d8b3ce9ac94c09015fc7dc282bf095b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 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

i>_%y`<`-$oRS_Y zVS~nJJ)tSZ;YqUF7(A*69%0$qsOZ$C;eC?)0Lak4GYM|0yiCAkDQm}*y7v7*YyBz| zdJ6MoSkj+V#5KKj(|>YPZ@ZoExE+TvFjj|e;OsZ z%}dEGT;gZ>g(F2;E_131XSwODn;NYekGUnSbPaxZ>C8#61&l0#;|W6Y;yLO>#$#j4=XU3yL2Q zexhY{XGN;&&Wuc!wNFh7BDDaZ)vHg#>k4*g-o65*igu)CW*808ib*F1SPlwK*gR|56te_jRK&xAq`K~gfjJ6Vka~S{E*j|6`jeYZOL0Zn^rZg zxpiIVl2pqIXg_XDB$qTbEKQ`YX-_RpY`(EGd1GhmHJxi$G_@~p>{!-z@8YJ$0*0cw zXtkK3XjZ6<(Aq4P=DOibsh=hn4->04rSuA7a?v(P)@8(;%A>%6dcKwzDXbgu7Y9wT zow@HAoX &}ZWX3!qkJS#`>qPBoM7RkkaBeN}Ssi;o9Ex7KReWz|grsg{t z0jGr(R81x&bbJa62*d{vi{ktjF_h!^AI^f@Q%G98m@@E3eEOaV1^S>#}532m7kVVLQ=$BYMPBieZH3`wWVPXxW^N zmM7*KI%eHOZlSxs$? zy(OQMvedJpnyLLu$?7@kQ*pq9L>MV&* zj74e9rP9OHOgEWDexXIa0hcJwiaaT;09I&d2(mZ>Z&*Y|e*Nm`8_-9{dJU?_ZjMSx zoC-_TH&H_EThii8%naO3JYQ5YV7KmnUQZ|A4rhD-A3 zQNLn*X?9M$F}pb4l3l*{oeM_b2?z^6&}6+|IY%j(4i&vU#q`ou4((lMFe^?k3-Mo8J+P6t&LI zjro0u-m+_p=gVCI(lc(*P?stdx?r~vXw&Hl1ve~mQ2tj_vZNqE{zcu`Bfs^O4^ zZ%9EjN;9VbF#92WNUd`oOGXWUvJ9 z#>?_<=-5>jGUEVSdD~6B<0eOE@%;~djy;y0-z$qem`^psB$Y#N{ieI}kehtVZT=Ht z-DK^(tsZ2E|K0SPZt9TR`Ig)9CxTl{8qv23HS*O7>H--30)dII`!M7=fserQR%x2z z^=TU7)GJZaMyj)>yCdB z0xhJ9&6NaC120OaQ#SEhV5lfI#&i)+~GSY^T!;B;qJk`Lg z&t&O1G-?Z3#Z=mY7g|BEMI&R{U3@wyj(YL{(>RGL#IMeTMtDj5G}S9lfwjsrAR6b} z%<8ht%5mbnLwxcSc{GkIFeKB49#Qh~fp$@{;qyaYK3#2i5f<~)y^Y5rCDZ#g%-wBV z7ZlY`9Bf6z)Q2o^^uv3pJKT4D{G)wqqbof}rBwk(rEcS>MCS7GxaTHwVE>-%JDzgrEdj#z5Buu=!NAUdT!~3q(a2cna!k~hvz;A+k54%*l44h6cPNP1 z&y3Qs$LMbXSAS~`Ph?hpSe`CsUweZfF=tbc9rg&NFdU-42#JS{={JShEv$LKtj!@=;2OKZp+_Eed0(0` z2xxofp9FTD8HAe;5Ig}0vpgV_Vb~rsnL-i1Z=@u7a{IR)HpVE_K1fj!flQf6h+J763yJaqXdezFKzRLBYb%;*SNOXm;I%mgWp zy&-C2IE0KOEIPRdsB(|)ik*9!n=W@#6Jn)AUWaBv8B`8~*#wG#@R%!Er^n0^4;$8OjjJPW1xS$1pbvM3RL-~hv%nyVoOBD7A*1v6>`Wj{>*f^L9cg& z1zm1$TJ4x4;|ZN^QTfz-2)?1XB=Eb90ZGd)vd+^vo33(OOYc8*jC(J%8r8aBaA#O(sY0 zyLnU;pzk_3q}WXuu~5$>VoD)r%%XWEmsw)<-Emwgu`rY^r9WlyRoQXT7iFvLb{=y( zpbDyRcT9x(Mo-!vbDQ42 za<{HxyIVIATBQn7y>A|^X1@@G=3os}1IV~Mm&X-A|3&3x&?1+YO3k?$^=vhl^>*D-f>eu?y3fVvy0WAh z-cHIV5ZYZ*fkuU!Au1plS8Zp81Yg&4Gb_)_Bxhxs&qp?Shxf-~06HSDERe2xdvvCD z%DYDvy8oy&`{wb(R)C@N0~rb#D@=?A{qSic(s7hjLpQe4Z%Pe#oT<6 zhS-#F!L2C3MDfoamG3r52fQRW(MqW~Q2NLnTjq|A%aNj#bCc?UmLti02kCY^E17qB z3MyQ8CMM9YQAt>}QuvVaQ+Vc{JYyc7)An9933N#;7ujZc)$(;IW|CoDn1#Ds38xg| zWG@hS!*W5$xdp4nZ893EY^==i4kmczVz@hlEYe5a<`H6Wb=h$dqTT%Z!XUs>fMd#oa@+a0 z$PQE`p0evOd1(J1}XG#fAxy?wp(6L=Sw;>c>qI zF*Zqp+FVNE)@#EiF1FYg0INLa7eG0^NnBS>K}uP8vG0KD#q<%H7iJv*m`MW5XV~R( zm%;y|+=V1812>So5u5_|Sp45$FP{#v=+8g`@*W%Y*h@K-Bz!qdzFdTYpmB?4hhjBC z>3l60%g*6STq;6K2-%Q^_J_+e-821YrW-4{Wnc2o&xFU5!cq=a*k>uQ5(Q<3LqDPG zHN5jPU`ciX5n6`mCJGVqjx!v$dlC-)+yJI&9Vm&f2{^{md7U5H@5`jm&7{uDbk53j zoS*YzyP3Rh+pR_(Wp{h!l99nTd{M=xb!;mbU*YS_v`(7}ru8{^P)emkq>5ed$0Ji4 zTq;f4?WoG1qr;I>dFY@ATCvExk{@7QBeJ7!gvnJ<82bpm9-r-mAWS9? zN<s`?RcKnX8N>5tl5+OqaAMYcW(1REs*@Z+x!Qug2K4 zKZr+0=iBrF9~!;W+fLLg`9U2Z--p~{9zIDAL{5KW9v=7UH*S{FoAKa%4jJe2{0OYo zrVHO!3jLv<)LVo`|IMe-01Z+E9alo~-(nIhDO=Y;Th~xvS>(@o8@g1kq*3OD`W%p^ zbBwDN!H&ti^99j?nT7BrpBPyVeA(=jAkeK>@_fnd0EUgq{->|J8y;BQzow72{MzlC zkc=bt8pU2i>|TluQf!dWnOcjTE$F-rR3x&un|#S_-p{M2ATCf$Xnm=VS};z~%n<-d z>Qm4{y=3O|9>pXF_E?h!-z0_`n0!Im$Ff&=6Kj~Sd<6Z3rxFugbgGK*!*q}z;_wP< zWW)#0SIImx3e)Y@r+>L76b)Y${vpEIlu1qvZ{Rvd0@^hG8{xla@n2#o%uZSNN8-6f zyuI?wkk0iVB{?E&8JP296aP>Af}FH zvM*1R+3{P@BKGSCQOMaB2(|EO>4bSx-Gy4@&wRzo5Y?Bjq~yG!jyNoViT@5UZqd>O zuEmS@R3Hv7-Zjd9YBjt_^~E@}!K&da6rHZp_%#~GMS7f%+uj%lZq)cvjel4y9bj)< zj4;;R*$eMF;}-iXj}PK=J4}~<@KUbw_8!+Lue!xcsTaSS2IXt`W(jxVA|Y^o<8pkC zZ#nEP?}M%82Isov%N9AeEWTxt^Wod@bkmAk7dg0D+ga$luasyHU|8jzm=9T$YuxNJ zCTU!x8{2p@9Teml47d}%V*S%TUuC!xu^I9Mq0`Oul*DRU11K*pUv|+b&!0Zq1|3^%~|1nT+ z$AS=~6(eBKAV_w4D~{+)u+Utoc5h_!W{VjVlnbXB;AK$<#)_e61&YAV9d{!CQ=dxm zO%>f9rPIYLSUG4B0kJcpV4GnU6H8>F^UFH)_u)~OYS6X7olF>-mhc~2@W^=F35G(} z2iP$99l6u-eSbPUye9!6Z*EWK}`qe(KbJfnOyR%SslUY zJv_=1EE@GAq`iZgzV3iIQ%#M2 zF%RV7oq+Yqc*jD$6ahHSZ~mFpj$6-GA7EVDJ#xfBZN8KABAus85Mn)scL{CDXeNqINi{aPs)zN z*L=eGn$LLn8(CigihJ`m2@s{(f#4(z?|hxWxkU)>&H@b2&{y!=DSy^NopP<>+!k~N9eA(1fGdH}2N z6h>y*fsYjr71}Kigk~KgUZ(7O2_A_>VV6k@4Rfn@KO0)Cf(-6!1>hZ6U`#}JuVyZS z*FWWNU#<1Vo~XZ=W@ue-+FmrG0WBHUPLw}=Djd@7q^+oE61CI;Y=c;okR9fWZpTY* za=*GZxXBmY=9f^{+FFtb0C?-xk^xHVO8yoTmOPn)75)_5Rb&cM{uBh(n0%npdzEjP zX{V@}liUZyfiiJD3^V;}?nD3|}cI z`$BHrOXx{I{=MKtE-{*U!hQep(&1@tvfpif0X<@^Ba;U9;Y=}V5|A2n-|$ma-53Ft zhrwy2A_NrB*9%RFd-cdXSi(j5NOz>h?o^RIA|D_&(F}Yg-0pt!xm9!%`bl&-a&c@N z&{1{*`Mow7$L}dL3Va_yfNN0X*P~eBqC1@sIi_G~<9!+u<#oMhk4}kNGvapPa8NMm zL8tTql`4KrEI{_4Sxq`!x8&pmq5K3NU*xr#ydX5`c1>DMNw^~z0zNz+%p*SWW(xi< zZ4O#VZi5cgpaOph8(UNFSeXuUc*-eO=i${g&0W1eFrZx+_;wle%_Ne8@M*Dv+X=Bp zPu)lDA)gjRL9ZI8bdC=3at&!yB=$?#ScDH%3a8<&Lbb5eF&}*^B(Yo+Dzg~VO}Ix} zN!WK&P_INBOljKG)aa1C!q7Y=v_b_OOu3iZ5M4oV535l2as!$J52WL`x`XfLrMwTW z$;e*i9M*rdUVO1r5u&(8FTu@mR`gQmeRg!dv&xPxa6V~A7dlaLr_`n{ndh8IF^w*O zIm(YMbn<1KY75|`${|e-DRM}UV>2q6$nLQBF`;Gg@mrpGtqq(7WFm_w-*9>!gqj|@ z6f+*m)SU~b=JW6mXGQAH2MZ$CUn~!}1?PN`wP`Juy|6oeL3U1ee9&8&VNmr>!(vh9 z#Sg+KhY&t#0VH9E*Hx^?oW9H?;E0N9$6%b{EYdKcN}EPg68*IGl5Z-Dz&FI17xa0u z?||mKrjV+Iz#w&*l$mCZu}l?!GqZV~m=`T^O^+H9CnE{X6W=Jpvq~Bg!`GV|>)R8lbdz%qikrls zP-ie?wN(NRf+S~dw32kKMGC$4&)lDA?V|eOrPdNgJSK9wa3-SGz^8jOxhMK-z6gsb z8|BUSAL73w=79;j$RpYrpeMe}L%#;HzF}QUheO+sbSjZt<6NthW2pof@@+okrHT&0 zYs|!@8HyP&a|$Uz7-CH8<{7l9k7L;P{EGCfH4#g5ls;jBpoBZfq2z3#-H>J5#~~lpKou@;xgGbj?Vi8)FfQ-J4r2heZUQYF zo*)(t_d2rW+#$S8(ap$(HWqi&VBf@iX(?3QRse)fW=* zpQgaZS78XCaS1NgRM7u}E|j@m;&5&jI@+k^ z#xk=o%3o^DfpOzR5-%a%Y||3rQLmXX_)DbcfGxWJ~|9fW#b zX>fIz_E(&Ul(Rh;8zmnUO9V~GSKJYcU2(Gw!mUl$RrVo+sY${zMk+U)BBCE1DWV?+ zo;$F><|WFdob+0%o4;>3KZuID%Z3WWS5}aZ5=L~2H=;9(4B@8W5O{9ryS4a@wYNIB z=FVhefzF;&w6g~6ekZ3F>EyEfPD1bb7wzW!U^nUNKk(nVcg@0N&8|Lp2kuE4a+j66 zOD4#fmpy_+{$&Ejzz&XE5LYhE8AD53dJJfhKlvXadCMGmi~2uGEcU}uDZgN}SSdL~_twAK9lk&8Y73Fjk^dRI12WM_49xbc^J4vtO zxh#0TQ?{Kt<2WC<{f1jt+=^Rt@uOZ_l_<$@WLa_Ydr)EZU{CH_PR#{mYf~Z#z4Zw; zb9!zw-mvl;dRY3yGg^tI=@P8z%ba>#Z9LxbKkP)`U%CZfMQBN`jW%s)@7NqowR_+h-l9P0ssxGzp7aQcaB=ZK=)CW>j-lG&QY{wkOgZ z(Wc~@Xj^l1O-p+H)mLAwZbjT9xD{~-uE!zVia3N@5r=Rq;t;!54h5h^1wt<4?>{d$ za3TRmznLX-$OZX}TJ)u?DLk)!8hvdlACgyFGwYEi^ho#`ctAJ9y6nL5M>;t4D-R8c z3Q4>oqRd5*oU3AjpOwp9>uD&!(6MY#J`(J^(VW2^k$W)7`@XNOZX%V1cV{I8Pj7Sc z6O77VyNJcmsEl+thS6>Cj5a4Rx|~HHLI%qgJ$3<#2nvT~4(@|`(&7Tek zVgz=A`$=>-VogW?;L!fQtkI>Eq16T;p}#NAI|J{+MkEo~&%7Dml>4ugQs4 z@>|&wip>b$1DyNzEB%p^&suQclyVA^%&f>A_*4dv;O6psH`T&QbWD&@?m=N>0V$Oc zUXmOC_~YT_3cqJuIM}uPq<|;9d6o9{cxXE24ny-c_70~n;Gd6WGyuOJS zT3{Xn_t%{)mcd2}y^Lvv$pRwTar>(`Km%hEt@`;)tGl@=_&A)$P0VW)vd6=)v64i( zv*Gx?wP~0N2SDlHX6}suY+p;A7)gw^!<*g)BZNczNC{*@~<8^!D%H4Pj-*v}`m!lAREL=Zx&! z__%Csw4`TR`HX2`^9v`d%jnTz^yn?`%OB!~1CNqpPIhkeT3o=4D{-%YD9c8;=SQoJPb@rg zF(x=1TPJE|&9c30bFZG=L6_IsRiK0&+K+~;D@q}N)iH6iE72NS@QAytH7no!*s~iG z=jT*_eyqs$AaFHQ$L98?dV7iqY#!^*Ip=8@8fMy-TgS3@Q1=2xf&RhX-9!7&b~bugs$dTN6oEBJG>Kj_uH@5zNWG_X1Y4;pDY#`8vjDAG7$u%t=n=In{mGg}Q7iL== zk`(<6P=@U@*nIG9O)P(lKYP4}91dh}f{h5-1!41<0$uB1jd6796$cBnqI(!T0e_Y; z{!lkz@q$=LlL-z`zX4);TO(_BXxsH6B#GM$%=J9LRR~cF8Xo%SVUq*w8 zv;hK#A;v~|%St&bP$a^%hZFvz@q%JqFUeN!t(&e-;~wyj@X+rNj3 z4!s?dtn>P&SB}(f`5*Q7{mZI1_iFzJoQCF>WTB1Wr={<#+VFL^<@B>Ox%yaM8T^%bKTW@ef1v_DDR3?SN(%fa zKWfcRj-qC|VH=`@G3+pZE~Z#>0XBPi9-ML*5P1ot3+dNvdozeE5~_iBPWY+l5s(`i zjvT>;2?AM)$Y)9ss+nVYEn9Q&j;2k7=|mJZs&gaxWBE&Tp*GkBa&TMc@vjr?1F`ml z>t;E7@Tv3tc>G8Uo~=3KQNBO;!j>ct*szM0WIJEqYT|939l7yBlVO|KEbYYrIzn2E z14Fy_5A5D^pclvEYq7cAolhR|K(~y1I|H55t{hLsy}&{$(#GIJxTkN+UbAp&cFVje z*+lk^g=N{q!m?P%*#p$b1Br*ciU!aUw69AP(9+Dzf6wG?*?9}gvy0{xZGBc?Wc4lS zH7#QNGce{9XlU~htnm91c;A-d@5>uaYg<=Ab?B`8(Nt}N09Kxzgd-ypqD4oP_Xbfl zkG22Tp#OKAK>s`2+Y9#pbgTaZg9E+86NY;a-Z+3eB6D#*S0P3E3i{~`h_)fW`!;>k z3pRhPe$!W1^=|$jZJYjO?U>#ZR1=7jApbqr1P7u7w14;R1N0Iww@}Ez;HEeSZ}doL zu%9zVN0D*x#>jtx+nKKtTu?+rhjP$baG-Q)YQ)(|9}0;U*lq0+t+^#ysYHJN&$9aO zDF^vf+>E|6D&NVQ4(t^I&?luqeyev{t@dUP^y7#Q)(g3&)*TwuPb_aN%e0Tnq{Eri zc-qtKhYx*kX0Tr_zC9{8dJn<1UM}@r7S6DD|Ilz=r_OiE=K8>>Z*5Diy+?K1hESn8 zrlkC?<{`@W>ol}DR-dG-un9XgST8sjh7a|t6<|ree7%|&E$Gu zc1Qf`gl^` zGw=iKdq(}Z$Kk?8z8P2k${s2+2PN6VF4I@CWan?3$SLA#hh0KuqmyY52{DVws-~uI zN&MIFw3Yo;wg0uz%+SI+Oe*rhHj#3JNkMnS?HlQM;k+~OQOluFDV>SRtadUhLrBEs zKQ(nut$ro~y?KVVb~QDSDDfcgm%d zU`_>(pa!qSV@*xGtnZmfN#BFihV-o(my#*KFxG=BDjalFt6`GFeY&Ra!Clu=mvpCF zi*GLsW&l3`qyRzE{5L2U^G^GnwWr@WRj? zUGb9X8(k6);~dsN2*-xVx@ut-6dUEJNXU${4}{m4c|o)F4ZtG0s>W)MKM2fdyMkc!=NI>URYUDAXEA$Lz2Iy z7F``Cw7qL($(NyH)lZe-CRd(7_(-xL4NkB;u}d{U#HIo((?)B3-*<{Lyk}np{ybhj9GSTFv90C%?sSInFC5zX4g>1vMoPcSoUUFAM4NuXbe@gSBlkKkisC)O0^HS8 zPNNT5R?w9stHFIn8_>qQ({L*$F6@p>iABkWbE?}+rj1^A$s~8dBs7S~2;BMz1n0-* z28t}Gh)nm~W$e1R0(=1met?|;!4m)4Hw?g1s(5ZTV(^cLi4n8&ck2A~IQUAsl__SQ zSNeIyinqKJunAFPpB|d2vbyNh{#g|+f4i@8whWRN0`29w78F7KA!3hSIF6OjrJ2m}o4WR|#a;+M+Y1pCRW)01G=?67#4x4>OEh-5Ca5}=PGp7)7h5|vtSCkbJFKA1$M$i`-vCAajD zoj@h>*=Nos=fQWYz~9)_4oL9=PUC|CJ@_tvVu5x7u?JK#VDe zGca)~xAQT#Bj-wgYkWi3&a=r%r5ga<=%B?4 zcjZJ+Kr@ZF$w_YWWVG7bi?7D@(Q#W6@6d6+I8ZC8#AhneQQtr{5!IwB+8TKZH!aBP za%!4n6%$Q^G6Wt0oqDHSoYfQP1iC|8C+{_f-d4#{KnSA5C`a6t$D{<}#BdJXRO0sf zj2%AN%Gj~BVGQ4)^5KtFzQf^4mCA6RurcZ#(86XH0wIv)qf-s%#!Uj8aFa<$cpHZ` zy5mS|kxy&*B|1%;?n<;f&w6G1wCwM_ls7fy4eM%w)koZwKq7_Wp{wY-6M~8W8)2Mc zq|6I;hhDy7qRTB%22ZzqK|Hd`pqqKLv7Hz*a-O4$lFETjFso4y+_IryF3_-51_xs9I}P#_ktnB$6ncy1S1 z7VHnpZ@H1&V#4M7ra8lr(Co_0@aDd&=Y^`VxIbI@Hfc;JC~oDxKS%v*=GClG6whCg zCd+KH{07+qw|~-KPrw((hz=dZ$p>g_Ft=43mc^dAW@tYtfS}$2XB!S(K5xP>>K(jM zi-jwZyru2F*Y97u=VrzQF_?B0RC?op|}g?x&*f z0HZL5fMFd96^6ex%giHltlFs)wXFYzyA$-6rF&vd(8_+31)jlvBAxwjkc}PcSoIQu z=C*nv?vp8-u(0f43by9a(LJQBtwzQmJ%zSA6Aq?gA?KCaJ@eU8Lkb@Ks5I!SzW#%h zaJr~2YbBT`0jP`e1j@Fas08#9)D!7}2VR}HL7Su+QtNSW#V4`Gbxn=y;ax!oC_S>H zLiq?{vsa>(N*n;F>;tV-j^vrrg1VX_p6{nwAoUsq6U}Qa$Sm2R*%}j8gF?)*aCh0; zC+`Kh-7UDhoNIMgG*utEc1BOUbXw$S_tc(v*|eI-;g-Ae+RpK2(ffjmwTw!63KeD_pp{pi^G47a=dKHJK>!T$Zk@*(v$Ae93rvxtucPKEs}i}V5?IU=Ak=O6TMuzN!<9ecw{Bj1MM%a0Df zk=qIAKqsLMU+%ucKG8cRc^{Yi)VNn&UMCPv0VbIR%?dyprAW{L9fXG+WGF#$Lm+a0Fj8 zuk_`4d#JzHc`rfWrDV{HXWH`aYY1S+dHRo03?HD#_60kNMuiX`nxlyUhP`%~ms70wn|6bbUF7er19gnx>j;XevkF7%HL@HR9$9HDW`xen{k*s;cr$n?#_h zYD+^EbC4N#wU{7!{d!#LHepmfR(YiwvRrkb2Z-oSBUPI!!JQG^w~b9RL@Ac`3@?pv zW`>At*tm%>%6Kf_P-mg7T=iPMr3UjZuhXd)l@Ug4vLQ*(W~Jy=(J*RA8j6Nw!t;!) z^!$Mv8mhWt^OkZF#9E@%9FZ=LGgs9+6xmp#CR$mI$)nWtr%21#u;;W)WQgr7XXR+i zbD>8?Lq*ZL&)1TiyVCAOYow~KVS`r%P`6d4+qz24E~2a)kAF_LYrqes4nLGv&t+7@gLFgHlMHIdRWmTKhjLWKOHUk@5Yqmj2u!b4| z`?hp4eMZJTX{>3?pBN%xI^h3WO$a>!{GU_kOu-`qimA+iT1L#cHa=&;el2Ev68{tX zvs75(5T|$*m)X6LGVkDdlSbi*>&Y6dfm@Zb(Hb_cOD$MQMAj(tERiCm=Q6NE;_$*ZPE*_g8YRWZ5gab|wgmP6v zmmArB9d z!h$}Vd_iUnX5(NcPB<~oXSax3y^F{l-jkOiG-dLH$PI|1eMB#7VY$N4t3Ze%Axi_Y zWL$IiouJ-gXN}{;qz!d-z`05;(8-lLnQ5(mjxM^rcy~SPQf8QCY2J6CB+)oa3sUD;47^ zInM!i^2YE6&8TY0H+eYJ<;Hu?yky?d@{&!*NiZ-Lg)`*y=+Oedu(S-gkd~}<>QIMT z+wQqS1XG6chf2XTxjvB-EeRbT>g>?4y+E5n$500gykE3F=9i7bu`9w8Yo_eotU95h zqJa!q)GuUFAN~gM*NeYXzM)1Dn-xkM%9ry7>A4VNgnct*!;m#%I2**6ELu8;Iu>Ap z+xml33AP|KSypGr$b`oHeA$p8>nETJQ$^M6P@#S(2wju_6C278PV@E{3tk`_hnhoa zxx>T3G+Et09i)#@PgS7+CRcPS1sObS8*XkBBDTD3d`j%*w&N+W; zFQ;XkZsN3((`ruZINinRW1Rjar{DFti+YL6S~%U$=^qJ3MK8YR^PPbBs5Lh9Yb@vE zNAq6mHZXaguk~vn&_EU?iZ@s17kA&}6AVH)=yeO`8KJQeeWv%Fjx%#n?K%}yBv4|*o;i&OU2Y-WbdR18aaJ~ds;=+dA$ zts=!)XYrt%KL}(1DcAkc5zl@13Mi*e;fKqhNOdu%xtz|{thZQ9+Jr!dSgNzjb+Qt? z%DVe5hTkmmIDEHVs%EffYkNRxuojL7q(EKk^O9wKSiF}2+!)*h zUsy>30JNv9W@~avU6_nkDkjG$g8mW+dheh`~<>co?Bl}jQ zLW*g6^G*jJk@E&HD{`A&BvhS}_0SklOQf?FlBP45k_{(ieQ)+G0n~)Bz2?6(>ASq=09RB>efpSk8IY#gBsNcP_6;y+lOe8P%gfYXauxG(2)8mBWjoz3aB zoG#*YDW}DpuCmP9om_S=%9MbXbHM|gR%z4Qz}cOwSRUv6|I*dZqq)YyZ*;-CPQjpM z7GW4FB=}B4AtEDpZ3fYiQCWt4iPwKYe?-Cr`rR)l;@citX-P}HM zg+}EPHC(A?t8ixaOt*b#e9W9luHM1A{M!7M&*yKgT;B@#c>}GfXg?r} zhB8PLi;m;32Y;X9?*#rvkiqOk>QxUZ!|u)>tHZ4K)uk2m3I9aR;#rQQ%&?gJ7G~}U zr#m(99tZdpUGPh%-~(N7)F~LWy1Q7j-xXj#7PuwMsmpbZ@eyz5V&f}TXaR_bzv7A~ zIDMMapXl~4I*i?>3*L4LIvMg4PGNBV)6Wi}Qs^#zTCau-5a!c^f2|*~f{zdpKufbF zfoo{?EuTLnxAu7@Mq@a%n)$-mCz2jm1oG&JZBnt9S))3gl*q5pmEpPGUJ2->-tZ+J z?zDxnH2jRka!L~y3F4-+ojCR~%09HNNIk>+AVF%Iqqd#{M^iC222*=CXZuqU`WTFC z)&awMQr7m$>fz~RG1{UYN!#~iAo#dUVAn1fCdf?baaqzMt3Q>I6Ua3Vq4e%D7-0O$ zy5q98M>c#a>rW8ga&;#>sb=^?u_SYc1T7ze&Ng02g|>t2RiRKqMN?&G(E=S{HyT&9v-Kf&0r!a7=4Kvkv2YI zFNr{(mgeqdEkwTVWgZf-PHY@#)=k3WHCH zylVYIqVxV^09nqviafF7tZx)pnM!(Aj=bhfljE6ib}at6W(jVf8HF<{K)}xMsDlf ziSUw&;0*h^*QJVr0NS0FwS$N-$@-YuKf{?0E{0B3t=}Ea!Dyr_PRkNvUm1x}u1A)9 zDyvV($VpV=*X|`=UA?dq0jT?ew;(7ZBLfI#^~?H!|H=Wri*OL^cOSXDf#nW1Sg525S~_&(%PW7<569BhZ!DUYB0L5eMDza%^fat9sD-n;Tu^qSC? z))XwV5#vQ#9FBB5*gI+`qXUhhH_q64uNzN=Mpc_uZ0J=AkKR#aE4l15oYsgueMzD^IMu)b$Cd)I({Y`}U9Scau0SNihQWf;nJ(C1gT3E!t+QN^HMe(=y; zmiEh%0U#0x893s@CJoqid8h0NIiJdEAcN6 z%f^i6o-8nW2AG;+#{+7&3E3xBqeCMdeg524s6^?YEEyt>(zW4-bO}5y@(gomVtQWHvf&pPyhsG*%f??& zi+V&RDH6dmo!1y!5K1j741S14x&}~%FsB5BmAg~p`O4Bhgid%QJud45**Nhjxou+b zvfL2a&ny|qMqe#*{zR|%H%?Rw(K7KmWTLM*JT3Pn~=pzLeA15Dc-cTc;YzIGmiLthr#~Qt^Cw|oWL&2Bu=M0&Xd`4uXQ4C>lmidf%zJ=0uR{c z%hUY-2dB1+;lb5T)OePSmEdIX!B9Sj>`C!5M)u$^6+eO)Ze{=+m5JQI2dT0&gQ8)58*;J(6!TI_S`!n5 zCSrm4Xr}qp`Yu1QiY~|jgA@NVbK)39aUiS)LbfCT=uJ&pu@kuQ6^9#Np|KGwI5%$G z9XG3i*RUKl)v2C=l>?W(NvYo*eqzPO({B!!VZKkwZ5e0Bs(*>2EwE~4u7{Ax$e26Z zkZ(x%5suQ_5i$=&=HYgSQ%$(}K34FsWUM)BnTH>DO1{h`@GCi%`nOyHN0M9pic7K_ z4mNS-B8NwdT@FTkh#TI|jQa&t(p8?_PK^mi?={^1np5>J+~_@1^`GVe{Qn0SHsi;& zoRRIbuqpMX2y6XO3MS;FZ{A;c{Y^o4XQa6l`n}UjHziV7cdBG_( zM~2;o*XQ_r@0+c!$HuiGTArvlJZL3M|82m_|E?B6ZA)^aU>poq(}oKN3IoAwlW8U% zbRG^JjiwG|dIwTAs5MyVos5Jqs@~ZQ;UqJzo$i_q)7}8M!E40grTISs5RMm=eq_3y z$0TtSgVR+ZS(Mnc^Gn9307j~8+wKuQs;Bk zbWTThzkh7G-}>@9++gE;>w{zzs9iT{SM%&WAyZ7vRf=iNv*vBijeL&AP7=dud~s$> z8}d)A>oJ*PXLD$LX8ISKL;lRHU6)_ypBNn26@C5i+J_H-Ef+4-JMCCX*RErG_FXG# z%I?|R`kaWqN*sMVTy^ZZY3q%woHrc&5Ctj9kEeq9Z0KBXnu53^up-m8-h5l9+s;!WbuR)|CGJ(hjH!VInfDDBR>O43!+1-C(7dU_78R7 z!q?FFr9(xui{IaQ$S1^pUxwI^ady60I5cx;n>g5E6}Dvk+d;a{@=f8tROG2Q0&qgC zRMC7+7jSw5r_0zIE#~wVvu%S7SDUeWIK9_Ytml>+Ij!c@m~AL4{ceJ!2hwPr>;}Y# zMt&3h%?%?nA8s*T0y?|wrry3lN!*PuzIv%E^nlDBdK#QDcQHAukdt`sdcDOgL{n>L zrgv9IJ-apDaRCxo4=d|H$8ETOLKoG=baKz}dIRqG>CGm5ezhI7R;{R0;R+hH<2kCf z^lWfIuN!cky{n}mx!AL(O_Y_y1$#HHO-n1h2z8$dvUZ4_XAjC) zLo2t~g$J@$Imnu97%P5*1jVWE(;|YPuYkkD)C;^DCF%taaAiC~<3b3JXw(`Ms<&7e zS-K08QJ2g)GZyT6_>M3BqB*$pT=4$6KNs%_VFaelx#D`c!8J63Miji6v&1#=zCo{k zA4eldQA?R+Rk|q1peo0g4_?r{ZlWm2^c32H z2NtlWlQ1GLgJO5y31*3cNop3}30{Nn^JGzQk!Qf*SG(5*MZv|Qb+4H2++Kii>sPPB z<^k?9Tl7LU9Jd)xyVG#mCbl`7ImKlqZi5q7r7-t!%_E#5V8RgJVh9{XDT05SQ-n;- zTMW3kr>cI+DUNHYimvXz#XSB;GbaR9HTS3abR*n!QjK#EJJsQvOW2PJaSi+{1#vYZ zuH5Z>F1n7>g`>J&Pq`MsksL>d!4BXqD}JDCGR%m6_3ke!@Op>P8#2t)9lOc9Y z&}zwnMUNKm-uq$kRZlb(ufOdVH{J24Hy6vV?EN{FzrOY>E9z3;DDHdu9UO`@Eu}{K zhn}011XBJsuN3wUcdxrj6d(qX%<{^*0a<%m?*<_|p^WZzg`!}ty17$2AWKebH=k_Q zJW)_YjvKlkSSKdP&&TA};T=Dg9$JA>w0DFDSgK}Hx>R{ zkap#LGSbh|1XYonru;gX&|X<`%3IrlK1hfU<_@S+8oC+z(r|d1Jq*oyktkRkKbh`z zOGLr4IE2ugtSR<5vG@!njLKCW#|)2cYJe|=1H83;laJbzTX|2Z%2lDV)znvEEb%StC&XR-D> zEQPan?mKI@A9?C`9Y+t}bR;Wp;r(x{{>*bBTkYQzD4dk6xVUoPu#SnhJ7_;IooR zmjEQsN;{#vXD^_YN}^Jwa=Z#o=?DC4aWzHq9*u_R`2al{#bAw3x+gb9pMCbq`ct+m zKohJxA!|=|so@f;Y`0$PFgi8P*?r7k^CQIIRCm$dVp3alh@+!=w4mjppjfLdtBYvw zY8x&*PI(;l!?bX>xtdd-tnJq?tSIF=nUw2*jGT6rtKFpYkb;6nMIca?;GVS&O9;d- zyr3;3tHP<^dTshHV+Udp%fpSFe#TWq_j3`p!b(|gbQ+tRVGnZ67EW=QLP270sM5bM z>g_9}g4IjH>Ts9z$hTd0B;Heb(HZFHJj++P!`C^Dx{dz?V0uft7e(rY#&LAqOa1_^ zm#JB-;Ph5g(L@h4hbOrP;c-j*z09RiPw8(>qeJvS8~!7sYTFj!yrSq@0@eYH56T&j z$J$7E&w1H0a7*KEan@Ei=cI`h`na>PXk~AJqiG3gmW^J`Y>OB(v#blq+HtZWUDl6J zs<=s@)OC+!LaI6YPDh%Q>}@=c2tF5Z;_AQ z@5hftD!hq{pEGHE^$M|u8QChHE5`5nufVvCb4P!Sj%9?^lw>X8^d^JlVtOD$=LFbR zjTOrVv+C0aj9EqE(XedU)sfl%9I&k1^(|+G<<3KdP<7WyW7BKwY;1dL9Nce8;BZ_g zQMjJTDLJu9{UFe;aeXt_xHoGU0tb_t=Mit$Z8nUR8sz<{PbmQVhBE5=5$8?~Yl}7( zYTRu3Kcr!%)c$12$Ac#q7q30KXzf#fzu=M9f4=s)ZT~Ruqi;0LdG_ni&APedDck|1 zAHC^X`2A)@!EP@FJ3B}6d1zOq92=NW_Fxi-M7ye$w5uB0(HzDbfcpN5MzhUway(NaOU0{82BX_*nNZHPmYKv`_PHinp??2))5^0 z4|0uvE^~~lJ@vl9EFP_xQfj{17 z5>-8+9-_Q*DHY|FQ1KHg2^^5+I_p6(UQk0g2&1an8Eq0IK9E4Aau3D18z5KuZYuIx#eok-@z$V z1=IckE_sO4YHsmWA{xH*@(m&lxl`tB z^Fb};G@B58RSx45iA_8D<_y=JqYLHPvyEuMJ@KQnb)c4dRGScQ#D~-~7k- zZv4~3y}x|qhd)@Hxv2HEzj*h_MN787_p(}%`ln(@%SaWz7N^#{9#{9eX`)~{?FR;C zfLqljPw_49++6)e@zuoB58SRpTm0Ir>AB62i!XTO(pE&jPR{D7#fB%v#Ct#8RCkI0 z9wwj6Y&C^bd@6$(?^0&jv8t>1s16QN_=`X#hDAR|4`hjU@Mw>D^w2Y0ic4sUV=0`f zHWfcK9sGzM$mRGcGdW@u*MT+){K&l@+=v*(&yaU@PLf@(s{w$Ckz*87dHw2$hy-l( z7{$*<5-cT1`s+xToe>ujUz)9z#}||62k;&NvUeFC5%IWRG)Zo)(QGmvc^QlO|9dZg z4-DHnTc5$rn2}>%nYRO^!Bqy-x-)6Pk}`IKoL<#znBEPy>WF3NhjtqfEl=ra6>faU zum<#^W)19d6}l|_r`X|cO&o*lge{?sW8ITMpHi=!84LE3ods#fNJpXhdD;H>fKa>| zF~00T0n~`voni4dkoPFXoZ5H;9X$`Di5vPLy)cnZa+H3tA}4T&PSB-a4=jM_uCI0W znoS?8;d}j~0(Y--j(1$I3Vrrm=<|-lhduFg;+R+KcVPa5bnrtAW3MF{1F25j;EuO} z9lQZxc%EHguTxg{%E&3)7NP)D_GB!Y@@O&;^2{9+ndydnE@age0OvuOe8MKna zp_Ssic+UVEWLCuMSP_{x&sOfcjyRrdB!b_pX}yQ9H@_u9bw?#b4mdltqwls zZhahZN##^UaHx~Z_y8%7E3V)aw;=Vnx6lJ=AiO}UOB(Q?d&di~d`IaA+|4Va25hXG z_~?cA{9doaNUwd6ZeRX6gAm)^#3%}pWt|t0c%h-xQjfAz!V=5tW#hON$C}<;a?kc- zdk!zrhIw25l)c+zb*hY{L2A2X#{m~Q{n#G7h&XQZv8ENf9zM3`$D8T3_!7XS0xVv4 zP4nt5jh)$;roo3McH&I!7(T6Pfi-jRa?(%`$&Yox!ae1gGX~e#u=CZ4S~$)NT@$w^ z>voq-McdqsLblPC-?Vg_clpUq-#yCC#)DV&07*S%HvU|#ges+`-4bNiIJl$ZYUlHF z?j8@9q?DO*FG*?rpzcJGkloK1tr``xTQp`#a-4yP_=Z{3rvj+}5F?>l$u+~UNONv1 z7SPLfO-mm-OS~tj^`5)_d|Y4SsJBQ9Jo%cv*V?A-uffX4=7*2Rjb5;~1kg70#?bg;#&6jt>xzxgiP7 zjB&wc3hA_1x+zYg=Qy}9cLegVaOOJx2&7#=pMy-4*;&?dFl8-GXLxv2NtXKPBfiO( zN+hJEjKh6Z=R=V6Mge~w@;pQ1EF0hg7vLfSAXgfPlx`1~xB!jiXecEv7StdDL-ux)$y z@*7s5xC@T+_@!OH6(S$1^=jew%YcWlFe<8Z7%`fNzF7DyJKYScieDXs0v{STYtY{& zJ>M!&TkKg@f%+sV@`|naGox;`{(h<7Do`C@zGevhP18ig*e@*Z{^<*CSBlP-mC=`@ zyF(Ms8^{w~GrGDT#5Lya;go29`GLj0xk8}V`#*btkg}VuE_Zyp=0HpP!45jq?L5@J zAHB4LPxt>C54+lb9esUO^yRM?`rEsg$AZ_Tv>#}G;~lXoip$dY{5g*6cdg^pnklv&8ZDzfXo7yavF|>0(v)tu4{z;Yra& z8W@h=qBYwAykh-9Z5?^mwIg3 zvGT3keLLQI$k)E3o&I;WAMCyJDwy77%^9i`;p;>$YQJAvtT{1yf}+B@2Vsn_7=#%Ojlt6lw@(cb;w4WT3L z``Zuh?-*&i`!Ut%&!2d6;iH>dc0AwHmqqH+UQh#)iSfX+G@WCXo|K zMg-d;WGH3&@upMy3SFx+eYAaR7~Z_04?@(I!a{Kav7HOJ!MwUNx2H)_agR zxzhXXbIz5eB!tz@yg!~-BHeq=KKtyiv-dvx9Qhp51=r@rsQTU3WO+6>4jdbg#N=7)FjJ+qYUh z?rNKW8CcsR@Eg@B$*4|Cat#CYr;M(&I}$b6gK}Mh5Oa)tCVg2$EXI4ma>@v$lkFgj zfrClqryQ>!OTTD~4Mb0X^S>_ql#Y-S9h^(2`b7w$-xbrplCR&Er@mlM=&D0~d-jCh zZjb5j$L{ohwU!9+qJ$^_%43qI=275&;=GnV-;Ml9| z^%t(#5JOjLbj^Ud6dPS7_##uVj7M+v#_-2=Y;+VGZ6#nwqmBgOQCV`D#%$dR3T1o-0?%O({x0K4SV+iP1f0Iq-0itgi5W`CD zYyoZuH@^4%RZ~WBW1L~`CKx(Ot_&-M#v9v*H(aJ}c_(z%Y#u+ui8vY`luyOb_A$tm4cXk(6;fec~pEkV3+@Lx@4%z)a{@ zl~}SQP8T!3)3EHl&=i>A!cNfZ6@D!TyK?+i8@SHQKzae=dP&2iI)j1+xxfh~@5>eH zYi@LVnjx^BCQi0{5=P_p+}G$s3mZ6ipVKATd9UuMoBH2{P`d2k4Z;$jPK#PHD`G$x zL&qhf&EzYV?B#MOVSEfq(83X8NR9x1R|o_4dhTt^Wp%e@Q?{ZUBERdrl1Qxd%cuVj zCi2TpP;t{+opOa-~Yy}}8J&duT$!9^b{K{SMmOSa$D=xc+&VJ#5qgi0*`FL9S*URP< zqGSS&0EV(!E@W8Y?*XhPMQr{y5*wDgMVwL1Sr=^TSt7}fx&VE%yjqaq3n3G+vLxOX zN$o&h>P=*I;T;S0fhHs3Ty>}^hp0@F32;QM^5+1idS)c_rG>G&2b!YO>8HAELqhl5 z0E1wVnxnApP?P>q?MfHEcg&O2{0;61+fL-E^)RzvO3CZ?wlkad7 z1)8pzYAv6b^1{Ocd%{&H2|IMuee{i)Mu*dAE4rNGwSwZ9z~{wy!Wo^Zex7%cif&_% z+3X}TLKIq2o3lw!KRIgf~egs?@(Ing3HmLuWcDu^Rp?Jc8R2*2bcv53C zbFzI(i`ZgL=qqZh+*T`9FV0Tv+m&hKl#qwHPMzFV>8JGtCnwOIV1;1 zfjadMBIRJkyC1A|!=@$;IuCIwU6b zI%=43?)aNGCUl38wf=e@S2?TRVBKRcNV`Mw@IsXdy`nDLq_$u<^MX{jpc;?Etd=OO zFzXfz)eGx;k87V#p74FGIpI6n%!B=cO;IY5 zXx;L4Mn@Vh{E;SiM7?LD`xVWpJ^%^;Wvos+@=;xZr?2@nE2s$AFB9y29QJRgVeJ+y zD9S||&PMevLp7U2Sg06;h2UNIgCkb3VhKateH#(}+#T~IL}{KWsM|OC(S-j9-lHPM zySiI=dZx@EUe$l%vWy}8ndmUX_LM^_0Q#>s3$?IB%}cea*d!p3;*IGS*5k?R^?Dv{ z=E7A6HwtBWNP?``^0j7i08FCD%%1~Bmn7}mm27#e+4FcaQbCN?@1I-uNOLM*n}KP| zQ-xZwesQjRPWR1|-_`FZmw!u2qg^|OQj&&r^RZ^%2r z7OH&s9ut%aF3k89$qOha?1Wa$!~bcM;589g#J^=(g!)%akyVd0N3}vn5hlpK*Q`F)tXI|!5joUh?WKwT zoN|hKa~6^zq~#aWpJ~~fvxb-;aq!GMoQ&T!^&&nnr|8(RDZA+S-aM8@ zJW-q}I;!(oi(bT9sP?$L;VzT%reMo}8fXcthg!m`4z?KK(>#EA{4JbP&%Ty{W6+{z zs~T8!pe3p~)B~H)Xh5(vDeQ0jEm%WF^&2*$`b}xDd!g$T;_@3t*PE1)%%E&U?E!TU zUmuIQR5WKV71$vC$UmBq^SZi+?p;39R z;eX5M8l|;I?`I$8g654WMVn`I{L*MUqZVOD%t5iLYKDP*1+ZuO{zPo0S74*K%2eP^ zh;LfK5CdF?ZBdLGx%Gn3H;mAmRh4cR%$!OA6enWpY@{;~a;^+d{1>;ZX0-oe4U{#Z zKDEi3f?Gd=k}#JSYhv{pEBBpIR90&np9f8mkp(p8TE%^fe}xswMr#z zF4UhehPf4Z`8*8xc>u3oL{(&Y>t)D@4lmX;jQr=DVB|l8$;H)$n_+kv$ZS-vWKfA| zxFyTWGSHcMS0~|cd<1m=~V?w_U2OA=9=OLmFUX&E2wWRJ-noK;J5nEJg@WB-yQ%Y0` z#Uz*_JhQrBGt!-e{_~sZXk@m}j|}JJrs>=|h9L=kmY2Tal9~3kQha&wR^`WZ?0k)- zo**X^2Wd4Dk}@ArYtO*pEdnxUHpdTB%|< z_Ze{RcHvc6WMu9zyD6%i;iEIj?^o7~ ztE1WivP(4yd*d{zzZb(v(pTB#=*>7Tiy0lIMjM@Sq0+$&TMTw=1|BLkCDbW~hflBi zCgiql+ z(vkr6Jf!6<7V~m)%sAVV53Cw!VNt6?LOw%h&~3^e;Xny?dBZ2z?lS5SNZ2sXk(R;7 zJ=i9sDzs9L_eVFxsHys5F|QDxN0r#b|4(dWRLhkDIOx?TJ+I_h2MpAlo=tNh6#euD zIy|f!K)Ny|FC zKu-1R$c3mj)7Wx}>Us{m8R1LDmMJ5`8cK-5?_47Jf+ke*LAJ6)cB%?iJ5)&BYo?Gv z%P!!Ic!4{kUZ616T#71ZY0&WFo~w)^3%FceX(JJ@0v?<++6KRkXnGze_{0u)70M8s z2>l1^#?_gqRE$$O-v7xGsS-H@fgLQHr7t?i;dQ8;h6e zG-l`i9H0F@Z33J4;O>4wwM459K!kTq*%uG-e!SO>pHX1{1-t5YQysxV=d+lZ@j~_)G z@|wMp8M2uZC&#+KI7DBA?Tc;cw47vdN%$PXKK#LAGm>u}FHq{tYP)1s=dq18`9Xv~ z9Cj2^K>e>bLfm{?tl-?pv4ng#hJOGt|^TDz2dv)XY4PC1IQtW8^jjc=V9 zDU5#fK?OHdd}h@5FfJsSy@m2`;EZz`2h1>r{GdWTZp*Z9xEU$lD3MYcRf=@)GP5_| z3>Cm=xQu8qEHJC{A({eET*xhO+v*qylH{WtNT^yUkCEws7~had?yqs>qE(xT(-NU# zsw1Urh|b7GSWzYcvl3;7OmKQo)MByJfheNQ5VjDziR{zmlh`}f4pf09aNY>P={t;Y zYUFm!0dzmCLIQE#XuF_ls6yeU6@6FRI8lzXCWO!CKaz$KfdFo4-&_St1Ap8UVeChc zxR5AekPp%Zj#uq~{})=!2u>M+i+pv0rRnLy?5K&vuuYp|F`X?gqhrcwyU5GX!bU8u zP|d<|_Ct^-7RGAm1IGtrR;I+3vv7mCWTPylbn+#^rnbbuQmp={^6mgOi!dPvOlYJ0 z4rc<0!5cCelz%cUS##)f>x|$fBVckL)%X01#}vxvKsLaSE{SC$kYC2cTeLfjk#t1a z$d66AD}sbO>}FdYiwRUe`WZR8CqxpWWuc z*iZ5Kqwwev$4H}g@5o-IE#tiJ&T-xm%X!nHD@5VIoERHQ&CuRTEkNqXWwL;e1?05T z2NLGHA^)3M+d!=Glc;K~TVz$VS0-3(AI2GxnFq|c1l&Et7U3qhp(O?-YJe>Hnqa<+2B zA*4~|m%qbEuTDEDGJq*63sY3U%6~0Q*`@M6U&QSK}3gA z&WS+nco}?;@VDF{!P^RB_$fgB$_sqy<%*H~%p#$idE71`5m*p6l|?qcY|F zNEUbmr5NU>OBPfG8gQ&cVmbBxGHBuBBhUgXy&>9F^3ogXX6h^s8XHKZ723Q!x`r9q z1S)ee`J3#Ss&p|rvIuLLJOBX+8(zNd52xuS4H9DshanLM<+8%K0R>udB*McM2`Qps zpU}G^l}8`>+TE!FcF#MmgK%9BNoyPQiL-|a;4L#E@X z!D5jP@OVEG722ZofxuQy&|(&N*PM8ueI{akTs{0b{s?|%lFucD6ILe<(geL=6|e+wTBXw_z?}o2veYi7;06v*PsX5>twPg8!@tKE`d3aHgXI}W8Qe3# zHZD%vhLa^vP}7y(hxxyYSt|_1N=_`RXfUUTD_9XP8SD;Su1(M_tcYj&)r?@hP~U&A z#lP%q%28^oTOStd;p@?MIKS%I*iD*#P7kD3{Ba`Zd@wBBe-gx5DDHazt%U zHdQP$eK~tRGq~6cRG7U>%+S)yCeB848QHnK%FiGLB*&i6u|JXHMDgW8ipQEOLe*N) zg8TVQ4@~ATnt7Jdq_7b}mXlD5DeRclnk4_Tc(Pw5{J3+}+_%{s!749J6`+vmKq0db z=}2w?G(qS6BCa9ZfSj@WaU%J>!6M;uo7VGIes7S943~FUmjkDj_o;D^ zODD?`$xq=vQl7@6ccLctTu=Ymg1uB(XF*dbft1RGlt?Us2M7rkNt7>dIAd)hX&Jvm z9vKI4NDxp3<{)(R2F;OtAyWZ0p_X&B1Goif^qw(7ZyWxxB{)fbiHi}#*wK8 zZqo|;Ui%&W#syO0-KN^IS*`%FQQAgpHnVy$lBx>)M^;_ERN@H|ZDrlAA8x@LqFBva zg0if%iJ0RUtr&XcS!4%J$LTjUE9loXrsa;rf#{Mou>mA_6ot~eDsklU!!5W-qGaFt zI7I~vUffz*9gFcF`mDxpj#8<7pl(>qx#5-|&YdL>Hm84EltFoA# zKk(YCII$GnVi*K0c1|)jR^)+m0-X*iA)65MunksFfTdPMv}Gw@L|e+#t*~_TbGJau z;sBHek@B9g2KeX@+pL#md@Ay6lvZ;whp!y_FJf#oqJ2(KjAHove=4oh6bgJFeRxaC zr`7|E9GT}}S0R-Ub zbf-kDH>%LnhL18?WP|CxR30vl0dC;f>F#Ct#;rL%ex|Yr6==OcGUC{y@-`UgOhq(W zEzB)#a~O0qjv`hZ;8@gG^fE-$I(c(E?l~gihkPfgXph?b#L0;mBH!TCwGT#5rPLa` zLz%3cOn#~C!jS$I3VP^yXXUR_#q~q6(Xo?Qz6;86LOz9aqmLJ+mTLv6D#acxcP=Q` zSJl>(RyJ>{tSq`6zaf;9&R6OBa`Mh0y`e$2(S1b6OUikWfmZo^*8JnBwh|o^iIZdF zCx<3t2dfTM1*(E4<3r=|@z`Y1WGs2xcw&4gL*mHVk?Thmj4Uksm_tlV_CNbkyte;i zTU?$6smGO~TwS7;G4)vWqa(CZT53L;?>VI}>W*unjKYJv3 z=UR>>n%sbyHqcD8`h8!AVsMT1Z(2QHZ}ohuRmCTszuKz)r`D0z)W5}ta2f^3h_Q>? zw2nTh-c1E~(+5c0X?eWW9IFV^6-PsI1Z}JHX9moK`x$*`7>p)$y{aeDYAyuWs^>x}5^JTz7jPLPQFF2fpS%ZLI z2I_=FY&KNqnMClpY&}3A3bu9T(l*e|5p9VI)xz3<9Ms2T;+vXB$msIKp67KE)vE zCo5!(Ovr9=HSCvtYp>GD>EkTX=kzEwV@-p7Yr*j35FND)J?EU1OZuPfck16+H;Mla zTmOrv5|uSGANqMsv6A2Sa!vjp^W_iXlXL-mqW@<#P9=Zfr5bzk&WZZumqzMF7EY9% z8=Z7s`tG{PD18i#^q<<)3}CE5x_1{xl2*)|{UR2QURsAu{URfRI{Qjvq$q-`%~`+Y zz;EXyDTbjqnu5pKU<4gT07p%<&7&j3nN$kEB`TCFa5vmI?lg`UDS5_fRvth>5r!b& zYDCH~xOE4WJF|W!^4Il~uGNihKWq~Bx_W^r1BRG`V;p^Ny|D&|s9C6wS;X_w9B=~^ z^KdyE9W&?ACBS0(fi!LbAZsCA;{>l18+>^t9cvo?*+y46-J&+Olp1SFfskrDPlHN` zV5z!12V_mLJck`8vOR6qSdh-32y5knGiK=LP2xI%7b?Tma=gIN-Uw&cg zd-c?$zgo{;hiFVky*x}{1eF+vzM~8ZJ%M`p#~hm48SvNZ<-a3y!D5)C92bTFqZn`A z#M(CS2Q=Cwsqgu5e7^Af_^DfMvO6)Jz?gCTi;u@^W{$5#02@aLn;dyao0#rg=|K0m zoPRU^>PK87W#jZgwm43qWPF`+W(W|Yu?PQ$W>5b3bZck%lPORNqj-{l($^IfRd(> zFz{~Fo--~OaWg)2E~||K_GIma$#W*k1{{ogQn8QRR%~o3G0#bRI`?;mI+gJKJ3~sn zw7+{-=)l1hix)4J!n>rq1KsHA32*M_xJSf-=o~W^MOu<0F}-ML!JI$caOgg_-Hu(VJiH? zL$AN{!GoQk|-Frg!Z&xsp(jMd!D#61CcJ=Jv&ZuErv>)i%)4L!1tyr;QyVS&p3TT}N z_wU@@S-A}KF{$E7>#TfG3k7!W4&mj1#z)~Xs4Q#KjXV8I zLrTxVP7-*r)Y93xFIxrRLksT=_`CgkD~qLFJNIyDcl87g>!dm&no9%^WbDe$u25${!SrllNIRvlwMr_2w<@qe00w$`4uGqG zVqpzR4F@2U-k#o|B7v+u-Jm&y^^t7|5*s3E{@(rjE2X0?68;xS{Lf(%-*(aP*RW1R8#Zj*w0Xo9ZN|ax diff --git a/software/CPM/CPM02_HI_C/limits.h b/software/CPM/CPM02_HI_C/limits.h deleted file mode 100644 index 9aa41938c5d2d31f153b768e0c0ce137dcdf4ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 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 Z*v!=nRm!vP&@{A}(_`gHBTl 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 LGNpCwH~*X`uNRp1 diff --git a/software/CPM/CPM02_HI_C/objtohex.com b/software/CPM/CPM02_HI_C/objtohex.com deleted file mode 100644 index 65ed2302e6057b468eba18a89fe247d2c5f300a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24448 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 E19I}ZaR2}S diff --git a/software/CPM/CPM02_HI_C/optim.com b/software/CPM/CPM02_HI_C/optim.com deleted file mode 100644 index fcfcf04e6f3ad19dc86e4c1166d6daf3188f687e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28160 zcmchA3w%`7x$l}hCX-2kj3DeF$li&-CgF_?AqvXFsEB}|u}TT%H6ajYhCB=+nX2uv zr{`4L-#N99-#w?ccv`J};FA;|Xl9yfCeE##9y~_7+oo}BHAXG<0fD`9|KD0`@0khM zo^$T~-TY+F-s|zL@4ddY*0;B1Zg$$oLfx9HV`S^~>kIbOP4=^q$Fz7|QoD<7Ds{7b zKhy4J$wc*zo}Ofx*`7>1o|jBKbZd;U#G$%m((qf%@Q<4iO=OJg=JeqkzepTmbF>`j&+0n zfVGPrLi$&𝔢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/cRHsLAoK8HCe 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 b2tAAH)x}GeF1vKOe?`U0HEY+wLfQWT3^9_G diff --git a/software/CPM/CPM02_HI_C/p1.com b/software/CPM/CPM02_HI_C/p1.com deleted file mode 100644 index 5caf0c6e2e03702a8823c221c2e8e5457b527081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 zcmd75dwf*Yxj(!om&uh&0)!nv+&jZ%CxM745h8b#wy1a|UXVb@1tKsBnF#?xM#Kt= zwFY|>t)@k4?;f#gNqc(A>C6;rb~>k0OIz⩔X|0(HNEcb??02XRWpO%mir9@AEl- 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 diff --git a/software/CPM/CPM02_HI_C/readme.txt b/software/CPM/CPM02_HI_C/readme.txt deleted file mode 100644 index a04a4b8..0000000 --- a/software/CPM/CPM02_HI_C/readme.txt +++ /dev/null @@ -1,18 +0,0 @@ -The HI-TECH Z80 CP/M C compiler V3.09 is provided free of charge for any -use, private or commercial, strictly as-is. No warranty or product -support is offered or implied. - -You may use this software for whatever you like, providing you acknowledge -that the copyright to this software remains with HI-TECH Software. - -The software is distributed in two archive files: - -Z80V309.EXE is a self-extracting lharc'ed archive containing the -entire compiler except for the library source code. - -LIBSRC.EXE is a self-extracting lharc'ed archive containg the library -source code. - -To de-archive these files you will need to either run them on a DOS -system, in which case they will self-extract, or use the LHARC program -to extract. LHARC is available for unix as well as DOS. diff --git a/software/CPM/CPM02_HI_C/rrtcpm.obj b/software/CPM/CPM02_HI_C/rrtcpm.obj deleted file mode 100644 index f7816e1224d6d1b9621dc6b3b5eed9b61deb249a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmcgp&o2W(6#iznt(Jzi1VNA$_sl-7^NE{qA+jc|KA7s0NgT&cCqX!9h zag=aycIv6w3nv%6nbG+Z%x3ex_ue=2eeiSPJiT)*vv)8~;-Vs_|X={!9XqW=S!f$mqr8;Dgb*TN1}8dkN5Jp%Sc)y1H+ zBD$iZLwf-N&?4Xi6@U-2k5>dO$dMd;zkE)a5MxQ+=>|T2zfnLvk;=t0^)g|hmk4=N zOoj_um5Re#w1jN)tZq3+kbXJAvFj&g(T_-3vf;SMsT0nRZO29se!hqA(C9kcZ52Qwl0RjNSpi2<| diff --git a/software/CPM/CPM02_HI_C/signal.h b/software/CPM/CPM02_HI_C/signal.h deleted file mode 100644 index 9c2cf8c55c50c888ab642164d670e47228eca19a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmb_bO^@0z5bf1S{DGcE>Ls97Z2GmWdSWR{qXkMKRH{_%$|RFuZLqVB1MI)=*j`$Z zNL3HbA#v^w~<}k{6I-CZsSz$qF*1VYC>`?D?SEc_A`7WwjJX`f)&n z`6`+~c-igz-eR=#WxZe_8}wnzWnPy+Pau_ny22DTk6=*mgp<=^kGkjiJ*AD0<}rJ1 zK?FcBJtL1oj)53pSM=^V210HH&tQ-m6{%ql*>6E>7yhVXI*%h)fx=yTL zpP|MI4IH*8A>nntH7$;KIb5)Jmc(eDpnaGB8XJ9$*?SvGi!*Ik-#`AxvzT3494-Ea zyIzdh2aC%J#f^|Tl!{6QcucT#rW(XIwgMk*#JwmA2of%BUpDyU)|QwCL1|1|#;?{Z z7GBucOvW|ubKsgd{op!NmA^5WRy$u!r-DU==Xc~Z&>^$6OO!NP6|Y8K4rMA%ck1j4 z-F?2EvLM(ikwVb#1=QAF@1kcZXij)t7~p;5(`8~4G6I?RZU7Wlp(G7m@3z~G#2?l_Ej_>{yS$UEoorI zn|06o-g`c4R9k^eBS+8u^jt^hwL(YZs;pDEb4EVP3ck_IA5pQWtBt8~lx17wLV(uH z+>ep+fRK^Qq##XQ{Q+wE(e;r9Fmq$FV(SK>ZTfZRxt>corj&!NC2CXe0@|LQdzL~b zD{vO8csgG?PO!TT0+St^H)u5`{~ohk7$?Ntw4Bt8vs5Y&SgXdm9>Ga;Pw;gQRhaTrDqGyqBLvsewyoXa%*<-d4YETefl?h##b^-A8l(Fo-r)Hs>U;zt_8yy%ZA s=bFZ*7W+}KwnDQ~*deHjmTA5l$8(X>bNZLG+QXM*{snFS^yL4}H#S4UjsO4v diff --git a/software/CPM/CPM02_HI_C/stdarg.h b/software/CPM/CPM02_HI_C/stdarg.h deleted file mode 100644 index 607bf98872909ac68edb908b5fba7e89df231374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcma)#!3x4K5JbJE&>!%$AV{+nif8c?`~neK(`^m3Nl0Qqzuu(YdUEHo%sgf~6c;FKfY!*F#vXTRaf!txaR?q)jgm{bf0vH*W>L}(p`?U;bMnK zJ~reI;KMhblp_ diff --git a/software/CPM/CPM02_HI_C/stddef.h b/software/CPM/CPM02_HI_C/stddef.h deleted file mode 100644 index 75367f2d9c68981425e64636b193a1b95b79ecf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmbV|y=nt75QNjp;1_VUUHxsp041salgkVzfL;15u@ngAo0 zcw%@{;wO}#h}&$7ID2?HHqtji>D*FMBV%gvE2Iz#Y6`Zt2kOx~W342+duv6a&ON!u z7uB6Wz*1*oi1M@G?tQzRLi8q>ON#ym_?!H;&1bmEYE1eI$eEMW*Z!rIik?JDnRx7v MvcHyJ-2L->0XTPKTL1t6 diff --git a/software/CPM/CPM02_HI_C/stdio.h b/software/CPM/CPM02_HI_C/stdio.h deleted file mode 100644 index b7d19fff3372bae1c55091eea95fb06ed831c5b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2560 zcmcgtQE$^o5ax9wV znc1~tCw36xfj+d}nQy+C{bpwSIOgR4XM=X@am08m7&*VYycz#P$REQ|X`D|k$5$7G zJOdL;G;0nS4n|MwF(V{rA}SKWDdqyQQRFP~S-1=o$%Kv-tFf$dKAz4lUcM$|Fx)Y|o85w~Dj5LZf$4MyHaWipTUDj;^!hz$4t$j+K$eRs zBCU9NXV5sCVfZfc=63c5ti!>s`FuQiIeU*3V22`{=wxztbyb#xC*paZWgOA2Kk&ih zTIFCR(DmPS!HSjf(rIh;j)xFl8nuaHL5O!`r5$`k?))a;k{NU>_YL=aOsTDJRP`;G z!Nz(%!7tBdsL-aFb8mctpWdeD64|m&x-Q74frzN}`*f9QL+=^onFviRg{E98`s(e; zH8qk3Ng~(OEE&})3*#VZw_xCw5TC?iK_#c15319H-=bq#J0Aw8qfVdRVo0z8USPYv zc|EBN9;-7K5{o1|6Ph`B}jcx z>iF18{o@xn`!CK0e|g0Y`CVs+1$px1InFxl4w&{N1D$}T#!}LFRi3kr?*mt&k*k8) z_`rh9_I)@|D$k29Z;>|&3gFvMB(d*>V=2L$Nvt2P?75raHXpfV@gJSp@y$n!!w^Y@ z;2L%|+sA^^LOQH{C;SxDMExsDg^2=61X(8}rblP=n_J4VM1;8_Yq05Mbv>@;W|fLy zMNXd*a?+)%U<2b&wBN8*DpjEVqX1z#9|HFlQhe!nm`Ke$TuWG7c(JNJo@9D?z-K$q z7?ug^1NNSMn(Mr_Lx=qkzHZJ6forchFn_5bR(tMy?=}#7z=IQ0xDJ)9SPvT!@AHBM|O;f5tiy?G8y@P#X9@`ocoheqSS7&~Uz!G{li|Ic^Ej>#qf diff --git a/software/CPM/CPM02_HI_C/stdlib.h b/software/CPM/CPM02_HI_C/stdlib.h deleted file mode 100644 index 40dabbe1d660cfc98cf4f9d4d8ecc48655224e33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmcIi&5GMF5bjlhyg*L_g~c){DJ^sl3x$QWr|llPE%X*-Ym^FPDV5|9_vt$$+fABu zkM+gY%;@_YuWRv?mDeh2=(BY;4`6!VW*dBhdc9mM7q6`G8jaXKecfz6ep)W_utzRf zpM}`xsI4*Ed?(g5L`=QQz!MM*>;uhU1fIZ%zQuw$1N1)GokuN_{e_Ic5asS*(P`As z48T2tnzRtF^(cZd33D)29#+s{Cq-2emAt7cDnTvZ$k!jZE{lWd)*lBaQ;**s9_Ta; z@QIKP!RmrR9rPq#jAP3M9?6aec8)RnK$2N=8dAm%s1zdjzH7)c3!ZMD^G-}(?jJYX z&-dTOySKORZwpALj&M+}M@ljGk#b@Ck+xIG$^JyIL*FT<0$yfBE9SJ--2`!6j_~ diff --git a/software/CPM/CPM02_HI_C/string.h b/software/CPM/CPM02_HI_C/string.h deleted file mode 100644 index 472334d9feafb56eb18d5d97e8063d59a94e2cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmbu8KWoD<5XHO7;4jcg5Gb~BN%ugfv{UGkb`FVsYD8_xNOGwA>3e6zRw2$Gs2Ah& z)9>CpN%M@YossI3i&hm*YGrvgkE1x6Nuf#*Y_on}E?-{b$aM`+K`O^s<4h@q*ti9o zXWW2oE5}K}wcw3L4H!-eFrW(PnFF9zR(>idnUz041VZ#{I|)?@CEs$7&Ut&=+D3T9!Rv zT(C@y1v+Nu_3e05Z-^~+`s=|gG`<3CTs+Kv30j$PjnMlnjTG}ZmuUIEyY6Z*;q%7 zIu%Vc_s6bh>Z%%{zC1CruocDLjDE4@Wwve9$iA=-&CYzC*9EUP;&4*uX<;{=zR)xT o#_M$@a6tA)zrTOs6bJhi4AYoAjWpR|cX6_l8Z#lfzx&_w3w}0!{Qv*} diff --git a/software/CPM/CPM02_HI_C/sys.h b/software/CPM/CPM02_HI_C/sys.h deleted file mode 100644 index fdc4e347784414492608874f4b79c218ac3e62b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmcgqJ!``-5bY|1|3D`}px7pHx(7O?okEwivq`LzBN|Ial9RZB?zQTy$IiX z_ujjcrdb^Ej4eCop`Hk6Knu{G%T||O8SQeyr*RZVBP9`&tXO``=dW*ZzmOiJG7pkWyf|II?Y0d+_e=Zhh z6Z%7$ol&9}ICT!RID!L?ra5f^tknkNQ-0U4lw-+QuG@Nz^AC%>Y&bx9dHVeLP*-&&^B&`m!ST)rjkuAOF}DqDod=J5j{#YTcMvxN z5JSM$aTlPut*an@Y6WD3KXqk@#mKnPgw-V)iHoRrlP|)tvvV1`GIvH><{qze=j)I{ z7euB0>bp=PVmwnWkUJ`v@t2@yMNzkr__t$RMP{`+i9$X7ge!B;^g-;%lkJR>w z*XYtj=_$a$4ikd5veO^|#K95*af@&y>Gc3~0f5`1x9J4K90bPz1N}sJT)(~lx>hCh z2ozq@*`W7)Gsj4EA7Yus;S&M(XNBk!O}bZt^!YZxYRUPTA9P`5`^<#WLK% z-TQaTBy^H#d+VVwHndUX<}%lln2!8_UNJ8_3asfw*>AiJ*IHRAdub={^&Y|CT07(d py-B$|B9>Mz9U8M6lbtN`ok=}}vp~_YEJ-bjs-k7Ac>U^su76_f@ALow diff --git a/software/CPM/CPM02_HI_C/unixio.h b/software/CPM/CPM02_HI_C/unixio.h deleted file mode 100644 index c74e692979f728ea3fced76448a1d55eeaebb081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmbu6F;BxV5QSMCDSv?Jq)I4>Qp#S5sURU$FhJ)jjnA!B=N#Ei+wkkL6G|W|EM)WD zyYJq+%(6Iwj4iNKg(;lWWI<>HE0QO$u2l$1AEycrsNiY#0-~X^lih~FSscaDL<-_4 z*!uNtv3PilBiGg#3X&XSwKH4_v37Gd%fO&*l!KrEEuhw3g9d^E4N{36^9*Rn$}J&h zR=#5(1VlI6N>m&@8mdjyDczMi0OWpy#CVN>N;mJoM2vY)eRQzk2&7dqba3n%aldjheq!IHf=9$^kCjA q`oNbo4Jk?c&-Ek6M(iYCOBZuLB<*w3voa_4P|KA6>?%Lr1 diff --git a/software/CPM/CPM02_HI_C/zas.com b/software/CPM/CPM02_HI_C/zas.com deleted file mode 100644 index 7746c14926ba4b272af5736dc44bb782710631b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37632 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 SKX1yRbonAH$p6R4{eJ+^=&$ww diff --git a/software/CPM/CPM03_FORTRAN80/cpmio.mac b/software/CPM/CPM03_FORTRAN80/cpmio.mac deleted file mode 100644 index a9151c3..0000000 --- a/software/CPM/CPM03_FORTRAN80/cpmio.mac +++ /dev/null @@ -1,87 +0,0 @@ -TITLE CPMIO CONSOLE I/O ROUTINES FOR CP/M - ENTRY $TTYIN,$TTYOT,$LNPTR,$CPMBF,$LINBF -TANDY EQU 0 -CPMSBC EQU 0 -; -IF2 -.PRINTX /CPMIO/ -IFT TANDY -.PRINTX/TANDY VERSION/ -ENDIF -IFT CPMSBC -.PRINTX/CPM SBC VERSION/ -ENDIF -IFF TANDY OR CPMSBC -.PRINTX/NORMAL CPM VERSION/ -ENDIF -ENDIF -; -IFT TANDY -CPMENT SET 4205H -ENDIF -IFF TANDY -CPMENT SET 5 -ENDIF -IFT CPMSBC -CPMENT SET 4005H -ENDIF -;CP/M CONSOLE OUTPUT ROUTINE -$TTYOT: PUSH B - PUSH D - PUSH H - PUSH PSW ;SAVE ALL REG'S - MVI C,2 ;CONSOLE OUTPUT - MOV E,A ;EXPECTS CHAR IN [E] - CALL CPMENT ;OUTPUT THE CHAR - POP PSW - POP H - POP D - POP B ;RESTORE STATE - RET -; -;CP/M CONSOLE INPUT ROUTINE -;NOTE: DON'T STOP PROGRAM IN INPUT WITH SWITCHES, COULD LEAVE -; GARB IN LINE IF THEN SAVED AND STARTED OVER. -$TTYIN: PUSH H ;SAVE [H,L] - LHLD $LNPTR ;POINT TO LAST CHAR - MOV A,M ;GET LAST CHAR - CPI 12Q ;FINISHED OFF LINE(LF)? - CZ GETLIN ;YES, GET ANOTHER - INX H ;POINT TO NEXT CHAR - MOV A,M ;GET IT - SHLD $LNPTR ;SAVE PTR - POP H ;RESTORE - RET -; -GETLIN: PUSH B - PUSH D ;SAVE OTHER REG'S - MVI C,12Q ;READ CONSOLE LINE - LXI D,$CPMBF ;PTR TO BUFFER - CALL CPMENT ;READ LINE FROM CONSOLE - LXI H,$CPMBF+1 ;POINT TO LENGTH OF LINE - MOV E,M ;GET LENGTH - MVI D,0 ;[D,E] = LENGTH - XCHG ;SAVE [H,L] IN [D,E] - DAD D ;GET PTR TO LAST CHAR - INX H - MVI M,15Q ;ADD - INX H - MVI A,12Q ;LINE FEED - CALL $TTYOT ;CPM DOESN'T GIVE ONE - MOV M,A ;AND - XCHG ;[H,L]=1ST CHAR -1 - POP D - POP B - RET -; -DSEG -$CPMBF: DB 80 ;LENGTH OF BUFFER - DB 0 ;LENGTH OF LINE -$LINBF: DB 12Q ;SO WORKS AT FIRST - DS 135 ;REST OF BUFFER FOR LINE -; -$LNPTR: DW $LINBF ;AT FIRST POINT TO IN FRONT -; ;TO FORCE READ OF LINE -; - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/crcklist.crc b/software/CPM/CPM03_FORTRAN80/crcklist.crc deleted file mode 100644 index f39d9ef..0000000 --- a/software/CPM/CPM03_FORTRAN80/crcklist.crc +++ /dev/null @@ -1,16 +0,0 @@ - ---> FILE: CPMIO .MAC CRC = 71 D9 ---> FILE: CREF80 .COM CRC = BB F2 ---> FILE: DSKDRV .MAC CRC = 7A 3B ---> FILE: DTBF .MAC CRC = 26 3C ---> FILE: F80 .COM CRC = EF E2 ---> FILE: FCHAIN .MAC CRC = DA 61 ---> FILE: FORLIB .REL CRC = DA 31 ---> FILE: INIT .MAC CRC = 81 21 ---> FILE: IOINIT .MAC CRC = 51 55 ---> FILE: L80 .COM CRC = 15 DF ---> FILE: LIB .COM CRC = 24 15 ---> FILE: LPTDRV .MAC CRC = 0B 56 ---> FILE: LUNTB .MAC CRC = 71 25 ---> FILE: M80 .COM CRC = 69 DB ---> FILE: TTYDRV .MAC CRC = C2 85 \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/cref80.com b/software/CPM/CPM03_FORTRAN80/cref80.com deleted file mode 100644 index e125339ac2ce7b2bfe0a5f55c143cdeeb91e2c15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 zcmeHKU2NOd6()JF#nxu1({@k{Ws-r3$q1a0D zg8n8gCy4%g+No7wF>h8uZ7@o)VuY<2zoG44(`z5oRS8jDu1!#F{!e->bo>i>vLaH( z$H8RUr)R9I^yXqg_8P~FQc~5pcYvwTYH#(Ed_Z+ z^jxS0L(t1JCcXKoTT)sG^2}@^XXuA)qA|?4-rTuA4>6irIqqgRQ9*_^@YM~9ju~Wo z|3SzX5-3}znAUteF&9rXpPiWdEA_Y*+3w$J%rob(G72fpM1cVC>Dkvpj#^1U|gr2Y~%aV67UZfHjZx zfY;^7D#@?P34=mK`RIiCfPAQ$OBNDxvQU|h-#Qb|nf3{k^$~c57;-t+k>wzgzd!*H zRBVAi`N#4@UIt@tdqBYe2pvZy1!4PDR0Ot&tdAl4k0^^Vlufhz$#JB~AkR{G?wqv; z8NEoO6$WoxXoB&ss4}?Q{|?A5pFkP`U5yK*2>U|g0s_CKZqU|P5JH6ZJ)%uSgQBU= z_sQJ(`SiXFt>OCy`i2h;4L|T@fZfEn$-qqpZZh!y%fQeV5ZeB}iDSo(j6aqdo1C1O zr1l?r@@HeI@rkL_(TS(VAEWm79T~r4Dm6AfH8z<#3TsqxV`0_qBeId?(*I$NJzV-~ z*nWkxlbkWaWoB_UO69J>-)$St&SF=MRDRV>kA`|+_guOYe>lQF z2bQf6CBaL*n0_8>sKvz-sM({ld=oTO5pubcSNZKu2;vvJ>g|7Bu0dYK(811nwDQ{H;+T5JmK9-c(s!h7g~@ zML(s#%12RhVm!`e(wkC2RvmKUtSQV zeZFytkMdQo4vgW5b(a9T@r3a=-ao8g=V9U>2AZH7%`d<1l?|Qu2lS3W%YSft0oFBt zdu4cAa&LawhvAOYsc75_jUK_qi>56F<3jJ6Y*1 z$VP%VW>NN27DUSh4bgu}Wbk4(-FmepG8+qz1cgzlIc3w$e#GYB{P>)F@eLu+$`u_y znO`lNaF6RFaF6RFt>AipI+CWS%u)mj5=zcEvn^f1f%GJXYE|3eELMC{M zg1k%rlt}GVSHY>7t-3Udpz~*dCx)YT!0F8P+kruI|I#*4^UP+v3jE zG`OE8p>eZI5y-1b!|6OD!YBlCVt(34dnN z8JNtSTbK&fEOvHopl|%@(I*Wib_1#as5gWbMs|>FosC^_>k!PG&s^LRWnfu4 z73r!qTX4Xdju~*j4{JCeD#QaicR`wEeKS^b=tTh)!c*I{^5z48jBs zk^ti*p6j`IM@)t-lU~38QE*Ik6!;k-TW$;#PPYX?%z_4N$BS)UHRA~a`~rBr8e#+Q z;w=DPsr6WAVo>s39$+to*i9`NH(rlz*I5MWEZu?q)Y@unomeZeZuk{@3VWXRS^b}} z@ExtV(Wbu_GyWCSLr{<=RH%qT?>kkP?r4XHcrCedz(1h3wS!e3N$(D1aB2*Sy7&7J T-k+jUheielzJR}?8(sbno!yBN diff --git a/software/CPM/CPM03_FORTRAN80/dskdrv.mac b/software/CPM/CPM03_FORTRAN80/dskdrv.mac deleted file mode 100644 index c34d437..0000000 --- a/software/CPM/CPM03_FORTRAN80/dskdrv.mac +++ /dev/null @@ -1,860 +0,0 @@ - TITLE DSKDRV - FORTRAN-80 DISK DRIVER - - .8080 - -MAXLUN EQU 10 ;MAX # OF LUN'S ALLOWED - -;BDOS FUNCTION CALLS, FCB OFFSETS - -BDOS EQU 5 ;CP/M BDOS ENTRY POINT - -.RSET EQU 13 ;DISK RESET -.SELCT EQU 14 ;SELECT DISK -.OPEN EQU 15 ;OPEN FILE -.CLOSE EQU 16 ;CLOSE FILE -.DELET EQU 19 ;DELETE FILE -.MAKE EQU 22 ;CREATE FILE -.STDMA EQU 26 ;SET DMA ADDRESS - -FCB.FT EQU 9 ;FILE TYPE -FCB.EX EQU 12 ;EXTENT BYTE -FCB.RC EQU 15 ;RECORD COUNT BYTE -FCB.NR EQU 32 ;NEXT RECORD BYTE -FCB.RR EQU 33 ;RANDOM RECORD NUMBER (2.X) -FCBLEN EQU 36 ;FCB SIZE - -SECSIZ EQU 128 ;SECTOR SIZE (RECORD LENGTH) - -; GLOBAL DEFINITIONS - - EXTRN $CPMVN,$CPMRF,$CPMWF,$BL,$BF,$ERR - EXTRN $IOERR,$REC,$UN,$LUNTB,$CLSFL - - ENTRY $DSKER,$FLFLG,$MEMRY,DSKDRV - - DSEG ;DATA AREA - -; I/O ERROR CODE DEFNS - -OBOVF EQU 016Q ;OUTPUT BUFFER LIMIT EXCEEDED -IRECER EQU 022Q ;INPUT RECORD TOO LONG -NOFILE EQU 236Q ;FILE NOT FOUND -FULERR EQU 237Q ;DISK FULL -LUNERR EQU 240Q ;LUN TOO LARGE -NOMEM EQU 241Q ;OUT-OF-MEMORY - -; I/O MODE DEFN BYTE - -MD.ALC EQU 80H ;80H ALLOCATED BUFFER AND FCB -MD.OPN EQU 40H ;40H FILE IS OPEN -MD.OUT EQU 20H ;20H IF OUTPUT -MD.BIN EQU 10H ;10H IF UNFORMATTED I/O - -MD.WRT EQU 08H ;08H WRITE-DATA-IN-BUFFER -MD.RND EQU 04H ;04H IF RANDOM I/O - -$FLFLG: DS MAXLUN ;I/O MODE BYTE FOR EACH LUN -$FLCNT: DS MAXLUN ;I/O BUFFER INDEX FOR EACH LUN -$FLBUF: DS MAXLUN*2 ;BUFFER LOCATION FOR EACH LUN -$FLFCB: DS MAXLUN*2 ;FCB LOCATION FOR EACH LUN - -$DSKER: DS 1 ;STATUS OF LAST I/O -CLSADR: DS 2 - -$MEMRY: DS 2 ;FOR LOADER TO STORE TOP OF MEM INTO - - CSEG ;CODE AREA - -FILTXT: DB "FORT",0 ;DEFAULT FILENAME TEXT -FILEXT: DB "DAT",0 - - PAGE - -; I/O DISPATCH TABLE - -; LUN'S 6 THRU MAXLUN POINT TO THIS TABLE VIA $LUNTB. -; AN EXPLICIT OPEN VIA CALL OPEN () ALLOW -; OTHER UNITS TO USE THE DISK ALSO... - -DSKDRV: DW DSKFRD ;FORMATTED READ - DW DSKFWR ;FORMATTED WRITE - DW DSKURD ;UNFORMATTED READ - DW DSKUWR ;UNFORMATTED WRITE - DW DSKREW ;REWIND - DW $IOERR ;BACKSPACE (NOT SUPPORTED). - DW DSKCLS ;ENDFILE - -FNFERR: CALL $ERR - DB NOFILE ;FILE NOT FOUND - -DSKFUL: CALL $ERR - DB FULERR ;DISK FULL - -LUNOVF: CALL $ERR - DB LUNERR ;LUN TOO LARGE - -MEMERR: CALL $ERR - DB NOMEM ;OUT-OF-MEMORY - -;------------------------------------------------------ -; -; GET MODE BYTE(LUN) FROM $FLFLG -; -GTMODE: LXI H,$FLFLG-1 - LDA $UN ;GET UNIT # - MVI D,0 - MOV E,A - DAD D ;[HL] POINTS TO FLAG - MOV A,M ;GET FLAG - RET -;------------------------------------------------------ -; -; SET DMA TO DATA BUFFER(LUN) -; -SETBUF: PUSH B - PUSH D - CALL GETBUF ;GET BUFFER ADR - MVI C,.STDMA - CALL BDOS - POP D - POP B - RET -;------------------------------------------------------ -GETBUF: LDA $UN - ADD A - MOV E,A - MVI D,0 - LXI H,$FLBUF-2 - DAD D - MOV E,M - INX H - MOV D,M - RET - -;------------------------------------------------------ -; -; GET DATA.BUFFER.OFFSET(LUN) -; -GTBOFF: - LXI H,$FLCNT-1 - LDA $UN - MVI D,0 - MOV E,A - DAD D - MOV A,M ;GET OFFSET - RET - -;------------------------------------------------------ -; -; GET ADR OF FCB(LUN) IN [DE] -; -GTFCB: LXI H,$FLFCB-2 - LDA $UN - ADD A - MOV E,A - MVI D,0 - DAD D ;POINT TO ADR OF FCB - MOV E,M - INX H - MOV D,M - RET - -;------------------------------------------------------ -; -; GET READ/WRITE RECORD NUMBER FOR LUN -; ON RETURN: -; [HL] = FCB.RR(LUN) ADR OF RND REC NUM. -; [DE] = $REC 00 OR RND REC NUM. -; -GTREC: - CALL GTFCB - LXI H,FCB.RR - DAD D - XCHG - LHLD $REC - XCHG - RET -;------------------------------------------------------ -; ZERO FCB FROM EXTENT BYTE TO END. -; -CLRFCB: - CALL GTFCB - LXI H,FCB.EX - DAD D - LXI B,FCBLEN-FCB.EX -CLRFCL: - MOV M,B - INX H - DCR C - JNZ CLRFCL - RET -;------------------------------------------------------ -; COPY BYTES FROM [DE] TO [HL] UNTIL NULL (00). -; -CPYTXT: - MOV M,A ;COPY FROM [DE] TO [HL] - INX H ;UNTIL NULL. - INX D - LDAX D - ORA A - JNZ CPYTXT - RET - - PAGE -;------------------------------------------------------ -; -; OPNCHK - ASSURE THAT FILE IS OPEN AND BUFFERS ALLOCATED. -; IF NOT THEN: -; 1. ALLOCATE DATA BUFFER AND FCB FROM $MEMRY. -; 2. OPEN FILE WITH NAME OF FORT##.DAT WHERE: -; ## IS LOGICAL-UNIT-NUMBER (LUN) OF FILE. - -OPNCHK: - LDA $UN - CPI MAXLUN+1 ; - JNC LUNOVF ;LUN IS TOO LARGE -; ---------------- - PUSH B ;SAVE OPEN MODE REQUEST. - CALL GTMODE ;GET FLAG - ORA A ;ALLOCATED BUFFER,FCB? - CP ALCBUF ;NO, GET SPACE AND SET PTRS -; ---------------- - POP B ;GET I/O MODE IN [C] - ANI MD.OPN ;WAS OPEN? - CZ OPNFIL ;NO, OPEN FILE. - -;------------------------------------------------------ -; -; SETREC - SET UP RECORD NUMBER -; -SETREC: - CALL GTREC ;GET CURRENT & LAST RECORD NUMBERS - MOV A,D ;[DE] = $REC - ORA E ;IF RANDOM I/O - JNZ SETRND ;USE VALUE IN $REC -; ---------------- - MOV E,M ;..ELSE - INX H ;USE CURRENT RECORD - MOV D,M ;SET BY SEQ READ/WRITE. - PUSH D ;SAVE REC NO. - CALL GTMODE - ANI NOT MD.RND ;SET SEQUENTIAL MODE - MOV M,A - POP D ;RESTORE REC NO. - JMP SETSEQ -; ---------------- -SETRND: - CALL GTMODE - ANI MD.WRT ;WRITE-DATA-IN-BUFFER? - CNZ FRCOUT ;YES, FLUSH IT FIRST. - CALL GTMODE - ORI MD.RND ;SET RANDOM MODE - MOV M,A - CALL GTREC ;RESTORE REC NO'S. - DCX D ;ADJUST RANDOM REC NO. - MOV M,E - INX H ;STORE AT FCB.RR FOR NEXT I/O - MOV M,D - INX H - MVI M,0 -; ---------------- -SETSEQ: - LDA $CPMVN ;CP/M VERSION FLAG - ORA A ;VERSION 1.X ? - RZ ;NO, VERSION 2.X NOTHING ELSE NEEDED. -;------------------------------------------------------ -; -; SPLIT RANDOM RECORD INTO EXTENT AND RELATIVE RECORD -; FOR VERSION 1.X -; -SETV1: - MOV A,E - RAL - MOV A,D - RAL - MOV B,A - MOV A,E - ANI X'7F' - MOV C,A -; ---------------- - CALL GTFCB ;[DE] = ADR OF FCB(LUN) - LXI H,FCB.EX - DAD D - MOV A,M ;FETCH CURRENT EXTENT - CMP B - JZ SAMEXT ;IF SAME AS REQUESTED EXTENT -; -; CLOSE CURRENT EXTENT, OPEN REQUESTED ONE -; - PUSH B ;EXT/REC - PUSH D ;FCB ADR - LXI H,FCB.NR - DAD D - MVI M,0 ;ZERO THE RECORD NUMBER - LHLD $MEMRY ;GET SCRATCH BUFFER - XCHG ;FROM TOP OF HEAP FOR OPEN/CLOSE - MVI C,.STDMA - CALL BDOS - CALL GTMODE - ANI MD.OUT ;OPEN FOR OUTPUT? - JZ OPNXT ;NO, SKIP THIS CLOSE - POP D - PUSH D ;FCB - MVI C,.CLOSE - CALL BDOS -OPNXT: - POP D ;FCB - POP B ;EXT/REC - PUSH B - PUSH D - LXI H,FCB.EX - DAD D - MOV M,B ;SET NEW EXTENT NUMBER - MVI C,.OPEN - CALL BDOS - INR A - JNZ SKEXT ;IF IT EXISTS - POP D - PUSH D ;FCB - CALL MAKEXT ;CREATE NEW EXTENT -SKEXT: - POP D ;FCB - POP B ;EXT/REC -SAMEXT: - LXI H,FCB.NR - DAD D - MOV M,C ;SET RECORD NUMBER - RET - - PAGE -;------------------------------------------------------ -; ALLOCATE FCB AND BUFFER FOR UNIT . ALLOCATES UP FROM -; $MEMRY AND STORES PTRS IN TABLE. - -ALCBUF: PUSH H - LHLD $MEMRY ;GET CURRENT TOP - XCHG ;IN [DE] -; ---------------- - LXI H,-256 - DAD SP - MOV A,L - SUB E ;IF MEMTOP-256 < $MEMRY, - MOV A,H ;THEN GIVE OUT-OF-MEMORY - SBB D ;ERROR AND EXIT... - JC MEMERR -; ---------------- - LXI H,$FLBUF-2 - LDA $UN - ADD A - MVI B,0 - MOV C,A ;[BC]= 2*UNIT# - DAD B ;GET ADR OF PTR TO BUFFER - MOV M,E - INX H - MOV M,D ;STORE $MEMRY AS ADR - LXI H,SECSIZ - DAD D ;GET NEW TOP - PUSH H ;SAVE FCB ADR - CALL GTFCB ;GET [HL]=ENTRY+1 - POP D - PUSH D ;SAVE FCB ADR - MOV M,D - DCX H - MOV M,E ;STORE ADR OF FCB - LXI H,FCBLEN - DAD D ;GET NEW TOP OF ALLOC - SHLD $MEMRY ;STORE AWAY -; ---------------- - POP H ;FCB ADR. - MVI M,0 ;DEFAULT TO CURRENT DISK - INX H - LXI D,FILTXT ;DEFAULT NAME INITIALLY FORT##.DAT - LDAX D - CALL CPYTXT ;MOVE "FORT" TO FCB - LDA $UN - MOV B,A ;SAVE UNIT # - SUI 10 ;CARRY SET IF NOT UNIT 10 - SBB A - ADI "1" ;"1" IF 10 ELSE "0" - MOV M,A ;STORE DIGIT 1 OF # - MOV A,B - CPI 10 ;WAS IT 10? - JC SKPSTZ ;NO, DON'T SET ZERO - XRA A -SKPSTZ: ADI "0" ;GET 2ND DIGIT - INX H - MOV M,A - MVI A," " - INX H - MOV M,A - INX H - LXI D,FILEXT-1 ;EXTENSION - CALL CPYTXT ;MOVE "DAT" TO FCB -; ---------------- - POP H ;GET PTR TO FLAG - MVI A,MD.ALC ;NOW ALLOCATED. - MOV M,A ;SET FLAG - RET - - PAGE -;------------------------------------------------------ -; -; OPEN FILE GIVEN BY LUN AND CLEAR BUFFER INDEX. -; ENTRY: [DE] = ADR OF FCB -; EXIT: [HL] = ADR OF MODE BYTE -; [A] = MODE BYTE - ALLOCATED & OPEN. -; -OPNFIL: - PUSH B ;SAVE I/O MODE - CALL GTBOFF ;GET BUFFER.OFFSET(LUN) - MOV M,D ;CLEAR BUFFER INDEX -; ---------------- - LHLD $CLSFL - LXI D,CLSALL - MOV A,H - SUB D - JNZ STRADR ;NOT US, STORE ROUTINE ADR - MOV A,L - SUB E - JZ STRCLS ;US, DON'T STORE AGAIN -STRADR: SHLD CLSADR -STRCLS: XCHG - SHLD $CLSFL ;ON EXIT, CLOSE ALL FILES - CALL CLRFCB ;ZERO FCB & RECORD NUMBER. - CALL SETBUF ;SET DMA TO FILE BUFFER. -; ---------------- - POP B ;I/O MODE - PUSH B - MOV A,C - ANI MD.OUT - JZ OPNINP ;BRIF OPEN INPUT -;------------------------------------------------------ -; -; OPEN NEW FILE FOR OUTPUT OR RANDOM. -; - PUSH D ;SAVE FCB ADR - MVI C,.DELET ;DELETE OLD FILE - CALL BDOS - POP D - PUSH D - CALL MAKEXT ;CREATE NEW FILE. - POP D ;RESTORE FCB ADR -;------------------------------------------------------ -; -; OPEN EXISTING FILE FOR INPUT OR RANDOM. -; -OPNINP: - MVI C,.OPEN ;OPEN FILE - CALL BDOS - INR A - JZ FNFERR ;BRIF FILE NOT FOUND (FATAL). - -OPNDON: - CALL GTMODE - POP B ;GET I/O MODE. - MOV A,C - ORI MD.ALC+MD.OPN - MOV M,A ;MODE ALLOCATED/OPEN + I/O - RET - -;------------------------------------------------------ -; -; MAKE NEW FILE OR EXTENT. -; -MAKEXT: - MVI C,.MAKE ;CREATE NEW FILE - CALL BDOS - INR A - JZ DSKFUL ;BRIF DISK FULL ERROR. - RET - - PAGE -;------------------------------------------------------ -; -; REWIND UNIT # -; -DSKREW: CALL GTMODE - ANI MD.OPN ;FILE OPEN? - CNZ DSKCLS ;YES, CLOSE IT -NOCLOS: XRA A ;GOOD RETURN - RET - -;------------------------------------------------------ -; -; ENDFILE UNIT # -; -DSKCLS: CALL GTMODE - ADD A ;OPEN? - JP NOCLOS ;NO, DON'T CLOSE - MVI M,MD.ALC ;FLAG CLOSED NOW - ADD A ;OUTPUT FILE? - CM FRCBUF ;YES, DUMP LAST IF NEEDED - CALL GTFCB ;GET ADDR OF FCB - CALL SETBUF ;SET DMA ADR - MVI C,.CLOSE ;CLOSE FILE - CALL BDOS - XRA A ;NEVER AN ERROR - RET - -;------------------------------------------------------ -; -; CLOSE ALL FILES. CALLED FROM EXIT -; -CLSALL: LXI D,1 -CLSAL1: LXI H,$FLFLG-1 - DAD D - MOV A,M - ADD A ;SET MINUS IF OPEN - PUSH D ;SAVE UNIT # - MOV A,E - STA $UN ;SET UP FOR OTHERS - CM DSKCLS ;CLOSE FILE IF OPEN - POP D ;GET # BACK - INX D ;BUMP IT - LDA $LUNTB ;GET MAX LUN - CMP E ;DONE ALL? - JNZ CLSAL1 ;NO, DO NEXT - RET ;RETURN - - PAGE -;------------------------------------------------------ -; -; UNFORMATTED WRITE -; -DSKUWR: - MVI C,MD.OUT+MD.BIN - CALL OPNCHK ;OPEN IF NOT OPEN - LHLD $BF ;GET BUFFER ADR - PUSH H - XCHG - LHLD $BL ;GET LENGTH OF DATA - MVI H,0 ;# OF BYTES - XCHG - DAD D ;PTR TO 1ST TO CLEAR - XRA A - DCR E -DSKWCL: - INR E ;CLEARED REST OF BUFFER? - JM DSKUW1 ;YES, DONE - MOV M,A - INX H - JMP DSKWCL ;CLEAR END OF BUFFER -DSKUW1: - POP D ;GET BUFFER ADR - MVI C,.STDMA ;SET DMA TO BUFFER - CALL BDOS - CALL WRITE ;WRITE RECORD - ORA A ;ERROR? - RZ ;NO, GOOD RETURN - STC - RET - - PAGE -;------------------------------------------------------ -; -; UNFORMATTED READ -; -DSKURD: - MVI C,MD.BIN - CALL OPNCHK ;OPEN IF NEEDED - LHLD $BF - XCHG - MVI C,.STDMA ;SET DMA TO $BF - CALL BDOS - MVI A,128 - STA $BL ;ALWAYS 1 SECTOR - CALL READ ;READ RECORD INTO $BF - ORA A ;EOF OR GOOD - RZ - CPI 2 - CMC - RET -; - PAGE -;------------------------------------------------------ -; -; FORMATTED WRITE -; -DSKFWR: - MVI C,MD.OUT - CALL OPNCHK ;OPEN FILE IF NEEDED - XRA A - STA $DSKER ;CLEAR COUNT - LDA $BL ;GET # TO WRITE - ORA A - RZ ;IGNORE NULL BUFFERS - LDA $BL - ORA A - JP DSKFW0 - CALL $ERR ;WARN USER OF.. - DB OBOVF ;OUTPUT BUFFER LIMIT EXCEEDED - MVI A,127 ;AND TRUNCATE TO 127 BYTES. -DSKFW0: - CALL RNDCHK ;IF RND MODE, SET OFFSET TO 0. - LHLD $BF ;GET BUFFER PTR -DSKFW2: - PUSH PSW ;SAVE COUNT - MOV A,M - CALL DSKOUT ;SEND OUT BYTE - INX H ;INCREMENT BUFFER PTR - POP PSW ;RETRIEVE COUNT - DCR A ;DECREMENT COUNT - JNZ DSKFW2 ;ONE MORE TIME -; -DSKWDN: MVI A,15Q - CALL DSKOUT ;PUT OUT - CALL GTMODE ;MARK MODE BYTE WITH - ORI MD.WRT ;WRITE-DATA-IN-BUFFER. - MOV M,A - LDA $DSKER ;GET $DSKEROR STATUS - ORA A ;ERROR? - RZ ;NO - STC ;YES - RET -; - PAGE -;------------------------------------------------------ -; -; FORMATTED READ -; -DSKFRD: - MVI C,0 - CALL OPNCHK ;OPEN IF NEEDED - XRA A - STA $BL ;CLEAR LENGTH OF RECORD - STA $DSKER ;CLEAR $DSKEROR - CALL RNDCHK ;IF RND MODE, SET OFFSET TO 0. -DSKFR1: - CALL DSKIN ;GET CHAR - JC DSKRDN ;JUMP IF EOF - CPI 32Q ;CP/M EOF? - JZ DSKEOF ;YES - LHLD $BL - MVI H,0 - XCHG - LHLD $BF ;BASE - DAD D ;GET WHERE TO PUT BYTE - MOV M,A ;STORE CHAR - INX D ;BUMP OFFSET - XCHG - SHLD $BL ;UPDATE OFFSET - CPI 15Q ;? - JZ DSKRDN ;YES, HAVE RECORD - MOV A,L ;GET OFFSET - CPI 128 ;BUFFER FULL? - JC DSKFR1 ;NO, GET NEXT - CALL $ERR ;WARN USER OF.. - DB IRECER ;INPUT RECORD TOO LONG. - XRA A - RET -; -DSKRDN: LDA $DSKER ;GET STATUS - ORA A - RZ ;NO ERROR - CPI 2 - CMC - RET -DSKEOF: ORA A ;SET CC'S - RET -; - PAGE -;------------------------------------------------------ -; -; RESET BUFFER OFFSET IF RANDOM READ OR WRITE -; -RNDCHK: - PUSH PSW - CALL GTMODE - ANI MD.RND - JZ RNDCHX ;DO NOTHING IF SEQUENTIAL MODE. - CALL GTBOFF ;ELSE ZERO BUFFER OFFSET SO.. - MVI M,0 ;NEXT READ/WRITE STARTS AT BEGINNING. -RNDCHX: - POP PSW - RET -;------------------------------------------------------ -; -; DISK INPUT ROUTINE -; -DSKIN: - CALL GTBOFF ;BUFFER.OFFSET(LUN) - ORA A ;BUFFER EMPTY? - CZ REDBUF ;YES, REFIL - RC ;EOF - DCR M ;DECR. # LEFT - LXI H,$FLBUF-2 - DAD D - DAD D ;GET $FLBUF PTR - CMA - ADI 129 ;128-#LEFT=OFFSET - ADD M - MOV E,A - INX H - MVI A,0 - ADC M - MOV D,A - LDAX D ;GET CHAR - ORA A - RET -;------------------------------------------------------ -; -; READ BUFFER FROM DISK -; -REDBUF: PUSH H - PUSH D - CALL SETBUF - CALL READ ;READ RECORD - STA $DSKER ;STORE STATUS - ORA A - POP D - POP H - MVI A,128 ;FULL BUFFER - MOV M,A ;STORE COUNT - RZ ;IF NO ERROR - STC - RET - -;------------------------------------------------------ -; -; DISK OUTPUT ROUTINE -; -DSKOUT: PUSH H - PUSH PSW - CALL GTBOFF ;GET BUFFER OFFSET - ORA A ;BUFFER FULL? - CM DMPBUF ;YES, DUMP - INR M - LXI H,$FLBUF-2 - DAD D - DAD D ;POINT TO ADR OF BUFFER - ADD M - MOV E,A - INX H - MVI A,0 - ADC M - MOV D,A ;POINTS TO FREE - POP PSW ;GET CHAR BACK - STAX D ;STORE CHAR - POP H - RET - -;------------------------------------------------------ -; -; FORCE FORMATTED BUFFER OUT ON CLOSE -; -FRCBUF: ADD A ;UNFORMATTED I/O? - JM FRCOUT ;YES, FORCE OUT LAST IF NEEDED - MVI A,32Q - CALL DSKOUT ;SET END OF FILE - -FRCOUT: CALL GTBOFF ;BUFFER.OFFSET(LUN) - ORA A ;EMPTY? - MVI M,0 ;CLEAR OFFSET - RZ ;YES, DO NOTHING - PUSH PSW ;SAVE OFFSET - CALL GETBUF ;GET BUFFER ADR - POP PSW - MOV L,A - MVI H,0 - DAD D ;POINT TO 1ST UNUSED -CHKFIL: ORA A ;SET MINUS IF FULL - JM DMPBF1 ;NOTHING TO FILL - MVI M,0 ;CLEAR BYTE - INX H - INR A ;BUMP OFFSET - JMP CHKFIL -;------------------------------------------------------ -; -; DUMP BUFFER TO DISK -; -DMPBF1: - DCX H ;SO THAT DRIVE # ISN'T CLEARED -DMPBUF: - PUSH H - PUSH D - CALL SETBUF - CALL WRITE ;WRITE RECORD - STA $DSKER ;STORE STATUS - CALL GTMODE - ANI NOT MD.WRT ;CLEAR WRITE-DATA BIT - MOV M,A - POP D - POP H - XRA A - MOV M,A ;CLEAR BUFFER OFFSET - RET - -;------------------------------------------------------ -; -; READ RECORD/WRITE RECORD PRIMITIVES -; -READ: CALL GTFCB ;GET ADDR OF FCB - LDA $CPMRF ;CP/M 1.X OR 2.X - MOV C,A ;RANDOM READ FUNCTION - JMP IOCALL - -WRITE: CALL GTFCB ;GET ADDR OF FCB - LDA $CPMWF ;CP/M 1.X OR 2.X - MOV C,A ;RANDOM WRITE FUNCTION - -IOCALL: CALL BDOS ;DO APPROPRIATE FUNCTION - PUSH PSW ;SAVE ERROR RESULT - CALL GTREC ;POINT TO RECORD NUMBER - INR M ;UPDATE SEQUENTIAL - JNZ POPART ; RECORD NUMBER - INX H - INR M - -POPART: POP PSW ;RESTORE ERROR - RET - - PAGE -;------------------------------------------------------ -; -; CALL OPEN(UNIT #,FILENAME,DRIVE #) -; - ENTRY OPEN - EXT $IOINIT - -OPEN: LDA $LUNTB ;GET MAX LUN - DCR A - CMP M ;OUT OF RANGE? - JC LUNOVF ;YES, LUN TOO LARGE. - - MOV A,M ;FETCH LUN - STA $UN ;SET IT UP - PUSH D ;SAVE REGISTERS - PUSH B ;SAVE FILPTR - CALL $IOINIT ;INITIALIZE IF NOT ALREADY DONE - CALL GTMODE - ORA A ;ALLOCATED? - CP ALCBUF ;NO, ALLOCATE - POP B - CALL GTFCB - XCHG - POP D ;[DE]=NAME PTR - LDAX B ;GET DRIVE # - MOV M,A ;STORE DRIVE # - MVI B,11 ;COPY FILE NAME TO FCB -FILLOP: LDAX D - ORA A ;ZERO BYTE? - JZ FILLEN ;YES, LEAVE REST AS BEFORE - INX D - INX H - MOV M,A - DCR B ;FINISHED MOVING NAME? - JNZ FILLOP ;NO, DO REST -FILLEN: LDA $UN ;GET UNIT # - ADD A ;*2 FOR TABLE INDEX - MVI D,0 - MOV E,A - LXI H,$LUNTB ;INDEX INTO LUN TABLE - DAD D - LXI B,DSKDRV ;REPLACE CURRENT LUNTB ENTRY - MOV M,B ; WITH ADDRESS OF DISK DRIVER - DCX H ; DISPATCH ADDRESS - MOV M,C - RET - - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/dtbf.mac b/software/CPM/CPM03_FORTRAN80/dtbf.mac deleted file mode 100644 index d78a6ba..0000000 --- a/software/CPM/CPM03_FORTRAN80/dtbf.mac +++ /dev/null @@ -1,56 +0,0 @@ -TITLE DTBF Runtime data buffer -; -TRSDOS EQU 0 -OASIS EQU 0 -; -IF2 -IFT TRSDOS -.PRINTX/TRSDOS VERSION/ -ENDIF -IFT OASIS -.PRINTX/OASIS VERSION/ -ENDIF -ENDIF -; -ENTRY $DTBF,$DTBF1,$DTBF3,$DTBF5,$DTBF7,$DTBF8,$DTBFA -; -DSEG -; -$DTBF: DS 1 ;DATA BUFFER -$DTBF1: DS 2 -$DTBF3: DS 2 -$DTBF5: DS 2 -$DTBF7: DS 1 -$DTBF8: DS 8 -$DTBFA: DS 145-16 -IFT TRSDOS - DS 115 ;TRSDOS USES UP TO 256 BYTE BUFFERS -ENDIF -IFT OASIS - DS 375 ;OASIS USES UP TO 512 BYTE BUFFERS -ENDIF -; -CSEG -ENTRY $FORLN,$UFMLN -; -$FORLN: -IFT TRSDOS - DW 256 -ENDIF -IFT OASIS - DW 512 -ENDIF -IFF TRSDOS OR OASIS - DW 132 -ENDIF -; -$UFMLN: -IFT TRSDOS - DW 256 -ENDIF -IFF TRSDOS - DW 128 -ENDIF -; - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/f80.com b/software/CPM/CPM03_FORTRAN80/f80.com deleted file mode 100644 index bd533f2198e8dbf4daa5e0b5b49b67b290e6c882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27264 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

  • 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 diff --git a/software/CPM/CPM03_FORTRAN80/fchain.mac b/software/CPM/CPM03_FORTRAN80/fchain.mac deleted file mode 100644 index 42fdc74..0000000 --- a/software/CPM/CPM03_FORTRAN80/fchain.mac +++ /dev/null @@ -1,460 +0,0 @@ - SUBTTL Global Equates,Temps,Defs - TITLE FCHAIN - Fortran CALL FCHAIN Statement - - ENTRY FCHAIN - EXTRN $CLSFL,$INIT,$IOERR - -CPM SET 0 ; True for CP/M -CPM42 SET 1 ; True for CP/M's at X'4200' -ISIS SET 0 ; True for ISIS-II -MOD1 SET 0 ; True for TRS-80 Mod-1 -MOD2 SET 0 ; True for TRS-80 Mod-2 -TEK SET 0 ; True for Tektronics - -CR SET 13 -LF SET 10 - -NAMLEN SET 11 ; Default Filename Length **3.36 - -IF MOD1 -NAMLEN SET 23 - ENDIF -IF MOD2 -NAMLEN SET 30 - ENDIF - - -IF CPM42 -CPM SET 1 - ENDIF -IF CPM -CPMWRM SET 0 ; CP/M Base ( & Warm Boot Addr) - ENDIF -IF CPM42 -CPMWRM SET 4200H - ENDIF -; ---- -IF CPM -C.EMSG SET 9 -C.OPEN SET 15 -C.READ SET 20 -C.BUFF SET 26 -CPMENT SET CPMWRM+5 ; CP/M Entry (BDOS Funct call addr) -TFCB SET CPMWRM+5CH -TBUFF SET CPMWRM+80H -TPA SET CPMWRM+100H - -;**3.36 DFTEXT: DB 'COM' - - ENDIF -; ================ -IF ISIS -CISIS SET 40H ;ISIS Entry Point -I.LOAD SET 6 ;Load Pgrm Function - ENDIF -; ================ -IF MOD1 -M.ABRT SET 4430H ;Error return to system -M.GET SET 13H ;Input a byte from an I/O device -M.OPEN SET 4424H ;Open an existing file -M.EXIT SET 402DH ;Normal return to system - ENDIF -; ================ -IF TEK -SRB SET 3 -T.CHAN SET SRB+1 ; Channel No. -T.LEN SET SRB+5 ; Filename Len -T.BPTR SET SRB+6 ; Address of Buffer -T.FNAM SET SRB+8 ; Filename Buffer - ENDIF -; ================ -IF2 - .PRINTX/Fortran CHAIN/ - IF CPM - .PRINTX/ For CPM/ - ENDIF - IF CPM42 - .PRINTX/ ..at 4200H/ - ENDIF - IF ISIS - .PRINTX/ For ISIS-II/ - ENDIF - IF MOD1 - .PRINTX/ For TRS80 Mod-1/ - ENDIF - IF MOD2 - .PRINTX/ For TRS80 Mod-2/ - ENDIF - IF TEK - .PRINTX/ For Tektronics/ - ENDIF -ENDIF - - PAGE - SUBTTL FCHAIN - Process a CALL FCHAIN statement - -; FCHAIN processes a CALL FCHAIN statement by the following steps: -; -; 1. Parse filename to see if valid -; -; 2. Open file in default OS File Control Block -; -; 3. Move a short program loader to top of memory -; and load new program -; -; SYNTAX: CALL FCHAIN (' ') - -; ENTRY [HL] = FWA SDESC for Filename -; EXIT Start executing new program -; USES ALL - -FCHAIN: -IF CPM - LDAX D ;Get Drive no. - STA TFCB ;Put in TFCB - ENDIF - SHLD .NFWA ; Save FWA of Name - LXI H,CHN01 - PUSH H - LHLD $CLSFL - PCHL ; Close all Files -CHN01: - LXI B,CHN02 ; Addr to RET to.. - JMP $INIT ; Reset SP to top of ram -CHN02: -IF CPM - CALL .SNAM ; Go scan filename - LXI D,TBUFF ;Set DMA buffer - MVI C,C.BUFF - CALL CPMENT - LXI D,TFCB ;Open file - MVI C,C.OPEN - CALL CPMENT - INR A - JZ $IOERR ; **IO** Error - File not found - LXI H,0 - DAD SP - DCR H - MVI L,0 ;Get 1 page below user stack - LXI D,LOADER ;Move program loader to high memory - MVI B,ENDIPL-IPL - CALL $$MOV - MOV L,B ;[HL] = addr of loader - PUSH H ;For 'RET' to loader - LXI D,LOCTAB ;[DE] = addr of ADDRESS MODIFY TABLE -CHN03: LDAX D ;Get low byte address - ORA A ;Are we done? - JZ CHN04 ; Yes - MOV L,A ;[HL] = address to modify - MOV M,H ;Modify it with [H] - INX D - JMP CHN03 ;Keep looping -CHN04: LXI H,TPA ;[HL] = TPA address - RET ;'RET' to loader -ENDIF -; ================ -IF ISIS - LHLD .NFWA - XCHG ;[DE] = Strt of Name - LXI H,I.FNAM - MVI B,15 - CALL $$MOV ;Move Filename to FCB - MVI C,I.LOAD ;Load Function - LXI D,I.FCB - CALL CISIS ;Load next Pgm & Go - JMP $IOERR ; (Just in case) - ENDIF -; ================ -IF MOD1 - LXI H,0 ;Get stack address - DAD SP - MVI L,0 ;Get below user stack - DCR H - DCR H ;Blocking buffer address - DCR H ;Loader start address - PUSH H ;Save loader start address - MVI B,32 ;Blank fill 32 byte DCB -SPLOOP: DCX H - MVI M,' ' - DCR B - JNZ SPLOOP - POP B ;Loader start address - PUSH H ;Save DCB addr - LHLD .NFWA - XCHG ;[DE] = Strt of Filename - POP H - PUSH H ;[HL] = DCB addr - PUSH B ;Save loader start address - CALL .SNAM ;Scan Filename into DCB - MVI B,0 ;LRL = 256 - POP H ;Loader start address - POP D ;DCB (Filespec) address - PUSH D ;Save DCB address - PUSH H ;Save loader start address - INR H ;Blocking buffer address - CALL M.OPEN ;Open an existing file - JNZ $IOERR ;**IO** Err - Fnf. - - DCR H ;Top loader start address - LXI D,LOADER ;Loader start address - MVI B,ENDIPL-IPL ;Size of loader program - CALL $$MOV ;Move to top of memory - - POP H ;Loader start address - POP D ;DCB address - PCHL ;Run loader -ENDIF -; ================ -IF MOD2 - LHLD .NFWA ;[HL] points to name - PUSH H ;Save SOS - LXI B,NAMLEN ;[B]=0, [C]=Max Name Len -CHN03: - MOV A,M - CPI ' '+1 - JC CHN04 ;Brif EOS - INX H - INR B ;String Len+1 - DCR C ;Max len-1 - JNZ CHN03 - JMP $IOERR ;**IO** Error, Name too long -CHN04: - MVI M,CR ;Proper TRSDOS Terminator - POP H ;Get SOS - MVI A,37 ;Exeq TRSDOS cmnd, no ret - RST 1 ;Do it, [HL]=string, [B]=string len - JMP $IOERR ; (Who trusts Trash-DOS) -ENDIF -; ================ -IF TEK - LHLD .NFWA - XCHG ; [DE]=Filename STR - LXI H,T.FNAM ; [HL]=Filename Buffer - LXI B,NAMLEN ; [B]=0, [C]=Max Name Len -CHN03: - LDAX D - CPI ' '+1 - JC CHN04 ; Brif End-of-Name - MOV M,A - INX D - INX H - INR B ; Len+1 - DCR C ; Max-1 - JZ $IOERR ; **IO** Error if name too long.. - JMP CHN03 -CHN04: - MVI M,CR ; Store Terminator - MOV A,B - INR A ; Include CR in Len Cnt - STA T.LEN ; Store Filename Len in SRB - MVI A,18H ; Load Overlay & Execute - STA SRB - MVI A,4 - STA T.CHAN ; Store Chan 4 (Doc is unclear) - LXI D,T.FNAM - LXI H,T.BPTR - MOV M,D - INX H ; Store Fname Pntr in SRB - MOV M,E - MVI A,0FFH - OUT 0F7H ; Load Overlay & Execute - JMP $IOERR ; Should never happen -ENDIF -; ================ - - PAGE - SUBTTL Scan for valid Filename - -.SNAM: -IF CPM - LHLD .NFWA ; FWA of Filename - XCHG ; [DE] = name FWA - LXI H,TFCB+1 ; [HL] = FILE CTRL BLOCK - MVI B,NAMLEN -.COMMENT & **3.36 -.SNAM1: - LDAX D ; GET NAME CHAR - INX D - STA .NFWA ; Set '.' if user supplied Ext. - CPI '.' - JZ .SNAM3 ; Brif saw Ext - CPI ' '+1 - JC .SNAM3 ; Brif End-of-Name - MOV M,A ; PUT IN FCB - INX H - DCR B ; UNTIL STRING EXHAUSTED - JNZ .SNAM1 -.SNAM2: - LDAX D - INX D - STA .NFWA - CPI '.' ; Looking for Ext.. - JZ .SNAM4 - CPI ' '+1 ; or end of name - JNC .SNAM2 - JMP .SNAM4 ; Go copy user or default ext -.SNAM3: - MVI M,' ' - INX H - DCR B - JNZ .SNAM3 -.SNAM4: - MVI B,3 ; Scan Extention - LDA .NFWA - CPI '.' - JZ .SNAM5 ; Brif user supplied ext - LXI D,DFTEXT ; ..Else use default -**3.36 & -.SNAM5: - LDAX D - INX D - MOV M,A - INX H - DCR B - JNZ .SNAM5 -; ---------------- - MOV M,B ; Clear File EX - MOV A,B - STA TFCB+32 ; NR = 0 - RET -ENDIF -; ================ -IF MOD1 - MVI B,NAMLEN -.SNAM0: - LDAX D - CPI ' '+1 - JC .SNAM1 ;Brif EOS - MOV M,A - INX D - INX H - DCR B - JNZ .SNAM0 - JMP $IOERR ;**IO** Error if name too long -.SNAM1: - MVI M,CR ;Terminate with CR - RET -ENDIF - - PAGE - SUBTTL Relocated loader for CP/M & MOD1 - -IF CPM -LOCTAB: - DB (X0+2) AND 0FFH - DB (X1+1) AND 0FFH - DB (X2+2) AND 0FFH - DB (X3+2) AND 0FFH - DB 0 - -; ================ -LOADER: - .PHASE 0 -IPL: LXI D,TPA ;Program start address - PUSH D ;Save as return address -IPL1: XCHG ;[DE] = Next load address - PUSH D ;Save load address - MVI C,C.BUFF ;Set DMA address - CALL CPMENT - LXI D,TFCB ;Read record - MVI C,C.READ - CALL CPMENT - POP D ;Restore base address of record - ORA A -X0: JNZ IPLDON ;EOF - LXI H,128 ;[HL] = Record size - DAD D ;[HL] = Start of next record -X1: MVI A,IPL/256 ;Get hi byte of IPL address - CMP H ;Are we there? -X2: JNZ IPL1 ;No - continue loading program -X3: LXI D,OVFMSG ;Print '* OUT OF MEMORY*' - MVI C,C.EMSG - CALL CPMENT - JMP CPMWRM ;Reset and die -IPLDON: - XRA A - STA TBUFF ; 0 = No cmnd line passed - MVI A,' ' - STA TFCB+1 ; Clear TFCB for Utilities - LXI B,CPMWRM ; Push Warm Boot addr for - PUSH B ; Utilities that just return... - JMP TPA ;CLOSE FILE AND START PROG -OVFMSG: - DB CR,LF,'* Out of Memory *',CR,LF,'$' -ENDIPL: - .DEPHASE -ENDIF -; ================ -IF MOD1 -LOADER: -IPL: CALL M.GET ;Read character - JNZ M.ABRT ;In case of error - CPI 2 ;Is it EOF ? - .Z80 - JR Z,(IPL1) ;Get start address - .8080 - CPI 1 ;Is it data ? - JNZ M.ABRT ;Not data then error - CALL M.GET ;Length + 2 - DCR A - DCR A - MOV B,A ;Length - CALL M.GET ;Load address - JNZ M.ABRT ;In case of error - MOV L,A - CALL M.GET - JNZ M.ABRT ;In case of error - MOV H,A - -IPL0: CALL M.GET ;Get data - MOV M,A ;Put data in load address - INX H ;Increment load address - DCR B ;# of bytes left to load - .Z80 - JR NZ,(IPL0) - JR Z,(IPL) - .8080 - -IPL1: CALL M.GET ;Get second 2 (EOF) - CPI 2 - JNZ M.ABRT ;In case of error - CALL M.GET ;Get start address - JNZ M.ABRT ;In case of error - MOV L,A - CALL M.GET - JNZ M.ABRT ;In case of error - MOV H,A - PCHL ;Run program -ENDIPL: - -ENDIF -; ================ -IF CPM OR ISIS OR MOD1 -$$MOV: - LDAX D - MOV M,A - INX D - INX H - DCR B - JNZ $$MOV - RET -ENDIF - - DSEG - -.NFWA: DS 2 ; Temp for FWA of Filename - -IF ISIS -I.FCB: DW I.FNAM ;Pntr to Filename - DW 0 ;Bias field - DW 1 ;RETSW, Xfer control to new pgm - DW I.NTRY ;Pntr to Entry addr store - DW I.STAT ;Status -; -- -I.FNAM: DS 15 ;Filename -I.NTRY: DS 2 ;Entry Point Address -I.STAT: DS 2 ;Ret Status - ENDIF - - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/forlib.rel b/software/CPM/CPM03_FORTRAN80/forlib.rel deleted file mode 100644 index 1c2137483fb3a925e4bb5ef6f208c15c2d9e16ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26752 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 A8~^|S diff --git a/software/CPM/CPM03_FORTRAN80/init.mac b/software/CPM/CPM03_FORTRAN80/init.mac deleted file mode 100644 index 603e9a6..0000000 --- a/software/CPM/CPM03_FORTRAN80/init.mac +++ /dev/null @@ -1,51 +0,0 @@ - TITLE INIT - FORTRAN-80 RUNTIME INITIALIZATION - - .8080 - - ENTRY $INIT,$EC,$IOFLG,$CPMVN,$CPMWF,$CPMRF - EXTRN $CLSFL - -GTVRSF EQU 12 ;GET CP/M VERSION FUNCTION -.READS EQU 20 ;READ SEQUENTIAL FUNCTION (1.X) -.WRITS EQU 21 ;WRITE SEQUENTIAL FUNCTION (1.X) -.READR EQU 33 ;READ RANDOM FUNCTION (2.X) -.WRITR EQU 34 ;WRITE RANDOM FUNCTION (2.X) - - DSEG - -$CPMVN: DS 1 ;0FFH if CP/M 1.X, 00 if 2.X -$CPMRF: DS 1 ;CP/M Read function held here -$CPMWF: DS 1 ;CP/M WRITE FUNCTION HELD HERE -$EC: DS 1 ;ERROR COUNT - MAX 20 NON-FATAL ERRS -$IOFLG: DS 1 ;FLAG WHETHER I/O INIT HAS BEEN DONE - - CSEG - -CPMENT SET 5 - -$INIT: XRA A - STA $EC ;INITIALIZE ERROR COUNT TO 0 - STA $IOFLG ;INITIALIZE I/O FLAG - LXI H,RETINS ;INITIALIZE $CLSFL TO POINT TO "RET" - SHLD $CLSFL - - LHLD CPMENT+1 ;INITIALIZE STACK TO TOP OF MEMORY-1 - DCX H - SPHL - - PUSH B ;PUT RETURN ADDRESS ON STACK - MVI C,GTVRSF - CALL CPMENT ;GET CP/M VERSION NUMBER - SUI 20H-1 ;SET $CPMVN SUCH THAT - SBB A ;2.X = 00 AND - STA $CPMVN ;1.X = 0FFH.. - - LXI H,(.WRITS SHL 8)+.READS - JNZ SETVF ;1.X USES SEQUENTIAL I/O CALLS - LXI H,(.WRITR SHL 8)+.READR -SETVF: SHLD $CPMRF ;2.X USES RANDOM I/O CALLS - -RETINS: RET - - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/ioinit.mac b/software/CPM/CPM03_FORTRAN80/ioinit.mac deleted file mode 100644 index 1be96ff..0000000 --- a/software/CPM/CPM03_FORTRAN80/ioinit.mac +++ /dev/null @@ -1,41 +0,0 @@ - TITLE IOINIT - FORTRAN-80 I/O FLAG & VARIABLE INIT - - .8080 - - ENTRY $IOINI - EXT $IOFLG,$LNPTR,$CPMBF,$LUNTB - EXT $FLFLG,$DSKER,$OPNFL - -$IOINI: LDA $IOFLG ;SEE IF WE'VE ALREADY BEEN CALLED - ORA A - RNZ - INR A ;SET NON-ZERO - STA $IOFLG - - LXI H,$CPMBF - MVI M,132+1 ;MAX CHRS TO READ FOR BDOS CALL - INX H - MVI M,0 ;ZERO NO. OF CHARS READ - INX H - SHLD $LNPTR ;PTR TO BEGINNING OF LINE - - MVI M,10 ;STORE LINE FEED AT BEG. OF LINE - - LDA $LUNTB ;GET NO. OF LUN'S - DCR A - MOV B,A ;SAVE LOOP COUNT - LXI H,$FLFLG ;INITIALIZE FLAGS FOR DSKDRV - XRA A - -FLGLOP: MOV M,A ;ZERO $FLFLG BYTE - INX H ;INCREMENT PTR - DCR B ;DECREMENT COUNT - JNZ FLGLOP ;NEXT - STA $DSKER - - XRA A - STA $OPNFL ;CLEAR $OPNFL FOR LPTDRV - RET - - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/l80.com b/software/CPM/CPM03_FORTRAN80/l80.com deleted file mode 100644 index 264e3b54d7cc172d1deac73f6cf3854e91ac5373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 X$6@~$`6Js1`A_ diff --git a/software/CPM/CPM03_FORTRAN80/lib.com b/software/CPM/CPM03_FORTRAN80/lib.com deleted file mode 100644 index 81b1d224ec0f07c16a37dfcb697df852e3a559aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4736 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 diff --git a/software/CPM/CPM03_FORTRAN80/lptdrv.mac b/software/CPM/CPM03_FORTRAN80/lptdrv.mac deleted file mode 100644 index fc91bba..0000000 --- a/software/CPM/CPM03_FORTRAN80/lptdrv.mac +++ /dev/null @@ -1,112 +0,0 @@ - TITLE LPTDRV - FORTRAN LINE PRINTER DRIVER - - .8080 - - ENTRY LPTDRV,$OPNFL - EXTRN $IOERR,$BF,$BL,$CLSFL - - DSEG - -$OPNFL: DB 0 -CLSADR: DS 2 - - CSEG - -LPTDRV: DW $IOERR - DW LPTFWR - DW $IOERR - DW LPTBWR - DW $IOERR - DW $IOERR - DW LPTCLS - -LPTCLS: LDA $OPNFL ;MAKE SURE ALREADY 'OPEN' - ORA A - JZ $IOERR - XRA A ;'CLOSE' BY SENDING - STA $OPNFL ; FORM FEED -OUTFF: MVI A,12 - JMP LPTOUT - -CLSLPT: LDA $OPNFL - ORA A - LHLD CLSADR - PUSH H - RZ - CALL OUTCR ;CR -OUTLF: MVI A,10 ;LF - JMP LPTOUT - -MAKOPN: LXI H,$OPNFL - MOV A,M - ORA A - RZ - INR M -SETCLS: LHLD $CLSFL - LXI D,CLSLPT - MOV A,L - SUB E - MOV A,H - SBB D - RZ -STORAD: SHLD CLSADR - XCHG - SHLD $CLSFL - RET - -LPTFWR: CALL MAKOPN - LDA $BL - ORA A - RZ ;NUTHIN HERE - - LHLD $BF - DCR A - MOV E,A ;INTO [E] FOR LPTLOP - MOV A,M - CPI '*' ;DO NOTHING? - JZ LPTNLF - CALL OUTCR ;OUTPUT CR - MOV A,M - CPI "+" - JZ LPTNLF - CPI "1" - JNZ LPTLF - CALL OUTFF ;FORM FEED - JMP LPTNLF - -LPTLF: CALL OUTLF - MOV A,M - CPI "0" - CZ OUTLF - -LPTNLF: INX H - MVI D,0 - -LPTLOP: MOV A,E - ORA D - RZ - MOV A,M - CALL LPTOUT - INX H - DCX D - JMP LPTLOP - -LPTBWR: CALL MAKOPN - LHLD $BL - XCHG - LHLD $BF - JMP LPTLOP - -OUTCR: MVI A,13 - -LPTOUT: PUSH H - PUSH D - MVI C,5 ;CP/M LPT OUT FUNCTION - MOV E,A - CALL 0005 - POP D - POP H - RET - - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/luntb.mac b/software/CPM/CPM03_FORTRAN80/luntb.mac deleted file mode 100644 index d093e21..0000000 --- a/software/CPM/CPM03_FORTRAN80/luntb.mac +++ /dev/null @@ -1,23 +0,0 @@ - TITLE LUNTB - APPLE CPM LUN TABLE - -; TTY I/O DRIVER - .8080 - - EXTRN TTYDRV,PUNRDR,LPTDRV,DSKDRV - - ENTRY $LUNTB - -$LUNTB: DB 11 ;TEN LUN'S - - DW TTYDRV ;1= TTY - DW LPTDRV ;2= PRINTER - DW TTYDRV ;3= TTY - DW PUNRDR ;4= PUNCH,READER - DW TTYDRV ;5= TTY - DW DSKDRV ;6= FORT06.DAT - DW DSKDRV ;7= FORT07.DAT - DW DSKDRV ;AND SO ON. - DW DSKDRV - DW DSKDRV - END - \ No newline at end of file diff --git a/software/CPM/CPM03_FORTRAN80/m80.com b/software/CPM/CPM03_FORTRAN80/m80.com deleted file mode 100644 index d54606572457565559674a8d67d7ded4b80f78ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20096 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 Bpq2mt diff --git a/software/CPM/CPM04_MBASIC/bascom.hlp b/software/CPM/CPM04_MBASIC/bascom.hlp deleted file mode 100644 index 4b17455..0000000 --- a/software/CPM/CPM04_MBASIC/bascom.hlp +++ /dev/null @@ -1,379 +0,0 @@ -Introduction -Format notation -A sample session -Writing a Basic program to be compiled -Compiler-interpreter differences -New programming features -Second menu: Compiling, linking & loading, errors -:INTRODUCTION - -The Microsoft BASIC Compiler is a highly efficient programming tool that -converts BASIC programs from BASIC source code into machine code. This -provides much faster BASIC program execution than has previously been -possible. It can make programs run an average of 3 to 10 times faster than -programs run under BASIC-80. Compiled programs can be up to 30 times -faster than interpreted programs if maximum use of integer variables is -made. -:FORMAT NOTATION - -Wherever the format for a statement or command is given throughout this -HELP file, the following rules apply: - - 1. Items in capital letters must be input as shown. - - 2. Items in lower case letters enclosed in angle brackets ( < > ) - are to be supplied by the user. - - 3. Items in sqare brackets ( [ ] ) are optional. - - 4. All punctuation except angle brackets and square brackets - (i.e., commas, parentheses, semicolons, hyphens, and equal - signs) must be included where shown. - - 5. Items followed by an ellipsis ( ... ) may be repeated any - number of times (up to the length of the line). - - 6. Items separated by a vertical bar ( \ ) are mutually exclusive; - choose one. -:SAMPLE SESSION - -The following instructions will take you step by step through the compila- -tion process, from typing in the program to running the compiled version of -it. - -STEP 1: PRELIMINARIES - -Load BASIC-80 (NOT included in the BASCOM package) from disk. The program -will sign on and the letters - -ok - -will appear on the screen. Now enter: - - AUTO 100, 100 - -This command instructs BASIC-80 to automatically generate line numbers, -beginning with line 100 and incrementing by 100 each time you press ENTER. - -STEP 2: ENTER THE PROGRAM - -You are now ready to begin typing in your BASIC program. Anything that you -know runs in BASIC-80 will do. Alternatively, just read in a BASIC-80 -program you already use. - -STEP 3: SAVE THE PROGRAM - -In order for the compiler to process it, you must save your source program -in ASCII format. To do so, enter: - - SAVE "MYPROG",A - -There is now a BASIC program called MYPROG.BAS on your diskette that is -ready to be compiled. (A program that is not yet compiled is called the -source file.) - -Return to CP/M by typing SYSTEM. - -STEP 4: CHECK FOR ERRORS - -At this point, it is a good idea to check the program for syntax errors. -Removing syntax errors now will reduce the possibility of having to recom- -pile later. To do this, enter: - - BASCOM =MYPROG - -This command loads the BASIC Compiler and compiles the source file without -producing an object or listing file. If you have made any syntax errors, a -two-letter code will appear on the screen. If this happens, return to STEP -1, use the BASIC-80 interpreter again, and correct the errors. - -If no errors were encountered, you are ready to continue. - -STEP 5: COMPILE SOURCE FILE - -These commands instruct the BASIC Compiler to compile MYPROG.BAS, to put -the object in a file named MYPROG.REL, and to put the listing in a file -named MYPROG.LST. (.REL and .LST are default extensions supplied by the -BASIC Compiler.) - -There are now a relocatable object file called MYPROG.REL and a listing -file called MYPROG.LST on the disk. The object file contains the machine- -readable code generated by the compiler. The listing file contains the -BASIC program statements along with the machine language generated by each -statement. - -STEP 6: LOAD AND EXECUTE THE PROGRAM - -The LINK-80 linking loader is used to produce an executable program. To use -it, enter: - - L80 MYPROG,MYPROG/N/E - -This command runs LINK-80, which in turn loads the object file MYPROG.REL -into the correct memory locations, then writes it to disk as a .COM file. -During this process (which can take some time), runtime routines are drawn -from the BASLIB.REL runtime library. - -The compiled program which you stored on your own diskette can be run at -any time, all by itself, without using any part of the BASIC Compiler. It -works just like a standard CP/M command file. To execute, just enter: - - MYPROG - -The program should then work just as it did in the interpreter .. only much -faster. -:WRITING A BASIC PROGRAM TO BE COMPILED - -BASIC programs which are to be compiled are, for most part, written in just -the same way you have always written them to run with the interpreter. -However, there are some differences between the statements and commands -implemented in BASIC-80 and those implemented in the BASIC Compiler that -must be taken into consideration. - -The Compiler interacts with the console only to read compiler commands. -These specify what files are to be compiled. There is no "direct mode", as -with the MBASIC interpreter. Commands that are usually issued in the direct -mode with MBASIC are not implemented on the compiler. The following state- -ments and commands are not implemented and will generate an error message. - - AUTO CLEAR* CLOAD CSAVE CONT - DELETE EDIT LIST LLIST RENUM - SAVE LOAD MERGE NEW COMMON* - SYSTEM -* -(Note: Newer releases of the compiler which include the BRUN runtime module -do support CHAINing with COMMON and CLEAR with certain restrictions.) - -:FEATURES USED DIFFERENTLY BY THE BASIC COMPILER - -DEFINT/SNG/DBL/STR -The compiler does not "execute" DEFxxx statements; it reacts to the static -occurrence of these statements, regardless of the order in which program -lines are executed. A DEFxxx statement takes effect as soon as its line is -encountered. Once the type has been defined for a given letter, it remains -in effect until the end of the program or until a different DEfxxx state -ment with that letter takes effect. - -USRn Functions -USRn functions are significantly different from the interpreter versions. -The argument to the USRn function is ignored and an integer result is -returned in the HL registers. It is recommended that USRn functions be -replaced by the CALL statement. (See New BASIC Programming Features for -definition of CALL.) - -DIM and ERASE -The DIM statement is similar to the DEFxxx statement in that it is scanned -rather than executed. That is, DIM takes effect when its line is encoun- -tered. If the default dimension (10) has already been established for an -array variable and that variable is later encountered in a DIM statement, a -DD (redimensioned array) error results. There is no ERASE statement in the -compiler, so arrays cannot be erased and redimensioned. An ERASE statement -will produce a fatal error. - -Also note that the values of the subscripts in a DIM statement must be -integer constants; they may not be variables, arithmetic expressions, of -floating point values. For example, - - DIM A1(I) - DIM A1(3+4) - -are both illegal statements. - -END -During execution of a compiled program, an END statement closes files and -returns control to the operating system. The compiler assumes an END at the -end of the program, so it is not necessary to insert an END statement in -order to get proper program termination. - -FOR/NEXT -All FOR/NEXT loops must be statically nested with only 1 NEXT statement for -each FOR statement. - -ON ERROR GOTO/RESUME -If a program contains ON ERROR GOTO and RESUME statements, -the /E compilation switch must be used. If the RESUME NEXT, RESUME, or -RESUME 0 form is used, the /X switch must also be included. - -REM -REM statements or remarks starting with a single quotation mark do not make -up time or space during execution, and so may be used as freely as desired. - -STOP -The STOP statement is identical to the END statement. Open files are closed -and control returns to the operating system. - -TRON/TROFF -In order to use TRON/TROFF, the /D compilation switch must be used. Other- -wise, TRON and TROFF are ignored and a warning message is generated. -:NEW BASIC PROGRAMMING FEATURES - -The BASIC Compiler also adds new features that will add power and -efficiency to your programming. Keep in mind when utilizing these new -features that while they will compile with no problems, you cannot run a -program using these features with your interpreter, since BASIC-80 -doesn't recognize them. - -CALL Statement -The CALL Statement allows you to call and transfer flow to an assembly -language or FORTRAN subroutine. - -The format of the CALL Statement is: - - CALL [()] - -where and are supplied by you. - - is the name of the subroutine you wish to call. This name -must be 1 to 6 characters long and must be recognized by LINK-80 as a -global symbol. ( must be the name of the subroutine in a -FORTRAN SUBROUTINE statement or a PUBLIC symbol in an assembly language -routine.) - - is optional and contains the arguments that are passed to -the assembly language or FORTRAN subroutine. - -Example: 120 CALL MYROUT (I,J,K) - -CHAIN (or RUN) -The CHAIN and RUN statements both perform the same function: they allow you -to load a file from diskette into memory and run it. CHAIN (or RUN) closes -all open files and deletes the current contents of memory before loading -the designated program. The format of the CHAIN (or RUN) statement is as -follows: - - CHAIN - OR - RUN - -where is the name used when the file was saved. (With CP/M the -default extension .BAS is supplied.) - -WHILE...WEND -The WHILE...WEND statement is a conditional statement that executes a -series of statements in a loop as long as a given condition is true. - -The format of WHILE...WEND is: - - WHILE - - - - - - - - - - WEND - -where and are supplied by you. - -As long as is true (i.e., not zero), loop statements are -executed until the WEND statement is encountered. BASIC then returns to the -WHILE statement and checks "expression". If it is still true, the process -is repeated. If it is not true, execution resumes with the statement -following the WEND statement. - -WHILE/WEND loops may be nested to any level, as long as they are statically -nested. Each WEND will match the most recent WHILE. An unmatched WHILE -statement causes a "WHILE without WEND" error, and an unmatched WEND state- -ment causes a "WEND without WHILE" error. - -Example: - 090 'BUBBLE SORT ARRAY A$ - 100 FLIPS=1 'FORCE ONE PASS THRU LOOP - 110 WHILE FLIPS - 115 FLIPS=0 - 120 FOR I=1 TO J=1 - 130 IF A$(I)>A$(I+1) THEN - SWAP A$(I),A$(I+1):FLIPS=1 - 140 NEXT I - 150 WEND - -Double Precision Transendental Functions -SIN, COS, TAN, SQR, LOG, and EXP now return double precision results if -given double precision arguments. Exponentiation with double precision -operands will return double precision results. - -Long Variable Names -Variable names may be up to 40 characters long with all 40 characters -significant. Letters, numbers, and the decimal characters are allowed in -variable names, but the name must begin with a letter. Variable names may -also include all BASIC-80 commands, statements, function names, and -operator names. - -Expression Evaluation in the BASIC Compiler -During program compilation, when the BASIC Compiler evaluates expressions, -the operands of each operator are converted to the same type, that of the -most precise operand. For example, - - QR=J%+A!+Q - -causes J% to be converted to single precision and added to A!. This result -is coverted to single precision and added to Q. - -The Compiler is more limited than the interpreter in handling numeric -overflow. For example, when run on the interpreter the following program - - I%=20000 - J%=20000 - K%=-30000 - M%=I%+J%-K% - -yields 10000 for M%. That is, it adds I% to J% and, because the number is -too large, it converts the result into a floating point number. K% is then -converted to floating point nd subtracted. The result of 10000 is found, -and is converted back to integer and saved as M%. - -The Compiler, however, must make type conversion decisions during compila- -tion. It cannot defer until the actual values are known. Thus, the compiler -would generate code to perform the entire operation in integer mode. If the -/D switch were set, the error would be detected. otherwise, an incorrect -answer would be produced. - -In order to produce optimum efficiency in the compiled program, the -compiler may perform any number of valid algebraic transformations before -generating the code. For axample, the program - - I%=20000 - J%=-18000 - K%=20000 - M%=I%+J%+K% - -could produce an incorrect result when run. If the compiler actually per- -forms the arithmetic in the order shown, no overflow occurs. However, if -the compiler performs I%+K% first and then adds J%, an overflow will occur. - -The Compiler follows the rules of operator precedence and parenthetic -modification of such precedence, but no other guarantee of evaluation order -can be made. - -Using Integer Variables To Optimize Speed -In order to produce the fastest and most compact object code possible, make -use of integer variables. For example, this program - - FOR I=1 TO 10 - A(I)=0 - NEXT I - -can execute approximately 30 times faster by simply substituting "I%" for -"I". It is especially advantageous to use integer variables to compute -array subscripts. The generated code is significantly faster and more -compact. - -Maximum Line Length -The Compiler cannot accept a physical line that is more than 253 characters -in length. A logical statement, however, may contain as many physical lines -as desired. Use line feed to start a new physical line within a logical -statement. -::BASCOM2.HQP - - - - - - - - - - - - a random file. -51 Internal error - An internal malfunc \ No newline at end of file diff --git a/software/CPM/CPM04_MBASIC/bascom2.hlp b/software/CPM/CPM04_MBASIC/bascom2.hlp deleted file mode 100644 index eeeceb3..0000000 --- a/software/CPM/CPM04_MBASIC/bascom2.hlp +++ /dev/null @@ -1,691 +0,0 @@ -Compiling a program -Compilation switches -Compile-time error messages -The LINK-80 linking loader -LINK-80 error messages -Storing your program on disk -Running your compiled program -Runtime error messages -Using M80 -:COMPILING A PROGRAM - -Is your BASIC program now saved in ASCII format on your diskette? (To save -your program in ASCII format when using the interpreter, add an "A" switch -to the "SAVE" command, as shown in SAMPLE SESSION, Step 3: - - SAVE "[.]",A - -Return to CP/M command level and enter: - - BASCOM - -BASIC will return the prompt: "*", informing you that the BASIC -Compiler is loaded and ready to accept a command. - -Now enter the command of the form: - - objfile,lstfile=source file - -where objfile is the relocatable object file, lstfile is the listing file, -and source file is the BASIC source program file. - -A command to BASIC conveys the name of the source file to be compiled, and -the names of the file(s) to be created. With CP/M filenames are up to eight -characters long with a three-character extension. The default filename -extensions supplied to CP/M are: - - REL Relocatable object file - LST Listing file - BAS BASIC source file - MAC MACRO-80 source file - FOR FORTRAN-80 source file - COB COBOL-80 source file - COM Executable command file - -If you have a multi-drive system, you can tell the compiler where to obtain -or put the files you are working with by adding a drive number to each -filename. For example: - - A:MYPROG.REL=B:TEST - -finds the program TEST.BAS on the diskette that is in drive B, compiles it, -and puts the object in MYPROG.REL (on the diskette that is in drive A). - -If a drive is NOT specified, the object and listing files are placed on the -diskette that is in the default drive. - -Either the object file or the listing file or both may be omitted. An -object file is created only if the lstfile field is filled. Therefore, if -you wish to omit either, simply leave its filename out of the command. - -Examples: - -TESTOBJ=TEST.BAS Compile the program TEST.BAS - and put object in TESTOBJ.REL - without producing listing file. -TEST,TEST=TEST Compile TEST.BAS, put object in - TEST.REL and listing in - TEST.LST. -,=TEST.BAS Compile TEST.BAS but produce no - object or listing file. Useful - for checking for errors. -RABBIT=TEST Compile the program TEST.BAS - and put object in RABBIT.REL - without producing listing file. -:BASIC COMPILATION SWITCHES - -You can specify special parameters to be used during compilation by adding -a switch to the end of the command string. Switches are always preceded by -a slash, and more than one switch may be used in the same command. An -example of the format would be: - - TEST,TEST=TEST/D/X - -The default switch settings used if you don't specify any switches are: - - /Z/4/T - -The available switches and their actions are as follows: - -SWITCH ACTION - -/E The /E switch tells the compiler that the program contains the ON - ERROR GOTO statement. If a RESUME statement other than RESUME - is used with the ON ERROR GOTO statement, use /X - instead (see below). To handle ON ERROR GOTO properly, in a - compiled environment, BASIC must generate some extra code for the - GOSUB and RETURN statements. Therefore, do not use this switch - unless your program contains the ON ERROR GOTO statement. The /E - switch also causes line numbers to be included in the binary - file, so runtime error messages will include the number of the - line in error. - -SWITCH ACTION -/X The /X switch tells the BASIC Compiler that the program contains - one or more RESUME, RESUME NEXT, or RESUME 0 statements. The /E - switch is assumed when the /X switch is specified. To handle - RESUME statements properly in a compiled environment, the - compiler must relinquish certain optimizations. Therefore, do not - use this switch unless your program contains RESUME statements - other than RESUME . The /X switch also causes line - numbers to be included in the binary file, so runtime error - messages will include the number of the line in error. - -/N The /N switch prevents listing of the generated code in symbolic - notation. If this switch is not set, the source listing produced - by the compiler will contain the object code generated by each - statement. - -SWITCH ACTION - -/D The /D switch causes debug/checking code to be generated at - runtime. This switch must be set if you want to use TRON/TROFF. - The BASIC Compiler generates somewhat larger and slower code in - order to perform the following checks: - 1. Arithmetic overflow. All arithmetic operations, integer and - floating point, are checked for overflow and underflow. - 2. Array bounds. All array references are checked to see if the - subscripts are within the bounds specified in the DIM state- - ment. - 3. Line numbers are included in the generated binary so that - runtime errors can indicate the statement which contains the - error. - 4. RETURN is checked for a prior GOSUB. - -/Z The /Z switch tells the compiler to use Z80 opcodes. - -SWITCH ACTION - -/S The /S switch forces the compiler to write long quoted strings - (i.e. more than 4 characters) to the binary file as they are - encountered. This allows large programs with many quoted strings - to compile in less memory. However, there are two disadvantages: - 1. Memory space is wasted if identical, long quoted strings - appear in the program. - 2. Code generated while the -S switch is set cannot be placed - in ROM. - -SWITCH ACTION - -/4 The /4 switch allows the compiler to use the lexical conventions - of Microsoft 4.51 Disk BASIC interpreter. That is, spaces are - insignificant, variables with imbedded reserved words are - illegal, variable names are restricted to two significant - characters, etc. this feature is useful if you wish to compile a - source program that was coded without spaces, and contains lines - such as - - FORI=ATOBSTEPC - - Without the /4 switch, the compiler would assign the variable - "ATOBSTEPC" to the variable FORI. With the /4 switch, it would - recognize it as a FOR statement. - -SWITCH ACTION -/C The /C switch tells the compiler to relax line numbering con- - straints. Whene /C is specified, line numbers may be in any - order, or they may be eliminated entirely. Lines are compiled - normally, but of course cannot be targets for GOTO's, GOSUB's, - etc. While /C is set, the underline character causes the - remainder of the physical line to be ignored, and the next - physical line is considered to be a continuation of the current - logical line. NOTE: /C and /4 may not be used together. - -/T Use 4.51 execution conventions - -/O (Newer versions only). Tells the compiler to construct a stand- - alone program instead of one requiring presence of the BRUN.COM - runtime module. This generates much bigger programs because all - of the runtime routines must be included. -:BASIC COMPILER ERROR MESSAGES - -The following errors may occur while a program is compiling. The BASIC -Compiler outputs the two-character code for the err, along with an arrow. -The arrow indicates where in the line the error occurred. In those cases -where the compiler has read ahead before it discovered an error, the arrow -points a few characters beyond the error, or at the end of the line. The -error codes are as follows: - -FATAL ERRORS - -CODE ERROR -SN Syntax Error. Caused by one of the following: - Illegal argument name - Illegal assignment target - Illegal constant format - Illegal debug request - Illegal DEFxxx character specification - Illegal expression syntax - Illegal function argument list - Illegal function name - -CODE ERROR -SN Syntax Error. Caused by one of the following: - Illegal function formal parameter - Illegal separator - Illegal format for statement number - Illegal subroutine syntax - Invalid character - Missing AS - Missing equal sign - Missing GOTO or GOSUB - Missing comma - Missing INPUT - Missing line number - Missing left parenthesis - Missing minus sign - Missing operand in expression - Missing right parenthesis - Missing semicolon - Name too long - Expected GOTO or GOSUB - -CODE ERROR -SN Syntax Error. Caused by one of the following: - String assignment required - String expression required - String variable required here - Illegal syntax - Variable required here - Wrong number of arguments - Formal parameters must be unique - Single variable only allowed - Missing TO - Illegal FOR loop index variable - Missin THEN - Missing BASE - Illegal subroutine name -OM Out of memory - Array too big - Data memory overflow - Too many statement numbers - Program memory overflow - -CODE ERROR -SQ Sequence Error - Duplicate statement number - Statement out of sequence -TM Type Mismatch - Data type conflict - Variables must be of same type -BS Bad Subscript - Illegal dimension value - Wrong number of subscripts -LL Line Too Long -UC Unrecognizable Command - Statement unrecognizable - Command not implemented -OV Math Overflow -/0 Division by Zero -DD Array Already Dimensioned -FN FOR/NEXT Error - FOR loop index variable already in use - FOR without NEXT - NEXT without FOR - -CODE ERROR -FD Function Already Defined -UF Function Not Defined -WE WHILE/WEND Error - WHILE without WEND - WEND without WHILE -/E Missing "/E" Switch -/X Missing "/X" Switch - -WARNING ERRORS -ND Array Not Dimensioned -SI Statement Ignored - Statement ignored - Unimplemented command - -If the BASIC Compiler informs you of any of these errors, return to the -source program for debugging and try again. - -If no errors were encountered during compilation, and if you so chose, you -now have an object file containing machine readable code on your diskette. -Also on your diskette is a listing file which contains the BASIC program -statements along with the machine language generated by each statement. - -The next step in the process is loading and executing the program with -LINK-80. - -:LINK-80 LINKING LOADER - -As demonstrated in SAMPLE SESSION, compiled BASIC object files are loaded -into memory and executed using the LINK-80 linking loader. The loader has -many uses. You may wish to simply load one compiled program and run it, or -you may load several programs, subprograms, or assembly language -subroutines at the same time. Programs may be loaded at user-specified -locations, and program areas and data areas may be separated in memory. A -memory image of the executable file produced by LINK-80 can be saved on -disk and run at a later time. - -RUNNING LINK-80 - -At CP/M command level, enter: - - L80 - -This loads LINK-80, which will respond with: * . The loader exits back -to CP/M if a CONTROL-C is typed after the asterisk. (The loader also exits -back to CP/M after an /E switch or /G switch is executed. More on these -switches later.) - -LINK-80 COMMAND FORMAT - -A command to LINK-80 is made up of the filename(s) of the file(s) to be -loaded. For example, to load the compiled program MYPROG.REL, enter: - - MYPROG - -(It is not necessary to type the default extension .REL.) This loads the -program but does not run it. Whenever LINK-80 loads a BASIC Compiler -program, it automatically searches the BASIC library for the necessary -routines and loads these as well. Therefore, BASLIB.REL must be on the -default drive during the loading process. - -To run MYPROG, enter: - - /G - -This is the "go" or execute switch. LINK-80 prints two numbers and a BEGIN -EXECUTION message. LINK-80 always returns to TRSDOS after a /G switch has -been executed. - -As you probably have guessed, it is not necessary to perform these -operations with separate commands. It is possible to type one command line -that runs LINK-80, loads MYPROG.REL and executes it. To do this, enter: - -L80 MYPROG/G - -MORE COMMANDS AND SWITCHES - -LINK-80 provides other capabilities besides loading and executing -programs, such as looking at output without saving the program or -resetting the loader so that you can correct a mistake. Switches are -used to inform LINK-80 that you wish to perform special tasks. - -Here is an example that loads and saves a program called TEST.REL. - - >L80 - *TEST,TEST/N/E - -The first part of the command (TEST) loads the program called TEST.REL. The -next part (TEST/N) saves a copy of the loaded program on disk in a file -called TEST.COM. The last part (/E) causes LINK-80 to exit back to CP/M. - -THE /N SWITCH - -Take note of the /N switch. This switch saves a memory image of the -executable file on disk. The default extension for the saved file is .COM, -and this file is called a "command file". Once saved on disk, you need only -type the filename at CP/M command level to run the program. The /N switch -must immediately follow the filename of each file you wish to save, and it -does not take effect until a /E or /G switch is done. - -The following example links several object files, saves the main program -image and executes the program TAXES.REL. - - >L80 - *SUB1,SUB2,TAXES/N,TAXES/G - -Two subroutines (SUB1) and (SUB2) and an object file (TAXES) are linked and -loaded. The program is executed and the command file TAXES.COM is saved on -disk. - -THE /R SWITCH - -Another handy switch is /R. It returns LINK-80 to it's initial state by -"unloading" whatever you've loaded. Use it to reset the loader if you've -made a typing mistake or loaded the wrong program. The /R switch takes -effect as soon as LINK-80 sees it, so if you enter it at any time while -LINK-80 is running, the loader will reset. For example: - - >L80 - *INVEN1 - */R (oops-- meant to load INVEN2) - *INVEN2 (now only INVEN2 is loaded) - -SPECIAL SWITCHES - -For typical BASIC Compiler operation, only the above switches will be -needed. Some users may find that their applications require more -specialized capabilities. For this reason, the following switches are also -provided with LINK-80. - -In these examples, all programs have been loaded at the default origins -of CP/M. In special cases, the user may wish to specify the origins of -the programs and data that are loaded. LINK-80 provides special switches to -do this. - -/E:Name This is an optional form of the /E switch. Name is a global - symbol previously defined in one of the modules. LINK-80 - uses Name for the start address of the program. - -/G:Name This is an optional form of the /G switch. Name is a global - symbol previously defined in one of the modules. LINK-80 - uses Name for the start address of the program. - -/P and /D /P and /D allow the origin(s) to be set for the next program - loaded. /P and /D take effect when seen (not deferred), and - they have no effect on programs already loaded. The form is - /P:
    or /D:
    , where
    is the desired - origin in the current typeout radix. (Default radix is - hexadecimal. /O sets radix to octal; /H to hex.) LINK-80 - does a default /P: (i.e., 100h). - - If no /D is given, data areas are loaded before program - areas for each module. If a /D is given, All Data and Common - areas are loaded starting at the data origin and the program - area at the program origin. Example: - - */P:200,FOO - DATA 200 300 - */R - */P:200-D:400,FOO - DATA 400 480 - PROGRAM 200 280 - -/U List the origin and end of the program and data area and all - undefined globals as soon as the current command line has - been interpreted. The program information is only printed if - a /D has been done. Otherwise, the program is stored in the - data area. - -/M List the origin and end of the program and data area, all - undefined globals and their values, and all undefined - globals followed by an asterisk. The program information is - only printed if a /D has been done. Otherwise, the program - is stored in the data area. - -/X If a filename/N was specified, /X will cause the file to be - saved in INTEL ascii HEX format with an extension of .HEX. - -/Y If a filename/N was specified, /Y will create a filename.SYM - file when /E is entered. This file contains the names and - addresses of all Globals for use with Digital Research's SID - and ZSID debuggers. - -SYSTEM LIBRARY SEARCHES - -Whenever a BASIC Compiler program is loaded, LINK-80 automatically searches -the BASIC Compiler library for the routines it needs and loads them. If you -gat an "Undefined" error, it means the compiler couldn't find something it -needed to finish compiling the program. Usually this is the name of a -subroutine that you forgot to load. - -If you are using the BASIC Compiler in conjunction with Microsoft's -FORTRAN-80, you may also be referencing some of FORTRAN's library routines. -For this reason, the /S switch is included in LINK-80 to force a search of -particular library modules. For example: - - *FORLIB/S,TEST/G - -Unless you are using FORLIB (supplied with FORTRAN-80), you should not need -the /S switch. - - -:LINK-80 ERROR MESSAGES - -LINK-80 has the following error messages: - -?No Start Address A /G switch was issued, but no main - program had been loaded. - -?Loading Error The last file given for input was - not a properly formatted LINK-80 - object file. - -?Out of Memory Not enough memory to load program. - -?Command Error Unrecognizable LINK-80 command. - -? Not Found , as given in the command string, - did not exist. - -%2nd COMMON larger The first definition of COMMON - block /XXXXXX/ was not the largest - definition. Reorder module loading - sequence or change COMMON block - definitions. - -%Mult. Def. Global YYYYYY - More than one definition for the - global (internal) symbol YYYYYY was - encountered during the loading - process. - -%Overlaying Program Area ,Start = xxxx - Data ,Public = (xxxx) - ,External = (xxxx) - A /D or /P will cause already - loaded data to be destroyed. - -?Intersecting Program Area - Data The program and data area intersect - and an address or external chain - entry is in this intersection. The - final value cannot be converted to - a current value since it is in the - area intersection. -?Start Symbol - - Undefined - After a /E: or /G: is given, the - symbol specified was not defined. - -Origin Above (Below) Loader Memory, Move Anyway (Y or N)? - After a /E or /G was given, either - the data or program area has an - origin or top which lies outside - loader memory (i.e., loader origin - to top of memory). If a Y CR is - given, LINK-80 will move the area - and continue. If anything else is - given, LINK-80 will exit. In either - case, if a /N was given, the image - will already have been saved. - -?Can't save Object File A disk error occurred when the file was being -saved. -:STORING YOUR PROGRAM ON DISKETTE - -Once it has been loaded by LINK-80, the object file is in a form that can -be executed by any CP/M computer. You can save this compiled program on -your own diskette so that it can be executed at a later time without using -the BASIC Compiler at all. - -The /N switch (discussed in the LINK-80 section) is the switch that causes -your object file to be saved. The default extension for the saved file is -.COM and this file is called a "command file". - -:RUNNING YOUR COMPILED PROGRAM - -Your compiled program (previously saved on your own diskette) can now be -executed any time you wish. When you are at CP/M command level the diskette -on which you saved your program is inserted into a drive, simply enter: - - - -At this point, your program should execute and your output should appear on -the screen. However, you may get a runtime error message. If you do, look -it up in the following list, and debug your program as best you can before -trying to store it on diskette again. - - -:RUNTIME ERROR MESSAGES - -The following errors may occur while a compiled program is executing. The -error numbers match those issued by the BASIC-80 interpreter. The compiler -runtime system prints long error messages followed by an address, unless -/D, /E, or /X is specified. In those cases the error message is followed by -the number of the line in which the error occurred. - -NUMBER MESSAGE -2 Syntax error - A line is encountered that contains an incorrect - sequence of characters in a DATA statement. -3 RETURN without GOSUB - A RETURN statement is encountered for which there - is no previous, unmatched GOSUB ststement. -4 Out of Data - A READ statement is executed when there are no - DATA statements with unread data remaining in the - program. - -NUMBER MESSAGE - -5 Illegal function call - A parameter that is out of range is passed to a - math or string function. An FC error may also - occur as the result of: - - 1. a negative or unreasonably large subscript - 2. a negative or zero argument with LOG - 3. a negative argument to SQR - 4. a negative mantissa with a non-integer - exponent - 5. a call to a USR function for which the - starting address has not yet been given - 6. an improper argument to ASC, CHR$, MID$, - LEFT$, RIGHT$, INP, OUT, WAIT, PEEK, POKE, - TAB, SPC, STRING$, SPACE$, INSTR, or - ON...GOTO - 7. a string concatenation that is longer than - 255 characters - -NUMBER MESSAGE -6 Floating overflow or integer overflow - The result of a calculation is too large to be - represented in BASIC-80's number format. If - underflow occurs, the result is zero and execution - continues without an error. -9 Subscript out of range - An array element is referenced with a subscript - that is outside the dimensions of the array. -11 Division by zero - A division by zero is encountered in an - expression, or the operation of involution results - in zero being raised to a negative power. Machine - infinity with the sign of the numerator is - supplied as the result of the division, or - positive machine infinity is supplied as the - result of the involution, and execution continues. -14 Out of string space - String variables exceed the allocated amount of - string space. - -NUMBER MESSAGE -20 RESUME without error - A RESUME statement is encountered before an error - trapping routine is entered. -21 Unprintable error - An error message is not available for the error - condition which exists. This is usually caused by - an ERROR with an undefined error code. -50 Field overflow - A FIELD statement is attempting to allocate more - bytes than were specified for the record length of - a random file. -51 Internal error - An internal malfunction has occurred in Disk - BASIC-80. Report to Microsoft the conditions under - which the message appeared. -52 Bad file number - A statement or command references a file with a - file number that is not OPEN or is out of the - range of file numbers specified at initialization. - -NUMBER MESSAGE -53 File not found - A RUN, CHAIN, KILL, or OPEN statement references a - file that does not exist on the current disk. -54 Bad file mode - An attempt is made to use PUT, GET, or LOF with a - sequential or to execute an OPEN with a file mode - other than I, O, R, D. -55 File already open - A sequential output mode OPEN is issued for a file - that is already open; or a KILL is given for a - file that is open. -57 Disk I/O error - An I/O error occurred on a disk I/O operation. It - is a fatal error, i.e., theoperating system cannot - recover from the error. -58 File already exists - The filename specified is identical to a filename - already in use on the disk. -61 Disk Full - All disk storage space is in use. - -NUMBER MESSAGE -62 Input past end - An INPUT statement is executed after all the data - in the file has been INPUT, or for a null (empty) - file. To avoid this error, use the EOF function to - detect the end of file. -63 Bad record number - In a PUT or GET statement, the record number is - either greater than the maximum allowed (32767) or - equal to zero. -64 Bad file name - An illegal form is used for the filename with RUN, - CHAIN, KILL, or OPEN (e.g., a filename with too - many characters). -67 Too many files - An attempt is made to create a new file (using - OPEN) when the directory is full. -::M80.HQP - - - - - - - - - - - - - -d file is .COM, -and this file is called a "command file". Once saved \ No newline at end of file diff --git a/software/CPM/CPM04_MBASIC/baslib.rel b/software/CPM/CPM04_MBASIC/baslib.rel deleted file mode 100644 index 61c95ab76f50b5d4ca24b6e5d71c4d0b127efc72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24960 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 MjjxRQ|Be5D0e#pTf&c&j diff --git a/software/CPM/CPM04_MBASIC/cref.com b/software/CPM/CPM04_MBASIC/cref.com deleted file mode 100644 index e125339ac2ce7b2bfe0a5f55c143cdeeb91e2c15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 zcmeHKU2NOd6()JF#nxu1({@k{Ws-r3$q1a0D zg8n8gCy4%g+No7wF>h8uZ7@o)VuY<2zoG44(`z5oRS8jDu1!#F{!e->bo>i>vLaH( z$H8RUr)R9I^yXqg_8P~FQc~5pcYvwTYH#(Ed_Z+ z^jxS0L(t1JCcXKoTT)sG^2}@^XXuA)qA|?4-rTuA4>6irIqqgRQ9*_^@YM~9ju~Wo z|3SzX5-3}znAUteF&9rXpPiWdEA_Y*+3w$J%rob(G72fpM1cVC>Dkvpj#^1U|gr2Y~%aV67UZfHjZx zfY;^7D#@?P34=mK`RIiCfPAQ$OBNDxvQU|h-#Qb|nf3{k^$~c57;-t+k>wzgzd!*H zRBVAi`N#4@UIt@tdqBYe2pvZy1!4PDR0Ot&tdAl4k0^^Vlufhz$#JB~AkR{G?wqv; z8NEoO6$WoxXoB&ss4}?Q{|?A5pFkP`U5yK*2>U|g0s_CKZqU|P5JH6ZJ)%uSgQBU= z_sQJ(`SiXFt>OCy`i2h;4L|T@fZfEn$-qqpZZh!y%fQeV5ZeB}iDSo(j6aqdo1C1O zr1l?r@@HeI@rkL_(TS(VAEWm79T~r4Dm6AfH8z<#3TsqxV`0_qBeId?(*I$NJzV-~ z*nWkxlbkWaWoB_UO69J>-)$St&SF=MRDRV>kA`|+_guOYe>lQF z2bQf6CBaL*n0_8>sKvz-sM({ld=oTO5pubcSNZKu2;vvJ>g|7Bu0dYK(811nwDQ{H;+T5JmK9-c(s!h7g~@ zML(s#%12RhVm!`e(wkC2RvmKUtSQV zeZFytkMdQo4vgW5b(a9T@r3a=-ao8g=V9U>2AZH7%`d<1l?|Qu2lS3W%YSft0oFBt zdu4cAa&LawhvAOYsc75_jUK_qi>56F<3jJ6Y*1 z$VP%VW>NN27DUSh4bgu}Wbk4(-FmepG8+qz1cgzlIc3w$e#GYB{P>)F@eLu+$`u_y znO`lNaF6RFaF6RFt>AipI+CWS%u)mj5=zcEvn^f1f%GJXYE|3eELMC{M zg1k%rlt}GVSHY>7t-3Udpz~*dCx)YT!0F8P+kruI|I#*4^UP+v3jE zG`OE8p>eZI5y-1b!|6OD!YBlCVt(34dnN z8JNtSTbK&fEOvHopl|%@(I*Wib_1#as5gWbMs|>FosC^_>k!PG&s^LRWnfu4 z73r!qTX4Xdju~*j4{JCeD#QaicR`wEeKS^b=tTh)!c*I{^5z48jBs zk^ti*p6j`IM@)t-lU~38QE*Ik6!;k-TW$;#PPYX?%z_4N$BS)UHRA~a`~rBr8e#+Q z;w=DPsr6WAVo>s39$+to*i9`NH(rlz*I5MWEZu?q)Y@unomeZeZuk{@3VWXRS^b}} z@ExtV(Wbu_GyWCSLr{<=RH%qT?>kkP?r4XHcrCedz(1h3wS!e3N$(D1aB2*Sy7&7J T-k+jUheielzJR}?8(sbno!yBN diff --git a/software/CPM/CPM04_MBASIC/cref80.com b/software/CPM/CPM04_MBASIC/cref80.com deleted file mode 100644 index e125339ac2ce7b2bfe0a5f55c143cdeeb91e2c15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 zcmeHKU2NOd6()JF#nxu1({@k{Ws-r3$q1a0D zg8n8gCy4%g+No7wF>h8uZ7@o)VuY<2zoG44(`z5oRS8jDu1!#F{!e->bo>i>vLaH( z$H8RUr)R9I^yXqg_8P~FQc~5pcYvwTYH#(Ed_Z+ z^jxS0L(t1JCcXKoTT)sG^2}@^XXuA)qA|?4-rTuA4>6irIqqgRQ9*_^@YM~9ju~Wo z|3SzX5-3}znAUteF&9rXpPiWdEA_Y*+3w$J%rob(G72fpM1cVC>Dkvpj#^1U|gr2Y~%aV67UZfHjZx zfY;^7D#@?P34=mK`RIiCfPAQ$OBNDxvQU|h-#Qb|nf3{k^$~c57;-t+k>wzgzd!*H zRBVAi`N#4@UIt@tdqBYe2pvZy1!4PDR0Ot&tdAl4k0^^Vlufhz$#JB~AkR{G?wqv; z8NEoO6$WoxXoB&ss4}?Q{|?A5pFkP`U5yK*2>U|g0s_CKZqU|P5JH6ZJ)%uSgQBU= z_sQJ(`SiXFt>OCy`i2h;4L|T@fZfEn$-qqpZZh!y%fQeV5ZeB}iDSo(j6aqdo1C1O zr1l?r@@HeI@rkL_(TS(VAEWm79T~r4Dm6AfH8z<#3TsqxV`0_qBeId?(*I$NJzV-~ z*nWkxlbkWaWoB_UO69J>-)$St&SF=MRDRV>kA`|+_guOYe>lQF z2bQf6CBaL*n0_8>sKvz-sM({ld=oTO5pubcSNZKu2;vvJ>g|7Bu0dYK(811nwDQ{H;+T5JmK9-c(s!h7g~@ zML(s#%12RhVm!`e(wkC2RvmKUtSQV zeZFytkMdQo4vgW5b(a9T@r3a=-ao8g=V9U>2AZH7%`d<1l?|Qu2lS3W%YSft0oFBt zdu4cAa&LawhvAOYsc75_jUK_qi>56F<3jJ6Y*1 z$VP%VW>NN27DUSh4bgu}Wbk4(-FmepG8+qz1cgzlIc3w$e#GYB{P>)F@eLu+$`u_y znO`lNaF6RFaF6RFt>AipI+CWS%u)mj5=zcEvn^f1f%GJXYE|3eELMC{M zg1k%rlt}GVSHY>7t-3Udpz~*dCx)YT!0F8P+kruI|I#*4^UP+v3jE zG`OE8p>eZI5y-1b!|6OD!YBlCVt(34dnN z8JNtSTbK&fEOvHopl|%@(I*Wib_1#as5gWbMs|>FosC^_>k!PG&s^LRWnfu4 z73r!qTX4Xdju~*j4{JCeD#QaicR`wEeKS^b=tTh)!c*I{^5z48jBs zk^ti*p6j`IM@)t-lU~38QE*Ik6!;k-TW$;#PPYX?%z_4N$BS)UHRA~a`~rBr8e#+Q z;w=DPsr6WAVo>s39$+to*i9`NH(rlz*I5MWEZu?q)Y@unomeZeZuk{@3VWXRS^b}} z@ExtV(Wbu_GyWCSLr{<=RH%qT?>kkP?r4XHcrCedz(1h3wS!e3N$(D1aB2*Sy7&7J T-k+jUheielzJR}?8(sbno!yBN diff --git a/software/CPM/CPM04_MBASIC/l80.com b/software/CPM/CPM04_MBASIC/l80.com deleted file mode 100644 index 264e3b54d7cc172d1deac73f6cf3854e91ac5373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 X$6@~$`6Js1`A_ diff --git a/software/CPM/CPM04_MBASIC/lib80.com b/software/CPM/CPM04_MBASIC/lib80.com deleted file mode 100644 index 81b1d224ec0f07c16a37dfcb697df852e3a559aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4736 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 diff --git a/software/CPM/CPM04_MBASIC/m80.com b/software/CPM/CPM04_MBASIC/m80.com deleted file mode 100644 index 9df2cc1254869018e0bb611c140305c721339fa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20096 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 diff --git a/software/CPM/CPM04_MBASIC/mbasic.com b/software/CPM/CPM04_MBASIC/mbasic.com deleted file mode 100644 index c9ec3cd39f6cf66c899bd0eca759de3275045991..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24320 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 OZ_b|!NSK7;-~R&C%=L`` diff --git a/software/CPM/CPM04_MBASIC/obslib.rel b/software/CPM/CPM04_MBASIC/obslib.rel deleted file mode 100644 index fe7b8e2513806fa32c85b7dc172e7c2db2713e12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48384 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 WdJ`f0@RI*W|NTFF)c^l4`u_kl$n6sV diff --git a/software/CPM/CPM04_MBASIC/rantest.asc b/software/CPM/CPM04_MBASIC/rantest.asc deleted file mode 100644 index 0dd4dbdf528cac785e3604df6936f679bb60963a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmY+CJC4IJ3`DmMuy=65k|4y7DDnOm3!T96Se5Mu&QK3NNO_DQV;rADI!rwJ`TzCT z=OBCX7$u&-{mIKz2J!&jW$8--^CxoSIk(JnnX5mMJLe8DoL|U0OhXd;H}d2eB@1~W z-)y^N-udn0=I4ufd}V$2BL#n?#=c$j-v9jc^Gh1M`u-o;*F5+mU2HY+{^!U&Z@oYOnLKg6I5wjm~g zG|@BEBY(gWK@@!u1oc7CK8QgIo=}Z(*A{MZ#4BDXhm;&PMcjwdg2k%rIeU>l2)=e1 zX1@8&@B4l;-#4?Wg1C1B@&XrhgF?O~`EXrI>2ZoSFkz_J%)XfoyBE6jtkb?KCAG37AJbJIhcs! zR||K(#3lXXs3$o6_#Az|EB}de3)8*>(Eb$HajV~FAF6H*!Q=4gi9nO+xH#-w$I(_s zvwy%bHqR)`7Ofk&O2;4aHLNjzPsL}qBwpXct>vLJKs?2gjV96ZaFsBS9wW?Yb##Oo zBYEhljzK)=tQfk&C4G;6B09aqOJ*9JJw}o-QqBd#8+E#T?>gg8yk>P6dKVLLmJBb! zCOMCXmE1O#QLNVtvD02QRG7*chQKwV&pxTNwF9b z2iYm>Jm_3B%JOxioIU0pUte2?+by>dxK=6+v_X5*a7**a&YKMuAdln<4j}oB{mx&8 z=P@ADa3!!bBIa0?NN&-KTMw|pOMV`!&AM}|`5nL%Z0dRBR1dT#3Za42>koSmLlUOYK-dW?Z}Dtk-{WB=bz zNiXqUm-T_EDoDG^CoU1~Cq6Mwv<-gCrN0G25$zgZa%omj|7N+V@Y>J3y&R!t^yt{k b+41QqWpe!NQf^3I(%{t&Z4ISDhL_YFHAYZuFw_h&B&imJTHHO4 zh^dIQhhnOrDTKDhf)#X?2<_pZ5Y$bOxVWgGn}dVzij%Yd>3zTd|NHpf(mQ$ieQ)bD zH6WV(@z|N;Q@0J|1=B1P0Rq?3lMikNmdocx^eFSPE;@?qPNHIe)?K0%n)U8 zwW`mu0JY3|DM}PA*wClBq_bBF&xt~Z*6qtpN2+rXE;pziLx3h1Q$MBASIC - -BASIC-80 Rev. 5.21 -[CP/M Version] -Copyright 1977-1981 (C) by Microsoft -Created: 28-Jul-81 -31800 Bytes free -Ok -10 PRINT "Hello World" -list -10 PRINT "Hello World" -Ok -RUN -Hello World -Ok -SAVE "HELLO",A -Ok -SYSTEM - -A>TYPE BAS.SUB - -BASCOM =$1 /E -L80 $1,$1/N/E - -A>SUPERSUB BAS HELLO - -SuperSUB V1.1 - -A>BASCOM =HELLO /E - -00000 Fatal Error(s) -24196 Bytes Free - -A>L80 HELLO,HELLO/N/E - -Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft - -Data 4000 4197 < 407> - -40207 Bytes Free -[4011 4197 65] - -A>hello - -Hello World - - -A> diff --git a/software/CPM/CPM04_MBASIC/sample.bas b/software/CPM/CPM04_MBASIC/sample.bas deleted file mode 100644 index df4b4d8..0000000 --- a/software/CPM/CPM04_MBASIC/sample.bas +++ /dev/null @@ -1,2 +0,0 @@ -00010 PRINT "This is an example of BASIC-80" - \ No newline at end of file diff --git a/software/CPM/CPM04_MBASIC/sample.com b/software/CPM/CPM04_MBASIC/sample.com deleted file mode 100644 index 1826e658d21d98403ea2226f1ac522e03f72bde9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmY!sbYPsuDA>Tr`I?itPDoptyJF)ZUdF?M4h(bwimDEWqa8vawmGl^X+ejxie z;!!klI4jJ3Hk(<_+#w_*vseL$67v*ND-v@Ha#9uY(-fQ>gFT&fEeseKmN_ywxcF+Z zG5kDwc7uZ=!+%Sq5;4VS2W4fYBC)fz4re1A534e3F)|3UFi6HJhrL!(VtlQv3}&e^ z^6{KyWiV1_+^#4hdTP0YqN0+L2IENv2P=kaR%;#pIo{gqaLvKU#8HrekxvS!RM5nc zj~__eocam0i}CeUxTpwF^y2mdB37#%CR?p>n04#FgJQ#f$-`G11i2g!GdT*%JMwV? z)f{GEa0&|b({uLsRmjUPQAo=#%}e3sQh^JWPv^b{h9oDKD5WNf*kU^I_M?Q-LWQwruYTUeAheI_}J^|1*HBrq^A z#V{}$@-R$iZt!t#P(AoS=%E0oLkG(d52mahMoCeImbPVSf|CR|Ji6v|O0qDtbZVY7 oocMstW5Jq~PDu%dC0$%@90s3+xMn4Ji9BIon8zT6?mm+E0A|BA@&Et; diff --git a/software/CPM/CPM05_COBOL80_v13/CB80.COM b/software/CPM/CPM05_COBOL80_v13/CB80.COM deleted file mode 100644 index 5692e87d8109d6eddfdcdd3b8c9e119cc27d86b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5248 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 diff --git a/software/CPM/CPM05_COBOL80_v13/CB80.IRL b/software/CPM/CPM05_COBOL80_v13/CB80.IRL deleted file mode 100644 index bbd71ce47227f4bea1bfe02b1c83659249a5d3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19968 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 b_Y95C)KS>L|C+!5{9~CAME|@#AIAS5%t7f0 diff --git a/software/CPM/CPM05_COBOL80_v13/CB80.OV1 b/software/CPM/CPM05_COBOL80_v13/CB80.OV1 deleted file mode 100644 index 1426839db3f1dfd811f30b09a387705070622a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13568 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 Rclnp0KRkV=V{)7+`9Gh;=&=9* diff --git a/software/CPM/CPM05_COBOL80_v13/CB80.OV2 b/software/CPM/CPM05_COBOL80_v13/CB80.OV2 deleted file mode 100644 index d26fd792db21d3020abe97cc1654cb4188a55c01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13568 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 diff --git a/software/CPM/CPM05_COBOL80_v13/CB80.OV3 b/software/CPM/CPM05_COBOL80_v13/CB80.OV3 deleted file mode 100644 index f27cf08c028ed66bb9394a32d80c70ae0925260c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16000 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 diff --git a/software/CPM/CPM05_COBOL80_v13/LK80.COM b/software/CPM/CPM05_COBOL80_v13/LK80.COM deleted file mode 100644 index 5f6b8058cc9909278021d871e57ddbb0226a0132..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7040 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
    5a=l(@5T)cN?Ai&t zC;fz-Y!mF(vC4Kk>|*>PoJ`Vw7u2cYPwe80H~YqU zGM(eR1z>%7KE*&xa7nIpupyePeh#cU~Z36Cjf2oEGPbK!sX5K&zvNL0>Lfv%}x@6Pza%2Uhl-8PXKO} zyPbG!qJ5jZ$BC!8iv%m=Lr#2Y!oE^|mPYh-A);0C>(s*(;z65MS)4$Uk?HcEoq9Ge zl9Y_D%iSqo)K&Scfok>8S5AB!HQlKcOiI5a|7)b85?(a$?EeNL0FCb}9-e*8zRNtE z-%TvM`m}$PecMZa1F&c5H343kp|zEEKY7TK*Di^JXvE|2vu2CFz?3DG^tlQ)LB2~5 znu^NiO7)5{Tt9T662^sJh8<1}FQH6Bo8R)*aH>*znVh*}q&l^9@0j!w8m$1q_cBtB zR6+{~)k-o<5T^~jPiO#p6}|iwaX;$uoj}S30)bX$8d+_A2R=bxOK?j$U8M5~q-NJ4 zCR=lV)K#;;OC@K}u9Kdw-JYmTp6XJ;w)3&*jwicR*aABbM|V8lrH0nSUadI{9iS1N z%G5jtA|Srw|5JWY{Xa9nf^!3$;0tc1QIO^j-~W~YF525*q7){k=6iqIzs&@$ z-cptI-*fT?MYKrQR-Ke@bmOU2cJoN`lHpXYbH4aK?SJo!)j*gW60 zRmw+v-73KZRNLfd GcMpX9z diff --git a/software/CPM/CPM06_COBOL80_v20/CB80.IRL b/software/CPM/CPM06_COBOL80_v20/CB80.IRL deleted file mode 100644 index d09e15b02d1d7a72f69649298ae1a9818f41ab3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34688 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 diff --git a/software/CPM/CPM06_COBOL80_v20/CB80.OV1 b/software/CPM/CPM06_COBOL80_v20/CB80.OV1 deleted file mode 100644 index a3689a8c656d4d10e71069d9c32c95d934aba5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15616 zcma)j4_sWuwg0{BE`cQ6WCfByl3ngD5LgHpOn__%%d&fcg=H6ZmvFUx{>>lr)cixm zXp`Fd^i_W$iP~zk^-oN!^>5Ug_&+B1KD0}6YqL?TRBdC$RH<66_^P(#eb3yxu=(SA zzkGCO&Y3gkoH^&r%$b>sFWhl%B+%RvD=6`m7A#m?yP&`yXb!}@!GeesmAnyOOL;*c z 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 V|6dkJZLGxKpUA=-l=G+l{a^IzI=TP= diff --git a/software/CPM/CPM06_COBOL80_v20/CB80.OV3 b/software/CPM/CPM06_COBOL80_v20/CB80.OV3 deleted file mode 100644 index 35c6141acb7f8d73419dc3784253d98471ff0453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16512 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 YG`t*h9h^wroIv5EIt0 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 diff --git a/software/CPM/CPM06_COBOL80_v20/CIRCOM.BAS b/software/CPM/CPM06_COBOL80_v20/CIRCOM.BAS deleted file mode 100644 index 954d81a22ed7052d8b424b7605824c122afbaf78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmd5*UuauZ7(e%%d#lNIuf0v3B*k%VP9Cx0#5&pUJ1gJq)2eU5!$hMWS7nAxjid@is^$yxxmkKcy;0DY0w|ezliHGbD|2*& z92J)1s9m;$-;ic2_<*c^ym~JeLjFzCY&PH&whydbyueN@eQA7x55|Q$P`rzuYVU30 z#Sa(Q!1C8M6CaAk=h*xV+ssy*jo=nJ_v;UM#|~Ez@^2COA@P>#2UYnFX(%U=H-;FC zp?EpEMWkndqq;(EW91jiOXLp-j0#Ap7d$2*tx}~HB#$n=V_hJpM`2-cmz5x=L!ica z(5g*13jrNeFYaDrZLl7i3A?1^v+0MDQomiJvTJ95&pvO+i_j>g^Lce~PMt2QGjw8V zGC=b{@VkZi{7e9iWipqODTi3}zZUrm!I?-=Q7pk?Q!MtHd=*Iyh77Kuvt5yI^WL?g z!s<|t`FU<5x{8#mNY;dg6tL1ly`i{({{VA7$z!u6or3k1T2@ecI6ue1J#BRP)CB2S z8=#btx225mD|eUg|M)2nHLahqREBmMJ6$AnVG|$C36<@-@t7BDk9jA`tnu;kM^gaZ z`FqkzecO0j5NoG|F0RdwLU3(|hgO~IU{7YZ2YaO#d8OVKw6DA`Jegd24m{wOkSQSh zRf$GgsLHnm`%2xj*ME1GZ|GW4r4zbd&_jV#fsSiBToZV4G&7f-Rzrcot_{)_H$EvFSBV_LnbX7%aWbM$h4I`kKM>^k`Dq&FRieoLJZ-NzqkP;>`; H|B?I&#~OE8 diff --git a/software/CPM/CPM06_COBOL80_v20/CRUN2.COM b/software/CPM/CPM06_COBOL80_v20/CRUN2.COM deleted file mode 100644 index 1399e69694482a3b962759f412be22c5601c654b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 zcmdUW3wRsVweF1Mmt`pG4JLpc zCn!l<64F8&l8^@l!XrST92_3OKuZqRVDJcrlL+EVeQCjfec^~gl471kzW>@IJE7;? z@9X`(-h036QqA6Luf1M-?X}k4Gm%G&We$I)bUBejYYFG;T(Wvud)uNF1*N{Sg82<~ z_4DYrfqv_&3w)i6m$Y9JSXQun_3{;g#mfuYJA53ML^S^PZ|uF^$A|4bshLjs3f^ed zXa2AMuL!sD-T$3agxmSrpt)=FT#x z3PH1U+EY2WIlHqryKVNctndeeJ35`go7>8P`k(&#e>WV|&2{SKPkA)Eopa?WK34r^ z%+vhlgjvbQA0E5#r+D7sn_Tbk^lZd4`DA~U>nyMI6U@ZrWe8)u{0+~WIQcs|KAAI= zuedxosb=fa!#~iqm7|%VJ7&!}D=*bq&!VlE%CfFbw~!PzOF<2`TlT`<%@c#ZxEojxyF_>c!wr}W!@Sz=8eh7Vk&uageH#vO?6 zEa{0d$dC2W8Bnx`fp+Mn?eZagziUH6zv}}Y6uSmOPwLhAdPwZqknmWKVjLKr*!J8| zMAh?a6V!J7pf)J~f%| z=zs_`Q}XDF1ocOHEEb5sKI%4VpLah;dm>+#2uhfDj_0LBp)Qd%1u0Qoq;mxl;ZtT> z^>29mIu<5M$*x6-VtZoHiMa#e@r20II6+jtH-VOE*f;>uHUD_5#|ii78fn@2Rb^t&+6_+ihY9Mw zxTbl@CQcJdw(I+1Eu#x`a>WH|omUXvwk=$tTLU}8arUiwskP_ahQuw&+Kj%5?d6a4 zNExoL67_30XDVPP?Gg?6Q^Mb}(@S~xw zRIbE-&5OZPy zJ}&FvkTK?u#FEs#`n(j(5`Le;EVMU8GV@m&)E^ly5K6t=I!@jB`mwD8p;*$5yqY5X zIb|UHm!t!u6G@Xp;}BzP@T?q3+UeBC|KyP*&#Nf|FCI=N8K^mkHIo*66`b)UW z)@|RuXIAZ1frLeyzrRlB@V3s^FWIqrMeCkG>73FzB`wATzGd%W_Sd34+FP#v0sUn) zYtL4xb^-nURN8$r{be?7u>K7H*&27xuHH3!d*MYp8yvPxD@#1_XM=Y|eTtA+RDX5v zp-b2ADyVZ@{Zrqb#4LAp&+0&Oo27>T$^5#kwi{Y@WUalSPGUdaz!;5a;UF6$z?Nz(^ zowGxZ(nUX8*E*v-*LrBx^5WG1v~Mo{r_I;Qej)4Nb%u4T*EKJ{I-|IF!{!q=Bo;5Y ze#gQlYx3c}^$A(O<7$@gSbckK1IM{~53O490>_mG<}X+PE8euE_OK0o|KXbpW}(0D zpRW3T#=mhK*K(lr`eu&Xo_S!87yWD8U0GQY;9ZU%l(qy8F338xy!Qf!#gen-r_4kS zyqEfL;mIK$`-EbO{1f9OxhwTQO&Aoum@@bmBQ*4p;}{2CWII7VIO7#V{ghGaby5p* z?wIt5>(NwGuHyM^>cDW5>$j;vr_%rUaJuKw)MSiA{%Gt)DPdLYC_j`f7*`)MB5?J) z9!XW7H^vIWXNm&jeQ?KYLaerM{1j@ z7(I`q4!l~ZldY*}{fFsZ?7b+V<}3$sVoH{Z0G^ro)&9Wwsti^4gjlc{TOM zs*PK#);pOJ7B21ddsjFwb-tIx-MDY#);rdJHJ+LvznN+q7maCANRRv-1%(dreXrrVR1Oct*Wy*AEJ5 z)*vwYd(;hSz`*2@7N83jYb-s98$Fkn5St30OLI?2JSa-(pb08&POw_9894V%T0fwF zGF3Hda9*^+H9@3vAXJ}DB3P~PI8Q#*D@$*3&9QoBTcN^>kR{7R?QkGH&KbIcsGAG@ zHhuF*OI!Hz^vI9Xs~UTVLmQ*eot_|f6IEue-RZq1E|xI5Gkrv#CT~gKyq&Q2fXBI! zbg2l+^tE5D$KS%9qKiKL%7!jvIC)g=@2BQ8{L;KRcPzd=E=5pcE!Z-DpRa5w8~^E z%qp0kx`9pIVCqZ^UuWtg{0*kfv{+d1@L?0P&3z`gBib-2J>V#z`xq~&`qjELwJ0t8 zoC%r*2f{CyYSlDaYndUaBC``{nIor7Lb^3*j?|mooK#61$RWQpLH9O~+4@Z6tf{SE zK4;p4)$YYaB5N_jN+4@7Pm=|{*@{u-kM(A_d3i8a9jY+93uM8JsIb87bQh4rf_nIR zvlIX)EIq^TG}i_POaV4Q*QPP67b{a9nH zG^6lqGxK#1+&;|;=8Dnfw7Lqds7W0~R!51ot-rG?7;}bBm`zji+vZqR_>bmTG5rYi zb6MzZvojGte8)=lmC~#!be=SCcFnc+xpJ*SA(RbGnLSQxk62{wmlHE;#S$yZ>k_N0 z%!-3uy45omR-2o_cXVLBwl&MFF=zPE3@oiTL;c7cD-0jakP1nSGOJva5feiz7+fT{ zC^uxpDntLmAWo?=)R58d%D0+$`Hc*O+uJpG_*NiE6&S?UoNXnHP9U(33|5!D`jL46 z8x8Eh!If<_>Ex#}qylPj1cgLTX2j-&lniMKJ4JpnL&&#w$0|)+Xq?ETTNx5MY4RU3 zu*%)oZ&!rAAoj3aGy_4R8}b+|n4d++u(p4(ye&<%Tb&NOHK=%OR!S~5tHdj+-GY^Q z%VLqCbuKK_Y~h#3Eo8U$J|4c%2q?Z*Mg;Zn*l`v zit@`AsQ4L!IB8BLfh!2i42&Kafrxz6Li~{e{*FH!fG4)0>T5>4Q`)4(d){npGvjnU z5MBw0vnkYpBf&}O%!54?-35-Lpgug(`bDGbptWqp<+d{0I5zRvggJ{_WAhxeHUS>m zXr+BW98YHoCoc6lok2xCWX+HCThYT^i26I5BHZS^ro3C?EPK4_(bnUkA*;kG;vR2M z5%zk!J$t%y(bgUaq+Ns(0C%!o2fpSDJ3XzP;l%-o zN6xYFxUhFmLsMqath*uj{a)97Ug1HnoA;)C8|E{b7W5aFd^7KUqt`@OaF z3}w#}@4>vIUf}`niO5nSV0`J>gdJ&$-}%^}@vj8oGYvdtDB zVl3|Q+B(#?P_Fj*>-nuWrVH(!t?tJ{U8gP7 zk7o1Bm(xPUO@GXbr5Q)>J$Ut4xAPiW+*{#O2hJmszaO&-$GlkBBa^@-z@u4g;a{Dt zc>^sx*W+|^CQkjeNGnf7wV5Jj{NjD{Qg3Z_uyMdG;PJo}#} zUFLYyD{+wEc<7oe^}Z~4V3!Rr@lo$M>xz$gqv~ZmCXNF(XzZC$iTcs8P0njgd|WGN zggX-jarT)k+}k{p)vq)v#^}z`sjTs#B(8IaWcgys76sp}$3t&r4G!svU1IiNcT`Qz zrvIjQkeHYq1yhiBx_O1agw}=Q#@<_)=?q#EL&j`n$k>_0;rQESiz5z>1+C7^^iXlO zB2K{FKl9?@bWC{FO>^=%Q-NxpbH3&IfNXhLw*2qeXpSVpJ0?9JdPi1hPCM!O5AVpb zX$Mxag-d*Ho@N)A<`JEJa~z9&=o2I4w}EW+>+JKyY4~EF{8BaoAkZiPzLc#-=g6

    2gIjd<#$Je$G#=*vX$r(3#8aS&`|!R2 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 diff --git a/software/CPM/CPM07_COBOL80/COBOL.I53 b/software/CPM/CPM07_COBOL80/COBOL.I53 deleted file mode 100644 index 2506bd74f3313ca66c97069c01f4a64ee590250f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 zcmb_?e|%KcweLCeBXe?QvYCV=gn;xwLKw&oLiiOS;v|!hnam^;G6}z|GB{A9Mxdd- z+J0^|aI3HPJ#Q|xyxyo44mbX|XwmDl(psgQgqZ+V>&__TR6)G{qEy?SsIA^0(^eJ6S_~#jC14QfX_|uCkK*_pr+|b<0(}u@r7GAv;`Xd z?TW`YUs-f*^`bI7s+8t{uPv;s4*NPHN~pbF4cp$;71tTp*_g;i;z{G@8qcka-p^k5 z35U=;r1^Tfk0*_%wWRTk9u?S#!cNQO4IaB9mkYw{lJSi3AI7uB|23X7eqlUs93FNA z9pR+$OI>k(CYKk>C!C+f{Laq?>;39n^qh#Ip^a!6+5PN&`GozjTqd8;r4q)c-prTn z(_@Gt_*VJGvAcz1Xpx^%|DgO)$aa;hn`+rue76!+iuY`X(i)1yi{Jsng^51nWlFN zg1etDXS&b8iXlp`(d`$69no=iqZ$>;rexz;%=*;m_&oLqo^x3QJ+s+u_%31_%>F1u z)CEfHE_&>t$6oLFOI~50hh57CqJncdpR=D^?$!N*m}|G^+3(Nu_2eCI=*iQDZ8^4^ zb!mqL28PO5sa#pk=F63ut4nGSGkraoLw=zr*TmBFnBdBf^W~>C;SRg6#|{E^jW7R= zE_~ZQGGLL**`KJF7yXPDtB>4o6OY(>v-{osYF&HtBK5Mnf8?KSmQz>zs?vSd8L2+q zleI~%@nro_-pf7L>0Yay&wDzmyZbxU8uz1R^7HOTdG#hx*Lm(31yRx=o|FaC9YTQDNzctu;)lj6pwyj-hZ3{QH)i#p|yji^- zxi4!iuf9VKuC5J*ly-kxxTDc;0$nDs-2}Eaw5<-eH7lWTxOEb+iGZPwNCQ#zHPm;s zHB6!#B4{8I#-xFk){b@)B%4%Q2-IYP!X51sFsBJ?HD_#YXlraxCIM6Iv=K0>n50A# zeLZ?od#|etvc|5n^?IFlK4*>Yk$;-?F^QKx?h6U|=Esky^}j;GEQs+(QITDdeW1Oe z8M61vDt7oNL@%`*_4-Nr9=R@Sb9&3M1t7qz6FU|Pv@~E8?bO`Vc4pB2&?G$*I4!l! zgagWic3ldM<~PxHdl#YSoVUt+E~Y1q{-N5O(g|OzB4~d4*o7eJwX$kP6oFITapfv%J^U)rDWa{1TjsN8Zb(VbB5$Vh81A?`&gaxZrKPn6-~=1e4sJ|L6Ul2?-YJx_Q@}_OyEdCdBeB=Q)$V;MdHJl@!Y3aY@L5(24I95Pj%pe>;n(a=))edhs7>}bTjV7$RTrOgCq(|d zyvp^@L{Il}GF$4Y4hdE_>=xdkawJY(>;rf)@Oo5(&Q^h5mtY|d``Ghvy+zJOX@{E^ zT~K{ksA!cz8Qg&YtsxW@oy5Dd739`QRleZ(CHG*`(6k^teSG9~EBnCN=nPViw>tMknuVU}|bq}q`lVZU#!2;NBLWCdGyk&$= z%z>QlEvJ@=j3yRfE-z^u`#N41;i*1B6a-W9!1KpdUsMz1qU83eeItNC0SQ3PdVhUE28?QU$N2 z*Z07oMAArTokAJe^lE1dcTC|kp455qA~Lh!VAAnAjK767578GCuPl*tyau~j4Ye$# z5koxB?<`SZPOlFnuOHAf(zVr6iNf=i@)Fw?(fz0nl5c;0{lmmI6uq3C@>O7B$A|{N z*`3C79@(3SNc1ZOp;nm7@ z@S!#pT}kh94TkxeT-_|#-Q2reKXci!(r2q4@{S9d&sjZ4Z(Z1J=eY$Q_Nu&!tk=U5 z?gL$dC%Wj3m&g+KhI9GcrmaK14hZ(oLcNy90?DLCx*TIFi4lmkS{u&>)mm$APjg#LF3AY zs+AS7-DMO$2DL6M)<4~Ah`Z0 z(D~H+&U|5FE8F#!zKD4$P z?oQZfM{XmPP;QbmegXKOkpumOU*k979mt759Bu&PW8RpF+(pRJdU`^syHfGyUYd|7 zbXqFdDGWGDav)zmj8yw&ggBkTl(S&%v83@bRO)W_8lU|(bgVtD$h(o8JL)ow-_~W| z`3nACP1a>-zTAy)fxpvI2rfqufY*%I@Z|U#PW`LPK>Dj=Aq~0dG~ezB*8Z^e-rD_N2A|vEflDD4}0J!(NprZj$-$NX^ACY#D_|cD8K>AjcG+x(3 zLQa*bXD*6c#WwqHAdqHB74W@Ns&oQ+^fN+T21p?&IP)oto!1(yLef{A=JP#X90Q9% z!LkcBb`HiZP<8;dHdQ?p?Vy_wXL`g(mM5a)d9eCYc?GjWjZSH<99t=~%VmQe zdTLoYHXPQNLtY`5+m~Qh%eisdWy?v{2jNORc`MlUp1c}Xi_=Vwx5qwQAFS_*3ic(G zj)sw6N0r6mB6YF&UG;AJQu7odF3Rq=1nBd-bkMK_`UwNLQ0*(@a5k|oO@TE`h>611 z$HqRj-o>T7v7XfHQ|oV1EqcXpNK0@79??M77x0LZm|rH!Vm@VmvYGwe4hMJ_^z8TA z?Haz2Rs3Fq8qwbEN7A{9-8Dcy@-EH8cFG$eqmYo7PyPSkVRxDxsy1Km5=7DE5nZB0 zJU_hpyCC0IFiQOI-h%4 z_>GXld3zC%VC2t}{zTqhWIP=evs^k(`Q8dakBz(Bi6YkLa>t{B%Qb-NhD+0;7T1~N zlFrE|b40klxVqT&32pbl$Sa73tdE^%A9&o4x-y~xH)oaHBvo`fH*PoYl6 zRGb01)MmBDdYplwk<(Ur{?z4i>45o_i!TiYo5>ibu3*qt3S&$Zd%3hpAG4<4pQhhJ z`u*4RyC?O=0VXHT{ogjL74-GJD_^@bRIlzIN0$TvHiVisr9 z@vV5!^v=eFBr&PV&5d_7-ERopMDB(JGA9_&8o34MsA1zjjdx3ltT~I$1G6cK+Yb-< zuI95;Cz65NG&6r5Hr_Md*U*GF#2HGeLQzTc84^ln?`x&tq7s(*zQzMfq;B%N%{Wq} zkWk)X`w@%Z*XY>l%$K01CL*wOFaw{w3^URJGVqRupo-@Eh$!b#>2jwlR{#gjX*&0p zm&)^j?1u?(e^`@57KAD$c;JgmO|vu{S^`*jAdzg!Bq=)syeSi}Mjoigw)^FB_;@1E zF4&jIW$eNho6{fLg>;_#ci|L;9Gd$d%Oy+km+4S#|_~lIxOlIx{fSOicU3ZiI|6h008z!AAD{V3^1*J*Ef+A@& zEiGxIMInGK1k0|B9A{49ptr|CoF{{`Y09pYNM683Fb{hQeywS>d4}gr|4u>tDYQ+L zpomc1omZ*c9D_d{dH5NtxsekwTvT#Qi^3)q4>5 zVDnLkoChD2*bd3vt*g{UppiEwMBbR-{-<%kFk?_E%s@!bNb$t42qrBR@G>EoP#MuW%0sr407AKvyYQ=P4VBSac__+* z=X5oCLhZ@!rvjyEx<29C31LTWy_lP|BUdv^o8QuTbsjf9Fkhkjx&JTRKMdhxS4={f z4N3-DzFqgn$uV>aRXFL4YjJ)}2l66bGLD>gAYCg)Iz4rr1{DkOqPO7dhZ`0)hEuVe zhkiA{gN-@n6i1b5RHgQJF9&T?_bH&C!JKJ?uq z4C0%I?j68c&f8-h8MMfy@C82}6_XvXK4Lp}@RCR7W)G5@kQzI{n?ESGG(XU4DQEM|8Rekx&!{+HTlAy>E zfm8b5+Sk`n07vl$Et=^%gK$z1RcsfyaY1pNMO$N>dyq ziZ>08eQJ3e=^TjOq>-4UXT#E81sa>`6(7h7l0Cw=1+ zfy5jvSUx5hV5`}tbXRIt>bXhhEw>3rQ6f6mw3u`OMaZ zDKuDco6l@|Lh^qzKG%8p-vpJ)fuGaC)V)(dJt>G3<_qpF@Cx4~IHrWa|4RcDfX}(R z0}eGPd#Ev-{a-nY=>Whs$koW<*apxYGcM}9^&h$MCD~zr!VH;+a2H`%%5d6l!yo#D zYeDytmXdkWxU3^ql_AjzYUa8AW*+_!8#0Be2E4Thv-k}65H4}pBge|v!*VsqrAzy+ zI=JPK&ufV{h$_5o$PDnI_^{(sM|fb^am;~&D{s9pY>bZz`d7Fb6;Smvubq6N8js-` zBA%o^zDE4Y9TZ(Wp*DgA;P?s@QS*uPwrF3go}_qBj#_oKQHeD8+5_PhDy>MccwB7p zHF+^yYsHcG!A(PQs9`$FSvhkku6N~f$wp;lDhFqlGbcUrn6sQsV|lm(V$;f5DVtx; z=CM*GYa{zl#WjPy13S&9a=xHXX*r;vP4h>`de9aNq z(`}T8`P|izzFouh9^NQuP&U>Ew?NfQKI+iWK#+#N9Pi zjvtP!h@3_riWYrxIU<%^eta%HVe*<_cTij^XMYgv0y^l*&%^#;7fgTap*UrB$qNx~ zj*$*4xQPw&nNLtOS|dUukq`zGU(;be^VfjDWZFxhuW$lC;Nd;PqgkVjhrK+E!cXh6 zGXh$z?la?~QzW;XlH?HaxO_m8-DGY>$@ZQ4Qbi?H zEI&T^@bGXsrg#`DZjMu80Ffg8>pXJ)&7RS0-n1OiJ~ahJq`ue|BnQb3uZ9)V6lug9 z6ETX&$=f$mJnD;^bOvaQmL7B~*$rhHA8FokAnt<s)+KEwcT%$o>j~y`6U;+6u0$I6kPY zw)w*K6BmR^JMQ@dp$4_t{wq{qj;Pi4S2cZjG-fvrk0vc(eeX7!hi8ns(MZTHsX#!~mZEcyxjNxUPcSJo|~{=yYAl?ssK!@%3nh z{e;IQ*-z@GHLAXH{1n-T2c)vAvkW6D?S@@1jVIUMsrlTy)hb@h?8SQ@lGyI)*HUD&K?aj7t8fa+!1NRLHc zk=?JSjwn@BW1}OA%{-z2LqM;j7=dllpTf`qO&58y*~4y|o{^LmBLJf6}?E$|hDyDNRg{f+*7bp#FZQ-`ab*70Z^|kG_=}$7e ziQa&(J@vW5L|d3bZj96_t3$Po5#>6Q0XA$(PA#_WDYhT=usmBYV!f>w5q1*bWjMx3 zP24R%LwHZvdSOoN5cva>z&p4DA^@P+kx76LaYH_;d(@R}M?-R2#gx@a{lA|+peMzU3=Lk-{n4>wyE!mc0%MUGn%lEAPQjJxyp0|C= zcC+I-+mP*FY&y-mq$Oi_rZ4mRnYU#=CYL%l8-je-j3=GF`FCgS%({Kax~y}kjs@7O zIqy+A>VCxivO7NQ``Mk!aQ3|H)!B!$FXhxs74sj@+n)D%{<8cn`Q6hxrhRYPL(|Sp zJ2Aa#=C2Fvg^_8OroTPoo6{E*++1*}pk>C{g2xITD)?JLa^~v=9~E{_zi;|I)1R9D zaABx$aE4HLvG5;eJXpA`@Y%w1GiqjhF(WxMGIQh1nwd*yJ~8uwS^s0!p;<4^Iy>va zH+FpEqT*0)RUVqXdiLhocg;R9`|RxB77xxHoA0ampA`e8RSSAbr!LSJJiXxMilU09 zvhS6xEPK4Hwd}dFiwiGSS{6Af)yfwuA6>kCar@$*E?&PRZ}F3hKVOn*h=#?m8aBgj zWEc)ZGBOQ06kYblvcR(L=3j>Nm77)`t|`9$kBw{VG8)yDpRB*Z+fn<6wM%OP*DtSm zs^+chmtOasRm!ThtL|R)$@QPq25WDr{Z4JH?)!DSeQSIN>o(OL^!;Ofp)cE4}dIQ zOJB=icvZ`v!ZX6Z3x62?qP3=VSL-)hyIc3Ro^QR-db0J*n#wgVt~s=(Z_UBBPa@Tk z!iXNZF>)euI`WgqYwbJRA8G$-$BK^jjvsWqw|3>apRE04UCFu`>#8^Yz{m=(ZD2Rx_HlMBPAaGgLJgr-U5Y?IbBDR}R> zb~1iU`>`we-1qxD=RMDRouSk0I2)o7WKC=AJsdH?+p+~m1g`%UgG?dh1bd&xOjTb@ zYV3D7hNSUyv`@l>{XS}v#<0e{FLN(s#^VoGRK~Ye>|Fe(5GCvbO7lreJF%>bLjE-S z0~^+SO%#+{QAo+XW;Pu#zhT;FPb8wU*R&CKZ^!ZPJn-oDusxA`-7Fj`dKZ!4gldZ> zqv$jnVJ8;{ilza>6!!{;yh2|TRo&tn#5yF7rybLrUM77ZI3-HhDVoc#C?6I*rp?l& z6;Dz5kh&#J%61EJS-fgb$YS1}Bl1BWm(i|~MqqccTv)v&6 z!z(JW-Jm(G=mMFC6AoDH@`&e*Oh~jRZ1ZB5nBkFJmWY_)ZbF;Hj5M0goh@HBi|+C6 z0>ZL1DzeWg*3dCrlE54-)^mJzR{TDwZ~=AoGeO(1!6{#%>cd&uvdc z(XuZhqcjNw$4Q_cQ(3}d=3Z$`%*e2`=5R$trRWhe25xSHEdStgWhjCv349B-8%;yy zaSk?viT~P))o6oZFCKzpky4W+fVIGtl48U_8J=B?(gHVm;ct?_&C+4T)>1$Qs>e6A z84ss3KrDi**vWxXx7f>@eHgGoqa;CZW5dvx3Bpc;X`HY#gpCr{Q2u3LKRXQ(a&^Bn z2E=FJ1DY}bhymaMn4?iG*lScIvNXYuK4ehvLa}}dlnWBLQbpG^`xE<^>R~pf-@~xp z0>4%U=csxlg34il?#C33oFoid9W3pObvH|aF(NB-U?Fg7Pe^Q|Gg>ZH8-K(ba3Xo-|xjJd^mXE4ymJDQKxx3obx| z`(gOTBO4GL_h~J(7lQ>xOTva%YRrc%5w4H%FdYRKjIcvAip+DQstd5rt$bFDI39L~ zP3j(YR#(_rpw=W|=b(`pjr|#lWa%@7f<)k`QZYNqqZ&I8 zM>S{*odwx{D&_$SYswBBQ%b^*_yEIIjM5?lNZ=dO>;n6gLyW{`N1h&p1*Dx-Bos)X~s?Pekrs_eWjmQhI$u4_y0YQ z*hMg;z@TBW;?%%tH2sq9QCoCHZ84e-MKslR7Y=Ar3Cce(UB-gqK*MSF7j~HYT;^LW|J_i%W4vQGoWeV&Qhfr7(&EV zgXwTbxR}O^bHaC{5hFrP!ud{8xF}6ce&$0Oo2RsEZ)LS*%i5(i*isPe!g}Fn!e-%M zS)x)clgnrRT z>Y1)bR?XUO+WKtg*L-gOYK?dG+pDvy)3qrXq%oe$UEuA6b~s%v)acHDOKyYh~sjw6nLIkftVj=wpd ztNTUWOLgzn4LY|vQ!eCOa{koymh)NX2hLfS>RNDV^$*wYtXJ#5UH@+V;f9|yoM<@H zkZ<_wy8Y{xWQ+Wie5A3r@$tsz8{cWnH%_fj-MhFU()McGcuQyVK+D=@+WdZVwymk{ zyPks{#dFNF-81Z2YG3LQHd;F39cMa{-hJL3-Z#CEc2#?aykB-%nTZLkjG0+Et6&yZ z$*fHDS$s{tnD2nE*|*!bIdH&7gTdghLvJg6{u=*Q|2hA);9J3w;IZK8;6mt?U{2i= z+7tXL^qA5Ux};ELK17w*l@?`(@|rTJwbWk131bDHIB@nl}$1^vj+egnD`e S)A}}#xlj<@2-R*6|K{J6_kLsm diff --git a/software/CPM/CPM07_COBOL80/COBOL.I59 b/software/CPM/CPM07_COBOL80/COBOL.I59 deleted file mode 100644 index 25669430f02e1d443e06414f6c6966ae5276ec13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 diff --git a/software/CPM/CPM07_COBOL80/COBOL.ISR b/software/CPM/CPM07_COBOL80/COBOL.ISR deleted file mode 100644 index 6ad3a5036adb152391b8ae1b0520f8b9669e1f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 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 diff --git a/software/CPM/CPM07_COBOL80/IXSIO.INT b/software/CPM/CPM07_COBOL80/IXSIO.INT deleted file mode 100644 index 38fc5775b87e4893a75d8e5aa0270a815b659c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15896 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

    ^j;#l06L;z|f>>J79+-liSsMM6NT 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 diff --git a/software/CPM/CPM07_COBOL80/PI.CBL b/software/CPM/CPM07_COBOL80/PI.CBL deleted file mode 100644 index 4a952fb..0000000 --- a/software/CPM/CPM07_COBOL80/PI.CBL +++ /dev/null @@ -1,83 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. PI-CALC. - AUTHOR. PF/TR. - * - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - OBJECT-COMPUTER. MDS-800. - SPECIAL-NAMES. CONSOLE IS CRT. - * - DATA DIVISION. - WORKING-STORAGE SECTION. - * - 01 SCREEN PIC X(1920). - * - 01 DI-1 REDEFINES SCREEN. - 02 FILLER PIC X(160). - 02 DI-TX1 PIC X(160). - 02 DI-TX2 PIC X(13). - 02 DI-TERM PIC X(15). - 02 FILLER PIC X(136). - 02 DI-TX3 PIC X(6). - 02 DI-PI PIC X(15). - 02 FILLER PIC X(1415). - * - 01 DI-2 REDEFINES SCREEN. - 02 FILLER PIC X(333). - 02 DI-TERM2 PIC X(15). - 02 FILLER PIC X(142). - 02 DI-PI2 PIC X(15). - 02 FILLER PIC X(1415). - * - 01 WORK-AREA. - 02 PI PIC S9V9(14). - 02 TERM PIC S9V9(14). - 02 W PIC S9V9(14). - 02 N PIC 9999. - 02 N1 PIC 9999. - 02 N2 PIC 9999. - 02 ED PIC -9.9(12). - * - 01 CONSTANTS. - 02 TX1 PIC X(17) VALUE "CALCULATION OF PI". - 02 TX2 PIC X(12) VALUE "NEXT TERM IS". - 02 TX3 PIC X(5) VALUE "PI IS". - * - PROCEDURE DIVISION. - LA-START. - DISPLAY SPACE. - MOVE SPACE TO SCREEN. - MOVE TX1 TO DI-TX1. - MOVE TX2 TO DI-TX2. - MOVE TX3 TO DI-TX3. - MOVE 0.5 TO ED. - MOVE ED TO DI-TERM. - MOVE 3 TO ED. - MOVE ED TO DI-PI. - DISPLAY DI-1. - MOVE 0.5 TO PI. - MOVE 0.5 TO TERM. - MOVE 3 TO N. - LOOP. - MOVE N TO N2. - SUBTRACT 2 FROM N2. - MULTIPLY N2 BY N2. - MULTIPLY N2 BY TERM. - MOVE N TO N1. - SUBTRACT 1 FROM N1. - MULTIPLY N BY N1. - MULTIPLY 4 BY N1. - DIVIDE N1 INTO TERM. - IF TERM < 0.0000000000001 THEN GO TO HALT. - ADD TERM TO PI. - MOVE PI TO W. - MULTIPLY 6 BY W. - MOVE W TO ED. - MOVE ED TO DI-PI2. - MOVE TERM TO ED. - MOVE ED TO DI-TERM2. - DISPLAY DI-2. - ADD 2 TO N. - IF N < 100 GO TO LOOP. - HALT. - STOP RUN. diff --git a/software/CPM/CPM07_COBOL80/RUN.COM b/software/CPM/CPM07_COBOL80/RUN.COM deleted file mode 100644 index 5a7d2402461bcc822d79ae129756cad4888de66f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26282 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 diff --git a/software/CPM/CPM07_COBOL80/STOCK1.CBL b/software/CPM/CPM07_COBOL80/STOCK1.CBL deleted file mode 100644 index 3a73fd3..0000000 --- a/software/CPM/CPM07_COBOL80/STOCK1.CBL +++ /dev/null @@ -1,59 +0,0 @@ -000010 IDENTIFICATION DIVISION. -000020 PROGRAM-ID. STOCK-FILE-SET-UP. -000030 AUTHOR. MICRO FOCUS LTD. -000040 ENVIRONMENT DIVISION. -000050 CONFIGURATION SECTION. -000060 SOURCE-COMPUTER. MDS-800. -000070 OBJECT-COMPUTER. MDS-800. -000075 SPECIAL-NAMES. CONSOLE IS CRT. -000080 INPUT-OUTPUT SECTION. -000090 FILE-CONTROL. -000100 SELECT STOCK-FILE ASSIGN "STOCK.IT" -000110 ORGANIZATION INDEXED -000120 ACCESS DYNAMIC -000130 RECORD KEY STOCK-CODE. -000140 DATA DIVISION. -000150 FILE SECTION. -000160 FD STOCK-FILE; RECORD 32. -000170 01 STOCK-ITEM. -000180 02 STOCK-CODE PIC X(4). -000190 02 PRODUCT-DESC PIC X(24). -000200 02 UNIT-SIZE PIC 9(4). -000210 WORKING-STORAGE SECTION. -000220 01 SCREEN-HEADINGS. -000230 02 ASK-CODE PIC X(21) VALUE "STOCK CODE < >". -000240 02 FILLER PIC X(59). -000250 02 ASK-DESC PIC X(16) VALUE "DESCRIPTION <". -000260 02 SI-DESC PIC X(25) VALUE " >". -000270 02 FILLER PIC X(39). -000280 02 ASK-SIZE PIC X(21) VALUE "UNIT SIZE < >". -000290 01 ENTER-IT REDEFINES SCREEN-HEADINGS. -000300 02 FILLER PIC X(16). -000310 02 CRT-STOCK-CODE PIC X(4). -000320 02 FILLER PIC X(76). -000330 02 CRT-PROD-DESC PIC X(24). -000340 02 FILLER PIC X(56). -000350 02 CRT-UNIT-SIZE PIC 9(4). -000360 02 FILLER PIC X. -000370 PROCEDURE DIVISION. -000380 SR1. -000390 DISPLAY SPACE. -000400 OPEN I-O STOCK-FILE. -000410 DISPLAY SCREEN-HEADINGS. -000420 NORMAL-INPUT. -000430 MOVE SPACE TO ENTER-IT. -000440 DISPLAY ENTER-IT. -000450 CORRECT-ERROR. -000460 ACCEPT ENTER-IT. -000470 IF CRT-STOCK-CODE = SPACE GO TO END-IT. -000480 IF CRT-UNIT-SIZE NOT NUMERIC GO TO CORRECT-ERROR. -000490 MOVE CRT-PROD-DESC TO PRODUCT-DESC. -000500 MOVE CRT-UNIT-SIZE TO UNIT-SIZE. -000510 MOVE CRT-STOCK-CODE TO STOCK-CODE. -000520 WRITE STOCK-ITEM; INVALID GO TO CORRECT-ERROR. -000530 GO TO NORMAL-INPUT. -000540 END-IT. -000550 CLOSE STOCK-FILE. -000560 DISPLAY SPACE. -000570 DISPLAY "END OF PROGRAM". -000580 STOP RUN. diff --git a/software/CPM/CPM07_COBOL80/STOCK2.CBL b/software/CPM/CPM07_COBOL80/STOCK2.CBL deleted file mode 100644 index 46c1097..0000000 --- a/software/CPM/CPM07_COBOL80/STOCK2.CBL +++ /dev/null @@ -1,119 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. GOODS-IN. - AUTHOR. MICRO FOCUS LTD. - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. MDS-800. - OBJECT-COMPUTER. MDS-800. - SPECIAL-NAMES. CONSOLE IS CRT. - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT STOCK-FILE ASSIGN "STOCK.IT" - ORGANIZATION INDEXED - ACCESS DYNAMIC - RECORD KEY STOCK-CODE. - SELECT TRANS-FILE - ASSIGN "STOCK.TRS" - ORGANIZATION SEQUENTIAL. - / - DATA DIVISION. - FILE SECTION. - FD STOCK-FILE; RECORD 32. - 01 STOCK-ITEM. - 02 STOCK-CODE PIC X(4). - 02 STOCK-DESCRIPT PIC X(24). - 02 UNIT-SIZE PIC 9(4). - FD TRANS-FILE; RECORD 30. - 01 TRANS-RECORD. - 02 TRAN-NO PIC 9(4). - 02 TF-STOCK-CODE PIC X(4). - 02 TF-QUANTITY PIC 9(8). - 02 TF-ORDER-NO PIC X(6). - 02 TF-DATE PIC X(8). - WORKING-STORAGE SECTION. - 01 STOCK-INWARD-FORM. - 02 PRG-TITLE PIC X(20) VALUE " GOODS INWARD". - 02 FILLER PIC X(140). - 02 CODE-HDNG PIC X(23) VALUE "STOCK CODE < >". - 02 FILLER PIC X(57). - 02 ORDER-NO-HDNG PIC X(23) VALUE "ORDER NO < >". - 02 FILLER PIC X(57). - 02 DATE-HDNG PIC X(24) VALUE "DELIVERY DATE MM/DD/YY". - 02 FILLER PIC X(56). - 02 UNITS-HDNG PIC X(23) VALUE "NO OF UNITS < >". - 01 STOCK-RECEIPT REDEFINES STOCK-INWARD-FORM. - 02 FILLER PIC X(178). - 02 SR-STOCK-CODE PIC X(4). - 02 FILLER PIC X(74). - 02 SR-ORDER-NO PIC X(6). - 02 FILLER PIC X(73). - 02 SR-DATE. - 04 SR-MM PIC 99. - 04 FILLER PIC X. - 04 SR-DD PIC 99. - 04 FILLER PIC X. - 04 SR-YY PIC 99. - 02 FILLER PIC X(75). - 02 SR-NO-OF-UNITS PIC 9(4). - 01 CONFIRM-MSG REDEFINES STOCK-INWARD-FORM. - 02 FILLER PIC X(184). - 02 CM-STOCK-DESCRIPT PIC X(24). - 02 FILLER PIC X(352). - 02 UNIT-SIZE-HDNG PIC X(18). - 02 CM-UNIT-SIZE PIC 9(4). - 02 FILLER PIC X(58). - 02 QUANTITY-HDNG PIC X(14). - 02 CM-QUANTITY PIC 9(8). - 02 FILLER PIC X(58). - 02 OK-HDNG PIC X(3). - 02 CM-Y-OR-N PIC X. - / - PROCEDURE DIVISION. - START-PROC. - OPEN I-O STOCK-FILE. - OPEN OUTPUT TRANS-FILE. - DISPLAY SPACE. - MOVE 0 TO TRAN-NO. - DISPLAY STOCK-INWARD-FORM. - GET-INPUT. - ACCEPT STOCK-RECEIPT. - IF SR-STOCK-CODE = SPACE GO TO END-IT. - IF SR-NO-OF-UNITS NOT NUMERIC GO TO INVALID-ENTRY. - MOVE SR-STOCK-CODE TO STOCK-CODE. - READ STOCK-FILE; INVALID GO TO INVALID-CODE. - *VALID ENTRY, CALCULATE AND DISPLAY TOTAL QUANTITY IN TO CONFIRM - MOVE STOCK-DESCRIPT TO CM-STOCK-DESCRIPT. - MOVE "UNIT SIZE" TO UNIT-SIZE-HDNG. - MOVE UNIT-SIZE TO CM-UNIT-SIZE. - MOVE "QUANTITY IN" TO QUANTITY-HDNG. - MOVE UNIT-SIZE TO TF-QUANTITY. - MULTIPLY SR-NO-OF-UNITS BY TF-QUANTITY. - MOVE TF-QUANTITY TO CM-QUANTITY. - MOVE "OK?" TO OK-HDNG. - DISPLAY CONFIRM-MSG. - ACCEPT CM-Y-OR-N AT 1004. - IF CM-Y-OR-N = "Y" PERFORM WRITE-TRANS. - *CLEAR INPUT DATA ON SCREEN - MOVE SPACE TO CONFIRM-MSG. - MOVE "MM/DD/YY" TO SR-DATE. - DISPLAY STOCK-RECEIPT. - DISPLAY CONFIRM-MSG. - GO TO GET-INPUT. - WRITE-TRANS. - ADD 1 TO TRAN-NO. - MOVE STOCK-CODE TO TF-STOCK-CODE. - MOVE SR-ORDER-NO TO TF-ORDER-NO. - MOVE GET-INPUT TO TF-DATE. - WRITE TRANS-RECORD. - INVALID-ENTRY. - DISPLAY "NON-NUMERIC NO OF UNITS" AT 0325. - GO TO GET-INPUT. - INVALID-CODE. - DISPLAY "INVALID CODE " AT 0325. - GO TO GET-INPUT. - END-IT. - CLOSE STOCK-FILE. - CLOSE TRANS-FILE. - DISPLAY SPACE. - DISPLAY "END OF PROGRAM". - STOP RUN. diff --git a/software/CPM/CPM07_COBOL80/TESTCALL.CBL b/software/CPM/CPM07_COBOL80/TESTCALL.CBL deleted file mode 100644 index ddc74b8..0000000 --- a/software/CPM/CPM07_COBOL80/TESTCALL.CBL +++ /dev/null @@ -1,19 +0,0 @@ -000000****************************************************************** -000000* -000000* Program "Testcall" to demonstrate L/II COBOL calling mechanism -000000* -000000****************************************************************** -000000 Working-storage section. -000000 01 progname pic x(4). -000000 01 message-size pic 9(2) comp value 60. -000000 01 message-text pic x(60) value -000000 "This message is sent via a called program to the screen.". -000000 Procedure division. -000000 move "call" to progname. -000000 call progname using message-size,message-text -000000 overflow display "call overflowed". -000000****************************************************************** -000000* -000000* End of demonstration program "Testcall" -000000* -000000****************************************************************** diff --git a/software/CPM/CPM07_COBOL80/TESTCALL.INT b/software/CPM/CPM07_COBOL80/TESTCALL.INT deleted file mode 100644 index 83e25e34d6ced914bc376ed2e643912aa7163372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmY#T7zMaPfPv}%e+C9dB?bnD1|Vh-VGIOO*gyk=0$A9}+22Zm5y)nY0P-7v7^tfq zL}3F6U7l9Bok2$#n~;pmVujq);^M^gR0SZjI5n?Cp)4~|AyFYYF()TAMWLW5KfNe1 zSD_?dp(G#vWxxk6(<8N-$2{ zFJSDQXIS72@-Z{R6=nt|CIKeFWMB*)UEl{2RLCz&ElSJDFHcQbP|w)&>ocR$fg4xX t-8eA{21f`$GTVPp_WjQo2IOsabYx&~bYx;w(bHl1|DTBmDCWr60070s!?XYZ diff --git a/software/CPM/CPM08_Z80FORTH/%DISC.DOC b/software/CPM/CPM08_Z80FORTH/%DISC.DOC deleted file mode 100644 index cfd2214..0000000 --- a/software/CPM/CPM08_Z80FORTH/%DISC.DOC +++ /dev/null @@ -1,27 +0,0 @@ - Size Recs Bytes Ext Acc - 0 0 0k 1 R/W E:%DISC.DOC - 17 17 3k 1 R/O E:CONPRTIO.280 - 38 38 5k 1 R/O E:DISCIO.280 - 18 18 3k 1 R/O E:EDITOR.DOC - 1441 537 58k 6 R/O E:SCREENS.FRT - 64 64 8k 1 R/O E:STARTUP.FRT - 52 52 7k 1 R/O E:280FORTH.COM - 16 16 2k 1 R/O E:280FORTH.UPD - 425 425 54k 4 R/O E:280FORTH.280 - - - -%DISC .DOC this text -CONPRTIO.280 Z280 fig-FORTH console driver (*include file) -DISCIO .280 Z280 fig-FORTH disc driver (*include file) -EDITOR .DOC fig-FORTH editor commands -SCREENS .FRT misc. screens, EDITOR from SCR #7. ASSEMBLER from SCR #13. - MODEM7 from SCR # 18. - Random access file, copy to empty disc before use. -STARTUP .FRT more screens -280FORTH.COM Z280 fig-FORTH 1.1a -280FORTH.UPD Deviations from Installation Manual -280FORTH.280 Source, *include-s CONPRTIO.FTH & DISCIO.FTH - -Invoke the desired screens file at CCP level, e.g. A>280FORTH B:SCREENS.FRT - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH b/software/CPM/CPM08_Z80FORTH/280FORTH deleted file mode 100644 index b936b58..0000000 --- a/software/CPM/CPM08_Z80FORTH/280FORTH +++ /dev/null @@ -1,4071 +0,0 @@ - title < Z280 fig-FORTH 1.1 a > - subttl Adaptive version -; -; -; Modified from Z80 fig-FORTH 1.1h by EHR 880830 -; Modified frm FIG document keyed by Dennis L. Wilson 800907 -; Converted frm "8080 FIG-FORTH VERSION A0 15SEP79" -; -; fig-FORTH release 1.1 for the 8080 processor. -; -; ALL PUBLICATIONS OF THE FORTH INTEREST GROUP -; ARE PUBLIC DOMAIN. THEY MAY BE FURTHER -; DISTRIBUTED BY THE INCLUSION OF THIS CREDIT NOTICE: -; -; This publication has been made available by the -; Forth Interest Group -; P.O.Box 1105 -; San Carlos, CA 94070 -; U.S.A. -; -; Implementation on 8080 by: -; John Cassady -; 339 15th Street -; Oakland, CA 94612 -; U.S.A -; on 790528 -; Modified by: -; Kim Harris -; Acknowledgements: -; George Flammer -; Robt. D. Villwock -; ---------------------------------------------------------------------- -; Z80 Version for Cromemco CDOS & Digital Research CP/M by: -; Dennis Lee Wilson c/o -; Aristotelian Logicians -; 2631 East Pinchot Avenue -; Phoenix, AZ 85016 -; U.S.A. -; ---------------------------------------------------------------------- -; The 2 byte Z80 code for Jump Relative (JR) has been substituted for -; the 3 byte Jump (JP) wherever practical. The port I/O words P@ & P! -; have been made ROMable by use of Z80 instructions. -; ---------------------------------------------------------------------- -; Further modifications (marked ;/) by: -; Edmund Ramm -; P.O.Box 38 -; 2358 Kaltenkirchen -; Fed. Rep. of Germany 840418 -; -; 850419 changed * (star) -; 850507 added 0<>, 0>, TUCK, NIP, -ROT, CSWAP, PICK -; 850511 added -CMOVE -; -; ----------------------------------------------------------------------------- -; Disc I/O has been modified a la Albert van der Horst (HCCH) to employ -; CP/M 2.x's random access feature. -; ----------------------------------------------------------------------------- -; ----------------------------------------------------------------------------- -; -; Z280 specifics -; -; -iopreg equ 08h ; i/o page register -; -config0 equ 0e0h ; c/t 0 configuration register -cntrl0 equ 0e1h ; c/t 0 command/status register -tcon0 equ 0e2h ; c/t 0 time constatnt register -count0 equ 0e3h ; c/t 0 count-time register -config1 equ 0e8h ; c/t 1 configuration register -cntrl1 equ 0e9h ; c/t 1 command/status register -tcon1 equ 0eah ; c/t 1 time constant register -count1 equ 0ebh ; c/t 1 count-time register -; -; ----------------------------------------------------------------------------- -; -; Release & Version numbers -; -figrel equ 1 ;FIG RELEASE # -figrev equ 1 ;FIG REVISION # -usrver equ 61h ;USER VERSION # a by EHR -; -;Console & printer drivers are in external source named -;CONPRTIO.FTH & disc drivers in DISCIO.FTH. It has 4 screen -;buffers & end of memory is set to FBASE from locn. 0007H. - page -; ASCII characters used -; -abl equ 20h ;BLANK -acr equ 0dh ;CR -adot equ 2eh ;. -bell equ 07h ;^G -bsin equ 08h ;backspace chr = ^H -bsout equ 08h -dle equ 10h ;^P -lf equ 0ah ;^J -ff equ 0ch ;^L -; -; Memory allocation -; -bdoss equ 0005h ;/ system entry -nscr equ 4 ; # of 1024 byte screens -kbbuf equ 128 ; bytes/disc buffer -us equ 40h ; user variables space -rts equ 400h ; Return Stack & term buff space -co equ kbbuf+4 ; Disc buff + 2 header + 2 tail -nbuf equ nscr*400h/kbbuf ; # of buffers -bufsiz equ co*nbuf ;/ total disc buffer size - page - aseg - .z280 -; - org 0100h -; -orig: - nop - jp cld ; vector to cold start - nop - jp wrm ; vector to warm start - defb figrel ; fig release # - defb figrev ; fig revision # - defb usrver ; user version # - defb 0eh ; implementation attributes -; -; -; -; 0eh = 0000:1110 -; --------- -; B +ORIGIN ...W:IEBA -; -; W: 0=above sufficient -; 1=other differences exist -; I: Interpreter is 0=pre- -; 1=post incrementing -; E: Addr must be even: 0 yes -; 1 no -; B: High byte @ 0=low addr. -; 1=high addr. -; A: CPU Addr. 0=BYTE -; 1=WORD -; -; -; - defw task-7 ; topmost word in FORTH vocabulary - defw bsin ; backspace chr -upinit: defw 0 ;/ init (up) -; -; * Following used by COLD; must be in same order as user variables * -; -s0init: defw 0 ;/ init (s0) -r0init: defw 0 ;/ init (r0) -tibini: defw 0 ;/ init (TIB) - defw 1fh ; init (WIDTH) - defw 0 ; init (WARNING) - defw initdp ; init (FENCE) - defw initdp ; init (dp) - defw forth+8 ; init (VOC-LINK) -; -; * END DATA USED BY COLD * -; - defw 0018h,0f600h ; Z280 CPU name (hw,lw) - ; (32 bit base 36 integer) - page -; REGISTERS -; -; FORTH Z80 FORTH PRESERVATION RULES -; ----- --- ----------------------- -; IP BC should be preserved -; accross FORTH words. -; W DE sometimes output from -; NEXT, may be altered -; b4 JP'ing to NEXT, -; input only when -; "DPUSH" called. -; SP SP should be used only as -; Data Stack accross -; FORTH words, may be -; used within FORTH -; words if restored -; b4 "NEXT" -; HL Never output frm NEXT -; input only when -; "HPUSH" called -; -; -up: defw 0 ;/ user area ptr -rpp: defw 0 ;/ return stack ptr -buf1: defw 0 ;/ address of 1st disc buffer -; -; -; COMMENT CONVENTIONS: -; -; == means "is equal to" -; <-- means assignment -; #NAME = value of name -; NAME = contents @ name -; (NAME) = contents of cell addressed by name -; cfa = code field address -; lfa = link field address -; nfa = name field address -; pfa = parameter field address -; s1 = 1st word of parameter stack -; s2 = 2nd -"- of -"- -"- -; r1 = 1st -"- of return stack -; r2 = 2nd -"- of -"- -"- -; ( above Stack posn. valid b4 & after execution of any word, not during) -; -; lsb = least significant bit -; msb = most significant bit -; lb = low byte -; hb = high byte -; lw = low word -; hw = high word -; (May be used as suffix to above names) - page -; FORTH ADDRESS INTERPRETER -; POST INCREMENTING VERSION -; -; -; -dpush: - push de -hpush: - push hl ; iy points here -next: - ld h,b ;/ w <-- (ip) ix points here - ld l,c ;/ - ldw hl,(hl) ;/ (hl) --> cfa - inc bc - inc bc ;/ ip += 2 -next1: - ldw de,(hl) ;/ pc <-- (w) - ex de,hl - inc de - jp (hl) ; note: de <-- cfa + 1 -; -; -jnext macro - jp (ix) - endm -; -jhpush macro - jp (iy) - endm -; - page -; FORTH DICTIONARY -; DICTIONARY FORMAT: -; -; BYTE -; ADDRESS NAME CONTENTS -; ------- ---- -------- -; (MSB=1 -; (P=PRECEDENCE BIT -; (S=SMUDGE BIT -; NFA NAME FIELD 1PS MSB=0, NAME'S 1st CHAR -; 0<2CHAR> -; ... -; 1 MSB=1, NAME'S LAST CHAR -; LFA LINK FIELD =PREVIOUS WORD'S NFA -; -;LABEL: CFA CODE FIELD =ADDR CPU CODE -; -; PFA PARAMETER <1PARAM> 1st PARAMETER BYTE -; FIELD <2PARAM> -; ... -; -; -; -dp0: - defb 83h ; LIT - defc 'LIT' - defw 0 ; lfa == 0 marks end of dictionary -lit: - defw $+2 ; s1 <-- (ip) - ld h,b - ld l,c - ldw hl,(hl) ; hl <-- (ip) = literal - inc bc ;/ - inc bc ;/ ip += 2 - jhpush ; s1 <-- hl -; -; - defb 87h ; EXECUTE - defc 'EXECUTE' - defw lit-6 -exec: - defw $+2 - pop hl - jp next1 -; -; - defb 86h ; BRANCH - defc 'BRANCH' - defw exec-0ah -bran: - defw $+2 ; ip += (ip) -bran1: - ld h,b - ld l,c ; hl <-- ip - addw hl,(hl) ; hl <-- ip + branch offset - ld c,l - ld b,h ; ip += branch offset - jnext -; -; - defb 87h ; 0BRANCH - defc '0BRANCH' - defw bran-9 -zbran: - defw $+2 - pop hl - ld a,l - or h - jr z,bran1 ; branch if if s1 == 0 - inc bc ; else skip branch offset - inc bc - jnext -; -; - defb 86h ; (LOOP) - defc '(LOOP)' - defw zbran-0ah -xloop: - defw $+2 - ld hl,(rpp) ; (hl) --> index = r1 - incw (hl) ;/ index += 1 - ldw de,(hl) ;/ de <-- new index - inc hl ;/ - inc hl ;/ hl --> limit(lb) - ld a,e - sub (hl) - ld a,d - inc hl ; hl --> limit(hb) - sbc a,(hl) ; index < limit? - jp m,bran1 ; yes, loop again - inc hl ; no, done - ld (rpp),hl ; discard r1 & r2 - inc bc - inc bc ; skip branch offset - jnext -; -; - defb 87h ; (+LOOP) - defc '(+LOOP)' - defw xloop-9 -xploo: - defw $+2 - pop de ; de <-- increment - ld hl,(rpp) ; hl --> index - ld a,(hl) ; index += increment - add a,e - ld (hl),a - ld e,a - inc hl - ld a,(hl) - adc a,d - ld (hl),a - inc hl ; (hl) --> limit - inc d - dec d - ld d,a ; de <-- new index - jp m,xloo2 ; if incr > 0 - ld a,e - sub (hl) ; then a <-- index - limit - ld a,d - inc hl - sbc a,(hl) - jp xloo3 - -xloo2: - ld a,(hl) ; else a <-- limit - index - sub e - inc hl - ld a,(hl) - sbc a,d -; ; if a < 0 -xloo3: - jp m,bran1 ; then loop again - inc hl ; else done - ld (rpp),hl ; discard r1 & r2 - inc bc ; skip branch offset - inc bc - jnext -; -; - defb 84h ; (DO) - defc '(DO)' - defw xploo-0ah -xdo: - defw $+2 - pop de ; de <-- initial index - ld hl,(rpp) ; hl <-- rp - dec hl - dec hl - pop (hl) ;/ r2 <-- limit - dec hl - dec hl - ldw (hl),de ;/ r1 <-- initial index - ld (rpp),hl ; rp -= 4 - jnext -; -; - defb 81h ; I - defc 'I' - defw xdo-7 -ido: - defw $+2 - ld hl,(rpp) - push (hl) ;/ s1 <-- r1, r1 unchanged - jnext -; -; - defb 85h ; DIGIT - defc 'DIGIT' - defw ido-4 -digit: - defw $+2 - pop hl ; l <-- s1.lb = base value - pop de ; e <-- s2.lb = chr to be converted - ld a,e ; a <-- chr - sub '0' ; >= 0? - jr c,digi2 ;/ < 0 is invalid - cp 0ah ; > 9? - jr c,digi1 ;/ no, test base value - sub 07h ; gap between '9' & 'A', nw 'A'=0ah - cp 0ah ; >= 'A'? - jr c,digi2 ;/ chrs btwn '9' & 'A' are invalid -digi1: - cp l ; < base value? - jr nc,digi2 ;/ no, invalid - ld e,a ; s2 <-- de = converted digit - ld hl,0001h ; s1 <-- true - jp dpush -; -digi2: - ld l,h ; hl <-- false - jhpush ; s1 <-- false -; -; - defb 86h ; (FIND) (2-1)FAILURE - defc '(FIND)' ; (2-3)SUCCESS - defw digit-8 -pfind: - defw $+2 - pop de ; de <-- nfa -pfin1: - pop hl ; hl <-- string addr - push hl ; save for next iteration - ld a,(de) - xor (hl) ; filter differences - and 3fh ; mask msb & precedence bit - jr nz,pfin4 ; lengths differ -pfin2: - inc hl ; hl --> next string chr - inc de ; de --> next name field chr - ld a,(de) - xor (hl) ; filter differences - add a,a ; shift msbit into carry - jr nz,pfin3 ; no match - jr nc,pfin2 ; match so far, loop agn - ld hl,0005h ; string matches - add hl,de ; (sp) <-- pfa - ex (sp),hl -pfin6: - dec de ; de --> nfa - ld a,(de) - or a ; msb=1? =length byte - jp p,pfin6 ; no, try next chr - ld e,a ; e <-- length byte - ld d,00h - ld hl,0001h ; hl <-- true - jp dpush ; name field found, return -; -; above name field not a match, try next one -; -pfin3: - jr c,pfin5 ; carry=end of name field -pfin4: - inc de ; find name field end - ld a,(de) - or a ; msb=1? - jp p,pfin4 ; no, loop -pfin5: - inc de ; de <-- lfa - ex de,hl - ldw de,(hl) ;/ de <-- lfa - ld a,d - or e ; end of dictionary (lfa = 0)? - jr nz,pfin1 ; no, try previous definition - pop hl ; drop string address - ld hl,0 ; hl <-- false - jhpush ; no match found, return -; -; - defb 87h ; ENCLOSE - defc 'ENCLOSE' - defw pfind-9 -encl: - defw $+2 - pop de ; de <-- s1 = delimiter chr - pop hl ; hl <-- s2 = addr of text to scan - push hl ; s4 <-- addr - ld a,e - ld d,a ; d <-- delim chr - ld e,-1 ; init chr offset counter - dec hl ; hl <-- addr - 1 -encl1: - inc hl ; skip over leading delim chrs - inc e - cp (hl) ; delim chr? - jr z,encl1 ; yes, loop - ld d,0 - push de ; s3 <-- e = offset to 1st non delim - ld d,a ; d <-- delim chr - ld a,(hl) - and a ; 1st non-delim=null? - jr nz,encl2 ; no - ld d,0 ; yes - inc e - push de ; s2 <-- offset to byte following null - dec e - push de ; s1 <-- offset to null - jnext -; -encl2: - ld a,d ; A <-- delim chr - inc hl ; hl <-- next chr's address - inc e ; e <-- offset to next chr - cp (hl) ; delim chr? - jr z,encl4 ; yes - ld a,(hl) - and a ; null? - jr nz,encl2 ; no, continue scan -encl3: - ld d,0 - push de ; s2 <-- offset to null - push de ; s1 <-- offset to null - jnext -; -encl4: - ld d,0 - push de ; s2 <-- offset to byte following text - inc e - push de ; s1 <-- offset 2 bytes aft end of word - jnext -; -; - defb 84h ; EMIT - defc 'EMIT' - defw encl-0ah -emit: - defw docol - defw pemit - defw one,outt - defw pstor,semis -; -; - defb 83h ; KEY - defc 'KEY' - defw emit-7 -key: - defw $+2 - jp pkey -; -; - defb 89h ; ?TERMINAL - defc '?TERMINAL' - defw key-6 -qterm: - defw $+2 - ld hl,0 - jp pqter -; -; - defb 82h ; CR - defc 'CR' - defw qterm-0ch -cr: - defw $+2 - jp pcr -; -; - defb 85h ; CMOVE - defc 'CMOVE' - defw cr-5 -cmove: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- s1 = # of chrs - pop de ; de <-- s2 = dest addr - pop hl ;/ hl <-- s3 = source addr - ld a,b - or c ; bc=0? - jr z,cmove1 ; yes, nothing to move - ldir ;/ xfer string -cmove1: - exx ;/ restore ip - jnext -; -; - defb 86h ;/ -CMOVE ( from to count --- ) - defc '-CMOVE' - defw cmove-8 -bcmov: - defw $+2 - exx ; save ip - pop bc ; bc <-- count - pop de ; de <-- destination - pop hl ; hl <-- source - ld a,b - or c ; bc =0? - jr z,bcmov1 ; yes, nothing to move - add hl,bc - dec hl ; hl --> hi end of source block - ex de,hl - add hl,bc - dec hl - ex de,hl ; de --> hi end of dest. block - lddr ; (de) <-- (hl), --hl,bc until bc=0 -bcmov1: - exx ; restore ip - jnext -; -; - defb 82h ; U* 16*16 unsigned multiply - defc 'U*' ; with 32 bit result - defw bcmov-9 -ustar: - defw $+2 - pop de ; de <-- multiplier - pop hl ; hl <-- multiplicant - multuw hl,de ;/ - ex de,hl ;/ de <-- product.lw, hl <-- product.hw - jp dpush ; s2,s1 <-- product.lw,hw -; -; - defb 82h ; U/ ( ud u1 -- urem uq ) - defc 'U/' - defw ustar-5 -uslas: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- divisor - pop hl ; hl <-- dividend.hw - pop de ; de <-- dividend.lw - cpw hl,bc ;/ dividend.hw >= divisor? - jr c,usla1 ; no, go ahead - ld hl,0ffffh ; yes, overflow - ld d,h - ld e,l ;/ set rem & quot to max - jr usla2 -usla1: - ex de,hl ;/ de,hl <-- dividend.hw,lw - divuw dehl,bc ;/ de <-- remainder, hl <-- quotient -usla2: - push de ;/ s2 <-- remainder - push hl ;/ s1 <-- quotient - exx ;/ restore ip - jnext -; -; - defb 83h ; AND - defc 'AND' - defw uslas-5 -andd: - defw $+2 ; s1 <-- s1 AND s2 - pop de - pop hl - ld a,e - and l - ld l,a - ld a,d - and h - ld h,a - jhpush -; -; - defb 82h ; OR - defc 'OR' - defw andd-6 -orr: - defw $+2 ; s1 <-- s1 OR s2 - pop de - pop hl - ld a,e - or l - ld l,a - ld a,d - or h - ld h,a - jhpush -; -; - defb 83h ; XOR - defc 'XOR' - defw orr-5 -xorr: - defw $+2 ; s1 <-- s1 XOR s2 - pop de - pop hl - ld a,e - xor l - ld l,a - ld a,d - xor h - ld h,a - jhpush -; -; - defb 83h ; SP@ - defc 'SP@' - defw xorr-6 -spat: - defw $+2 - ld hl,0 - add hl,sp ; hl <-- sp - jhpush ; s1 <-- sp -; -; - defb 83h ; SP! - defc 'SP!' - defw spat-6 -spsto: - defw $+2 ; sp <-- s0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,6 - add hl,de ; hl --> s0 - ldw sp,(hl) ;/ sp <-- s0 - jnext -; -; - defb 83h ; RP@ - defc 'RP@' - defw spsto-6 -rpat: - defw $+2 - ld hl,(rpp) - jhpush ; s1 <-- rp -; -; - defb 83h ; RP! - defc 'RP!' - defw rpat-6 -rpsto: - defw $+2 ; rp <-- r0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,0008h - add hl,de ; hl --> r0 - ldw hl,(hl) ;/ hl <-- r0 - ld (rpp),hl ;/ rp <-- r0 - jnext -; -; - defb 82h ; ;S - defc ';S' - defw rpsto-6 -semis: - defw $+2 ; ip <-- r1 - ld hl,(rpp) - ldw bc,(hl) ;/ bc <-- r1 - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 85h ; LEAVE - defc 'LEAVE' - defw semis-5 -leave: - defw $+2 ; limit <-- index - ld hl,(rpp) - ldw de,(hl) ;/ de <-- r1 (= index) - inc hl - inc hl - ldw (hl),de ;/ r2 (= limit) <-- index - jnext -; -; - defb 82h ; >R - defc '>R' - defw leave-8 -tor: - defw $+2 - ld hl,(rpp) - dec hl - dec hl - pop (hl) ;/ r1 <-- s1 - ld (rpp),hl ; rp -= 2 - jnext -; -; - defb 82h ; R> - defc 'R>' - defw tor-5 -fromr: - defw $+2 - ld hl,(rpp) - push (hl) ;/ s1 <-- r1 - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 81h ; R - defc 'R' - defw fromr-5 -rr: - defw ido+2 -; -; - defb 82h ; 0= - defc '0=' - defw rr-4 -zequ: - defw $+2 - pop de - ld hl,0 - cpw hl,de ;/ - jr nz,zequ1 - inc l ; hl <-- true -zequ1: - jhpush -; -; - defb 83h ;/ 0<> - defc '0<>' - defw zequ-5 -znequ: - defw $+2 - pop de - ld hl,0 - cpw hl,de ;/ - jr z,znequ1 - inc l ; hl <-- true -znequ1: - jhpush -; -; - defb 82h ; 0< - defc '0<' - defw znequ-6 -zless: - defw $+2 - pop af ;/ a <-- s1.hb - rla ;/ carry <-- bit 7 - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry - jhpush -; -; - defb 82h ;/ 0> - defc '0>' - defw zless-5 -zgt: - defw $+2 - pop de - ld hl,0 - cpw hl,de ;/ - jp p,zgt1 ;/ <= 0 - jp pe,zgt1 ;/ 8000h special case - inc l ;/ hl <-- true -zgt1: - jhpush -; -; - defb 81h ;+ - defc '+' - defw zgt-5 -plus: - defw $+2 - pop de - pop hl - add hl,de - jhpush -; -; - defb 82h ; D+ ( d1l d1h d2l d2h -- d3l d3h) - defc 'D+' - defw plus-4 -dplus: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- d2.hw - pop hl ; hl <-- d2.lw - pop af ;d af <-- d1.hw - pop de ; de <-- d1.lw - push af ;/ s1 <-- d1.hw - add hl,de ; hl <-- d2.lw + d1.lw (= d3.lw) - ex de,hl ; de <-- d3.lw - pop hl ; hl <-- d1.hw - adc hl,bc ;/ hl <-- d1.hw + d2.hw +carry (=d3.hw) - push de ; s2 <-- d3.lw - push hl ;/ s1 <-- d3.hw - exx ;/ restore ip - jnext -; -; - defb 85h ; MINUS - defc 'MINUS' - defw dplus-5 -minus: - defw $+2 - pop hl ;/ - neg hl ;/ - jhpush -; -; - defb 86h ; DMINUS - defc 'DMINUS' - defw minus-8 -dminu: - defw $+2 - exx ;/ save ip - pop de ;/ de <-- d1.hw - pop bc ;/ bc <-- d1.lw - ld hl,0 ;/ - subw hl,bc ;/ - push hl ; s2 <-- d2.lw - ld hl,0 ;/ - sbc hl,de ;/ - push hl ; s1 <-- d2.hw - exx ;/ - jnext -; -; - defb 84h ; OVER - defc 'OVER' - defw dminu-9 -over: - defw $+2 - ldw hl,(sp+2) ;/ - jhpush ;/ -; -; - defb 84h ; DROP - defc 'DROP' - defw over-7 -drop: - defw $+2 - inc sp - inc sp ;/ faster on z280 than dummy pop - jnext -; -; - defb 84h ; SWAP - defc 'SWAP' - defw drop-7 -swap: - defw $+2 - pop hl - ex (sp),hl - jhpush -; -; - defb 83h ; DUP - defc 'DUP' - defw swap-7 -dup: - defw $+2 - ldw hl,(sp+0) ;/ - jhpush -; -; - defb 84h ;/ TUCK ( n1 n2 --- n2 n1 n2) - defc 'TUCK' - defw dup-6 -tuck: - defw $+2 - pop hl ;/ hl <-- s1 - pop de ;/ de <-- s2 - push hl ;/ s3 <-- hl - jp dpush -; -; - defb 83h ;/ NIP ( n1 n2 --- n2) - defc 'NIP' - defw tuck-7 -nip: - defw $+2 - pop hl ; hl <-- s1 - ldw (sp+0),hl ;/ s1 <-- hl - jnext -; -; - defb 84h ;/ -ROT ( n1 n2 n3 --- n3 n1 n2) - defc '-ROT' - defw nip-6 -mrot: - defw $+2 - pop hl - pop de - ex (sp),hl - ex de,hl - jp dpush -; -; - defb 85h ;/ CSWAP ( n1 --- n1, bytes swapped) - defc 'CSWAP' - defw mrot-7 -cswap: - defw $+2 - pop hl - ex h,l ;/ - jhpush -; -; - defb 84h ;/ PICK ( nn...n0 k --- nn..n0 nk) - defc 'PICK' - defw cswap-8 -pick: - defw $+2 - pop hl ; hl <-- depth - add hl,hl ; adjust to word size - add hl,sp ; offset into stack - push (hl) ;/ - jnext -; -; - defb 84h ; 2DUP - defc '2DUP' - defw pick-7 -tdup: - defw $+2 - pop hl - pop de - push de - push hl - jp dpush -; -; - defb 82h ; +! - defc '+!' - defw tdup-7 -pstor: - defw $+2 - pop hl ; hl --> variable - pop de ; de <-- number - ld a,(hl) - add a,e - ld (hl),a - inc hl - ld a,(hl) - adc a,d - ld (hl),a ; (hl) += number - jnext -; -; - defb 86h ; TOGGLE - defc 'TOGGLE' - defw pstor-5 -toggl: - defw $+2 - pop de ; e <-- bit pattern - pop hl ; hl --> address - ld a,(hl) - xor e - ld (hl),a - jnext -; -; - defb 81h ; @ - defc '@' - defw toggl-9 -at: - defw $+2 - pop hl - push (hl) ;/ - jnext -; -; - defb 82h ; C@ - defc 'C@' - defw at-4 -cat: - defw $+2 - pop hl - ld l,(hl) - ld h,0 - jhpush -; -; - defb 82h ; 2@ - defc '2@' - defw cat-5 -tat: - defw $+2 - pop hl ; hl --> address - ldw de,(hl) ;/ de <-- d.hw - inc hl - inc hl ; hl --> d.lw - push (hl) ;/ s2 <-- d.lw - push de ;/ s1 <-- d.hw - jnext -; -; - defb 81h ; ! - defc '!' - defw tat-5 -store: - defw $+2 - pop hl ; hl --> address - pop (hl) ;/ - jnext -; -; - defb 82h ; C! - defc 'C!' - defw store-4 -cstor: - defw $+2 - pop hl ; hl --> address - pop de ; e <-- char - ld (hl),e - jnext -; -; - defb 82h ; 2! - defc '2!' - defw cstor-5 -tstor: - defw $+2 - pop hl ; hl --> address - pop (hl) ;/ store d.hw - inc hl - inc hl - pop (hl) ;/ store d.lw - jnext -; -; - defb 0c1h ; : - defc ':' - defw tstor-5 -colon: - defw docol - defw qexec - defw scsp - defw curr - defw at - defw cont - defw store - defw creat - defw rbrac - defw pscod -docol: - ld hl,(rpp) - dec hl - dec hl - ldw (hl),bc ;/ save return address - ld (rpp),hl - inc de - ld c,e - ld b,d - jnext -; -; - defb 0c1h ; ; - defc ';' - defw colon-4 -semi: - defw docol - defw qcsp - defw comp - defw semis - defw smudg - defw lbrac - defw semis -; -; - defb 84h ; NOOP - defc 'NOOP' - defw semi-4 -noop: - defw docol - defw semis -; -; - defb 88h ; CONSTANT - defc 'CONSTANT' - defw noop-7 -con: - defw docol - defw creat - defw smudg - defw comma - defw pscod -docon: - inc de - ex de,hl - push (hl) ;/ - jnext -; -; - defb 88h ; VARIABLE - defc 'VARIABLE' - defw con-0bh -var: - defw docol - defw con - defw pscod -dovar: - inc de - push de - jnext -; -; - defb 84h ; USER - defc 'USER' - defw var-0bh -user: - defw docol - defw con - defw pscod -douse: - inc de - ex de,hl - ld l,(hl) ;/ - ld h,0 ;/ - addw hl,(up) ;/ - jhpush -; -; - defb 81h ; 0 - defc '0' - defw user-7 -zero: - defw $+2 ;/ - push 0000h ;/ - jnext -; -; - defb 81h ; 1 - defc '1' - defw zero-4 -one: - defw $+2 ;/ - push 0001h ;/ - jnext -; -; - defb 81h ; 2 - defc '2' - defw one-4 -two: - defw $+2 ;/ - push 0002h ;/ - jnext -; -; - defb 81h ; 3 - defc '3' - defw two-4 -three: - defw $+2 ;/ - push 0003h ;/ - jnext -; -; - defb 82h ; BL - defc 'BL' - defw three-4 -bl: - defw docon - defw 20h -; -; - defb 83h ; C/L - defc 'C/L' - defw bl-5 -csll: - defw docon - defw 64 -; -; - defb 85h ; FIRST - defc 'FIRST' - defw csll-6 -first: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; LIMIT - defc 'LIMIT' - defw first-8 -limit: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; B/BUF - defc 'B/BUF' - defw limit-8 -bbuf: - defw docon - defw kbbuf -; -; - defb 85h ; B/SCR - defc 'B/SCR' - defw bbuf-8 -bscr: - defw docon - defw 400h/kbbuf -; -; - defb 87h ; +ORIGIN - defc '+ORIGIN' - defw bscr-8 -porig: - defw docol - defw lit - defw orig - defw plus - defw semis -; -; USER VARIABLES -; - defb 82h ; S0 - defc 'S0' - defw porig-0ah -szero: - defw douse - defw 6 -; -; - defb 82h ; R0 - defc 'R0' - defw szero-5 -rzero: - defw douse - defw 8 -; -; - defb 83h ; TIB - defc 'TIB' - defw rzero-5 -tib: - defw douse - defb 0ah -; -; - defb 85h ; WIDTH - defc 'WIDTH' - defw tib-6 -width: - defw douse - defb 0ch -; -; - defb 87h ; WARNING - defc 'WARNING' - defw width-8 -warn: - defw douse - defb 0eh -; -; - defb 85h ; FENCE - defc 'FENCE' - defw warn-0ah -fence: - defw douse - defb 10h -; -; - defb 82h ; DP - defc 'DP' - defw fence-8 -dp: - defw douse - defb 12h -; -; - defb 88h ; VOC-LINK - defc 'VOC-LINK' - defw dp-5 -vocl: - defw douse - defw 14h -; -; - defb 83h ; BLK - defc 'BLK' - defw vocl-0bh -blk: - defw douse - defb 16h -; -; - defb 82h ; IN - defc 'IN' - defw blk-6 -inn: - defw douse - defb 18h -; -; - defb 83h ; OUT - defc 'OUT' - defw inn-5 -outt: - defw douse - defb 1ah -; -; - defb 83h ; SCR - defc 'SCR' - defw outt-6 -scr: - defw douse - defb 1ch -; -; - defb 86h ; OFFSET - defc 'OFFSET' - defw scr-6 -ofset: - defw douse - defb 1eh -; -; - defb 87h ; CONTEXT - defc 'CONTEXT' - defw ofset-9 -cont: - defw douse - defb 20h -; -; - defb 87h ; CURRENT - defc 'CURRENT' - defw cont-0ah -curr: - defw douse - defb 22h -; -; - defb 85h ; STATE - defc 'STATE' - defw curr-0ah -state: - defw douse - defb 24h -; -; - defb 84h ; BASE - defc 'BASE' - defw state-8 -base: - defw douse - defb 26h -; -; - defb 83h ; DPL - defc 'DPL' - defw base-7 -dpl: - defw douse - defb 28h -; -; - defb 83h ; FLD - defc 'FLD' - defw dpl-6 -fld: - defw douse - defb 2ah -; -; - defb 83h ; CSP - defc 'CSP' - defw fld-6 -cspp: - defw douse - defb 2ch -; - - defb 82h ; R# - defc 'R#' - defw cspp-6 -rnum: - defw douse - defb 2eh -; - - defb 83h ; HLD - defc 'HLD' - defw rnum-5 -hld: - defw douse - defw 30h -; -; END OF USER VARIABLES -; - defb 82h ; 1+ - defc '1+' - defw hld-6 -onep: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ; 2+ - defc '2+' - defw onep-5 -twop: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 1- - defc '1-' ;/ - defw twop-5 ;/ -onemin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2- - defc '2-' ;/ - defw onemin-5 ;/ -twomin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2* - defc '2*' ;/ - defw twomin-5 ;/ -twosta: - defw $+2 ;/ - pop hl ;/ - add hl,hl ;/ asl hl - jhpush ;/ -; -; - defb 82h ;/ 2/ - defc '2/' ;/ - defw twosta-5 ;/ -twosla: - defw $+2 ;/ - pop hl ;/ - bit 7,h ;/ negative? - jr z,twosl1 ;/ no - inc hl ;/ yes, add 1 -twosl1: - sra h ;/ - rr l ;/ asr hl - jhpush ;/ -; -; - defb 84h ; HERE - defc 'HERE' - defw twosla-5 -here: - defw docol - defw dp - defw at - defw semis -; -; - defb 85h ; ALLOT - defc 'ALLOT' - defw here-7 -allot: - defw docol - defw dp - defw pstor - defw semis -; -; - defb 81h ; , - defc ',' - defw allot-8 -comma: - defw docol - defw here - defw store - defw two - defw allot - defw semis -; - - defb 82h ; C, - defc 'C,' - defw comma-4 -ccomm: - defw docol - defw here - defw cstor - defw one - defw allot - defw semis -; -; - defb 81h ; - - defc '-' - defw ccomm-5 -subb: - defw $+2 - pop de - pop hl - subw hl,de ;/ - jhpush -; -; - defb 81h ; = - defc '=' - defw subb-4 -equal: - defw $+2 ;/ - pop de ;/ - pop hl ;/ - subw hl,de ;/ - ld hl,0 ; hl <-- false - jr nz,equal1 - inc l ;/ hl <-- true -equal1: - jhpush -; -; - defb 81h ; < - defc '<' - defw equal-4 -less: - defw $+2 - pop de - pop hl ; hl de < - ld a,d - xor h ; one operand negative? - jp m,less1 ; yes, determine which - subw hl,de ;/ -less1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,less2 - inc l ;/ hl <-- true -less2: - jhpush -; -; - defb 82h ; U< - defc 'U<' - defw less-4 -uless: - defw $+2 - pop de - pop hl ;/ hl de U< - subw hl,de ;/ - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry -uless1: - jhpush -; -; - defb 81h ; > - defc '>' - defw uless-5 -great: - defw $+2 - pop hl ;/ - pop de ;/ hl de > (= de hl < ) - ld a,d - xor h ; one operand negative? - jp m,great1 ; yes, determine which - subw hl,de ;/ -great1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,great2 - inc l ;/ hl <-- true -great2: - jhpush -; -; - defb 83h ; ROT ( n1 n2 n3 --- n2 n3 n1) - defc 'ROT' - defw great-4 -rot: - defw $+2 - pop de ; de <-- n3 - pop hl ; hl <-- n2 - ex (sp),hl ; s1 <-- n2, hl <-- n1 - jp dpush ; s2 <-- n3, s3 <-- n1 -; -; - defb 85h ; SPACE - defc 'SPACE' - defw rot-6 -space: - defw docol - defw bl - defw emit - defw semis -; -; - defb 84h ; -DUP - defc '-DUP' - defw space-8 -ddup: - defw $+2 ;/ - ldw hl,(sp+0) ;/ - ld a,h ;/ - or l ;/ hl = 0? - jr z,ddup1 ;/ yes, don't dup - push hl ;/ -ddup1: - jnext -; -; - defb 88h ; TRAVERSE - defc 'TRAVERSE' - defw ddup-7 -trav: - defw docol - defw swap -trav1: - defw over ; begin - defw plus - defw lit - defw 7fh - defw over - defw cat - defw less - defw zbran ; until - defw trav1-$ - defw swap - defw drop - defw semis -; -; - defb 86h ; LATEST - defc 'LATEST' - defw trav-0bh -lates: - defw docol - defw curr - defw at - defw at - defw semis -; -; - defb 83h ; LFA - defc 'LFA' - defw lates-9 -lfa: - defw $+2 - pop hl ;/ hl <-- pfa - subw hl,4 ;/ - jhpush ;/ s1 <-- lfa -; -; - defb 83h ; CFA - defc 'CFA' - defw lfa-6 -cfa: - defw docol - defw twomin ;/ - defw semis -; -; - defb 83h ; NFA - defc 'NFA' - defw cfa-6 -nfa: - defw docol - defw lit - defw 5 - defw subb - defw lit - defw -1 - defw trav - defw semis -; -; - defb 83h ; PFA - defc 'PFA' - defw nfa-6 -pfa: - defw docol - defw one - defw trav - defw lit - defw 5 - defw plus - defw semis -; -; - defb 84h ; !CSP - defc '!CSP' - defw pfa-6 -scsp: - defw docol - defw spat - defw cspp - defw store - defw semis -; -; - defb 86h ; ?ERROR - defc '?ERROR' - defw scsp-7 -qerr: - defw docol - defw swap - defw zbran ; if - defw qerr1-$ - defw error - defw bran ; else - defw qerr2-$ -qerr1: - defw drop ; endif -qerr2: - defw semis -; -; - defb 85h ; ?COMP - defc '?COMP' - defw qerr-9 -qcomp: - defw docol - defw state - defw at - defw zequ - defw lit - defw 11h - defw qerr - defw semis -; -; - defb 85h ; ?EXEC - defc '?EXEC' - defw qcomp-8 -qexec: - defw docol - defw state - defw at - defw lit - defw 12h - defw qerr - defw semis -; -; - defb 86h ; ?PAIRS - defc '?PAIRS' - defw qexec-8 -qpair: - defw docol - defw subb - defw lit - defw 13h - defw qerr - defw semis -; -; - defb 84h ; ?CSP - defc '?CSP' - defw qpair-9 -qcsp: - defw docol - defw spat - defw cspp - defw at - defw subb - defw lit - defw 14h - defw qerr - defw semis -; -; - defb 88h ; ?LOADING - defc '?LOADING' - defw qcsp-7 -qload: - defw docol - defw blk - defw at - defw zequ - defw lit - defw 16h - defw qerr - defw semis -; -; - defb 87h ; COMPILE - defc 'COMPILE' - defw qload-0bh -comp: - defw docol - defw qcomp - defw fromr - defw dup - defw twop - defw tor - defw at - defw comma - defw semis -; -; - defb 0c1h ; [ - defc '[' - defw comp-0ah -lbrac: - defw docol - defw zero - defw state - defw store - defw semis -; -; - defb 81h ; ] - defc ']' - defw lbrac-4 -rbrac: - defw docol - defw lit,0c0h - defw state,store - defw semis -; -; - defb 86h ; SMUDGE - defc 'SMUDGE' - defw rbrac-4 -smudg: - defw docol - defw lates - defw lit - defw 20h - defw toggl - defw semis -; -; - defb 83h ; HEX - defc 'HEX' - defw smudg-9 -hex: - defw docol - defw lit - defw 10h - defw base - defw store - defw semis -; -; - defb 87h ; DECIMAL - defc 'DECIMAL' - defw hex-6 -dec: - defw docol - defw lit - defw 0ah - defw base - defw store - defw semis -; -; - defb 87h ; (;CODE) - defc '(;CODE)' - defw dec-0ah -pscod: - defw docol - defw fromr - defw lates - defw pfa - defw cfa - defw store - defw semis -; -; - defb 0c5h ; ;CODE - defc ';CODE' - defw pscod-0ah -semic: - defw docol - defw qcsp - defw comp - defw pscod - defw lbrac -semi1: - defw noop ; assembler - defw semis -; -; - defb 87h ; - defc 'DOES>' - defw build-0ah -does: - defw docol - defw fromr - defw lates - defw pfa - defw store - defw pscod -dodoe: - ld hl,(rpp) - dec hl - dec hl - ldw (hl),bc ;/ - ld (rpp),hl - inc de - ex de,hl - ldw bc,(hl) ;/ - inc hl - inc hl - jhpush -; -; - defb 85h ; COUNT - defc 'COUNT' - defw does-8 -count: - defw docol - defw dup - defw onep - defw swap - defw cat - defw semis -; -; - defb 84h ; TYPE - defc 'TYPE' - defw count-8 -type: - defw docol - defw ddup - defw zbran ; if - defw type1-$ - defw over - defw plus - defw swap - defw xdo ; do -type2: - defw ido - defw cat - defw emit - defw xloop ; loop - defw type2-$ - defw bran ; else - defw type3-$ -type1: - defw drop ; endif -type3: - defw semis -; -; - defb 89h ; -TRAILING - defc '-TRAILING' - defw type-7 -dtrai: - defw docol - defw dup - defw zero - defw xdo ; do -dtra1: - defw tdup ;/ - defw plus - defw onemin ;/ - defw cat - defw bl - defw subb - defw zbran ; if - defw dtra2-$ - defw leave - defw bran ; else - defw dtra3-$ -dtra2: - defw onemin ;/ -dtra3: - defw xloop ; loop - defw dtra1-$ - defw semis -; -; - defb 84h ; (.") - defc '(.")' - defw dtrai-0ch -pdotq: - defw docol - defw rr - defw count - defw dup - defw onep - defw fromr - defw plus - defw tor - defw type - defw semis -; -; - defb 0c2h ; ." - defc '."' - defw pdotq-7 -dotq: - defw docol - defw lit - defw 22h - defw state - defw at - defw zbran ; if - defw dotq1-$ - defw comp - defw pdotq - defw word - defw here - defw cat - defw onep - defw allot - defw bran ; else - defw dotq2-$ -dotq1: - defw word - defw here - defw count - defw type ; endif -dotq2: - defw semis -; -; - defb 86h ; EXPECT - defc 'EXPECT' - defw dotq-5 -expec: - defw docol - defw over - defw plus - defw over - defw xdo ; do -expe1: - defw key - defw dup - defw lit - defw 0eh - defw porig - defw at - defw equal - defw zbran ; if - defw expe2-$ - defw drop - defw dup - defw ido - defw equal - defw dup - defw fromr - defw twomin ;/ - defw plus - defw tor - defw zbran ; if - defw expe6-$ - defw lit - defw bell - defw bran ; else - defw expe7-$ -expe6: - defw lit - defw bsout ; endif -expe7: - defw bran ; else - defw expe3-$ -expe2: - defw dup - defw lit - defw acr ;/ - defw equal - defw zbran ; if - defw expe4-$ - defw leave - defw drop - defw bl - defw zero - defw bran ; else - defw expe5-$ -expe4: - defw dup ; endif -expe5: - defw ido - defw cstor - defw zero - defw ido - defw onep - defw store ; endif -expe3: - defw emit - defw xloop ; loop - defw expe1-$ - defw drop - defw semis -; -; - defb 85h ; QUERY - defc 'QUERY' - defw expec-9 -query: - defw docol - defw tib - defw at - defw lit - defw 50h - defw expec - defw zero - defw inn - defw store - defw semis -; -; - defb 0c1h ; NULL - defb 80h - defw query-8 -null: - defw docol - defw blk - defw at - defw zbran ; if - defw null1-$ - defw one - defw blk - defw pstor - defw zero - defw inn - defw store - defw blk - defw at - defw bscr - defw onemin ;/ - defw andd - defw zequ - defw zbran ; if - defw null2-$ - defw qexec - defw fromr - defw drop ; endif -null2: - defw bran ; else - defw null3-$ -null1: - defw fromr - defw drop ; endif -null3: - defw semis -; - defb 84h ; FILL - defc 'FILL' - defw null-4 -fill: - defw $+2 - exx ;/ save ip - pop de ;/ e <-- byte - pop bc ; bc <-- quantity - pop hl ;/ hl <-- address -fill1: - ld a,b - or c ; qty == 0? - jr z,fill2 ; yes, nothing (more) to fill - ld (hl),e ;/ (hl) <-- byte - inc hl ; inc pointer - dec bc ; dec counter - jp fill1 ;/ -fill2: - exx ;/ restore ip - jnext -; -; - defb 85h ; ERASE - defc 'ERASE' - defw fill-7 -erasee: - defw docol - defw zero - defw fill - defw semis -; -; - defb 86h ; BLANKS - defc 'BLANKS' - defw erasee-8 -blank: - defw docol - defw bl - defw fill - defw semis -; -; - defb 84h ; HOLD - defc 'HOLD' - defw blank-9 -hold: - defw docol - defw lit - defw -1 - defw hld - defw pstor - defw hld - defw at - defw cstor - defw semis -; -; - defb 83h ; PAD - defc 'PAD' - defw hold-7 -pad: - defw docol - defw here - defw lit - defw 44h - defw plus - defw semis -; -; - defb 84h ; WORD - defc 'WORD' - defw pad-6 -word: - defw docol - defw blk - defw at - defw zbran ; if - defw word1-$ - defw blk - defw at - defw block - defw bran ; else - defw word2-$ -word1: - defw tib - defw at ; endif -word2: - defw inn - defw at - defw plus - defw swap - defw encl - defw here - defw lit - defw 22h - defw blank - defw inn - defw pstor - defw over - defw subb - defw tor - defw rr - defw here - defw cstor - defw plus - defw here - defw onep - defw fromr - defw cmove - defw semis -; -; - defb 88h ; (NUMBER) - defc '(NUMBER)' - defw word-7 -pnumb: - defw docol -pnum1: - defw onep ; begin - defw dup - defw tor - defw cat - defw base - defw at - defw digit - defw zbran ; while - defw pnum2-$ - defw swap - defw base - defw at - defw ustar - defw drop - defw rot - defw base - defw at - defw ustar - defw dplus - defw dpl - defw at - defw onep - defw zbran ; if - defw pnum3-$ - defw one - defw dpl - defw pstor ; endif -pnum3: - defw fromr - defw bran ; repeat - defw pnum1-$ -pnum2: - defw fromr - defw semis -; -; - defb 86h ; NUMBER - defc 'NUMBER' - defw pnumb-0bh -numb: - defw docol - defw zero - defw zero - defw rot - defw dup - defw onep - defw cat - defw lit - defw 2dh - defw equal - defw dup - defw tor - defw plus - defw lit - defw -1 -numb1: - defw dpl ; begin - defw store - defw pnumb - defw dup - defw cat - defw bl - defw subb - defw zbran ; while - defw numb2-$ - defw dup - defw cat - defw lit - defw 2eh - defw subb - defw zero - defw qerr - defw zero - defw bran ; repeat - defw numb1-$ -numb2: - defw drop - defw fromr - defw zbran ; if - defw numb3-$ - defw dminu ; endif -numb3: - defw semis -; -; - defb 85h ; -FIND (0-3) SUCCESS - defc '-FIND' ; (0-1) FAILURE - defw numb-9 -dfind: - defw docol - defw bl - defw word - defw here - defw cont - defw at - defw at - defw pfind - defw dup - defw zequ - defw zbran ; if - defw dfin1-$ - defw drop - defw here - defw lates - defw pfind ; endif -dfin1: - defw semis -; -; - defb 87h ; (ABORT) - defc '(ABORT)' - defw dfind-8 -pabor: - defw docol - defw abort - defw semis -; - defb 85h ; ERROR - defc 'ERROR' - defw pabor-0ah -error: - defw docol - defw warn - defw at - defw zless - defw zbran ; if - defw erro1-$ - defw pabor ; endif -erro1: - defw here - defw count - defw type - defw pdotq - defb 2 - db '? ' - defw mess - defw spsto -; CHANGE FROM fig MODEL -; defw inn,at,blk,at - defw blk,at - defw ddup - defw zbran,erro2-$ ; if - defw inn,at - defw swap ; endif -erro2: - defw quit -; -; - defb 83h ; ID. - defc 'ID.' - defw error-8 -iddot: - defw docol - defw pad - defw lit - defw 20h - defw blank ;/ - defw dup - defw pfa - defw lfa - defw over - defw subb - defw dup ;/ change frm MODEL - defw tor ;/ to suppress BIT 7 - defw pad - defw swap - defw cmove - defw pad - defw fromr ;/ for terminals - defw pad ;/ with an 8 bit - defw plus ;/ ASCII character set. - defw onemin ;/ - defw dup ;/ - defw at ;/ - defw lit ;/ - defw 7fh ;/ - defw andd ;/ - defw swap ;/ - defw store ;/ - defw count - defw lit - defw 1fh ; WIDTH - defw andd - defw type - defw space - defw semis -; - defb 86h ; CREATE - defc 'CREATE' - defw iddot-6 -creat: - defw docol - defw dfind - defw zbran ; if - defw crea1-$ - defw drop - defw nfa - defw iddot - defw lit - defw 4 - defw mess - defw space ; endif -crea1: - defw here - defw dup - defw cat - defw width - defw at - defw min - defw onep - defw allot - defw dup - defw lit - defw 0a0h - defw toggl - defw here - defw onemin - defw lit - defw 80h - defw toggl - defw lates - defw comma - defw curr - defw at - defw store - defw here - defw twop - defw comma - defw semis -; -; - defb 0c9h ; [COMPILE] - defc '[COMPILE]' - defw creat-9 -bcomp: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw cfa - defw comma - defw semis -; -; - defb 0c7h ; LITERAL - defc 'LITERAL' - defw bcomp-0ch -liter: - defw docol - defw state - defw at - defw zbran ; if - defw lite1-$ - defw comp - defw lit - defw comma ; endif -lite1: - defw semis -; -; - defb 0c8h ; DLITERAL - defc 'DLITERAL' - defw liter-0ah -dlite: - defw docol - defw state - defw at - defw zbran ; if - defw dlit1-$ - defw swap - defw liter - defw liter ; endif -dlit1: - defw semis -; -; - defb 86h ; ?STACK - defc '?STACK' - defw dlite-0bh -qstac: - defw docol - defw spat - defw szero - defw at - defw swap - defw uless - defw one - defw qerr - defw spat - defw here - defw lit - defw 80h - defw plus - defw uless - defw lit - defw 7 - defw qerr - defw semis -; -; - defb 89h ; INTERPRET - defc 'INTERPRET' - defw qstac-9 -inter: - defw docol -inte1: - defw dfind ; begin - defw zbran ; if - defw inte2-$ - defw state - defw at - defw less - defw zbran ; if - defw inte3-$ - defw cfa - defw comma - defw bran ; else - defw inte4-$ -inte3: - defw cfa - defw exec ; endif -inte4: - defw qstac - defw bran ; else - defw inte5-$ -inte2: - defw here - defw numb - defw dpl - defw at - defw onep - defw zbran ; if - defw inte6-$ - defw dlite - defw bran ; else - defw inte7-$ -inte6: - defw drop - defw liter ; endif -inte7: - defw qstac ; endif -inte5: - defw bran ; again - defw inte1-$ -; -; - defb 89h ; IMMEDIATE - defc 'IMMEDIATE' - defw inter-0ch -immed: - defw docol - defw lates - defw lit - defw 40h - defw toggl - defw semis -; -; - defb 8ah ; VOCABULARY - defc 'VOCABULARY' - defw immed-0ch -vocab: - defw docol - defw build - defw lit - defw 0a081h - defw comma - defw curr - defw at - defw cfa - defw comma - defw here - defw vocl - defw at - defw comma - defw vocl - defw store - defw does -dovoc: - defw twop - defw cont - defw store - defw semis -; -; - defb 0c5h ; FORTH - defc 'FORTH' - defw vocab-0dh -forth: - defw dodoe - defw dovoc - defw 0a081h - defw task-7 ; cold start value only -; changed aech time a def is appended -; to the FORTH vocabulary - defw 0 ; end of vocabulary list -; -; - defb 8bh ; DEFINITIONS - defc 'DEFINITIONS' - defw forth-8 -defin: - defw docol - defw cont - defw at - defw curr - defw store - defw semis -; -; - defb 0c1h ; ( - defc '(' - defw defin-0eh -paren: - defw docol - defw lit - defw 29h - defw word - defw semis -; -; - defb 84h ; QUIT - defc 'QUIT' - defw paren-4 -quit: - defw docol - defw zero - defw blk - defw store - defw lbrac -quit1: - defw rpsto ; begin - defw cr - defw query - defw inter - defw state - defw at - defw zequ - defw zbran ; if - defw quit2-$ - defw pdotq - defb 2 - db 'ok' ; endif -quit2: - defw bran ; again - defw quit1-$ -; -; - defb 85h ; ABORT - defc 'ABORT' - defw quit-7 -abort: - defw docol - defw spsto - defw dec - defw qstac - defw cr - defw dotcpu - defw pdotq - defb 0eh ; count of chrs to follow - db 'fig-FORTH ' - defb figrel+30h,adot,figrev+30h,usrver - defw forth - defw defin - defw quit -; -; -wrm: ld bc,wrm1 - jnext -wrm1: defw warm -; -; - defb 84h ; WARM - defc 'WARM' - defw abort-8 -warm: - defw docol - defw mtbuf - defw abort -; -; -cld: - ld hl,(bdoss+1) ;/ - ld l,0 ;/ hl <-- fbase - ld (limit+2),hl ;/ set limit - ld de,bufsiz ;/ de <-- total disc buffer size - subw hl,de ;/ hl <-- addr. of 1st disc buffer - ld (first+2),hl ;/ set FIRST - ld (use+2),hl ;/ set USE - ld (prev+2),hl ;/ set PREV - ld (buf1),hl ;/ - ld de,us ;/ de <-- user variable space - subw hl,de ;/ hl <-- initr0 - ld (upinit),hl ;/ - ld (r0init),hl ;/ - ld (up),hl ;/ - ld (rpp),hl ;/ - ld de,rts ;/ de <-- rtn stack & term. buf space - subw hl,de ;/ hl <-- inits0 - ld (s0init),hl ;/ - ld (tibini),hl ;/ - ld sp,hl ;/ - ld bc,cld1 - ld ix,next ; pointer to next - ld iy,hpush ; pointer to hpush - jnext -; -; -cld1: defw cold -; - defb 84h ; COLD - defc 'COLD' - defw warm-7 -cold: - defw docol - defw mtbuf - defw one,recadr ; AvdH - defw store - defw lit,buf1 - defw at ;/ - defw use,store - defw lit,buf1 - defw at ;/ - defw prev,store - defw drzer - defw zero ;/ - defw lit,eprint - defw cstor ;/ -; - defw lit - defw orig+12h - defw lit - defw up - defw at - defw lit - defw 6 - defw plus - defw lit - defw 10h - defw cmove - defw lit - defw orig+0ch - defw at - defw lit - defw forth+6 - defw store - defw fcb ;/A - defw lit,opnfil ;/A open mass storage - defw bdos ;/A - defw lit,0ffh ;/A - defw equal ;/A file present? - defw zbran,cld2-$ ;/A - defw zero ;/A - defw warn,store ;/A - defw cr,pdotq ;/A - defb 7 ;/A - db 'No file' ;/A -cld2: - defw abort -; -; - defb 84h ; S->D - defc 'S->D' - defw cold-7 -stod: defw $+2 - pop hl ;/ - exts hl ;/ de <-- h(7) - ex de,hl ;/ - jp dpush ; ( n1 -- d1L d1H) -; -; - defb 82h ; +- - defc '+-' - defw STOD-7 -pm: - defw docol - defw zless - defw zbran ; if - defw pm1-$ - defw minus ; endif -pm1: - defw semis -; -; - defb 83h ; D+- - defc 'D+-' - defw pm-5 -dpm: - defw docol - defw zless - defw zbran ; if - defw dpm1-$ - defw dminu ; endif -dpm1: - defw semis -; -; - defb 83h ; ABS - defc 'ABS' - defw dpm-6 -abs: - defw docol - defw dup - defw pm - defw semis -; -; - defb 84h ; DABS - defc 'DABS' - defw abs-6 -dabs: - defw docol - defw dup - defw dpm - defw semis -; -; - defb 83h ; MIN - defc 'MIN' - defw dabs-7 -min: - defw docol - defw tdup - defw great - defw zbran ; if - defw min1-$ - defw swap ; endif -min1: - defw drop - defw semis -; -; - defb 83h ; MAX - defc 'MAX' - defw min-6 -max: defw docol - defw tdup - defw less - defw zbran ; if - defw max1-$ - defw swap ; endif -max1: - defw drop - defw semis -; -; - defb 82h ; M* ( n1 n2 --- d) - defc 'M*' - defw max-6 -mstar: - defw $+2 ;/ - pop de ; de <-- multiplicator - pop hl ; hl <-- multiplicant - multw hl,de ;/ dehl <-- hl * de - ex de,hl ;/ - jp dpush ;/ ( n1 n2 --- d1l d1h) -; -; - defb 82h ;/ M/ ( d n1 --- nrem nquot) - defc 'M/' - defw mstar-5 -mslas: - defw $+2 ; ( d n1 --- n2 n3) - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,mslas1 ; positive - neg hl ; make positive -mslas1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; dividend.hw - pop de ; dividend.lw - bit 7,h ; negative? - jr z,mslas2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - subw hl,de ; neg dividend.lw - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -mslas2: - cpw hl,bc ; dividend.hw >= divisor - jr c,mslas3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max. - jr mslas5 -; -mslas3: - ex de,hl ; dehl <-- dividend.hw,lw - divuw dehl,bc ; de <-- remainder, hl <-- quotient - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative - jr z,mslas4 ; no - neg hl ;/ yes, negate remainder -mslas4: - ex de,hl ; hl <-- quotient - or a - jr z,mslas5 ; neither operand negative - cp 81h ; both operands negative? - jr z,mslas5 ; yes, quotient stays positive - neg hl ;/ no, negate quotient -mslas5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 81h ; * ( n1 n2 --- nproduct) - defc '*' - defw mslas-5 -star: - defw $+2 - pop de - pop hl - multw hl,de ;/ dehl <-- product - jhpush -; -; - defb 84h ; /MOD ( n1 n2 --- nrem nquot) - defc '/MOD' - defw star-4 -slmod: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ div by 0? - jr nz,slmod1 ;/ no, continue - ld de,0ffffh - ld h,d - ld l,e ;/ set remainder & quotient to max. - jr slmod3 -slmod1: - cpw hl,8000h ;/ special case -32768 -1 / - jr nz,slmod2 ;/ continue - ld a,b - cp 0ffh - jr nz,slmod2 - cp c ;/ lo byte also 0ffh? - jr nz,slmod2 ;/ no, go & divide - ld de,0 ;/ remainder - jr slmod3 ;/ exit with dividend unchanged -slmod2: - exts hl ;/ de <-- dividend.hw - divw dehl,bc ;/ de <-- remainder, hl <-- quotient -slmod3: - push de - push hl - exx ;/ restore ip - jnext -; -; - defb 81h ; / - defc '/' - defw slmod-7 -slash: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ division by 0? - jr nz,slash1 ;/ no, continue - ld hl,0ffffh ;/ set quotient to max. - jr slash3 -slash1: - cpw hl,8000h ;/ special case -32768 -1 / - jr nz,slash2 ;/ dividend not -32768 - ld a,b - cp 0ffh - jr nz,slash2 ;/ divisor not -1 - cp c - jr z,slash3 ;/ return with dividend unchanged -slash2: - exts hl ;/ de <-- dividend.hw - divw dehl,bc ;/ hl <-- quotient -slash3: - push hl ;/ quotient - exx ;/ restore ip - jnext -; -; - defb 83h ;/ MOD - defc 'MOD' - defw slash-4 -modd: - defw $+2 - exx ; save ip - pop bc ; divisor - pop hl ; dividend - ld a,b - or c ; division by 0? - jr nz,modd1 ; no, continue - ld de,0ffffh ; set remainder to max - jr modd3 -modd1: - cpw hl,8000h ;/ special case -32768 -1 / - jr nz,modd2 ; dividend not -32768 - ld a,b - cp 0ffh - jr nz,modd2 ; divisor not -1 - cp c - jr nz,modd2 ; go & divide - ld de,0 ; remainder - jr modd3 -modd2: - exts hl ; de <-- dividend.hw - divw dehl,bc ; de <-- remainder -modd3: - push de ; remainder - exx ; restore ip - jnext -; -; - defb 85h ;/ */MOD - defc '*/MOD' - defw modd-6 -ssmod: - defw $+2 - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssmod1 ; positive - neg hl ; make positive -ssmod1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - multw hl,de ; dehl <-- product (= dividend) - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssmod2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - subw hl,de ; neg dividend.lw - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssmod2: - cpw hl,bc ; dividend.hw >= divisor? - jr c,ssmod3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max - jr ssmod5 -; -ssmod3: - ex de,hl ; dehl <-- dividend.hw,lw - divuw dehl,bc ; de <-- remainder, hl <-- quotient - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative? - jr z,ssmod4 ; no - neg hl ; yes, negate remainder -ssmod4: - ex de,hl ; hl <-- quotient - or a - jr z,ssmod5 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssmod5 ; yes, quotient stays positive - neg hl ; no, negate quotient -ssmod5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 82h ; */ - defc '*/' - defw ssmod-8 -ssla: - defw $+2 ;/ - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssla1 ; positive - neg hl ; make positive -ssla1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - multw hl,de ; dehl <-- product (= dividend) - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssla2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - subw hl,de ; neg dividend.lw - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssla2: - cpw hl,bc ; dividend.hw >= divisor? - jr c,ssla3 ; no overflow, continue - ld hl,0ffffh ; set quotient to max - jr ssla4 -; -ssla3: - ex de,hl ; dehl <-- dividend.hw,lw - divuw dehl,bc ; de <-- remainder, hl <-- quotient - or a - jr z,ssla4 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssla4 ; yes, quotient stays positive - neg hl ; no, negate quotient -ssla4: - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 85h ; M/MOD - defc 'M/MOD' - defw ssla-5 -msmod: - defw docol - defw tor - defw zero - defw rr - defw uslas - defw fromr - defw swap - defw tor - defw uslas - defw fromr - defw semis -; -; -; Block moved down 2 pages -; - defb 86h ; (LINE) - defc '(LINE)' - defw msmod-8 -pline: - defw docol - defw tor - defw lit - defw 40h - defw bbuf - defw ssmod - defw fromr - defw bscr - defw star - defw plus - defw block - defw plus - defw lit - defw 40h - defw semis -; -; - defb 85h ; .LINE - defc '.LINE' - defw pline-9 -dline: - defw docol - defw pline - defw dtrai - defw type - defw semis -; -; - defb 87h ; MESSAGE - defc 'MESSAGE' - defw dline-8 -mess: - defw docol - defw warn - defw at - defw zbran ; if - defw mess1-$ - defw ddup - defw zbran ; if - defw mess2-$ - defw lit - defw 4 ; 1st message screen - defw ofset - defw at - defw bscr - defw slash - defw subb - defw dline - defw space ; endif -mess2: - defw bran ; else - defw mess3-$ -mess1: - defw pdotq - defb 6 - db 'MSG # ' - defw dot ; endif -mess3: defw semis -; -; - defb 82h ; P@ - defc 'P@' - defw mess-0ah -ptat: - defw $+2 - exx ;d save registers - pop bc ;d bc <-- port# - in l,(c) ;d l <-- data byte - ld h,0 - push hl - exx ;d restore registers - jnext -; -; - defb 82h ; P! - defc 'P!' - defw ptat-5 -ptsto: - defw $+2 - exx ;d save registers - pop bc ;d c <-- port# - pop hl ;d L <-- date byte - out (c),l - exx ;d restore registers - jnext -; -; - page -include DISCIO.Z80 - page -include CONPRTIO.Z80 - page -; - defb 0c1h ; ' (tick) - defb 0a7h - defw arrow-6 -tick: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw liter - defw semis -; -; - defb 86h ; FORGET - defc 'FORGET' - defw tick-4 -forg: - defw docol - defw curr - defw at - defw cont - defw at - defw subb - defw lit - defw 18h - defw qerr - defw tick - defw dup - defw fence - defw at - defw uless ;/ FORGET >8000h nw o.k. - defw lit - defw 15h - defw qerr - defw dup - defw nfa - defw dp - defw store - defw lfa - defw at - defw cont - defw at - defw store - defw semis -; -; - defb 84h ; BACK - defc 'BACK' - defw forg-9 -back: - defw docol - defw here - defw subb - defw comma - defw semis -; -; - defb 0c5h ; BEGIN - defc 'BEGIN' - defw back-7 -begin: - defw docol - defw qcomp - defw here - defw one - defw semis -; -; - defb 0c5h ; ENDIF - defc 'ENDIF' - defw begin-8 -endiff: - defw docol - defw qcomp - defw two - defw qpair - defw here - defw over - defw subb - defw swap - defw store - defw semis -; -; - defb 0c4h ; THEN - defc 'THEN' - defw endiff-8 -then: defw docol - defw endiff - defw semis -; -; - defb 0c2h ; DO - defc 'DO' - defw then-7 -do: - defw docol - defw comp - defw xdo - defw here - defw three - defw semis -; -; - defb 0c4h ; LOOP - defc 'LOOP' - defw do-5 -loop: - defw docol - defw three - defw qpair - defw comp - defw xloop - defw back - defw semis -; -; - defb 0c5h ; +LOOP - defc '+LOOP' - defw loop-7 -ploop: - defw docol - defw three - defw qpair - defw comp - defw xploo - defw back - defw semis -; -; - defb 0c5h ; UNTIL - defc 'UNTIL' - defw ploop-8 -until: - defw docol - defw one - defw qpair - defw comp - defw zbran - defw back - defw semis -; -; - defb 0c3h ; END - defc 'END' - defw until-8 -endd: - defw docol - defw until - defw semis -; -; - defb 0c5h ; AGAIN - defc 'AGAIN' - defw endd-6 -again: - defw docol - defw one - defw qpair - defw comp - defw bran - defw back - defw semis -; -; - defb 0c6h ; REPEAT - defc 'REPEAT' - defw again-8 -repea: - defw docol - defw tor - defw tor - defw again - defw fromr - defw fromr - defw twomin ;/ - defw endiff - defw semis -; -; - defb 0c2h ; IF - defc 'IF' - defw repea-9 -iff: - defw docol - defw comp - defw zbran - defw here - defw zero - defw comma - defw two - defw semis -; -; - defb 0c4h ; ELSE - defc 'ELSE' - defw iff-5 -elsee: - defw docol - defw two - defw qpair - defw comp - defw bran - defw here - defw zero - defw comma - defw swap - defw two - defw endiff - defw two - defw semis -; -; - defb 0c5h ; WHILE - defc 'WHILE' - defw elsee-7 -while: - defw docol - defw iff - defw twop - defw semis -; -; - defb 86h ; SPACES - defc 'SPACES' - defw while-8 -spacs: - defw docol - defw zero - defw max - defw ddup - defw zbran ; if - defw spax1-$ - defw zero - defw xdo ; do -spax2: - defw space - defw xloop ; loop endif - defw spax2-$ -spax1: - defw semis -; -; - defb 82h ; <# - defc '<#' - defw spacs-9 -bdigs: - defw docol - defw pad - defw hld - defw store - defw semis -; -; - defb 82h ; #> - defc '#>' - defw bdigs-5 -edigs: - defw docol - defw drop - defw drop - defw hld - defw at - defw pad - defw over - defw subb - defw semis -; -; - defb 84h ; SIGN - defc 'SIGN' - defw edigs-5 -sign: - defw docol - defw rot - defw zless - defw zbran ; if - defw sign1-$ - defw lit - defw 2dh - defw hold ; endif -sign1: - defw semis -; -; - defb 81h ; # - defc '#' - defw sign-7 -dig: - defw docol - defw base - defw at - defw msmod - defw rot - defw lit - defw 9 - defw over - defw less - defw zbran ; if - defw dig1-$ - defw lit - defw 7 - defw plus ; endif -dig1: defw lit - defw 30h - defw plus - defw hold - defw semis -; -; - defb 82h ; #S - defc '#S' - defw dig-4 -digs: - defw docol -digs1: - defw dig ; begin - defw tdup ;/ - defw orr - defw zequ - defw zbran ; until - defw digs1-$ - defw semis -; -; - defb 83h ; D.R - defc 'D.R' - defw digs-5 -ddotr: - defw docol - defw tor - defw swap - defw over - defw dabs - defw bdigs - defw digs - defw sign - defw edigs - defw fromr - defw over - defw subb - defw spacs - defw type - defw semis -; -; - defb 82h ; .R - defc '.R' - defw ddotr-6 -dotr: - defw docol - defw tor - defw stod - defw fromr - defw ddotr - defw semis -; -; - defb 82h ; D. - defc 'D.' - defw dotr-5 -ddot: - defw docol - defw zero - defw ddotr - defw space - defw semis -; -; - defb 81h ; . - defc '.' - defw ddot-5 -dot: - defw docol - defw stod - defw ddot - defw semis -; -; - defb 81h ; ? - defc '?' - defw dot-4 -ques: - defw docol - defw at - defw dot - defw semis -; -; - defb 82h ; U. - defc 'U.' - defw ques-4 -udot: defw docol - defw zero - defw ddot - defw semis -; - - defb 85h ; VLIST - defc 'VLIST' - defw udot-5 -vlist: - defw docol - defw lit - defw 80h - defw outt - defw store - defw cont - defw at - defw at -vlis1: - defw outt ; begin - defw at - defw csll - defw great - defw zbran ; if - defw vlis2-$ - defw cr - defw zero - defw outt - defw store ; endif -vlis2: - defw dup - defw iddot - defw space - defw space - defw pfa - defw lfa - defw at - defw dup - defw zequ - defw qterm - defw orr - defw zbran ; until - defw vlis1-$ - defw drop - defw semis -; -; - defb 83h ; BYE - defc 'BYE' - defw vlist-8 -bye: - defw docol ;/A - defw flush ;/A - defw fcb,lit ;/E - defw 10h,bdos ;/E close file - defw drop ;/E discard directory code - defw zero,zero ;/A - defw bdos ;/A return to CP/M - defw semis ;/A won't get this far, just for pretty -; -; - defb 84h ; LIST - defc 'LIST' - defw bye-6 -list: - defw docol,dec - defw cr,dup - defw scr,store - defw pdotq - defb 6 - db 'SCR # ' - defw dot - defw lit,10h - defw zero,xdo -list1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw ido,scr - defw at,dline - defw qterm - defw zbran,list2-$ ; if - defw leave -list2: - defw xloop,list1-$ ; endif - defw cr - defw semis -; -; - defb 85H ;INDEX - defc 'INDEX' - defw list-7 -index: - defw docol - defw lit,ff - defw emit - defw cr - defw onep,swap - defw xdo -inde1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw zero,ido - defw dline,qterm - defw zbran,inde2-$ ; if - defw leave ; endif -inde2: - defw xloop,inde1-$ - defw semis -; -; - defb 85h ; TRIAD - defc 'TRIAD' - defw index-8 -triad: - defw docol - defw lit,ff - defw emit - defw three ;/ was lit,3 - defw slash - defw three ;/ was lit,3 - defw star - defw three ;/ was lit,3 - defw over,plus - defw swap,xdo -tria1: - defw cr,ido - defw list - defw qterm - defw zbran,tria2-$ ; if - defw leave -tria2: - defw xloop,tria1-$ ; endif - defw cr - defw lit,15 - defw mess,cr - defw semis -; -; - defb 84h ; .CPU - defc '.CPU' - defw triad-8 -dotcpu: - defw docol - defw base,at - defw lit,36 - defw base,store - defw lit,22h - defw porig,tat - defw ddot - defw base,store - defw semis -; -; - defb 86h ; setclk - defc 'setclk' - defw dotcpu-7 -setclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - xor a - out (cntrl0),a ; disable c/t 0 - out (cntrl1),a ; disable c/t 1 - out (config1),a - ld hl,0ffffh - ld a,10h - out (config0),a ; cascade c/t 0 - c/t 1 - ld c,tcon0 - outw (c),hl ; load c/t 0 time constant - ld c,tcon1 - outw (c),hl ; load c/t 1 time constatnt - ld a,80h - out (config1),a ; continous mode - ld a,0e0h - out (cntrl1),a ; start 32bit counter - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 86h ; getclk - defc 'getclk' - defw setclk-9 -getclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save current i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - ld a,80h - out (cntrl1),a ; halt 32bit counter - ld c,count1 - inw hl,(c) - ld d,h - ld e,l ; de <-- count1 - ld c,count0 - inw hl,(c) ; hl <-- count0 - ld c,0 - ld a,c ; a <-- 0 - sub l ; 0 - l - ld l,a ; l <-- neg(l) - ld a,c ; a <-- 0 - sbc a,h - ld h,a ; h <-- neg(h) - ld a,c ; a <-- 0 - sbc a,e - ld e,a ; e <-- neg(e) - ld a,c ; a <-- 0 - sbc a,d - ld d,a ; d <-- neg(d), dehl <-- neg(dehl) - divuw dehl,25000 ; scale to 1/100 secs - push hl ; result - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 84h ; TASK - defc 'TASK' - defw getclk-9 -; defw dotcpu-7 -task: - defw docol - defw semis -; -; -initdp: - defw 0 -; - end orig - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.280 b/software/CPM/CPM08_Z80FORTH/280FORTH.280 deleted file mode 100644 index b936b58..0000000 --- a/software/CPM/CPM08_Z80FORTH/280FORTH.280 +++ /dev/null @@ -1,4071 +0,0 @@ - title < Z280 fig-FORTH 1.1 a > - subttl Adaptive version -; -; -; Modified from Z80 fig-FORTH 1.1h by EHR 880830 -; Modified frm FIG document keyed by Dennis L. Wilson 800907 -; Converted frm "8080 FIG-FORTH VERSION A0 15SEP79" -; -; fig-FORTH release 1.1 for the 8080 processor. -; -; ALL PUBLICATIONS OF THE FORTH INTEREST GROUP -; ARE PUBLIC DOMAIN. THEY MAY BE FURTHER -; DISTRIBUTED BY THE INCLUSION OF THIS CREDIT NOTICE: -; -; This publication has been made available by the -; Forth Interest Group -; P.O.Box 1105 -; San Carlos, CA 94070 -; U.S.A. -; -; Implementation on 8080 by: -; John Cassady -; 339 15th Street -; Oakland, CA 94612 -; U.S.A -; on 790528 -; Modified by: -; Kim Harris -; Acknowledgements: -; George Flammer -; Robt. D. Villwock -; ---------------------------------------------------------------------- -; Z80 Version for Cromemco CDOS & Digital Research CP/M by: -; Dennis Lee Wilson c/o -; Aristotelian Logicians -; 2631 East Pinchot Avenue -; Phoenix, AZ 85016 -; U.S.A. -; ---------------------------------------------------------------------- -; The 2 byte Z80 code for Jump Relative (JR) has been substituted for -; the 3 byte Jump (JP) wherever practical. The port I/O words P@ & P! -; have been made ROMable by use of Z80 instructions. -; ---------------------------------------------------------------------- -; Further modifications (marked ;/) by: -; Edmund Ramm -; P.O.Box 38 -; 2358 Kaltenkirchen -; Fed. Rep. of Germany 840418 -; -; 850419 changed * (star) -; 850507 added 0<>, 0>, TUCK, NIP, -ROT, CSWAP, PICK -; 850511 added -CMOVE -; -; ----------------------------------------------------------------------------- -; Disc I/O has been modified a la Albert van der Horst (HCCH) to employ -; CP/M 2.x's random access feature. -; ----------------------------------------------------------------------------- -; ----------------------------------------------------------------------------- -; -; Z280 specifics -; -; -iopreg equ 08h ; i/o page register -; -config0 equ 0e0h ; c/t 0 configuration register -cntrl0 equ 0e1h ; c/t 0 command/status register -tcon0 equ 0e2h ; c/t 0 time constatnt register -count0 equ 0e3h ; c/t 0 count-time register -config1 equ 0e8h ; c/t 1 configuration register -cntrl1 equ 0e9h ; c/t 1 command/status register -tcon1 equ 0eah ; c/t 1 time constant register -count1 equ 0ebh ; c/t 1 count-time register -; -; ----------------------------------------------------------------------------- -; -; Release & Version numbers -; -figrel equ 1 ;FIG RELEASE # -figrev equ 1 ;FIG REVISION # -usrver equ 61h ;USER VERSION # a by EHR -; -;Console & printer drivers are in external source named -;CONPRTIO.FTH & disc drivers in DISCIO.FTH. It has 4 screen -;buffers & end of memory is set to FBASE from locn. 0007H. - page -; ASCII characters used -; -abl equ 20h ;BLANK -acr equ 0dh ;CR -adot equ 2eh ;. -bell equ 07h ;^G -bsin equ 08h ;backspace chr = ^H -bsout equ 08h -dle equ 10h ;^P -lf equ 0ah ;^J -ff equ 0ch ;^L -; -; Memory allocation -; -bdoss equ 0005h ;/ system entry -nscr equ 4 ; # of 1024 byte screens -kbbuf equ 128 ; bytes/disc buffer -us equ 40h ; user variables space -rts equ 400h ; Return Stack & term buff space -co equ kbbuf+4 ; Disc buff + 2 header + 2 tail -nbuf equ nscr*400h/kbbuf ; # of buffers -bufsiz equ co*nbuf ;/ total disc buffer size - page - aseg - .z280 -; - org 0100h -; -orig: - nop - jp cld ; vector to cold start - nop - jp wrm ; vector to warm start - defb figrel ; fig release # - defb figrev ; fig revision # - defb usrver ; user version # - defb 0eh ; implementation attributes -; -; -; -; 0eh = 0000:1110 -; --------- -; B +ORIGIN ...W:IEBA -; -; W: 0=above sufficient -; 1=other differences exist -; I: Interpreter is 0=pre- -; 1=post incrementing -; E: Addr must be even: 0 yes -; 1 no -; B: High byte @ 0=low addr. -; 1=high addr. -; A: CPU Addr. 0=BYTE -; 1=WORD -; -; -; - defw task-7 ; topmost word in FORTH vocabulary - defw bsin ; backspace chr -upinit: defw 0 ;/ init (up) -; -; * Following used by COLD; must be in same order as user variables * -; -s0init: defw 0 ;/ init (s0) -r0init: defw 0 ;/ init (r0) -tibini: defw 0 ;/ init (TIB) - defw 1fh ; init (WIDTH) - defw 0 ; init (WARNING) - defw initdp ; init (FENCE) - defw initdp ; init (dp) - defw forth+8 ; init (VOC-LINK) -; -; * END DATA USED BY COLD * -; - defw 0018h,0f600h ; Z280 CPU name (hw,lw) - ; (32 bit base 36 integer) - page -; REGISTERS -; -; FORTH Z80 FORTH PRESERVATION RULES -; ----- --- ----------------------- -; IP BC should be preserved -; accross FORTH words. -; W DE sometimes output from -; NEXT, may be altered -; b4 JP'ing to NEXT, -; input only when -; "DPUSH" called. -; SP SP should be used only as -; Data Stack accross -; FORTH words, may be -; used within FORTH -; words if restored -; b4 "NEXT" -; HL Never output frm NEXT -; input only when -; "HPUSH" called -; -; -up: defw 0 ;/ user area ptr -rpp: defw 0 ;/ return stack ptr -buf1: defw 0 ;/ address of 1st disc buffer -; -; -; COMMENT CONVENTIONS: -; -; == means "is equal to" -; <-- means assignment -; #NAME = value of name -; NAME = contents @ name -; (NAME) = contents of cell addressed by name -; cfa = code field address -; lfa = link field address -; nfa = name field address -; pfa = parameter field address -; s1 = 1st word of parameter stack -; s2 = 2nd -"- of -"- -"- -; r1 = 1st -"- of return stack -; r2 = 2nd -"- of -"- -"- -; ( above Stack posn. valid b4 & after execution of any word, not during) -; -; lsb = least significant bit -; msb = most significant bit -; lb = low byte -; hb = high byte -; lw = low word -; hw = high word -; (May be used as suffix to above names) - page -; FORTH ADDRESS INTERPRETER -; POST INCREMENTING VERSION -; -; -; -dpush: - push de -hpush: - push hl ; iy points here -next: - ld h,b ;/ w <-- (ip) ix points here - ld l,c ;/ - ldw hl,(hl) ;/ (hl) --> cfa - inc bc - inc bc ;/ ip += 2 -next1: - ldw de,(hl) ;/ pc <-- (w) - ex de,hl - inc de - jp (hl) ; note: de <-- cfa + 1 -; -; -jnext macro - jp (ix) - endm -; -jhpush macro - jp (iy) - endm -; - page -; FORTH DICTIONARY -; DICTIONARY FORMAT: -; -; BYTE -; ADDRESS NAME CONTENTS -; ------- ---- -------- -; (MSB=1 -; (P=PRECEDENCE BIT -; (S=SMUDGE BIT -; NFA NAME FIELD 1PS MSB=0, NAME'S 1st CHAR -; 0<2CHAR> -; ... -; 1 MSB=1, NAME'S LAST CHAR -; LFA LINK FIELD =PREVIOUS WORD'S NFA -; -;LABEL: CFA CODE FIELD =ADDR CPU CODE -; -; PFA PARAMETER <1PARAM> 1st PARAMETER BYTE -; FIELD <2PARAM> -; ... -; -; -; -dp0: - defb 83h ; LIT - defc 'LIT' - defw 0 ; lfa == 0 marks end of dictionary -lit: - defw $+2 ; s1 <-- (ip) - ld h,b - ld l,c - ldw hl,(hl) ; hl <-- (ip) = literal - inc bc ;/ - inc bc ;/ ip += 2 - jhpush ; s1 <-- hl -; -; - defb 87h ; EXECUTE - defc 'EXECUTE' - defw lit-6 -exec: - defw $+2 - pop hl - jp next1 -; -; - defb 86h ; BRANCH - defc 'BRANCH' - defw exec-0ah -bran: - defw $+2 ; ip += (ip) -bran1: - ld h,b - ld l,c ; hl <-- ip - addw hl,(hl) ; hl <-- ip + branch offset - ld c,l - ld b,h ; ip += branch offset - jnext -; -; - defb 87h ; 0BRANCH - defc '0BRANCH' - defw bran-9 -zbran: - defw $+2 - pop hl - ld a,l - or h - jr z,bran1 ; branch if if s1 == 0 - inc bc ; else skip branch offset - inc bc - jnext -; -; - defb 86h ; (LOOP) - defc '(LOOP)' - defw zbran-0ah -xloop: - defw $+2 - ld hl,(rpp) ; (hl) --> index = r1 - incw (hl) ;/ index += 1 - ldw de,(hl) ;/ de <-- new index - inc hl ;/ - inc hl ;/ hl --> limit(lb) - ld a,e - sub (hl) - ld a,d - inc hl ; hl --> limit(hb) - sbc a,(hl) ; index < limit? - jp m,bran1 ; yes, loop again - inc hl ; no, done - ld (rpp),hl ; discard r1 & r2 - inc bc - inc bc ; skip branch offset - jnext -; -; - defb 87h ; (+LOOP) - defc '(+LOOP)' - defw xloop-9 -xploo: - defw $+2 - pop de ; de <-- increment - ld hl,(rpp) ; hl --> index - ld a,(hl) ; index += increment - add a,e - ld (hl),a - ld e,a - inc hl - ld a,(hl) - adc a,d - ld (hl),a - inc hl ; (hl) --> limit - inc d - dec d - ld d,a ; de <-- new index - jp m,xloo2 ; if incr > 0 - ld a,e - sub (hl) ; then a <-- index - limit - ld a,d - inc hl - sbc a,(hl) - jp xloo3 - -xloo2: - ld a,(hl) ; else a <-- limit - index - sub e - inc hl - ld a,(hl) - sbc a,d -; ; if a < 0 -xloo3: - jp m,bran1 ; then loop again - inc hl ; else done - ld (rpp),hl ; discard r1 & r2 - inc bc ; skip branch offset - inc bc - jnext -; -; - defb 84h ; (DO) - defc '(DO)' - defw xploo-0ah -xdo: - defw $+2 - pop de ; de <-- initial index - ld hl,(rpp) ; hl <-- rp - dec hl - dec hl - pop (hl) ;/ r2 <-- limit - dec hl - dec hl - ldw (hl),de ;/ r1 <-- initial index - ld (rpp),hl ; rp -= 4 - jnext -; -; - defb 81h ; I - defc 'I' - defw xdo-7 -ido: - defw $+2 - ld hl,(rpp) - push (hl) ;/ s1 <-- r1, r1 unchanged - jnext -; -; - defb 85h ; DIGIT - defc 'DIGIT' - defw ido-4 -digit: - defw $+2 - pop hl ; l <-- s1.lb = base value - pop de ; e <-- s2.lb = chr to be converted - ld a,e ; a <-- chr - sub '0' ; >= 0? - jr c,digi2 ;/ < 0 is invalid - cp 0ah ; > 9? - jr c,digi1 ;/ no, test base value - sub 07h ; gap between '9' & 'A', nw 'A'=0ah - cp 0ah ; >= 'A'? - jr c,digi2 ;/ chrs btwn '9' & 'A' are invalid -digi1: - cp l ; < base value? - jr nc,digi2 ;/ no, invalid - ld e,a ; s2 <-- de = converted digit - ld hl,0001h ; s1 <-- true - jp dpush -; -digi2: - ld l,h ; hl <-- false - jhpush ; s1 <-- false -; -; - defb 86h ; (FIND) (2-1)FAILURE - defc '(FIND)' ; (2-3)SUCCESS - defw digit-8 -pfind: - defw $+2 - pop de ; de <-- nfa -pfin1: - pop hl ; hl <-- string addr - push hl ; save for next iteration - ld a,(de) - xor (hl) ; filter differences - and 3fh ; mask msb & precedence bit - jr nz,pfin4 ; lengths differ -pfin2: - inc hl ; hl --> next string chr - inc de ; de --> next name field chr - ld a,(de) - xor (hl) ; filter differences - add a,a ; shift msbit into carry - jr nz,pfin3 ; no match - jr nc,pfin2 ; match so far, loop agn - ld hl,0005h ; string matches - add hl,de ; (sp) <-- pfa - ex (sp),hl -pfin6: - dec de ; de --> nfa - ld a,(de) - or a ; msb=1? =length byte - jp p,pfin6 ; no, try next chr - ld e,a ; e <-- length byte - ld d,00h - ld hl,0001h ; hl <-- true - jp dpush ; name field found, return -; -; above name field not a match, try next one -; -pfin3: - jr c,pfin5 ; carry=end of name field -pfin4: - inc de ; find name field end - ld a,(de) - or a ; msb=1? - jp p,pfin4 ; no, loop -pfin5: - inc de ; de <-- lfa - ex de,hl - ldw de,(hl) ;/ de <-- lfa - ld a,d - or e ; end of dictionary (lfa = 0)? - jr nz,pfin1 ; no, try previous definition - pop hl ; drop string address - ld hl,0 ; hl <-- false - jhpush ; no match found, return -; -; - defb 87h ; ENCLOSE - defc 'ENCLOSE' - defw pfind-9 -encl: - defw $+2 - pop de ; de <-- s1 = delimiter chr - pop hl ; hl <-- s2 = addr of text to scan - push hl ; s4 <-- addr - ld a,e - ld d,a ; d <-- delim chr - ld e,-1 ; init chr offset counter - dec hl ; hl <-- addr - 1 -encl1: - inc hl ; skip over leading delim chrs - inc e - cp (hl) ; delim chr? - jr z,encl1 ; yes, loop - ld d,0 - push de ; s3 <-- e = offset to 1st non delim - ld d,a ; d <-- delim chr - ld a,(hl) - and a ; 1st non-delim=null? - jr nz,encl2 ; no - ld d,0 ; yes - inc e - push de ; s2 <-- offset to byte following null - dec e - push de ; s1 <-- offset to null - jnext -; -encl2: - ld a,d ; A <-- delim chr - inc hl ; hl <-- next chr's address - inc e ; e <-- offset to next chr - cp (hl) ; delim chr? - jr z,encl4 ; yes - ld a,(hl) - and a ; null? - jr nz,encl2 ; no, continue scan -encl3: - ld d,0 - push de ; s2 <-- offset to null - push de ; s1 <-- offset to null - jnext -; -encl4: - ld d,0 - push de ; s2 <-- offset to byte following text - inc e - push de ; s1 <-- offset 2 bytes aft end of word - jnext -; -; - defb 84h ; EMIT - defc 'EMIT' - defw encl-0ah -emit: - defw docol - defw pemit - defw one,outt - defw pstor,semis -; -; - defb 83h ; KEY - defc 'KEY' - defw emit-7 -key: - defw $+2 - jp pkey -; -; - defb 89h ; ?TERMINAL - defc '?TERMINAL' - defw key-6 -qterm: - defw $+2 - ld hl,0 - jp pqter -; -; - defb 82h ; CR - defc 'CR' - defw qterm-0ch -cr: - defw $+2 - jp pcr -; -; - defb 85h ; CMOVE - defc 'CMOVE' - defw cr-5 -cmove: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- s1 = # of chrs - pop de ; de <-- s2 = dest addr - pop hl ;/ hl <-- s3 = source addr - ld a,b - or c ; bc=0? - jr z,cmove1 ; yes, nothing to move - ldir ;/ xfer string -cmove1: - exx ;/ restore ip - jnext -; -; - defb 86h ;/ -CMOVE ( from to count --- ) - defc '-CMOVE' - defw cmove-8 -bcmov: - defw $+2 - exx ; save ip - pop bc ; bc <-- count - pop de ; de <-- destination - pop hl ; hl <-- source - ld a,b - or c ; bc =0? - jr z,bcmov1 ; yes, nothing to move - add hl,bc - dec hl ; hl --> hi end of source block - ex de,hl - add hl,bc - dec hl - ex de,hl ; de --> hi end of dest. block - lddr ; (de) <-- (hl), --hl,bc until bc=0 -bcmov1: - exx ; restore ip - jnext -; -; - defb 82h ; U* 16*16 unsigned multiply - defc 'U*' ; with 32 bit result - defw bcmov-9 -ustar: - defw $+2 - pop de ; de <-- multiplier - pop hl ; hl <-- multiplicant - multuw hl,de ;/ - ex de,hl ;/ de <-- product.lw, hl <-- product.hw - jp dpush ; s2,s1 <-- product.lw,hw -; -; - defb 82h ; U/ ( ud u1 -- urem uq ) - defc 'U/' - defw ustar-5 -uslas: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- divisor - pop hl ; hl <-- dividend.hw - pop de ; de <-- dividend.lw - cpw hl,bc ;/ dividend.hw >= divisor? - jr c,usla1 ; no, go ahead - ld hl,0ffffh ; yes, overflow - ld d,h - ld e,l ;/ set rem & quot to max - jr usla2 -usla1: - ex de,hl ;/ de,hl <-- dividend.hw,lw - divuw dehl,bc ;/ de <-- remainder, hl <-- quotient -usla2: - push de ;/ s2 <-- remainder - push hl ;/ s1 <-- quotient - exx ;/ restore ip - jnext -; -; - defb 83h ; AND - defc 'AND' - defw uslas-5 -andd: - defw $+2 ; s1 <-- s1 AND s2 - pop de - pop hl - ld a,e - and l - ld l,a - ld a,d - and h - ld h,a - jhpush -; -; - defb 82h ; OR - defc 'OR' - defw andd-6 -orr: - defw $+2 ; s1 <-- s1 OR s2 - pop de - pop hl - ld a,e - or l - ld l,a - ld a,d - or h - ld h,a - jhpush -; -; - defb 83h ; XOR - defc 'XOR' - defw orr-5 -xorr: - defw $+2 ; s1 <-- s1 XOR s2 - pop de - pop hl - ld a,e - xor l - ld l,a - ld a,d - xor h - ld h,a - jhpush -; -; - defb 83h ; SP@ - defc 'SP@' - defw xorr-6 -spat: - defw $+2 - ld hl,0 - add hl,sp ; hl <-- sp - jhpush ; s1 <-- sp -; -; - defb 83h ; SP! - defc 'SP!' - defw spat-6 -spsto: - defw $+2 ; sp <-- s0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,6 - add hl,de ; hl --> s0 - ldw sp,(hl) ;/ sp <-- s0 - jnext -; -; - defb 83h ; RP@ - defc 'RP@' - defw spsto-6 -rpat: - defw $+2 - ld hl,(rpp) - jhpush ; s1 <-- rp -; -; - defb 83h ; RP! - defc 'RP!' - defw rpat-6 -rpsto: - defw $+2 ; rp <-- r0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,0008h - add hl,de ; hl --> r0 - ldw hl,(hl) ;/ hl <-- r0 - ld (rpp),hl ;/ rp <-- r0 - jnext -; -; - defb 82h ; ;S - defc ';S' - defw rpsto-6 -semis: - defw $+2 ; ip <-- r1 - ld hl,(rpp) - ldw bc,(hl) ;/ bc <-- r1 - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 85h ; LEAVE - defc 'LEAVE' - defw semis-5 -leave: - defw $+2 ; limit <-- index - ld hl,(rpp) - ldw de,(hl) ;/ de <-- r1 (= index) - inc hl - inc hl - ldw (hl),de ;/ r2 (= limit) <-- index - jnext -; -; - defb 82h ; >R - defc '>R' - defw leave-8 -tor: - defw $+2 - ld hl,(rpp) - dec hl - dec hl - pop (hl) ;/ r1 <-- s1 - ld (rpp),hl ; rp -= 2 - jnext -; -; - defb 82h ; R> - defc 'R>' - defw tor-5 -fromr: - defw $+2 - ld hl,(rpp) - push (hl) ;/ s1 <-- r1 - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 81h ; R - defc 'R' - defw fromr-5 -rr: - defw ido+2 -; -; - defb 82h ; 0= - defc '0=' - defw rr-4 -zequ: - defw $+2 - pop de - ld hl,0 - cpw hl,de ;/ - jr nz,zequ1 - inc l ; hl <-- true -zequ1: - jhpush -; -; - defb 83h ;/ 0<> - defc '0<>' - defw zequ-5 -znequ: - defw $+2 - pop de - ld hl,0 - cpw hl,de ;/ - jr z,znequ1 - inc l ; hl <-- true -znequ1: - jhpush -; -; - defb 82h ; 0< - defc '0<' - defw znequ-6 -zless: - defw $+2 - pop af ;/ a <-- s1.hb - rla ;/ carry <-- bit 7 - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry - jhpush -; -; - defb 82h ;/ 0> - defc '0>' - defw zless-5 -zgt: - defw $+2 - pop de - ld hl,0 - cpw hl,de ;/ - jp p,zgt1 ;/ <= 0 - jp pe,zgt1 ;/ 8000h special case - inc l ;/ hl <-- true -zgt1: - jhpush -; -; - defb 81h ;+ - defc '+' - defw zgt-5 -plus: - defw $+2 - pop de - pop hl - add hl,de - jhpush -; -; - defb 82h ; D+ ( d1l d1h d2l d2h -- d3l d3h) - defc 'D+' - defw plus-4 -dplus: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- d2.hw - pop hl ; hl <-- d2.lw - pop af ;d af <-- d1.hw - pop de ; de <-- d1.lw - push af ;/ s1 <-- d1.hw - add hl,de ; hl <-- d2.lw + d1.lw (= d3.lw) - ex de,hl ; de <-- d3.lw - pop hl ; hl <-- d1.hw - adc hl,bc ;/ hl <-- d1.hw + d2.hw +carry (=d3.hw) - push de ; s2 <-- d3.lw - push hl ;/ s1 <-- d3.hw - exx ;/ restore ip - jnext -; -; - defb 85h ; MINUS - defc 'MINUS' - defw dplus-5 -minus: - defw $+2 - pop hl ;/ - neg hl ;/ - jhpush -; -; - defb 86h ; DMINUS - defc 'DMINUS' - defw minus-8 -dminu: - defw $+2 - exx ;/ save ip - pop de ;/ de <-- d1.hw - pop bc ;/ bc <-- d1.lw - ld hl,0 ;/ - subw hl,bc ;/ - push hl ; s2 <-- d2.lw - ld hl,0 ;/ - sbc hl,de ;/ - push hl ; s1 <-- d2.hw - exx ;/ - jnext -; -; - defb 84h ; OVER - defc 'OVER' - defw dminu-9 -over: - defw $+2 - ldw hl,(sp+2) ;/ - jhpush ;/ -; -; - defb 84h ; DROP - defc 'DROP' - defw over-7 -drop: - defw $+2 - inc sp - inc sp ;/ faster on z280 than dummy pop - jnext -; -; - defb 84h ; SWAP - defc 'SWAP' - defw drop-7 -swap: - defw $+2 - pop hl - ex (sp),hl - jhpush -; -; - defb 83h ; DUP - defc 'DUP' - defw swap-7 -dup: - defw $+2 - ldw hl,(sp+0) ;/ - jhpush -; -; - defb 84h ;/ TUCK ( n1 n2 --- n2 n1 n2) - defc 'TUCK' - defw dup-6 -tuck: - defw $+2 - pop hl ;/ hl <-- s1 - pop de ;/ de <-- s2 - push hl ;/ s3 <-- hl - jp dpush -; -; - defb 83h ;/ NIP ( n1 n2 --- n2) - defc 'NIP' - defw tuck-7 -nip: - defw $+2 - pop hl ; hl <-- s1 - ldw (sp+0),hl ;/ s1 <-- hl - jnext -; -; - defb 84h ;/ -ROT ( n1 n2 n3 --- n3 n1 n2) - defc '-ROT' - defw nip-6 -mrot: - defw $+2 - pop hl - pop de - ex (sp),hl - ex de,hl - jp dpush -; -; - defb 85h ;/ CSWAP ( n1 --- n1, bytes swapped) - defc 'CSWAP' - defw mrot-7 -cswap: - defw $+2 - pop hl - ex h,l ;/ - jhpush -; -; - defb 84h ;/ PICK ( nn...n0 k --- nn..n0 nk) - defc 'PICK' - defw cswap-8 -pick: - defw $+2 - pop hl ; hl <-- depth - add hl,hl ; adjust to word size - add hl,sp ; offset into stack - push (hl) ;/ - jnext -; -; - defb 84h ; 2DUP - defc '2DUP' - defw pick-7 -tdup: - defw $+2 - pop hl - pop de - push de - push hl - jp dpush -; -; - defb 82h ; +! - defc '+!' - defw tdup-7 -pstor: - defw $+2 - pop hl ; hl --> variable - pop de ; de <-- number - ld a,(hl) - add a,e - ld (hl),a - inc hl - ld a,(hl) - adc a,d - ld (hl),a ; (hl) += number - jnext -; -; - defb 86h ; TOGGLE - defc 'TOGGLE' - defw pstor-5 -toggl: - defw $+2 - pop de ; e <-- bit pattern - pop hl ; hl --> address - ld a,(hl) - xor e - ld (hl),a - jnext -; -; - defb 81h ; @ - defc '@' - defw toggl-9 -at: - defw $+2 - pop hl - push (hl) ;/ - jnext -; -; - defb 82h ; C@ - defc 'C@' - defw at-4 -cat: - defw $+2 - pop hl - ld l,(hl) - ld h,0 - jhpush -; -; - defb 82h ; 2@ - defc '2@' - defw cat-5 -tat: - defw $+2 - pop hl ; hl --> address - ldw de,(hl) ;/ de <-- d.hw - inc hl - inc hl ; hl --> d.lw - push (hl) ;/ s2 <-- d.lw - push de ;/ s1 <-- d.hw - jnext -; -; - defb 81h ; ! - defc '!' - defw tat-5 -store: - defw $+2 - pop hl ; hl --> address - pop (hl) ;/ - jnext -; -; - defb 82h ; C! - defc 'C!' - defw store-4 -cstor: - defw $+2 - pop hl ; hl --> address - pop de ; e <-- char - ld (hl),e - jnext -; -; - defb 82h ; 2! - defc '2!' - defw cstor-5 -tstor: - defw $+2 - pop hl ; hl --> address - pop (hl) ;/ store d.hw - inc hl - inc hl - pop (hl) ;/ store d.lw - jnext -; -; - defb 0c1h ; : - defc ':' - defw tstor-5 -colon: - defw docol - defw qexec - defw scsp - defw curr - defw at - defw cont - defw store - defw creat - defw rbrac - defw pscod -docol: - ld hl,(rpp) - dec hl - dec hl - ldw (hl),bc ;/ save return address - ld (rpp),hl - inc de - ld c,e - ld b,d - jnext -; -; - defb 0c1h ; ; - defc ';' - defw colon-4 -semi: - defw docol - defw qcsp - defw comp - defw semis - defw smudg - defw lbrac - defw semis -; -; - defb 84h ; NOOP - defc 'NOOP' - defw semi-4 -noop: - defw docol - defw semis -; -; - defb 88h ; CONSTANT - defc 'CONSTANT' - defw noop-7 -con: - defw docol - defw creat - defw smudg - defw comma - defw pscod -docon: - inc de - ex de,hl - push (hl) ;/ - jnext -; -; - defb 88h ; VARIABLE - defc 'VARIABLE' - defw con-0bh -var: - defw docol - defw con - defw pscod -dovar: - inc de - push de - jnext -; -; - defb 84h ; USER - defc 'USER' - defw var-0bh -user: - defw docol - defw con - defw pscod -douse: - inc de - ex de,hl - ld l,(hl) ;/ - ld h,0 ;/ - addw hl,(up) ;/ - jhpush -; -; - defb 81h ; 0 - defc '0' - defw user-7 -zero: - defw $+2 ;/ - push 0000h ;/ - jnext -; -; - defb 81h ; 1 - defc '1' - defw zero-4 -one: - defw $+2 ;/ - push 0001h ;/ - jnext -; -; - defb 81h ; 2 - defc '2' - defw one-4 -two: - defw $+2 ;/ - push 0002h ;/ - jnext -; -; - defb 81h ; 3 - defc '3' - defw two-4 -three: - defw $+2 ;/ - push 0003h ;/ - jnext -; -; - defb 82h ; BL - defc 'BL' - defw three-4 -bl: - defw docon - defw 20h -; -; - defb 83h ; C/L - defc 'C/L' - defw bl-5 -csll: - defw docon - defw 64 -; -; - defb 85h ; FIRST - defc 'FIRST' - defw csll-6 -first: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; LIMIT - defc 'LIMIT' - defw first-8 -limit: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; B/BUF - defc 'B/BUF' - defw limit-8 -bbuf: - defw docon - defw kbbuf -; -; - defb 85h ; B/SCR - defc 'B/SCR' - defw bbuf-8 -bscr: - defw docon - defw 400h/kbbuf -; -; - defb 87h ; +ORIGIN - defc '+ORIGIN' - defw bscr-8 -porig: - defw docol - defw lit - defw orig - defw plus - defw semis -; -; USER VARIABLES -; - defb 82h ; S0 - defc 'S0' - defw porig-0ah -szero: - defw douse - defw 6 -; -; - defb 82h ; R0 - defc 'R0' - defw szero-5 -rzero: - defw douse - defw 8 -; -; - defb 83h ; TIB - defc 'TIB' - defw rzero-5 -tib: - defw douse - defb 0ah -; -; - defb 85h ; WIDTH - defc 'WIDTH' - defw tib-6 -width: - defw douse - defb 0ch -; -; - defb 87h ; WARNING - defc 'WARNING' - defw width-8 -warn: - defw douse - defb 0eh -; -; - defb 85h ; FENCE - defc 'FENCE' - defw warn-0ah -fence: - defw douse - defb 10h -; -; - defb 82h ; DP - defc 'DP' - defw fence-8 -dp: - defw douse - defb 12h -; -; - defb 88h ; VOC-LINK - defc 'VOC-LINK' - defw dp-5 -vocl: - defw douse - defw 14h -; -; - defb 83h ; BLK - defc 'BLK' - defw vocl-0bh -blk: - defw douse - defb 16h -; -; - defb 82h ; IN - defc 'IN' - defw blk-6 -inn: - defw douse - defb 18h -; -; - defb 83h ; OUT - defc 'OUT' - defw inn-5 -outt: - defw douse - defb 1ah -; -; - defb 83h ; SCR - defc 'SCR' - defw outt-6 -scr: - defw douse - defb 1ch -; -; - defb 86h ; OFFSET - defc 'OFFSET' - defw scr-6 -ofset: - defw douse - defb 1eh -; -; - defb 87h ; CONTEXT - defc 'CONTEXT' - defw ofset-9 -cont: - defw douse - defb 20h -; -; - defb 87h ; CURRENT - defc 'CURRENT' - defw cont-0ah -curr: - defw douse - defb 22h -; -; - defb 85h ; STATE - defc 'STATE' - defw curr-0ah -state: - defw douse - defb 24h -; -; - defb 84h ; BASE - defc 'BASE' - defw state-8 -base: - defw douse - defb 26h -; -; - defb 83h ; DPL - defc 'DPL' - defw base-7 -dpl: - defw douse - defb 28h -; -; - defb 83h ; FLD - defc 'FLD' - defw dpl-6 -fld: - defw douse - defb 2ah -; -; - defb 83h ; CSP - defc 'CSP' - defw fld-6 -cspp: - defw douse - defb 2ch -; - - defb 82h ; R# - defc 'R#' - defw cspp-6 -rnum: - defw douse - defb 2eh -; - - defb 83h ; HLD - defc 'HLD' - defw rnum-5 -hld: - defw douse - defw 30h -; -; END OF USER VARIABLES -; - defb 82h ; 1+ - defc '1+' - defw hld-6 -onep: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ; 2+ - defc '2+' - defw onep-5 -twop: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 1- - defc '1-' ;/ - defw twop-5 ;/ -onemin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2- - defc '2-' ;/ - defw onemin-5 ;/ -twomin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2* - defc '2*' ;/ - defw twomin-5 ;/ -twosta: - defw $+2 ;/ - pop hl ;/ - add hl,hl ;/ asl hl - jhpush ;/ -; -; - defb 82h ;/ 2/ - defc '2/' ;/ - defw twosta-5 ;/ -twosla: - defw $+2 ;/ - pop hl ;/ - bit 7,h ;/ negative? - jr z,twosl1 ;/ no - inc hl ;/ yes, add 1 -twosl1: - sra h ;/ - rr l ;/ asr hl - jhpush ;/ -; -; - defb 84h ; HERE - defc 'HERE' - defw twosla-5 -here: - defw docol - defw dp - defw at - defw semis -; -; - defb 85h ; ALLOT - defc 'ALLOT' - defw here-7 -allot: - defw docol - defw dp - defw pstor - defw semis -; -; - defb 81h ; , - defc ',' - defw allot-8 -comma: - defw docol - defw here - defw store - defw two - defw allot - defw semis -; - - defb 82h ; C, - defc 'C,' - defw comma-4 -ccomm: - defw docol - defw here - defw cstor - defw one - defw allot - defw semis -; -; - defb 81h ; - - defc '-' - defw ccomm-5 -subb: - defw $+2 - pop de - pop hl - subw hl,de ;/ - jhpush -; -; - defb 81h ; = - defc '=' - defw subb-4 -equal: - defw $+2 ;/ - pop de ;/ - pop hl ;/ - subw hl,de ;/ - ld hl,0 ; hl <-- false - jr nz,equal1 - inc l ;/ hl <-- true -equal1: - jhpush -; -; - defb 81h ; < - defc '<' - defw equal-4 -less: - defw $+2 - pop de - pop hl ; hl de < - ld a,d - xor h ; one operand negative? - jp m,less1 ; yes, determine which - subw hl,de ;/ -less1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,less2 - inc l ;/ hl <-- true -less2: - jhpush -; -; - defb 82h ; U< - defc 'U<' - defw less-4 -uless: - defw $+2 - pop de - pop hl ;/ hl de U< - subw hl,de ;/ - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry -uless1: - jhpush -; -; - defb 81h ; > - defc '>' - defw uless-5 -great: - defw $+2 - pop hl ;/ - pop de ;/ hl de > (= de hl < ) - ld a,d - xor h ; one operand negative? - jp m,great1 ; yes, determine which - subw hl,de ;/ -great1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,great2 - inc l ;/ hl <-- true -great2: - jhpush -; -; - defb 83h ; ROT ( n1 n2 n3 --- n2 n3 n1) - defc 'ROT' - defw great-4 -rot: - defw $+2 - pop de ; de <-- n3 - pop hl ; hl <-- n2 - ex (sp),hl ; s1 <-- n2, hl <-- n1 - jp dpush ; s2 <-- n3, s3 <-- n1 -; -; - defb 85h ; SPACE - defc 'SPACE' - defw rot-6 -space: - defw docol - defw bl - defw emit - defw semis -; -; - defb 84h ; -DUP - defc '-DUP' - defw space-8 -ddup: - defw $+2 ;/ - ldw hl,(sp+0) ;/ - ld a,h ;/ - or l ;/ hl = 0? - jr z,ddup1 ;/ yes, don't dup - push hl ;/ -ddup1: - jnext -; -; - defb 88h ; TRAVERSE - defc 'TRAVERSE' - defw ddup-7 -trav: - defw docol - defw swap -trav1: - defw over ; begin - defw plus - defw lit - defw 7fh - defw over - defw cat - defw less - defw zbran ; until - defw trav1-$ - defw swap - defw drop - defw semis -; -; - defb 86h ; LATEST - defc 'LATEST' - defw trav-0bh -lates: - defw docol - defw curr - defw at - defw at - defw semis -; -; - defb 83h ; LFA - defc 'LFA' - defw lates-9 -lfa: - defw $+2 - pop hl ;/ hl <-- pfa - subw hl,4 ;/ - jhpush ;/ s1 <-- lfa -; -; - defb 83h ; CFA - defc 'CFA' - defw lfa-6 -cfa: - defw docol - defw twomin ;/ - defw semis -; -; - defb 83h ; NFA - defc 'NFA' - defw cfa-6 -nfa: - defw docol - defw lit - defw 5 - defw subb - defw lit - defw -1 - defw trav - defw semis -; -; - defb 83h ; PFA - defc 'PFA' - defw nfa-6 -pfa: - defw docol - defw one - defw trav - defw lit - defw 5 - defw plus - defw semis -; -; - defb 84h ; !CSP - defc '!CSP' - defw pfa-6 -scsp: - defw docol - defw spat - defw cspp - defw store - defw semis -; -; - defb 86h ; ?ERROR - defc '?ERROR' - defw scsp-7 -qerr: - defw docol - defw swap - defw zbran ; if - defw qerr1-$ - defw error - defw bran ; else - defw qerr2-$ -qerr1: - defw drop ; endif -qerr2: - defw semis -; -; - defb 85h ; ?COMP - defc '?COMP' - defw qerr-9 -qcomp: - defw docol - defw state - defw at - defw zequ - defw lit - defw 11h - defw qerr - defw semis -; -; - defb 85h ; ?EXEC - defc '?EXEC' - defw qcomp-8 -qexec: - defw docol - defw state - defw at - defw lit - defw 12h - defw qerr - defw semis -; -; - defb 86h ; ?PAIRS - defc '?PAIRS' - defw qexec-8 -qpair: - defw docol - defw subb - defw lit - defw 13h - defw qerr - defw semis -; -; - defb 84h ; ?CSP - defc '?CSP' - defw qpair-9 -qcsp: - defw docol - defw spat - defw cspp - defw at - defw subb - defw lit - defw 14h - defw qerr - defw semis -; -; - defb 88h ; ?LOADING - defc '?LOADING' - defw qcsp-7 -qload: - defw docol - defw blk - defw at - defw zequ - defw lit - defw 16h - defw qerr - defw semis -; -; - defb 87h ; COMPILE - defc 'COMPILE' - defw qload-0bh -comp: - defw docol - defw qcomp - defw fromr - defw dup - defw twop - defw tor - defw at - defw comma - defw semis -; -; - defb 0c1h ; [ - defc '[' - defw comp-0ah -lbrac: - defw docol - defw zero - defw state - defw store - defw semis -; -; - defb 81h ; ] - defc ']' - defw lbrac-4 -rbrac: - defw docol - defw lit,0c0h - defw state,store - defw semis -; -; - defb 86h ; SMUDGE - defc 'SMUDGE' - defw rbrac-4 -smudg: - defw docol - defw lates - defw lit - defw 20h - defw toggl - defw semis -; -; - defb 83h ; HEX - defc 'HEX' - defw smudg-9 -hex: - defw docol - defw lit - defw 10h - defw base - defw store - defw semis -; -; - defb 87h ; DECIMAL - defc 'DECIMAL' - defw hex-6 -dec: - defw docol - defw lit - defw 0ah - defw base - defw store - defw semis -; -; - defb 87h ; (;CODE) - defc '(;CODE)' - defw dec-0ah -pscod: - defw docol - defw fromr - defw lates - defw pfa - defw cfa - defw store - defw semis -; -; - defb 0c5h ; ;CODE - defc ';CODE' - defw pscod-0ah -semic: - defw docol - defw qcsp - defw comp - defw pscod - defw lbrac -semi1: - defw noop ; assembler - defw semis -; -; - defb 87h ; - defc 'DOES>' - defw build-0ah -does: - defw docol - defw fromr - defw lates - defw pfa - defw store - defw pscod -dodoe: - ld hl,(rpp) - dec hl - dec hl - ldw (hl),bc ;/ - ld (rpp),hl - inc de - ex de,hl - ldw bc,(hl) ;/ - inc hl - inc hl - jhpush -; -; - defb 85h ; COUNT - defc 'COUNT' - defw does-8 -count: - defw docol - defw dup - defw onep - defw swap - defw cat - defw semis -; -; - defb 84h ; TYPE - defc 'TYPE' - defw count-8 -type: - defw docol - defw ddup - defw zbran ; if - defw type1-$ - defw over - defw plus - defw swap - defw xdo ; do -type2: - defw ido - defw cat - defw emit - defw xloop ; loop - defw type2-$ - defw bran ; else - defw type3-$ -type1: - defw drop ; endif -type3: - defw semis -; -; - defb 89h ; -TRAILING - defc '-TRAILING' - defw type-7 -dtrai: - defw docol - defw dup - defw zero - defw xdo ; do -dtra1: - defw tdup ;/ - defw plus - defw onemin ;/ - defw cat - defw bl - defw subb - defw zbran ; if - defw dtra2-$ - defw leave - defw bran ; else - defw dtra3-$ -dtra2: - defw onemin ;/ -dtra3: - defw xloop ; loop - defw dtra1-$ - defw semis -; -; - defb 84h ; (.") - defc '(.")' - defw dtrai-0ch -pdotq: - defw docol - defw rr - defw count - defw dup - defw onep - defw fromr - defw plus - defw tor - defw type - defw semis -; -; - defb 0c2h ; ." - defc '."' - defw pdotq-7 -dotq: - defw docol - defw lit - defw 22h - defw state - defw at - defw zbran ; if - defw dotq1-$ - defw comp - defw pdotq - defw word - defw here - defw cat - defw onep - defw allot - defw bran ; else - defw dotq2-$ -dotq1: - defw word - defw here - defw count - defw type ; endif -dotq2: - defw semis -; -; - defb 86h ; EXPECT - defc 'EXPECT' - defw dotq-5 -expec: - defw docol - defw over - defw plus - defw over - defw xdo ; do -expe1: - defw key - defw dup - defw lit - defw 0eh - defw porig - defw at - defw equal - defw zbran ; if - defw expe2-$ - defw drop - defw dup - defw ido - defw equal - defw dup - defw fromr - defw twomin ;/ - defw plus - defw tor - defw zbran ; if - defw expe6-$ - defw lit - defw bell - defw bran ; else - defw expe7-$ -expe6: - defw lit - defw bsout ; endif -expe7: - defw bran ; else - defw expe3-$ -expe2: - defw dup - defw lit - defw acr ;/ - defw equal - defw zbran ; if - defw expe4-$ - defw leave - defw drop - defw bl - defw zero - defw bran ; else - defw expe5-$ -expe4: - defw dup ; endif -expe5: - defw ido - defw cstor - defw zero - defw ido - defw onep - defw store ; endif -expe3: - defw emit - defw xloop ; loop - defw expe1-$ - defw drop - defw semis -; -; - defb 85h ; QUERY - defc 'QUERY' - defw expec-9 -query: - defw docol - defw tib - defw at - defw lit - defw 50h - defw expec - defw zero - defw inn - defw store - defw semis -; -; - defb 0c1h ; NULL - defb 80h - defw query-8 -null: - defw docol - defw blk - defw at - defw zbran ; if - defw null1-$ - defw one - defw blk - defw pstor - defw zero - defw inn - defw store - defw blk - defw at - defw bscr - defw onemin ;/ - defw andd - defw zequ - defw zbran ; if - defw null2-$ - defw qexec - defw fromr - defw drop ; endif -null2: - defw bran ; else - defw null3-$ -null1: - defw fromr - defw drop ; endif -null3: - defw semis -; - defb 84h ; FILL - defc 'FILL' - defw null-4 -fill: - defw $+2 - exx ;/ save ip - pop de ;/ e <-- byte - pop bc ; bc <-- quantity - pop hl ;/ hl <-- address -fill1: - ld a,b - or c ; qty == 0? - jr z,fill2 ; yes, nothing (more) to fill - ld (hl),e ;/ (hl) <-- byte - inc hl ; inc pointer - dec bc ; dec counter - jp fill1 ;/ -fill2: - exx ;/ restore ip - jnext -; -; - defb 85h ; ERASE - defc 'ERASE' - defw fill-7 -erasee: - defw docol - defw zero - defw fill - defw semis -; -; - defb 86h ; BLANKS - defc 'BLANKS' - defw erasee-8 -blank: - defw docol - defw bl - defw fill - defw semis -; -; - defb 84h ; HOLD - defc 'HOLD' - defw blank-9 -hold: - defw docol - defw lit - defw -1 - defw hld - defw pstor - defw hld - defw at - defw cstor - defw semis -; -; - defb 83h ; PAD - defc 'PAD' - defw hold-7 -pad: - defw docol - defw here - defw lit - defw 44h - defw plus - defw semis -; -; - defb 84h ; WORD - defc 'WORD' - defw pad-6 -word: - defw docol - defw blk - defw at - defw zbran ; if - defw word1-$ - defw blk - defw at - defw block - defw bran ; else - defw word2-$ -word1: - defw tib - defw at ; endif -word2: - defw inn - defw at - defw plus - defw swap - defw encl - defw here - defw lit - defw 22h - defw blank - defw inn - defw pstor - defw over - defw subb - defw tor - defw rr - defw here - defw cstor - defw plus - defw here - defw onep - defw fromr - defw cmove - defw semis -; -; - defb 88h ; (NUMBER) - defc '(NUMBER)' - defw word-7 -pnumb: - defw docol -pnum1: - defw onep ; begin - defw dup - defw tor - defw cat - defw base - defw at - defw digit - defw zbran ; while - defw pnum2-$ - defw swap - defw base - defw at - defw ustar - defw drop - defw rot - defw base - defw at - defw ustar - defw dplus - defw dpl - defw at - defw onep - defw zbran ; if - defw pnum3-$ - defw one - defw dpl - defw pstor ; endif -pnum3: - defw fromr - defw bran ; repeat - defw pnum1-$ -pnum2: - defw fromr - defw semis -; -; - defb 86h ; NUMBER - defc 'NUMBER' - defw pnumb-0bh -numb: - defw docol - defw zero - defw zero - defw rot - defw dup - defw onep - defw cat - defw lit - defw 2dh - defw equal - defw dup - defw tor - defw plus - defw lit - defw -1 -numb1: - defw dpl ; begin - defw store - defw pnumb - defw dup - defw cat - defw bl - defw subb - defw zbran ; while - defw numb2-$ - defw dup - defw cat - defw lit - defw 2eh - defw subb - defw zero - defw qerr - defw zero - defw bran ; repeat - defw numb1-$ -numb2: - defw drop - defw fromr - defw zbran ; if - defw numb3-$ - defw dminu ; endif -numb3: - defw semis -; -; - defb 85h ; -FIND (0-3) SUCCESS - defc '-FIND' ; (0-1) FAILURE - defw numb-9 -dfind: - defw docol - defw bl - defw word - defw here - defw cont - defw at - defw at - defw pfind - defw dup - defw zequ - defw zbran ; if - defw dfin1-$ - defw drop - defw here - defw lates - defw pfind ; endif -dfin1: - defw semis -; -; - defb 87h ; (ABORT) - defc '(ABORT)' - defw dfind-8 -pabor: - defw docol - defw abort - defw semis -; - defb 85h ; ERROR - defc 'ERROR' - defw pabor-0ah -error: - defw docol - defw warn - defw at - defw zless - defw zbran ; if - defw erro1-$ - defw pabor ; endif -erro1: - defw here - defw count - defw type - defw pdotq - defb 2 - db '? ' - defw mess - defw spsto -; CHANGE FROM fig MODEL -; defw inn,at,blk,at - defw blk,at - defw ddup - defw zbran,erro2-$ ; if - defw inn,at - defw swap ; endif -erro2: - defw quit -; -; - defb 83h ; ID. - defc 'ID.' - defw error-8 -iddot: - defw docol - defw pad - defw lit - defw 20h - defw blank ;/ - defw dup - defw pfa - defw lfa - defw over - defw subb - defw dup ;/ change frm MODEL - defw tor ;/ to suppress BIT 7 - defw pad - defw swap - defw cmove - defw pad - defw fromr ;/ for terminals - defw pad ;/ with an 8 bit - defw plus ;/ ASCII character set. - defw onemin ;/ - defw dup ;/ - defw at ;/ - defw lit ;/ - defw 7fh ;/ - defw andd ;/ - defw swap ;/ - defw store ;/ - defw count - defw lit - defw 1fh ; WIDTH - defw andd - defw type - defw space - defw semis -; - defb 86h ; CREATE - defc 'CREATE' - defw iddot-6 -creat: - defw docol - defw dfind - defw zbran ; if - defw crea1-$ - defw drop - defw nfa - defw iddot - defw lit - defw 4 - defw mess - defw space ; endif -crea1: - defw here - defw dup - defw cat - defw width - defw at - defw min - defw onep - defw allot - defw dup - defw lit - defw 0a0h - defw toggl - defw here - defw onemin - defw lit - defw 80h - defw toggl - defw lates - defw comma - defw curr - defw at - defw store - defw here - defw twop - defw comma - defw semis -; -; - defb 0c9h ; [COMPILE] - defc '[COMPILE]' - defw creat-9 -bcomp: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw cfa - defw comma - defw semis -; -; - defb 0c7h ; LITERAL - defc 'LITERAL' - defw bcomp-0ch -liter: - defw docol - defw state - defw at - defw zbran ; if - defw lite1-$ - defw comp - defw lit - defw comma ; endif -lite1: - defw semis -; -; - defb 0c8h ; DLITERAL - defc 'DLITERAL' - defw liter-0ah -dlite: - defw docol - defw state - defw at - defw zbran ; if - defw dlit1-$ - defw swap - defw liter - defw liter ; endif -dlit1: - defw semis -; -; - defb 86h ; ?STACK - defc '?STACK' - defw dlite-0bh -qstac: - defw docol - defw spat - defw szero - defw at - defw swap - defw uless - defw one - defw qerr - defw spat - defw here - defw lit - defw 80h - defw plus - defw uless - defw lit - defw 7 - defw qerr - defw semis -; -; - defb 89h ; INTERPRET - defc 'INTERPRET' - defw qstac-9 -inter: - defw docol -inte1: - defw dfind ; begin - defw zbran ; if - defw inte2-$ - defw state - defw at - defw less - defw zbran ; if - defw inte3-$ - defw cfa - defw comma - defw bran ; else - defw inte4-$ -inte3: - defw cfa - defw exec ; endif -inte4: - defw qstac - defw bran ; else - defw inte5-$ -inte2: - defw here - defw numb - defw dpl - defw at - defw onep - defw zbran ; if - defw inte6-$ - defw dlite - defw bran ; else - defw inte7-$ -inte6: - defw drop - defw liter ; endif -inte7: - defw qstac ; endif -inte5: - defw bran ; again - defw inte1-$ -; -; - defb 89h ; IMMEDIATE - defc 'IMMEDIATE' - defw inter-0ch -immed: - defw docol - defw lates - defw lit - defw 40h - defw toggl - defw semis -; -; - defb 8ah ; VOCABULARY - defc 'VOCABULARY' - defw immed-0ch -vocab: - defw docol - defw build - defw lit - defw 0a081h - defw comma - defw curr - defw at - defw cfa - defw comma - defw here - defw vocl - defw at - defw comma - defw vocl - defw store - defw does -dovoc: - defw twop - defw cont - defw store - defw semis -; -; - defb 0c5h ; FORTH - defc 'FORTH' - defw vocab-0dh -forth: - defw dodoe - defw dovoc - defw 0a081h - defw task-7 ; cold start value only -; changed aech time a def is appended -; to the FORTH vocabulary - defw 0 ; end of vocabulary list -; -; - defb 8bh ; DEFINITIONS - defc 'DEFINITIONS' - defw forth-8 -defin: - defw docol - defw cont - defw at - defw curr - defw store - defw semis -; -; - defb 0c1h ; ( - defc '(' - defw defin-0eh -paren: - defw docol - defw lit - defw 29h - defw word - defw semis -; -; - defb 84h ; QUIT - defc 'QUIT' - defw paren-4 -quit: - defw docol - defw zero - defw blk - defw store - defw lbrac -quit1: - defw rpsto ; begin - defw cr - defw query - defw inter - defw state - defw at - defw zequ - defw zbran ; if - defw quit2-$ - defw pdotq - defb 2 - db 'ok' ; endif -quit2: - defw bran ; again - defw quit1-$ -; -; - defb 85h ; ABORT - defc 'ABORT' - defw quit-7 -abort: - defw docol - defw spsto - defw dec - defw qstac - defw cr - defw dotcpu - defw pdotq - defb 0eh ; count of chrs to follow - db 'fig-FORTH ' - defb figrel+30h,adot,figrev+30h,usrver - defw forth - defw defin - defw quit -; -; -wrm: ld bc,wrm1 - jnext -wrm1: defw warm -; -; - defb 84h ; WARM - defc 'WARM' - defw abort-8 -warm: - defw docol - defw mtbuf - defw abort -; -; -cld: - ld hl,(bdoss+1) ;/ - ld l,0 ;/ hl <-- fbase - ld (limit+2),hl ;/ set limit - ld de,bufsiz ;/ de <-- total disc buffer size - subw hl,de ;/ hl <-- addr. of 1st disc buffer - ld (first+2),hl ;/ set FIRST - ld (use+2),hl ;/ set USE - ld (prev+2),hl ;/ set PREV - ld (buf1),hl ;/ - ld de,us ;/ de <-- user variable space - subw hl,de ;/ hl <-- initr0 - ld (upinit),hl ;/ - ld (r0init),hl ;/ - ld (up),hl ;/ - ld (rpp),hl ;/ - ld de,rts ;/ de <-- rtn stack & term. buf space - subw hl,de ;/ hl <-- inits0 - ld (s0init),hl ;/ - ld (tibini),hl ;/ - ld sp,hl ;/ - ld bc,cld1 - ld ix,next ; pointer to next - ld iy,hpush ; pointer to hpush - jnext -; -; -cld1: defw cold -; - defb 84h ; COLD - defc 'COLD' - defw warm-7 -cold: - defw docol - defw mtbuf - defw one,recadr ; AvdH - defw store - defw lit,buf1 - defw at ;/ - defw use,store - defw lit,buf1 - defw at ;/ - defw prev,store - defw drzer - defw zero ;/ - defw lit,eprint - defw cstor ;/ -; - defw lit - defw orig+12h - defw lit - defw up - defw at - defw lit - defw 6 - defw plus - defw lit - defw 10h - defw cmove - defw lit - defw orig+0ch - defw at - defw lit - defw forth+6 - defw store - defw fcb ;/A - defw lit,opnfil ;/A open mass storage - defw bdos ;/A - defw lit,0ffh ;/A - defw equal ;/A file present? - defw zbran,cld2-$ ;/A - defw zero ;/A - defw warn,store ;/A - defw cr,pdotq ;/A - defb 7 ;/A - db 'No file' ;/A -cld2: - defw abort -; -; - defb 84h ; S->D - defc 'S->D' - defw cold-7 -stod: defw $+2 - pop hl ;/ - exts hl ;/ de <-- h(7) - ex de,hl ;/ - jp dpush ; ( n1 -- d1L d1H) -; -; - defb 82h ; +- - defc '+-' - defw STOD-7 -pm: - defw docol - defw zless - defw zbran ; if - defw pm1-$ - defw minus ; endif -pm1: - defw semis -; -; - defb 83h ; D+- - defc 'D+-' - defw pm-5 -dpm: - defw docol - defw zless - defw zbran ; if - defw dpm1-$ - defw dminu ; endif -dpm1: - defw semis -; -; - defb 83h ; ABS - defc 'ABS' - defw dpm-6 -abs: - defw docol - defw dup - defw pm - defw semis -; -; - defb 84h ; DABS - defc 'DABS' - defw abs-6 -dabs: - defw docol - defw dup - defw dpm - defw semis -; -; - defb 83h ; MIN - defc 'MIN' - defw dabs-7 -min: - defw docol - defw tdup - defw great - defw zbran ; if - defw min1-$ - defw swap ; endif -min1: - defw drop - defw semis -; -; - defb 83h ; MAX - defc 'MAX' - defw min-6 -max: defw docol - defw tdup - defw less - defw zbran ; if - defw max1-$ - defw swap ; endif -max1: - defw drop - defw semis -; -; - defb 82h ; M* ( n1 n2 --- d) - defc 'M*' - defw max-6 -mstar: - defw $+2 ;/ - pop de ; de <-- multiplicator - pop hl ; hl <-- multiplicant - multw hl,de ;/ dehl <-- hl * de - ex de,hl ;/ - jp dpush ;/ ( n1 n2 --- d1l d1h) -; -; - defb 82h ;/ M/ ( d n1 --- nrem nquot) - defc 'M/' - defw mstar-5 -mslas: - defw $+2 ; ( d n1 --- n2 n3) - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,mslas1 ; positive - neg hl ; make positive -mslas1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; dividend.hw - pop de ; dividend.lw - bit 7,h ; negative? - jr z,mslas2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - subw hl,de ; neg dividend.lw - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -mslas2: - cpw hl,bc ; dividend.hw >= divisor - jr c,mslas3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max. - jr mslas5 -; -mslas3: - ex de,hl ; dehl <-- dividend.hw,lw - divuw dehl,bc ; de <-- remainder, hl <-- quotient - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative - jr z,mslas4 ; no - neg hl ;/ yes, negate remainder -mslas4: - ex de,hl ; hl <-- quotient - or a - jr z,mslas5 ; neither operand negative - cp 81h ; both operands negative? - jr z,mslas5 ; yes, quotient stays positive - neg hl ;/ no, negate quotient -mslas5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 81h ; * ( n1 n2 --- nproduct) - defc '*' - defw mslas-5 -star: - defw $+2 - pop de - pop hl - multw hl,de ;/ dehl <-- product - jhpush -; -; - defb 84h ; /MOD ( n1 n2 --- nrem nquot) - defc '/MOD' - defw star-4 -slmod: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ div by 0? - jr nz,slmod1 ;/ no, continue - ld de,0ffffh - ld h,d - ld l,e ;/ set remainder & quotient to max. - jr slmod3 -slmod1: - cpw hl,8000h ;/ special case -32768 -1 / - jr nz,slmod2 ;/ continue - ld a,b - cp 0ffh - jr nz,slmod2 - cp c ;/ lo byte also 0ffh? - jr nz,slmod2 ;/ no, go & divide - ld de,0 ;/ remainder - jr slmod3 ;/ exit with dividend unchanged -slmod2: - exts hl ;/ de <-- dividend.hw - divw dehl,bc ;/ de <-- remainder, hl <-- quotient -slmod3: - push de - push hl - exx ;/ restore ip - jnext -; -; - defb 81h ; / - defc '/' - defw slmod-7 -slash: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ division by 0? - jr nz,slash1 ;/ no, continue - ld hl,0ffffh ;/ set quotient to max. - jr slash3 -slash1: - cpw hl,8000h ;/ special case -32768 -1 / - jr nz,slash2 ;/ dividend not -32768 - ld a,b - cp 0ffh - jr nz,slash2 ;/ divisor not -1 - cp c - jr z,slash3 ;/ return with dividend unchanged -slash2: - exts hl ;/ de <-- dividend.hw - divw dehl,bc ;/ hl <-- quotient -slash3: - push hl ;/ quotient - exx ;/ restore ip - jnext -; -; - defb 83h ;/ MOD - defc 'MOD' - defw slash-4 -modd: - defw $+2 - exx ; save ip - pop bc ; divisor - pop hl ; dividend - ld a,b - or c ; division by 0? - jr nz,modd1 ; no, continue - ld de,0ffffh ; set remainder to max - jr modd3 -modd1: - cpw hl,8000h ;/ special case -32768 -1 / - jr nz,modd2 ; dividend not -32768 - ld a,b - cp 0ffh - jr nz,modd2 ; divisor not -1 - cp c - jr nz,modd2 ; go & divide - ld de,0 ; remainder - jr modd3 -modd2: - exts hl ; de <-- dividend.hw - divw dehl,bc ; de <-- remainder -modd3: - push de ; remainder - exx ; restore ip - jnext -; -; - defb 85h ;/ */MOD - defc '*/MOD' - defw modd-6 -ssmod: - defw $+2 - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssmod1 ; positive - neg hl ; make positive -ssmod1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - multw hl,de ; dehl <-- product (= dividend) - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssmod2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - subw hl,de ; neg dividend.lw - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssmod2: - cpw hl,bc ; dividend.hw >= divisor? - jr c,ssmod3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max - jr ssmod5 -; -ssmod3: - ex de,hl ; dehl <-- dividend.hw,lw - divuw dehl,bc ; de <-- remainder, hl <-- quotient - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative? - jr z,ssmod4 ; no - neg hl ; yes, negate remainder -ssmod4: - ex de,hl ; hl <-- quotient - or a - jr z,ssmod5 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssmod5 ; yes, quotient stays positive - neg hl ; no, negate quotient -ssmod5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 82h ; */ - defc '*/' - defw ssmod-8 -ssla: - defw $+2 ;/ - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssla1 ; positive - neg hl ; make positive -ssla1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - multw hl,de ; dehl <-- product (= dividend) - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssla2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - subw hl,de ; neg dividend.lw - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssla2: - cpw hl,bc ; dividend.hw >= divisor? - jr c,ssla3 ; no overflow, continue - ld hl,0ffffh ; set quotient to max - jr ssla4 -; -ssla3: - ex de,hl ; dehl <-- dividend.hw,lw - divuw dehl,bc ; de <-- remainder, hl <-- quotient - or a - jr z,ssla4 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssla4 ; yes, quotient stays positive - neg hl ; no, negate quotient -ssla4: - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 85h ; M/MOD - defc 'M/MOD' - defw ssla-5 -msmod: - defw docol - defw tor - defw zero - defw rr - defw uslas - defw fromr - defw swap - defw tor - defw uslas - defw fromr - defw semis -; -; -; Block moved down 2 pages -; - defb 86h ; (LINE) - defc '(LINE)' - defw msmod-8 -pline: - defw docol - defw tor - defw lit - defw 40h - defw bbuf - defw ssmod - defw fromr - defw bscr - defw star - defw plus - defw block - defw plus - defw lit - defw 40h - defw semis -; -; - defb 85h ; .LINE - defc '.LINE' - defw pline-9 -dline: - defw docol - defw pline - defw dtrai - defw type - defw semis -; -; - defb 87h ; MESSAGE - defc 'MESSAGE' - defw dline-8 -mess: - defw docol - defw warn - defw at - defw zbran ; if - defw mess1-$ - defw ddup - defw zbran ; if - defw mess2-$ - defw lit - defw 4 ; 1st message screen - defw ofset - defw at - defw bscr - defw slash - defw subb - defw dline - defw space ; endif -mess2: - defw bran ; else - defw mess3-$ -mess1: - defw pdotq - defb 6 - db 'MSG # ' - defw dot ; endif -mess3: defw semis -; -; - defb 82h ; P@ - defc 'P@' - defw mess-0ah -ptat: - defw $+2 - exx ;d save registers - pop bc ;d bc <-- port# - in l,(c) ;d l <-- data byte - ld h,0 - push hl - exx ;d restore registers - jnext -; -; - defb 82h ; P! - defc 'P!' - defw ptat-5 -ptsto: - defw $+2 - exx ;d save registers - pop bc ;d c <-- port# - pop hl ;d L <-- date byte - out (c),l - exx ;d restore registers - jnext -; -; - page -include DISCIO.Z80 - page -include CONPRTIO.Z80 - page -; - defb 0c1h ; ' (tick) - defb 0a7h - defw arrow-6 -tick: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw liter - defw semis -; -; - defb 86h ; FORGET - defc 'FORGET' - defw tick-4 -forg: - defw docol - defw curr - defw at - defw cont - defw at - defw subb - defw lit - defw 18h - defw qerr - defw tick - defw dup - defw fence - defw at - defw uless ;/ FORGET >8000h nw o.k. - defw lit - defw 15h - defw qerr - defw dup - defw nfa - defw dp - defw store - defw lfa - defw at - defw cont - defw at - defw store - defw semis -; -; - defb 84h ; BACK - defc 'BACK' - defw forg-9 -back: - defw docol - defw here - defw subb - defw comma - defw semis -; -; - defb 0c5h ; BEGIN - defc 'BEGIN' - defw back-7 -begin: - defw docol - defw qcomp - defw here - defw one - defw semis -; -; - defb 0c5h ; ENDIF - defc 'ENDIF' - defw begin-8 -endiff: - defw docol - defw qcomp - defw two - defw qpair - defw here - defw over - defw subb - defw swap - defw store - defw semis -; -; - defb 0c4h ; THEN - defc 'THEN' - defw endiff-8 -then: defw docol - defw endiff - defw semis -; -; - defb 0c2h ; DO - defc 'DO' - defw then-7 -do: - defw docol - defw comp - defw xdo - defw here - defw three - defw semis -; -; - defb 0c4h ; LOOP - defc 'LOOP' - defw do-5 -loop: - defw docol - defw three - defw qpair - defw comp - defw xloop - defw back - defw semis -; -; - defb 0c5h ; +LOOP - defc '+LOOP' - defw loop-7 -ploop: - defw docol - defw three - defw qpair - defw comp - defw xploo - defw back - defw semis -; -; - defb 0c5h ; UNTIL - defc 'UNTIL' - defw ploop-8 -until: - defw docol - defw one - defw qpair - defw comp - defw zbran - defw back - defw semis -; -; - defb 0c3h ; END - defc 'END' - defw until-8 -endd: - defw docol - defw until - defw semis -; -; - defb 0c5h ; AGAIN - defc 'AGAIN' - defw endd-6 -again: - defw docol - defw one - defw qpair - defw comp - defw bran - defw back - defw semis -; -; - defb 0c6h ; REPEAT - defc 'REPEAT' - defw again-8 -repea: - defw docol - defw tor - defw tor - defw again - defw fromr - defw fromr - defw twomin ;/ - defw endiff - defw semis -; -; - defb 0c2h ; IF - defc 'IF' - defw repea-9 -iff: - defw docol - defw comp - defw zbran - defw here - defw zero - defw comma - defw two - defw semis -; -; - defb 0c4h ; ELSE - defc 'ELSE' - defw iff-5 -elsee: - defw docol - defw two - defw qpair - defw comp - defw bran - defw here - defw zero - defw comma - defw swap - defw two - defw endiff - defw two - defw semis -; -; - defb 0c5h ; WHILE - defc 'WHILE' - defw elsee-7 -while: - defw docol - defw iff - defw twop - defw semis -; -; - defb 86h ; SPACES - defc 'SPACES' - defw while-8 -spacs: - defw docol - defw zero - defw max - defw ddup - defw zbran ; if - defw spax1-$ - defw zero - defw xdo ; do -spax2: - defw space - defw xloop ; loop endif - defw spax2-$ -spax1: - defw semis -; -; - defb 82h ; <# - defc '<#' - defw spacs-9 -bdigs: - defw docol - defw pad - defw hld - defw store - defw semis -; -; - defb 82h ; #> - defc '#>' - defw bdigs-5 -edigs: - defw docol - defw drop - defw drop - defw hld - defw at - defw pad - defw over - defw subb - defw semis -; -; - defb 84h ; SIGN - defc 'SIGN' - defw edigs-5 -sign: - defw docol - defw rot - defw zless - defw zbran ; if - defw sign1-$ - defw lit - defw 2dh - defw hold ; endif -sign1: - defw semis -; -; - defb 81h ; # - defc '#' - defw sign-7 -dig: - defw docol - defw base - defw at - defw msmod - defw rot - defw lit - defw 9 - defw over - defw less - defw zbran ; if - defw dig1-$ - defw lit - defw 7 - defw plus ; endif -dig1: defw lit - defw 30h - defw plus - defw hold - defw semis -; -; - defb 82h ; #S - defc '#S' - defw dig-4 -digs: - defw docol -digs1: - defw dig ; begin - defw tdup ;/ - defw orr - defw zequ - defw zbran ; until - defw digs1-$ - defw semis -; -; - defb 83h ; D.R - defc 'D.R' - defw digs-5 -ddotr: - defw docol - defw tor - defw swap - defw over - defw dabs - defw bdigs - defw digs - defw sign - defw edigs - defw fromr - defw over - defw subb - defw spacs - defw type - defw semis -; -; - defb 82h ; .R - defc '.R' - defw ddotr-6 -dotr: - defw docol - defw tor - defw stod - defw fromr - defw ddotr - defw semis -; -; - defb 82h ; D. - defc 'D.' - defw dotr-5 -ddot: - defw docol - defw zero - defw ddotr - defw space - defw semis -; -; - defb 81h ; . - defc '.' - defw ddot-5 -dot: - defw docol - defw stod - defw ddot - defw semis -; -; - defb 81h ; ? - defc '?' - defw dot-4 -ques: - defw docol - defw at - defw dot - defw semis -; -; - defb 82h ; U. - defc 'U.' - defw ques-4 -udot: defw docol - defw zero - defw ddot - defw semis -; - - defb 85h ; VLIST - defc 'VLIST' - defw udot-5 -vlist: - defw docol - defw lit - defw 80h - defw outt - defw store - defw cont - defw at - defw at -vlis1: - defw outt ; begin - defw at - defw csll - defw great - defw zbran ; if - defw vlis2-$ - defw cr - defw zero - defw outt - defw store ; endif -vlis2: - defw dup - defw iddot - defw space - defw space - defw pfa - defw lfa - defw at - defw dup - defw zequ - defw qterm - defw orr - defw zbran ; until - defw vlis1-$ - defw drop - defw semis -; -; - defb 83h ; BYE - defc 'BYE' - defw vlist-8 -bye: - defw docol ;/A - defw flush ;/A - defw fcb,lit ;/E - defw 10h,bdos ;/E close file - defw drop ;/E discard directory code - defw zero,zero ;/A - defw bdos ;/A return to CP/M - defw semis ;/A won't get this far, just for pretty -; -; - defb 84h ; LIST - defc 'LIST' - defw bye-6 -list: - defw docol,dec - defw cr,dup - defw scr,store - defw pdotq - defb 6 - db 'SCR # ' - defw dot - defw lit,10h - defw zero,xdo -list1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw ido,scr - defw at,dline - defw qterm - defw zbran,list2-$ ; if - defw leave -list2: - defw xloop,list1-$ ; endif - defw cr - defw semis -; -; - defb 85H ;INDEX - defc 'INDEX' - defw list-7 -index: - defw docol - defw lit,ff - defw emit - defw cr - defw onep,swap - defw xdo -inde1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw zero,ido - defw dline,qterm - defw zbran,inde2-$ ; if - defw leave ; endif -inde2: - defw xloop,inde1-$ - defw semis -; -; - defb 85h ; TRIAD - defc 'TRIAD' - defw index-8 -triad: - defw docol - defw lit,ff - defw emit - defw three ;/ was lit,3 - defw slash - defw three ;/ was lit,3 - defw star - defw three ;/ was lit,3 - defw over,plus - defw swap,xdo -tria1: - defw cr,ido - defw list - defw qterm - defw zbran,tria2-$ ; if - defw leave -tria2: - defw xloop,tria1-$ ; endif - defw cr - defw lit,15 - defw mess,cr - defw semis -; -; - defb 84h ; .CPU - defc '.CPU' - defw triad-8 -dotcpu: - defw docol - defw base,at - defw lit,36 - defw base,store - defw lit,22h - defw porig,tat - defw ddot - defw base,store - defw semis -; -; - defb 86h ; setclk - defc 'setclk' - defw dotcpu-7 -setclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - xor a - out (cntrl0),a ; disable c/t 0 - out (cntrl1),a ; disable c/t 1 - out (config1),a - ld hl,0ffffh - ld a,10h - out (config0),a ; cascade c/t 0 - c/t 1 - ld c,tcon0 - outw (c),hl ; load c/t 0 time constant - ld c,tcon1 - outw (c),hl ; load c/t 1 time constatnt - ld a,80h - out (config1),a ; continous mode - ld a,0e0h - out (cntrl1),a ; start 32bit counter - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 86h ; getclk - defc 'getclk' - defw setclk-9 -getclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save current i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - ld a,80h - out (cntrl1),a ; halt 32bit counter - ld c,count1 - inw hl,(c) - ld d,h - ld e,l ; de <-- count1 - ld c,count0 - inw hl,(c) ; hl <-- count0 - ld c,0 - ld a,c ; a <-- 0 - sub l ; 0 - l - ld l,a ; l <-- neg(l) - ld a,c ; a <-- 0 - sbc a,h - ld h,a ; h <-- neg(h) - ld a,c ; a <-- 0 - sbc a,e - ld e,a ; e <-- neg(e) - ld a,c ; a <-- 0 - sbc a,d - ld d,a ; d <-- neg(d), dehl <-- neg(dehl) - divuw dehl,25000 ; scale to 1/100 secs - push hl ; result - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 84h ; TASK - defc 'TASK' - defw getclk-9 -; defw dotcpu-7 -task: - defw docol - defw semis -; -; -initdp: - defw 0 -; - end orig - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.COM b/software/CPM/CPM08_Z80FORTH/280FORTH.COM deleted file mode 100644 index cbea6829d1e3dcc779710110321926139ae3dafc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6912 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 diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.HEX b/software/CPM/CPM08_Z80FORTH/280FORTH.HEX deleted file mode 100644 index 0ed4d36..0000000 --- a/software/CPM/CPM08_Z80FORTH/280FORTH.HEX +++ /dev/null @@ -1,215 +0,0 @@ -:2001000000C3891000C375100101610E761B080000000000000000001F000000811B811BDA -:20012000F40F180000F6000000000000D5E56069ED260303ED16EB13E9834C49D4000041FB -:20014000016069ED260303FDE987455845435554C539015501E1C33401864252414E43C89F -:20016000490164016069DDEDC64D44DDE987304252414E43C859017901E17DB428E6030341 -:20018000DDE986284C4F4F50A96D018D012A2801DD03ED1623237B967A239EFA64012322A0 -:2001A00028010303DDE987282B4C4F4F50A98201B201D12A28017E83775F237E8A77231483 -:2001C0001557FACD017B967A239EC3D2017E93237E9AFA6401232228010303DDE984284434 -:2001E0004FA9A601E601D12A28012B2BDDC12B2BED1E222801DDE981C9DD01FD012A280176 -:20020000DDC5DDE98544494749D4F7010E02E1D17BD6303814FE0A3806D607FE0A380ABD4F -:2002200030075F210100C32C016CFDE9862846494E44A904023702D1E1E51AAEE63F201F4A -:2002400023131AAE87201630F721050019E31B1AB7F24E025F1600210100C32C0138061394 -:200260001AB7F25F0213EBED167AB320CBE1210000FDE987454E434C4F53C52C027F02D1C9 -:20028000E1E57B571EFF2B231CBE28FB1600D5577EA7200816001CD51DD5DDE97A231CBE99 -:2002A000280A7EA720F61600D5D5DDE91600D51CD5DDE984454D49D47302D70510175C069C -:2002C0003F075005CF03834B45D9B302CE02C3FA16893F5445524D494E41CCC602DF0221FF -:2002E0000000C3EE168243D2D102EC02C3271785434D4F56C5E502F902D9C1D1E178B128E0 -:2003000002EDB0D9DDE9862D434D4F56C5EF021103D9C1D1E178B12808092BEB092BEBED1D -:20032000B8D9DDE98255AA06032B03D1E1EDD3EBC32C018255AF24033A03D9C1E1D1EDC777 -:20034000380721FFFF545D1803EBEDCBD5E5D9DDE983414EC433035903D1E17BA56F7AA4B0 -:2003600067FDE9824FD251036A03D1E17BB56F7AB467FDE983584FD263037C03D1E17BAD45 -:200380006F7AAC67FDE9835350C074038E0321000039FDE9835350A186039C032A260111FC -:2003A000060019ED36DDE9835250C09403AF032A2801FDE9835250A1A703BC032A2601113D -:2003C000080019ED26222801DDE9823BD3B403D1032A2801ED062323222801DDE9854C450A -:2003E0004156C5CA03E7032A2801ED162323ED1EDDE9823ED2DD03F9032A28012B2BDDC1C8 -:20040000222801DDE98252BEF2030C042A2801DDC52323222801DDE981D20504FD018230DC -:20042000BD18042504D1210000EDD720012CFDE983303CBE1E043804D1210000EDD72801E7 -:200440002CFDE98230BC30044A04F117210000CB15FDE98230BE43045A04D1210000EDD7E0 -:20046000F26704EA67042CFDE981AB53046F04D1E119FDE98244AB69047B04D9C1E1F1D177 -:20048000F519EBE1ED4AD5E5D9DDE9854D494E55D374049504E1ED4CFDE986444D494E554D -:2004A000D38B04A504D9D1C1210000EDCEE5210000ED52E5D9DDE9844F5645D29A04C0047F -:2004C000ED040200FDE98444524FD0B704CF043333DDE984535741D0C604DC04E1E3FDE9BD -:2004E000834455D0D304E804ED040000FDE984545543CBE004F704E1D1E5C32C01834E49BB -:20050000D0EE040505E1ED050000DDE9842D524FD4FD041505E1D1E3EBC32C018543535753 -:2005200041D00C052605E1EDEFFDE984504943CB1C053405E12939DDC5DDE984324455D07C -:200540002B054405E1D1D5E5C32C01822BA13B055205E1D17E8377237E8A77DDE986544F26 -:2005600047474CC54B056805D1E17EAB77DDE981C05D057505E1DDC5DDE98243C06F058127 -:2005800005E16E2600FDE98232C07A058E05E1ED162323DDC5D5DDE981A187059E05E1DDFF -:2005A000C1DDE98243A19805AA05E1D173DDE98232A1A305B605E1DDC12323DDC1DDE9C175 -:2005C000BAAF05D7059F095A096E07730561079C057B0E240A780A2A28012B2BED0E2228A9 -:2005E00001134B42DDE9C1BBBF05D705C909000ACF03390A160ACF03844E4F4FD0E605D793 -:2006000005CF0388434F4E5354414ED4F805D7057B0E390A2208780A13EBDDC5DDE98856FC -:2006200041524941424CC50306D7050E06780A13D5DDE984555345D21E06D7050E06780A48 -:2006400013EB6E2600DDEDD62601FDE981B033065206FDF50000DDE981B14C065E06FDF507 -:200660000100DDE981B258066A06FDF50200DDE981B364067606FDF50300DDE98242CC7023 -:20068000061806200083432FCC7C06180640008546495253D4850618060000854C494D498F -:2006A000D48F061806000085422F4255C69B061806800085422F5343D2A706180608008769 -:2006C0002B4F52494749CEB306D7053F0100016D04CF038253B0BF06400606008252B0D3A1 -:2006E0000640060800835449C2DC0640060A8557494454C8E50640060C875741524E494E7A -:20070000C7EE0640060E8546454E43C5F9064006108244D0060740061288564F432D4C49E2 -:200720004ECB11074006140083424CCB19074006168249CE2807400618834F55D43107403D -:20074000061A835343D2390740061C864F46465345D4420740061E87434F4E544558D44BFB -:20076000074006208743555252454ED457074006228553544154C564074006248442415367 -:20078000C57107400626834450CC7C0740062883464CC4860740062A834353D08F07400641 -:2007A0002C8252A3980740062E83484CC4A107400630008231ABA907BA07E123FDE982321D -:2007C000ABB307C507E12323FDE98231ADBE07D107E12BFDE98232ADCA07DC07E12B2BFDA3 -:2007E000E98232AAD507E807E129FDE98232AFE107F307E1CB7C280123CB2CCB1DFDE984F5 -:20080000484552C5EC07D70516077305CF0385414C4C4FD4FF07D70516075005CF0381AC2A -:200820000E08D70506089C0568061608CF038243AC1E08D7050608A8055C061608CF0381B8 -:20084000AD2E084508D1E1EDDEFDE981BD3F085108D1E1EDDE21000020012CFDE981BC4BCE -:20086000086308D1E17AACFA6C08EDDECB7C21000028012CFDE98255BC5D087D08D1E1ED35 -:20088000DE210000CB15FDE981BE76088E08E1D17AACFA9708EDDECB7C21000028012CFD4A -:2008A000E983524FD48808A908D1E1E3C32C018553504143C5A108D7058106BA02CF038402 -:2008C0002D4455D0AF08C808ED0400007CB52801E5DDE98854524156455253C5BF08D705EE -:2008E000DA04BE046D043F017F00BE047F0561087701F0FFDA04CD04CF03864C4154455392 -:20090000D4D308D7056E0773057305CF03834C46C1FA081509E1FDEDFE0400FDE983434660 -:20092000C10D09D705DA07CF03834E46C11D09D7053F01050043083F01FFFFDE08CF03836E -:200940005046C12909D7055C06DE083F0105006D04CF0384214353D03F09D7058C039E07FF -:200960009C05CF03863F4552524FD25309D705DA0477010800F90D62010400CD04CF03850A -:200980003F434F4DD06409D7057907730523043F0111006D09CF03853F455845C37F09D7A0 -:2009A00005790773053F0112006D09CF03863F50414952D39709D70543083F0113006D094C -:2009C000CF03843F4353D0AD09D7058C039E07730543083F0114006D09CF03883F4C4F4154 -:2009E00044494EC7C209D7052E07730523043F0116006D09CF0387434F4D50494CC5DB0948 -:200A0000D70587090A04E604C307F70373052208CF03C1DBF609D705500679079C05CF037A -:200A200081DD120AD7053F01C00079079C05CF0386534D554447C5200AD70503093F012030 -:200A4000006605CF03834845D8300AD7053F01100083079C05CF0387444543494D41CC45D3 -:200A60000AD7053F010A0083079C05CF038728203B434F4445A9570AD7050A0403094509D6 -:200A800023099C05CF03C53B434F44C56E0AD705C909000A780A160AFF05CF03873C42551A -:200AA000494C44D3860AD70550060E06CF0385444F4553BE9C0AD7050A04030945099C05E9 -:200AC000780A2A28012B2BED0E22280113EBED062323FDE985434F554ED4AE0AD705E6047C -:200AE000B807DA047F05CF0384545950C5D40AD705C60877011800BE046D04DA04E401FBB4 -:200B0000017F05BA028B01F8FF62010400CD04CF03892D545241494C494EC7E80AD705E6C3 -:200B2000045006E40142056D04CF077F058106430877010800E50362010400CF078B01E67B -:200B4000FFCF0384282E22A9110BD7051C04DC0AE604B8070A046D04F703EF0ACF03C22E44 -:200B6000A2430BD7053F0122007907730577011400000A4A0BCB0C06087F05B807160862BC -:200B8000010A00CB0C0608DC0AEF0ACF03864558504543D45E0BD705BE046D04BE04E401C6 -:200BA000CC02E6043F010E00C90673054F0877012800CD04E604FB014F08E6040A04DA070A -:200BC0006D04F70377010A003F010700620106003F01080062012800E6043F010D004F0817 -:200BE00077010E00E503CD048106500662010400E604FB01A8055006FB01B8079C05BA0271 -:200C00008B019EFFCD04CF038551554552D98D0BD705EB0673053F015000960B50063607CC -:200C20009C05CF03C180080CD7052E077305770128005C062E075005500636079C052E076E -:200C40007305BB06CF0757032304770108009F090A04CD04620106000A04CD04CF03844619 -:200C6000494CCC240C670CD9D1C1E178B1280673230BC36B0CD9DDE98545524153C55E0C74 -:200C8000D7055006650CCF0386424C414E4BD3780CD7058106650CCF0384484F4CC4880C35 -:200CA000D7053F01FFFFAF075005AF077305A805CF03835041C4990CD70506083F01440077 -:200CC0006D04CF0384574F52C4B20CD7052E07730577010C002E077305261562010600EB8A -:200CE000067305360773056D04DA047D0206083F012200910C36075005BE044308F7031C31 -:200D0000040608A8056D040608B8070A04F702CF0388284E554D424552A9C40CD705B80770 -:200D2000E604F7037F05830773050C0277012C00DA04830773052903CD04A7088307730509 -:200D4000290379048C077305B807770108005C068C0750050A046201C6FF0A04CF03864E6C -:200D6000554D4245D2110DD70550065006A708E604B8077F053F012D004F08E604F7036DE1 -:200D8000043F01FFFF8C079C051C0DE6047F058106430877011600E6047F053F012E0043C7 -:200DA0000850066D0950066201DCFFCD040A0477010400A304CF03852D46494EC45E0DD762 -:200DC000058106CB0C06086107730573053502E604230477010A00CD04060803093502CF8F -:200DE00003872841424F5254A9B70DD7055210CF03854552524FD2E10DD705030773054829 -:200E00000477010400EB0D0608DC0AEF0A4A0B023F20AD139A032E077305C608770108005F -:200E200036077305DA042510834944AEF10DD705B80C3F012000910CE60445091309BE047B -:200E40004308E604F703B80CDA04F702B80C0A04B80C6D04CF07E60473053F017F00570370 -:200E6000DA049C05DC0A3F011F005703EF0AB708CF03864352454154C5280ED705BF0D77BB -:200E8000011000CD042F092E0E3F010400AD13B7080608E6047F05F60673059B11B80716C8 -:200EA00008E6043F01A00066050608CF073F0180006605030922086E0773059C050608C351 -:200EC000072208CF03C95B434F4D50494C45DD720ED705BF0D230450066D09CD04230922CB -:200EE00008CF03C74C4954455241CCC50ED7057907730577010800000A3F012208CF03C88F -:200F0000444C4954455241CCE30ED7057907730577010800DA04ED0EED0ECF03863F5354A9 -:200F20004143CBFF0ED7058C03D8067305DA047B085C066D098C0306083F0180006D047B12 -:200F4000083F0107006D09CF0389494E544552505245D41C0FD705BF0D77011E00790773D8 -:200F600005610877010A00230922086201060023095301250F62011C000608670D8C077307 -:200F800005B807770108000A0F62010600CD04ED0E250F6201C2FF89494D4D454449415494 -:200FA000C5490FD70503093F0140006605CF038A564F434142554C4152D9970FD705A60A3B -:200FC0003F0181A022086E07730523092208060824077305220824079C05B60AC3076107AA -:200FE0009C05CF03C5464F5254C8AF0FC20ADC0F81A0761B00008B444546494E4954494F69 -:201000004ED3E40FD705610773056E079C05CF03C1A8F60FD7053F012900CB0CCF038451E7 -:201020005549D41010D70550062E079C05160ABA03EA02100C550F7907730523047701072F -:20104000004A0B026F6B6201E7FF8541424F52D41E10D7059A03610A250FEA02DA1A4A0B1E -:201060000E6669672D464F52544820312E3161EC0F04102510017A10DDE9831084574152D5 -:20108000CD4A10D705A51452102A06002E0022A506118010EDDE22990622251422301422F7 -:2010A0002A01114000EDDE221001221401222601222801110004EDDE221201221601F901A3 -:2010C000CC10DD212E01FD212D01DDE9D51084434F4CC47C10D705A5145C0611149C053F62 -:2010E000012A01730523149C053F012A0173052E149C05B91450063F019916A8053F01129D -:20110000013F01260173053F0106006D043F011000F7023F010C0173053F01F20F9C050642 -:20112000143F010F0083153F01FF004F0877011400500603079C05EA024A0B074E6F206606 -:20114000696C65521084532D3EC4CE104E11E1ED6CEBC32C01822BAD4511D705480477014B -:2011600004009304CF0383442BAD5511D705480477010400A304CF03834142D36611D705B4 -:20118000E6045A11CF0384444142D37811D705E6046C11CF03834D49CE8611D70542058C3F -:2011A0000877010400DA04CD04CF03834D41D89511D7054205610877010400DA04CD04CF15 -:2011C00003824DAAAB11C811D1E1EDD2EBC32C01824DAFC111D711D9E17CE6802802ED4C7B -:2011E000444DE1D1CB7C280F3CE5210000EDDED1E5210000ED52D1EDC7380721FFFF545D77 -:201200001814EBEDCBEBCB472802ED4CEBB72806FE812802ED4CD5E5D9DDE981AAD0112167 -:2012200012D1E1EDD2FDE9842F4D4FC41B123012D9C1E178B1200711FFFF626B1818FDED02 -:20124000F70080200D78FEFF2008B920051100001804ED6CEDCAD5E5D9DDE981AF2712610F -:2012600012D9C1E178B1200521FFFF1813FDEDF70080200878FEFF2003B92804ED6CEDCA33 -:20128000E5D9DDE9834D4FC45B128C12D9C1E178B1200511FFFF1818FDEDF70080200D78CE -:2012A000FEFF2008B920051100001804ED6CEDCAD5D9DDE9852A2F4D4FC48412BE12D9E11C -:2012C0007CE6802802ED4C444DE1D108EDD208EBCB7C280F3CE5210000EDDED1E52100006A -:2012E000ED52D1EDC7380721FFFF545D1814EBEDCBEBCB472802ED4CEBB72806FE81280273 -:20130000ED4CD5E5D9DDE9822AAFB4120E13D9E17CE6802802ED4C444DE1D108EDD208EBFD -:20132000CB7C280F3CE5210000EDDED1E5210000ED52D1EDC7380521FFFF180CEBEDCBB7AD -:201340002806FE812802ED4CE5D9DDE9854D2F4D4FC40713D705F70350061C0438030A04E9 -:20136000DA04F70338030A04CF0386284C494E45A94C13D705F7033F014000AF06BC120AB9 -:2013800004BB061F126D0426156D043F014000CF03852E4C494EC56A13D70573131D0BEF97 -:2013A0000ACF03874D4553534147C59113D7050307730577011E00C608770114003F01040F -:2013C0000054077305BB065F1243089913B70862010D004A0B064D53472023208E19CF03C4 -:2013E0008250C0A313E713D9C1ED682600E5D9DDE98250A1E013F813D9C1E1ED69D9DDE931 -:20140000834643C2F11318065C0084524543A30014D70506143F0121006D04CF03835553A6 -:20142000C50A142F06000084505245D61D142F0600008523425546C62714180620008A445B -:2014400049534B2D4552524FD232142F060000842B4255C63E14D7053F0184006D04E6049A -:20146000A3064F0877010600CD049706E6042E1473054308CF03865550444154C54F14D7BC -:20148000052E14730573053F01008068032E1473059C05CF038D454D5054592D4255464651 -:2014A0004552D37614D7059706A306BE044308800CCF03834452B09514D705500654079C10 -:2014C00005CF03834452B1B314D7053F01400654079C05CF03864255464645D2C314D70501 -:2014E00023147305E604F70356147701FCFF23149C051C0473054804770114001C04C3074A -:201500001C0473053F01FF7F57035006A3151C049C051C042E149C050A04C307CF038542D8 -:201520004C4F43CBD514D705540773056D04F7032E147305E60473051C044308E6046D041D -:20154000770132005614230477011200CD041C04DE14E6041C045C06A315DA07E60473057C -:201560001C044308E6046D0423047701D8FFE6042E149C050A04CD04C307CF038442444F8E -:20158000D31E158515D9C1D1DDE5FDE5D9C5D9CD0500D9C1FDE1DDE16F2600FDE983522F9E -:2015A000D77C15D705F70311149C0550061114C307A8053F011A008315CD043F0122000A06 -:2015C0000443080614DA0483154B149C05CF0385464C5553C89D15D7053A14B8075006E4FE -:2015E000015006DE14CD048B01F8FFCF0386455854454EC4CF15D7050608AF06910C3F014E -:2016000008001F125006B8070608BE045C06A3154B1473057701F0FFDA04BE046D04DA0465 -:20162000E4010608FB015006A3158B01F6FF06143F0110008315CD0406143F010F00831558 -:20164000CD04CF03844C4F41C4ED15D7052E077305F70336077305F703500636079C05BBA0 -:20166000061F122E079C05550F0A0436079C050A042E079C05CF03C32D2DBE4416D705E660 -:2016800009500636079C05BB062E077305BE048A1243082E075005CF0300C5D5E5DDE5FD5C -:2016A000E5D9C5D9CD0500D9C1D9FDE1DDE1E1D1C1C9C50E061EFFCD9A16C1C9C50E061EBD -:2016C000FFCD9A16B728FAFE7F20023E08CBBFC1C9C5D50E06CD9A16D1C1C9C50E05CD9AF7 -:2016E00016C1C9CDD1163A9916B7C4DB16C9CDB216210000B728012CFDE9CDBC16FE105FC4 -:2017000020092199161E207EEE01776B2600FDE91217D17BFE08200ACDD1161E20CDD116EC -:201720001E08CDE316DDE91E0DCDE3161E0ACDE316DDE9C1A77716D705BF0D230450066DCB -:2017400009CD04ED0ECF0386464F524745D43317D7056E0773056107730543083F0118007F -:201760006D093717E6040E0773057B083F0115006D09E6042F0916079C0513097305610704 -:2017800073059C05CF0384424143CB4717D705060843082208CF03C542454749CE8617D79C -:2017A00005870906085C06CF03C5454E4449C69717D70587096806B6090608BE044308DA6B -:2017C000049C05CF03C4544845CEA917D705B117CF03C244CFC517D705000AE401060874EB -:2017E00006CF03C44C4F4FD0D217D7057406B609000A8B018D17CF03C52B4C4F4FD0E317E5 -:20180000D7057406B609000AB0018D17CF03C5554E5449CCF817D7055C06B609000A770123 -:201820008D17CF03C3454EC40E18D7051618CF03C541474149CE2418D7055C06B609000A2E -:2018400062018D17CF03C65245504541D43018D705F703F70338180A040A04DA07B117CFAC -:2018600003C249C64618D705000A77010608500622086806CF03C4454C53C56118D70568E0 -:2018800006B609000A6201060850062208DA046806B1176806CF03C55748494CC57618D711 -:2018A000056618C307CF03865350414345D39718D7055006B111C60877010C005006E40114 -:2018C000B7088B01FCFFCF03823CA3A718D705B80CAF079C05CF038223BEC818D705CD0417 -:2018E000CD04AF077305B80CBE044308CF0384534947CED718D705A7084804770108003F8C -:20190000012D00A00CCF0381A3EE18D705830773055413A7083F010900BE04610877010809 -:20192000003F0107006D043F0130006D04A00CCF038223D30719D7050B194205680323041F -:201940007701F6FFCF0383442ED23119D705F703DA04BE048D11CD183619F518DC180A04E0 -:20196000BE044308B018EF0ACF03822ED24619D705F7034C110A044C19CF038244AE6A1977 -:20198000D70550064C19B708CF0381AE7B19D7054C118019CF0381BF8A19D70573058E19DA -:2019A000CF038255AE9619D70550068019CF0385564C4953D4A219D7053F0180003F079CB4 -:2019C000056107730573053F0773058B068C0877010A00EA0250063F079C05E6042E0EB73F -:2019E00008B708450913097305E6042304DD0268037701D4FFCD04CF03834259C5AF19D773 -:201A000005D71506143F0110008315CD04500650068315CF03844C4953D4F919D705610A53 -:201A2000EA02E60448079C054A0B065343522023208E193F0110005006E401EA02FB0174AC -:201A4000066F19B708FB01480773059913DD0277010400E5038B01E4FFEA02CF0385494E3E -:201A60004445D8151AD7053F010C00BA02EA02B807DA04E401EA02FB0174066F19B708508B -:201A800006FB019913DD0277010400E5038B01E6FFCF038554524941C45D1AD7053F010CFA -:201AA00000BA0274065F1274061F127406BE046D04DA04E401EA02FB011C1ADD02770104EB -:201AC00000E5038B01F0FFEA023F010F00AD13EA02CF03842E4350D5931AD7058307730545 -:201AE0003F01240083079C053F012200C9068C05801983079C05CF0386736574636CEBD3A0 -:201B00001A031BD90E08ED667D082EFEED6EAFD3E1D3E9D3E821FFFF3E10D3E00EE2EDBFA9 -:201B20000EEAEDBF3E80D3E83EE0D3E9086F0E08ED6ED9DDE986676574636CEBF81A401B3A -:201B4000D90E08ED667D082EFEED6E3E80D3E90EEBEDB7545D0EE3EDB70E0079956F799C3A -:201B600067799B5F799A57FDEDFBA861E5086F0E08ED6ED9DDE984544153CB351BD705CF95 -:031B80000300005F -:00010001FE -8B708450913097305E6042304DD \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.MAC b/software/CPM/CPM08_Z80FORTH/280FORTH.MAC deleted file mode 100644 index 02af6ba..0000000 --- a/software/CPM/CPM08_Z80FORTH/280FORTH.MAC +++ /dev/null @@ -1,4210 +0,0 @@ - title - subttl Adaptive version -; -; -; Modified from Z80 fig-FORTH 1.1h by EHR 880830 -; Modified frm FIG document keyed by Dennis L. Wilson 800907 -; Converted frm "8080 FIG-FORTH VERSION A0 15SEP79" -; -; fig-FORTH release 1.1 for the 8080 processor. -; -; ALL PUBLICATIONS OF THE FORTH INTEREST GROUP -; ARE PUBLIC DOMAIN. THEY MAY BE FURTHER -; DISTRIBUTED BY THE INCLUSION OF THIS CREDIT NOTICE: -; -; This publication has been made available by the -; Forth Interest Group -; P.O.Box 1105 -; San Carlos, CA 94070 -; U.S.A. -; -; Implementation on 8080 by: -; John Cassady -; 339 15th Street -; Oakland, CA 94612 -; U.S.A -; on 790528 -; Modified by: -; Kim Harris -; Acknowledgements: -; George Flammer -; Robt. D. Villwock -; ---------------------------------------------------------------------- -; Z80 Version for Cromemco CDOS & Digital Research CP/M by: -; Dennis Lee Wilson c/o -; Aristotelian Logicians -; 2631 East Pinchot Avenue -; Phoenix, AZ 85016 -; U.S.A. -; ---------------------------------------------------------------------- -; The 2 byte Z80 code for Jump Relative (JR) has been substituted for -; the 3 byte Jump (JP) wherever practical. The port I/O words P@ & P! -; have been made ROMable by use of Z80 instructions. -; ---------------------------------------------------------------------- -; Further modifications (marked ;/) by: -; Edmund Ramm -; P.O.Box 38 -; 2358 Kaltenkirchen -; Fed. Rep. of Germany 840418 -; -; 850419 changed * (star) -; 850507 added 0<>, 0>, TUCK, NIP, -ROT, CSWAP, PICK -; 850511 added -CMOVE -; -; ----------------------------------------------------------------------------- -; Disc I/O has been modified a la Albert van der Horst (HCCH) to employ -; CP/M 2.x's random access feature. -; ----------------------------------------------------------------------------- -; ----------------------------------------------------------------------------- -; -; Z280 specifics -; -; -iopreg equ 08h ; i/o page register -; -config0 equ 0e0h ; c/t 0 configuration register -cntrl0 equ 0e1h ; c/t 0 command/status register -tcon0 equ 0e2h ; c/t 0 time constatnt register -count0 equ 0e3h ; c/t 0 count-time register -config1 equ 0e8h ; c/t 1 configuration register -cntrl1 equ 0e9h ; c/t 1 command/status register -tcon1 equ 0eah ; c/t 1 time constant register -count1 equ 0ebh ; c/t 1 count-time register -; -; ----------------------------------------------------------------------------- -; -; Release & Version numbers -; -figrel equ 1 ;FIG RELEASE # -figrev equ 1 ;FIG REVISION # -usrver equ 61h ;USER VERSION # a by EHR -; -;Console & printer drivers are in external source named -;CONPRTIO.FTH & disc drivers in DISCIO.FTH. It has 4 screen -;buffers & end of memory is set to FBASE from locn. 0007H. - page -; ASCII characters used -; -abl equ 20h ;BLANK -acr equ 0dh ;CR -adot equ 2eh ;. -bell equ 07h ;^G -bsin equ 08h ;backspace chr = ^H -bsout equ 08h -dle equ 10h ;^P -lf equ 0ah ;^J -ff equ 0ch ;^L -; -; Memory allocation -; -bdoss equ 0005h ;/ system entry -nscr equ 4 ; # of 1024 byte screens -kbbuf equ 128 ; bytes/disc buffer -us equ 40h ; user variables space -rts equ 400h ; Return Stack & term buff space -co equ kbbuf+4 ; Disc buff + 2 header + 2 tail -nbuf equ nscr*400h/kbbuf ; # of buffers -bufsiz equ co*nbuf ;/ total disc buffer size - page - aseg - ;.z280 - ; PRE280 V1.12 11-Feb-91 Copyright (c) 1988-91 by A.Zinser (fifi@hiss.han.de) - .Z80 -; - org 0100h -; -orig: - nop - jp cld ; vector to cold start - nop - jp wrm ; vector to warm start - defb figrel ; fig release # - defb figrev ; fig revision # - defb usrver ; user version # - defb 0eh ; implementation attributes -; -; -; -; 0eh = 0000:1110 -; --------- -; B +ORIGIN ...W:IEBA -; -; W: 0=above sufficient -; 1=other differences exist -; I: Interpreter is 0=pre- -; 1=post incrementing -; E: Addr must be even: 0 yes -; 1 no -; B: High byte @ 0=low addr. -; 1=high addr. -; A: CPU Addr. 0=BYTE -; 1=WORD -; -; -; - defw task-7 ; topmost word in FORTH vocabulary - defw bsin ; backspace chr -upinit: defw 0 ;/ init (up) -; -; * Following used by COLD; must be in same order as user variables * -; -s0init: defw 0 ;/ init (s0) -r0init: defw 0 ;/ init (r0) -tibini: defw 0 ;/ init (TIB) - defw 1fh ; init (WIDTH) - defw 0 ; init (WARNING) - defw initdp ; init (FENCE) - defw initdp ; init (dp) - defw forth+8 ; init (VOC-LINK) -; -; * END DATA USED BY COLD * -; - defw 0018h,0f600h ; Z280 CPU name (hw,lw) - ; (32 bit base 36 integer) - page -; REGISTERS -; -; FORTH Z80 FORTH PRESERVATION RULES -; ----- --- ----------------------- -; IP BC should be preserved -; accross FORTH words. -; W DE sometimes output from -; NEXT, may be altered -; b4 JP'ing to NEXT, -; input only when -; "DPUSH" called. -; SP SP should be used only as -; Data Stack accross -; FORTH words, may be -; used within FORTH -; words if restored -; b4 "NEXT" -; HL Never output frm NEXT -; input only when -; "HPUSH" called -; -; -up: defw 0 ;/ user area ptr -rpp: defw 0 ;/ return stack ptr -buf1: defw 0 ;/ address of 1st disc buffer -; -; -; COMMENT CONVENTIONS: -; -; == means "is equal to" -; <-- means assignment -; #NAME = value of name -; NAME = contents @ name -; (NAME) = contents of cell addressed by name -; cfa = code field address -; lfa = link field address -; nfa = name field address -; pfa = parameter field address -; s1 = 1st word of parameter stack -; s2 = 2nd -"- of -"- -"- -; r1 = 1st -"- of return stack -; r2 = 2nd -"- of -"- -"- -; ( above Stack posn. valid b4 & after execution of any word, not during) -; -; lsb = least significant bit -; msb = most significant bit -; lb = low byte -; hb = high byte -; lw = low word -; hw = high word -; (May be used as suffix to above names) - page -; FORTH ADDRESS INTERPRETER -; POST INCREMENTING VERSION -; -; -; -dpush: - push de -hpush: - push hl ; iy points here -next: - ld h,b ;/ w <-- (ip) ix points here - ld l,c ;/ - ;ldw hl,(hl) ;/ (hl) --> cfa - DEFB 0EDh,26h - inc bc - inc bc ;/ ip += 2 -next1: - ;ldw de,(hl) ;/ pc <-- (w) - DEFB 0EDh,16h - ex de,hl - inc de - jp (hl) ; note: de <-- cfa + 1 -; -; -jnext macro - jp (ix) - endm -; -jhpush macro - jp (iy) - endm -; - page -; FORTH DICTIONARY -; DICTIONARY FORMAT: -; -; BYTE -; ADDRESS NAME CONTENTS -; ------- ---- -------- -; (MSB=1 -; (P=PRECEDENCE BIT -; (S=SMUDGE BIT -; NFA NAME FIELD 1PS MSB=0, NAME'S 1st CHAR -; 0<2CHAR> -; ... -; 1 MSB=1, NAME'S LAST CHAR -; LFA LINK FIELD =PREVIOUS WORD'S NFA -; -;LABEL: CFA CODE FIELD =ADDR CPU CODE -; -; PFA PARAMETER <1PARAM> 1st PARAMETER BYTE -; FIELD <2PARAM> -; ... -; -; -; -dp0: - defb 83h ; LIT - defc 'LIT' - defw 0 ; lfa == 0 marks end of dictionary -lit: - defw $+2 ; s1 <-- (ip) - ld h,b - ld l,c - ;ldw hl,(hl) ; hl <-- (ip) = literal - DEFB 0EDh,26h - inc bc ;/ - inc bc ;/ ip += 2 - jhpush ; s1 <-- hl -; -; - defb 87h ; EXECUTE - defc 'EXECUTE' - defw lit-6 -exec: - defw $+2 - pop hl - jp next1 -; -; - defb 86h ; BRANCH - defc 'BRANCH' - defw exec-0ah -bran: - defw $+2 ; ip += (ip) -bran1: - ld h,b - ld l,c ; hl <-- ip - ;addw hl,(hl) ; hl <-- ip + branch offset - DEFB 0DDH - DEFB 0EDH,0C6h - ld c,l - ld b,h ; ip += branch offset - jnext -; -; - defb 87h ; 0BRANCH - defc '0BRANCH' - defw bran-9 -zbran: - defw $+2 - pop hl - ld a,l - or h - jr z,bran1 ; branch if if s1 == 0 - inc bc ; else skip branch offset - inc bc - jnext -; -; - defb 86h ; (LOOP) - defc '(LOOP)' - defw zbran-0ah -xloop: - defw $+2 - ld hl,(rpp) ; (hl) --> index = r1 - ;incw (hl) ;/ index += 1 - DEFB 0DDH - inc BC - ;ldw de,(hl) ;/ de <-- new index - DEFB 0EDh,16h - inc hl ;/ - inc hl ;/ hl --> limit(lb) - ld a,e - sub (hl) - ld a,d - inc hl ; hl --> limit(hb) - sbc a,(hl) ; index < limit? - jp m,bran1 ; yes, loop again - inc hl ; no, done - ld (rpp),hl ; discard r1 & r2 - inc bc - inc bc ; skip branch offset - jnext -; -; - defb 87h ; (+LOOP) - defc '(+LOOP)' - defw xloop-9 -xploo: - defw $+2 - pop de ; de <-- increment - ld hl,(rpp) ; hl --> index - ld a,(hl) ; index += increment - add a,e - ld (hl),a - ld e,a - inc hl - ld a,(hl) - adc a,d - ld (hl),a - inc hl ; (hl) --> limit - inc d - dec d - ld d,a ; de <-- new index - jp m,xloo2 ; if incr > 0 - ld a,e - sub (hl) ; then a <-- index - limit - ld a,d - inc hl - sbc a,(hl) - jp xloo3 - -xloo2: - ld a,(hl) ; else a <-- limit - index - sub e - inc hl - ld a,(hl) - sbc a,d -; ; if a < 0 -xloo3: - jp m,bran1 ; then loop again - inc hl ; else done - ld (rpp),hl ; discard r1 & r2 - inc bc ; skip branch offset - inc bc - jnext -; -; - defb 84h ; (DO) - defc '(DO)' - defw xploo-0ah -xdo: - defw $+2 - pop de ; de <-- initial index - ld hl,(rpp) ; hl <-- rp - dec hl - dec hl - ;pop (hl) ;/ r2 <-- limit - DEFB 0DDH - pop BC - dec hl - dec hl - ;ldw (hl),de ;/ r1 <-- initial index - DEFB 0EDh,1Eh - ld (rpp),hl ; rp -= 4 - jnext -; -; - defb 81h ; I - defc 'I' - defw xdo-7 -ido: - defw $+2 - ld hl,(rpp) - ;push (hl) ;/ s1 <-- r1, r1 unchanged - DEFB 0DDH - push BC - jnext -; -; - defb 85h ; DIGIT - defc 'DIGIT' - defw ido-4 -digit: - defw $+2 - pop hl ; l <-- s1.lb = base value - pop de ; e <-- s2.lb = chr to be converted - ld a,e ; a <-- chr - sub '0' ; >= 0? - jr c,digi2 ;/ < 0 is invalid - cp 0ah ; > 9? - jr c,digi1 ;/ no, test base value - sub 07h ; gap between '9' & 'A', nw 'A'=0ah - cp 0ah ; >= 'A'? - jr c,digi2 ;/ chrs btwn '9' & 'A' are invalid -digi1: - cp l ; < base value? - jr nc,digi2 ;/ no, invalid - ld e,a ; s2 <-- de = converted digit - ld hl,0001h ; s1 <-- true - jp dpush -; -digi2: - ld l,h ; hl <-- false - jhpush ; s1 <-- false -; -; - defb 86h ; (FIND) (2-1)FAILURE - defc '(FIND)' ; (2-3)SUCCESS - defw digit-8 -pfind: - defw $+2 - pop de ; de <-- nfa -pfin1: - pop hl ; hl <-- string addr - push hl ; save for next iteration - ld a,(de) - xor (hl) ; filter differences - and 3fh ; mask msb & precedence bit - jr nz,pfin4 ; lengths differ -pfin2: - inc hl ; hl --> next string chr - inc de ; de --> next name field chr - ld a,(de) - xor (hl) ; filter differences - add a,a ; shift msbit into carry - jr nz,pfin3 ; no match - jr nc,pfin2 ; match so far, loop agn - ld hl,0005h ; string matches - add hl,de ; (sp) <-- pfa - ex (sp),hl -pfin6: - dec de ; de --> nfa - ld a,(de) - or a ; msb=1? =length byte - jp p,pfin6 ; no, try next chr - ld e,a ; e <-- length byte - ld d,00h - ld hl,0001h ; hl <-- true - jp dpush ; name field found, return -; -; above name field not a match, try next one -; -pfin3: - jr c,pfin5 ; carry=end of name field -pfin4: - inc de ; find name field end - ld a,(de) - or a ; msb=1? - jp p,pfin4 ; no, loop -pfin5: - inc de ; de <-- lfa - ex de,hl - ;ldw de,(hl) ;/ de <-- lfa - DEFB 0EDh,16h - ld a,d - or e ; end of dictionary (lfa = 0)? - jr nz,pfin1 ; no, try previous definition - pop hl ; drop string address - ld hl,0 ; hl <-- false - jhpush ; no match found, return -; -; - defb 87h ; ENCLOSE - defc 'ENCLOSE' - defw pfind-9 -encl: - defw $+2 - pop de ; de <-- s1 = delimiter chr - pop hl ; hl <-- s2 = addr of text to scan - push hl ; s4 <-- addr - ld a,e - ld d,a ; d <-- delim chr - ld e,-1 ; init chr offset counter - dec hl ; hl <-- addr - 1 -encl1: - inc hl ; skip over leading delim chrs - inc e - cp (hl) ; delim chr? - jr z,encl1 ; yes, loop - ld d,0 - push de ; s3 <-- e = offset to 1st non delim - ld d,a ; d <-- delim chr - ld a,(hl) - and a ; 1st non-delim=null? - jr nz,encl2 ; no - ld d,0 ; yes - inc e - push de ; s2 <-- offset to byte following null - dec e - push de ; s1 <-- offset to null - jnext -; -encl2: - ld a,d ; A <-- delim chr - inc hl ; hl <-- next chr's address - inc e ; e <-- offset to next chr - cp (hl) ; delim chr? - jr z,encl4 ; yes - ld a,(hl) - and a ; null? - jr nz,encl2 ; no, continue scan -encl3: - ld d,0 - push de ; s2 <-- offset to null - push de ; s1 <-- offset to null - jnext -; -encl4: - ld d,0 - push de ; s2 <-- offset to byte following text - inc e - push de ; s1 <-- offset 2 bytes aft end of word - jnext -; -; - defb 84h ; EMIT - defc 'EMIT' - defw encl-0ah -emit: - defw docol - defw pemit - defw one,outt - defw pstor,semis -; -; - defb 83h ; KEY - defc 'KEY' - defw emit-7 -key: - defw $+2 - jp pkey -; -; - defb 89h ; ?TERMINAL - defc '?TERMINAL' - defw key-6 -qterm: - defw $+2 - ld hl,0 - jp pqter -; -; - defb 82h ; CR - defc 'CR' - defw qterm-0ch -cr: - defw $+2 - jp pcr -; -; - defb 85h ; CMOVE - defc 'CMOVE' - defw cr-5 -cmove: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- s1 = # of chrs - pop de ; de <-- s2 = dest addr - pop hl ;/ hl <-- s3 = source addr - ld a,b - or c ; bc=0? - jr z,cmove1 ; yes, nothing to move - ldir ;/ xfer string -cmove1: - exx ;/ restore ip - jnext -; -; - defb 86h ;/ -CMOVE ( from to count --- ) - defc '-CMOVE' - defw cmove-8 -bcmov: - defw $+2 - exx ; save ip - pop bc ; bc <-- count - pop de ; de <-- destination - pop hl ; hl <-- source - ld a,b - or c ; bc =0? - jr z,bcmov1 ; yes, nothing to move - add hl,bc - dec hl ; hl --> hi end of source block - ex de,hl - add hl,bc - dec hl - ex de,hl ; de --> hi end of dest. block - lddr ; (de) <-- (hl), --hl,bc until bc=0 -bcmov1: - exx ; restore ip - jnext -; -; - defb 82h ; U* 16*16 unsigned multiply - defc 'U*' ; with 32 bit result - defw bcmov-9 -ustar: - defw $+2 - pop de ; de <-- multiplier - pop hl ; hl <-- multiplicant - ;multuw hl,de ;/ - DEFB 0EDH,0D3h - ex de,hl ;/ de <-- product.lw, hl <-- product.hw - jp dpush ; s2,s1 <-- product.lw,hw -; -; - defb 82h ; U/ ( ud u1 -- urem uq ) - defc 'U/' - defw ustar-5 -uslas: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- divisor - pop hl ; hl <-- dividend.hw - pop de ; de <-- dividend.lw - ;cpw hl,bc ;/ dividend.hw >= divisor? - DEFB 0EDH,0C7h - jr c,usla1 ; no, go ahead - ld hl,0ffffh ; yes, overflow - ld d,h - ld e,l ;/ set rem & quot to max - jr usla2 -usla1: - ex de,hl ;/ de,hl <-- dividend.hw,lw - ;divuw dehl,bc ;/ de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh -usla2: - push de ;/ s2 <-- remainder - push hl ;/ s1 <-- quotient - exx ;/ restore ip - jnext -; -; - defb 83h ; AND - defc 'AND' - defw uslas-5 -andd: - defw $+2 ; s1 <-- s1 AND s2 - pop de - pop hl - ld a,e - and l - ld l,a - ld a,d - and h - ld h,a - jhpush -; -; - defb 82h ; OR - defc 'OR' - defw andd-6 -orr: - defw $+2 ; s1 <-- s1 OR s2 - pop de - pop hl - ld a,e - or l - ld l,a - ld a,d - or h - ld h,a - jhpush -; -; - defb 83h ; XOR - defc 'XOR' - defw orr-5 -xorr: - defw $+2 ; s1 <-- s1 XOR s2 - pop de - pop hl - ld a,e - xor l - ld l,a - ld a,d - xor h - ld h,a - jhpush -; -; - defb 83h ; SP@ - defc 'SP@' - defw xorr-6 -spat: - defw $+2 - ld hl,0 - add hl,sp ; hl <-- sp - jhpush ; s1 <-- sp -; -; - defb 83h ; SP! - defc 'SP!' - defw spat-6 -spsto: - defw $+2 ; sp <-- s0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,6 - add hl,de ; hl --> s0 - ;ldw sp,(hl) ;/ sp <-- s0 - DEFB 0EDh,36h - jnext -; -; - defb 83h ; RP@ - defc 'RP@' - defw spsto-6 -rpat: - defw $+2 - ld hl,(rpp) - jhpush ; s1 <-- rp -; -; - defb 83h ; RP! - defc 'RP!' - defw rpat-6 -rpsto: - defw $+2 ; rp <-- r0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,0008h - add hl,de ; hl --> r0 - ;ldw hl,(hl) ;/ hl <-- r0 - DEFB 0EDh,26h - ld (rpp),hl ;/ rp <-- r0 - jnext -; -; - defb 82h ; ;S - defc ';S' - defw rpsto-6 -semis: - defw $+2 ; ip <-- r1 - ld hl,(rpp) - ;ldw bc,(hl) ;/ bc <-- r1 - DEFB 0EDh,06h - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 85h ; LEAVE - defc 'LEAVE' - defw semis-5 -leave: - defw $+2 ; limit <-- index - ld hl,(rpp) - ;ldw de,(hl) ;/ de <-- r1 (= index) - DEFB 0EDh,16h - inc hl - inc hl - ;ldw (hl),de ;/ r2 (= limit) <-- index - DEFB 0EDh,1Eh - jnext -; -; - defb 82h ; >R - defc '>R' - defw leave-8 -tor: - defw $+2 - ld hl,(rpp) - dec hl - dec hl - ;pop (hl) ;/ r1 <-- s1 - DEFB 0DDH - pop BC - ld (rpp),hl ; rp -= 2 - jnext -; -; - defb 82h ; R> - defc 'R>' - defw tor-5 -fromr: - defw $+2 - ld hl,(rpp) - ;push (hl) ;/ s1 <-- r1 - DEFB 0DDH - push BC - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 81h ; R - defc 'R' - defw fromr-5 -rr: - defw ido+2 -; -; - defb 82h ; 0= - defc '0=' - defw rr-4 -zequ: - defw $+2 - pop de - ld hl,0 - ;cpw hl,de ;/ - DEFB 0EDH,0D7h - jr nz,zequ1 - inc l ; hl <-- true -zequ1: - jhpush -; -; - defb 83h ;/ 0<> - defc '0<>' - defw zequ-5 -znequ: - defw $+2 - pop de - ld hl,0 - ;cpw hl,de ;/ - DEFB 0EDH,0D7h - jr z,znequ1 - inc l ; hl <-- true -znequ1: - jhpush -; -; - defb 82h ; 0< - defc '0<' - defw znequ-6 -zless: - defw $+2 - pop af ;/ a <-- s1.hb - rla ;/ carry <-- bit 7 - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry - jhpush -; -; - defb 82h ;/ 0> - defc '0>' - defw zless-5 -zgt: - defw $+2 - pop de - ld hl,0 - ;cpw hl,de ;/ - DEFB 0EDH,0D7h - jp p,zgt1 ;/ <= 0 - jp pe,zgt1 ;/ 8000h special case - inc l ;/ hl <-- true -zgt1: - jhpush -; -; - defb 81h ;+ - defc '+' - defw zgt-5 -plus: - defw $+2 - pop de - pop hl - add hl,de - jhpush -; -; - defb 82h ; D+ ( d1l d1h d2l d2h -- d3l d3h) - defc 'D+' - defw plus-4 -dplus: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- d2.hw - pop hl ; hl <-- d2.lw - pop af ;d af <-- d1.hw - pop de ; de <-- d1.lw - push af ;/ s1 <-- d1.hw - add hl,de ; hl <-- d2.lw + d1.lw (= d3.lw) - ex de,hl ; de <-- d3.lw - pop hl ; hl <-- d1.hw - adc hl,bc ;/ hl <-- d1.hw + d2.hw +carry (=d3.hw) - push de ; s2 <-- d3.lw - push hl ;/ s1 <-- d3.hw - exx ;/ restore ip - jnext -; -; - defb 85h ; MINUS - defc 'MINUS' - defw dplus-5 -minus: - defw $+2 - pop hl ;/ - ;neg hl ;/ - DEFB 0EDH,4Ch - jhpush -; -; - defb 86h ; DMINUS - defc 'DMINUS' - defw minus-8 -dminu: - defw $+2 - exx ;/ save ip - pop de ;/ de <-- d1.hw - pop bc ;/ bc <-- d1.lw - ld hl,0 ;/ - ;subw hl,bc ;/ - DEFB 0EDH,0CEh - push hl ; s2 <-- d2.lw - ld hl,0 ;/ - sbc hl,de ;/ - push hl ; s1 <-- d2.hw - exx ;/ - jnext -; -; - defb 84h ; OVER - defc 'OVER' - defw dminu-9 -over: - defw $+2 - ;ldw hl,(sp+2) ;/ - DEFB 0EDh,04h - DEFW +2 - jhpush ;/ -; -; - defb 84h ; DROP - defc 'DROP' - defw over-7 -drop: - defw $+2 - inc sp - inc sp ;/ faster on z280 than dummy pop - jnext -; -; - defb 84h ; SWAP - defc 'SWAP' - defw drop-7 -swap: - defw $+2 - pop hl - ex (sp),hl - jhpush -; -; - defb 83h ; DUP - defc 'DUP' - defw swap-7 -dup: - defw $+2 - ;ldw hl,(sp+0) ;/ - DEFB 0EDh,04h - DEFW +0 - jhpush -; -; - defb 84h ;/ TUCK ( n1 n2 --- n2 n1 n2) - defc 'TUCK' - defw dup-6 -tuck: - defw $+2 - pop hl ;/ hl <-- s1 - pop de ;/ de <-- s2 - push hl ;/ s3 <-- hl - jp dpush -; -; - defb 83h ;/ NIP ( n1 n2 --- n2) - defc 'NIP' - defw tuck-7 -nip: - defw $+2 - pop hl ; hl <-- s1 - ;ldw (sp+0),hl ;/ s1 <-- hl - DEFB 0EDh,05h - DEFW +0 - jnext -; -; - defb 84h ;/ -ROT ( n1 n2 n3 --- n3 n1 n2) - defc '-ROT' - defw nip-6 -mrot: - defw $+2 - pop hl - pop de - ex (sp),hl - ex de,hl - jp dpush -; -; - defb 85h ;/ CSWAP ( n1 --- n1, bytes swapped) - defc 'CSWAP' - defw mrot-7 -cswap: - defw $+2 - pop hl - ;ex h,l ;/ - DEFB 0EDH,0EFh - jhpush -; -; - defb 84h ;/ PICK ( nn...n0 k --- nn..n0 nk) - defc 'PICK' - defw cswap-8 -pick: - defw $+2 - pop hl ; hl <-- depth - add hl,hl ; adjust to word size - add hl,sp ; offset into stack - ;push (hl) ;/ - DEFB 0DDH - push BC - jnext -; -; - defb 84h ; 2DUP - defc '2DUP' - defw pick-7 -tdup: - defw $+2 - pop hl - pop de - push de - push hl - jp dpush -; -; - defb 82h ; +! - defc '+!' - defw tdup-7 -pstor: - defw $+2 - pop hl ; hl --> variable - pop de ; de <-- number - ld a,(hl) - add a,e - ld (hl),a - inc hl - ld a,(hl) - adc a,d - ld (hl),a ; (hl) += number - jnext -; -; - defb 86h ; TOGGLE - defc 'TOGGLE' - defw pstor-5 -toggl: - defw $+2 - pop de ; e <-- bit pattern - pop hl ; hl --> address - ld a,(hl) - xor e - ld (hl),a - jnext -; -; - defb 81h ; @ - defc '@' - defw toggl-9 -at: - defw $+2 - pop hl - ;push (hl) ;/ - DEFB 0DDH - push BC - jnext -; -; - defb 82h ; C@ - defc 'C@' - defw at-4 -cat: - defw $+2 - pop hl - ld l,(hl) - ld h,0 - jhpush -; -; - defb 82h ; 2@ - defc '2@' - defw cat-5 -tat: - defw $+2 - pop hl ; hl --> address - ;ldw de,(hl) ;/ de <-- d.hw - DEFB 0EDh,16h - inc hl - inc hl ; hl --> d.lw - ;push (hl) ;/ s2 <-- d.lw - DEFB 0DDH - push BC - push de ;/ s1 <-- d.hw - jnext -; -; - defb 81h ; ! - defc '!' - defw tat-5 -store: - defw $+2 - pop hl ; hl --> address - ;pop (hl) ;/ - DEFB 0DDH - pop BC - jnext -; -; - defb 82h ; C! - defc 'C!' - defw store-4 -cstor: - defw $+2 - pop hl ; hl --> address - pop de ; e <-- char - ld (hl),e - jnext -; -; - defb 82h ; 2! - defc '2!' - defw cstor-5 -tstor: - defw $+2 - pop hl ; hl --> address - ;pop (hl) ;/ store d.hw - DEFB 0DDH - pop BC - inc hl - inc hl - ;pop (hl) ;/ store d.lw - DEFB 0DDH - pop BC - jnext -; -; - defb 0c1h ; : - defc ':' - defw tstor-5 -colon: - defw docol - defw qexec - defw scsp - defw curr - defw at - defw cont - defw store - defw creat - defw rbrac - defw pscod -docol: - ld hl,(rpp) - dec hl - dec hl - ;ldw (hl),bc ;/ save return address - DEFB 0EDh,0Eh - ld (rpp),hl - inc de - ld c,e - ld b,d - jnext -; -; - defb 0c1h ; ; - defc ';' - defw colon-4 -semi: - defw docol - defw qcsp - defw comp - defw semis - defw smudg - defw lbrac - defw semis -; -; - defb 84h ; NOOP - defc 'NOOP' - defw semi-4 -noop: - defw docol - defw semis -; -; - defb 88h ; CONSTANT - defc 'CONSTANT' - defw noop-7 -con: - defw docol - defw creat - defw smudg - defw comma - defw pscod -docon: - inc de - ex de,hl - ;push (hl) ;/ - DEFB 0DDH - push BC - jnext -; -; - defb 88h ; VARIABLE - defc 'VARIABLE' - defw con-0bh -var: - defw docol - defw con - defw pscod -dovar: - inc de - push de - jnext -; -; - defb 84h ; USER - defc 'USER' - defw var-0bh -user: - defw docol - defw con - defw pscod -douse: - inc de - ex de,hl - ld l,(hl) ;/ - ld h,0 ;/ - ;addw hl,(up) ;/ - DEFB 0DDH - DEFB 0EDH,0D6h - DEFW UP - jhpush -; -; - defb 81h ; 0 - defc '0' - defw user-7 -zero: - defw $+2 ;/ - ;push 0000h ;/ - DEFB 0FDH - push AF - DEFW 0000H - jnext -; -; - defb 81h ; 1 - defc '1' - defw zero-4 -one: - defw $+2 ;/ - ;push 0001h ;/ - DEFB 0FDH - push AF - DEFW 0001H - jnext -; -; - defb 81h ; 2 - defc '2' - defw one-4 -two: - defw $+2 ;/ - ;push 0002h ;/ - DEFB 0FDH - push AF - DEFW 0002H - jnext -; -; - defb 81h ; 3 - defc '3' - defw two-4 -three: - defw $+2 ;/ - ;push 0003h ;/ - DEFB 0FDH - push AF - DEFW 0003H - jnext -; -; - defb 82h ; BL - defc 'BL' - defw three-4 -bl: - defw docon - defw 20h -; -; - defb 83h ; C/L - defc 'C/L' - defw bl-5 -csll: - defw docon - defw 64 -; -; - defb 85h ; FIRST - defc 'FIRST' - defw csll-6 -first: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; LIMIT - defc 'LIMIT' - defw first-8 -limit: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; B/BUF - defc 'B/BUF' - defw limit-8 -bbuf: - defw docon - defw kbbuf -; -; - defb 85h ; B/SCR - defc 'B/SCR' - defw bbuf-8 -bscr: - defw docon - defw 400h/kbbuf -; -; - defb 87h ; +ORIGIN - defc '+ORIGIN' - defw bscr-8 -porig: - defw docol - defw lit - defw orig - defw plus - defw semis -; -; USER VARIABLES -; - defb 82h ; S0 - defc 'S0' - defw porig-0ah -szero: - defw douse - defw 6 -; -; - defb 82h ; R0 - defc 'R0' - defw szero-5 -rzero: - defw douse - defw 8 -; -; - defb 83h ; TIB - defc 'TIB' - defw rzero-5 -tib: - defw douse - defb 0ah -; -; - defb 85h ; WIDTH - defc 'WIDTH' - defw tib-6 -width: - defw douse - defb 0ch -; -; - defb 87h ; WARNING - defc 'WARNING' - defw width-8 -warn: - defw douse - defb 0eh -; -; - defb 85h ; FENCE - defc 'FENCE' - defw warn-0ah -fence: - defw douse - defb 10h -; -; - defb 82h ; DP - defc 'DP' - defw fence-8 -dp: - defw douse - defb 12h -; -; - defb 88h ; VOC-LINK - defc 'VOC-LINK' - defw dp-5 -vocl: - defw douse - defw 14h -; -; - defb 83h ; BLK - defc 'BLK' - defw vocl-0bh -blk: - defw douse - defb 16h -; -; - defb 82h ; IN - defc 'IN' - defw blk-6 -inn: - defw douse - defb 18h -; -; - defb 83h ; OUT - defc 'OUT' - defw inn-5 -outt: - defw douse - defb 1ah -; -; - defb 83h ; SCR - defc 'SCR' - defw outt-6 -scr: - defw douse - defb 1ch -; -; - defb 86h ; OFFSET - defc 'OFFSET' - defw scr-6 -ofset: - defw douse - defb 1eh -; -; - defb 87h ; CONTEXT - defc 'CONTEXT' - defw ofset-9 -cont: - defw douse - defb 20h -; -; - defb 87h ; CURRENT - defc 'CURRENT' - defw cont-0ah -curr: - defw douse - defb 22h -; -; - defb 85h ; STATE - defc 'STATE' - defw curr-0ah -state: - defw douse - defb 24h -; -; - defb 84h ; BASE - defc 'BASE' - defw state-8 -base: - defw douse - defb 26h -; -; - defb 83h ; DPL - defc 'DPL' - defw base-7 -dpl: - defw douse - defb 28h -; -; - defb 83h ; FLD - defc 'FLD' - defw dpl-6 -fld: - defw douse - defb 2ah -; -; - defb 83h ; CSP - defc 'CSP' - defw fld-6 -cspp: - defw douse - defb 2ch -; - - defb 82h ; R# - defc 'R#' - defw cspp-6 -rnum: - defw douse - defb 2eh -; - - defb 83h ; HLD - defc 'HLD' - defw rnum-5 -hld: - defw douse - defw 30h -; -; END OF USER VARIABLES -; - defb 82h ; 1+ - defc '1+' - defw hld-6 -onep: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ; 2+ - defc '2+' - defw onep-5 -twop: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 1- - defc '1-' ;/ - defw twop-5 ;/ -onemin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2- - defc '2-' ;/ - defw onemin-5 ;/ -twomin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2* - defc '2*' ;/ - defw twomin-5 ;/ -twosta: - defw $+2 ;/ - pop hl ;/ - add hl,hl ;/ asl hl - jhpush ;/ -; -; - defb 82h ;/ 2/ - defc '2/' ;/ - defw twosta-5 ;/ -twosla: - defw $+2 ;/ - pop hl ;/ - bit 7,h ;/ negative? - jr z,twosl1 ;/ no - inc hl ;/ yes, add 1 -twosl1: - sra h ;/ - rr l ;/ asr hl - jhpush ;/ -; -; - defb 84h ; HERE - defc 'HERE' - defw twosla-5 -here: - defw docol - defw dp - defw at - defw semis -; -; - defb 85h ; ALLOT - defc 'ALLOT' - defw here-7 -allot: - defw docol - defw dp - defw pstor - defw semis -; -; - defb 81h ; , - defc ',' - defw allot-8 -comma: - defw docol - defw here - defw store - defw two - defw allot - defw semis -; - - defb 82h ; C, - defc 'C,' - defw comma-4 -ccomm: - defw docol - defw here - defw cstor - defw one - defw allot - defw semis -; -; - defb 81h ; - - defc '-' - defw ccomm-5 -subb: - defw $+2 - pop de - pop hl - ;subw hl,de ;/ - DEFB 0EDH,0DEh - jhpush -; -; - defb 81h ; = - defc '=' - defw subb-4 -equal: - defw $+2 ;/ - pop de ;/ - pop hl ;/ - ;subw hl,de ;/ - DEFB 0EDH,0DEh - ld hl,0 ; hl <-- false - jr nz,equal1 - inc l ;/ hl <-- true -equal1: - jhpush -; -; - defb 81h ; < - defc '<' - defw equal-4 -less: - defw $+2 - pop de - pop hl ; hl de < - ld a,d - xor h ; one operand negative? - jp m,less1 ; yes, determine which - ;subw hl,de ;/ - DEFB 0EDH,0DEh -less1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,less2 - inc l ;/ hl <-- true -less2: - jhpush -; -; - defb 82h ; U< - defc 'U<' - defw less-4 -uless: - defw $+2 - pop de - pop hl ;/ hl de U< - ;subw hl,de ;/ - DEFB 0EDH,0DEh - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry -uless1: - jhpush -; -; - defb 81h ; > - defc '>' - defw uless-5 -great: - defw $+2 - pop hl ;/ - pop de ;/ hl de > (= de hl < ) - ld a,d - xor h ; one operand negative? - jp m,great1 ; yes, determine which - ;subw hl,de ;/ - DEFB 0EDH,0DEh -great1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,great2 - inc l ;/ hl <-- true -great2: - jhpush -; -; - defb 83h ; ROT ( n1 n2 n3 --- n2 n3 n1) - defc 'ROT' - defw great-4 -rot: - defw $+2 - pop de ; de <-- n3 - pop hl ; hl <-- n2 - ex (sp),hl ; s1 <-- n2, hl <-- n1 - jp dpush ; s2 <-- n3, s3 <-- n1 -; -; - defb 85h ; SPACE - defc 'SPACE' - defw rot-6 -space: - defw docol - defw bl - defw emit - defw semis -; -; - defb 84h ; -DUP - defc '-DUP' - defw space-8 -ddup: - defw $+2 ;/ - ;ldw hl,(sp+0) ;/ - DEFB 0EDh,04h - DEFW +0 - ld a,h ;/ - or l ;/ hl = 0? - jr z,ddup1 ;/ yes, don't dup - push hl ;/ -ddup1: - jnext -; -; - defb 88h ; TRAVERSE - defc 'TRAVERSE' - defw ddup-7 -trav: - defw docol - defw swap -trav1: - defw over ; begin - defw plus - defw lit - defw 7fh - defw over - defw cat - defw less - defw zbran ; until - defw trav1-$ - defw swap - defw drop - defw semis -; -; - defb 86h ; LATEST - defc 'LATEST' - defw trav-0bh -lates: - defw docol - defw curr - defw at - defw at - defw semis -; -; - defb 83h ; LFA - defc 'LFA' - defw lates-9 -lfa: - defw $+2 - pop hl ;/ hl <-- pfa - ;subw hl,4 ;/ - DEFB 0FDH - DEFB 0EDH,0FEh - DEFW 4 - jhpush ;/ s1 <-- lfa -; -; - defb 83h ; CFA - defc 'CFA' - defw lfa-6 -cfa: - defw docol - defw twomin ;/ - defw semis -; -; - defb 83h ; NFA - defc 'NFA' - defw cfa-6 -nfa: - defw docol - defw lit - defw 5 - defw subb - defw lit - defw -1 - defw trav - defw semis -; -; - defb 83h ; PFA - defc 'PFA' - defw nfa-6 -pfa: - defw docol - defw one - defw trav - defw lit - defw 5 - defw plus - defw semis -; -; - defb 84h ; !CSP - defc '!CSP' - defw pfa-6 -scsp: - defw docol - defw spat - defw cspp - defw store - defw semis -; -; - defb 86h ; ?ERROR - defc '?ERROR' - defw scsp-7 -qerr: - defw docol - defw swap - defw zbran ; if - defw qerr1-$ - defw error - defw bran ; else - defw qerr2-$ -qerr1: - defw drop ; endif -qerr2: - defw semis -; -; - defb 85h ; ?COMP - defc '?COMP' - defw qerr-9 -qcomp: - defw docol - defw state - defw at - defw zequ - defw lit - defw 11h - defw qerr - defw semis -; -; - defb 85h ; ?EXEC - defc '?EXEC' - defw qcomp-8 -qexec: - defw docol - defw state - defw at - defw lit - defw 12h - defw qerr - defw semis -; -; - defb 86h ; ?PAIRS - defc '?PAIRS' - defw qexec-8 -qpair: - defw docol - defw subb - defw lit - defw 13h - defw qerr - defw semis -; -; - defb 84h ; ?CSP - defc '?CSP' - defw qpair-9 -qcsp: - defw docol - defw spat - defw cspp - defw at - defw subb - defw lit - defw 14h - defw qerr - defw semis -; -; - defb 88h ; ?LOADING - defc '?LOADING' - defw qcsp-7 -qload: - defw docol - defw blk - defw at - defw zequ - defw lit - defw 16h - defw qerr - defw semis -; -; - defb 87h ; COMPILE - defc 'COMPILE' - defw qload-0bh -comp: - defw docol - defw qcomp - defw fromr - defw dup - defw twop - defw tor - defw at - defw comma - defw semis -; -; - defb 0c1h ; [ - defc '[' - defw comp-0ah -lbrac: - defw docol - defw zero - defw state - defw store - defw semis -; -; - defb 81h ; ] - defc ']' - defw lbrac-4 -rbrac: - defw docol - defw lit,0c0h - defw state,store - defw semis -; -; - defb 86h ; SMUDGE - defc 'SMUDGE' - defw rbrac-4 -smudg: - defw docol - defw lates - defw lit - defw 20h - defw toggl - defw semis -; -; - defb 83h ; HEX - defc 'HEX' - defw smudg-9 -hex: - defw docol - defw lit - defw 10h - defw base - defw store - defw semis -; -; - defb 87h ; DECIMAL - defc 'DECIMAL' - defw hex-6 -dec: - defw docol - defw lit - defw 0ah - defw base - defw store - defw semis -; -; - defb 87h ; (;CODE) - defc '(;CODE)' - defw dec-0ah -pscod: - defw docol - defw fromr - defw lates - defw pfa - defw cfa - defw store - defw semis -; -; - defb 0c5h ; ;CODE - defc ';CODE' - defw pscod-0ah -semic: - defw docol - defw qcsp - defw comp - defw pscod - defw lbrac -semi1: - defw noop ; assembler - defw semis -; -; - defb 87h ; - defc 'DOES>' - defw build-0ah -does: - defw docol - defw fromr - defw lates - defw pfa - defw store - defw pscod -dodoe: - ld hl,(rpp) - dec hl - dec hl - ;ldw (hl),bc ;/ - DEFB 0EDh,0Eh - ld (rpp),hl - inc de - ex de,hl - ;ldw bc,(hl) ;/ - DEFB 0EDh,06h - inc hl - inc hl - jhpush -; -; - defb 85h ; COUNT - defc 'COUNT' - defw does-8 -count: - defw docol - defw dup - defw onep - defw swap - defw cat - defw semis -; -; - defb 84h ; TYPE - defc 'TYPE' - defw count-8 -type: - defw docol - defw ddup - defw zbran ; if - defw type1-$ - defw over - defw plus - defw swap - defw xdo ; do -type2: - defw ido - defw cat - defw emit - defw xloop ; loop - defw type2-$ - defw bran ; else - defw type3-$ -type1: - defw drop ; endif -type3: - defw semis -; -; - defb 89h ; -TRAILING - defc '-TRAILING' - defw type-7 -dtrai: - defw docol - defw dup - defw zero - defw xdo ; do -dtra1: - defw tdup ;/ - defw plus - defw onemin ;/ - defw cat - defw bl - defw subb - defw zbran ; if - defw dtra2-$ - defw leave - defw bran ; else - defw dtra3-$ -dtra2: - defw onemin ;/ -dtra3: - defw xloop ; loop - defw dtra1-$ - defw semis -; -; - defb 84h ; (.") - defc '(.")' - defw dtrai-0ch -pdotq: - defw docol - defw rr - defw count - defw dup - defw onep - defw fromr - defw plus - defw tor - defw type - defw semis -; -; - defb 0c2h ; ." - defc '."' - defw pdotq-7 -dotq: - defw docol - defw lit - defw 22h - defw state - defw at - defw zbran ; if - defw dotq1-$ - defw comp - defw pdotq - defw word - defw here - defw cat - defw onep - defw allot - defw bran ; else - defw dotq2-$ -dotq1: - defw word - defw here - defw count - defw type ; endif -dotq2: - defw semis -; -; - defb 86h ; EXPECT - defc 'EXPECT' - defw dotq-5 -expec: - defw docol - defw over - defw plus - defw over - defw xdo ; do -expe1: - defw key - defw dup - defw lit - defw 0eh - defw porig - defw at - defw equal - defw zbran ; if - defw expe2-$ - defw drop - defw dup - defw ido - defw equal - defw dup - defw fromr - defw twomin ;/ - defw plus - defw tor - defw zbran ; if - defw expe6-$ - defw lit - defw bell - defw bran ; else - defw expe7-$ -expe6: - defw lit - defw bsout ; endif -expe7: - defw bran ; else - defw expe3-$ -expe2: - defw dup - defw lit - defw acr ;/ - defw equal - defw zbran ; if - defw expe4-$ - defw leave - defw drop - defw bl - defw zero - defw bran ; else - defw expe5-$ -expe4: - defw dup ; endif -expe5: - defw ido - defw cstor - defw zero - defw ido - defw onep - defw store ; endif -expe3: - defw emit - defw xloop ; loop - defw expe1-$ - defw drop - defw semis -; -; - defb 85h ; QUERY - defc 'QUERY' - defw expec-9 -query: - defw docol - defw tib - defw at - defw lit - defw 50h - defw expec - defw zero - defw inn - defw store - defw semis -; -; - defb 0c1h ; NULL - defb 80h - defw query-8 -null: - defw docol - defw blk - defw at - defw zbran ; if - defw null1-$ - defw one - defw blk - defw pstor - defw zero - defw inn - defw store - defw blk - defw at - defw bscr - defw onemin ;/ - defw andd - defw zequ - defw zbran ; if - defw null2-$ - defw qexec - defw fromr - defw drop ; endif -null2: - defw bran ; else - defw null3-$ -null1: - defw fromr - defw drop ; endif -null3: - defw semis -; - defb 84h ; FILL - defc 'FILL' - defw null-4 -fill: - defw $+2 - exx ;/ save ip - pop de ;/ e <-- byte - pop bc ; bc <-- quantity - pop hl ;/ hl <-- address -fill1: - ld a,b - or c ; qty == 0? - jr z,fill2 ; yes, nothing (more) to fill - ld (hl),e ;/ (hl) <-- byte - inc hl ; inc pointer - dec bc ; dec counter - jp fill1 ;/ -fill2: - exx ;/ restore ip - jnext -; -; - defb 85h ; ERASE - defc 'ERASE' - defw fill-7 -erasee: - defw docol - defw zero - defw fill - defw semis -; -; - defb 86h ; BLANKS - defc 'BLANKS' - defw erasee-8 -blank: - defw docol - defw bl - defw fill - defw semis -; -; - defb 84h ; HOLD - defc 'HOLD' - defw blank-9 -hold: - defw docol - defw lit - defw -1 - defw hld - defw pstor - defw hld - defw at - defw cstor - defw semis -; -; - defb 83h ; PAD - defc 'PAD' - defw hold-7 -pad: - defw docol - defw here - defw lit - defw 44h - defw plus - defw semis -; -; - defb 84h ; WORD - defc 'WORD' - defw pad-6 -word: - defw docol - defw blk - defw at - defw zbran ; if - defw word1-$ - defw blk - defw at - defw block - defw bran ; else - defw word2-$ -word1: - defw tib - defw at ; endif -word2: - defw inn - defw at - defw plus - defw swap - defw encl - defw here - defw lit - defw 22h - defw blank - defw inn - defw pstor - defw over - defw subb - defw tor - defw rr - defw here - defw cstor - defw plus - defw here - defw onep - defw fromr - defw cmove - defw semis -; -; - defb 88h ; (NUMBER) - defc '(NUMBER)' - defw word-7 -pnumb: - defw docol -pnum1: - defw onep ; begin - defw dup - defw tor - defw cat - defw base - defw at - defw digit - defw zbran ; while - defw pnum2-$ - defw swap - defw base - defw at - defw ustar - defw drop - defw rot - defw base - defw at - defw ustar - defw dplus - defw dpl - defw at - defw onep - defw zbran ; if - defw pnum3-$ - defw one - defw dpl - defw pstor ; endif -pnum3: - defw fromr - defw bran ; repeat - defw pnum1-$ -pnum2: - defw fromr - defw semis -; -; - defb 86h ; NUMBER - defc 'NUMBER' - defw pnumb-0bh -numb: - defw docol - defw zero - defw zero - defw rot - defw dup - defw onep - defw cat - defw lit - defw 2dh - defw equal - defw dup - defw tor - defw plus - defw lit - defw -1 -numb1: - defw dpl ; begin - defw store - defw pnumb - defw dup - defw cat - defw bl - defw subb - defw zbran ; while - defw numb2-$ - defw dup - defw cat - defw lit - defw 2eh - defw subb - defw zero - defw qerr - defw zero - defw bran ; repeat - defw numb1-$ -numb2: - defw drop - defw fromr - defw zbran ; if - defw numb3-$ - defw dminu ; endif -numb3: - defw semis -; -; - defb 85h ; -FIND (0-3) SUCCESS - defc '-FIND' ; (0-1) FAILURE - defw numb-9 -dfind: - defw docol - defw bl - defw word - defw here - defw cont - defw at - defw at - defw pfind - defw dup - defw zequ - defw zbran ; if - defw dfin1-$ - defw drop - defw here - defw lates - defw pfind ; endif -dfin1: - defw semis -; -; - defb 87h ; (ABORT) - defc '(ABORT)' - defw dfind-8 -pabor: - defw docol - defw abort - defw semis -; - defb 85h ; ERROR - defc 'ERROR' - defw pabor-0ah -error: - defw docol - defw warn - defw at - defw zless - defw zbran ; if - defw erro1-$ - defw pabor ; endif -erro1: - defw here - defw count - defw type - defw pdotq - defb 2 - db '? ' - defw mess - defw spsto -; CHANGE FROM fig MODEL -; defw inn,at,blk,at - defw blk,at - defw ddup - defw zbran,erro2-$ ; if - defw inn,at - defw swap ; endif -erro2: - defw quit -; -; - defb 83h ; ID. - defc 'ID.' - defw error-8 -iddot: - defw docol - defw pad - defw lit - defw 20h - defw blank ;/ - defw dup - defw pfa - defw lfa - defw over - defw subb - defw dup ;/ change frm MODEL - defw tor ;/ to suppress BIT 7 - defw pad - defw swap - defw cmove - defw pad - defw fromr ;/ for terminals - defw pad ;/ with an 8 bit - defw plus ;/ ASCII character set. - defw onemin ;/ - defw dup ;/ - defw at ;/ - defw lit ;/ - defw 7fh ;/ - defw andd ;/ - defw swap ;/ - defw store ;/ - defw count - defw lit - defw 1fh ; WIDTH - defw andd - defw type - defw space - defw semis -; - defb 86h ; CREATE - defc 'CREATE' - defw iddot-6 -creat: - defw docol - defw dfind - defw zbran ; if - defw crea1-$ - defw drop - defw nfa - defw iddot - defw lit - defw 4 - defw mess - defw space ; endif -crea1: - defw here - defw dup - defw cat - defw width - defw at - defw min - defw onep - defw allot - defw dup - defw lit - defw 0a0h - defw toggl - defw here - defw onemin - defw lit - defw 80h - defw toggl - defw lates - defw comma - defw curr - defw at - defw store - defw here - defw twop - defw comma - defw semis -; -; - defb 0c9h ; [COMPILE] - defc '[COMPILE]' - defw creat-9 -bcomp: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw cfa - defw comma - defw semis -; -; - defb 0c7h ; LITERAL - defc 'LITERAL' - defw bcomp-0ch -liter: - defw docol - defw state - defw at - defw zbran ; if - defw lite1-$ - defw comp - defw lit - defw comma ; endif -lite1: - defw semis -; -; - defb 0c8h ; DLITERAL - defc 'DLITERAL' - defw liter-0ah -dlite: - defw docol - defw state - defw at - defw zbran ; if - defw dlit1-$ - defw swap - defw liter - defw liter ; endif -dlit1: - defw semis -; -; - defb 86h ; ?STACK - defc '?STACK' - defw dlite-0bh -qstac: - defw docol - defw spat - defw szero - defw at - defw swap - defw uless - defw one - defw qerr - defw spat - defw here - defw lit - defw 80h - defw plus - defw uless - defw lit - defw 7 - defw qerr - defw semis -; -; - defb 89h ; INTERPRET - defc 'INTERPRET' - defw qstac-9 -inter: - defw docol -inte1: - defw dfind ; begin - defw zbran ; if - defw inte2-$ - defw state - defw at - defw less - defw zbran ; if - defw inte3-$ - defw cfa - defw comma - defw bran ; else - defw inte4-$ -inte3: - defw cfa - defw exec ; endif -inte4: - defw qstac - defw bran ; else - defw inte5-$ -inte2: - defw here - defw numb - defw dpl - defw at - defw onep - defw zbran ; if - defw inte6-$ - defw dlite - defw bran ; else - defw inte7-$ -inte6: - defw drop - defw liter ; endif -inte7: - defw qstac ; endif -inte5: - defw bran ; again - defw inte1-$ -; -; - defb 89h ; IMMEDIATE - defc 'IMMEDIATE' - defw inter-0ch -immed: - defw docol - defw lates - defw lit - defw 40h - defw toggl - defw semis -; -; - defb 8ah ; VOCABULARY - defc 'VOCABULARY' - defw immed-0ch -vocab: - defw docol - defw build - defw lit - defw 0a081h - defw comma - defw curr - defw at - defw cfa - defw comma - defw here - defw vocl - defw at - defw comma - defw vocl - defw store - defw does -dovoc: - defw twop - defw cont - defw store - defw semis -; -; - defb 0c5h ; FORTH - defc 'FORTH' - defw vocab-0dh -forth: - defw dodoe - defw dovoc - defw 0a081h - defw task-7 ; cold start value only -; changed aech time a def is appended -; to the FORTH vocabulary - defw 0 ; end of vocabulary list -; -; - defb 8bh ; DEFINITIONS - defc 'DEFINITIONS' - defw forth-8 -defin: - defw docol - defw cont - defw at - defw curr - defw store - defw semis -; -; - defb 0c1h ; ( - defc '(' - defw defin-0eh -paren: - defw docol - defw lit - defw 29h - defw word - defw semis -; -; - defb 84h ; QUIT - defc 'QUIT' - defw paren-4 -quit: - defw docol - defw zero - defw blk - defw store - defw lbrac -quit1: - defw rpsto ; begin - defw cr - defw query - defw inter - defw state - defw at - defw zequ - defw zbran ; if - defw quit2-$ - defw pdotq - defb 2 - db 'ok' ; endif -quit2: - defw bran ; again - defw quit1-$ -; -; - defb 85h ; ABORT - defc 'ABORT' - defw quit-7 -abort: - defw docol - defw spsto - defw dec - defw qstac - defw cr - defw dotcpu - defw pdotq - defb 0eh ; count of chrs to follow - db 'fig-FORTH ' - defb figrel+30h,adot,figrev+30h,usrver - defw forth - defw defin - defw quit -; -; -wrm: ld bc,wrm1 - jnext -wrm1: defw warm -; -; - defb 84h ; WARM - defc 'WARM' - defw abort-8 -warm: - defw docol - defw mtbuf - defw abort -; -; -cld: - ld hl,(bdoss+1) ;/ - ld l,0 ;/ hl <-- fbase - ld (limit+2),hl ;/ set limit - ld de,bufsiz ;/ de <-- total disc buffer size - ;subw hl,de ;/ hl <-- addr. of 1st disc buffer - DEFB 0EDH,0DEh - ld (first+2),hl ;/ set FIRST - ld (use+2),hl ;/ set USE - ld (prev+2),hl ;/ set PREV - ld (buf1),hl ;/ - ld de,us ;/ de <-- user variable space - ;subw hl,de ;/ hl <-- initr0 - DEFB 0EDH,0DEh - ld (upinit),hl ;/ - ld (r0init),hl ;/ - ld (up),hl ;/ - ld (rpp),hl ;/ - ld de,rts ;/ de <-- rtn stack & term. buf space - ;subw hl,de ;/ hl <-- inits0 - DEFB 0EDH,0DEh - ld (s0init),hl ;/ - ld (tibini),hl ;/ - ld sp,hl ;/ - ld bc,cld1 - ld ix,next ; pointer to next - ld iy,hpush ; pointer to hpush - jnext -; -; -cld1: defw cold -; - defb 84h ; COLD - defc 'COLD' - defw warm-7 -cold: - defw docol - defw mtbuf - defw one,recadr ; AvdH - defw store - defw lit,buf1 - defw at ;/ - defw use,store - defw lit,buf1 - defw at ;/ - defw prev,store - defw drzer - defw zero ;/ - defw lit,eprint - defw cstor ;/ -; - defw lit - defw orig+12h - defw lit - defw up - defw at - defw lit - defw 6 - defw plus - defw lit - defw 10h - defw cmove - defw lit - defw orig+0ch - defw at - defw lit - defw forth+6 - defw store - defw fcb ;/A - defw lit,opnfil ;/A open mass storage - defw bdos ;/A - defw lit,0ffh ;/A - defw equal ;/A file present? - defw zbran,cld2-$ ;/A - defw zero ;/A - defw warn,store ;/A - defw cr,pdotq ;/A - defb 7 ;/A - db 'No file' ;/A -cld2: - defw abort -; -; - defb 84h ; S->D - defc 'S->D' - defw cold-7 -stod: defw $+2 - pop hl ;/ - ;exts hl ;/ de <-- h(7) - DEFB 0EDH,6Ch - ex de,hl ;/ - jp dpush ; ( n1 -- d1L d1H) -; -; - defb 82h ; +- - defc '+-' - defw STOD-7 -pm: - defw docol - defw zless - defw zbran ; if - defw pm1-$ - defw minus ; endif -pm1: - defw semis -; -; - defb 83h ; D+- - defc 'D+-' - defw pm-5 -dpm: - defw docol - defw zless - defw zbran ; if - defw dpm1-$ - defw dminu ; endif -dpm1: - defw semis -; -; - defb 83h ; ABS - defc 'ABS' - defw dpm-6 -abs: - defw docol - defw dup - defw pm - defw semis -; -; - defb 84h ; DABS - defc 'DABS' - defw abs-6 -dabs: - defw docol - defw dup - defw dpm - defw semis -; -; - defb 83h ; MIN - defc 'MIN' - defw dabs-7 -min: - defw docol - defw tdup - defw great - defw zbran ; if - defw min1-$ - defw swap ; endif -min1: - defw drop - defw semis -; -; - defb 83h ; MAX - defc 'MAX' - defw min-6 -max: defw docol - defw tdup - defw less - defw zbran ; if - defw max1-$ - defw swap ; endif -max1: - defw drop - defw semis -; -; - defb 82h ; M* ( n1 n2 --- d) - defc 'M*' - defw max-6 -mstar: - defw $+2 ;/ - pop de ; de <-- multiplicator - pop hl ; hl <-- multiplicant - ;multw hl,de ;/ dehl <-- hl * de - DEFB 0EDH,0D2h - ex de,hl ;/ - jp dpush ;/ ( n1 n2 --- d1l d1h) -; -; - defb 82h ;/ M/ ( d n1 --- nrem nquot) - defc 'M/' - defw mstar-5 -mslas: - defw $+2 ; ( d n1 --- n2 n3) - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,mslas1 ; positive - ;neg hl ; make positive - DEFB 0EDH,4Ch -mslas1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; dividend.hw - pop de ; dividend.lw - bit 7,h ; negative? - jr z,mslas2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - ;subw hl,de ; neg dividend.lw - DEFB 0EDH,0DEh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -mslas2: - ;cpw hl,bc ; dividend.hw >= divisor - DEFB 0EDH,0C7h - jr c,mslas3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max. - jr mslas5 -; -mslas3: - ex de,hl ; dehl <-- dividend.hw,lw - ;divuw dehl,bc ; de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative - jr z,mslas4 ; no - ;neg hl ;/ yes, negate remainder - DEFB 0EDH,4Ch -mslas4: - ex de,hl ; hl <-- quotient - or a - jr z,mslas5 ; neither operand negative - cp 81h ; both operands negative? - jr z,mslas5 ; yes, quotient stays positive - ;neg hl ;/ no, negate quotient - DEFB 0EDH,4Ch -mslas5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 81h ; * ( n1 n2 --- nproduct) - defc '*' - defw mslas-5 -star: - defw $+2 - pop de - pop hl - ;multw hl,de ;/ dehl <-- product - DEFB 0EDH,0D2h - jhpush -; -; - defb 84h ; /MOD ( n1 n2 --- nrem nquot) - defc '/MOD' - defw star-4 -slmod: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ div by 0? - jr nz,slmod1 ;/ no, continue - ld de,0ffffh - ld h,d - ld l,e ;/ set remainder & quotient to max. - jr slmod3 -slmod1: - ;cpw hl,8000h ;/ special case -32768 -1 / - DEFB 0FDH - DEFB 0EDH,0F7h - DEFW 8000H - jr nz,slmod2 ;/ continue - ld a,b - cp 0ffh - jr nz,slmod2 - cp c ;/ lo byte also 0ffh? - jr nz,slmod2 ;/ no, go & divide - ld de,0 ;/ remainder - jr slmod3 ;/ exit with dividend unchanged -slmod2: - ;exts hl ;/ de <-- dividend.hw - DEFB 0EDH,6Ch - ;divw dehl,bc ;/ de <-- remainder, hl <-- quotient - DEFB 0EDH,0CAh -slmod3: - push de - push hl - exx ;/ restore ip - jnext -; -; - defb 81h ; / - defc '/' - defw slmod-7 -slash: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ division by 0? - jr nz,slash1 ;/ no, continue - ld hl,0ffffh ;/ set quotient to max. - jr slash3 -slash1: - ;cpw hl,8000h ;/ special case -32768 -1 / - DEFB 0FDH - DEFB 0EDH,0F7h - DEFW 8000H - jr nz,slash2 ;/ dividend not -32768 - ld a,b - cp 0ffh - jr nz,slash2 ;/ divisor not -1 - cp c - jr z,slash3 ;/ return with dividend unchanged -slash2: - ;exts hl ;/ de <-- dividend.hw - DEFB 0EDH,6Ch - ;divw dehl,bc ;/ hl <-- quotient - DEFB 0EDH,0CAh -slash3: - push hl ;/ quotient - exx ;/ restore ip - jnext -; -; - defb 83h ;/ MOD - defc 'MOD' - defw slash-4 -modd: - defw $+2 - exx ; save ip - pop bc ; divisor - pop hl ; dividend - ld a,b - or c ; division by 0? - jr nz,modd1 ; no, continue - ld de,0ffffh ; set remainder to max - jr modd3 -modd1: - ;cpw hl,8000h ;/ special case -32768 -1 / - DEFB 0FDH - DEFB 0EDH,0F7h - DEFW 8000H - jr nz,modd2 ; dividend not -32768 - ld a,b - cp 0ffh - jr nz,modd2 ; divisor not -1 - cp c - jr nz,modd2 ; go & divide - ld de,0 ; remainder - jr modd3 -modd2: - ;exts hl ; de <-- dividend.hw - DEFB 0EDH,6Ch - ;divw dehl,bc ; de <-- remainder - DEFB 0EDH,0CAh -modd3: - push de ; remainder - exx ; restore ip - jnext -; -; - defb 85h ;/ */MOD - defc '*/MOD' - defw modd-6 -ssmod: - defw $+2 - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssmod1 ; positive - ;neg hl ; make positive - DEFB 0EDH,4Ch -ssmod1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - ;multw hl,de ; dehl <-- product (= dividend) - DEFB 0EDH,0D2h - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssmod2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - ;subw hl,de ; neg dividend.lw - DEFB 0EDH,0DEh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssmod2: - ;cpw hl,bc ; dividend.hw >= divisor? - DEFB 0EDH,0C7h - jr c,ssmod3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max - jr ssmod5 -; -ssmod3: - ex de,hl ; dehl <-- dividend.hw,lw - ;divuw dehl,bc ; de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative? - jr z,ssmod4 ; no - ;neg hl ; yes, negate remainder - DEFB 0EDH,4Ch -ssmod4: - ex de,hl ; hl <-- quotient - or a - jr z,ssmod5 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssmod5 ; yes, quotient stays positive - ;neg hl ; no, negate quotient - DEFB 0EDH,4Ch -ssmod5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 82h ; */ - defc '*/' - defw ssmod-8 -ssla: - defw $+2 ;/ - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssla1 ; positive - ;neg hl ; make positive - DEFB 0EDH,4Ch -ssla1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - ;multw hl,de ; dehl <-- product (= dividend) - DEFB 0EDH,0D2h - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssla2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - ;subw hl,de ; neg dividend.lw - DEFB 0EDH,0DEh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssla2: - ;cpw hl,bc ; dividend.hw >= divisor? - DEFB 0EDH,0C7h - jr c,ssla3 ; no overflow, continue - ld hl,0ffffh ; set quotient to max - jr ssla4 -; -ssla3: - ex de,hl ; dehl <-- dividend.hw,lw - ;divuw dehl,bc ; de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh - or a - jr z,ssla4 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssla4 ; yes, quotient stays positive - ;neg hl ; no, negate quotient - DEFB 0EDH,4Ch -ssla4: - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 85h ; M/MOD - defc 'M/MOD' - defw ssla-5 -msmod: - defw docol - defw tor - defw zero - defw rr - defw uslas - defw fromr - defw swap - defw tor - defw uslas - defw fromr - defw semis -; -; -; Block moved down 2 pages -; - defb 86h ; (LINE) - defc '(LINE)' - defw msmod-8 -pline: - defw docol - defw tor - defw lit - defw 40h - defw bbuf - defw ssmod - defw fromr - defw bscr - defw star - defw plus - defw block - defw plus - defw lit - defw 40h - defw semis -; -; - defb 85h ; .LINE - defc '.LINE' - defw pline-9 -dline: - defw docol - defw pline - defw dtrai - defw type - defw semis -; -; - defb 87h ; MESSAGE - defc 'MESSAGE' - defw dline-8 -mess: - defw docol - defw warn - defw at - defw zbran ; if - defw mess1-$ - defw ddup - defw zbran ; if - defw mess2-$ - defw lit - defw 4 ; 1st message screen - defw ofset - defw at - defw bscr - defw slash - defw subb - defw dline - defw space ; endif -mess2: - defw bran ; else - defw mess3-$ -mess1: - defw pdotq - defb 6 - db 'MSG # ' - defw dot ; endif -mess3: defw semis -; -; - defb 82h ; P@ - defc 'P@' - defw mess-0ah -ptat: - defw $+2 - exx ;d save registers - pop bc ;d bc <-- port# - in l,(c) ;d l <-- data byte - ld h,0 - push hl - exx ;d restore registers - jnext -; -; - defb 82h ; P! - defc 'P!' - defw ptat-5 -ptsto: - defw $+2 - exx ;d save registers - pop bc ;d c <-- port# - pop hl ;d L <-- date byte - out (c),l - exx ;d restore registers - jnext -; -; - page -include DISCIO.Z80 - page -include CONPRTIO.Z80 - page -; - defb 0c1h ; ' (tick) - defb 0a7h - defw arrow-6 -tick: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw liter - defw semis -; -; - defb 86h ; FORGET - defc 'FORGET' - defw tick-4 -forg: - defw docol - defw curr - defw at - defw cont - defw at - defw subb - defw lit - defw 18h - defw qerr - defw tick - defw dup - defw fence - defw at - defw uless ;/ FORGET >8000h nw o.k. - defw lit - defw 15h - defw qerr - defw dup - defw nfa - defw dp - defw store - defw lfa - defw at - defw cont - defw at - defw store - defw semis -; -; - defb 84h ; BACK - defc 'BACK' - defw forg-9 -back: - defw docol - defw here - defw subb - defw comma - defw semis -; -; - defb 0c5h ; BEGIN - defc 'BEGIN' - defw back-7 -begin: - defw docol - defw qcomp - defw here - defw one - defw semis -; -; - defb 0c5h ; ENDIF - defc 'ENDIF' - defw begin-8 -endiff: - defw docol - defw qcomp - defw two - defw qpair - defw here - defw over - defw subb - defw swap - defw store - defw semis -; -; - defb 0c4h ; THEN - defc 'THEN' - defw endiff-8 -then: defw docol - defw endiff - defw semis -; -; - defb 0c2h ; DO - defc 'DO' - defw then-7 -do: - defw docol - defw comp - defw xdo - defw here - defw three - defw semis -; -; - defb 0c4h ; LOOP - defc 'LOOP' - defw do-5 -loop: - defw docol - defw three - defw qpair - defw comp - defw xloop - defw back - defw semis -; -; - defb 0c5h ; +LOOP - defc '+LOOP' - defw loop-7 -ploop: - defw docol - defw three - defw qpair - defw comp - defw xploo - defw back - defw semis -; -; - defb 0c5h ; UNTIL - defc 'UNTIL' - defw ploop-8 -until: - defw docol - defw one - defw qpair - defw comp - defw zbran - defw back - defw semis -; -; - defb 0c3h ; END - defc 'END' - defw until-8 -endd: - defw docol - defw until - defw semis -; -; - defb 0c5h ; AGAIN - defc 'AGAIN' - defw endd-6 -again: - defw docol - defw one - defw qpair - defw comp - defw bran - defw back - defw semis -; -; - defb 0c6h ; REPEAT - defc 'REPEAT' - defw again-8 -repea: - defw docol - defw tor - defw tor - defw again - defw fromr - defw fromr - defw twomin ;/ - defw endiff - defw semis -; -; - defb 0c2h ; IF - defc 'IF' - defw repea-9 -iff: - defw docol - defw comp - defw zbran - defw here - defw zero - defw comma - defw two - defw semis -; -; - defb 0c4h ; ELSE - defc 'ELSE' - defw iff-5 -elsee: - defw docol - defw two - defw qpair - defw comp - defw bran - defw here - defw zero - defw comma - defw swap - defw two - defw endiff - defw two - defw semis -; -; - defb 0c5h ; WHILE - defc 'WHILE' - defw elsee-7 -while: - defw docol - defw iff - defw twop - defw semis -; -; - defb 86h ; SPACES - defc 'SPACES' - defw while-8 -spacs: - defw docol - defw zero - defw max - defw ddup - defw zbran ; if - defw spax1-$ - defw zero - defw xdo ; do -spax2: - defw space - defw xloop ; loop endif - defw spax2-$ -spax1: - defw semis -; -; - defb 82h ; <# - defc '<#' - defw spacs-9 -bdigs: - defw docol - defw pad - defw hld - defw store - defw semis -; -; - defb 82h ; #> - defc '#>' - defw bdigs-5 -edigs: - defw docol - defw drop - defw drop - defw hld - defw at - defw pad - defw over - defw subb - defw semis -; -; - defb 84h ; SIGN - defc 'SIGN' - defw edigs-5 -sign: - defw docol - defw rot - defw zless - defw zbran ; if - defw sign1-$ - defw lit - defw 2dh - defw hold ; endif -sign1: - defw semis -; -; - defb 81h ; # - defc '#' - defw sign-7 -dig: - defw docol - defw base - defw at - defw msmod - defw rot - defw lit - defw 9 - defw over - defw less - defw zbran ; if - defw dig1-$ - defw lit - defw 7 - defw plus ; endif -dig1: defw lit - defw 30h - defw plus - defw hold - defw semis -; -; - defb 82h ; #S - defc '#S' - defw dig-4 -digs: - defw docol -digs1: - defw dig ; begin - defw tdup ;/ - defw orr - defw zequ - defw zbran ; until - defw digs1-$ - defw semis -; -; - defb 83h ; D.R - defc 'D.R' - defw digs-5 -ddotr: - defw docol - defw tor - defw swap - defw over - defw dabs - defw bdigs - defw digs - defw sign - defw edigs - defw fromr - defw over - defw subb - defw spacs - defw type - defw semis -; -; - defb 82h ; .R - defc '.R' - defw ddotr-6 -dotr: - defw docol - defw tor - defw stod - defw fromr - defw ddotr - defw semis -; -; - defb 82h ; D. - defc 'D.' - defw dotr-5 -ddot: - defw docol - defw zero - defw ddotr - defw space - defw semis -; -; - defb 81h ; . - defc '.' - defw ddot-5 -dot: - defw docol - defw stod - defw ddot - defw semis -; -; - defb 81h ; ? - defc '?' - defw dot-4 -ques: - defw docol - defw at - defw dot - defw semis -; -; - defb 82h ; U. - defc 'U.' - defw ques-4 -udot: defw docol - defw zero - defw ddot - defw semis -; - - defb 85h ; VLIST - defc 'VLIST' - defw udot-5 -vlist: - defw docol - defw lit - defw 80h - defw outt - defw store - defw cont - defw at - defw at -vlis1: - defw outt ; begin - defw at - defw csll - defw great - defw zbran ; if - defw vlis2-$ - defw cr - defw zero - defw outt - defw store ; endif -vlis2: - defw dup - defw iddot - defw space - defw space - defw pfa - defw lfa - defw at - defw dup - defw zequ - defw qterm - defw orr - defw zbran ; until - defw vlis1-$ - defw drop - defw semis -; -; - defb 83h ; BYE - defc 'BYE' - defw vlist-8 -bye: - defw docol ;/A - defw flush ;/A - defw fcb,lit ;/E - defw 10h,bdos ;/E close file - defw drop ;/E discard directory code - defw zero,zero ;/A - defw bdos ;/A return to CP/M - defw semis ;/A won't get this far, just for pretty -; -; - defb 84h ; LIST - defc 'LIST' - defw bye-6 -list: - defw docol,dec - defw cr,dup - defw scr,store - defw pdotq - defb 6 - db 'SCR # ' - defw dot - defw lit,10h - defw zero,xdo -list1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw ido,scr - defw at,dline - defw qterm - defw zbran,list2-$ ; if - defw leave -list2: - defw xloop,list1-$ ; endif - defw cr - defw semis -; -; - defb 85H ;INDEX - defc 'INDEX' - defw list-7 -index: - defw docol - defw lit,ff - defw emit - defw cr - defw onep,swap - defw xdo -inde1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw zero,ido - defw dline,qterm - defw zbran,inde2-$ ; if - defw leave ; endif -inde2: - defw xloop,inde1-$ - defw semis -; -; - defb 85h ; TRIAD - defc 'TRIAD' - defw index-8 -triad: - defw docol - defw lit,ff - defw emit - defw three ;/ was lit,3 - defw slash - defw three ;/ was lit,3 - defw star - defw three ;/ was lit,3 - defw over,plus - defw swap,xdo -tria1: - defw cr,ido - defw list - defw qterm - defw zbran,tria2-$ ; if - defw leave -tria2: - defw xloop,tria1-$ ; endif - defw cr - defw lit,15 - defw mess,cr - defw semis -; -; - defb 84h ; .CPU - defc '.CPU' - defw triad-8 -dotcpu: - defw docol - defw base,at - defw lit,36 - defw base,store - defw lit,22h - defw porig,tat - defw ddot - defw base,store - defw semis -; -; - defb 86h ; setclk - defc 'setclk' - defw dotcpu-7 -setclk: - defw $+2 - exx ; save ip - ld c,iopreg - ;ldctl hl,(c) ; l <-- current i/o page - DEFB 0EDh,66h - ld a,l - ex af,af' ; save i/o page - ld l,0feh - ;ldctl (c),hl ; select i/o page 0feh - DEFB 0EDh,6Eh - xor a - out (cntrl0),a ; disable c/t 0 - out (cntrl1),a ; disable c/t 1 - out (config1),a - ld hl,0ffffh - ld a,10h - out (config0),a ; cascade c/t 0 - c/t 1 - ld c,tcon0 - ;outw (c),hl ; load c/t 0 time constant - DEFB 0EDH,0BFh - ld c,tcon1 - ;outw (c),hl ; load c/t 1 time constatnt - DEFB 0EDH,0BFh - ld a,80h - out (config1),a ; continous mode - ld a,0e0h - out (cntrl1),a ; start 32bit counter - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ;ldctl (c),hl ; restore i/o page - DEFB 0EDh,6Eh - exx ; restore ip - jnext -; -; - defb 86h ; getclk - defc 'getclk' - defw setclk-9 -getclk: - defw $+2 - exx ; save ip - ld c,iopreg - ;ldctl hl,(c) ; l <-- current i/o page - DEFB 0EDh,66h - ld a,l - ex af,af' ; save current i/o page - ld l,0feh - ;ldctl (c),hl ; select i/o page 0feh - DEFB 0EDh,6Eh - ld a,80h - out (cntrl1),a ; halt 32bit counter - ld c,count1 - ;inw hl,(c) - DEFB 0EDH,0B7h - ld d,h - ld e,l ; de <-- count1 - ld c,count0 - ;inw hl,(c) ; hl <-- count0 - DEFB 0EDH,0B7h - ld c,0 - ld a,c ; a <-- 0 - sub l ; 0 - l - ld l,a ; l <-- neg(l) - ld a,c ; a <-- 0 - sbc a,h - ld h,a ; h <-- neg(h) - ld a,c ; a <-- 0 - sbc a,e - ld e,a ; e <-- neg(e) - ld a,c ; a <-- 0 - sbc a,d - ld d,a ; d <-- neg(d), dehl <-- neg(dehl) - ;divuw dehl,25000 ; scale to 1/100 secs - DEFB 0FDH - DEFB 0EDH,0FBh - DEFW 25000 - push hl ; result - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ;ldctl (c),hl ; restore i/o page - DEFB 0EDh,6Eh - exx ; restore ip - jnext -; -; - defb 84h ; TASK - defc 'TASK' - defw getclk-9 -; defw dotcpu-7 -task: - defw docol - defw semis -; -; -initdp: - defw 0 -; - end orig -defw getclk-9 -; defw dotcpu-7 -task: - defw docol \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.OCM b/software/CPM/CPM08_Z80FORTH/280FORTH.OCM deleted file mode 100644 index 811e0e80032a0be80a8fac0c8eb4e79980da0323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6912 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 - subttl Adaptive version -; -; -; Modified from Z80 fig-FORTH 1.1h by EHR 880830 -; Modified frm FIG document keyed by Dennis L. Wilson 800907 -; Converted frm "8080 FIG-FORTH VERSION A0 15SEP79" -; -; fig-FORTH release 1.1 for the 8080 processor. -; -; ALL PUBLICATIONS OF THE FORTH INTEREST GROUP -; ARE PUBLIC DOMAIN. THEY MAY BE FURTHER -; DISTRIBUTED BY THE INCLUSION OF THIS CREDIT NOTICE: -; -; This publication has been made available by the -; Forth Interest Group -; P.O.Box 1105 -; San Carlos, CA 94070 -; U.S.A. -; -; Implementation on 8080 by: -; John Cassady -; 339 15th Street -; Oakland, CA 94612 -; U.S.A -; on 790528 -; Modified by: -; Kim Harris -; Acknowledgements: -; George Flammer -; Robt. D. Villwock -; ---------------------------------------------------------------------- -; Z80 Version for Cromemco CDOS & Digital Research CP/M by: -; Dennis Lee Wilson c/o -; Aristotelian Logicians -; 2631 East Pinchot Avenue -; Phoenix, AZ 85016 -; U.S.A. -; ---------------------------------------------------------------------- -; The 2 byte Z80 code for Jump Relative (JR) has been substituted for -; the 3 byte Jump (JP) wherever practical. The port I/O words P@ & P! -; have been made ROMable by use of Z80 instructions. -; ---------------------------------------------------------------------- -; Further modifications (marked ;/) by: -; Edmund Ramm -; P.O.Box 38 -; 2358 Kaltenkirchen -; Fed. Rep. of Germany 840418 -; -; 850419 changed * (star) -; 850507 added 0<>, 0>, TUCK, NIP, -ROT, CSWAP, PICK -; 850511 added -CMOVE -; -; ----------------------------------------------------------------------------- -; Disc I/O has been modified a la Albert van der Horst (HCCH) to employ -; CP/M 2.x's random access feature. -; ----------------------------------------------------------------------------- -; ----------------------------------------------------------------------------- -; -; Z280 specifics -; -maclib z280.mac -; -iopreg equ 08h ; i/o page register -; -config0 equ 0e0h ; c/t 0 configuration register -cntrl0 equ 0e1h ; c/t 0 command/status register -tcon0 equ 0e2h ; c/t 0 time constatnt register -count0 equ 0e3h ; c/t 0 count-time register -config1 equ 0e8h ; c/t 1 configuration register -cntrl1 equ 0e9h ; c/t 1 command/status register -tcon1 equ 0eah ; c/t 1 time constant register -count1 equ 0ebh ; c/t 1 count-time register -; -; ----------------------------------------------------------------------------- -; -; Release & Version numbers -; -figrel equ 1 ;FIG RELEASE # -figrev equ 1 ;FIG REVISION # -usrver equ 61h ;USER VERSION # a by EHR -; -;Console & printer drivers are in external source named -;CONPRTIO.FTH & disc drivers in DISCIO.FTH. It has 4 screen -;buffers & end of memory is set to FBASE from locn. 0007H. - page -; ASCII characters used -; -abl equ 20h ;BLANK -acr equ 0dh ;CR -adot equ 2eh ;. -bell equ 07h ;^G -bsin equ 08h ;backspace chr = ^H -bsout equ 08h -dle equ 10h ;^P -lf equ 0ah ;^J -ff equ 0ch ;^L -; -; Memory allocation -; -bdoss equ 0005h ;/ system entry -nscr equ 4 ; # of 1024 byte screens -kbbuf equ 128 ; bytes/disc buffer -us equ 40h ; user variables space -rts equ 400h ; Return Stack & term buff space -co equ kbbuf+4 ; Disc buff + 2 header + 2 tail -nbuf equ nscr*400h/kbbuf ; # of buffers -bufsiz equ co*nbuf ;/ total disc buffer size - page - aseg -; - org 0100h -; -orig: - nop - jp cld ; vector to cold start - nop - jp wrm ; vector to warm start - defb figrel ; fig release # - defb figrev ; fig revision # - defb usrver ; user version # - defb 0eh ; implementation attributes -; -; -; -; 0eh = 0000:1110 -; --------- -; B +ORIGIN ...W:IEBA -; -; W: 0=above sufficient -; 1=other differences exist -; I: Interpreter is 0=pre- -; 1=post incrementing -; E: Addr must be even: 0 yes -; 1 no -; B: High byte @ 0=low addr. -; 1=high addr. -; A: CPU Addr. 0=BYTE -; 1=WORD -; -; -; - defw task-7 ; topmost word in FORTH vocabulary - defw bsin ; backspace chr -upinit: defw 0 ;/ init (up) -; -; * Following used by COLD; must be in same order as user variables * -; -s0init: defw 0 ;/ init (s0) -r0init: defw 0 ;/ init (r0) -tibini: defw 0 ;/ init (TIB) - defw 1fh ; init (WIDTH) - defw 0 ; init (WARNING) - defw initdp ; init (FENCE) - defw initdp ; init (dp) - defw forth+8 ; init (VOC-LINK) -; -; * END DATA USED BY COLD * -; - defw 0018h,0f600h ; Z280 CPU name (hw,lw) - ; (32 bit base 36 integer) - page -; REGISTERS -; -; FORTH Z80 FORTH PRESERVATION RULES -; ----- --- ----------------------- -; IP BC should be preserved -; accross FORTH words. -; W DE sometimes output from -; NEXT, may be altered -; b4 JP'ing to NEXT, -; input only when -; "DPUSH" called. -; SP SP should be used only as -; Data Stack accross -; FORTH words, may be -; used within FORTH -; words if restored -; b4 "NEXT" -; HL Never output frm NEXT -; input only when -; "HPUSH" called -; -; -up: defw 0 ;/ user area ptr -rpp: defw 0 ;/ return stack ptr -buf1: defw 0 ;/ address of 1st disc buffer -; -; -; COMMENT CONVENTIONS: -; -; == means "is equal to" -; <-- means assignment -; #NAME = value of name -; NAME = contents @ name -; (NAME) = contents of cell addressed by name -; cfa = code field address -; lfa = link field address -; nfa = name field address -; pfa = parameter field address -; s1 = 1st word of parameter stack -; s2 = 2nd -"- of -"- -"- -; r1 = 1st -"- of return stack -; r2 = 2nd -"- of -"- -"- -; ( above Stack posn. valid b4 & after execution of any word, not during) -; -; lsb = least significant bit -; msb = most significant bit -; lb = low byte -; hb = high byte -; lw = low word -; hw = high word -; (May be used as suffix to above names) - page -; FORTH ADDRESS INTERPRETER -; POST INCREMENTING VERSION -; -; -; -dpush: - push de -hpush: - push hl ; iy points here -next: - ld h,b ;/ w <-- (ip) ix points here - ld l,c ;/ -; ldw hl,(hl) ;/ (hl) --> cfa - defb 0edh,26h - inc bc - inc bc ;/ ip += 2 -next1: -; ldw de,(hl) ;/ pc <-- (w) - defb 0edh,16h - ex de,hl - inc de - jp (hl) ; note: de <-- cfa + 1 -; -; -jnext macro - jp (ix) - endm -; -jhpush macro - jp (iy) - endm -; - page -; FORTH DICTIONARY -; DICTIONARY FORMAT: -; -; BYTE -; ADDRESS NAME CONTENTS -; ------- ---- -------- -; (MSB=1 -; (P=PRECEDENCE BIT -; (S=SMUDGE BIT -; NFA NAME FIELD 1PS MSB=0, NAME'S 1st CHAR -; 0<2CHAR> -; ... -; 1 MSB=1, NAME'S LAST CHAR -; LFA LINK FIELD =PREVIOUS WORD'S NFA -; -;LABEL: CFA CODE FIELD =ADDR CPU CODE -; -; PFA PARAMETER <1PARAM> 1st PARAMETER BYTE -; FIELD <2PARAM> -; ... -; -; -; -dp0: - defb 83h ; LIT - defc 'LIT' - defw 0 ; lfa == 0 marks end of dictionary -lit: - defw $+2 ; s1 <-- (ip) - ld h,b - ld l,c - defb 0edh,26h ;/ ldw hl,(hl) hl <-- (ip) = literal - inc bc ;/ - inc bc ;/ ip += 2 - jhpush ; s1 <-- hl -; -; - defb 87h ; EXECUTE - defc 'EXECUTE' - defw lit-6 -exec: - defw $+2 - pop hl - jp next1 -; -; - defb 86h ; BRANCH - defc 'BRANCH' - defw exec-0ah -bran: - defw $+2 ; ip += (ip) -bran1: - ld h,b - ld l,c ; hl <-- ip - defb 0ddh,0edh,0c6h ;/ addw hl,(hl) hl <-- ip + branch offset - ld c,l - ld b,h ; ip += branch offset - jnext -; -; - defb 87h ; 0BRANCH - defc '0BRANCH' - defw bran-9 -zbran: - defw $+2 - pop hl - ld a,l - or h - jr z,bran1 ; branch if if s1 == 0 - inc bc ; else skip branch offset - inc bc - jnext -; -; - defb 86h ; (LOOP) - defc '(LOOP)' - defw zbran-0ah -xloop: - defw $+2 - ld hl,(rpp) ; (hl) --> index = r1 -; incw (hl) ;/ index += 1 - defb 0ddh,03h -; ldw de,(hl) ;/ de <-- new index - defb 0edh,16h - inc hl ;/ - inc hl ;/ hl --> limit(lb) - ld a,e - sub (hl) - ld a,d - inc hl ; hl --> limit(hb) - sbc a,(hl) ; index < limit? - jp m,bran1 ; yes, loop again - inc hl ; no, done - ld (rpp),hl ; discard r1 & r2 - inc bc - inc bc ; skip branch offset - jnext -; -; - defb 87h ; (+LOOP) - defc '(+LOOP)' - defw xloop-9 -xploo: - defw $+2 - pop de ; de <-- increment - ld hl,(rpp) ; hl --> index - ld a,(hl) ; index += increment - add a,e - ld (hl),a - ld e,a - inc hl - ld a,(hl) - adc a,d - ld (hl),a - inc hl ; (hl) --> limit - inc d - dec d - ld d,a ; de <-- new index - jp m,xloo2 ; if incr > 0 - ld a,e - sub (hl) ; then a <-- index - limit - ld a,d - inc hl - sbc a,(hl) - jp xloo3 - -xloo2: - ld a,(hl) ; else a <-- limit - index - sub e - inc hl - ld a,(hl) - sbc a,d -; ; if a < 0 -xloo3: - jp m,bran1 ; then loop again - inc hl ; else done - ld (rpp),hl ; discard r1 & r2 - inc bc ; skip branch offset - inc bc - jnext -; -; - defb 84h ; (DO) - defc '(DO)' - defw xploo-0ah -xdo: - defw $+2 - pop de ; de <-- initial index - ld hl,(rpp) ; hl <-- rp - dec hl - dec hl -; pop (hl) ;/ r2 <-- limit - defb 0ddh,0c1h - dec hl - dec hl -; ldw (hl),de ;/ r1 <-- initial index - defb 0edh,1eh - ld (rpp),hl ; rp -= 4 - jnext -; -; - defb 81h ; I - defc 'I' - defw xdo-7 -ido: - defw $+2 - ld hl,(rpp) -; push (hl) ;/ s1 <-- r1, r1 unchanged - defb 0ddh,0c5h - jnext -; -; - defb 85h ; DIGIT - defc 'DIGIT' - defw ido-4 -digit: - defw $+2 - pop hl ; l <-- s1.lb = base value - pop de ; e <-- s2.lb = chr to be converted - ld a,e ; a <-- chr - sub '0' ; >= 0? - jr c,digi2 ;/ < 0 is invalid - cp 0ah ; > 9? - jr c,digi1 ;/ no, test base value - sub 07h ; gap between '9' & 'A', nw 'A'=0ah - cp 0ah ; >= 'A'? - jr c,digi2 ;/ chrs btwn '9' & 'A' are invalid -digi1: - cp l ; < base value? - jr nc,digi2 ;/ no, invalid - ld e,a ; s2 <-- de = converted digit - ld hl,0001h ; s1 <-- true - jp dpush -; -digi2: - ld l,h ; hl <-- false - jhpush ; s1 <-- false -; -; - defb 86h ; (FIND) (2-1)FAILURE - defc '(FIND)' ; (2-3)SUCCESS - defw digit-8 -pfind: - defw $+2 - pop de ; de <-- nfa -pfin1: - pop hl ; hl <-- string addr - push hl ; save for next iteration - ld a,(de) - xor (hl) ; filter differences - and 3fh ; mask msb & precedence bit - jr nz,pfin4 ; lengths differ -pfin2: - inc hl ; hl --> next string chr - inc de ; de --> next name field chr - ld a,(de) - xor (hl) ; filter differences - add a,a ; shift msbit into carry - jr nz,pfin3 ; no match - jr nc,pfin2 ; match so far, loop agn - ld hl,0005h ; string matches - add hl,de ; (sp) <-- pfa - ex (sp),hl -pfin6: - dec de ; de --> nfa - ld a,(de) - or a ; msb=1? =length byte - jp p,pfin6 ; no, try next chr - ld e,a ; e <-- length byte - ld d,00h - ld hl,0001h ; hl <-- true - jp dpush ; name field found, return -; -; above name field not a match, try next one -; -pfin3: - jr c,pfin5 ; carry=end of name field -pfin4: - inc de ; find name field end - ld a,(de) - or a ; msb=1? - jp p,pfin4 ; no, loop -pfin5: - inc de ; de <-- lfa - ex de,hl -; ldw de,(hl) ;/ de <-- lfa - defb 0edh,16h - ld a,d - or e ; end of dictionary (lfa = 0)? - jr nz,pfin1 ; no, try previous definition - pop hl ; drop string address - ld hl,0 ; hl <-- false - jhpush ; no match found, return -; -; - defb 87h ; ENCLOSE - defc 'ENCLOSE' - defw pfind-9 -encl: - defw $+2 - pop de ; de <-- s1 = delimiter chr - pop hl ; hl <-- s2 = addr of text to scan - push hl ; s4 <-- addr - ld a,e - ld d,a ; d <-- delim chr - ld e,-1 ; init chr offset counter - dec hl ; hl <-- addr - 1 -encl1: - inc hl ; skip over leading delim chrs - inc e - cp (hl) ; delim chr? - jr z,encl1 ; yes, loop - ld d,0 - push de ; s3 <-- e = offset to 1st non delim - ld d,a ; d <-- delim chr - ld a,(hl) - and a ; 1st non-delim=null? - jr nz,encl2 ; no - ld d,0 ; yes - inc e - push de ; s2 <-- offset to byte following null - dec e - push de ; s1 <-- offset to null - jnext -; -encl2: - ld a,d ; A <-- delim chr - inc hl ; hl <-- next chr's address - inc e ; e <-- offset to next chr - cp (hl) ; delim chr? - jr z,encl4 ; yes - ld a,(hl) - and a ; null? - jr nz,encl2 ; no, continue scan -encl3: - ld d,0 - push de ; s2 <-- offset to null - push de ; s1 <-- offset to null - jnext -; -encl4: - ld d,0 - push de ; s2 <-- offset to byte following text - inc e - push de ; s1 <-- offset 2 bytes aft end of word - jnext -; -; - defb 84h ; EMIT - defc 'EMIT' - defw encl-0ah -emit: - defw docol - defw pemit - defw one,outt - defw pstor,semis -; -; - defb 83h ; KEY - defc 'KEY' - defw emit-7 -key: - defw $+2 - jp pkey -; -; - defb 89h ; ?TERMINAL - defc '?TERMINAL' - defw key-6 -qterm: - defw $+2 - ld hl,0 - jp pqter -; -; - defb 82h ; CR - defc 'CR' - defw qterm-0ch -cr: - defw $+2 - jp pcr -; -; - defb 85h ; CMOVE - defc 'CMOVE' - defw cr-5 -cmove: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- s1 = # of chrs - pop de ; de <-- s2 = dest addr - pop hl ;/ hl <-- s3 = source addr - ld a,b - or c ; bc=0? - jr z,cmove1 ; yes, nothing to move - ldir ;/ xfer string -cmove1: - exx ;/ restore ip - jnext -; -; - defb 86h ;/ -CMOVE ( from to count --- ) - defc '-CMOVE' - defw cmove-8 -bcmov: - defw $+2 - exx ; save ip - pop bc ; bc <-- count - pop de ; de <-- destination - pop hl ; hl <-- source - ld a,b - or c ; bc =0? - jr z,bcmov1 ; yes, nothing to move - add hl,bc - dec hl ; hl --> hi end of source block - ex de,hl - add hl,bc - dec hl - ex de,hl ; de --> hi end of dest. block - lddr ; (de) <-- (hl), --hl,bc until bc=0 -bcmov1: - exx ; restore ip - jnext -; -; - defb 82h ; U* 16*16 unsigned multiply - defc 'U*' ; with 32 bit result - defw bcmov-9 -ustar: - defw $+2 - pop de ; de <-- multiplier - pop hl ; hl <-- multiplicant -; multuw hl,de ;/ - defb 0edh,0d3h - ex de,hl ;/ de <-- product.lw, hl <-- product.hw - jp dpush ; s2,s1 <-- product.lw,hw -; -; - defb 82h ; U/ ( ud u1 -- urem uq ) - defc 'U/' - defw ustar-5 -uslas: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- divisor - pop hl ; hl <-- dividend.hw - pop de ; de <-- dividend.lw -; cpw hl,bc ;/ dividend.hw >= divisor? - defb 0edh,0c7h - jr c,usla1 ; no, go ahead - ld hl,0ffffh ; yes, overflow - ld d,h - ld e,l ;/ set rem & quot to max - jr usla2 -usla1: - ex de,hl ;/ de,hl <-- dividend.hw,lw -; divuw dehl,bc ;/ de <-- remainder, hl <-- quotient - defb 0edh,0cbh -usla2: - push de ;/ s2 <-- remainder - push hl ;/ s1 <-- quotient - exx ;/ restore ip - jnext -; -; - defb 83h ; AND - defc 'AND' - defw uslas-5 -andd: - defw $+2 ; s1 <-- s1 AND s2 - pop de - pop hl - ld a,e - and l - ld l,a - ld a,d - and h - ld h,a - jhpush -; -; - defb 82h ; OR - defc 'OR' - defw andd-6 -orr: - defw $+2 ; s1 <-- s1 OR s2 - pop de - pop hl - ld a,e - or l - ld l,a - ld a,d - or h - ld h,a - jhpush -; -; - defb 83h ; XOR - defc 'XOR' - defw orr-5 -xorr: - defw $+2 ; s1 <-- s1 XOR s2 - pop de - pop hl - ld a,e - xor l - ld l,a - ld a,d - xor h - ld h,a - jhpush -; -; - defb 83h ; SP@ - defc 'SP@' - defw xorr-6 -spat: - defw $+2 - ld hl,0 - add hl,sp ; hl <-- sp - jhpush ; s1 <-- sp -; -; - defb 83h ; SP! - defc 'SP!' - defw spat-6 -spsto: - defw $+2 ; sp <-- s0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,0006h - add hl,de ; hl --> s0 -; ldw hl,(hl) ;/ hl <-- s0 - defb 0edh,26h - ld sp,hl ; sp <-- s0 - jnext -; -; - defb 83h ; RP@ - defc 'RP@' - defw spsto-6 -rpat: - defw $+2 - ld hl,(rpp) - jhpush ; s1 <-- rp -; -; - defb 83h ; RP! - defc 'RP!' - defw rpat-6 -rpsto: - defw $+2 ; rp <-- r0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,0008h - add hl,de ; hl --> r0 -; ldw hl,(hl) ;/ hl <-- r0 - defb 0edh,26h - ld (rpp),hl ;/ rp <-- r0 - jnext -; -; - defb 82h ; ;S - defc ';S' - defw rpsto-6 -semis: - defw $+2 ; ip <-- r1 - ld hl,(rpp) -; ldw bc,(hl) ;/ bc <-- r1 - defb 0edh,06h - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 85h ; LEAVE - defc 'LEAVE' - defw semis-5 -leave: - defw $+2 ; limit <-- index - ld hl,(rpp) -; ldw de,(hl) ;/ de <-- r1 (= index) - defb 0edh,16h - inc hl - inc hl -; ldw (hl),de ;/ r2 (= limit) <-- index - defb 0edh,1eh - jnext -; -; - defb 82h ; >R - defc '>R' - defw leave-8 -tor: - defw $+2 - ld hl,(rpp) - dec hl - dec hl -; pop (hl) ;/ r1 <-- s1 - defb 0ddh,0c1h - ld (rpp),hl ; rp -= 2 - jnext -; -; - defb 82h ; R> - defc 'R>' - defw tor-5 -fromr: - defw $+2 - ld hl,(rpp) -; push (hl) ;/ s1 <-- r1 - defb 0ddh,0c5h - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 81h ; R - defc 'R' - defw fromr-5 -rr: - defw ido+2 -; -; - defb 82h ; 0= - defc '0=' - defw rr-4 -zequ: - defw $+2 - pop de - ld hl,0 -; cpw hl,de ;/ - defb 0edh,0d7h - jr nz,zequ1 - inc l ; hl <-- true -zequ1: - jhpush -; -; - defb 83h ;/ 0<> - defc '0<>' - defw zequ-5 -znequ: - defw $+2 - pop de - ld hl,0 -; cpw hl,de ;/ - defb 0edh,0d7h - jr z,znequ1 - inc l ; hl <-- true -znequ1: - jhpush -; -; - defb 82h ; 0< - defc '0<' - defw znequ-6 -zless: - defw $+2 - pop af ;/ a <-- s1.hb - rla ;/ carry <-- bit 7 - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry - jhpush -; -; - defb 82h ;/ 0> - defc '0>' - defw zless-5 -zgt: - defw $+2 - pop de - ld hl,0 -; cpw hl,de ;/ - defb 0edh,0d7h - jp p,zgt1 ;/ <= 0 - jp pe,zgt1 ;/ 8000h special case - inc l ;/ hl <-- true -zgt1: - jhpush -; -; - defb 81h ;+ - defc '+' - defw zgt-5 -plus: - defw $+2 - pop de - pop hl - add hl,de - jhpush -; -; - defb 82h ; D+ ( d1l d1h d2l d2h -- d3l d3h) - defc 'D+' - defw plus-4 -dplus: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- d2.hw - pop hl ; hl <-- d2.lw - pop af ;d af <-- d1.hw - pop de ; de <-- d1.lw - push af ;/ s1 <-- d1.hw - add hl,de ; hl <-- d2.lw + d1.lw (= d3.lw) - ex de,hl ; de <-- d3.lw - pop hl ; hl <-- d1.hw - adc hl,bc ;/ hl <-- d1.hw + d2.hw +carry (=d3.hw) - push de ; s2 <-- d3.lw - push hl ;/ s1 <-- d3.hw - exx ;/ restore ip - jnext -; -; - defb 85h ; MINUS - defc 'MINUS' - defw dplus-5 -minus: - defw $+2 - pop hl ;/ -; neg hl ;/ - defb 0edh,4ch - jhpush -; -; - defb 86h ; DMINUS - defc 'DMINUS' - defw minus-8 -dminu: - defw $+2 - exx ;/ save ip - pop de ;/ de <-- d1.hw - pop bc ;/ bc <-- d1.lw - ld hl,0 ;/ -; subw hl,bc ;/ - defb 0edh,0ceh - push hl ; s2 <-- d2.lw - ld hl,0 ;/ - sbc hl,de ;/ - push hl ; s1 <-- d2.hw - exx ;/ - jnext -; -; - defb 84h ; OVER - defc 'OVER' - defw dminu-9 -over: - defw $+2 -; ldw hl,(sp+2) ;/ - defb 0edh,04h,02h,00h - jhpush ;/ -; -; - defb 84h ; DROP - defc 'DROP' - defw over-7 -drop: - defw $+2 - inc sp - inc sp ;/ faster on z280 than dummy pop - jnext -; -; - defb 84h ; SWAP - defc 'SWAP' - defw drop-7 -swap: - defw $+2 - pop hl - ex (sp),hl - jhpush -; -; - defb 83h ; DUP - defc 'DUP' - defw swap-7 -dup: - defw $+2 -; ldw hl,(sp+0) ;/ - defb 0edh,04h,0,0 - jhpush -; -; - defb 84h ;/ TUCK ( n1 n2 --- n2 n1 n2) - defc 'TUCK' - defw dup-6 -tuck: - defw $+2 - pop hl ;/ hl <-- s1 - pop de ;/ de <-- s2 - push hl ;/ s3 <-- hl - jp dpush -; -; - defb 83h ;/ NIP ( n1 n2 --- n2) - defc 'NIP' - defw tuck-7 -nip: - defw $+2 - pop hl ; hl <-- s1 -; ldw (sp+0),hl ;/ s1 <-- hl - defb 0edh,05h,0,0 - jnext -; -; - defb 84h ;/ -ROT ( n1 n2 n3 --- n3 n1 n2) - defc '-ROT' - defw nip-6 -mrot: - defw $+2 - pop hl - pop de - ex (sp),hl - ex de,hl - jp dpush -; -; - defb 85h ;/ CSWAP ( n1 --- n1, bytes swapped) - defc 'CSWAP' - defw mrot-7 -cswap: - defw $+2 - pop hl -; ex h,l ;/ - defb 0edh,0efh - jhpush -; -; - defb 84h ;/ PICK ( nn...n0 k --- nn..n0 nk) - defc 'PICK' - defw cswap-8 -pick: - defw $+2 - pop hl ; hl <-- depth - add hl,hl ; adjust to word size - add hl,sp ; offset into stack -; push (hl) ;/ - defb 0ddh,0c5h - jnext -; -; - defb 84h ; 2DUP - defc '2DUP' - defw pick-7 -tdup: - defw $+2 - pop hl - pop de - push de - push hl - jp dpush -; -; - defb 82h ; +! - defc '+!' - defw tdup-7 -pstor: - defw $+2 - pop hl ; hl --> variable - pop de ; de <-- number - ld a,(hl) - add a,e - ld (hl),a - inc hl - ld a,(hl) - adc a,d - ld (hl),a ; (hl) += number - jnext -; -; - defb 86h ; TOGGLE - defc 'TOGGLE' - defw pstor-5 -toggl: - defw $+2 - pop de ; e <-- bit pattern - pop hl ; hl --> address - ld a,(hl) - xor e - ld (hl),a - jnext -; -; - defb 81h ; @ - defc '@' - defw toggl-9 -at: - defw $+2 - pop hl -; push (hl) ;/ - defb 0ddh,0c5h - jnext -; -; - defb 82h ; C@ - defc 'C@' - defw at-4 -cat: - defw $+2 - pop hl - ld l,(hl) - ld h,0 - jhpush -; -; - defb 82h ; 2@ - defc '2@' - defw cat-5 -tat: - defw $+2 - pop hl ; hl --> address -; ldw de,(hl) ;/ de <-- d.hw - defb 0edh,16h - inc hl - inc hl ; hl --> d.lw -; push (hl) ;/ s2 <-- d.lw - defb 0ddh,0c5h - push de ;/ s1 <-- d.hw - jnext -; -; - defb 81h ; ! - defc '!' - defw tat-5 -store: - defw $+2 - pop hl ; hl --> address -; pop (hl) ;/ - defb 0ddh,0c1h - jnext -; -; - defb 82h ; C! - defc 'C!' - defw store-4 -cstor: - defw $+2 - pop hl ; hl --> address - pop de ; e <-- char - ld (hl),e - jnext -; -; - defb 82h ; 2! - defc '2!' - defw cstor-5 -tstor: - defw $+2 - pop hl ; hl --> address -; pop (hl) ;/ store d.hw - defb 0ddh,0c1h - inc hl - inc hl -; pop (hl) ;/ store d.lw - defb 0ddh,0c1h - jnext -; -; - defb 0c1h ; : - defc ':' - defw tstor-5 -colon: - defw docol - defw qexec - defw scsp - defw curr - defw at - defw cont - defw store - defw creat - defw rbrac - defw pscod -docol: - ld hl,(rpp) - dec hl - dec hl -; ldw (hl),bc ;/ save return address - defb 0edh,0eh - ld (rpp),hl - inc de - ld c,e - ld b,d - jnext -; -; - defb 0c1h ; ; - defc ';' - defw colon-4 -semi: - defw docol - defw qcsp - defw comp - defw semis - defw smudg - defw lbrac - defw semis -; -; - defb 84h ; NOOP - defc 'NOOP' - defw semi-4 -noop: - defw docol - defw semis -; -; - defb 88h ; CONSTANT - defc 'CONSTANT' - defw noop-7 -con: - defw docol - defw creat - defw smudg - defw comma - defw pscod -docon: - inc de - ex de,hl -; push (hl) ;/ - defb 0ddh,0c5h - jnext -; -; - defb 88h ; VARIABLE - defc 'VARIABLE' - defw con-0bh -var: - defw docol - defw con - defw pscod -dovar: - inc de - push de - jnext -; -; - defb 84h ; USER - defc 'USER' - defw var-0bh -user: - defw docol - defw con - defw pscod -douse: - inc de - ex de,hl - ld l,(hl) ;/ - ld h,0 ;/ -; addw hl,(up) ;/ - defb 0ddh,0edh,0d6h - defw up - jhpush -; -; - defb 81h ; 0 - defc '0' - defw user-7 -zero: - defw $+2 ;/ -; push 0000h ;/ - defb 0fdh,0f5h,0,0 - jnext -; -; - defb 81h ; 1 - defc '1' - defw zero-4 -one: - defw $+2 ;/ -; push 0001h ;/ - defb 0fdh,0f5h,1,0 - jnext -; -; - defb 81h ; 2 - defc '2' - defw one-4 -two: - defw $+2 ;/ -; push 0002h ;/ - defb 0fdh,0f5h,2,0 - jnext -; -; - defb 81h ; 3 - defc '3' - defw two-4 -three: - defw $+2 ;/ -; push 0003h ;/ - defb 0fdh,0f5h,3,0 - jnext -; -; - defb 82h ; BL - defc 'BL' - defw three-4 -bl: - defw docon - defw 20h -; -; - defb 83h ; C/L - defc 'C/L' - defw bl-5 -csll: - defw docon - defw 64 -; -; - defb 85h ; FIRST - defc 'FIRST' - defw csll-6 -first: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; LIMIT - defc 'LIMIT' - defw first-8 -limit: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; B/BUF - defc 'B/BUF' - defw limit-8 -bbuf: - defw docon - defw kbbuf -; -; - defb 85h ; B/SCR - defc 'B/SCR' - defw bbuf-8 -bscr: - defw docon - defw 400h/kbbuf -; -; - defb 87h ; +ORIGIN - defc '+ORIGIN' - defw bscr-8 -porig: - defw docol - defw lit - defw orig - defw plus - defw semis -; -; USER VARIABLES -; - defb 82h ; S0 - defc 'S0' - defw porig-0ah -szero: - defw douse - defw 6 -; -; - defb 82h ; R0 - defc 'R0' - defw szero-5 -rzero: - defw douse - defw 8 -; -; - defb 83h ; TIB - defc 'TIB' - defw rzero-5 -tib: - defw douse - defb 0ah -; -; - defb 85h ; WIDTH - defc 'WIDTH' - defw tib-6 -width: - defw douse - defb 0ch -; -; - defb 87h ; WARNING - defc 'WARNING' - defw width-8 -warn: - defw douse - defb 0eh -; -; - defb 85h ; FENCE - defc 'FENCE' - defw warn-0ah -fence: - defw douse - defb 10h -; -; - defb 82h ; DP - defc 'DP' - defw fence-8 -dp: - defw douse - defb 12h -; -; - defb 88h ; VOC-LINK - defc 'VOC-LINK' - defw dp-5 -vocl: - defw douse - defw 14h -; -; - defb 83h ; BLK - defc 'BLK' - defw vocl-0bh -blk: - defw douse - defb 16h -; -; - defb 82h ; IN - defc 'IN' - defw blk-6 -inn: - defw douse - defb 18h -; -; - defb 83h ; OUT - defc 'OUT' - defw inn-5 -outt: - defw douse - defb 1ah -; -; - defb 83h ; SCR - defc 'SCR' - defw outt-6 -scr: - defw douse - defb 1ch -; -; - defb 86h ; OFFSET - defc 'OFFSET' - defw scr-6 -ofset: - defw douse - defb 1eh -; -; - defb 87h ; CONTEXT - defc 'CONTEXT' - defw ofset-9 -cont: - defw douse - defb 20h -; -; - defb 87h ; CURRENT - defc 'CURRENT' - defw cont-0ah -curr: - defw douse - defb 22h -; -; - defb 85h ; STATE - defc 'STATE' - defw curr-0ah -state: - defw douse - defb 24h -; -; - defb 84h ; BASE - defc 'BASE' - defw state-8 -base: - defw douse - defb 26h -; -; - defb 83h ; DPL - defc 'DPL' - defw base-7 -dpl: - defw douse - defb 28h -; -; - defb 83h ; FLD - defc 'FLD' - defw dpl-6 -fld: - defw douse - defb 2ah -; -; - defb 83h ; CSP - defc 'CSP' - defw fld-6 -cspp: - defw douse - defb 2ch -; - - defb 82h ; R# - defc 'R#' - defw cspp-6 -rnum: - defw douse - defb 2eh -; - - defb 83h ; HLD - defc 'HLD' - defw rnum-5 -hld: - defw douse - defw 30h -; -; END OF USER VARIABLES -; - defb 82h ; 1+ - defc '1+' - defw hld-6 -onep: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ; 2+ - defc '2+' - defw onep-5 -twop: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 1- - defc '1-' ;/ - defw twop-5 ;/ -onemin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2- - defc '2-' ;/ - defw onemin-5 ;/ -twomin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2* - defc '2*' ;/ - defw twomin-5 ;/ -twosta: - defw $+2 ;/ - pop hl ;/ - add hl,hl ;/ asl hl - jhpush ;/ -; -; - defb 82h ;/ 2/ - defc '2/' ;/ - defw twosta-5 ;/ -twosla: - defw $+2 ;/ - pop hl ;/ - bit 7,h ;/ negative? - jr z,twosl1 ;/ no - inc hl ;/ yes, add 1 -twosl1: - sra h ;/ - rr l ;/ asr hl - jhpush ;/ -; -; - defb 84h ; HERE - defc 'HERE' - defw twosla-5 -here: - defw docol - defw dp - defw at - defw semis -; -; - defb 85h ; ALLOT - defc 'ALLOT' - defw here-7 -allot: - defw docol - defw dp - defw pstor - defw semis -; -; - defb 81h ; , - defc ',' - defw allot-8 -comma: - defw docol - defw here - defw store - defw two - defw allot - defw semis -; - - defb 82h ; C, - defc 'C,' - defw comma-4 -ccomm: - defw docol - defw here - defw cstor - defw one - defw allot - defw semis -; -; - defb 81h ; - - defc '-' - defw ccomm-5 -subb: - defw $+2 - pop de - pop hl -; subw hl,de ;/ - defb 0edh,0deh - jhpush -; -; - defb 81h ; = - defc '=' - defw subb-4 -equal: - defw $+2 ;/ - pop de ;/ - pop hl ;/ -; subw hl,de ;/ - defb 0edh,0deh - ld hl,0 ; hl <-- false - jr nz,equal1 - inc l ;/ hl <-- true -equal1: - jhpush -; -; - defb 81h ; < - defc '<' - defw equal-4 -less: - defw $+2 - pop de - pop hl ; hl de < - ld a,d - xor h ; one operand negative? - jp m,less1 ; yes, determine which -; subw hl,de ;/ - defb 0edh,0deh -less1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,less2 - inc l ;/ hl <-- true -less2: - jhpush -; -; - defb 82h ; U< - defc 'U<' - defw less-4 -uless: - defw $+2 - pop de - pop hl ;/ hl de U< -; subw hl,de ;/ - defb 0edh,0deh - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry -uless1: - jhpush -; -; - defb 81h ; > - defc '>' - defw uless-5 -great: - defw $+2 - pop hl ;/ - pop de ;/ hl de > (= de hl < ) - ld a,d - xor h ; one operand negative? - jp m,great1 ; yes, determine which -; subw hl,de ;/ - defb 0edh,0deh -great1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,great2 - inc l ;/ hl <-- true -great2: - jhpush -; -; - defb 83h ; ROT ( n1 n2 n3 --- n2 n3 n1) - defc 'ROT' - defw great-4 -rot: - defw $+2 - pop de ; de <-- n3 - pop hl ; hl <-- n2 - ex (sp),hl ; s1 <-- n2, hl <-- n1 - jp dpush ; s2 <-- n3, s3 <-- n1 -; -; - defb 85h ; SPACE - defc 'SPACE' - defw rot-6 -space: - defw docol - defw bl - defw emit - defw semis -; -; - defb 84h ; -DUP - defc '-DUP' - defw space-8 -ddup: - defw $+2 ;/ -; ldw hl,(sp+0) ;/ - defb 0edh,04h,0,0 - ld a,h ;/ - or l ;/ hl = 0? - jr z,ddup1 ;/ yes, don't dup - push hl ;/ -ddup1: - jnext -; -; - defb 88h ; TRAVERSE - defc 'TRAVERSE' - defw ddup-7 -trav: - defw docol - defw swap -trav1: - defw over ; begin - defw plus - defw lit - defw 7fh - defw over - defw cat - defw less - defw zbran ; until - defw trav1-$ - defw swap - defw drop - defw semis -; -; - defb 86h ; LATEST - defc 'LATEST' - defw trav-0bh -lates: - defw docol - defw curr - defw at - defw at - defw semis -; -; - defb 83h ; LFA - defc 'LFA' - defw lates-9 -lfa: - defw $+2 - pop hl ;/ hl <-- pfa -; subw hl,4 ;/ - defb 0fdh,0edh,0feh,4,0 - jhpush ;/ s1 <-- lfa -; -; - defb 83h ; CFA - defc 'CFA' - defw lfa-6 -cfa: - defw docol - defw twomin ;/ - defw semis -; -; - defb 83h ; NFA - defc 'NFA' - defw cfa-6 -nfa: - defw docol - defw lit - defw 5 - defw subb - defw lit - defw -1 - defw trav - defw semis -; -; - defb 83h ; PFA - defc 'PFA' - defw nfa-6 -pfa: - defw docol - defw one - defw trav - defw lit - defw 5 - defw plus - defw semis -; -; - defb 84h ; !CSP - defc '!CSP' - defw pfa-6 -scsp: - defw docol - defw spat - defw cspp - defw store - defw semis -; -; - defb 86h ; ?ERROR - defc '?ERROR' - defw scsp-7 -qerr: - defw docol - defw swap - defw zbran ; if - defw qerr1-$ - defw error - defw bran ; else - defw qerr2-$ -qerr1: - defw drop ; endif -qerr2: - defw semis -; -; - defb 85h ; ?COMP - defc '?COMP' - defw qerr-9 -qcomp: - defw docol - defw state - defw at - defw zequ - defw lit - defw 11h - defw qerr - defw semis -; -; - defb 85h ; ?EXEC - defc '?EXEC' - defw qcomp-8 -qexec: - defw docol - defw state - defw at - defw lit - defw 12h - defw qerr - defw semis -; -; - defb 86h ; ?PAIRS - defc '?PAIRS' - defw qexec-8 -qpair: - defw docol - defw subb - defw lit - defw 13h - defw qerr - defw semis -; -; - defb 84h ; ?CSP - defc '?CSP' - defw qpair-9 -qcsp: - defw docol - defw spat - defw cspp - defw at - defw subb - defw lit - defw 14h - defw qerr - defw semis -; -; - defb 88h ; ?LOADING - defc '?LOADING' - defw qcsp-7 -qload: - defw docol - defw blk - defw at - defw zequ - defw lit - defw 16h - defw qerr - defw semis -; -; - defb 87h ; COMPILE - defc 'COMPILE' - defw qload-0bh -comp: - defw docol - defw qcomp - defw fromr - defw dup - defw twop - defw tor - defw at - defw comma - defw semis -; -; - defb 0c1h ; [ - defc '[' - defw comp-0ah -lbrac: - defw docol - defw zero - defw state - defw store - defw semis -; -; - defb 81h ; ] - defc ']' - defw lbrac-4 -rbrac: - defw docol - defw lit,0c0h - defw state,store - defw semis -; -; - defb 86h ; SMUDGE - defc 'SMUDGE' - defw rbrac-4 -smudg: - defw docol - defw lates - defw lit - defw 20h - defw toggl - defw semis -; -; - defb 83h ; HEX - defc 'HEX' - defw smudg-9 -hex: - defw docol - defw lit - defw 10h - defw base - defw store - defw semis -; -; - defb 87h ; DECIMAL - defc 'DECIMAL' - defw hex-6 -dec: - defw docol - defw lit - defw 0ah - defw base - defw store - defw semis -; -; - defb 87h ; (;CODE) - defc '(;CODE)' - defw dec-0ah -pscod: - defw docol - defw fromr - defw lates - defw pfa - defw cfa - defw store - defw semis -; -; - defb 0c5h ; ;CODE - defc ';CODE' - defw pscod-0ah -semic: - defw docol - defw qcsp - defw comp - defw pscod - defw lbrac -semi1: - defw noop ; assembler - defw semis -; -; - defb 87h ; - defc 'DOES>' - defw build-0ah -does: - defw docol - defw fromr - defw lates - defw pfa - defw store - defw pscod -dodoe: - ld hl,(rpp) - dec hl - dec hl -; ldw (hl),bc ;/ - defb 0edh,0eh - ld (rpp),hl - inc de - ex de,hl -; ldw bc,(hl) ;/ - defb 0edh,06h - inc hl - inc hl - jhpush -; -; - defb 85h ; COUNT - defc 'COUNT' - defw does-8 -count: - defw docol - defw dup - defw onep - defw swap - defw cat - defw semis -; -; - defb 84h ; TYPE - defc 'TYPE' - defw count-8 -type: - defw docol - defw ddup - defw zbran ; if - defw type1-$ - defw over - defw plus - defw swap - defw xdo ; do -type2: - defw ido - defw cat - defw emit - defw xloop ; loop - defw type2-$ - defw bran ; else - defw type3-$ -type1: - defw drop ; endif -type3: - defw semis -; -; - defb 89h ; -TRAILING - defc '-TRAILING' - defw type-7 -dtrai: - defw docol - defw dup - defw zero - defw xdo ; do -dtra1: - defw tdup ;/ - defw plus - defw onemin ;/ - defw cat - defw bl - defw subb - defw zbran ; if - defw dtra2-$ - defw leave - defw bran ; else - defw dtra3-$ -dtra2: - defw onemin ;/ -dtra3: - defw xloop ; loop - defw dtra1-$ - defw semis -; -; - defb 84h ; (.") - defc '(.")' - defw dtrai-0ch -pdotq: - defw docol - defw rr - defw count - defw dup - defw onep - defw fromr - defw plus - defw tor - defw type - defw semis -; -; - defb 0c2h ; ." - defc '."' - defw pdotq-7 -dotq: - defw docol - defw lit - defw 22h - defw state - defw at - defw zbran ; if - defw dotq1-$ - defw comp - defw pdotq - defw word - defw here - defw cat - defw onep - defw allot - defw bran ; else - defw dotq2-$ -dotq1: - defw word - defw here - defw count - defw type ; endif -dotq2: - defw semis -; -; - defb 86h ; EXPECT - defc 'EXPECT' - defw dotq-5 -expec: - defw docol - defw over - defw plus - defw over - defw xdo ; do -expe1: - defw key - defw dup - defw lit - defw 0eh - defw porig - defw at - defw equal - defw zbran ; if - defw expe2-$ - defw drop - defw dup - defw ido - defw equal - defw dup - defw fromr - defw twomin ;/ - defw plus - defw tor - defw zbran ; if - defw expe6-$ - defw lit - defw bell - defw bran ; else - defw expe7-$ -expe6: - defw lit - defw bsout ; endif -expe7: - defw bran ; else - defw expe3-$ -expe2: - defw dup - defw lit - defw acr ;/ - defw equal - defw zbran ; if - defw expe4-$ - defw leave - defw drop - defw bl - defw zero - defw bran ; else - defw expe5-$ -expe4: - defw dup ; endif -expe5: - defw ido - defw cstor - defw zero - defw ido - defw onep - defw store ; endif -expe3: - defw emit - defw xloop ; loop - defw expe1-$ - defw drop - defw semis -; -; - defb 85h ; QUERY - defc 'QUERY' - defw expec-9 -query: - defw docol - defw tib - defw at - defw lit - defw 50h - defw expec - defw zero - defw inn - defw store - defw semis -; -; - defb 0c1h ; NULL - defb 80h - defw query-8 -null: - defw docol - defw blk - defw at - defw zbran ; if - defw null1-$ - defw one - defw blk - defw pstor - defw zero - defw inn - defw store - defw blk - defw at - defw bscr - defw onemin ;/ - defw andd - defw zequ - defw zbran ; if - defw null2-$ - defw qexec - defw fromr - defw drop ; endif -null2: - defw bran ; else - defw null3-$ -null1: - defw fromr - defw drop ; endif -null3: - defw semis -; - defb 84h ; FILL - defc 'FILL' - defw null-4 -fill: - defw $+2 - exx ;/ save ip - pop de ;/ e <-- byte - pop bc ; bc <-- quantity - pop hl ;/ hl <-- address -fill1: - ld a,b - or c ; qty == 0? - jr z,fill2 ; yes, nothing (more) to fill - ld (hl),e ;/ (hl) <-- byte - inc hl ; inc pointer - dec bc ; dec counter - jp fill1 ;/ -fill2: - exx ;/ restore ip - jnext -; -; - defb 85h ; ERASE - defc 'ERASE' - defw fill-7 -erasee: - defw docol - defw zero - defw fill - defw semis -; -; - defb 86h ; BLANKS - defc 'BLANKS' - defw erasee-8 -blank: - defw docol - defw bl - defw fill - defw semis -; -; - defb 84h ; HOLD - defc 'HOLD' - defw blank-9 -hold: - defw docol - defw lit - defw -1 - defw hld - defw pstor - defw hld - defw at - defw cstor - defw semis -; -; - defb 83h ; PAD - defc 'PAD' - defw hold-7 -pad: - defw docol - defw here - defw lit - defw 44h - defw plus - defw semis -; -; - defb 84h ; WORD - defc 'WORD' - defw pad-6 -word: - defw docol - defw blk - defw at - defw zbran ; if - defw word1-$ - defw blk - defw at - defw block - defw bran ; else - defw word2-$ -word1: - defw tib - defw at ; endif -word2: - defw inn - defw at - defw plus - defw swap - defw encl - defw here - defw lit - defw 22h - defw blank - defw inn - defw pstor - defw over - defw subb - defw tor - defw rr - defw here - defw cstor - defw plus - defw here - defw onep - defw fromr - defw cmove - defw semis -; -; - defb 88h ; (NUMBER) - defc '(NUMBER)' - defw word-7 -pnumb: - defw docol -pnum1: - defw onep ; begin - defw dup - defw tor - defw cat - defw base - defw at - defw digit - defw zbran ; while - defw pnum2-$ - defw swap - defw base - defw at - defw ustar - defw drop - defw rot - defw base - defw at - defw ustar - defw dplus - defw dpl - defw at - defw onep - defw zbran ; if - defw pnum3-$ - defw one - defw dpl - defw pstor ; endif -pnum3: - defw fromr - defw bran ; repeat - defw pnum1-$ -pnum2: - defw fromr - defw semis -; -; - defb 86h ; NUMBER - defc 'NUMBER' - defw pnumb-0bh -numb: - defw docol - defw zero - defw zero - defw rot - defw dup - defw onep - defw cat - defw lit - defw 2dh - defw equal - defw dup - defw tor - defw plus - defw lit - defw -1 -numb1: - defw dpl ; begin - defw store - defw pnumb - defw dup - defw cat - defw bl - defw subb - defw zbran ; while - defw numb2-$ - defw dup - defw cat - defw lit - defw 2eh - defw subb - defw zero - defw qerr - defw zero - defw bran ; repeat - defw numb1-$ -numb2: - defw drop - defw fromr - defw zbran ; if - defw numb3-$ - defw dminu ; endif -numb3: - defw semis -; -; - defb 85h ; -FIND (0-3) SUCCESS - defc '-FIND' ; (0-1) FAILURE - defw numb-9 -dfind: - defw docol - defw bl - defw word - defw here - defw cont - defw at - defw at - defw pfind - defw dup - defw zequ - defw zbran ; if - defw dfin1-$ - defw drop - defw here - defw lates - defw pfind ; endif -dfin1: - defw semis -; -; - defb 87h ; (ABORT) - defc '(ABORT)' - defw dfind-8 -pabor: - defw docol - defw abort - defw semis -; - defb 85h ; ERROR - defc 'ERROR' - defw pabor-0ah -error: - defw docol - defw warn - defw at - defw zless - defw zbran ; if - defw erro1-$ - defw pabor ; endif -erro1: - defw here - defw count - defw type - defw pdotq - defb 2 - db '? ' - defw mess - defw spsto -; CHANGE FROM fig MODEL -; defw inn,at,blk,at - defw blk,at - defw ddup - defw zbran,erro2-$ ; if - defw inn,at - defw swap ; endif -erro2: - defw quit -; -; - defb 83h ; ID. - defc 'ID.' - defw error-8 -iddot: - defw docol - defw pad - defw lit - defw 20h - defw blank ;/ - defw dup - defw pfa - defw lfa - defw over - defw subb - defw dup ;/ change frm MODEL - defw tor ;/ to suppress BIT 7 - defw pad - defw swap - defw cmove - defw pad - defw fromr ;/ for terminals - defw pad ;/ with an 8 bit - defw plus ;/ ASCCI character set. - defw onemin ;/ - defw dup ;/ - defw at ;/ - defw lit ;/ - defw 7fh ;/ - defw andd ;/ - defw swap ;/ - defw store ;/ - defw count - defw lit - defw 1fh ; WIDTH - defw andd - defw type - defw space - defw semis -; - defb 86h ; CREATE - defc 'CREATE' - defw iddot-6 -creat: - defw docol - defw dfind - defw zbran ; if - defw crea1-$ - defw drop - defw nfa - defw iddot - defw lit - defw 4 - defw mess - defw space ; endif -crea1: - defw here - defw dup - defw cat - defw width - defw at - defw min - defw onep - defw allot - defw dup - defw lit - defw 0a0h - defw toggl - defw here - defw onemin - defw lit - defw 80h - defw toggl - defw lates - defw comma - defw curr - defw at - defw store - defw here - defw twop - defw comma - defw semis -; -; - defb 0c9h ; [COMPILE] - defc '[COMPILE]' - defw creat-9 -bcomp: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw cfa - defw comma - defw semis -; -; - defb 0c7h ; LITERAL - defc 'LITERAL' - defw bcomp-0ch -liter: - defw docol - defw state - defw at - defw zbran ; if - defw lite1-$ - defw comp - defw lit - defw comma ; endif -lite1: - defw semis -; -; - defb 0c8h ; DLITERAL - defc 'DLITERAL' - defw liter-0ah -dlite: - defw docol - defw state - defw at - defw zbran ; if - defw dlit1-$ - defw swap - defw liter - defw liter ; endif -dlit1: - defw semis -; -; - defb 86h ; ?STACK - defc '?STACK' - defw dlite-0bh -qstac: - defw docol - defw spat - defw szero - defw at - defw swap - defw uless - defw one - defw qerr - defw spat - defw here - defw lit - defw 80h - defw plus - defw uless - defw lit - defw 7 - defw qerr - defw semis -; -; - defb 89h ; INTERPRET - defc 'INTERPRET' - defw qstac-9 -inter: - defw docol -inte1: - defw dfind ; begin - defw zbran ; if - defw inte2-$ - defw state - defw at - defw less - defw zbran ; if - defw inte3-$ - defw cfa - defw comma - defw bran ; else - defw inte4-$ -inte3: - defw cfa - defw exec ; endif -inte4: - defw qstac - defw bran ; else - defw inte5-$ -inte2: - defw here - defw numb - defw dpl - defw at - defw onep - defw zbran ; if - defw inte6-$ - defw dlite - defw bran ; else - defw inte7-$ -inte6: - defw drop - defw liter ; endif -inte7: - defw qstac ; endif -inte5: - defw bran ; again - defw inte1-$ -; -; - defb 89h ; IMMEDIATE - defc 'IMMEDIATE' - defw inter-0ch -immed: - defw docol - defw lates - defw lit - defw 40h - defw toggl - defw semis -; -; - defb 8ah ; VOCABULARY - defc 'VOCABULARY' - defw immed-0ch -vocab: - defw docol - defw build - defw lit - defw 0a081h - defw comma - defw curr - defw at - defw cfa - defw comma - defw here - defw vocl - defw at - defw comma - defw vocl - defw store - defw does -dovoc: - defw twop - defw cont - defw store - defw semis -; -; - defb 0c5h ; FORTH - defc 'FORTH' - defw vocab-0dh -forth: - defw dodoe - defw dovoc - defw 0a081h - defw task-7 ; cold start value only -; changed aech time a def is appended -; to the FORTH vocabulary - defw 0 ; end of vocabulary list -; -; - defb 8bh ; DEFINITIONS - defc 'DEFINITIONS' - defw forth-8 -defin: - defw docol - defw cont - defw at - defw curr - defw store - defw semis -; -; - defb 0c1h ; ( - defc '(' - defw defin-0eh -paren: - defw docol - defw lit - defw 29h - defw word - defw semis -; -; - defb 84h ; QUIT - defc 'QUIT' - defw paren-4 -quit: - defw docol - defw zero - defw blk - defw store - defw lbrac -quit1: - defw rpsto ; begin - defw cr - defw query - defw inter - defw state - defw at - defw zequ - defw zbran ; if - defw quit2-$ - defw pdotq - defb 2 - db 'ok' ; endif -quit2: - defw bran ; again - defw quit1-$ -; -; - defb 85h ; ABORT - defc 'ABORT' - defw quit-7 -abort: - defw docol - defw spsto - defw dec - defw qstac - defw cr - defw dotcpu - defw pdotq - defb 0eh ; count of chrs to follow - db 'fig-FORTH ' - defb figrel+30h,adot,figrev+30h,usrver - defw forth - defw defin - defw quit -; -; -wrm: ld bc,wrm1 - jnext -wrm1: defw warm -; -; - defb 84h ; WARM - defc 'WARM' - defw abort-8 -warm: - defw docol - defw mtbuf - defw abort -; -; -cld: - ld hl,(bdoss+1) ;/ - ld l,0 ;/ hl <-- fbase - ld (limit+2),hl ;/ set limit - ld de,bufsiz ;/ de <-- total disc buffer size -; subw hl,de ;/ hl <-- addr. of 1st disc buffer - defb 0edh,0deh - ld (first+2),hl ;/ set FIRST - ld (use+2),hl ;/ set USE - ld (prev+2),hl ;/ set PREV - ld (buf1),hl ;/ - ld de,us ;/ de <-- user variable space -; subw hl,de ;/ hl <-- initr0 - defb 0edh,0deh - ld (upinit),hl ;/ - ld (r0init),hl ;/ - ld (up),hl ;/ - ld (rpp),hl ;/ - ld de,rts ;/ de <-- rtn stack & term. buf space -; subw hl,de ;/ hl <-- inits0 - defb 0edh,0deh - ld (s0init),hl ;/ - ld (tibini),hl ;/ - ld sp,hl ;/ - ld bc,cld1 - ld ix,next ; pointer to next - ld iy,hpush ; pointer to hpush - jnext -; -; -cld1: defw cold -; - defb 84h ; COLD - defc 'COLD' - defw warm-7 -cold: - defw docol - defw mtbuf - defw one,recadr ; AvdH - defw store - defw lit,buf1 - defw at ;/ - defw use,store - defw lit,buf1 - defw at ;/ - defw prev,store - defw drzer - defw zero ;/ - defw lit,eprint - defw cstor ;/ -; - defw lit - defw orig+12h - defw lit - defw up - defw at - defw lit - defw 6 - defw plus - defw lit - defw 10h - defw cmove - defw lit - defw orig+0ch - defw at - defw lit - defw forth+6 - defw store - defw fcb ;/A - defw lit,opnfil ;/A open mass storage - defw bdos ;/A - defw lit,0ffh ;/A - defw equal ;/A file present? - defw zbran,cld2-$ ;/A - defw zero ;/A - defw warn,store ;/A - defw cr,pdotq ;/A - defb 7 ;/A - db 'No file' ;/A -cld2: - defw abort -; -; - defb 84h ; S->D - defc 'S->D' - defw cold-7 -stod: defw $+2 - pop hl ;/ -; exts hl ;/ de <-- h(7) - defb 0edh,6ch - ex de,hl ;/ - jp dpush ; ( n1 -- d1L d1H) -; -; - defb 82h ; +- - defc '+-' - defw STOD-7 -pm: - defw docol - defw zless - defw zbran ; if - defw pm1-$ - defw minus ; endif -pm1: - defw semis -; -; - defb 83h ; D+- - defc 'D+-' - defw pm-5 -dpm: - defw docol - defw zless - defw zbran ; if - defw dpm1-$ - defw dminu ; endif -dpm1: - defw semis -; -; - defb 83h ; ABS - defc 'ABS' - defw dpm-6 -abs: - defw docol - defw dup - defw pm - defw semis -; -; - defb 84h ; DABS - defc 'DABS' - defw abs-6 -dabs: - defw docol - defw dup - defw dpm - defw semis -; -; - defb 83h ; MIN - defc 'MIN' - defw dabs-7 -min: - defw docol - defw tdup - defw great - defw zbran ; if - defw min1-$ - defw swap ; endif -min1: - defw drop - defw semis -; -; - defb 83h ; MAX - defc 'MAX' - defw min-6 -max: defw docol - defw tdup - defw less - defw zbran ; if - defw max1-$ - defw swap ; endif -max1: - defw drop - defw semis -; -; - defb 82h ; M* ( n1 n2 --- d) - defc 'M*' - defw max-6 -mstar: - defw $+2 ;/ - pop de ; de <-- multiplicator - pop hl ; hl <-- multiplicant -; multw hl,de ;/ dehl <-- hl * de - defb 0edh,0d2h - ex de,hl ;/ - jp dpush ;/ ( n1 n2 --- d1l d1h) -; -; - defb 82h ;/ M/ ( d n1 --- nrem nquot) - defc 'M/' - defw mstar-5 -mslas: - defw $+2 ; ( d n1 --- n2 n3) - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,mslas1 ; positive -; neg hl ; make positive - defb 0edh,4ch -mslas1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; dividend.hw - pop de ; dividend.lw - bit 7,h ; negative? - jr z,mslas2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 -; subw hl,de ; neg dividend.lw - defb 0edh,0deh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -mslas2: -; cpw hl,bc ; dividend.hw >= divisor - defb 0edh,0c7h - jr c,mslas3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max. - jr mslas5 -; -mslas3: - ex de,hl ; dehl <-- dividend.hw,lw -; divuw dehl,bc ; de <-- remainder, hl <-- quotient - defb 0edh,0cbh - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative - jr z,mslas4 ; no -; neg hl ; yes, negate remainder - defb 0edh,4ch -mslas4: - ex de,hl ; hl <-- quotient - or a - jr z,mslas5 ; neither operand negative - cp 81h ; both operands negative? - jr z,mslas5 ; yes, quotient stays positive -; neg hl ; no, negate quotient - defb 0edh,4ch -mslas5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 81h ; * ( n1 n2 --- nproduct) - defc '*' - defw mslas-5 -star: - defw $+2 - pop de - pop hl -; multw hl,de ;/ dehl <-- product - defb 0edh,0d2h - jhpush -; -; - defb 84h ; /MOD ( n1 n2 --- nrem nquot) - defc '/MOD' - defw star-4 -slmod: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ div by 0? - jr nz,slmod1 ;/ no, continue - ld de,0ffffh - ld h,d - ld l,e ;/ set remainder & quotient to max. - jr slmod3 -slmod1: -; cpw hl,8000h ;/ special case -32768 -1 / - defb 0fdh,0edh,0f7h - defw 8000h - jr nz,slmod2 ;/ continue - ld a,b - cp 0ffh - jr nz,slmod2 - cp c ;/ lo byte also 0ffh? - jr nz,slmod2 ;/ no, go & divide - ld de,0 ;/ remainder - jr slmod3 ;/ exit with dividend unchanged -slmod2: -; exts hl ;/ de <-- dividend.hw - defb 0edh,6ch -; divw dehl,bc ;/ de <-- remainder, hl <-- quotient - defb 0edh,0cah -slmod3: - push de - push hl - exx ;/ restore ip - jnext -; -; - defb 81h ; / - defc '/' - defw slmod-7 -slash: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ division by 0? - jr nz,slash1 ;/ no, continue - ld hl,0ffffh ;/ set quotient to max. - jr slash3 -slash1: -; cpw hl,8000h ;/ special case -32768 -1 / - defb 0fdh,0edh,0f7h - defw 8000h - jr nz,slash2 ;/ dividend not -32768 - ld a,b - cp 0ffh - jr nz,slash2 ;/ divisor not -1 - cp c - jr z,slash3 ;/ return with dividend unchanged -slash2: -; exts hl ;/ de <-- dividend.hw - defb 0edh,6ch -; divw dehl,bc ;/ hl <-- quotient - defb 0edh,0cah -slash3: - push hl ;/ quotient - exx ;/ restore ip - jnext -; -; - defb 83h ;/ MOD - defc 'MOD' - defw slash-4 -modd: - defw $+2 - exx ; save ip - pop bc ; divisor - pop hl ; dividend - ld a,b - or c ; division by 0? - jr nz,modd1 ; no, continue - ld de,0ffffh ; set remainder to max - jr modd3 -modd1: -; cpw hl,8000h ; special case -32768 -1 / - defb 0fdh,0edh,0f7h - defw 8000h - jr nz,modd2 ; dividend not -32768 - ld a,b - cp 0ffh - jr nz,modd2 ; divisor not -1 - cp c - jr nz,modd2 ; go & divide - ld de,0 ; remainder - jr modd3 -modd2: -; exts hl ; de <-- dividend.hw - defb 0edh,6ch -; divw dehl,bc ; de <-- remainder - defb 0edh,0cah -modd3: - push de ; remainder - exx ; restore ip - jnext -; -; - defb 85h ;/ */MOD - defc '*/MOD' - defw modd-6 -ssmod: - defw $+2 - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssmod1 ; positive -; neg hl ; make positive - defb 0edh,4ch -ssmod1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag -; multw hl,de ; dehl <-- product (= dividend) - defb 0edh,0d2h - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssmod2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 -; subw hl,de ; neg dividend.lw - defb 0edh,0deh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssmod2: -; cpw hl,bc ; dividend.hw >= divisor? - defb 0edh,0c7h - jr c,ssmod3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max - jr ssmod5 -; -ssmod3: - ex de,hl ; dehl <-- dividend.hw,lw -; divuw dehl,bc ; de <-- remainder, hl <-- quotient - defb 0edh,0cbh - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative? - jr z,ssmod4 ; no -; neg hl ; yes, negate remainder - defb 0edh,4ch -ssmod4: - ex de,hl ; hl <-- quotient - or a - jr z,ssmod5 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssmod5 ; yes, quotient stays positive -; neg hl ; no, negate quotient - defb 0edh,4ch -ssmod5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 82h ; */ - defc '*/' - defw ssmod-8 -ssla: - defw $+2 ;/ - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssla1 ; positive -; neg hl ; make positive - defb 0edh,4ch -ssla1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag -; multw hl,de ; dehl <-- product (= dividend) - defb 0edh,0d2h - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssla2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 -; subw hl,de ; neg dividend.lw - defb 0edh,0deh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssla2: -; cpw hl,bc ; dividend.hw >= divisor? - defb 0edh,0c7h - jr c,ssla3 ; no overflow, continue - ld hl,0ffffh ; set quotient to max - jr ssla4 -; -ssla3: - ex de,hl ; dehl <-- dividend.hw,lw -; divuw dehl,bc ; de <-- remainder, hl <-- quotient - defb 0edh,0cbh - or a - jr z,ssla4 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssla4 ; yes, quotient stays positive -; neg hl ; no, negate quotient - defb 0edh,4ch -ssla4: - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 85h ; M/MOD - defc 'M/MOD' - defw ssla-5 -msmod: - defw docol - defw tor - defw zero - defw rr - defw uslas - defw fromr - defw swap - defw tor - defw uslas - defw fromr - defw semis -; -; -; Block moved down 2 pages -; - defb 86h ; (LINE) - defc '(LINE)' - defw msmod-8 -pline: - defw docol - defw tor - defw lit - defw 40h - defw bbuf - defw ssmod - defw fromr - defw bscr - defw star - defw plus - defw block - defw plus - defw lit - defw 40h - defw semis -; -; - defb 85h ; .LINE - defc '.LINE' - defw pline-9 -dline: - defw docol - defw pline - defw dtrai - defw type - defw semis -; -; - defb 87h ; MESSAGE - defc 'MESSAGE' - defw dline-8 -mess: - defw docol - defw warn - defw at - defw zbran ; if - defw mess1-$ - defw ddup - defw zbran ; if - defw mess2-$ - defw lit - defw 4 ; 1st message screen - defw ofset - defw at - defw bscr - defw slash - defw subb - defw dline - defw space ; endif -mess2: - defw bran ; else - defw mess3-$ -mess1: - defw pdotq - defb 6 - db 'MSG # ' - defw dot ; endif -mess3: defw semis -; -; - defb 82h ; P@ - defc 'P@' - defw mess-0ah -ptat: - defw $+2 - exx ;d save registers - pop bc ;d bc <-- port# - in l,(c) ;d l <-- data byte - ld h,0 - push hl - exx ;d restore registers - jnext -; -; - defb 82h ; P! - defc 'P!' - defw ptat-5 -ptsto: - defw $+2 - exx ;d save registers - pop bc ;d c <-- port# - pop hl ;d L <-- date byte - out (c),l - exx ;d restore registers - jnext -; -; - page -include DISCIO.FTH - page -include CONPRTIO.FTH - page -; - defb 0c1h ; ' (tick) - defb 0a7h - defw arrow-6 -tick: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw liter - defw semis -; -; - defb 86h ; FORGET - defc 'FORGET' - defw tick-4 -forg: - defw docol - defw curr - defw at - defw cont - defw at - defw subb - defw lit - defw 18h - defw qerr - defw tick - defw dup - defw fence - defw at - defw uless ;/ FORGET >8000h nw o.k. - defw lit - defw 15h - defw qerr - defw dup - defw nfa - defw dp - defw store - defw lfa - defw at - defw cont - defw at - defw store - defw semis -; -; - defb 84h ; BACK - defc 'BACK' - defw forg-9 -back: - defw docol - defw here - defw subb - defw comma - defw semis -; -; - defb 0c5h ; BEGIN - defc 'BEGIN' - defw back-7 -begin: - defw docol - defw qcomp - defw here - defw one - defw semis -; -; - defb 0c5h ; ENDIF - defc 'ENDIF' - defw begin-8 -endiff: - defw docol - defw qcomp - defw two - defw qpair - defw here - defw over - defw subb - defw swap - defw store - defw semis -; -; - defb 0c4h ; THEN - defc 'THEN' - defw endiff-8 -then: defw docol - defw endiff - defw semis -; -; - defb 0c2h ; DO - defc 'DO' - defw then-7 -do: - defw docol - defw comp - defw xdo - defw here - defw three - defw semis -; -; - defb 0c4h ; LOOP - defc 'LOOP' - defw do-5 -loop: - defw docol - defw three - defw qpair - defw comp - defw xloop - defw back - defw semis -; -; - defb 0c5h ; +LOOP - defc '+LOOP' - defw loop-7 -ploop: - defw docol - defw three - defw qpair - defw comp - defw xploo - defw back - defw semis -; -; - defb 0c5h ; UNTIL - defc 'UNTIL' - defw ploop-8 -until: - defw docol - defw one - defw qpair - defw comp - defw zbran - defw back - defw semis -; -; - defb 0c3h ; END - defc 'END' - defw until-8 -endd: - defw docol - defw until - defw semis -; -; - defb 0c5h ; AGAIN - defc 'AGAIN' - defw endd-6 -again: - defw docol - defw one - defw qpair - defw comp - defw bran - defw back - defw semis -; -; - defb 0c6h ; REPEAT - defc 'REPEAT' - defw again-8 -repea: - defw docol - defw tor - defw tor - defw again - defw fromr - defw fromr - defw twomin ;/ - defw endiff - defw semis -; -; - defb 0c2h ; IF - defc 'IF' - defw repea-9 -iff: - defw docol - defw comp - defw zbran - defw here - defw zero - defw comma - defw two - defw semis -; -; - defb 0c4h ; ELSE - defc 'ELSE' - defw iff-5 -elsee: - defw docol - defw two - defw qpair - defw comp - defw bran - defw here - defw zero - defw comma - defw swap - defw two - defw endiff - defw two - defw semis -; -; - defb 0c5h ; WHILE - defc 'WHILE' - defw elsee-7 -while: - defw docol - defw iff - defw twop - defw semis -; -; - defb 86h ; SPACES - defc 'SPACES' - defw while-8 -spacs: - defw docol - defw zero - defw max - defw ddup - defw zbran ; if - defw spax1-$ - defw zero - defw xdo ; do -spax2: - defw space - defw xloop ; loop endif - defw spax2-$ -spax1: - defw semis -; -; - defb 82h ; <# - defc '<#' - defw spacs-9 -bdigs: - defw docol - defw pad - defw hld - defw store - defw semis -; -; - defb 82h ; #> - defc '#>' - defw bdigs-5 -edigs: - defw docol - defw drop - defw drop - defw hld - defw at - defw pad - defw over - defw subb - defw semis -; -; - defb 84h ; SIGN - defc 'SIGN' - defw edigs-5 -sign: - defw docol - defw rot - defw zless - defw zbran ; if - defw sign1-$ - defw lit - defw 2dh - defw hold ; endif -sign1: - defw semis -; -; - defb 81h ; # - defc '#' - defw sign-7 -dig: - defw docol - defw base - defw at - defw msmod - defw rot - defw lit - defw 9 - defw over - defw less - defw zbran ; if - defw dig1-$ - defw lit - defw 7 - defw plus ; endif -dig1: defw lit - defw 30h - defw plus - defw hold - defw semis -; -; - defb 82h ; #S - defc '#S' - defw dig-4 -digs: - defw docol -digs1: - defw dig ; begin - defw tdup ;/ - defw orr - defw zequ - defw zbran ; until - defw digs1-$ - defw semis -; -; - defb 83h ; D.R - defc 'D.R' - defw digs-5 -ddotr: - defw docol - defw tor - defw swap - defw over - defw dabs - defw bdigs - defw digs - defw sign - defw edigs - defw fromr - defw over - defw subb - defw spacs - defw type - defw semis -; -; - defb 82h ; .R - defc '.R' - defw ddotr-6 -dotr: - defw docol - defw tor - defw stod - defw fromr - defw ddotr - defw semis -; -; - defb 82h ; D. - defc 'D.' - defw dotr-5 -ddot: - defw docol - defw zero - defw ddotr - defw space - defw semis -; -; - defb 81h ; . - defc '.' - defw ddot-5 -dot: - defw docol - defw stod - defw ddot - defw semis -; -; - defb 81h ; ? - defc '?' - defw dot-4 -ques: - defw docol - defw at - defw dot - defw semis -; -; - defb 82h ; U. - defc 'U.' - defw ques-4 -udot: defw docol - defw zero - defw ddot - defw semis -; - - defb 85h ; VLIST - defc 'VLIST' - defw udot-5 -vlist: - defw docol - defw lit - defw 80h - defw outt - defw store - defw cont - defw at - defw at -vlis1: - defw outt ; begin - defw at - defw csll - defw great - defw zbran ; if - defw vlis2-$ - defw cr - defw zero - defw outt - defw store ; endif -vlis2: - defw dup - defw iddot - defw space - defw space - defw pfa - defw lfa - defw at - defw dup - defw zequ - defw qterm - defw orr - defw zbran ; until - defw vlis1-$ - defw drop - defw semis -; -; - defb 83h ; BYE - defc 'BYE' - defw vlist-8 -bye: - defw docol ;/A - defw flush ;/A - defw fcb,lit ;/E - defw 10h,bdos ;/E close file - defw drop ;/E discard directory code - defw zero,zero ;/A - defw bdos ;/A return to CP/M - defw semis ;/A won't get this far, just for pretty -; -; - defb 84h ; LIST - defc 'LIST' - defw bye-6 -list: - defw docol,dec - defw cr,dup - defw scr,store - defw pdotq - defb 6 - db 'SCR # ' - defw dot - defw lit,10h - defw zero,xdo -list1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw ido,scr - defw at,dline - defw qterm - defw zbran,list2-$ ; if - defw leave -list2: - defw xloop,list1-$ ; endif - defw cr - defw semis -; -; - defb 85H ;INDEX - defc 'INDEX' - defw list-7 -index: - defw docol - defw lit,ff - defw emit - defw cr - defw onep,swap - defw xdo -inde1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw zero,ido - defw dline,qterm - defw zbran,inde2-$ ; if - defw leave ; endif -inde2: - defw xloop,inde1-$ - defw semis -; -; - defb 85h ; TRIAD - defc 'TRIAD' - defw index-8 -triad: - defw docol - defw lit,ff - defw emit - defw three ;/ was lit,3 - defw slash - defw three ;/ was lit,3 - defw star - defw three ;/ was lit,3 - defw over,plus - defw swap,xdo -tria1: - defw cr,ido - defw list - defw qterm - defw zbran,tria2-$ ; if - defw leave -tria2: - defw xloop,tria1-$ ; endif - defw cr - defw lit,15 - defw mess,cr - defw semis -; -; - defb 84h ; .CPU - defc '.CPU' - defw triad-8 -dotcpu: - defw docol - defw base,at - defw lit,36 - defw base,store - defw lit,22h - defw porig,tat - defw ddot - defw base,store - defw semis -; -; - defb 86h ; setclk - defc 'setclk' - defw dotcpu-7 -setclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - xor a - out (cntrl0),a ; disable c/t 0 - out (cntrl1),a ; disable c/t 1 - out (config1),a - ld hl,0ffffh - ld a,10h - out (config0),a ; cascade c/t 0 - c/t 1 - ld c,tcon0 - outw (c),hl ; load c/t 0 time constant - ld c,tcon1 - outw (c),hl ; load c/t 1 time constatnt - ld a,80h - out (config1),a ; continous mode - ld a,0e0h - out (cntrl1),a ; start 32bit counter - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 86h ; getclk - defc 'getclk' - defw setclk-9 -getclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save current i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - ld a,80h - out (cntrl1),a ; halt 32bit counter - ld c,count1 - inw hl,(c) - ld d,h - ld e,l ; de <-- count1 - ld c,count0 - inw hl,(c) ; hl <-- count0 - ld c,0 - ld a,c ; a <-- 0 - sub l ; 0 - l - ld l,a ; l <-- neg(l) - ld a,c ; a <-- 0 - sbc a,h - ld h,a ; h <-- neg(h) - ld a,c ; a <-- 0 - sbc a,e - ld e,a ; e <-- neg(e) - ld a,c ; a <-- 0 - sbc a,d - ld d,a ; d <-- neg(d), dehl <-- neg(dehl) -; divuw dehl,25000 ; scale to 1/100 secs - defb 0fdh,0edh,0fbh - defw 25000 - push hl ; result - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 84h ; TASK - defc 'TASK' - defw getclk-9 -; defw dotcpu-7 -task: - defw docol - defw semis -; -; -initdp: - defw 0 -; - end orig - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.UPD b/software/CPM/CPM08_Z80FORTH/280FORTH.UPD deleted file mode 100644 index 6bcf6e7..0000000 --- a/software/CPM/CPM08_Z80FORTH/280FORTH.UPD +++ /dev/null @@ -1,44 +0,0 @@ - 1988-NOV-12 - -Z280 fig-FORTH using random CP/M file access -------------------------------------------- - -Z280 fig-FORTH 1.1a, the first version of Z280 fig-FORTH by Edmund Ramm uses -modified Albert van der Horst random file access routines. - -All system calls are done via the BDOS, so this FORTH version should run un- -der all CP/M-80 versions. - -Words which have been deleted from the dictionary (most of them low level de- -finitions) are DRIVE, TRACK, SECTOR, SETIO, SETDRV, SEC/BLK & DENSITY. - -A BDOS call has been introduced: BDOS ( parm fcode --- dircode) where parm -stands for the parameter passed to the BDOS in the DE register pair, and -fcode is the BDOS function number. Dircode is the directory code returned by -the BDOS. This enables you to access CP/M files using high level definitions. - -BYE is now defined as a high level word which ensures that all updated -screens are written back to disc. - -COLD re-opens the screens file and issues a warning upon failure. - -FCB is another new word. It leaves the address of the current file control -block on the stack. - -REC# pushes the corresponding record count address onto the stack. - -EXTEND ( n ---) extends (sic!) the logged in screens file by n blocks, as -long as disc space permits. You could start by SAVE-ing a 0-size file at CCP -level and then expand it after you logged in same file at the time you invoke -280FORTH (e.g. 280FORTH B:SCREENS.FRT). - -The actions of all other words remain as defined in the fig-FORTH Installa- -tion Manual's Glossary, available from the FORTH Interest Group, PO Box 1105 -San Carlos, CA 94070, USA. - -Please report bugs to Edmund R a m m - P.O.Box 1338 - D-2358 Kaltenkirchen - Fed. Rep of Germany - Tel.: (04191) 1621 - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/280FORTH.Z80 b/software/CPM/CPM08_Z80FORTH/280FORTH.Z80 deleted file mode 100644 index 2539097..0000000 --- a/software/CPM/CPM08_Z80FORTH/280FORTH.Z80 +++ /dev/null @@ -1,4207 +0,0 @@ - title - subttl Adaptive version -; -; -; Modified from Z80 fig-FORTH 1.1h by EHR 880830 -; Modified frm FIG document keyed by Dennis L. Wilson 800907 -; Converted frm "8080 FIG-FORTH VERSION A0 15SEP79" -; -; fig-FORTH release 1.1 for the 8080 processor. -; -; ALL PUBLICATIONS OF THE FORTH INTEREST GROUP -; ARE PUBLIC DOMAIN. THEY MAY BE FURTHER -; DISTRIBUTED BY THE INCLUSION OF THIS CREDIT NOTICE: -; -; This publication has been made available by the -; Forth Interest Group -; P.O.Box 1105 -; San Carlos, CA 94070 -; U.S.A. -; -; Implementation on 8080 by: -; John Cassady -; 339 15th Street -; Oakland, CA 94612 -; U.S.A -; on 790528 -; Modified by: -; Kim Harris -; Acknowledgements: -; George Flammer -; Robt. D. Villwock -; ---------------------------------------------------------------------- -; Z80 Version for Cromemco CDOS & Digital Research CP/M by: -; Dennis Lee Wilson c/o -; Aristotelian Logicians -; 2631 East Pinchot Avenue -; Phoenix, AZ 85016 -; U.S.A. -; ---------------------------------------------------------------------- -; The 2 byte Z80 code for Jump Relative (JR) has been substituted for -; the 3 byte Jump (JP) wherever practical. The port I/O words P@ & P! -; have been made ROMable by use of Z80 instructions. -; ---------------------------------------------------------------------- -; Further modifications (marked ;/) by: -; Edmund Ramm -; P.O.Box 38 -; 2358 Kaltenkirchen -; Fed. Rep. of Germany 840418 -; -; 850419 changed * (star) -; 850507 added 0<>, 0>, TUCK, NIP, -ROT, CSWAP, PICK -; 850511 added -CMOVE -; -; ----------------------------------------------------------------------------- -; Disc I/O has been modified a la Albert van der Horst (HCCH) to employ -; CP/M 2.x's random access feature. -; ----------------------------------------------------------------------------- -; ----------------------------------------------------------------------------- -; -; Z280 specifics -; -; -iopreg equ 08h ; i/o page register -; -config0 equ 0e0h ; c/t 0 configuration register -cntrl0 equ 0e1h ; c/t 0 command/status register -tcon0 equ 0e2h ; c/t 0 time constatnt register -count0 equ 0e3h ; c/t 0 count-time register -config1 equ 0e8h ; c/t 1 configuration register -cntrl1 equ 0e9h ; c/t 1 command/status register -tcon1 equ 0eah ; c/t 1 time constant register -count1 equ 0ebh ; c/t 1 count-time register -; -; ----------------------------------------------------------------------------- -; -; Release & Version numbers -; -figrel equ 1 ;FIG RELEASE # -figrev equ 1 ;FIG REVISION # -usrver equ 61h ;USER VERSION # a by EHR -; -;Console & printer drivers are in external source named -;CONPRTIO.FTH & disc drivers in DISCIO.FTH. It has 4 screen -;buffers & end of memory is set to FBASE from locn. 0007H. - page -; ASCII characters used -; -abl equ 20h ;BLANK -acr equ 0dh ;CR -adot equ 2eh ;. -bell equ 07h ;^G -bsin equ 08h ;backspace chr = ^H -bsout equ 08h -dle equ 10h ;^P -lf equ 0ah ;^J -ff equ 0ch ;^L -; -; Memory allocation -; -bdoss equ 0005h ;/ system entry -nscr equ 4 ; # of 1024 byte screens -kbbuf equ 128 ; bytes/disc buffer -us equ 40h ; user variables space -rts equ 400h ; Return Stack & term buff space -co equ kbbuf+4 ; Disc buff + 2 header + 2 tail -nbuf equ nscr*400h/kbbuf ; # of buffers -bufsiz equ co*nbuf ;/ total disc buffer size - page - aseg - ;.z280 - ; PRE280 V1.11b 20-Nov-90 Copyright (c) 1990 by A.Zinser (fifi@veeble.north.de) - .Z80 -; - org 0100h -; -orig: - nop - jp cld ; vector to cold start - nop - jp wrm ; vector to warm start - defb figrel ; fig release # - defb figrev ; fig revision # - defb usrver ; user version # - defb 0eh ; implementation attributes -; -; -; -; 0eh = 0000:1110 -; --------- -; B +ORIGIN ...W:IEBA -; -; W: 0=above sufficient -; 1=other differences exist -; I: Interpreter is 0=pre- -; 1=post incrementing -; E: Addr must be even: 0 yes -; 1 no -; B: High byte @ 0=low addr. -; 1=high addr. -; A: CPU Addr. 0=BYTE -; 1=WORD -; -; -; - defw task-7 ; topmost word in FORTH vocabulary - defw bsin ; backspace chr -upinit: defw 0 ;/ init (up) -; -; * Following used by COLD; must be in same order as user variables * -; -s0init: defw 0 ;/ init (s0) -r0init: defw 0 ;/ init (r0) -tibini: defw 0 ;/ init (TIB) - defw 1fh ; init (WIDTH) - defw 0 ; init (WARNING) - defw initdp ; init (FENCE) - defw initdp ; init (dp) - defw forth+8 ; init (VOC-LINK) -; -; * END DATA USED BY COLD * -; - defw 0018h,0f600h ; Z280 CPU name (hw,lw) - ; (32 bit base 36 integer) - page -; REGISTERS -; -; FORTH Z80 FORTH PRESERVATION RULES -; ----- --- ----------------------- -; IP BC should be preserved -; accross FORTH words. -; W DE sometimes output from -; NEXT, may be altered -; b4 JP'ing to NEXT, -; input only when -; "DPUSH" called. -; SP SP should be used only as -; Data Stack accross -; FORTH words, may be -; used within FORTH -; words if restored -; b4 "NEXT" -; HL Never output frm NEXT -; input only when -; "HPUSH" called -; -; -up: defw 0 ;/ user area ptr -rpp: defw 0 ;/ return stack ptr -buf1: defw 0 ;/ address of 1st disc buffer -; -; -; COMMENT CONVENTIONS: -; -; == means "is equal to" -; <-- means assignment -; #NAME = value of name -; NAME = contents @ name -; (NAME) = contents of cell addressed by name -; cfa = code field address -; lfa = link field address -; nfa = name field address -; pfa = parameter field address -; s1 = 1st word of parameter stack -; s2 = 2nd -"- of -"- -"- -; r1 = 1st -"- of return stack -; r2 = 2nd -"- of -"- -"- -; ( above Stack posn. valid b4 & after execution of any word, not during) -; -; lsb = least significant bit -; msb = most significant bit -; lb = low byte -; hb = high byte -; lw = low word -; hw = high word -; (May be used as suffix to above names) - page -; FORTH ADDRESS INTERPRETER -; POST INCREMENTING VERSION -; -; -; -dpush: - push de -hpush: - push hl ; iy points here -next: - ld h,b ;/ w <-- (ip) ix points here - ld l,c ;/ - ;ldw hl,(hl) ;/ (hl) --> cfa - DEFB 0EDh,26h - inc bc - inc bc ;/ ip += 2 -next1: - ;ldw de,(hl) ;/ pc <-- (w) - DEFB 0EDh,16h - ex de,hl - inc de - jp (hl) ; note: de <-- cfa + 1 -; -; -jnext macro - jp (ix) - endm -; -jhpush macro - jp (iy) - endm -; - page -; FORTH DICTIONARY -; DICTIONARY FORMAT: -; -; BYTE -; ADDRESS NAME CONTENTS -; ------- ---- -------- -; (MSB=1 -; (P=PRECEDENCE BIT -; (S=SMUDGE BIT -; NFA NAME FIELD 1PS MSB=0, NAME'S 1st CHAR -; 0<2CHAR> -; ... -; 1 MSB=1, NAME'S LAST CHAR -; LFA LINK FIELD =PREVIOUS WORD'S NFA -; -;LABEL: CFA CODE FIELD =ADDR CPU CODE -; -; PFA PARAMETER <1PARAM> 1st PARAMETER BYTE -; FIELD <2PARAM> -; ... -; -; -; -dp0: - defb 83h ; LIT - defc 'LIT' - defw 0 ; lfa == 0 marks end of dictionary -lit: - defw $+2 ; s1 <-- (ip) - ld h,b - ld l,c - ;ldw hl,(hl) ; hl <-- (ip) = literal - DEFB 0EDh,26h - inc bc ;/ - inc bc ;/ ip += 2 - jhpush ; s1 <-- hl -; -; - defb 87h ; EXECUTE - defc 'EXECUTE' - defw lit-6 -exec: - defw $+2 - pop hl - jp next1 -; -; - defb 86h ; BRANCH - defc 'BRANCH' - defw exec-0ah -bran: - defw $+2 ; ip += (ip) -bran1: - ld h,b - ld l,c ; hl <-- ip - ;addw hl,(hl) ; hl <-- ip + branch offset - DEFB 0DDH - DEFB 0EDH,0C6h - ld c,l - ld b,h ; ip += branch offset - jnext -; -; - defb 87h ; 0BRANCH - defc '0BRANCH' - defw bran-9 -zbran: - defw $+2 - pop hl - ld a,l - or h - jr z,bran1 ; branch if if s1 == 0 - inc bc ; else skip branch offset - inc bc - jnext -; -; - defb 86h ; (LOOP) - defc '(LOOP)' - defw zbran-0ah -xloop: - defw $+2 - ld hl,(rpp) ; (hl) --> index = r1 - ;incw (hl) ;/ index += 1 - DEFB 0DDH - inc BC - ;ldw de,(hl) ;/ de <-- new index - DEFB 0EDh,16h - inc hl ;/ - inc hl ;/ hl --> limit(lb) - ld a,e - sub (hl) - ld a,d - inc hl ; hl --> limit(hb) - sbc a,(hl) ; index < limit? - jp m,bran1 ; yes, loop again - inc hl ; no, done - ld (rpp),hl ; discard r1 & r2 - inc bc - inc bc ; skip branch offset - jnext -; -; - defb 87h ; (+LOOP) - defc '(+LOOP)' - defw xloop-9 -xploo: - defw $+2 - pop de ; de <-- increment - ld hl,(rpp) ; hl --> index - ld a,(hl) ; index += increment - add a,e - ld (hl),a - ld e,a - inc hl - ld a,(hl) - adc a,d - ld (hl),a - inc hl ; (hl) --> limit - inc d - dec d - ld d,a ; de <-- new index - jp m,xloo2 ; if incr > 0 - ld a,e - sub (hl) ; then a <-- index - limit - ld a,d - inc hl - sbc a,(hl) - jp xloo3 - -xloo2: - ld a,(hl) ; else a <-- limit - index - sub e - inc hl - ld a,(hl) - sbc a,d -; ; if a < 0 -xloo3: - jp m,bran1 ; then loop again - inc hl ; else done - ld (rpp),hl ; discard r1 & r2 - inc bc ; skip branch offset - inc bc - jnext -; -; - defb 84h ; (DO) - defc '(DO)' - defw xploo-0ah -xdo: - defw $+2 - pop de ; de <-- initial index - ld hl,(rpp) ; hl <-- rp - dec hl - dec hl - ;pop (hl) ;/ r2 <-- limit - DEFB 0DDH - pop BC - dec hl - dec hl - ;ldw (hl),de ;/ r1 <-- initial index - DEFB 0EDh,1Eh - ld (rpp),hl ; rp -= 4 - jnext -; -; - defb 81h ; I - defc 'I' - defw xdo-7 -ido: - defw $+2 - ld hl,(rpp) - ;push (hl) ;/ s1 <-- r1, r1 unchanged - DEFB 0DDH - push BC - jnext -; -; - defb 85h ; DIGIT - defc 'DIGIT' - defw ido-4 -digit: - defw $+2 - pop hl ; l <-- s1.lb = base value - pop de ; e <-- s2.lb = chr to be converted - ld a,e ; a <-- chr - sub '0' ; >= 0? - jr c,digi2 ;/ < 0 is invalid - cp 0ah ; > 9? - jr c,digi1 ;/ no, test base value - sub 07h ; gap between '9' & 'A', nw 'A'=0ah - cp 0ah ; >= 'A'? - jr c,digi2 ;/ chrs btwn '9' & 'A' are invalid -digi1: - cp l ; < base value? - jr nc,digi2 ;/ no, invalid - ld e,a ; s2 <-- de = converted digit - ld hl,0001h ; s1 <-- true - jp dpush -; -digi2: - ld l,h ; hl <-- false - jhpush ; s1 <-- false -; -; - defb 86h ; (FIND) (2-1)FAILURE - defc '(FIND)' ; (2-3)SUCCESS - defw digit-8 -pfind: - defw $+2 - pop de ; de <-- nfa -pfin1: - pop hl ; hl <-- string addr - push hl ; save for next iteration - ld a,(de) - xor (hl) ; filter differences - and 3fh ; mask msb & precedence bit - jr nz,pfin4 ; lengths differ -pfin2: - inc hl ; hl --> next string chr - inc de ; de --> next name field chr - ld a,(de) - xor (hl) ; filter differences - add a,a ; shift msbit into carry - jr nz,pfin3 ; no match - jr nc,pfin2 ; match so far, loop agn - ld hl,0005h ; string matches - add hl,de ; (sp) <-- pfa - ex (sp),hl -pfin6: - dec de ; de --> nfa - ld a,(de) - or a ; msb=1? =length byte - jp p,pfin6 ; no, try next chr - ld e,a ; e <-- length byte - ld d,00h - ld hl,0001h ; hl <-- true - jp dpush ; name field found, return -; -; above name field not a match, try next one -; -pfin3: - jr c,pfin5 ; carry=end of name field -pfin4: - inc de ; find name field end - ld a,(de) - or a ; msb=1? - jp p,pfin4 ; no, loop -pfin5: - inc de ; de <-- lfa - ex de,hl - ;ldw de,(hl) ;/ de <-- lfa - DEFB 0EDh,16h - ld a,d - or e ; end of dictionary (lfa = 0)? - jr nz,pfin1 ; no, try previous definition - pop hl ; drop string address - ld hl,0 ; hl <-- false - jhpush ; no match found, return -; -; - defb 87h ; ENCLOSE - defc 'ENCLOSE' - defw pfind-9 -encl: - defw $+2 - pop de ; de <-- s1 = delimiter chr - pop hl ; hl <-- s2 = addr of text to scan - push hl ; s4 <-- addr - ld a,e - ld d,a ; d <-- delim chr - ld e,-1 ; init chr offset counter - dec hl ; hl <-- addr - 1 -encl1: - inc hl ; skip over leading delim chrs - inc e - cp (hl) ; delim chr? - jr z,encl1 ; yes, loop - ld d,0 - push de ; s3 <-- e = offset to 1st non delim - ld d,a ; d <-- delim chr - ld a,(hl) - and a ; 1st non-delim=null? - jr nz,encl2 ; no - ld d,0 ; yes - inc e - push de ; s2 <-- offset to byte following null - dec e - push de ; s1 <-- offset to null - jnext -; -encl2: - ld a,d ; A <-- delim chr - inc hl ; hl <-- next chr's address - inc e ; e <-- offset to next chr - cp (hl) ; delim chr? - jr z,encl4 ; yes - ld a,(hl) - and a ; null? - jr nz,encl2 ; no, continue scan -encl3: - ld d,0 - push de ; s2 <-- offset to null - push de ; s1 <-- offset to null - jnext -; -encl4: - ld d,0 - push de ; s2 <-- offset to byte following text - inc e - push de ; s1 <-- offset 2 bytes aft end of word - jnext -; -; - defb 84h ; EMIT - defc 'EMIT' - defw encl-0ah -emit: - defw docol - defw pemit - defw one,outt - defw pstor,semis -; -; - defb 83h ; KEY - defc 'KEY' - defw emit-7 -key: - defw $+2 - jp pkey -; -; - defb 89h ; ?TERMINAL - defc '?TERMINAL' - defw key-6 -qterm: - defw $+2 - ld hl,0 - jp pqter -; -; - defb 82h ; CR - defc 'CR' - defw qterm-0ch -cr: - defw $+2 - jp pcr -; -; - defb 85h ; CMOVE - defc 'CMOVE' - defw cr-5 -cmove: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- s1 = # of chrs - pop de ; de <-- s2 = dest addr - pop hl ;/ hl <-- s3 = source addr - ld a,b - or c ; bc=0? - jr z,cmove1 ; yes, nothing to move - ldir ;/ xfer string -cmove1: - exx ;/ restore ip - jnext -; -; - defb 86h ;/ -CMOVE ( from to count --- ) - defc '-CMOVE' - defw cmove-8 -bcmov: - defw $+2 - exx ; save ip - pop bc ; bc <-- count - pop de ; de <-- destination - pop hl ; hl <-- source - ld a,b - or c ; bc =0? - jr z,bcmov1 ; yes, nothing to move - add hl,bc - dec hl ; hl --> hi end of source block - ex de,hl - add hl,bc - dec hl - ex de,hl ; de --> hi end of dest. block - lddr ; (de) <-- (hl), --hl,bc until bc=0 -bcmov1: - exx ; restore ip - jnext -; -; - defb 82h ; U* 16*16 unsigned multiply - defc 'U*' ; with 32 bit result - defw bcmov-9 -ustar: - defw $+2 - pop de ; de <-- multiplier - pop hl ; hl <-- multiplicant - ;multuw hl,de ;/ - DEFB 0EDH,0D3h - ex de,hl ;/ de <-- product.lw, hl <-- product.hw - jp dpush ; s2,s1 <-- product.lw,hw -; -; - defb 82h ; U/ ( ud u1 -- urem uq ) - defc 'U/' - defw ustar-5 -uslas: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- divisor - pop hl ; hl <-- dividend.hw - pop de ; de <-- dividend.lw - ;cpw hl,bc ;/ dividend.hw >= divisor? - DEFB 0EDH,0C7h - jr c,usla1 ; no, go ahead - ld hl,0ffffh ; yes, overflow - ld d,h - ld e,l ;/ set rem & quot to max - jr usla2 -usla1: - ex de,hl ;/ de,hl <-- dividend.hw,lw - ;divuw dehl,bc ;/ de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh -usla2: - push de ;/ s2 <-- remainder - push hl ;/ s1 <-- quotient - exx ;/ restore ip - jnext -; -; - defb 83h ; AND - defc 'AND' - defw uslas-5 -andd: - defw $+2 ; s1 <-- s1 AND s2 - pop de - pop hl - ld a,e - and l - ld l,a - ld a,d - and h - ld h,a - jhpush -; -; - defb 82h ; OR - defc 'OR' - defw andd-6 -orr: - defw $+2 ; s1 <-- s1 OR s2 - pop de - pop hl - ld a,e - or l - ld l,a - ld a,d - or h - ld h,a - jhpush -; -; - defb 83h ; XOR - defc 'XOR' - defw orr-5 -xorr: - defw $+2 ; s1 <-- s1 XOR s2 - pop de - pop hl - ld a,e - xor l - ld l,a - ld a,d - xor h - ld h,a - jhpush -; -; - defb 83h ; SP@ - defc 'SP@' - defw xorr-6 -spat: - defw $+2 - ld hl,0 - add hl,sp ; hl <-- sp - jhpush ; s1 <-- sp -; -; - defb 83h ; SP! - defc 'SP!' - defw spat-6 -spsto: - defw $+2 ; sp <-- s0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,6 - add hl,de ; hl --> s0 - ;ldw sp,(hl) ;/ sp <-- s0 - DEFB 0EDh,36h - jnext -; -; - defb 83h ; RP@ - defc 'RP@' - defw spsto-6 -rpat: - defw $+2 - ld hl,(rpp) - jhpush ; s1 <-- rp -; -; - defb 83h ; RP! - defc 'RP!' - defw rpat-6 -rpsto: - defw $+2 ; rp <-- r0 (user variable) - ld hl,(up) ; hl <-- user variables base address - ld de,0008h - add hl,de ; hl --> r0 - ;ldw hl,(hl) ;/ hl <-- r0 - DEFB 0EDh,26h - ld (rpp),hl ;/ rp <-- r0 - jnext -; -; - defb 82h ; ;S - defc ';S' - defw rpsto-6 -semis: - defw $+2 ; ip <-- r1 - ld hl,(rpp) - ;ldw bc,(hl) ;/ bc <-- r1 - DEFB 0EDh,06h - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 85h ; LEAVE - defc 'LEAVE' - defw semis-5 -leave: - defw $+2 ; limit <-- index - ld hl,(rpp) - ;ldw de,(hl) ;/ de <-- r1 (= index) - DEFB 0EDh,16h - inc hl - inc hl - ;ldw (hl),de ;/ r2 (= limit) <-- index - DEFB 0EDh,1Eh - jnext -; -; - defb 82h ; >R - defc '>R' - defw leave-8 -tor: - defw $+2 - ld hl,(rpp) - dec hl - dec hl - ;pop (hl) ;/ r1 <-- s1 - DEFB 0DDH - pop BC - ld (rpp),hl ; rp -= 2 - jnext -; -; - defb 82h ; R> - defc 'R>' - defw tor-5 -fromr: - defw $+2 - ld hl,(rpp) - ;push (hl) ;/ s1 <-- r1 - DEFB 0DDH - push BC - inc hl - inc hl - ld (rpp),hl ; rp += 2 - jnext -; -; - defb 81h ; R - defc 'R' - defw fromr-5 -rr: - defw ido+2 -; -; - defb 82h ; 0= - defc '0=' - defw rr-4 -zequ: - defw $+2 - pop de - ld hl,0 - ;cpw hl,de ;/ - DEFB 0EDH,0D7h - jr nz,zequ1 - inc l ; hl <-- true -zequ1: - jhpush -; -; - defb 83h ;/ 0<> - defc '0<>' - defw zequ-5 -znequ: - defw $+2 - pop de - ld hl,0 - ;cpw hl,de ;/ - DEFB 0EDH,0D7h - jr z,znequ1 - inc l ; hl <-- true -znequ1: - jhpush -; -; - defb 82h ; 0< - defc '0<' - defw znequ-6 -zless: - defw $+2 - pop af ;/ a <-- s1.hb - rla ;/ carry <-- bit 7 - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry - jhpush -; -; - defb 82h ;/ 0> - defc '0>' - defw zless-5 -zgt: - defw $+2 - pop de - ld hl,0 - ;cpw hl,de ;/ - DEFB 0EDH,0D7h - jp p,zgt1 ;/ <= 0 - jp pe,zgt1 ;/ 8000h special case - inc l ;/ hl <-- true -zgt1: - jhpush -; -; - defb 81h ;+ - defc '+' - defw zgt-5 -plus: - defw $+2 - pop de - pop hl - add hl,de - jhpush -; -; - defb 82h ; D+ ( d1l d1h d2l d2h -- d3l d3h) - defc 'D+' - defw plus-4 -dplus: - defw $+2 - exx ;/ save ip - pop bc ; bc <-- d2.hw - pop hl ; hl <-- d2.lw - pop af ;d af <-- d1.hw - pop de ; de <-- d1.lw - push af ;/ s1 <-- d1.hw - add hl,de ; hl <-- d2.lw + d1.lw (= d3.lw) - ex de,hl ; de <-- d3.lw - pop hl ; hl <-- d1.hw - adc hl,bc ;/ hl <-- d1.hw + d2.hw +carry (=d3.hw) - push de ; s2 <-- d3.lw - push hl ;/ s1 <-- d3.hw - exx ;/ restore ip - jnext -; -; - defb 85h ; MINUS - defc 'MINUS' - defw dplus-5 -minus: - defw $+2 - pop hl ;/ - ;neg hl ;/ - DEFB 0EDH,4Ch - jhpush -; -; - defb 86h ; DMINUS - defc 'DMINUS' - defw minus-8 -dminu: - defw $+2 - exx ;/ save ip - pop de ;/ de <-- d1.hw - pop bc ;/ bc <-- d1.lw - ld hl,0 ;/ - ;subw hl,bc ;/ - DEFB 0EDH,0CEh - push hl ; s2 <-- d2.lw - ld hl,0 ;/ - sbc hl,de ;/ - push hl ; s1 <-- d2.hw - exx ;/ - jnext -; -; - defb 84h ; OVER - defc 'OVER' - defw dminu-9 -over: - defw $+2 - ;ldw hl,(sp+2) ;/ - DEFB 0EDh,04h - DEFW +2 - jhpush ;/ -; -; - defb 84h ; DROP - defc 'DROP' - defw over-7 -drop: - defw $+2 - inc sp - inc sp ;/ faster on z280 than dummy pop - jnext -; -; - defb 84h ; SWAP - defc 'SWAP' - defw drop-7 -swap: - defw $+2 - pop hl - ex (sp),hl - jhpush -; -; - defb 83h ; DUP - defc 'DUP' - defw swap-7 -dup: - defw $+2 - ;ldw hl,(sp+0) ;/ - DEFB 0EDh,04h - DEFW +0 - jhpush -; -; - defb 84h ;/ TUCK ( n1 n2 --- n2 n1 n2) - defc 'TUCK' - defw dup-6 -tuck: - defw $+2 - pop hl ;/ hl <-- s1 - pop de ;/ de <-- s2 - push hl ;/ s3 <-- hl - jp dpush -; -; - defb 83h ;/ NIP ( n1 n2 --- n2) - defc 'NIP' - defw tuck-7 -nip: - defw $+2 - pop hl ; hl <-- s1 - ;ldw (sp+0),hl ;/ s1 <-- hl - DEFB 0EDh,05h - DEFW +0 - jnext -; -; - defb 84h ;/ -ROT ( n1 n2 n3 --- n3 n1 n2) - defc '-ROT' - defw nip-6 -mrot: - defw $+2 - pop hl - pop de - ex (sp),hl - ex de,hl - jp dpush -; -; - defb 85h ;/ CSWAP ( n1 --- n1, bytes swapped) - defc 'CSWAP' - defw mrot-7 -cswap: - defw $+2 - pop hl - ;ex h,l ;/ - DEFB 0EDH,0EFh - jhpush -; -; - defb 84h ;/ PICK ( nn...n0 k --- nn..n0 nk) - defc 'PICK' - defw cswap-8 -pick: - defw $+2 - pop hl ; hl <-- depth - add hl,hl ; adjust to word size - add hl,sp ; offset into stack - ;push (hl) ;/ - DEFB 0DDH - push BC - jnext -; -; - defb 84h ; 2DUP - defc '2DUP' - defw pick-7 -tdup: - defw $+2 - pop hl - pop de - push de - push hl - jp dpush -; -; - defb 82h ; +! - defc '+!' - defw tdup-7 -pstor: - defw $+2 - pop hl ; hl --> variable - pop de ; de <-- number - ld a,(hl) - add a,e - ld (hl),a - inc hl - ld a,(hl) - adc a,d - ld (hl),a ; (hl) += number - jnext -; -; - defb 86h ; TOGGLE - defc 'TOGGLE' - defw pstor-5 -toggl: - defw $+2 - pop de ; e <-- bit pattern - pop hl ; hl --> address - ld a,(hl) - xor e - ld (hl),a - jnext -; -; - defb 81h ; @ - defc '@' - defw toggl-9 -at: - defw $+2 - pop hl - ;push (hl) ;/ - DEFB 0DDH - push BC - jnext -; -; - defb 82h ; C@ - defc 'C@' - defw at-4 -cat: - defw $+2 - pop hl - ld l,(hl) - ld h,0 - jhpush -; -; - defb 82h ; 2@ - defc '2@' - defw cat-5 -tat: - defw $+2 - pop hl ; hl --> address - ;ldw de,(hl) ;/ de <-- d.hw - DEFB 0EDh,16h - inc hl - inc hl ; hl --> d.lw - ;push (hl) ;/ s2 <-- d.lw - DEFB 0DDH - push BC - push de ;/ s1 <-- d.hw - jnext -; -; - defb 81h ; ! - defc '!' - defw tat-5 -store: - defw $+2 - pop hl ; hl --> address - ;pop (hl) ;/ - DEFB 0DDH - pop BC - jnext -; -; - defb 82h ; C! - defc 'C!' - defw store-4 -cstor: - defw $+2 - pop hl ; hl --> address - pop de ; e <-- char - ld (hl),e - jnext -; -; - defb 82h ; 2! - defc '2!' - defw cstor-5 -tstor: - defw $+2 - pop hl ; hl --> address - ;pop (hl) ;/ store d.hw - DEFB 0DDH - pop BC - inc hl - inc hl - ;pop (hl) ;/ store d.lw - DEFB 0DDH - pop BC - jnext -; -; - defb 0c1h ; : - defc ':' - defw tstor-5 -colon: - defw docol - defw qexec - defw scsp - defw curr - defw at - defw cont - defw store - defw creat - defw rbrac - defw pscod -docol: - ld hl,(rpp) - dec hl - dec hl - ;ldw (hl),bc ;/ save return address - DEFB 0EDh,0Eh - ld (rpp),hl - inc de - ld c,e - ld b,d - jnext -; -; - defb 0c1h ; ; - defc ';' - defw colon-4 -semi: - defw docol - defw qcsp - defw comp - defw semis - defw smudg - defw lbrac - defw semis -; -; - defb 84h ; NOOP - defc 'NOOP' - defw semi-4 -noop: - defw docol - defw semis -; -; - defb 88h ; CONSTANT - defc 'CONSTANT' - defw noop-7 -con: - defw docol - defw creat - defw smudg - defw comma - defw pscod -docon: - inc de - ex de,hl - ;push (hl) ;/ - DEFB 0DDH - push BC - jnext -; -; - defb 88h ; VARIABLE - defc 'VARIABLE' - defw con-0bh -var: - defw docol - defw con - defw pscod -dovar: - inc de - push de - jnext -; -; - defb 84h ; USER - defc 'USER' - defw var-0bh -user: - defw docol - defw con - defw pscod -douse: - inc de - ex de,hl - ld l,(hl) ;/ - ld h,0 ;/ - ;addw hl,(up) ;/ - DEFB 0DDH - DEFB 0EDH,0D6h - DEFW UP - jhpush -; -; - defb 81h ; 0 - defc '0' - defw user-7 -zero: - defw $+2 ;/ - ;push 0000h ;/ - DEFB 0FDH - push AF - DEFW 0000H - jnext -; -; - defb 81h ; 1 - defc '1' - defw zero-4 -one: - defw $+2 ;/ - ;push 0001h ;/ - DEFB 0FDH - push AF - DEFW 0001H - jnext -; -; - defb 81h ; 2 - defc '2' - defw one-4 -two: - defw $+2 ;/ - ;push 0002h ;/ - DEFB 0FDH - push AF - DEFW 0002H - jnext -; -; - defb 81h ; 3 - defc '3' - defw two-4 -three: - defw $+2 ;/ - ;push 0003h ;/ - DEFB 0FDH - push AF - DEFW 0003H - jnext -; -; - defb 82h ; BL - defc 'BL' - defw three-4 -bl: - defw docon - defw 20h -; -; - defb 83h ; C/L - defc 'C/L' - defw bl-5 -csll: - defw docon - defw 64 -; -; - defb 85h ; FIRST - defc 'FIRST' - defw csll-6 -first: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; LIMIT - defc 'LIMIT' - defw first-8 -limit: - defw docon - defw 0 ;/ set by CLD -; -; - defb 85h ; B/BUF - defc 'B/BUF' - defw limit-8 -bbuf: - defw docon - defw kbbuf -; -; - defb 85h ; B/SCR - defc 'B/SCR' - defw bbuf-8 -bscr: - defw docon - defw 400h/kbbuf -; -; - defb 87h ; +ORIGIN - defc '+ORIGIN' - defw bscr-8 -porig: - defw docol - defw lit - defw orig - defw plus - defw semis -; -; USER VARIABLES -; - defb 82h ; S0 - defc 'S0' - defw porig-0ah -szero: - defw douse - defw 6 -; -; - defb 82h ; R0 - defc 'R0' - defw szero-5 -rzero: - defw douse - defw 8 -; -; - defb 83h ; TIB - defc 'TIB' - defw rzero-5 -tib: - defw douse - defb 0ah -; -; - defb 85h ; WIDTH - defc 'WIDTH' - defw tib-6 -width: - defw douse - defb 0ch -; -; - defb 87h ; WARNING - defc 'WARNING' - defw width-8 -warn: - defw douse - defb 0eh -; -; - defb 85h ; FENCE - defc 'FENCE' - defw warn-0ah -fence: - defw douse - defb 10h -; -; - defb 82h ; DP - defc 'DP' - defw fence-8 -dp: - defw douse - defb 12h -; -; - defb 88h ; VOC-LINK - defc 'VOC-LINK' - defw dp-5 -vocl: - defw douse - defw 14h -; -; - defb 83h ; BLK - defc 'BLK' - defw vocl-0bh -blk: - defw douse - defb 16h -; -; - defb 82h ; IN - defc 'IN' - defw blk-6 -inn: - defw douse - defb 18h -; -; - defb 83h ; OUT - defc 'OUT' - defw inn-5 -outt: - defw douse - defb 1ah -; -; - defb 83h ; SCR - defc 'SCR' - defw outt-6 -scr: - defw douse - defb 1ch -; -; - defb 86h ; OFFSET - defc 'OFFSET' - defw scr-6 -ofset: - defw douse - defb 1eh -; -; - defb 87h ; CONTEXT - defc 'CONTEXT' - defw ofset-9 -cont: - defw douse - defb 20h -; -; - defb 87h ; CURRENT - defc 'CURRENT' - defw cont-0ah -curr: - defw douse - defb 22h -; -; - defb 85h ; STATE - defc 'STATE' - defw curr-0ah -state: - defw douse - defb 24h -; -; - defb 84h ; BASE - defc 'BASE' - defw state-8 -base: - defw douse - defb 26h -; -; - defb 83h ; DPL - defc 'DPL' - defw base-7 -dpl: - defw douse - defb 28h -; -; - defb 83h ; FLD - defc 'FLD' - defw dpl-6 -fld: - defw douse - defb 2ah -; -; - defb 83h ; CSP - defc 'CSP' - defw fld-6 -cspp: - defw douse - defb 2ch -; - - defb 82h ; R# - defc 'R#' - defw cspp-6 -rnum: - defw douse - defb 2eh -; - - defb 83h ; HLD - defc 'HLD' - defw rnum-5 -hld: - defw douse - defw 30h -; -; END OF USER VARIABLES -; - defb 82h ; 1+ - defc '1+' - defw hld-6 -onep: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ; 2+ - defc '2+' - defw onep-5 -twop: - defw $+2 ;/ - pop hl ;/ - inc hl ;/ - inc hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 1- - defc '1-' ;/ - defw twop-5 ;/ -onemin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2- - defc '2-' ;/ - defw onemin-5 ;/ -twomin: - defw $+2 ;/ - pop hl ;/ - dec hl ;/ - dec hl ;/ - jhpush ;/ -; -; - defb 82h ;/ 2* - defc '2*' ;/ - defw twomin-5 ;/ -twosta: - defw $+2 ;/ - pop hl ;/ - add hl,hl ;/ asl hl - jhpush ;/ -; -; - defb 82h ;/ 2/ - defc '2/' ;/ - defw twosta-5 ;/ -twosla: - defw $+2 ;/ - pop hl ;/ - bit 7,h ;/ negative? - jr z,twosl1 ;/ no - inc hl ;/ yes, add 1 -twosl1: - sra h ;/ - rr l ;/ asr hl - jhpush ;/ -; -; - defb 84h ; HERE - defc 'HERE' - defw twosla-5 -here: - defw docol - defw dp - defw at - defw semis -; -; - defb 85h ; ALLOT - defc 'ALLOT' - defw here-7 -allot: - defw docol - defw dp - defw pstor - defw semis -; -; - defb 81h ; , - defc ',' - defw allot-8 -comma: - defw docol - defw here - defw store - defw two - defw allot - defw semis -; - - defb 82h ; C, - defc 'C,' - defw comma-4 -ccomm: - defw docol - defw here - defw cstor - defw one - defw allot - defw semis -; -; - defb 81h ; - - defc '-' - defw ccomm-5 -subb: - defw $+2 - pop de - pop hl - ;subw hl,de ;/ - DEFB 0EDH,0DEh - jhpush -; -; - defb 81h ; = - defc '=' - defw subb-4 -equal: - defw $+2 ;/ - pop de ;/ - pop hl ;/ - ;subw hl,de ;/ - DEFB 0EDH,0DEh - ld hl,0 ; hl <-- false - jr nz,equal1 - inc l ;/ hl <-- true -equal1: - jhpush -; -; - defb 81h ; < - defc '<' - defw equal-4 -less: - defw $+2 - pop de - pop hl ; hl de < - ld a,d - xor h ; one operand negative? - jp m,less1 ; yes, determine which - ;subw hl,de ;/ - DEFB 0EDH,0DEh -less1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,less2 - inc l ;/ hl <-- true -less2: - jhpush -; -; - defb 82h ; U< - defc 'U<' - defw less-4 -uless: - defw $+2 - pop de - pop hl ;/ hl de U< - ;subw hl,de ;/ - DEFB 0EDH,0DEh - ld hl,0 ; hl <-- false - rl l ;/ bit 0 <-- carry -uless1: - jhpush -; -; - defb 81h ; > - defc '>' - defw uless-5 -great: - defw $+2 - pop hl ;/ - pop de ;/ hl de > (= de hl < ) - ld a,d - xor h ; one operand negative? - jp m,great1 ; yes, determine which - ;subw hl,de ;/ - DEFB 0EDH,0DEh -great1: - bit 7,h ;/ h negative? - ld hl,0 ; hl <-- false - jr z,great2 - inc l ;/ hl <-- true -great2: - jhpush -; -; - defb 83h ; ROT ( n1 n2 n3 --- n2 n3 n1) - defc 'ROT' - defw great-4 -rot: - defw $+2 - pop de ; de <-- n3 - pop hl ; hl <-- n2 - ex (sp),hl ; s1 <-- n2, hl <-- n1 - jp dpush ; s2 <-- n3, s3 <-- n1 -; -; - defb 85h ; SPACE - defc 'SPACE' - defw rot-6 -space: - defw docol - defw bl - defw emit - defw semis -; -; - defb 84h ; -DUP - defc '-DUP' - defw space-8 -ddup: - defw $+2 ;/ - ;ldw hl,(sp+0) ;/ - DEFB 0EDh,04h - DEFW +0 - ld a,h ;/ - or l ;/ hl = 0? - jr z,ddup1 ;/ yes, don't dup - push hl ;/ -ddup1: - jnext -; -; - defb 88h ; TRAVERSE - defc 'TRAVERSE' - defw ddup-7 -trav: - defw docol - defw swap -trav1: - defw over ; begin - defw plus - defw lit - defw 7fh - defw over - defw cat - defw less - defw zbran ; until - defw trav1-$ - defw swap - defw drop - defw semis -; -; - defb 86h ; LATEST - defc 'LATEST' - defw trav-0bh -lates: - defw docol - defw curr - defw at - defw at - defw semis -; -; - defb 83h ; LFA - defc 'LFA' - defw lates-9 -lfa: - defw $+2 - pop hl ;/ hl <-- pfa - ;subw hl,4 ;/ - DEFB 0FDH - DEFB 0EDH,0FEh - DEFW 4 - jhpush ;/ s1 <-- lfa -; -; - defb 83h ; CFA - defc 'CFA' - defw lfa-6 -cfa: - defw docol - defw twomin ;/ - defw semis -; -; - defb 83h ; NFA - defc 'NFA' - defw cfa-6 -nfa: - defw docol - defw lit - defw 5 - defw subb - defw lit - defw -1 - defw trav - defw semis -; -; - defb 83h ; PFA - defc 'PFA' - defw nfa-6 -pfa: - defw docol - defw one - defw trav - defw lit - defw 5 - defw plus - defw semis -; -; - defb 84h ; !CSP - defc '!CSP' - defw pfa-6 -scsp: - defw docol - defw spat - defw cspp - defw store - defw semis -; -; - defb 86h ; ?ERROR - defc '?ERROR' - defw scsp-7 -qerr: - defw docol - defw swap - defw zbran ; if - defw qerr1-$ - defw error - defw bran ; else - defw qerr2-$ -qerr1: - defw drop ; endif -qerr2: - defw semis -; -; - defb 85h ; ?COMP - defc '?COMP' - defw qerr-9 -qcomp: - defw docol - defw state - defw at - defw zequ - defw lit - defw 11h - defw qerr - defw semis -; -; - defb 85h ; ?EXEC - defc '?EXEC' - defw qcomp-8 -qexec: - defw docol - defw state - defw at - defw lit - defw 12h - defw qerr - defw semis -; -; - defb 86h ; ?PAIRS - defc '?PAIRS' - defw qexec-8 -qpair: - defw docol - defw subb - defw lit - defw 13h - defw qerr - defw semis -; -; - defb 84h ; ?CSP - defc '?CSP' - defw qpair-9 -qcsp: - defw docol - defw spat - defw cspp - defw at - defw subb - defw lit - defw 14h - defw qerr - defw semis -; -; - defb 88h ; ?LOADING - defc '?LOADING' - defw qcsp-7 -qload: - defw docol - defw blk - defw at - defw zequ - defw lit - defw 16h - defw qerr - defw semis -; -; - defb 87h ; COMPILE - defc 'COMPILE' - defw qload-0bh -comp: - defw docol - defw qcomp - defw fromr - defw dup - defw twop - defw tor - defw at - defw comma - defw semis -; -; - defb 0c1h ; [ - defc '[' - defw comp-0ah -lbrac: - defw docol - defw zero - defw state - defw store - defw semis -; -; - defb 81h ; ] - defc ']' - defw lbrac-4 -rbrac: - defw docol - defw lit,0c0h - defw state,store - defw semis -; -; - defb 86h ; SMUDGE - defc 'SMUDGE' - defw rbrac-4 -smudg: - defw docol - defw lates - defw lit - defw 20h - defw toggl - defw semis -; -; - defb 83h ; HEX - defc 'HEX' - defw smudg-9 -hex: - defw docol - defw lit - defw 10h - defw base - defw store - defw semis -; -; - defb 87h ; DECIMAL - defc 'DECIMAL' - defw hex-6 -dec: - defw docol - defw lit - defw 0ah - defw base - defw store - defw semis -; -; - defb 87h ; (;CODE) - defc '( ;CODE)' - defw dec-0ah -pscod: - defw docol - defw fromr - defw lates - defw pfa - defw cfa - defw store - defw semis -; -; - defb 0c5h ; ;CODE - defc ';CODE' - defw pscod-0ah -semic: - defw docol - defw qcsp - defw comp - defw pscod - defw lbrac -semi1: - defw noop ; assembler - defw semis -; -; - defb 87h ; - defc 'DOES>' - defw build-0ah -does: - defw docol - defw fromr - defw lates - defw pfa - defw store - defw pscod -dodoe: - ld hl,(rpp) - dec hl - dec hl - ;ldw (hl),bc ;/ - DEFB 0EDh,0Eh - ld (rpp),hl - inc de - ex de,hl - ;ldw bc,(hl) ;/ - DEFB 0EDh,06h - inc hl - inc hl - jhpush -; -; - defb 85h ; COUNT - defc 'COUNT' - defw does-8 -count: - defw docol - defw dup - defw onep - defw swap - defw cat - defw semis -; -; - defb 84h ; TYPE - defc 'TYPE' - defw count-8 -type: - defw docol - defw ddup - defw zbran ; if - defw type1-$ - defw over - defw plus - defw swap - defw xdo ; do -type2: - defw ido - defw cat - defw emit - defw xloop ; loop - defw type2-$ - defw bran ; else - defw type3-$ -type1: - defw drop ; endif -type3: - defw semis -; -; - defb 89h ; -TRAILING - defc '-TRAILING' - defw type-7 -dtrai: - defw docol - defw dup - defw zero - defw xdo ; do -dtra1: - defw tdup ;/ - defw plus - defw onemin ;/ - defw cat - defw bl - defw subb - defw zbran ; if - defw dtra2-$ - defw leave - defw bran ; else - defw dtra3-$ -dtra2: - defw onemin ;/ -dtra3: - defw xloop ; loop - defw dtra1-$ - defw semis -; -; - defb 84h ; (.") - defc '(.")' - defw dtrai-0ch -pdotq: - defw docol - defw rr - defw count - defw dup - defw onep - defw fromr - defw plus - defw tor - defw type - defw semis -; -; - defb 0c2h ; ." - defc '."' - defw pdotq-7 -dotq: - defw docol - defw lit - defw 22h - defw state - defw at - defw zbran ; if - defw dotq1-$ - defw comp - defw pdotq - defw word - defw here - defw cat - defw onep - defw allot - defw bran ; else - defw dotq2-$ -dotq1: - defw word - defw here - defw count - defw type ; endif -dotq2: - defw semis -; -; - defb 86h ; EXPECT - defc 'EXPECT' - defw dotq-5 -expec: - defw docol - defw over - defw plus - defw over - defw xdo ; do -expe1: - defw key - defw dup - defw lit - defw 0eh - defw porig - defw at - defw equal - defw zbran ; if - defw expe2-$ - defw drop - defw dup - defw ido - defw equal - defw dup - defw fromr - defw twomin ;/ - defw plus - defw tor - defw zbran ; if - defw expe6-$ - defw lit - defw bell - defw bran ; else - defw expe7-$ -expe6: - defw lit - defw bsout ; endif -expe7: - defw bran ; else - defw expe3-$ -expe2: - defw dup - defw lit - defw acr ;/ - defw equal - defw zbran ; if - defw expe4-$ - defw leave - defw drop - defw bl - defw zero - defw bran ; else - defw expe5-$ -expe4: - defw dup ; endif -expe5: - defw ido - defw cstor - defw zero - defw ido - defw onep - defw store ; endif -expe3: - defw emit - defw xloop ; loop - defw expe1-$ - defw drop - defw semis -; -; - defb 85h ; QUERY - defc 'QUERY' - defw expec-9 -query: - defw docol - defw tib - defw at - defw lit - defw 50h - defw expec - defw zero - defw inn - defw store - defw semis -; -; - defb 0c1h ; NULL - defb 80h - defw query-8 -null: - defw docol - defw blk - defw at - defw zbran ; if - defw null1-$ - defw one - defw blk - defw pstor - defw zero - defw inn - defw store - defw blk - defw at - defw bscr - defw onemin ;/ - defw andd - defw zequ - defw zbran ; if - defw null2-$ - defw qexec - defw fromr - defw drop ; endif -null2: - defw bran ; else - defw null3-$ -null1: - defw fromr - defw drop ; endif -null3: - defw semis -; - defb 84h ; FILL - defc 'FILL' - defw null-4 -fill: - defw $+2 - exx ;/ save ip - pop de ;/ e <-- byte - pop bc ; bc <-- quantity - pop hl ;/ hl <-- address -fill1: - ld a,b - or c ; qty == 0? - jr z,fill2 ; yes, nothing (more) to fill - ld (hl),e ;/ (hl) <-- byte - inc hl ; inc pointer - dec bc ; dec counter - jp fill1 ;/ -fill2: - exx ;/ restore ip - jnext -; -; - defb 85h ; ERASE - defc 'ERASE' - defw fill-7 -erasee: - defw docol - defw zero - defw fill - defw semis -; -; - defb 86h ; BLANKS - defc 'BLANKS' - defw erasee-8 -blank: - defw docol - defw bl - defw fill - defw semis -; -; - defb 84h ; HOLD - defc 'HOLD' - defw blank-9 -hold: - defw docol - defw lit - defw -1 - defw hld - defw pstor - defw hld - defw at - defw cstor - defw semis -; -; - defb 83h ; PAD - defc 'PAD' - defw hold-7 -pad: - defw docol - defw here - defw lit - defw 44h - defw plus - defw semis -; -; - defb 84h ; WORD - defc 'WORD' - defw pad-6 -word: - defw docol - defw blk - defw at - defw zbran ; if - defw word1-$ - defw blk - defw at - defw block - defw bran ; else - defw word2-$ -word1: - defw tib - defw at ; endif -word2: - defw inn - defw at - defw plus - defw swap - defw encl - defw here - defw lit - defw 22h - defw blank - defw inn - defw pstor - defw over - defw subb - defw tor - defw rr - defw here - defw cstor - defw plus - defw here - defw onep - defw fromr - defw cmove - defw semis -; -; - defb 88h ; (NUMBER) - defc '(NUMBER)' - defw word-7 -pnumb: - defw docol -pnum1: - defw onep ; begin - defw dup - defw tor - defw cat - defw base - defw at - defw digit - defw zbran ; while - defw pnum2-$ - defw swap - defw base - defw at - defw ustar - defw drop - defw rot - defw base - defw at - defw ustar - defw dplus - defw dpl - defw at - defw onep - defw zbran ; if - defw pnum3-$ - defw one - defw dpl - defw pstor ; endif -pnum3: - defw fromr - defw bran ; repeat - defw pnum1-$ -pnum2: - defw fromr - defw semis -; -; - defb 86h ; NUMBER - defc 'NUMBER' - defw pnumb-0bh -numb: - defw docol - defw zero - defw zero - defw rot - defw dup - defw onep - defw cat - defw lit - defw 2dh - defw equal - defw dup - defw tor - defw plus - defw lit - defw -1 -numb1: - defw dpl ; begin - defw store - defw pnumb - defw dup - defw cat - defw bl - defw subb - defw zbran ; while - defw numb2-$ - defw dup - defw cat - defw lit - defw 2eh - defw subb - defw zero - defw qerr - defw zero - defw bran ; repeat - defw numb1-$ -numb2: - defw drop - defw fromr - defw zbran ; if - defw numb3-$ - defw dminu ; endif -numb3: - defw semis -; -; - defb 85h ; -FIND (0-3) SUCCESS - defc '-FIND' ; (0-1) FAILURE - defw numb-9 -dfind: - defw docol - defw bl - defw word - defw here - defw cont - defw at - defw at - defw pfind - defw dup - defw zequ - defw zbran ; if - defw dfin1-$ - defw drop - defw here - defw lates - defw pfind ; endif -dfin1: - defw semis -; -; - defb 87h ; (ABORT) - defc '(ABORT)' - defw dfind-8 -pabor: - defw docol - defw abort - defw semis -; - defb 85h ; ERROR - defc 'ERROR' - defw pabor-0ah -error: - defw docol - defw warn - defw at - defw zless - defw zbran ; if - defw erro1-$ - defw pabor ; endif -erro1: - defw here - defw count - defw type - defw pdotq - defb 2 - db '? ' - defw mess - defw spsto -; CHANGE FROM fig MODEL -; defw inn,at,blk,at - defw blk,at - defw ddup - defw zbran,erro2-$ ; if - defw inn,at - defw swap ; endif -erro2: - defw quit -; -; - defb 83h ; ID. - defc 'ID.' - defw error-8 -iddot: - defw docol - defw pad - defw lit - defw 20h - defw blank ;/ - defw dup - defw pfa - defw lfa - defw over - defw subb - defw dup ;/ change frm MODEL - defw tor ;/ to suppress BIT 7 - defw pad - defw swap - defw cmove - defw pad - defw fromr ;/ for terminals - defw pad ;/ with an 8 bit - defw plus ;/ ASCII character set. - defw onemin ;/ - defw dup ;/ - defw at ;/ - defw lit ;/ - defw 7fh ;/ - defw andd ;/ - defw swap ;/ - defw store ;/ - defw count - defw lit - defw 1fh ; WIDTH - defw andd - defw type - defw space - defw semis -; - defb 86h ; CREATE - defc 'CREATE' - defw iddot-6 -creat: - defw docol - defw dfind - defw zbran ; if - defw crea1-$ - defw drop - defw nfa - defw iddot - defw lit - defw 4 - defw mess - defw space ; endif -crea1: - defw here - defw dup - defw cat - defw width - defw at - defw min - defw onep - defw allot - defw dup - defw lit - defw 0a0h - defw toggl - defw here - defw onemin - defw lit - defw 80h - defw toggl - defw lates - defw comma - defw curr - defw at - defw store - defw here - defw twop - defw comma - defw semis -; -; - defb 0c9h ; [COMPILE] - defc '[COMPILE]' - defw creat-9 -bcomp: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw cfa - defw comma - defw semis -; -; - defb 0c7h ; LITERAL - defc 'LITERAL' - defw bcomp-0ch -liter: - defw docol - defw state - defw at - defw zbran ; if - defw lite1-$ - defw comp - defw lit - defw comma ; endif -lite1: - defw semis -; -; - defb 0c8h ; DLITERAL - defc 'DLITERAL' - defw liter-0ah -dlite: - defw docol - defw state - defw at - defw zbran ; if - defw dlit1-$ - defw swap - defw liter - defw liter ; endif -dlit1: - defw semis -; -; - defb 86h ; ?STACK - defc '?STACK' - defw dlite-0bh -qstac: - defw docol - defw spat - defw szero - defw at - defw swap - defw uless - defw one - defw qerr - defw spat - defw here - defw lit - defw 80h - defw plus - defw uless - defw lit - defw 7 - defw qerr - defw semis -; -; - defb 89h ; INTERPRET - defc 'INTERPRET' - defw qstac-9 -inter: - defw docol -inte1: - defw dfind ; begin - defw zbran ; if - defw inte2-$ - defw state - defw at - defw less - defw zbran ; if - defw inte3-$ - defw cfa - defw comma - defw bran ; else - defw inte4-$ -inte3: - defw cfa - defw exec ; endif -inte4: - defw qstac - defw bran ; else - defw inte5-$ -inte2: - defw here - defw numb - defw dpl - defw at - defw onep - defw zbran ; if - defw inte6-$ - defw dlite - defw bran ; else - defw inte7-$ -inte6: - defw drop - defw liter ; endif -inte7: - defw qstac ; endif -inte5: - defw bran ; again - defw inte1-$ -; -; - defb 89h ; IMMEDIATE - defc 'IMMEDIATE' - defw inter-0ch -immed: - defw docol - defw lates - defw lit - defw 40h - defw toggl - defw semis -; -; - defb 8ah ; VOCABULARY - defc 'VOCABULARY' - defw immed-0ch -vocab: - defw docol - defw build - defw lit - defw 0a081h - defw comma - defw curr - defw at - defw cfa - defw comma - defw here - defw vocl - defw at - defw comma - defw vocl - defw store - defw does -dovoc: - defw twop - defw cont - defw store - defw semis -; -; - defb 0c5h ; FORTH - defc 'FORTH' - defw vocab-0dh -forth: - defw dodoe - defw dovoc - defw 0a081h - defw task-7 ; cold start value only -; changed aech time a def is appended -; to the FORTH vocabulary - defw 0 ; end of vocabulary list -; -; - defb 8bh ; DEFINITIONS - defc 'DEFINITIONS' - defw forth-8 -defin: - defw docol - defw cont - defw at - defw curr - defw store - defw semis -; -; - defb 0c1h ; ( - defc '(' - defw defin-0eh -paren: - defw docol - defw lit - defw 29h - defw word - defw semis -; -; - defb 84h ; QUIT - defc 'QUIT' - defw paren-4 -quit: - defw docol - defw zero - defw blk - defw store - defw lbrac -quit1: - defw rpsto ; begin - defw cr - defw query - defw inter - defw state - defw at - defw zequ - defw zbran ; if - defw quit2-$ - defw pdotq - defb 2 - db 'ok' ; endif -quit2: - defw bran ; again - defw quit1-$ -; -; - defb 85h ; ABORT - defc 'ABORT' - defw quit-7 -abort: - defw docol - defw spsto - defw dec - defw qstac - defw cr - defw dotcpu - defw pdotq - defb 0eh ; count of chrs to follow - db 'fig-FORTH ' - defb figrel+30h,adot,figrev+30h,usrver - defw forth - defw defin - defw quit -; -; -wrm: ld bc,wrm1 - jnext -wrm1: defw warm -; -; - defb 84h ; WARM - defc 'WARM' - defw abort-8 -warm: - defw docol - defw mtbuf - defw abort -; -; -cld: - ld hl,(bdoss+1) ;/ - ld l,0 ;/ hl <-- fbase - ld (limit+2),hl ;/ set limit - ld de,bufsiz ;/ de <-- total disc buffer size - ;subw hl,de ;/ hl <-- addr. of 1st disc buffer - DEFB 0EDH,0DEh - ld (first+2),hl ;/ set FIRST - ld (use+2),hl ;/ set USE - ld (prev+2),hl ;/ set PREV - ld (buf1),hl ;/ - ld de,us ;/ de <-- user variable space - ;subw hl,de ;/ hl <-- initr0 - DEFB 0EDH,0DEh - ld (upinit),hl ;/ - ld (r0init),hl ;/ - ld (up),hl ;/ - ld (rpp),hl ;/ - ld de,rts ;/ de <-- rtn stack & term. buf space - ;subw hl,de ;/ hl <-- inits0 - DEFB 0EDH,0DEh - ld (s0init),hl ;/ - ld (tibini),hl ;/ - ld sp,hl ;/ - ld bc,cld1 - ld ix,next ; pointer to next - ld iy,hpush ; pointer to hpush - jnext -; -; -cld1: defw cold -; - defb 84h ; COLD - defc 'COLD' - defw warm-7 -cold: - defw docol - defw mtbuf - defw one,recadr ; AvdH - defw store - defw lit,buf1 - defw at ;/ - defw use,store - defw lit,buf1 - defw at ;/ - defw prev,store - defw drzer - defw zero ;/ - defw lit,eprint - defw cstor ;/ -; - defw lit - defw orig+12h - defw lit - defw up - defw at - defw lit - defw 6 - defw plus - defw lit - defw 10h - defw cmove - defw lit - defw orig+0ch - defw at - defw lit - defw forth+6 - defw store - defw fcb ;/A - defw lit,opnfil ;/A open mass storage - defw bdos ;/A - defw lit,0ffh ;/A - defw equal ;/A file present? - defw zbran,cld2-$ ;/A - defw zero ;/A - defw warn,store ;/A - defw cr,pdotq ;/A - defb 7 ;/A - db 'No file' ;/A -cld2: - defw abort -; -; - defb 84h ; S->D - defc 'S->D' - defw cold-7 -stod: defw $+2 - pop hl ;/ - ;exts hl ;/ de <-- h(7) - DEFB 0EDH,6Ch - ex de,hl ;/ - jp dpush ; ( n1 -- d1L d1H) -; -; - defb 82h ; +- - defc '+-' - defw STOD-7 -pm: - defw docol - defw zless - defw zbran ; if - defw pm1-$ - defw minus ; endif -pm1: - defw semis -; -; - defb 83h ; D+- - defc 'D+-' - defw pm-5 -dpm: - defw docol - defw zless - defw zbran ; if - defw dpm1-$ - defw dminu ; endif -dpm1: - defw semis -; -; - defb 83h ; ABS - defc 'ABS' - defw dpm-6 -abs: - defw docol - defw dup - defw pm - defw semis -; -; - defb 84h ; DABS - defc 'DABS' - defw abs-6 -dabs: - defw docol - defw dup - defw dpm - defw semis -; -; - defb 83h ; MIN - defc 'MIN' - defw dabs-7 -min: - defw docol - defw tdup - defw great - defw zbran ; if - defw min1-$ - defw swap ; endif -min1: - defw drop - defw semis -; -; - defb 83h ; MAX - defc 'MAX' - defw min-6 -max: defw docol - defw tdup - defw less - defw zbran ; if - defw max1-$ - defw swap ; endif -max1: - defw drop - defw semis -; -; - defb 82h ; M* ( n1 n2 --- d) - defc 'M*' - defw max-6 -mstar: - defw $+2 ;/ - pop de ; de <-- multiplicator - pop hl ; hl <-- multiplicant - ;multw hl,de ;/ dehl <-- hl * de - DEFB 0EDH,0D2h - ex de,hl ;/ - jp dpush ;/ ( n1 n2 --- d1l d1h) -; -; - defb 82h ;/ M/ ( d n1 --- nrem nquot) - defc 'M/' - defw mstar-5 -mslas: - defw $+2 ; ( d n1 --- n2 n3) - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,mslas1 ; positive - ;neg hl ; make positive - DEFB 0EDH,4Ch -mslas1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; dividend.hw - pop de ; dividend.lw - bit 7,h ; negative? - jr z,mslas2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - ;subw hl,de ; neg dividend.lw - DEFB 0EDH,0DEh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -mslas2: - ;cpw hl,bc ; dividend.hw >= divisor - DEFB 0EDH,0C7h - jr c,mslas3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max. - jr mslas5 -; -mslas3: - ex de,hl ; dehl <-- dividend.hw,lw - ;divuw dehl,bc ; de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative - jr z,mslas4 ; no - ;neg hl ;/ yes, negate remainder - DEFB 0EDH,4Ch -mslas4: - ex de,hl ; hl <-- quotient - or a - jr z,mslas5 ; neither operand negative - cp 81h ; both operands negative? - jr z,mslas5 ; yes, quotient stays positive - ;neg hl ;/ no, negate quotient - DEFB 0EDH,4Ch -mslas5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 81h ; * ( n1 n2 --- nproduct) - defc '*' - defw mslas-5 -star: - defw $+2 - pop de - pop hl - ;multw hl,de ;/ dehl <-- product - DEFB 0EDH,0D2h - jhpush -; -; - defb 84h ; /MOD ( n1 n2 --- nrem nquot) - defc '/MOD' - defw star-4 -slmod: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ div by 0? - jr nz,slmod1 ;/ no, continue - ld de,0ffffh - ld h,d - ld l,e ;/ set remainder & quotient to max. - jr slmod3 -slmod1: - ;cpw hl,8000h ;/ special case -32768 -1 / - DEFB 0FDH - DEFB 0EDH,0F7h - DEFW 8000H - jr nz,slmod2 ;/ continue - ld a,b - cp 0ffh - jr nz,slmod2 - cp c ;/ lo byte also 0ffh? - jr nz,slmod2 ;/ no, go & divide - ld de,0 ;/ remainder - jr slmod3 ;/ exit with dividend unchanged -slmod2: - ;exts hl ;/ de <-- dividend.hw - DEFB 0EDH,6Ch - ;divw dehl,bc ;/ de <-- remainder, hl <-- quotient - DEFB 0EDH,0CAh -slmod3: - push de - push hl - exx ;/ restore ip - jnext -; -; - defb 81h ; / - defc '/' - defw slmod-7 -slash: - defw $+2 - exx ;/ save ip - pop bc ;/ divisor - pop hl ; dividend - ld a,b - or c ;/ division by 0? - jr nz,slash1 ;/ no, continue - ld hl,0ffffh ;/ set quotient to max. - jr slash3 -slash1: - ;cpw hl,8000h ;/ special case -32768 -1 / - DEFB 0FDH - DEFB 0EDH,0F7h - DEFW 8000H - jr nz,slash2 ;/ dividend not -32768 - ld a,b - cp 0ffh - jr nz,slash2 ;/ divisor not -1 - cp c - jr z,slash3 ;/ return with dividend unchanged -slash2: - ;exts hl ;/ de <-- dividend.hw - DEFB 0EDH,6Ch - ;divw dehl,bc ;/ hl <-- quotient - DEFB 0EDH,0CAh -slash3: - push hl ;/ quotient - exx ;/ restore ip - jnext -; -; - defb 83h ;/ MOD - defc 'MOD' - defw slash-4 -modd: - defw $+2 - exx ; save ip - pop bc ; divisor - pop hl ; dividend - ld a,b - or c ; division by 0? - jr nz,modd1 ; no, continue - ld de,0ffffh ; set remainder to max - jr modd3 -modd1: - ;cpw hl,8000h ;/ special case -32768 -1 / - DEFB 0FDH - DEFB 0EDH,0F7h - DEFW 8000H - jr nz,modd2 ; dividend not -32768 - ld a,b - cp 0ffh - jr nz,modd2 ; divisor not -1 - cp c - jr nz,modd2 ; go & divide - ld de,0 ; remainder - jr modd3 -modd2: - ;exts hl ; de <-- dividend.hw - DEFB 0EDH,6Ch - ;divw dehl,bc ; de <-- remainder - DEFB 0EDH,0CAh -modd3: - push de ; remainder - exx ; restore ip - jnext -; -; - defb 85h ;/ */MOD - defc '*/MOD' - defw modd-6 -ssmod: - defw $+2 - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssmod1 ; positive - ;neg hl ; make positive - DEFB 0EDH,4Ch -ssmod1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - ;multw hl,de ; dehl <-- product (= dividend) - DEFB 0EDH,0D2h - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssmod2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - ;subw hl,de ; neg dividend.lw - DEFB 0EDH,0DEh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssmod2: - ;cpw hl,bc ; dividend.hw >= divisor? - DEFB 0EDH,0C7h - jr c,ssmod3 ; no overflow, continue - ld hl,0ffffh - ld d,h - ld e,l ; set rem & quot to max - jr ssmod5 -; -ssmod3: - ex de,hl ; dehl <-- dividend.hw,lw - ;divuw dehl,bc ; de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh - ex de,hl ; hl <-- remainder - bit 0,a ; was dividend negative? - jr z,ssmod4 ; no - ;neg hl ; yes, negate remainder - DEFB 0EDH,4Ch -ssmod4: - ex de,hl ; hl <-- quotient - or a - jr z,ssmod5 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssmod5 ; yes, quotient stays positive - ;neg hl ; no, negate quotient - DEFB 0EDH,4Ch -ssmod5: - push de ; remainder - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 82h ; */ - defc '*/' - defw ssmod-8 -ssla: - defw $+2 ;/ - exx ; save ip - pop hl ; divisor - ld a,h - and 80h ; filter sign - jr z,ssla1 ; positive - ;neg hl ; make positive - DEFB 0EDH,4Ch -ssla1: - ld b,h - ld c,l ; bc <-- divisor - pop hl ; multipicator - pop de ; multiplicant - ex af,af' ; save sign flag - ;multw hl,de ; dehl <-- product (= dividend) - DEFB 0EDH,0D2h - ex af,af' ; restore sign flag - ex de,hl ; de <-- dividend.lw - bit 7,h ; dividend negative? - jr z,ssla2 ; no - inc a ; dividend sign flag - push hl - ld hl,0 - ;subw hl,de ; neg dividend.lw - DEFB 0EDH,0DEh - pop de ; dividend.hw - push hl - ld hl,0 - sbc hl,de ; neg dividend.hw - pop de ; dividend.lw -ssla2: - ;cpw hl,bc ; dividend.hw >= divisor? - DEFB 0EDH,0C7h - jr c,ssla3 ; no overflow, continue - ld hl,0ffffh ; set quotient to max - jr ssla4 -; -ssla3: - ex de,hl ; dehl <-- dividend.hw,lw - ;divuw dehl,bc ; de <-- remainder, hl <-- quotient - DEFB 0EDH,0CBh - or a - jr z,ssla4 ; neither operand negative - cp 81h ; both operands negative? - jr z,ssla4 ; yes, quotient stays positive - ;neg hl ; no, negate quotient - DEFB 0EDH,4Ch -ssla4: - push hl ; quotient - exx ; restore ip - jnext -; -; - defb 85h ; M/MOD - defc 'M/MOD' - defw ssla-5 -msmod: - defw docol - defw tor - defw zero - defw rr - defw uslas - defw fromr - defw swap - defw tor - defw uslas - defw fromr - defw semis -; -; -; Block moved down 2 pages -; - defb 86h ; (LINE) - defc '(LINE)' - defw msmod-8 -pline: - defw docol - defw tor - defw lit - defw 40h - defw bbuf - defw ssmod - defw fromr - defw bscr - defw star - defw plus - defw block - defw plus - defw lit - defw 40h - defw semis -; -; - defb 85h ; .LINE - defc '.LINE' - defw pline-9 -dline: - defw docol - defw pline - defw dtrai - defw type - defw semis -; -; - defb 87h ; MESSAGE - defc 'MESSAGE' - defw dline-8 -mess: - defw docol - defw warn - defw at - defw zbran ; if - defw mess1-$ - defw ddup - defw zbran ; if - defw mess2-$ - defw lit - defw 4 ; 1st message screen - defw ofset - defw at - defw bscr - defw slash - defw subb - defw dline - defw space ; endif -mess2: - defw bran ; else - defw mess3-$ -mess1: - defw pdotq - defb 6 - db 'MSG # ' - defw dot ; endif -mess3: defw semis -; -; - defb 82h ; P@ - defc 'P@' - defw mess-0ah -ptat: - defw $+2 - exx ;d save registers - pop bc ;d bc <-- port# - in l,(c) ;d l <-- data byte - ld h,0 - push hl - exx ;d restore registers - jnext -; -; - defb 82h ; P! - defc 'P!' - defw ptat-5 -ptsto: - defw $+2 - exx ;d save registers - pop bc ;d c <-- port# - pop hl ;d L <-- date byte - out (c),l - exx ;d restore registers - jnext -; -; - page -include DISCIO.Z80 - page -include CONPRTIO.Z80 - page -; - defb 0c1h ; ' (tick) - defb 0a7h - defw arrow-6 -tick: - defw docol - defw dfind - defw zequ - defw zero - defw qerr - defw drop - defw liter - defw semis -; -; - defb 86h ; FORGET - defc 'FORGET' - defw tick-4 -forg: - defw docol - defw curr - defw at - defw cont - defw at - defw subb - defw lit - defw 18h - defw qerr - defw tick - defw dup - defw fence - defw at - defw uless ;/ FORGET >8000h nw o.k. - defw lit - defw 15h - defw qerr - defw dup - defw nfa - defw dp - defw store - defw lfa - defw at - defw cont - defw at - defw store - defw semis -; -; - defb 84h ; BACK - defc 'BACK' - defw forg-9 -back: - defw docol - defw here - defw subb - defw comma - defw semis -; -; - defb 0c5h ; BEGIN - defc 'BEGIN' - defw back-7 -begin: - defw docol - defw qcomp - defw here - defw one - defw semis -; -; - defb 0c5h ; ENDIF - defc 'ENDIF' - defw begin-8 -endiff: - defw docol - defw qcomp - defw two - defw qpair - defw here - defw over - defw subb - defw swap - defw store - defw semis -; -; - defb 0c4h ; THEN - defc 'THEN' - defw endiff-8 -then: defw docol - defw endiff - defw semis -; -; - defb 0c2h ; DO - defc 'DO' - defw then-7 -do: - defw docol - defw comp - defw xdo - defw here - defw three - defw semis -; -; - defb 0c4h ; LOOP - defc 'LOOP' - defw do-5 -loop: - defw docol - defw three - defw qpair - defw comp - defw xloop - defw back - defw semis -; -; - defb 0c5h ; +LOOP - defc '+LOOP' - defw loop-7 -ploop: - defw docol - defw three - defw qpair - defw comp - defw xploo - defw back - defw semis -; -; - defb 0c5h ; UNTIL - defc 'UNTIL' - defw ploop-8 -until: - defw docol - defw one - defw qpair - defw comp - defw zbran - defw back - defw semis -; -; - defb 0c3h ; END - defc 'END' - defw until-8 -endd: - defw docol - defw until - defw semis -; -; - defb 0c5h ; AGAIN - defc 'AGAIN' - defw endd-6 -again: - defw docol - defw one - defw qpair - defw comp - defw bran - defw back - defw semis -; -; - defb 0c6h ; REPEAT - defc 'REPEAT' - defw again-8 -repea: - defw docol - defw tor - defw tor - defw again - defw fromr - defw fromr - defw twomin ;/ - defw endiff - defw semis -; -; - defb 0c2h ; IF - defc 'IF' - defw repea-9 -iff: - defw docol - defw comp - defw zbran - defw here - defw zero - defw comma - defw two - defw semis -; -; - defb 0c4h ; ELSE - defc 'ELSE' - defw iff-5 -elsee: - defw docol - defw two - defw qpair - defw comp - defw bran - defw here - defw zero - defw comma - defw swap - defw two - defw endiff - defw two - defw semis -; -; - defb 0c5h ; WHILE - defc 'WHILE' - defw elsee-7 -while: - defw docol - defw iff - defw twop - defw semis -; -; - defb 86h ; SPACES - defc 'SPACES' - defw while-8 -spacs: - defw docol - defw zero - defw max - defw ddup - defw zbran ; if - defw spax1-$ - defw zero - defw xdo ; do -spax2: - defw space - defw xloop ; loop endif - defw spax2-$ -spax1: - defw semis -; -; - defb 82h ; <# - defc '<#' - defw spacs-9 -bdigs: - defw docol - defw pad - defw hld - defw store - defw semis -; -; - defb 82h ; #> - defc '#>' - defw bdigs-5 -edigs: - defw docol - defw drop - defw drop - defw hld - defw at - defw pad - defw over - defw subb - defw semis -; -; - defb 84h ; SIGN - defc 'SIGN' - defw edigs-5 -sign: - defw docol - defw rot - defw zless - defw zbran ; if - defw sign1-$ - defw lit - defw 2dh - defw hold ; endif -sign1: - defw semis -; -; - defb 81h ; # - defc '#' - defw sign-7 -dig: - defw docol - defw base - defw at - defw msmod - defw rot - defw lit - defw 9 - defw over - defw less - defw zbran ; if - defw dig1-$ - defw lit - defw 7 - defw plus ; endif -dig1: defw lit - defw 30h - defw plus - defw hold - defw semis -; -; - defb 82h ; #S - defc '#S' - defw dig-4 -digs: - defw docol -digs1: - defw dig ; begin - defw tdup ;/ - defw orr - defw zequ - defw zbran ; until - defw digs1-$ - defw semis -; -; - defb 83h ; D.R - defc 'D.R' - defw digs-5 -ddotr: - defw docol - defw tor - defw swap - defw over - defw dabs - defw bdigs - defw digs - defw sign - defw edigs - defw fromr - defw over - defw subb - defw spacs - defw type - defw semis -; -; - defb 82h ; .R - defc '.R' - defw ddotr-6 -dotr: - defw docol - defw tor - defw stod - defw fromr - defw ddotr - defw semis -; -; - defb 82h ; D. - defc 'D.' - defw dotr-5 -ddot: - defw docol - defw zero - defw ddotr - defw space - defw semis -; -; - defb 81h ; . - defc '.' - defw ddot-5 -dot: - defw docol - defw stod - defw ddot - defw semis -; -; - defb 81h ; ? - defc '?' - defw dot-4 -ques: - defw docol - defw at - defw dot - defw semis -; -; - defb 82h ; U. - defc 'U.' - defw ques-4 -udot: defw docol - defw zero - defw ddot - defw semis -; - - defb 85h ; VLIST - defc 'VLIST' - defw udot-5 -vlist: - defw docol - defw lit - defw 80h - defw outt - defw store - defw cont - defw at - defw at -vlis1: - defw outt ; begin - defw at - defw csll - defw great - defw zbran ; if - defw vlis2-$ - defw cr - defw zero - defw outt - defw store ; endif -vlis2: - defw dup - defw iddot - defw space - defw space - defw pfa - defw lfa - defw at - defw dup - defw zequ - defw qterm - defw orr - defw zbran ; until - defw vlis1-$ - defw drop - defw semis -; -; - defb 83h ; BYE - defc 'BYE' - defw vlist-8 -bye: - defw docol ;/A - defw flush ;/A - defw fcb,lit ;/E - defw 10h,bdos ;/E close file - defw drop ;/E discard directory code - defw zero,zero ;/A - defw bdos ;/A return to CP/M - defw semis ;/A won't get this far, just for pretty -; -; - defb 84h ; LIST - defc 'LIST' - defw bye-6 -list: - defw docol,dec - defw cr,dup - defw scr,store - defw pdotq - defb 6 - db 'SCR # ' - defw dot - defw lit,10h - defw zero,xdo -list1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw ido,scr - defw at,dline - defw qterm - defw zbran,list2-$ ; if - defw leave -list2: - defw xloop,list1-$ ; endif - defw cr - defw semis -; -; - defb 85H ;INDEX - defc 'INDEX' - defw list-7 -index: - defw docol - defw lit,ff - defw emit - defw cr - defw onep,swap - defw xdo -inde1: - defw cr,ido - defw three ;/ was lit,3 - defw dotr,space - defw zero,ido - defw dline,qterm - defw zbran,inde2-$ ; if - defw leave ; endif -inde2: - defw xloop,inde1-$ - defw semis -; -; - defb 85h ; TRIAD - defc 'TRIAD' - defw index-8 -triad: - defw docol - defw lit,ff - defw emit - defw three ;/ was lit,3 - defw slash - defw three ;/ was lit,3 - defw star - defw three ;/ was lit,3 - defw over,plus - defw swap,xdo -tria1: - defw cr,ido - defw list - defw qterm - defw zbran,tria2-$ ; if - defw leave -tria2: - defw xloop,tria1-$ ; endif - defw cr - defw lit,15 - defw mess,cr - defw semis -; -; - defb 84h ; .CPU - defc '.CPU' - defw triad-8 -dotcpu: - defw docol - defw base,at - defw lit,36 - defw base,store - defw lit,22h - defw porig,tat - defw ddot - defw base,store - defw semis -; -; - defb 86h ; setclk - defc 'setclk' - defw dotcpu-7 -setclk: - defw $+2 - exx ; save ip - ld c,iopreg - ;ldctl hl,(c) ; l <-- current i/o page - DEFB 0EDh,66h - ld a,l - ex af,af' ; save i/o page - ld l,0feh - ;ldctl (c),hl ; select i/o page 0feh - DEFB 0EDh,6Eh - xor a - out (cntrl0),a ; disable c/t 0 - out (cntrl1),a ; disable c/t 1 - out (config1),a - ld hl,0ffffh - ld a,10h - out (config0),a ; cascade c/t 0 - c/t 1 - ld c,tcon0 - ;outw (c),hl ; load c/t 0 time constant - DEFB 0EDH,0BFh - ld c,tcon1 - ;outw (c),hl ; load c/t 1 time constatnt - DEFB 0EDH,0BFh - ld a,80h - out (config1),a ; continous mode - ld a,0e0h - out (cntrl1),a ; start 32bit counter - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ;ldctl (c),hl ; restore i/o page - DEFB 0EDh,6Eh - exx ; restore ip - jnext -; -; - defb 86h ; getclk - defc 'getclk' - defw setclk-9 -getclk: - defw $+2 - exx ; save ip - ld c,iopreg - ;ldctl hl,(c) ; l <-- current i/o page - DEFB 0EDh,66h - ld a,l - ex af,af' ; save current i/o page - ld l,0feh - ;ldctl (c),hl ; select i/o page 0feh - DEFB 0EDh,6Eh - ld a,80h - out (cntrl1),a ; halt 32bit counter - ld c,count1 - ;inw hl,(c) - DEFB 0EDH,0B7h - ld d,h - ld e,l ; de <-- count1 - ld c,count0 - ;inw hl,(c) ; hl <-- count0 - DEFB 0EDH,0B7h - ld c,0 - ld a,c ; a <-- 0 - sub l ; 0 - l - ld l,a ; l <-- neg(l) - ld a,c ; a <-- 0 - sbc a,h - ld h,a ; h <-- neg(h) - ld a,c ; a <-- 0 - sbc a,e - ld e,a ; e <-- neg(e) - ld a,c ; a <-- 0 - sbc a,d - ld d,a ; d <-- neg(d), dehl <-- neg(dehl) - ;divuw dehl,25000 ; scale to 1/100 secs - DEFB 0FDH - DEFB 0EDH,0FBh - DEFW 25000 - push hl ; result - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ;ldctl (c),hl ; restore i/o page - DEFB 0EDh,6Eh - exx ; restore ip - jnext -; -; - defb 84h ; TASK - defc 'TASK' - defw getclk-9 -; defw dotcpu-7 -task: - defw docol - defw semis -; -; -initdp: - defw 0 -; - end orig - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/CONPRTIO.280 b/software/CPM/CPM08_Z80FORTH/CONPRTIO.280 deleted file mode 100644 index b16a957..0000000 --- a/software/CPM/CPM08_Z80FORTH/CONPRTIO.280 +++ /dev/null @@ -1,149 +0,0 @@ -; CP/M CONSOLE & PRINTER INTERFACE -; -; Last update: -; -; 850511 - Saved BC' prior to CP/M calls -; 841010 - Saved IX & IY prior to CP/M calls -; 840909 - Converted all BIOS calls to BDOS calls for compatibility -; with CP/M 3.0 -; -; -; -lstout equ 05h ; printer output -dconio equ 06h ; direct console I/O -; -cacr equ 12h ; cache control register -; -rubout equ 7fh -inpreq equ 0ffh ; dconio input request -; - .z280 -; -eprint: defb 0 ; printer flag - ; 0=disabled, 1=enabled -; -sysent: - push bc - push de - push hl - push ix - push iy - exx - push bc ; save ip (if used as such) - exx - call bdoss ; perform function (C) - exx - pop bc ; restore ip - exx - pop iy - pop ix - pop hl - pop de - pop bc - ret -; -cstat: - push bc - ld c,dconio ; direct console I/O - ld e,inpreq ; input request - call sysent ; any chr typed? - pop bc ; if yes, a <-- char - ret ; else a <-- 00h (ignore chr) -; -; -cin: - push bc - ld c,dconio ; direct console i/o - ld e,inpreq ; request input -cinlp: - call sysent ; a <-- chr (or 0 if nothing typed) - or a - jr z,cinlp ; wait for CHR to be typed - cp rubout - jr nz,cin1 - ld a,bsout ; convert RUB to ^H -cin1: - res 7,a ; msb <-- 0 - pop bc - ret -; -; -cout: - push bc - push de ; save e = chr - ld c,dconio ; direct console output - call sysent ; send e to con: - pop de - pop bc - ret -; -; -pout: - push bc - ld c,lstout - call sysent ; send e to lst: - pop bc - ret -; -; -cpout: - call cout ; send e to console - ld a,(eprint) - or a ; if eprint <> 0 - call nz,pout ;send e to LST: - ret -; -; -; FORTH TO CP/M SERIAL I/O INTERFACE -; -pqter: - call cstat - ld hl,0 - or a ; chr typed? - jr z,pqte1 ; no - inc l ; yes, s1 <-- true -pqte1: - jhpush -; -; -pkey: - call cin ; read chr from console - cp dle ; ^P? - ld e,a - jr nz,pkey1 ; no - ld hl,eprint - ld e,abl ; e <-- blank - ld a,(hl) - xor 01h ; toggle eprint lsb - ld (hl),a -pkey1: - ld l,e - ld h,0 - jhpush ; s1.lb <-- chr -; -; -pemit: - defw $+2 ; (EMIT) orphan - pop de ; e <-- s1.lb = chr - ld a,e - cp bsout - jr nz,pemit1 - call cout ; backspace - ld e,abl ; blank - call cout ; erase chr on con: - ld e,bsout ; backspace -pemit1: - call cpout ; send chr to con: - jnext ; and lst: if eprint = 01h -; -; -pcr: - ld e,acr - call cpout ; output cr - ld e,lf - call cpout ; and lf - jnext -; -; -; - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/CONPRTIO.Z80 b/software/CPM/CPM08_Z80FORTH/CONPRTIO.Z80 deleted file mode 100644 index b55b8d6..0000000 --- a/software/CPM/CPM08_Z80FORTH/CONPRTIO.Z80 +++ /dev/null @@ -1,157 +0,0 @@ -; CP/M CONSOLE & PRINTER INTERFACE -; -; Last update: -; -; 850511 - Saved BC' prior to CP/M calls -; 841010 - Saved IX & IY prior to CP/M calls -; 840909 - Converted all BIOS calls to BDOS calls for compatibility -; with CP/M 3.0 -; -; -; -lstout equ 05h ; printer output -dconio equ 06h ; direct console I/O -; -cacr equ 12h ; cache control register -; -rubout equ 7fh -inpreq equ 0ffh ; dconio input request -; - ;.z280 - ; PRE280 V1.11b 20-Nov-90 Copyright (c) 1990 by A.Zinser (fifi@veeble.north.de) - .Z80 -; -eprint: defb 0 ; printer flag - ; 0=disabled, 1=enabled -; -sysent: - push bc - push de - push hl - push ix - push iy - exx - push bc ; save ip (if used as such) - exx - call bdoss ; perform function (C) - exx - pop bc ; restore ip - exx - pop iy - pop ix - pop hl - pop de - pop bc - ret -; -cstat: - push bc - ld c,dconio ; direct console I/O - ld e,inpreq ; input request - call sysent ; any chr typed? - pop bc ; if yes, a <-- char - ret ; else a <-- 00h (ignore chr) -; -; -cin: - push bc - ld c,dconio ; direct console i/o - ld e,inpreq ; request input -cinlp: - call sysent ; a <-- chr (or 0 if nothing typed) - or a - jr z,cinlp ; wait for CHR to be typed - cp rubout - jr nz,cin1 - ld a,bsout ; convert RUB to ^H -cin1: - res 7,a ; msb <-- 0 - pop bc - ret -; -; -cout: - push bc - push de ; save e = chr - ld c,dconio ; direct console output - call sysent ; send e to con: - pop de - pop bc - ret -; -; -pout: - push bc - ld c,lstout - call sysent ; send e to lst: - pop bc - ret -; -; -cpout: - call cout ; send e to console - ld a,(eprint) - or a ; if eprint <> 0 - call nz,pout ;send e to LST: - ret -; -; -; FORTH TO CP/M SERIAL I/O INTERFACE -; -pqter: - call cstat - ld hl,0 - or a ; chr typed? - jr z,pqte1 ; no - inc l ; yes, s1 <-- true -pqte1: - jhpush -; -; -pkey: - call cin ; read chr from console - cp dle ; ^P? - ld e,a - jr nz,pkey1 ; no - ld hl,eprint - ld e,abl ; e <-- blank - ld a,(hl) - xor 01h ; toggle eprint lsb - ld (hl),a -pkey1: - ld l,e - ld h,0 - jhpush ; s1.lb <-- chr -; -; -pemit: - defw $+2 ; (EMIT) orphan - pop de ; e <-- s1.lb = chr - ld a,e - cp bsout - jr nz,pemit1 - call cout ; backspace - ld e,abl ; blank - call cout ; erase chr on con: - ld e,bsout ; backspace -pemit1: - call cpout ; send chr to con: - jnext ; and lst: if eprint = 01h -; -; -pcr: - ld e,acr - call cpout ; output cr - ld e,lf - call cpout ; and lf - jnext -; -; -; -int = 01h -; -; -pcr: - ld e,acr - call cpout ; output cr - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/DISCIO.280 b/software/CPM/CPM08_Z80FORTH/DISCIO.280 deleted file mode 100644 index d7613ff..0000000 --- a/software/CPM/CPM08_Z80FORTH/DISCIO.280 +++ /dev/null @@ -1,424 +0,0 @@ -; CP/M DISC INTERFACE -; -; Last update: -; -; 881212 - EXTEND now writes blanks to screens it creates -; 860120 - EXTEND's R/W address now at HERE, was Osborne video ram -; 850511 - saved BC' in 'BDOS' -; 850227 - saved index regs. in 'BDOS' -; 840812 - added EXTEND -; 840731 - installed BDOS calls -; -; -; CP/M BDOS CALLS USED (as per Albert van der Horst, HCCH) -; -; R/W reads or writes a sector in the file specified when invoking -; Z280 fig-FORTH (A>280FORTH d:filename.ext), using the default FCB. -; More than one disc may be accessed by temporary use of a user de- -; fined FCB. -; -; -; -deffcb equ 005ch ; default FCB -; -; CP/M FUNCTIONS -; -opnfil equ 0fh ; open file -clsfil equ 10h ; close file -setdma equ 1ah ; set DMA address -wrtrnd equ 22h ; write random -; -; - .z280 -; -; -; -; FORTH variables & constants used in disc interface -; - defb 83h ; FCB (current FCB address) - defc 'FCB' - defw ptsto-5 -fcb: - defw docon - defw deffcb -; -; - defb 84h ; REC# (returns addr. of random rec.#) - defc 'REC#' - defw fcb-6 -recadr: - defw docol - defw fcb - defw lit - defw 21h - defw plus - defw semis -; -; - defb 83h ; USE - defc 'USE' - defw recadr-7 -use: - defw dovar - defw 0 ;/ initialised by CLD -; -; - defb 84h ; PREV - defc 'PREV' - defw use-6 -prev: - defw dovar - defw 0 ;/ initialised by CLD -; -; - defb 85h ; #BUFF - defc '#BUFF' - defw prev-07h -nobuf: - defw docon - defw nbuf -; -; - defb 8ah ; DISK-ERROR - defc 'DISK-ERROR' - defw nobuf-08h -dskerr: - defw dovar - defw 0 -; -; -; DISC INTERFACE HIGH LEVEL ROUTINES -; - defb 84h ; +BUF - defc '+BUF' - defw dskerr-0dh -pbuf: - defw docol - defw lit,co - defw plus - defw dup - defw limit - defw equal - defw zbran - defw pbuf1-$ - defw drop - defw first -pbuf1: - defw dup - defw prev - defw at - defw subb - defw semis -; -; - defb 86h ; UPDATE - defc 'UPDATE' - defw pbuf-07h -updat: - defw docol - defw prev - defw at - defw at - defw lit - defw 8000h - defw orr - defw prev - defw at - defw store - defw semis -; -; - defb 8dh ; EMPTY-BUFFERS - defc 'EMPTY-BUFFERS' - defw updat-9 -mtbuf: - defw docol - defw first - defw limit - defw over - defw subb - defw erasee - defw semis -; -; - defb 83h ; DR0 - defc 'DR0' - defw mtbuf-10h -drzer: - defw docol - defw zero - defw ofset - defw store - defw semis -; -; - defb 83h ; DR1 - defc 'DR1' - defw drzer-6 -drone: - defw docol - defw lit - defw 1600 ; Osborne DD -dron2: - defw ofset - defw store - defw semis -; -; - defb 86h ; BUFFER - defc 'BUFFER' - defw drone-6 -buffe: - defw docol - defw use - defw at - defw dup - defw tor -buff1: - defw pbuf ; won't work if single buffer - defw zbran - defw buff1-$ - defw use - defw store - defw rr - defw at - defw zless - defw zbran - defw buff2-$ - defw rr - defw twop - defw rr - defw at - defw lit - defw 7fffh - defw andd - defw zero - defw rslw -buff2: - defw rr - defw store - defw rr - defw prev - defw store - defw fromr - defw twop - defw semis -; -; - defb 85h ; BLOCK - defc 'BLOCK' - defw buffe-9 -block: - defw docol - defw ofset - defw at - defw plus - defw tor - defw prev - defw at - defw dup - defw at - defw rr - defw subb - defw dup - defw plus - defw zbran - defw bloc1-$ -bloc2: - defw pbuf - defw zequ - defw zbran - defw bloc3-$ - defw drop - defw rr - defw buffe - defw dup - defw rr - defw one - defw rslw - defw twomin ;/ -bloc3: - defw dup - defw at - defw rr - defw subb - defw dup - defw plus - defw zequ - defw zbran - defw bloc2-$ - defw dup - defw prev - defw store -BLOC1: - defw fromr - defw drop - defw twop - defw semis -; -; - defb 84h ; BDOS (CP/M function call) - defc 'BDOS' - defw block-8 -bdos: - defw $+2 - exx ;/ save ip - pop bc ; c <-- s1.lb = BDOS function code - pop de ; de <-- s2) = parameter - push ix - push iy - exx - push bc ; some BIOS use alternate registers - exx - call bdoss ; return value in a - exx - pop bc ;/ bc <-- ip - pop iy - pop ix - ld l,a - ld h,00h - jhpush ; s1 <-- hl = returned value -; -; - defb 83h ; R/W - defc 'R/W' - defw bdos-07h -rslw: - defw docol - defw tor ; store R/W flag - defw recadr - defw store - defw zero - defw recadr ; set record # - defw twop - defw cstor - defw lit - defw setdma - defw bdos - defw drop ; set DMA address - defw lit - defw wrtrnd - defw fromr - defw subb ; select READ or WRITE - defw fcb - defw swap - defw bdos ; do it - defw dskerr - defw store ; store return code - defw semis -; -; - defb 85h ; FLUSH - defc 'FLUSH' - defw rslw-6 -flush: - defw docol - defw nobuf - defw onep - defw zero - defw xdo -flus1: - defw zero - defw buffe - defw drop - defw xloop - defw flus1-$ - defw semis -; -; - defb 86h ;/ EXTEND - defc 'EXTEND' ;/ - defw flush-08h ;/ -extend: - defw docol ;/ - defw here ;/ fill with b/buf blanks - defw bbuf - defw blank - defw lit ;/ - defw 0008h ;/ - defw star ;/ - defw zero ;/ -extnd1: - defw onep ;/ begin - defw here ;/ was lit,f000h (Osborne video ram) - defw over ;/ - defw one ;/ - defw rslw ;/ - defw dskerr ;/ - defw at ;/ - defw zbran ;/ - defw extnd1-$ ;/ until - defw swap ;/ - defw over ;/ - defw plus ;/ - defw swap ;/ - defw xdo ;/ do -extnd2: - defw here ;/ was lit,f000h (Osborne video ram) - defw ido ;/ - defw zero ;/ - defw rslw ;/ - defw xloop ;/ - defw extnd2-$ ;/ loop - defw fcb ;/ - defw lit ;/ - defw clsfil ;/ - defw bdos ;/ close file - defw drop ;/ - defw fcb ;/ - defw lit ;/ - defw opnfil ;/ - defw bdos ;/ & re-open - defw drop ;/ - defw semis ;/ -; -; - defb 84h ; LOAD - defc 'LOAD' - defw extend-09h -load: - defw docol - defw blk - defw at - defw tor - defw inn - defw at - defw tor - defw zero - defw inn - defw store - defw bscr - defw star - defw blk - defw store ; BLK <-- SCR * B/SCR - defw inter ; interpret from other screen - defw fromr - defw inn - defw store - defw fromr - defw blk - defw store - defw semis -; -; - defb 0c3h ; --> - defc '-->' - defw load-7 -arrow: - defw docol - defw qload - defw zero - defw inn - defw store - defw bscr - defw blk - defw at - defw over - defw modd - defw subb - defw blk - defw pstor - defw semis -; -; - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/DISCIO.Z80 b/software/CPM/CPM08_Z80FORTH/DISCIO.Z80 deleted file mode 100644 index d42b8e1..0000000 --- a/software/CPM/CPM08_Z80FORTH/DISCIO.Z80 +++ /dev/null @@ -1,429 +0,0 @@ -; CP/M DISC INTERFACE -; -; Last update: -; -; 881212 - EXTEND now writes blanks to screens it creates -; 860120 - EXTEND's R/W address now at HERE, was Osborne video ram -; 850511 - saved BC' in 'BDOS' -; 850227 - saved index regs. in 'BDOS' -; 840812 - added EXTEND -; 840731 - installed BDOS calls -; -; -; CP/M BDOS CALLS USED (as per Albert van der Horst, HCCH) -; -; R/W reads or writes a sector in the file specified when invoking -; Z280 fig-FORTH (A>280FORTH d:filename.ext), using the default FCB. -; More than one disc may be accessed by temporary use of a user de- -; fined FCB. -; -; -; -deffcb equ 005ch ; default FCB -; -; CP/M FUNCTIONS -; -opnfil equ 0fh ; open file -clsfil equ 10h ; close file -setdma equ 1ah ; set DMA address -wrtrnd equ 22h ; write random -; -; - ;.z280 - ; PRE280 V1.11b 20-Nov-90 Copyright (c) 1990 by A.Zinser (fifi@veeble.north.de) - .Z80 -; -; -; -; FORTH variables & constants used in disc interface -; - defb 83h ; FCB (current FCB address) - defc 'FCB' - defw ptsto-5 -fcb: - defw docon - defw deffcb -; -; - defb 84h ; REC# (returns addr. of random rec.#) - defc 'REC#' - defw fcb-6 -recadr: - defw docol - defw fcb - defw lit - defw 21h - defw plus - defw semis -; -; - defb 83h ; USE - defc 'USE' - defw recadr-7 -use: - defw dovar - defw 0 ;/ initialised by CLD -; -; - defb 84h ; PREV - defc 'PREV' - defw use-6 -prev: - defw dovar - defw 0 ;/ initialised by CLD -; -; - defb 85h ; #BUFF - defc '#BUFF' - defw prev-07h -nobuf: - defw docon - defw nbuf -; -; - defb 8ah ; DISK-ERROR - defc 'DISK-ERROR' - defw nobuf-08h -dskerr: - defw dovar - defw 0 -; -; -; DISC INTERFACE HIGH LEVEL ROUTINES -; - defb 84h ; +BUF - defc '+BUF' - defw dskerr-0dh -pbuf: - defw docol - defw lit,co - defw plus - defw dup - defw limit - defw equal - defw zbran - defw pbuf1-$ - defw drop - defw first -pbuf1: - defw dup - defw prev - defw at - defw subb - defw semis -; -; - defb 86h ; UPDATE - defc 'UPDATE' - defw pbuf-07h -updat: - defw docol - defw prev - defw at - defw at - defw lit - defw 8000h - defw orr - defw prev - defw at - defw store - defw semis -; -; - defb 8dh ; EMPTY-BUFFERS - defc 'EMPTY-BUFFERS' - defw updat-9 -mtbuf: - defw docol - defw first - defw limit - defw over - defw subb - defw erasee - defw semis -; -; - defb 83h ; DR0 - defc 'DR0' - defw mtbuf-10h -drzer: - defw docol - defw zero - defw ofset - defw store - defw semis -; -; - defb 83h ; DR1 - defc 'DR1' - defw drzer-6 -drone: - defw docol - defw lit - defw 1600 ; Osborne DD -dron2: - defw ofset - defw store - defw semis -; -; - defb 86h ; BUFFER - defc 'BUFFER' - defw drone-6 -buffe: - defw docol - defw use - defw at - defw dup - defw tor -buff1: - defw pbuf ; won't work if single buffer - defw zbran - defw buff1-$ - defw use - defw store - defw rr - defw at - defw zless - defw zbran - defw buff2-$ - defw rr - defw twop - defw rr - defw at - defw lit - defw 7fffh - defw andd - defw zero - defw rslw -buff2: - defw rr - defw store - defw rr - defw prev - defw store - defw fromr - defw twop - defw semis -; -; - defb 85h ; BLOCK - defc 'BLOCK' - defw buffe-9 -block: - defw docol - defw ofset - defw at - defw plus - defw tor - defw prev - defw at - defw dup - defw at - defw rr - defw subb - defw dup - defw plus - defw zbran - defw bloc1-$ -bloc2: - defw pbuf - defw zequ - defw zbran - defw bloc3-$ - defw drop - defw rr - defw buffe - defw dup - defw rr - defw one - defw rslw - defw twomin ;/ -bloc3: - defw dup - defw at - defw rr - defw subb - defw dup - defw plus - defw zequ - defw zbran - defw bloc2-$ - defw dup - defw prev - defw store -BLOC1: - defw fromr - defw drop - defw twop - defw semis -; -; - defb 84h ; BDOS (CP/M function call) - defc 'BDOS' - defw block-8 -bdos: - defw $+2 - exx ;/ save ip - pop bc ; c <-- s1.lb = BDOS function code - pop de ; de <-- s2) = parameter - push ix - push iy - exx - push bc ; some BIOS use alternate registers - exx - call bdoss ; return value in a - exx - pop bc ;/ bc <-- ip - pop iy - pop ix - ld l,a - ld h,00h - jhpush ; s1 <-- hl = returned value -; -; - defb 83h ; R/W - defc 'R/W' - defw bdos-07h -rslw: - defw docol - defw tor ; store R/W flag - defw recadr - defw store - defw zero - defw recadr ; set record # - defw twop - defw cstor - defw lit - defw setdma - defw bdos - defw drop ; set DMA address - defw lit - defw wrtrnd - defw fromr - defw subb ; select READ or WRITE - defw fcb - defw swap - defw bdos ; do it - defw dskerr - defw store ; store return code - defw semis -; -; - defb 85h ; FLUSH - defc 'FLUSH' - defw rslw-6 -flush: - defw docol - defw nobuf - defw onep - defw zero - defw xdo -flus1: - defw zero - defw buffe - defw drop - defw xloop - defw flus1-$ - defw semis -; -; - defb 86h ;/ EXTEND - defc 'EXTEND' ;/ - defw flush-08h ;/ -extend: - defw docol ;/ - defw here ;/ fill with b/buf blanks - defw bbuf - defw blank - defw lit ;/ - defw 0008h ;/ - defw star ;/ - defw zero ;/ -extnd1: - defw onep ;/ begin - defw here ;/ was lit,f000h (Osborne video ram) - defw over ;/ - defw one ;/ - defw rslw ;/ - defw dskerr ;/ - defw at ;/ - defw zbran ;/ - defw extnd1-$ ;/ until - defw swap ;/ - defw over ;/ - defw plus ;/ - defw swap ;/ - defw xdo ;/ do -extnd2: - defw here ;/ was lit,f000h (Osborne video ram) - defw ido ;/ - defw zero ;/ - defw rslw ;/ - defw xloop ;/ - defw extnd2-$ ;/ loop - defw fcb ;/ - defw lit ;/ - defw clsfil ;/ - defw bdos ;/ close file - defw drop ;/ - defw fcb ;/ - defw lit ;/ - defw opnfil ;/ - defw bdos ;/ & re-open - defw drop ;/ - defw semis ;/ -; -; - defb 84h ; LOAD - defc 'LOAD' - defw extend-09h -load: - defw docol - defw blk - defw at - defw tor - defw inn - defw at - defw tor - defw zero - defw inn - defw store - defw bscr - defw star - defw blk - defw store ; BLK <-- SCR * B/SCR - defw inter ; interpret from other screen - defw fromr - defw inn - defw store - defw fromr - defw blk - defw store - defw semis -; -; - defb 0c3h ; --> - defc '-->' - defw load-7 -arrow: - defw docol - defw qload - defw zero - defw inn - defw store - defw bscr - defw blk - defw at - defw over - defw modd - defw subb - defw blk - defw pstor - defw semis -; -; - - defw blk - defw at - def \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/EDITOR.DOC b/software/CPM/CPM08_Z80FORTH/EDITOR.DOC deleted file mode 100644 index f09d0d8..0000000 --- a/software/CPM/CPM08_Z80FORTH/EDITOR.DOC +++ /dev/null @@ -1,71 +0,0 @@ - Z80 fig-FORTH Line Editor Commands - ---------------------------------- - - -B Back cursor to the beginning of the string in the PAD. - -C Spread text at cursor to insert the following string. Characters - pushed off the end of the line are lost. - -D n --- - Delete the nth line and move subsequent lines 1 up. The deleted - line is held in the PAD. - -E n --- - Erase the nth line by filling it with 64 blanks. - -F Find the first occurrence of the following text string. - -H n --- - Copy the nth line to the PAD and hold it there. - -I n --- - Insert text from PAD into line n. Shift the original nth and sub- - sequent lines down 1 line. The original line 15 is lost. - -L Re-list the screen being edited. - -M n --- - Move cursor n characters. - -N Find the next occurence of the text already in the PAD. - -P n --- - Put the following text on line n. Write over its old contents. - -R n --- - Replace the nth line with the text stored in the PAD. - -S n --- - Spread line n with blanks. Shift the original line n and subse- - quent lines down 1 line. The original line 15 is lost. - -T n --- - Type line n of the current screen and copy it to the PAD. - -X Delete the following text from the current line. - -CLEAR n --- - Clear screen n by filling it with blanks and make it current. - -COPY n1 n2 --- - Copy screen n1 to screen n2. - -DELETE n --- - Delete n characters in front of the cursor. Move the text from the - end of the line to fill up the space. Fill with blanks at the end - of the line. - -FIND Search the entire screen for the string stored in the PAD and move - the cursor to the end of the string. Issue an error message if the - search failed. - -TILL Delete all characters from the cursor location up to the end of - the following text string. - -TOP Move the cursor to the leftmost position at line 0. - -TS Type Screen. Useful for finding hidden NULL characters which would - prematurely end compilation. If line numbers at the right don't - line up, retype the line or use E command if line is empty. - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/PIP.COM b/software/CPM/CPM08_Z80FORTH/PIP.COM deleted file mode 100644 index a8a17e1621ca85d10d1f6d8a79688578276014a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 z 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 diff --git a/software/CPM/CPM08_Z80FORTH/SETGETCL.280 b/software/CPM/CPM08_Z80FORTH/SETGETCL.280 deleted file mode 100644 index 486f91b..0000000 --- a/software/CPM/CPM08_Z80FORTH/SETGETCL.280 +++ /dev/null @@ -1,79 +0,0 @@ - defb 86h ; setclk - defc 'setclk' - defw dotcpu-7 -setclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - xor a - out (cntrl0),a ; disable c/t 0 - out (cntrl1),a ; disable c/t 1 - out (config1),a - ld hl,0ffffh - ld a,10h - out (config0),a ; cascade c/t 0 - c/t 1 - ld c,tcon0 - outw (c),hl ; load c/t 0 time constant - ld c,tcon1 - outw (c),hl ; load c/t 1 time constatnt - ld a,80h - out (config1),a ; continous mode - ld a,0e0h - out (cntrl1),a ; start 32bit counter - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - defb 86h ; getclk - defc 'getclk' - defw setclk-9 -getclk: - defw $+2 - exx ; save ip - ld c,iopreg - ldctl hl,(c) ; l <-- current i/o page - ld a,l - ex af,af' ; save current i/o page - ld l,0feh - ldctl (c),hl ; select i/o page 0feh - ld a,80h - out (cntrl1),a ; halt 32bit counter - ld c,count1 - inw hl,(c) - ld d,h - ld e,l ; de <-- count1 - ld c,count0 - inw hl,(c) ; hl <-- count0 - ld c,0 - ld a,c ; a <-- 0 - sub l ; 0 - l - ld l,a ; l <-- neg(l) - ld a,c ; a <-- 0 - sbc a,h - ld h,a ; h <-- neg(h) - ld a,c ; a <-- 0 - sbc a,e - ld e,a ; e <-- neg(e) - ld a,c ; a <-- 0 - sbc a,d - ld d,a ; d <-- neg(d), dehl <-- neg(dehl) - divuw dehl,25000 ; scale to 1/100 secs - push hl ; result - ex af,af' ; std. accu - ld l,a ; l <-- previous i/o page - ld c,iopreg - ldctl (c),hl ; restore i/o page - exx ; restore ip - jnext -; -; - \ No newline at end of file diff --git a/software/CPM/CPM08_Z80FORTH/STARTUP.FRT b/software/CPM/CPM08_Z80FORTH/STARTUP.FRT deleted file mode 100644 index 213274b..0000000 --- a/software/CPM/CPM08_Z80FORTH/STARTUP.FRT +++ /dev/null @@ -1 +0,0 @@ - 10 0 DO DUP I + C@ B. *************** fig FORTH MODEL *********************** FORTH INTEREST GROUP P.O. BOX 1105 SAN CARLOS, CA. 94070 RELEASE 1.1F FOR CP/M WITH COMPILER SECURITY AND VARIABLE LENGTH NAMES ADAPTED TO CP/M 2.2 SCREENS ALLOCATED IN RANDOM ACCESS FILE HEX : HOME 1A EMIT ; 0 VARIABLE I-STATE : A-L SCR @ (LINE) ; ( 1/2 ADDRESS OF LINE) : GET-L A-L F000 SWAP CMOVE ; ( /0 MOVE LINE TO SCREEN) : PUT-L A-L F000 ROT ROT CMOVE ; ( /0 MOVE LINE FR SCREEN) : DISPATCH ( 1/0 EXECUTE CONTROL CHARACTER) ( ^D) DUP 4 = IF 1B EMIT 57 EMIT DROP ELSE ( ^I) DUP 9 = IF I-STATE 1 TOGGLE DROP ELSE ( ^X) DUP 18 = IF 1B EMIT 45 EMIT DROP ELSE ( ^Y) DUP 19 = IF 1B EMIT 52 EMIT DROP ELSE ( ^Q) DUP 11 = IF ." ABORTED" QUIT ELSE EMIT THEN THEN THEN THEN THEN ; : EMIT1 I-STATE @ IF 1B EMIT 51 EMIT THEN EMIT ; ( 1/0) : XX BEGIN KEY DUP DUP 20 < IF DISPATCH ELSE EMIT1 THEN ( ^E) 5 = UNTIL ; : E-L HOME DUP GET-L XX A EMIT PUT-L UPDATE ; : C-L SWAP A-L DROP SWAP A-L CMOVE ; --> : GET-S 10 0 DO I A-L F000 I 80 * + SWAP CMOVE LOOP ; : PUT-S 10 0 DO F000 I 80 * + I A-L UPDATE CMOVE LOOP ; : CLEAN F800 F000 DO I C@ 7F AND I C! LOOP ; : E-S 0 I-STATE ! HOME GET-S XX CLEAN PUT-S HOME ; : EDIT SCR ! E-S ; ( EXTENDING THE SPACE ALLOCATED ) : LAST-SEC ( 0/1 LEAVES ONE MORE THAN THE LAST BLOCK NR) 0 BEGIN 1+ F000 OVER 1 R/W DISK-ERROR @ UNTIL ; : EXTEND ( 1/0 EXTENDS # BLOCKS WITH NUMBER-1 ) 8 * LAST-SEC HOME ( GET AMOUNT OF BLOCKS) SWAP OVER + SWAP DO F000 I 0 R/W LOOP FCB 10 BDOS DROP ( CLOSE THE FILE,I.E. UPDATE DIRECTORY) FCB 0F BDOS DROP ( OPEN AGAIN ) ; ( SCR # 3) : COPY-SCREEN ( 2/0 COPY SCREEN-2 TO SCREEN-1 ) B/SCR * SWAP B/SCR * SWAP ( GET START BUFFER #'S) B/SCR 0 DO DUP I + BUFFER DROP LOOP ( RESERVE BUFFERS) B/SCR 0 DO OVER I + BLOCK OVER I + BLOCK B/BUF CMOVE UPDATE LOOP DROP DROP FLUSH ; ( ERROR MESSAGES ) MSG # 1 : EMPTY STACK MSG # 2 : DICTIONARY FULL MSG # 3 : HAS INCORRECT ADDRESS MODE MSG # 4 : ISN'T UNIQUE MSG # 6 : DISK RANGE ? MSG # 7 : FULL STACK MSG # 8 : DISC ERROR ! ( FIGFORTH CP/M 2.2 ** HOBBY COMPUTER CLUB HOLLAND **) ( ERROR MESSAGES ) MSG # 17 : COMPILATION ONLY, USE IN DEFINITION MSG # 18 : EXECUTION ONLY MSG # 19 : CONDITIONALS NOT PAIRED MSG # 20 : DEFINITION NOT FINISHED MSG # 21 : IN PROTECTED DICTIONARY MSG # 22 : USE ONLY WHEN LOADING MSG # 23 : OFF CURRENT EDITING SCREEN MSG # 24 : DECLARE VOCABULARY ( DEBUG SCR#6) 0 VARIABLE BASE' : BASE' @ BASE ! ; ( 1/0 AND BACK) ( 1/0 PRINT IN HEX REGARDLESS OF BASE) : H. TYPE SPACE HEX> ; ( 1/0 IDEM FOR A SINGLE BYTE) : B. TYPE HEX> ; : BASE? BASE @ H. ; ( 0/0 TRUE VALUE OF BASE) : ^ ( 0/0 NON DESTRUCTIVE STACK PRINT) CR ." S: " SP@ S0 @ ( FIND LIMITS) BEGIN OVER OVER = 0= WHILE 2 - DUP @ H. REPEAT DROP DROP ; --> =%r4c!%H^ml+L)5>98qGx@xD%?0C1? z>Dc=__er)lo&CE4-aY5sbI&>Vd|u4kT#BM}WcD1$riXUsl@$Y;vU=@5tX-*eriaq` zHBhd;5&eyEYq}+t(YLdV7q{-p?C-eOrx= zo<8Hw_C8}%$7+dh?CUW$^{mFfL>b>`Y}yEXqk|Lw`iv; z2XMCnTmh~CS9D!z-;v4YQ-c6m`#?UuKc#HSrLu}q!R}5Er*a0v{S>BjW{II=XEK`{ z$fvUDTs}RJV=bTl^ldGM!d544SMEHJPvN!$ne3p_k=&CUNaqi*&!>koJ7~i>zp!yz zLUB%Xrn9Mmd?tH9xoae!O{a3KV`pk$7wm!yKe^?I&owJ|eL0^R$+LO<&f(0!F4ik0 zVY?4j?!qqavmcTqnqx{jr?9@%?mh5CH>Brw8Oos1O0Mcn<&||KgXw`JOd;z1xco?R zcWPDsz#ipB;>Tx;awGZgMsg?}S9rpx_b26&k~oP&#ZC(|S8ks+mfL_u8HN~IUx zPJy8!gd(?a9fnxPrXNfp&hRMi<7gr;EA0aV zPMDdJgOl5rQi~KeZ&d|?0<3vefU^Gg}&;IVo%dv zJub!|)`oHw#N$DM?Krg~}w7)369`l%iHizFWYzltdBJ^>&W~Tvq`;RoS{hQuCALghp*e;dl5x#2u2~wVNaI#Z4Yxu=oN#;0tuGVt_y(0T`?W~uFtdLciS@zc z%{aJOblLyqvR`sr>KEx;uu9z`Y%@~Q717w{32hNq?QA68b;bTURNY4`>UPn>+N!Wj zOt)0)+ex+lCDC|Qf_$s+zPof{s=2z2S>Rby@K(2ROWy`Iewca3W|cyBH3GlJTwARs zA<9UKSy%B|^#V&`hv;tOuM{7w)_1_ZQnh)g8ka3Wkh(*B?`ZSP*yWWnQO*D|<{^C^ zS~U-~%|mz0L#+-JE&g^vX$v>scg*UOi=__0JxQ_}H!=pqD2!cWsY4>$lxre4>_qOi zvC#d({*TDnsjNpI6eS(lp@^CmIl}CRBC$cSajWWMpq66yi#BHeGIDlu?kG;5h|i2Y zDJ?;|Cq4FQmznX9RA!{bv3@2+av8{cC-1{ot_FX}Ls5wX4EU}B%hEN8Kt;BJQ0@RoQ^*zZNAgEhv8 zh!#Kc=s7Bd-?+hO>=V&xUK83Yct+ScPlz+@HsWycZI7N27Jr4KmM#7UE%vwE-PJ6F z>v9kO6;agvlq^v!6VqR)(f5--M}@bAZBI9?DYVq^cQm`*&2?@!x{aH~?A+9oHCV4z zJxV_aQ{U0NV~PD@_UhE*HO78%ElNZZ!R?i9b6d?~4TS{_W6|Qj5Y|<(2YhP^M`|qo zzO?jq_hdV{IB4L*Kj5hR#bpwEs^T5;qy7|v`D`TibUA>Cn);NOvHvV%Df`t;UOq>H z&0D(gVmo%f8ngdq${7 zDPk=2jFZ>b`SfSR!DzACryoTvUUJ)JO^~bDMU$XZi?1<1@LKARg;N#Ba9TZq4;uTA z1)z!PhkfdC)Qb8X39iC2F`f14$7J7lmioqXjWZri;w!sPaw)(TfMA?uSMqg63>fSRygT1ej+Y2R2MOe}TMYoRY~0_D3kuww5=IlVY+yaZ=FsY%~giaH9G=3@Z4{ zyK6~Tb>XLe{_`cs0sf}^{*U~MDxzrg1^>JOr~MG{*EZZ<1skNTZM9e?rjPl}ulq^6 z3)+jj{N^#goNV&wqmO>lPIJ^Rt?KZXt@0H9)o(Y}paqu+H3i#mzvp$ZR(OsI4YJ`* zW2=~Lo%)lXe}=5Z5zzFLGC1UhWiGh76|A#!g-9)5S7uUAiI%^>9Fm3ly}cGb@_67O zSS=-+jYLwb*a=vBE>T61BUMVFuNF!OTsf7h<^5%W=3_of{bxDFPGfExQ{SxBPdjt_ zH0JhcVP{s6_y3Ua5;|FPEM zyXhvjJ78ZQkX7}Pu!r5TvqC-Z*a)0v#_@pu64llt0sXvFTkZgVh@|OfiT>q4P)>n^ zf#4SEQV-J>WTO5cpKB^z z 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 - db 0f3h - else - db 0edh,77h,m & 7fh - endif -endm -; --------------------------------------------------------------------------- * -ei macro m - ifb - db 0fbh - else - db 0edh,7fh,m & 7fh - endif -endm -; --------------------------------------------------------------------------- * -exts macro r - ifidn , - dw 64edh - exitm - endif - ifidn , - dw 6cedh - exitm - endif -endm -; --------------------------------------------------------------------------- * -im macro p - ifidn

    ,<0> - dw 46edh - exitm - endif - ifidn

    ,<1> - dw 56edh - exitm - endif - ifidn

    ,<2> - dw 5eedh - exitm - endif - ifidn

    ,<3> - dw 4eedh - exitm - endif -endm -; --------------------------------------------------------------------------- * -inw macro d,s -ifidn , - ifidn ,<(c)> - dw 0b7edh - endif -endif -endm -; --------------------------------------------------------------------------- * -ldctl macro d,s -ifidn ,<(c)> - ifidn , - dw 6eedh ;; ldctl (c),hl - exitm - endif - ifidn , - db 0ddh,0edh,6eh ;; ldctl (c),ix - exitm - endif - ifidn , - db 0fdh,0edh,6eh ;; ldctl (c),iy - exitm - endif -endif -ifidn ,<(c)> - ifidn , - dw 66edh ;; ldctl hl,(c) - exitm - endif - ifidn , - db 0ddh,0edh,66h ;; ldctl ix,(c) - exitm - endif - ifidn , - db 0fdh,0edh,66h ;; ldctl iy,(c) - exitm - endif -endif -ifidn , - ifidn , - dw 87edh ;; ldctl hl,usp - exitm - endif - ifidn , - db 0ddh,0edh,87h ;; ldctl ix,usp - exitm - endif - ifidn , - db 0fdh,0edh,87h ;; ldctl iy,usp - exitm - endif -endif -ifidn , - ifidn , - dw 8fedh ;; ldctl usp,hl - exitm - endif - ifidn , - db 0ddh,0edh,8fh ;; ldctl usp,ix - exitm - endif - ifidn , - db 0fdh,0edh,8fh ;; ldctl usp,iy - exitm - endif -endif -endm - -; --------------------------------------------------------------------------- * -neg macro r - ifidn , - dw 44edh - exitm - endif - ifidn , - dw 4cedh - exitm - endif -endm -; --------------------------------------------------------------------------- * -outw macro d,s -ifidn ,<(c)> - ifidn , - dw 0bfedh ;; outw (c),hl - endif -endif -endm -; --------------------------------------------------------------------------- * -pcache macro - dw 65edh -endm -; --------------------------------------------------------------------------- * -retil macro - dw 55edh -endm -; --------------------------------------------------------------------------- * -sc macro n - dw 71edh,n -endm -; --------------------------------------------------------------------------- * - .list - \ No newline at end of file diff --git a/software/CPM/CPM09_CPMTEX/TEX.COM b/software/CPM/CPM09_CPMTEX/TEX.COM deleted file mode 100644 index c61539cbc79a4cba20fe600a2ad8a04ec3ef1e7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 VtP_Bnmvk>*{Ui4M<*OOg{SRuDLT&&6 diff --git a/software/CPM/CPM09_CPMTEX/TEXP.COM b/software/CPM/CPM09_CPMTEX/TEXP.COM deleted file mode 100644 index 48a84ec6b0b4a376fc2ab8d2b6a800a8d55089ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 to Quit\ - .BYTE CR,LF,LF - .ASCII \Enter Your Choice... $\ - -MESS3: - .BYTE CR,LF,LF - .ASCII \Do You Want to ECHO this on the Printer (Y/N) $\ - - -MESS4: - .BYTE CLEAR - .ASCIi \All Bad Files Will be Renamed in Increasing Sequence\ - .BYTE CR,LF - .ASCII \From a Seed Name You Enter, With a Default Extension of BAD\ - .BYTE CR,LF - .ASCII \NOTE: Files With Bad Allocation Parameters Will be Bypassed\ - .BYTE CR,LF - .ASCII \You Will use Option 4 to Remove Them ( Remove Option)\ - .BYTE CR,LF - .ASCII \Please Enter Seed Name of 5 Chars. $\ - - -MESS7: - .BYTE CLEAR - .ASCII \All data on selected disk will be DESTROYED\ - .BYTE CR,LF - .ASCII \Enter 'Y' if O.K. to continue, or 'N' if not $\ - - -MESS8: - .BYTE CR,LF,LF - .ASCII \TRACK\ - .BYTE CR,LF,LF+80H,EOL - - -MESS9: - .BYTE ' ',' ',' ',' ',' '+80H,EOL - - -MESS10: - .BYTE CR,LF - .ASCII \TRACK SECTOR TRACK SECTOR\ - .BYTE CR,LF+80H,EOL - -MESS11: - .BYTE CLEAR - .ASCII \Please Enter Name for this File $\ - - -MESS12: - .BYTE CR,LF,LF - .ASCII \You may not use the SYSTEM DRIVE for this function $\ - -MESS13: - .BYTE CLEAR - .ASCII \Please enter drive to copy from ( A: to P:) $\ - -MESS14: - .BYTE CR,LF - .ASCII \Please enter drive to copy to ( A: to P:) $\ - -MESS15: - .BYTE CR,LF,LF - .ASCII \Sorry but those drives have different characteristics $\ - -MESS16: - .BYTE CR,LF,LF,LF - .ASCII \The destination drive did not copy the data correctly.\ - .BYTE CR,LF - .ASCII \The copy operation will terminate now $\ - -MESS17: - .BYTE CLEAR - .ASCII \Enter starting track to dump in 4 hex digits (eg: 0000) $\ -SECNUM: - .ASCIS \SECTOR # \ - - -TRAKNR: - .ASCIS \TRACK # \ - - -FILDAT: - .ASCIS \--------------------------------------- DIR# USR EX RW\ - - -BDAT: - .ASCIS \ DIR# USR EX RW\ - - -SIZVIL: - .ASCIS \ File Allocation Map Not in Data Area\ - - - -;******************************************************** -; PROGRAM STORAGE AREA FOLLOWS -;******************************************************** - -;CONSOLE INPUT BUFFER & SINGLE CHARACTER STORAGE - -ANS: - .BLKB 1 ;ONE BYE FOR CONSOLE INPUT DATA -ANS1: - .BLKB 1 - - -INBUFF: - .BYTE 16 ;16 CHARACTER BUFFER - .BLKB 18 - - -;PROGRAM STORAGE - -RRECS: .BLKW 1 ;RECORS READ IN (TO WRITE BACK) - -BADFNM: .BYTE 'A','A' ;INITIAL BAD FILE NAME -TEST: .BYTE 0 ;DRIVE TO TEST -CURTRK: .BLKB 2 ;CURRENT TRACK TO READ/WRITE -CURSEC: .BLKB 2 ;CURRENT SECTOR TO READ/WRITE -CURDMA: .BLKB 2 ;CURRENT DMA -DIRENT: .BLKB 2 ;DIRECTORY ENTRIES -DMALOC: .BLKB 2 ;DMA STORAGE -DIRLEN: .BLKB 2 ;LENGTH OF DIRECTORY -DPHADD: .BLKB 2 ;DPH VECTOR ADDRESS -XLATE: .BLKB 2 ;XLATE TABLE ADDRESS -LISTO: .BYTE 0 ;0 = CONSOLE, 1 = LIST -DMPFLG: .BYTE 1 ;DUMP FLAG 0 = DUMP -DIRPTR: .BLKB 2 ;CURRENT DIRECTORY ENTRY -LSTER: .BLKB 1 ;0 TO LIST, 1 IF NOT -SECTR: .BLKB 1 ;SECTOR # -RECCNT: .BLKB 2 ;RECORDS TO READ/WRITE -DMPREC: .BLKB 2 ;RECORDS TO DUMP -DMPSEC: .BLKB 2 ;SECTOR TO DUMP -DMPBUF: .BLKB 2 ;BUFFER TO DUMP -DMPTRK: .BLKB 2 ;TRACK TO DUMP -NUMSEC: .BLKB 2 ;NUMBER OF SECTORS TO R/W -SCNFLG: .BLKB 1 ;SPACE IN NAME FLAG -SPCERR: .BLKB 1 ;ERROR IN SPACE POSITION OF FILE NAME -DIRNUM: .BLKB 2 ;CURRENT DIRECTORY ENTRY BEING R/W -VILFLG: .BLKB 1 ;DISK SIZE VIOLATION FLAG -SECCNT: .BLKB 2 ;DISK SECTOR COUNTER FOR REMOVE -REMFLG: .BLKB 1 ;FILE REMOVAL FLAG -MAXREC: .BLKB 2 ;RECORDS ON DISK -CURREC: .BLKB 2 ;CURRENT RECORD COUNTER -RECNUM: .BLKB 2 ;CURRENT WORKING RECORD -RECPB: .BLKB 1 ;RECORDS PER BLOCK -RPBNUM: .BLKB 1 ;CURRENT RECORD IN BLOCK -BLKNUM: .BLKB 2 ;CURRENT BLOCK -BADNUM: .BLKB 2 ;NUMBER OF BAD RECORDS -FILNUM: .BLKB 1 ;NUMBER OF BAD FILES TO CREATE -FILCNT: .BLKB 1 ;BAD FILES CREATED -BLKPTR: .BLKB 2 ;POINTER TO CURRENT BLOCK ENTRY -SYSSEC: .BLKB 1 ;NUMBER OF SYSTEM TRACK SECTORS -DRVONE: .BLKB 1 ;DRIVE TO COPY FROM -DRVTWO: .BLKB 1 ;DRIVE TO COPY TO -CDMA: .BLKB 2 ;COPY DMA ADDRESS -MAXTRK: .BLKB 2 ;TOTAL TRACKS ON DRIVE - -.ASCII \TRACKS REMAINING====================\ - -REMTRK: .BLKB 2 ;REMAINING TRACKS ON DRIVE - - -NAMCNT: .BYTE '@',' ',' ' ;FILE NAME COUNTER - -TESTBF: .BLKB 12 ;TEST NAME GOES HERE - - -;******************************************************** -; F.C.B USED TO FIXUP BAD FILE NAMES -;******************************************************** - -BADNAM: - .ASCII \JUNKY \ - - - -FIXFCB: - .BYTE 0 - .BLKB 36 - - - .BLKW 256 -STACK: - .BLKB 2 - - -DIRBUF: .BLKB 128 -READBF: .BLKB 128 -WRITBF: .BLKB 128 - -.ASCII \BAD BLOCKS\ - -BLKTAB: - -FILBUF == BLKTAB+512 - -COPBF == FILBUF+1024 -COPBF1 == COPBF+(128*150) - - - .END - diff --git a/software/CPM/CPM10_DISKUTILFUNC5/DUF05.COM b/software/CPM/CPM10_DISKUTILFUNC5/DUF05.COM deleted file mode 100644 index 80fdef7e82366b7133d4c3208aab9bbc778310ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 diff --git a/software/CPM/CPM10_DISKUTILFUNC5/DUF05.PDF b/software/CPM/CPM10_DISKUTILFUNC5/DUF05.PDF deleted file mode 100644 index 4012b9815a911e329488b5552df093a664b20fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10482 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 ;;"(TOP)=" - PUSH H - CALL @AD ;;VALUE OF HL - POP H ;;TOP RESTORED - RET -;; -PSUB: -;; -DMP MACRO ?V,?N -;; REDEFINE DUMP TO USE @DM UTILITY - LOCAL PMSG,MSG -;; SPECIAL CASE IF NULL PARAMETERS - IF NUL VNAME -;; DUMP THE TOP OF THE STACK ONLY - CALL @DT - EXITM - ENDIF -;; OTHERWISE DUMP VARIABLE NAME - JMP PMSG -MSG: DB CR,LF ;;CRLF - DB '&?V=$' ;;MESSAGE -PMSG: ADR ?V ;;HL=ADDRESS -ACTIVE SET 0 ;;CLEAR ACTIVE FLAG - LXI D,MSG ;;MESSAGE TO PRINT - IF NUL ?N ;;USE LENGTH 1 - MVI C,1 - ELSE - MVI C,?N - ENDIF - CALL @DM ;;TO PERFORM THE DUMP - ENDM ;;END OF REDEFINITION - DMP VNAME,N - ENDM -; -; ***************************************** -; * END DUMP (ONLY) UTILITIES, * -; * BEGIN STACK MACHINE OPCODES * -; ***************************************** -ACTIVE SET 0 ;ACTIVE REGISTER FLAG -; -SIZ MACRO SIZE - ORG TRAN ;;SET TO TRANSIENT AREA -;; CREATE A STACK WHEN "XIT" ENCOUNTERED -@STK SET SIZE ;;SAVE FOR DATA AREA - LXI SP,STACK - ENDM -; -SAVE MACRO -;; CHECK TO ENSURE "ENTER" PROPERLY SET UP - IF STACK ;;IS IT PRESENT? - ENDIF -SAVE MACRO ;;REDEFINE AFTER INITIAL REFERENCE - IF ACTIVE ;;ELEMENT IN HL - PUSH H ;;SAVE IT - ENDIF -ACTIVE SET 1 ;;SET ACTIVE - ENDM - SAVE - ENDM -; -REST MACRO -;; RESTORE THE TOP ELEMENT - IF NOT ACTIVE - POP H ;;RECALL TO HL - ENDIF -ACTIVE SET 1 ;;MARK AS ACTIVE - ENDM -; -CLEAR MACRO -;; CLEAR THE TOP ACTIVE ELEMENT - REST ;;ENSURE ACTIVE -ACTIVE SET 0 ;;CLEARED - ENDM -; -DCL MACRO VNAME,SIZE -;; LABEL THE DECLARATION -VNAME: - IF NUL SIZE - DS 2 ;;ONE WORD REQ'D - ELSE - DS SIZE*2 ;;DOUBLE WORDS - ENDM -; -LIT MACRO VAL -;; LOAD LITERAL VALUE TO TOP OF STACK - SAVE ;;SAVE IF ACTIVE - LXI H,VAL ;;LOAD LITERAL - ?TR LIT - ENDM -; -ADR MACRO BASE,INX,CON -;; LOAD ADDRESS OF BASE, INDEXED BY INX, -;; WITH CONSTANT OFFSET GIVEN BY CON - SAVE ;;PUSH IF ACTIVE - IF NUL INX&CON - LXI H,BASE ;;ADDRESS OF BASE - EXITM ;;SIMPLE ADDRESS - ENDIF -;; MUST BE INX AND/OR CON - IF NUL INX - LXI H,CON*2 ;;CONSTANT - ELSE - LHLD INX ;;INDEX TO HL - DAD H ;;DOUBLE PRECISION INX - IF NOT NUL CON - LXI D,CON*2 ;;DOUBLE CONST - DAD D ;;ADDED TO INX - ENDIF ;;NOT NUL CON - ENDIF ;;NUL INX - LXI D,BASE ;;READY TO ADD - DAD D ;;BASE+INX*2+CON*2 - ENDM -; -VAL MACRO B,I,C -;; GET VALUE OF B+I+C TO HL -;; CHECK SIMPLE CASE OF B ONLY - IF NUL I&C - SAVE ;;PUSH IF ACTIVE - LHLD B ;;LOAD DIRECTLY - ELSE -;; "ADR" PUSHES ACTIVE REGISTERS - ADR B,I,C ;;ADDRESS IN HL - MOV E,M ;;LOW ORDER BYTE - INX H - MOV D,M ;;HIGH ORDER BYTE - XCHG ;;BACK TO HL - ENDIF - ?TR VAL ;;TRACE SET? - ENDM -; -STO MACRO B,I,C -;; STORE THE VALUE OF THE TOP OF STACK -;; LEAVING THE TOP ELEMENT ACTIVE - IF NUL I&C - REST ;;ACTIVATE STACK - SHLD B ;;STORED DIRECTLY TO B - ELSE - ADR B,I,C - POP D ;;VALUE IS IN DE - MOV M,E ;;LOW BYTE - INX H - MOV M,D ;;HIGH BYTE - ENDIF - CLEAR ;;MARK EMPTY - ?TR STO ;;TRACE? - ENDM -; -SUM MACRO - REST ;;RESTORE IF SAVED -;; ADD THE TOP TWO STACK ELEMENTS - POP D ;;TOP-1 TO DE - DAD D ;;BACK TO HL - ?TR SUM - ENDM -; -DIF MACRO -;; COMPUTE DIFFERENCE BETWEEN TOP ELEMENTS - REST ;;RESTORE IF SAVED - POP D ;;TOP-1 TO DE - MOV A,E ;;TOP-1 LOW BYTE TO A - SUB L ;;LOW ORDER DIFFERENCE - MOV L,A ;;BACK TO L - MOV A,D ;;TOP-1 HIGH BYTE - SBB H ;;HIGH ORDER DIFFERENCE - MOV H,A ;;BACK TO H -;; CARRY FLAG MAY BE SET UPON RETURN - ?TR DIF - ENDM -; -LSR MACRO LEN -;; LOGICAL SHIFT RIGHT BY LEN - REST ;;ACTIVATE STACK - REPT LEN ;;GENERATE INLINE - XRA A ;;CLEAR CARRY - MOV A,H - RAR ;;ROTATE WITH HIGH 0 - MOV H,A - MOV A,L - RAR - MOV L,A ;;BACK WITH HIGH BIT - ENDM - ENDM -; -GEQ MACRO LAB -;; JUMP TO LAB IF (TOP-1) IS GREATER OR -;; EQUAL TO (TOP) ELEMENT. - DIF ;;COMPUTE DIFFERENCE - CLEAR ;;CLEAR ACTIVE - ?TR GEQ - JNC LAB ;;NO CARRY IF GREATER - ORA H ;;BOTH BYTES ZERO? - JZ LAB ;;ZERO IF EQUAL -;; DROP THROUGH IF NEITHER - ENDM -; -DUP MACRO -;; DUPLICATE THE TOP ELEMENT IN THE STACK - REST ;;ENSURE ACTIVE - PUSH H - ?TR DUP - ENDM -; -BRN MACRO ADDR -;; BRANCH TO ADDRESS - JMP ADDR - ENDM -; -XIT MACRO - ?TR XIT ;;TRACE ON? - JMP 0 ;;RESTART AT 0000 - ORG DATA ;;START DATA AREA - DS @STK*2 ;;OBTAINED FROM "SIZ" -STACK: ENDM -; -; ***************************************** -; * MEMORY MAPPED I/O SECTION * -; ***************************************** -; INPUT VALUES WHICH ARE READ AS IF IN MEMORY -ADC0 EQU 1080H ;A-D CONVERTER 0 -ADC1 EQU 1082H ;A-D CONVERTER 1 -ADC2 EQU 1084H ;A-D CONVERTER 2 -ADC3 EQU 1086H ;A-D CONVERTER 3 -; -DAC0 EQU 1090H ;D-A CONVERTER 0 -DAC1 EQU 1092H ;D-A CONVERTER 1 -DAC2 EQU 1094H ;D-A CONVERTER 2 -DAC3 EQU 1096H ;D-A CONVERTER 3 -; -RWTRACE MACRO MSG,ADR -;; READ OR WRITE TRACE WITH MESSAGE -;; GIVEN BY "MSG" TO/FROM "ADR" - PRN - ENDM -; -RDM MACRO ?C -;; READ A-D CONVERTER NUMBER "?C" - SAVE ;;CLEAR THE STACK - IF DEBUGP ;;STOP EXECUTION IN DDT - RWTRACE ,% ADC&?C - UGEN ;;ENSURE @IN IS PRESENT - CALL @IN ;;VALUE TO HL - SHLD ADC&?C ;;SIMULATE MEMORY INPUT - ELSE -;; READ FROM MEMORY MAPPED INPUT ADDRESS - LHLD ADC&?C - ENDIF - ?TR RDM ;;TRACING? - ENDM -; -WRM MACRO ?C -;; WRITE D-A CONVERTER NUMBER "?C" - REST ;;RESTORE STACK - IF DEBUGP ;;TRACE THE OUTPUT - RWTRACE ,% DAC&?C - UGEN ;;INCLUDE SUBROUTINES - CALL @AD ;;WRITE THE VALUE - ENDIF - SHLD DAC&?C - ?TR WRM ;;TRACING OUTPUT? - CLEAR ;;REMOVE THE VALUE - ENDM -; ***************************************** -; * END OF MACRO LIBRARY * -; ***************************************** - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/I8085.LIB b/software/CPM/CPM11_MAC80/I8085.LIB deleted file mode 100644 index 5bd6bab..0000000 --- a/software/CPM/CPM11_MAC80/I8085.LIB +++ /dev/null @@ -1,17 +0,0 @@ -; INTEL 8085 MACRO LIBRARY -; -; THE SIM (SET INTERRUPT MASK), -; AND RIM (READ INTERRUPT MASK) -; ARE DEFINED BY THE FOLLOWING MACROS: -; -SIM MACRO -;; SET INTERRUPT MASK FROM REG-A VALUE - DB 30H ;;OPCODE FOR SIM - ENDM -; -RIM MACRO -;; READ INTERRUPT MASK TO REG-A - DB 20H ;;OPCODE FOR RIM - ENDM -; - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/INTER.LIB b/software/CPM/CPM11_MAC80/INTER.LIB deleted file mode 100644 index 47588b0..0000000 --- a/software/CPM/CPM11_MAC80/INTER.LIB +++ /dev/null @@ -1,80 +0,0 @@ -; MACRO LIBRARY FOR BASIC INTERSECTION -; -; GLOBAL DEFINITIONS FOR DEBUG PROCESSING -TRUE EQU 0FFFFH ;VALUE OF TRUE -FALSE EQU NOT TRUE;VALUE OF FALSE -DEBUG SET FALSE ;INITIALLY FALSE -BDOS EQU 5 ;ENTRY TO CP/M BDOS -RCHAR EQU 1 ;READ CHARACTER FUNCTION -WBUFF EQU 9 ;WRITE BUFFER FUNCTION -CR EQU 0DH ;CARRIAGE RETURN -LF EQU 0AH ;LINE FEED -; -; INPUT/OUTPUT PORTS FOR LIGHT AND CLOCK -LIGHT EQU 00H ;TRAFFIC LIGHT CONTROL -CLOCK EQU 03H ;24 HOUR CLOCK (0,1,...,23) -; -; BIT POSITIONS FOR TRAFFIC LIGHT CONTROL -NSBITS EQU 4 ;NORTH SOUUTH BITS -EWBITS EQU 0 ;EAST WEST BITS -; -; CONSTANT VALUES FOR THE LIGHT CONTROL -OFF EQU 0 ;TURN LIGHT OFF -RED EQU 1 ;VALUE FOR RED LIGHT -YELLOW EQU 2 ;VALUE FOR YELLOW LIGHT -GREEN EQU 3 ;GREEN LIGHT -; -SETLITE MACRO DIR,COLOR -;; SET LIGHT GIVEN BY "DIR" TO COLOR GIVEN BY "COLOR" - IF DEBUG ;;PRINT INFO AT CONSOLE - LOCAL SETMSG,PASTMSG - MVI C,WBUFF ;;WRITE BUFFER FUNCTION - LXI D,SETMSG - CALL BDOS ;;WRITE THE TRACE INFO - JMP PASTMSG -SETMSG: DB CR,LF - DB '&DIR CHANGING TO &COLOR$' -PASTMSG: - EXITM - ENDIF - MVI A,COLOR SHL DIR&BITS ;;READIED - OUT LIGHT ;;SENT IN PROPER BIT POSITION - ENDM -; -TIMER MACRO SECONDS -;; CONSTRUCT INLINE TIME-OUT LOOP - LOCAL T1,T2,T3 ;;LOOP ENTRIES - MVI D,4*SECONDS ;;BASIC LOOP CONTROL -T1: MVI B,250 ;;250MSEC *4 = 1 SEC -T2: MVI C,182 ;;182*5.5USEC = 1MSEC -T3: DCR C ;;1 CY = .5 USEC - JNZ T3 ;;+10 CY = 5.5 USEC - DCR B ;;COUNT 250,249... - JNZ T2 ;;LOOP ON B REGISTER - DCR D ;;BASIC LOOP CONTROL - JNZ T1 ;;LOOP ON D REGISTER -;; ARRIVE HERE WITH APPROXIMATELY "SECONDS" -;; TIMEOUT, CONTINUE PROCESSING. - ENDM -; -CLOCK? MACRO LOW,HIGH,IFTRUE -;; CHECK FOR REAL-TIME CLOCK GREATER THAN OR -;; EQUAL TO "LOW." AND LESS THAN "HIGH." -;; CONTINUE AT "IFTRUE" WHEN BETWEEN THESE -;; TIMES. - LOCAL IFFALSE ;;ALTERNATE TO TRUE CASE - IN CLOCK ;;READ REAL-TIME CLOCK - IF NOT NUL HIGH ;;CHECK HIGH CLOCK - CPI HIGH ;;EQUAL OR GREATER? - JNC IFFALSE ;;SKIP TO END IF SO - ENDIF - CPI LOW ;;LESS THAN LOW VALUE? - JNC IFTRUE ;;SKIP TO LABEL IF NOT -IFFALSE: - ENDM -; -RETRY MACRO GOLABEL -;; CONTINUE EXECUTION AT "GOLABEL" - JMP GOLABEL - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/MAC.COM b/software/CPM/CPM11_MAC80/MAC.COM deleted file mode 100644 index cb0ac808be8b112556e456671f154b0aee04597c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 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 HyzjpOb%2Cv diff --git a/software/CPM/CPM11_MAC80/NCOMPARE.LIB b/software/CPM/CPM11_MAC80/NCOMPARE.LIB deleted file mode 100644 index c092361..0000000 --- a/software/CPM/CPM11_MAC80/NCOMPARE.LIB +++ /dev/null @@ -1,77 +0,0 @@ -; MACRO LIBRARY FOR 8-BIT COMPARISON OPERATION -; -TEST? MACRO X,Y -;; UTILTITY MACRO TO GENERATE CONDITION CODES - IF NOT NUL X ;;THEN LOAD X - LDA X ;;X ASSUMED TO BE IN MEMORY - ENDIF - IRPC ?Y,Y ;;Y MAY BE CONSTANT OPERAND -TDIG? SET '&?Y'-'0' ;;FIRST CHAR DIGIT? - EXITM ;;STOP IRPC AFTER FIRST CHAR - ENDM - IF TDIG? <= 9 ;;Y NUMERIC? - SUI Y ;;YES, SO SUB IMMEDIATE - ELSE - LXI H,Y ;;Y NOT NUMERIC - SUB M ;;SO SUB FROM MEMORY - ENDM -; -LSS MACRO X,Y,TL,FL -;; X LSS THAN Y TEST, -;; IF TL IS PRESENT, ASSUME TRUE TEST -;; IF TL IS ABSENT, THEN INVERT TEST - IF NUL TL - GEQ X,Y,FL - ELSE - TEST? X,Y ;;SET CONDITION CODES - JC TL - ENDM -; -LEQ MACRO X,Y,TL,FL -;; X LESS THAN OR EQUAL TO Y TEST - IF NUL TL - GEQ X,Y,FL - ELSE - LSS X,Y,TL - JZ TL - ENDM -; -EQL MACRO X,Y,TL,FL -;; X EQUAL TO Y TEST - IF NUL TL - NEQ X,Y,FL - ELSE - TEST? X,Y - JZ TL - ENDM -; -NEQ MACRO X,Y,TL,FL -;; X NOT EQUAL TO Y TEST - IF NUL TL - EQL X,Y,FL - ELSE - TEST? X,Y - JNZ TL - ENDM -; -GEQ MACRO X,Y,TL,FL -;; X GREATER THAN OR EQUAL TO Y TEST - IF NUL TL - LSS X,Y,FL - ELSE - TEST? X,Y - JNC TL - ENDM -; -GTR MACRO X,Y,TL,FL -;; X GREATER THAN Y TEST - IF NUL TL - LEQ X,Y,FL - ELSE - LOCAL GFL ;;FALSE LABEL - TEST? X,Y - JC GFL - DCR A - JNC TL -GFL: ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/NSWP.COM b/software/CPM/CPM11_MAC80/NSWP.COM deleted file mode 100644 index 00af4f5edd24e90360efa606fe613b567a748dd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11008 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 diff --git a/software/CPM/CPM11_MAC80/PIP.COM b/software/CPM/CPM11_MAC80/PIP.COM deleted file mode 100644 index b03787dae7894d73ff93a7399af64aa2d6c81fc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7040 zcmds6dvp|4ny<>UJN-(hlP29=mvn`!NP#?RLW3m<(7m?1>##%trI)q57s{|Ow}l5A{CB|DOnI+AL#F$r(ZZcBB{p466Xo!y>lOSN^h zP3mY<+d5iPsksfwR7b<4hD2*?$LyxWOrf!*{YuDck&4En4bAanydl+;jJCJ5URgub1g8>hZ7r>{JS8>%11-^!Y-p;9&qyRwO^r1( zAgv87<}`r^$Qu&L#%L;$h|W&5&Z=o?y*fU-rO|duO;c-QG%+(evt@SExM)La_GR;? z*EBRYHC)-=F(<1O$iX9J_r^t2bK9C=QK}=^8cif^nhQ*4CX#dFshZ}dYvE7m2`NOI zNY0J&2&5sBRnw4|Q`4S`CsR=}W@e(JwXx=^j+P&G8{(}r*DyQL-V|+YYEQMa##1ec zR+|B5pQEHjhijsj)pWFyy|Y?d<~6~@i$pb9Zrt@3)TJoMs+^rCXJ43ZZz4BB`Z0IQQ%dqdy1{=9oB=z@(LCk2E!piKTx1((j4ohV);P9fHFZkDX#{V z9H-Awe85t?QL^syYsaObeEn>Jv7wN_0)29!*30VD)sl5>L~P8V7<^sOy~W<A6Lu{ij()Ru++u z@`-JIiLD7#+5p~)GODYDe{J`Z63Sd zU)TlXpR7v1S|qO_&0tN5exgWTOPvQ9LgMWr`9T(QXzQqhnRS@4l#n&L^6%I?E@!xh z8*VEn6^pa7?&_y;^$;`up@>BJbgh_c0|lus=(CEwf;F=eL8_jYj8z5S-6@ZkmdMu? z4=7XfPMY!}0I|H2no~6EzqO7DgsTh!(MP-Mq-4sU@}W~0D$Na@;X|h} zq@Irwi?O1>l%Ha^jfFyE-{`^jp!O7!#8V7-vz*G~Y(Uw}dPJsS29@bj2zvjEgMzTiq5c8U z+4s0pLo4>Jb&Birus?xVow0FaVbH5jGh>_6-zi`s1oq%ptIu=VvP^HWd|0x2Bg^a5 zXP}_IA6h&I!8CnXQdZllY#~*iVe%HJ(p;h(mc*}^vw9oT{sVh@WQlgKG_+D5S)y!X z1IX2#0?XM&X_~r)*(zwy zu~+&YDj}w@8!X-}22*W`v_V}WL9n`&(P&?>wuSX~f-IqJWe=QKsopCYPn3W$a5kW0 zGeG~MB~>n>ta8|A%JWR#N|Rf`rb~XFAwP&NWh*Uyr{Kh}|FAS*t&5Q9JtZ6H7~&+g z#=eq^mT1qjs!XLze1Qz)WC+s@t_e>gHpQg<+9b8QELcemSy zHek%ylZ0@HZrY?tsbp*G3^nyUl^@E z!nB7u@Gw&zhCMEi@`&AZ@dlJbqJEbLIqP<}EqJ8|=^R3_=F1WBFEM}Tu+K@81f>%Q; z>K}RJJuEg&Q*rdG65#HP;FVP*L8RZ?-EiMpxXchgvj-r?o9H&cEEioU}7e?~WvyU^n|5!@1%c`t_9NLYs$P4((AdhQExe-3+a%9hK@5^@Y1L2ff-FCg06=owIInaD@(ft-Fec z!umdMeb^Ka=HXzd514WfEf;p*t4uk{ci%Q&Zueaw`492kH|({VFQn!b>RyH_F}EJd1(5Gr1fCBu~eIZ_z9P4#}FUKvUl_z+;>W~y{x~4 z!o7!OQQ>r=usvR1N**5~YqZ~iQ#%oG>$P8_dwnSvcD2{k{tewFc6T|tdzp!#n~D^9 zf2lTAs#B**2-CHt^(7`aVk(BIXG_sc9@~n6fQSwZ=8n#Dsdm#D!#< zic86PsXOzJeh5)kWGP!MxW$_1S8>0M>TCSQGQTPRCtYq(P(Z2U_>7H3U$9;e7?1j?c38pGPu(pbV`r zDKXxr}4P@I#wdIJAET{5zY(BvypLqxmc7>*Ov1fu|3D& zsw{)_)^ff@4ltXbKb*rLSyUxvHkBKza_mlLf&Pi=0Z4T2PWP6}2axBDAI$Xenat^O z0#v;%CZQIqA#S8Smks36zWneu;;zel6#&Wx`> zeYed6xK`;fjwCTdr&8Ah(uKRil;4AO@>{gumj~4oY)I>S zyMp&Mbi(?Z6{4Dt1JBOK`-!QIeRI&*Tp^!;5!QD>b%5&N;vn$=81DPF!UDp{3hh1Q z<$@rn>hnyiU_|vtjL<(sT;QsNvKR7kk)9Zo2iRnqInIng(E20@&a1K0X9UHW`BpLr zZk$yj2us0AK1MF$L;n;c8wBNjyJW*b4w1hM%122xx=4@;F9o?P7z+R2@F~$)6;$3r zVJohY5W;M!_7;NrEomr`*%cJaNhU_=uppa0X8jW>95U&kMzBfWI9(Ug$Ae-G$EK0j zN=)mO;2Qj$LyPb-v!*OHt?z=^FhBh{vfHbX0rcLtwnt3s_Z8|O;z`_{xpjm#Xy5(h z`{0wzf)Vm3SR3etwi{jT6IMqV2nx4Sw0weSnKlA-`Zf>BUYxjtbQN1X!ZgAosG84N z7psAdSVFObFXV&SwfrqdG{t4Kf6Qzp=f96f+>8pfK|<*DA^;CE1fckGk zWKDPQx>i3nLR?4m^1YPgc}-}_!^0>rvsEfpqNu&72-ba-;wFxK1Cae&^2Irl1xYg` z@ep4x0#F0$i^Sx+Dre_G2m&$qZJ?ohz&BB;(6Um@=r;p=ia-o=OupY=4me9Gp`oFAYIx zkN5?;i}Uen*l*+G7HV&cyV;ZKr?BSQJB>J^6D}m5K_nR=;?dz8&(J^80SNH z5>rm&tego?3=jK}eKL`q*!8CT8CXN5T$I?=J6=N16k`hE(w(jgTlo&-valUH*Mzmt zDaW*j#ZPJN5a1?erl}nJL_Y1gH4B3Ro)tm^SV$~47Lr~?ODP2LHvBmbbg&Th4Po(X zz7rnh520afaXj~)g^%i8Xu2~;!pd24(2aB{`~u~7-&Y)BEpS&e!tE@`W! zZe1ZXy1dX4=jpqgcjYfB&(WjjSb9M2Rn8&Hjg(;z9(_%+jK4bblF@!!<;(Y2Rc0B{ z)75PyZk>W)6w=Qs6im|`gr5e(_bv{Ef3?U2{Lh;g-}S^IlO7Jn42&7mB6qV#ABfcH$0PV}uK)F4`2Y6r FzX90PwRivk diff --git a/software/CPM/CPM11_MAC80/READ.ME b/software/CPM/CPM11_MAC80/READ.ME deleted file mode 100644 index 8d26568..0000000 --- a/software/CPM/CPM11_MAC80/READ.ME +++ /dev/null @@ -1,2 +0,0 @@ -This is the Digital Research MAC, macro assembler. - diff --git a/software/CPM/CPM11_MAC80/SAMPLE.ASM b/software/CPM/CPM11_MAC80/SAMPLE.ASM deleted file mode 100644 index a09b450..0000000 --- a/software/CPM/CPM11_MAC80/SAMPLE.ASM +++ /dev/null @@ -1,11 +0,0 @@ - ORG 100H ;TRANSIENT PROGRAM AREA -BDOS EQU 0005H ;BDOS ENTRY POINT -WCHAR EQU 2 ;WRITE CHARACTER FUNCTION -; ENTER WITH CCP'S RETURN ADDRESS IN THE STACK -; WRITE A SINGLE CHARACTER (?) AND RETURN - MVI C,WCHAR ;WRITE CHARACTER FUNCTION - MVI C,'?' ;CHARACTER TO WRITE - CALL BDOS ;WRITE THE CHARACTER - RET ;RETURN TO THE CCP - END 100H ;START ADDRESS IS 100H - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/SELECT.LIB b/software/CPM/CPM11_MAC80/SELECT.LIB deleted file mode 100644 index 28df1f8..0000000 --- a/software/CPM/CPM11_MAC80/SELECT.LIB +++ /dev/null @@ -1,74 +0,0 @@ -; MACRO LIBRARY FOR "SELECT" CONSTRUCT -; -; LABEL GENERATORS -GENSLXI MACRO NUM -;; LOAD HL WITH ADDRESS OF CASE LIST - LXI H,SELV&NUM - ENDM -; -GENCASE MACRO NUM,ELT -;; GENERATE JMP TO END OF CASES - IF ELT GT 0 - JMP ENDS&NUM ;;PAST ADDR LIST - ENDIF -;; GENERATE LABEL FOR THIS CASE -CASE&NUM&@&ELT: - ENDM -; -GENELT MACRO NUM,ELT -;; GENERATE ONE ELEMENT OF CASE LIST - DW CASE&NUM&@&ELT - ENDM -; -GENSLAB MACRO NUM,ELTS -;; GENERATE CASE LIST -SELV&NUM: -ECNT SET 0 ;;COUNT ELEMENTS - REPT ELTS ;;GENERATE DW'S - GENELT NUM,%ECNT -ECNT SET ECNT+1 - ENDM ;;END OF DW'S -;; GENERATE END OF CASE LIST LABEL -ENDS&NUM: - ENDM -; -SELNEXT MACRO -;; GENERATE THE NEXT CASE - GENCASE %CCNT,%ECNT -;; INCREMENT THE CASE ELEMENT COUNT -ECNT SET ECNT+1 - ENDM -; -SELECT MACRO VAR -;; GENERATE CASE SELECTION CODE -CCNT SET 0 ;;COUNT "SELECTS" -SELECT MACRO V ;;REDEFINITION OF SELECT -;; SELECT ON V OR ACCUMULATOR CONTENTS - IF NOT NUL V - LDA V ;;LOAD SELECT VARIABLE - ENDIF - GENSLXI %CCNT ;;GENERATE THE LXI H,SELV# - MOV E,A ;;CREATE DOUBLE PRECISION - MVI D,0 ;;V IN D,E PAIR - DAD D ;;SINGLE PREC INDEX - DAD D ;;DOUBLE PREC INDEX - MOV E,M ;;LOW ORDER BRANCH ADDR - INX H ;;TO HIGH ORDER BYTE - MOV D,M ;;HIGH ORDER BRANCH INDEX - XCHG ;;READY BRANCH ADDRESS IN HL - PCHL ;;GONE TO THE PROPER CASE -ECNT SET 0 ;;ELEMENT COUNTER RESET - SELNEXT ;;SELECT CASE 0 - ENDM -;; INVOKE REDEFINED SELECT THE FIRST TIME - SELECT VAR - ENDM -; -ENDSEL MACRO -;; END OF SELECT, GENERATE CASE LIST - GENCASE %CCNT,%ECNT ;;LAST CASE - GENSLAB %CCNT,%ECNT ;;CASE LIST -;; INCREMENT "SELECT" COUNT -CCNT SET CCNT+1 - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/SEQIO.LIB b/software/CPM/CPM11_MAC80/SEQIO.LIB deleted file mode 100644 index 7fd4bf5..0000000 --- a/software/CPM/CPM11_MAC80/SEQIO.LIB +++ /dev/null @@ -1,439 +0,0 @@ -; SEQUENTIAL FILE I/O LIBRARY -; -FILERR SET 0000H ;REBOOT AFTER ERROR -@BDOS EQU 0005H ;BDOS ENTRY POINT -@TFCB EQU 005CH ;DEFAULT FILE CONTROL BLOCK -@TBUF EQU 0080H ;DEFAULT BUFFER ADDRESS -; -; BDOS FUNCTIONS -@MSG EQU 9 ;SEND MESSAGE -@OPN EQU 15 ;FILE OPEN -@CLS EQU 16 ;FILE CLOSE -@DIR EQU 17 ;DIRECTORY SEARCH -@DEL EQU 19 ;FILE DELETE -@FRD EQU 20 ;FILE READ OPERATION -@FWR EQU 21 ;FILE WRITE OPERATION -@MAK EQU 22 ;FILE MAKE -@REN EQU 23 ;FILE RENAME -@DMA EQU 26 ;SET DMA ADDRESS -; -@SECT EQU 128 ;SECTOR SIZE -EOF EQU 1AH ;END OF FILE -CR EQU 0DH ;CARRIAGE RETURN -LF EQU 0AH ;LINE FEED -TAB EQU 09H ;HORIZONTAL TAB -; -@KEY EQU 1 ;KEYBOARD -@CON EQU 2 ;CONSOLE DISPLAY -@RDR EQU 3 ;READER -@PUN EQU 4 ;PUNCH -@LST EQU 5 ;LIST DEVICE -; -; KEYWORDS FOR "FILE" MACRO -INFILE EQU 1 ;INPUT FILE -OUTFILE EQU 2 ;OUTPUTFILE -SETFILE EQU 3 ;SETUP NAME ONLY -; -; THE FOLLOWING MACROS DEFINE SIMPLE SEQUENTIAL -; FILE OPERATIONS: -; -FILLNAM MACRO FC,C -;; FILL THE FILE NAME/TYPE GIVEN BY FC FOR C CHARACTERS -@CNT SET C ;;MAX LENGTH - IRPC ?FC,FC ;;FILL EACH CHARACTER -;; MAY BE END OF COUNT OR NUL NAME - IF @CNT=0 OR NUL ?FC - EXITM - ENDIF - DB '&?FC' ;;FILL ONE MORE -@CNT SET @CNT-1 ;;DECREMENT MAX LENGTH - ENDM ;;OF IRPC ?FC -;; -;; PAD REMAINDER - REPT @CNT ;;@CNT IS REMAINDER - DB ' ' ;;PAD ONE MORE BLANK - ENDM ;;OF REPT - ENDM -; -FILLDEF MACRO FCB,?FL,?LN -;; FILL THE FILE NAME FROM THE DEFAULT FCB -;; FOR LENGTH ?LN (9 OR 12) - LOCAL PSUB - JMP PSUB ;;JUMP PAST THE SUBROUTINE -@DEF: ;;THIS SUBROUTINE FILLS FROM THE TFCB (+16) - MOV A,M ;;GET NEXT CHARACTER TO A - STAX D ;;STORE TO FCB AREA - INX H - INX D - DCR C ;;COUNT LENGTH DOWN TO 0 - JNZ @DEF - RET -;; END OF FILL SUBROUTINE -PSUB: -FILLDEF MACRO ?FCB,?F,?L - LXI H,@TFCB+?F ;;EITHER @TFCB OR @TFCB+16 - LXI D,?FCB - MVI C,?L ;;LENGTH = 9,12 - CALL @DEF - ENDM - FILLDEF FCB,?FL,?LN - ENDM -; -FILLNXT MACRO -;; INITIALIZE BUFFER AND DEVICE NUMBERS -@NXTB SET 0 ;;NEXT BUFFER LOCATION -@NXTD SET @LST+1 ;;NEXT DEVICE NUMBER -FILLNXT MACRO - ENDM - ENDM -; -FILLFCB MACRO FID,DN,FN,FT,BS,BA -;; FILL THE FILE CONTROL BLOCK WITH DISK NAME -;; FID IS AN INTERNAL NAME FOR THE FILE, -;; DN IS THE DRIVE NAME (A,B..), OR BLANK -;; FN IS THE FILE NAME, OR BLANK -;; FT IS THE FILE TYPE -;; BS IS THE BUFFER SIZE -;; BA IS THE BUFFER ADDRESS - LOCAL PFCB -;; -;; SET UP THE FILE CONTROL BLOCK FOR THE FILE -;; LOOK FOR FILE NAME = 1 OR 2 -@C SET 1 ;;ASSUME TRUE TO BEGIN WITH - IRPC ?C,FN ;;LOOK THROUGH CHARACTERS OF NAME - IF NOT ('&?C' = '1' OR '&?C' = '2') -@C SET 0 ;;CLEAR IF NOT 1 OR 2 - ENDM -;; @C IS TRUE IF FN = 1 OR 2 AT THIS POINT - IF @C ;;THEN FN = 1 OR 2 -;; FILL FROM DEFAULT AREA - IF NUL FT ;;TYPE SPECIFIED? -@C SET 12 ;;BOTH NAME AND TYPE - ELSE -@C SET 9 ;;NAME ONLY - ENDIF - FILLDEF FCB&FID,(FN-1)*16,@C ;;TO SELECT THE FCB - JMP PFCB ;;PAST FCB DEFINITION - DS @C ;;SPACE FOR DRIVE/FILENAME/TYPE - FILLNAM FT,12-@C ;;SERIES OF DB'S - ELSE - JMP PFCB ;;PAST INITIALIZED FCB - IF NUL DN - DB 0 ;;USE DEFAULT DRIVE IF NAME IS ZERO - ELSE - DB '&DN'-'A'+1 ;;USE SPECIFIED DRIVE - ENDIF - FILLNAM FN,8 ;;FILL FILE NAME -;; NOW GENERATE THE FILE TYPE WITH PADDED BLANKS - FILLNAM FT,3 ;;AND THREE CHARACTER TYPE - ENDIF -FCB&FID EQU $-12 ;;BEGINNING OF THE FCB - DB 0 ;;EXTENT FIELD 00 FOR SETFILE -;; NOW DEFINE THE 3 BYTE FIELD, AND DISK MAP - DS 20 ;;X,X,RC,DM0...DM15,CR FIELDS -;; - IF FID&TYP<=2 ;;IN/OUTFILE -;; GENERATE CONSTANTS FOR INFILE/OUTFILE - FILLNXT ;;@NXTB=0 ON FIRST CALL - IF BS+0<@SECT -;; BS NOT SUPPLIED, OR TOO SMALL -@BS SET @SECT ;;DEFAULT TO ONE SECTOR - ELSE -;; COMPUTE EVEN BUFFER ADDRESS -@BS SET (BS/@SECT)*@SECT - ENDIF -;; -;; NOW DEFINE BUFFER BASE ADDRESS - IF NUL BA -;; USE NEXT ADDRESS AFTER @NXTB -FID&BUF SET BUFFERS+@NXTB -;; COUNT PAST THIS BUFFER -@NXTB SET @NXTB+@BS - ELSE -FID&BUF SET BA - ENDIF -;; FID&BUF IS BUFFER ADDRESS -FID&ADR: - DW FID&BUF -;; -FID&SIZ EQU @BS ;;LITERAL SIZE -FID&LEN: - DW @BS ;;BUFFER SIZE -FID&PTR: - DS 2 ;;SET IN INFILE/OUTFILE -;; SET DEVICE NUMBER -@&FID SET @NXTD ;;NEXT DEVICE -@NXTD SET @NXTD+1 - ENDIF ;;OF FID&TYP<=2 TEST -PFCB: ENDM -; -FILE MACRO MD,FID,DN,FN,FT,BS,BA -;; CREATE FILE USING MODE MD: -;; INFILE = 1 INPUT FILE -;; OUTFILE = 2 OUTPUT FILE -;; SETFILE = 3 SETUP FCB -;; (SEE FILLFCB FOR REMAINING PARAMETERS) - LOCAL PSUB,MSG,PMSG - LOCAL PND,EOD,EOB,PNC -;; CONSTRUCT THE FILE CONTROL BLOCK -;; -FID&TYP EQU MD ;;SET MODE FOR LATER REF'S - FILLFCB FID,DN,FN,FT,BS,BA - IF MD=3 ;;SETUP FCB ONLY, SO EXIT - EXITM - ENDIF -;; FILE CONTROL BLOCK AND RELATED PARAMETERS -;; ARE CREATED INLINE, NOW CREATE IO FUNCTION - JMP PSUB ;;PAST INLINE SUBROUTINE - IF MD=1 ;;INPUT FILE -GET&FID: - ELSE -PUT&FID: - PUSH PSW ;;SAVE OUTPUT CHARACTER - ENDIF - LHLD FID&LEN ;;LOAD CURRENT BUFFER LENGTH - XCHG ;;DE IS LENGTH - LHLD FID&PTR ;;LOAD NEXT TO GET/PUT TO HL - MOV A,L ;;COMPUTE CUR-LEN - SUB E - MOV A,H - SBB D ;;CARRY IF NEXT -;; SKIP ALL BUT OUTPUT FILES - IF ?F&TYP=2 - LOCAL EOB?,PEOF,MSG,PMSG -;; WRITE ALL PARTIALLY FILLED BUFFERS -EOB?: ;;ARE WE AT THE END OF A BUFFER? - LHLD ?F&PTR ;;NEXT TO FILL - MOV A,L ;;ON BUFFER BOUNDARY? - ANI (@SECT-1) AND 0FFH - JNZ PEOF ;;PUT EOF IF NOT 00 - IF @SECT>255 -;; CHECK HIGH ORDER BYTE ALSO - MOV A,H - ANI (@SECT-1) SHR 8 - JNZ PEOF ;;PUT EOF IF NOT 00 - ENDIF -;; ARRIVE HERE IF END OF BUFFER, SET LENGTH -;; AND WRITE ONE MORE BYTE TO CLEAR BUFFS - SHLD ?F&LEN ;;SET TO SHORTER LENGTH -PEOF: MVI A,EOF ;;WRITE ANOTHER EOF - PUSH PSW ;;SAVE ZERO FLAG - CALL PUT&?F - POP PSW ;;RECALL ZERO FLAG - JNZ EOB? ;;NON ZERO IF MORE -;; BUFFERS HAVE BEEN WRITTEN, CLOSE FILE - MVI C,@CLS - LXI D,FCB&?F ;;READY FOR CALL - CALL @BDOS - INR A ;;255 IF ERR BECOMES 00 - JNZ PMSG -;; FILE CANNOT BE CLOSED - MVI C,@MSG - LXI D,MSG - CALL @BDOS - JMP PMSG ;;ERROR MESSAGE PRINTED -MSG: DB CR,LF - DB 'CANNOT CLOSE &?F' - DB '$' -PMSG: - ENDIF - ENDM ;;OF THE IRP - ENDM -; -ERASE MACRO FID -;; DELETE THE FILE(S) GIVEN BY FID - IRP ?F, - MVI C,@DEL - LXI D,FCB&?F - CALL @BDOS - ENDM ;;OF THE IRP - ENDM -; -DIRECT MACRO FID -;; PERFORM DIRECTORY SEARCH FOR FILE -;; SETS ZERO FLAG IF NOT PRESENT - LXI D,FCB&FID - MVI C,@DIR - CALL @BDOS - INR A ;00 IF NOT PRESENT - ENDM -; -RENAME MACRO NEW,OLD -;; RENAME FILE GIVEN BY "OLD" TO "NEW" - LOCAL PSUB,REN0 -;; INCLUDE THE RENAME SUBROUTINE ONCE - JMP PSUB -@RENS: ;;RENAME SUBROUTINE, HL IS ADDRESS OF - ;;OLD FCB, DE IS ADDRESS OF NEW FCB - PUSH H ;;SAVE FOR RENAME - LXI B,16 ;;B=00,C=16 - DAD B ;;HL = OLD FCB+16 -REN0: LDAX D ;;NEW FCB NAME - MOV M,A ;;TO OLD FCB+16 - INX D ;;NEXT NEW CHAR - INX H ;;NEXT FCB CHAR - DCR C ;;COUNT DOWN FROM 16 - JNZ REN0 -;; OLD NAME IN FIRST HALF, NEW IN SECOND HALF - POP D ;;RECALL BASE OF OLD NAME - MVI C,@REN ;;RENAME FUNCTION - CALL @BDOS - RET ;;RENAME COMPLETE -PSUB: -RENAME MACRO N,O ;;REDEFINE RENAME - LXI H,FCB&O ;;OLD FCB ADDRESS - LXI D,FCB&N ;;NEW FCB ADDRESS - CALL @RENS ;;RENAME SUBROUTINE - ENDM - RENAME NEW,OLD - ENDM -; -GET MACRO DEV -;; READ CHARACTER FROM DEVICE - IF @&DEV <= @LST -;; SIMPLE INPUT - MVI C,@&DEV - CALL @BDOS - ELSE - CALL GET&DEV - ENDM -; - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/SIMPIO.LIB b/software/CPM/CPM11_MAC80/SIMPIO.LIB deleted file mode 100644 index 33fdb15..0000000 --- a/software/CPM/CPM11_MAC80/SIMPIO.LIB +++ /dev/null @@ -1,26 +0,0 @@ -; MACRO LIBRARY FOR SIMPLE I/O -BDOS EQU 0005H ;BDOS ENTRY -CONIN EQU 1 ;CONSOLE INPUT FUNCTION -MSGOUT EQU 9 ;PRINT MESSAGE TIL $ -CR EQU 0DH ;CARRIAGE RETURN -LF EQU 0AH ;LINE FEED -; -READ MACRO VAR -;; READ A SINGLE CHARACTER INTO VAR - MVI C,CONIN ;CONSOLE INPUT FUNCTION - CALL BDOS ;CHARACTER IS IN A - STA VAR - ENDM -; -WRITE MACRO MSG -;; WRITE MESSAGE TO CONSOLE - LOCAL MSGL,PMSG - JMP PMSG -MSGL: DB CR,LF ;;LEADING CRLF - DB '&MSG' ;;INLINE MESSAGE - DB '$' ;;MESSAGE TERMINATOR -PMSG: MVI C,MSGOUT ;;PRINT MESSAGE TIL $ - LXI D,MSGL - CALL BDOS - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/STACK.LIB b/software/CPM/CPM11_MAC80/STACK.LIB deleted file mode 100644 index af7f8e4..0000000 --- a/software/CPM/CPM11_MAC80/STACK.LIB +++ /dev/null @@ -1,56 +0,0 @@ -SIZ MACRO SIZE -;; SET "ORG" AND CREATE STACK - LOCAL STACK ;;LABEL ON THE STACK - ORG 100H ;;AT BASE OF TPA - LXI SP,STACK - JMP STACK ;;PAST STACK - DS SIZE*2 ;;DOUBLE PRECISION -STACK: ENDM -; -DUP MACRO -;; DUPLICATE TOP OF STACK - PUSH H - ENDM -; -SUM MACRO -;; ADD THE TOP TWO STACK ELEMENTS - POP D ;;TOP-1 TO DE - DAD D ;;BACK TO HL - ENDM -; -LSR MACRO LEN -;; LOGICAL SHIFT RIGHT BY LEN - REPT LEN ;;GENERATE INLINE - XRA A ;;CLEAR CARRY - MOV A,H - RAR ;;ROTATE WITH HIGH 0 - MOV H,A - MOV A,L - RAR - MOV L,A ;;BACK WITH HIGH BIT - ENDM - ENDM -; -ADC0 EQU 1080H ;A-D CONVERTER 0 -ADC1 EQU 1082H ;A-D CONVERTER 1 -ADC2 EQU 1084H ;A-D CONVERTER 2 -ADC3 EQU 1086H ;A-D CONVERTER 3 -; -DAC0 EQU 1090H ;D-A CONVERTER 0 -DAC1 EQU 1092H ;D-A CONVERTER 1 -DAC2 EQU 1094H ;D-A CONVERTER 2 -DAC3 EQU 1096H ;D-A CONVERTER 3 -; -RDM MACRO ?C -;; READ A-D CONVERTER NUMBER "?C" - PUSH H ;;CLEAR THE STACK -;; READ FROM MEMORY MAPPED INPUT ADDRESS - LHLD ADC&?C - ENDM -; -WRM MACRO ?C -;; WRITE D-A CONVERTER NUMBER "?C" - SHLD DAC&?C ;;VALUE WRITTEN - POP H ;;RESTORE STACK - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/TREADLES.LIB b/software/CPM/CPM11_MAC80/TREADLES.LIB deleted file mode 100644 index eb13a1e..0000000 --- a/software/CPM/CPM11_MAC80/TREADLES.LIB +++ /dev/null @@ -1,21 +0,0 @@ -; MACRO LIBRARY FOR STREET TREADLES -; -TRINP EQU 01H ;TREADLE INPUT PORT -TROUT EQU 01H ;TREADLE OUTPUT PORT -; -TREAD? MACRO TR,IFTRUE -;; "TREAD?" IS INVOKED TO CHECK IF -;; TREADLE GIVEN BY TR HAS BEEN SENSED. -;; IF SO, THE LATCH IS CLEARED AND CONTROL -;; TRANSFERS TO THE LABEL "IFTRUE" - LOCAL IFFALSE ;;IN CASE NOT SET -;; - IN TRINP ;;READ TREADLE SWITCHES - ANI 1 SHL TR ;;MASK PROPER BIT - JZ IFFALSE ;;SKIP RESET IF 0 - MVI A,1 SHL TR ;;TO RESET THE BIT - OUT TROUT ;;CLEAR IT - JMP IFTRUE ;;GO TO TRUE LABEL -IFFALSE: - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/WHEN.LIB b/software/CPM/CPM11_MAC80/WHEN.LIB deleted file mode 100644 index c4651dd..0000000 --- a/software/CPM/CPM11_MAC80/WHEN.LIB +++ /dev/null @@ -1,36 +0,0 @@ -; MACRO LIBRARY FOR "WHEN" CONSTRUCT -; -; "WHEN" COUNTERS -; LABEL GENERATORS -GENWTST MACRO TST,X,Y,NUM -;; GENERATE A "WHEN" TEST (NEGATED FORM), -;; INVOKE MACRO "TST" WITH PARAMETERS -;; X,Y WITH JUMP TO ENDW & NUM - TST X,Y,,ENDW&NUM - ENDM -; -GENLAB MACRO LAB,NUM -;; PRODUCE THE LABEL "LAB" & "NUM" -LAB&NUM: - ENDM -; -; "WHEN" MACROS FOR START AND END -; -WHEN MACRO XV,REL,YV -;; INITIALIZE COUNTERS FIRST TIME -WCNT SET 0 ;;NUMBER OF WHENS -WHEN MACRO X,R,Y - GENWTST R,X,Y,%WCNT -WLEV SET WCNT ;;NEXT ENDW TO GENERATE -WCNT SET WCNT+1 ;;NUMBER OF "WHEN"S - ENDM - WHEN XV,REL,YV - ENDM -; -ENDW MACRO -;; GENERATE THE ENDING CODE FOR A "WHEN" - GENLAB ENDW,%WLEV -WLEV SET WLEV-1 ;;COUNT CURRENT LEVEL DOWN -;; WLEV MUST NOT GO BELOW 0 (NOT CHECKED) - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/Z80.DOC b/software/CPM/CPM11_MAC80/Z80.DOC deleted file mode 100644 index a16455b..0000000 --- a/software/CPM/CPM11_MAC80/Z80.DOC +++ /dev/null @@ -1,402 +0,0 @@ - Z-80 Macro Library Documentation - -------------------------------- - -I. - The purpose of this library is to enable the assembly of the Z-80 - instruction set on a CP/M sytem using the CP/M MAC macro assembler. - - This library is invoked with the pseudo-op: - - " MACLIB Z80 " - -II. - The following symbols and notations are used in the individual macro - descriptions; - - r - Any of the 8 bit registers: A, B, C, D, E, H, L, or M - rr - Any of the 16 bit register pairs: BC, DE, HL, or SP - nn - 8 bit immediate data (0 through 255) - d - 8 bit signed displacment (-128 through +127) - nnnn - 16 bit address or immediate data (0 through 65535) - b - bit number (0-7, 7 is most significant, 0 is least) - addr - 16 bit address within PC+127 through PC-128 - m(zzz) - Memory at address "zzz" - -III. - - MACLIB ver. Zilog ver TDL ver --------------- ------------- ------------- - -LDX r,d LD r,(IX+d) MOV r,d(IX) - Load register from indexed memory (with IX) - -LDY r,d LD r,(IY+d) MOV r,d(IY) - Load register from indexed memory (with IY) - -STX r,d LD (IX+d),r MOV d(IX),r - Store register to indexed memory (with IX) - -STY r,d LD (IY+d),r MOV d(IY),r - Store register to indexed memory (with IY) - -MVIX nn,d LD (IX+d),nn MVI d(IX) - Move immediate to indexed memory (with IX) - -MVIY nn,d LD (IY+d),nn MVI d(IY) - Move immediate to indexed memory (with IY) - -LDAI LD A,I LDAI - Move I to A - -LDAR LD A,R LDAR - Move R to A - -STAI LD I,A STAI - Move A to I - -STAR LD R,A STAR - Move A to R - -LXIX nnnn LD IX,nnnn LXI IX,nnnn - Load IX immediate (16 bits) - -LXIY nnnn LD IY,nnnn LXI IY,nnnn - Load IY immediate (16 bits) - -LBCD nnnn LD BC,(nnnn) LBCD nnnn - Load BC direct (from memory at nnnn) - -LDED nnnn LD DE,(nnnn) LDED nnnn - Load DE direct - -LSPD nnnn LD SP,(nnnn) LSPD nnnn - Load SP direct - -LIXD nnnn LD IX,(nnnn) LIXD nnnn - Load IX direct - -LIYD nnnn LD IY,(nnnn) LIYD nnnn - Load IY direct - -SBCD nnnn LD (nnnn),BC SBCD nnnn - Store BC direct (to memory at nnnn) - -SDED nnnn LD (nnnn),DE SDED nnnn - Store DE direct - -SSPD nnnn LD (nnnn),SP SSPD nnnn - Store SP direct - -SIXD nnnn LD (nnnn),IX SIXD nnnn - Store IX direct - -SIYD nnnn LD (nnnn),IY SIYD nnnn - Store IY direct - -SPIX LD SP,IX SPIX - Copy IX to the SP - -SPIY LD SP,IY SPIY - Copy IY to the SP - -PUSHIX PUSH IX PUSH IX - Push IX into the stack - -PUSHIY PUSH IY PUSH IY - Push IY into the stack - -POPIX POP IX POP IX - Pop IX from the stack - -POPIY POP IY POP IY - Pop IY from the stack - -EXAF EX AF,AF' EXAF - Exchange AF and the alternate, AF' - -EXX EXX EXX - Exchange BC DE HL with BC' DE' HL' - -XTIX EX (SP),IX XTIX - Exchange IX with the top of the stack - -XTIY EX (SP),IY XTIY - Exchange IY with the top of the stack - -LDI LDI LDI - Move m(HL) to m(DE), increment DE and HL, decrement BC - -LDIR LDIR LDIR - Repeat LDI until BC = 0 - -LDD LDD LDD - Move m(HL) to m(DE), decrement HL, DE, and BC - -LDDR LDDR LDDR - Repeat LDD until BC = 0 - -CCI CPI CCI - Compare A with m(HL), increment HL, decrement BC - -CCIR CPIR CCIR - Repeat CCI until BC = 0 or A = m(HL) - -CCD CPD CCD - Compare A with m(HL), decrement HL and BC - -CCDR CPDR CCDR - Repeat CCD until BC = 0 or A = m(HL) - -ADDX d ADD (IX+d) ADD d(IX) - Indexed add to A - -ADDY d ADD (IY+d) ADD d(IY) - Indexed add to A - -ADCX d ADC (IX+d) ADC d(IX) - Indexed add with carry - -ADCY d ADC (IY+d) ADC d(IY) - Indexed add with carry - -SUBX d SUB (IX+d) SUB d(IX) - Indexed subtract - -SUBY d SUB (IY+d) SUB d(IY) - Indexed Subtract - -SBCX d SBC (IX+d) SBB d(IX) - Indexed subtract with "borrow" - -SBCY d SBC (IY+d) SBB d(IY) - Indexed subtract with borrow - -ANDX d AND (IX+d) ANA d(IX) - Indexed logical and - -ANDY d AND (IY+d) ANA d(IY) - Indexed logical and - -XORX d XOR (IX+d) XRA d(IX) - Indexed logical exclusive or - -XORY d XOR (IY+d) XRA d(IY) - Indexed logical exclusive or - -ORX d OR (IX+d) ORA d(IX) - Indexed logical or - -ORY d OR (IY+d) ORA d(IY) - Indexed logical exclusive or - -CMPX d CP (IX+d) CMP d(IX) - Indexed compare - -CMPY d CP (IY+d) CMP d(IY) - Index compare - -INRX d INC (IX+d) INR d(IX) - Increment memory at m(IX+d) - -INRY d INC (IY+d) INR d(IY) - Increment memory at m(IY+d) - -DCRX d INC (IX+d) INR d(IX) - Decrement memory at m(IX+d) - -DCRY d DEC (IY+d) DCR d(IY) - Decrement memory at m(IX+d) - -NEG NEG NEG - Negate A (two's complement) - -IM0 IM0 IM0 - Set interrupt mode 0 - -IM1 IM1 IM1 - Set interrupt mode 1 - -IM2 IM2 IM2 - Set interrupt mode 2 - -DADC rr ADC HL,rr DADC rr - Add with carry rr to HL - -DSBC rr SBC HL,rr DSBC rr - Subtract with "borrow" rr from HL - -DADX rr ADD IX,rr DADX rr - Add rr to IX (rr may be BC, DE, SP, IX) - -DADY rr ADD IY,rr DADY rr - Add rr to IY (rr may be BC, DE, SP, IY) - -INXIX INC IX INX IX - Increment IX - -INXIY INC IY INX IY - Increment IY - -DCXIX DEC IX DCX IX - Decrement IX - -DCXIY DEC IY DCX IY - Decrement IY - -BIT b,r BIT b,r BIT b,r - Test bit b in register r - -SETB b,r SET b,r SET b,r - Set bit b in register r - -RES b,r RES b,r RES b,r - Reset bit b in register r - -BITX b,d BIT b,(IX+d) BIT b,d(IX) - Test bit b in memory at m(IX+d) - -BITY b,d BIT b,(IY+d) BIT b,d(IY) - Test bit b in memory at m(IY+d) - -SETX b,d SET b,(IX+d) SET b,d(IX) - Set bit b in memory at m(IX+d) - -SETY b,d SET b,(IY+d) SET b,d(IY) - Set bit b in memory at m(IY+d) - -RESX b,d RES b,(IX+d) RES b,d(IX) - Reset bit b in memory at m(IX+d) - -RESY b,d RES b,(IY+d) RES b,d(IY) - Reset bit b in memory at m(IY+d) - -JR addr JR addr-$ JMPR addr - Jump relative unconditional - -JRC addr JR C,addr-$ JRC addr - Jump relative if Carry indicator true - -JRNC addr JR NC,addr-$ JRNC addr - Jump relative if carry indicator false - -JRZ addr JR Z,addr-$ JRC addr - Jump relative if Zero indicator true - -JRNZ addr JR NZ,addr-$ JRNZ addr - Jump relative if Zero indicator false - -DJNZ addr DJNZ addr-$ DJNZ addr - Decrement B, jump relative if non-zero - -PCIX JMP (IX) PCIX - Jump to address in IX ie, Load PC from IX - -PCIY JMP (IY) PCIY - Jump to address in IY - -RETI RETI RETI - Return from interrupt - -RETN RETN RETN - Return from non-maskable interrupt - -INP r IN r,(C) INP r - Input from port C to register r - -OUTP r OUT (C),r OUTP r - Output from register r to port (C) - -INI INI INI - Input from port (C) to m(HL), increment HL, decrement b - -INIR INIR INIR - Input from port (C) to m(HL), increment HL, decrement B, repeat if B <> 0 - -OUTI OTI OUTI - Output from m(HL) to port (C), increment HL, decrement B - -OUTIR OTIR OUTIR - Repeat OUTI until B = 0 - -IND IND IND - Input from port (C) to m(HL), decrement HL & B - -INDR INDR INDR - Repeat IND until B = 0 - -OUTD OTD OUTD - Output from m(HL) to port (C), decrement HL & B - -OUTDR OTDR OUTDR - Repeat OUTD until B = 0 - -RLCR r RLC r RLCR r - Rotate left circular register - -RLCX d RLC (IX+d) RLCR d(IX) - Rotate left circular indexed memory - -RLCY d RLC (IY+d) RLCR d(IY) - Rotate left circular indexed memory - -RALR r RL r RALR r - Rotate left arithmetic register - -RALX d RL (IX+d) RALR d(IX) - Rotate left arithmetic indexed memory - -RALY d RL (IY+d) RALR d(IY) - Rotate left arithmetic indexed memory - -RRCR r RRC r RRCR r - Rotate right circular register - -RRCX d RRC (IX+d) RRCR d(IX) - Rotate right circular indexed - -RRCY d RRC (IY+d) RRCR d(IY) - Rotate right circular indexed - -RARR r RR r RARR r - Rotate right arithmetic register - -RARX d RR (IX+d) RARR d(IX) - Rotate right arithmetic indexed memory - -RARY d RR (IY+d) RARR d(IY) - Rotate right arithmetic indexed memory - -SLAR r SLA r SLAR r - Shift left register - -SLAX d SLA (IX+d) SLAR d(IX) - Shift left indexed memory - -SLAY d SLA (IY+d) SLAR d(IY) - Shift left indexed memory - -SRAR r SRA r SRAR r - Shift right arithmetic register - -SRAX d SRA (IX+d) SRAR d(IX) - Shift right arithmetic indexed memory - -SRAY d SRA (IY+d) SRAR d(IY) - Shift right arithmetic indexed memory - -SRLR r SRL r SRLR r - Shift right logical register - -SRLX d SRL (IX+d) SRLR d(IX) - Shift right logical indexed memory - -SRLY d SRL (IY+d) SRLR d(IY) - Shift right logical indexed memory - -RLD RLD RLD - Rotate left digit - -RRD RRD RRD - Rotate right digit - - \ No newline at end of file diff --git a/software/CPM/CPM11_MAC80/Z80.LIB b/software/CPM/CPM11_MAC80/Z80.LIB deleted file mode 100644 index fecefd0..0000000 --- a/software/CPM/CPM11_MAC80/Z80.LIB +++ /dev/null @@ -1,601 +0,0 @@ -; -; Z-80 MACRO LIBRARY -; -; THE FOLLOWING MACROS ENABLE ASSEMBLING Z-80 INSTRUCTIONS -; WITH THE DIGITAL RESEARCH MACRO ASSEMBLER. -; -; INVOKE WITH "MACLIB Z80" -; -; -; -; MACRO FORMATS -; ----- ------- -; -; -; MACRO ZILOG TDL -; ----- ----- --- -; -; LDX R,D LD R,(IX+D) MOV R,D(IX) -; LDY R,D LD R,(IY+D) MOV R,D(IY) -; STX R,D LD (IX+D),R MOV D(IX),R -; STY R,D LD (IY+D),R MOV D(IY),R -; MVIX NN,D LD (IX+D),NN MVI D(IX) -; MVIY NN,D LD (IY+D),NN MVI D(IY) -; LDAI LD A,I LDAI -; LDAR LD A,R LDAR -; STAI LD I,A STAI -; STAR LD R,A STAR -; LXIX NNNN LD IX,NNNN LXI IX,NNNN -; LXIY NNNN LD IY,NNNN LXI IY,NNNN -; LBCD NNNN LD BC,(NNNN) LBCD NNNN -; LDED NNNN LD DE,(NNNN) LDED NNNN -; LSPD NNNN LD SP,(NNNN) LSPD NNNN -; LIXD NNNN LD IX,(NNNN) LIXD NNNN -; LIYD NNNN LD IY,(NNNN) LIYD NNNN -; SBCD NNNN LD (NNNN),BC SBCD NNNN -; SDED NNNN LD (NNNN),DE SDED NNNN -; SSPD NNNN LD (NNNN),SP SSPD NNNN -; SIXD NNNN LD (NNNN),IX SIXD NNNN -; SIYD NNNN LD (NNNN),IY SIYD NNNN -; SPIX LD SP,IX SPIX -; SPIY LD SP,IY SPIY -; PUSHIX PUSH IX PUSH IX -; PUSHIY PUSH IY PUSH IY -; POPIX POP IX POP IX -; POPIY POP IY POP IY -; EXAF EX AF,AF' EXAF -; EXX EXX EXX -; XTIX EX (SP),IX XTIX -; XTIY EX (SP),IY XTIY -; LDI LDI LDI -; LDIR LDIR LDIR -; LDD LDD LDD -; LDDR LDDR LDDR -; CCI CPI CCI -; CCIR CPIR CCIR -; CCD CPD CCD -; CCDR CPDR CCDR -; ADDX D ADD (IX+D) ADD D(IX) -; ADDY D ADD (IY+D) ADD D(IY) -; ADCX D ADC (IX+D) ADC D(IX) -; ADCY D ADC (IY+D) ADC D(IY) -; SUBX D SUB (IX+D) SUB D(IX) -; SUBY D SUB (IY+D) SUB D(IY) -; SBCX D SBC (IX+D) SBB D(IX) -; SBCY D SBC (IY+D) SBB D(IY) -; ANDX D AND (IX+D) ANA D(IX) -; ANDY D AND (IY+D) ANA D(IY) -; XORX D XOR (IX+D) XRA D(IX) -; XORY D XOR (IY+D) XRA D(IY) -; ORX D OR (IX+D) ORA D(IX) -; ORY D OR (IY+D) ORA D(IY) -; CMPX D CP (IX+D) CMP D(IX) -; CMPY D CP (IY+D) CMP D(IY) -; INRX D INC (IX+D) INR D(IX) -; INRY D INC (IY+D) INR D(IY) -; DCRX D INC (IX+D) INR D(IX) -; DCRY D DEC (IY+D) DCR D(IY) -; NEG NEG NEG -; IM0 IM0 IM0 -; IM1 IM1 IM1 -; IM2 IM2 IM2 -; DADC RR ADC HL,RR DADC RR -; DSBC RR SBC HL,RR DSBC RR -; DADX RR ADD IX,RR DADX RR -; DADY RR ADD IY,RR DADY RR -; INXIX INC IX INX IX -; INXIY INC IY INX IY -; DCXIX DEC IX DCX IX -; DCXIY DEC IY DCX IY -; BIT B,R BIT B,R BIT B,R -; SETB B,R SET B,R SET B,R -; RES B,R RES B,R RES B,R -; BITX B,D BIT B,(IX+D) BIT B,D(IX) -; BITY B,D BIT B,(IY+D) BIT B,D(IY) -; SETX B,D SET B,(IX+D) SET B,D(IX) -; SETY B,D SET B,(IY+D) SET B,D(IY) -; RESX B,D RES B,(IX+D) RES B,D(IX) -; RESY B,D RES B,(IY+D) RES B,D(IY) -; JR ADDR JR ADDR-$ JMPR ADDR -; JRC ADDR JR C,ADDR-$ JRC ADDR -; JRNC ADDR JR NC,ADDR-$ JRNC ADDR -; JRZ ADDR JR Z,ADDR-$ JRC ADDR -; JRNZ ADDR JR NZ,ADDR-$ JRNZ ADDR -; DJNZ ADDR DJNZ ADDR-$ DJNZ ADDR -; PCIX JMP (IX) PCIX -; PCIY JMP (IY) PCIY -; RETI RETI RETI -; RETN RETN RETN -; INP R IN R,(C) INP R -; OUTP R OUT (C),R OUTP R -; INI INI INI -; INIR INIR INIR -; OUTI OTI OUTI -; OUTIR OTIR OUTIR -; IND IND IND -; INDR INDR INDR -; OUTD OTD OUTD -; OUTDR OTDR OUTDR -; RLCR R RLC R RLCR R -; RLCX D RLC (IX+D) RLCR D(IX) -; RLCY D RLC (IY+D) RLCR D(IY) -; RALR R RL R RALR R -; RALX D RL (IX+D) RALR D(IX) -; RALY D RL (IY+D) RALR D(IY) -; RRCR R RRC R RRCR R -; RRCX D RRC (IX+D) RRCR D(IX) -; RRCY D RRC (IY+D) RRCR D(IY) -; RARR R RR R RARR R -; RARX D RR (IX+D) RARR D(IX) -; RARY D RR (IY+D) RARR D(IY) -; SLAR R SLA R SLAR R -; SLAX D SLA (IX+D) SLAR D(IX) -; SLAY D SLA (IY+D) SLAR D(IY) -; SRAR R SRA R SRAR R -; SRAX D SRA (IX+D) SRAR D(IX) -; SRAY D SRA (IY+D) SRAR D(IY) -; SRLR R SRL R SRLR R -; SRLX D SRL (IX+D) SRLR D(IX) -; SRLY D SRL (IY+D) SRLR D(IY) -; RLD RLD RLD -; RRD RRD RRD -; -; -; -; @CHK MACRO USED FOR CHECKING 8 BIT DISPLACMENTS -; -@CHK MACRO ?DD ; USED FOR CHECKING RANGE OF 8-BIT DISP.S - IF (?DD GT 7FH) AND (?DD LT 0FF80H) - 'DISPLACEMENT RANGE ERROR - Z80 LIB' - ENDIF - ENDM -LDX MACRO ?R,?D - @CHK ?D - DB 0DDH,?R*8+46H,?D - ENDM -LDY MACRO ?R,?D - @CHK ?D - DB 0FDH,?R*8+46H,?D - ENDM -STX MACRO ?R,?D - @CHK ?D - DB 0DDH,70H+?R,?D - ENDM -STY MACRO ?R,?D - @CHK ?D - DB 0FDH,70H+?R,?D - ENDM -MVIX MACRO ?N,?D - @CHK ?D - DB 0DDH,36H,?D,?N - ENDM -MVIY MACRO ?N,?D - @CHK ?D - DB 0FDH,36H,?D,?N - ENDM -LDAI MACRO - DB 0EDH,57H - ENDM -LDAR MACRO - DB 0EDH,5FH - ENDM -STAI MACRO - DB 0EDH,47H - ENDM -STAR MACRO - DB 0EDH,4FH - ENDM - -LXIX MACRO ?NNNN - DB 0DDH,21H - DW ?NNNN - ENDM -LXIY MACRO ?NNNN - DB 0FDH,21H - DW ?NNNN - ENDM -LDED MACRO ?NNNN - DB 0EDH,5BH - DW ?NNNN - ENDM -LBCD MACRO ?NNNN - DB 0EDH,4BH - DW ?NNNN - ENDM -LSPD MACRO ?NNNN - DB 0EDH,07BH - DW ?NNNN - ENDM -LIXD MACRO ?NNNN - DB 0DDH,2AH - DW ?NNNN - ENDM -LIYD MACRO ?NNNN - DB 0FDH,2AH - DW ?NNNN - ENDM -SBCD MACRO ?NNNN - DB 0EDH,43H - DW ?NNNN - ENDM -SDED MACRO ?NNNN - DB 0EDH,53H - DW ?NNNN - ENDM -SSPD MACRO ?NNNN - DB 0EDH,73H - DW ?NNNN - ENDM -SIXD MACRO ?NNNN - DB 0DDH,22H - DW ?NNNN - ENDM -SIYD MACRO ?NNNN - DB 0FDH,22H - DW ?NNNN - ENDM -SPIX MACRO - DB 0DDH,0F9H - ENDM -SPIY MACRO - DB 0FDH,0F9H - ENDM -PUSHIX MACRO - DB 0DDH,0E5H - ENDM -PUSHIY MACRO - DB 0FDH,0E5H - ENDM -POPIX MACRO - DB 0DDH,0E1H - ENDM -POPIY MACRO - DB 0FDH,0E1H - ENDM -EXAF MACRO - DB 08H - ENDM -EXX MACRO - DB 0D9H - ENDM -XTIX MACRO - DB 0DDH,0E3H - ENDM -XTIY MACRO - DB 0FDH,0E3H - ENDM - -LDI MACRO - DB 0EDH,0A0H - ENDM -LDIR MACRO - DB 0EDH,0B0H - ENDM -LDD MACRO - DB 0EDH,0A8H - ENDM -LDDR MACRO - DB 0EDH,0B8H - ENDM -CCI MACRO - DB 0EDH,0A1H - ENDM -CCIR MACRO - DB 0EDH,0B1H - ENDM -CCD MACRO - DB 0EDH,0A9H - ENDM -CCDR MACRO - DB 0EDH,0B9H - ENDM - -ADDX MACRO ?D - @CHK ?D - DB 0DDH,86H,?D - ENDM -ADDY MACRO ?D - @CHK ?D - DB 0FDH,86H,?D - ENDM -ADCX MACRO ?D - @CHK ?D - DB 0DDH,8EH,?D - ENDM -ADCY MACRO ?D - @CHK ?D - DB 0FDH,8EH,?D - ENDM -SUBX MACRO ?D - @CHK ?D - DB 0DDH,96H,?D - ENDM -SUBY MACRO ?D - @CHK ?D - DB 0FDH,96H,?D - ENDM -SBCX MACRO ?D - @CHK ?D - DB 0DDH,9EH,?D - ENDM -SBCY MACRO ?D - @CHK ?D - DB 0FDH,9EH,?D - ENDM -ANDX MACRO ?D - @CHK ?D - DB 0DDH,0A6H,?D - ENDM -ANDY MACRO ?D - @CHK ?D - DB 0FDH,0A6H,?D - ENDM -XORX MACRO ?D - @CHK ?D - DB 0DDH,0AEH,?D - ENDM -XORY MACRO ?D - @CHK ?D - DB 0FDH,0AEH,?D - ENDM -ORX MACRO ?D - @CHK ?D - DB 0DDH,0B6H,?D - ENDM -ORY MACRO ?D - @CHK ?D - DB 0FDH,0B6H,?D - ENDM -CMPX MACRO ?D - @CHK ?D - DB 0DDH,0BEH,?D - ENDM -CMPY MACRO ?D - @CHK ?D - DB 0FDH,0BEH,?D - ENDM -INRX MACRO ?D - @CHK ?D - DB 0DDH,34H,?D - ENDM -INRY MACRO ?D - @CHK ?D - DB 0FDH,34H,?D - ENDM -DCRX MACRO ?D - @CHK ?D - DB 0DDH,035H,?D - ENDM -DCRY MACRO ?D - @CHK ?D - DB 0FDH,35H,?D - ENDM - -NEG MACRO - DB 0EDH,44H - ENDM -IM0 MACRO - DB 0EDH,46H - ENDM -IM1 MACRO - DB 0EDH,56H - ENDM -IM2 MACRO - DB 0EDH,5EH - ENDM - - -BC EQU 0 -DE EQU 2 -HL EQU 4 -IX EQU 4 -IY EQU 4 -DADC MACRO ?R - DB 0EDH,?R*8+4AH - ENDM -DSBC MACRO ?R - DB 0EDH,?R*8+42H - ENDM -DADX MACRO ?R - DB 0DDH,?R*8+09H - ENDM -DADY MACRO ?R - DB 0FDH,?R*8+09H - ENDM -INXIX MACRO - DB 0DDH,23H - ENDM -INXIY MACRO - DB 0FDH,23H - ENDM -DCXIX MACRO - DB 0DDH,2BH - ENDM -DCXIY MACRO - DB 0FDH,2BH - ENDM - -BIT MACRO ?N,?R - DB 0CBH,?N*8+?R+40H - ENDM -SETB MACRO ?N,?R - DB 0CBH,?N*8+?R+0C0H - ENDM -RES MACRO ?N,?R - DB 0CBH,?N*8+?R+80H - ENDM - -BITX MACRO ?N,?D - @CHK ?D - DB 0DDH,0CBH,?D,?N*8+46H - ENDM -BITY MACRO ?N,?D - @CHK ?D - DB 0FDH,0CBH,?D,?N*8+46H - ENDM -SETX MACRO ?N,?D - @CHK ?D - DB 0DDH,0CBH,?D,?N*8+0C6H - ENDM -SETY MACRO ?N,?D - @CHK ?D - DB 0FDH,0CBH,?D,?N*8+0C6H - ENDM -RESX MACRO ?N,?D - @CHK ?D - DB 0DDH,0CBH,?D,?N*8+86H - ENDM -RESY MACRO ?N,?D - @CHK ?D - DB 0FDH,0CBH,?D,?N*8+86H - ENDM - -JR MACRO ?N - DB 18H,?N-$-1 - ENDM -JRC MACRO ?N - DB 38H,?N-$-1 - ENDM -JRNC MACRO ?N - DB 30H,?N-$-1 - ENDM -JRZ MACRO ?N - DB 28H,?N-$-1 - ENDM -JRNZ MACRO ?N - DB 20H,?N-$-1 - ENDM -DJNZ MACRO ?N - DB 10H,?N-$-1 - ENDM - -PCIX MACRO - DB 0DDH,0E9H - ENDM -PCIY MACRO - DB 0FDH,0E9H - ENDM - -RETI MACRO - DB 0EDH,4DH - ENDM -RETN MACRO - DB 0EDH,45H - ENDM - -INP MACRO ?R - DB 0EDH,?R*8+40H - ENDM -OUTP MACRO ?R - DB 0EDH,?R*8+41H - ENDM -INI MACRO - DB 0EDH,0A2H - ENDM -INIR MACRO - DB 0EDH,0B2H - ENDM -IND MACRO - DB 0EDH,0AAH - ENDM -INDR MACRO - DB 0EDH,0BAH - ENDM -OUTI MACRO - DB 0EDH,0A3H - ENDM -OUTIR MACRO - DB 0EDH,0B3H - ENDM -OUTD MACRO - DB 0EDH,0ABH - ENDM -OUTDR MACRO - DB 0EDH,0BBH - ENDM - - -RLCR MACRO ?R - DB 0CBH, 00H + ?R - ENDM -RLCX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 06H - ENDM -RLCY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 06H - ENDM -RALR MACRO ?R - DB 0CBH, 10H+?R - ENDM -RALX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 16H - ENDM -RALY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 16H - ENDM -RRCR MACRO ?R - DB 0CBH, 08H + ?R - ENDM -RRCX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 0EH - ENDM -RRCY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 0EH - ENDM -RARR MACRO ?R - DB 0CBH, 18H + ?R - ENDM -RARX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 1EH - ENDM -RARY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 1EH - ENDM -SLAR MACRO ?R - DB 0CBH, 20H + ?R - ENDM -SLAX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 26H - ENDM -SLAY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 26H - ENDM -SRAR MACRO ?R - DB 0CBH, 28H+?R - ENDM -SRAX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 2EH - ENDM -SRAY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 2EH - ENDM -SRLR MACRO ?R - DB 0CBH, 38H + ?R - ENDM -SRLX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 3EH - ENDM -SRLY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 3EH - ENDM -RLD MACRO - DB 0EDH, 6FH - ENDM -RRD MACRO - DB 0EDH, 67H - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/AMD9511X.CMD b/software/CPM/CPM12_PASCALMTP_v561/AMD9511X.CMD deleted file mode 100644 index 885d83e..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/AMD9511X.CMD +++ /dev/null @@ -1,3 +0,0 @@ -AMDIO -FPRTNS - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/AMDIO.SRC b/software/CPM/CPM12_PASCALMTP_v561/AMDIO.SRC deleted file mode 100644 index 5ec0b9b..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/AMDIO.SRC +++ /dev/null @@ -1,35 +0,0 @@ -MODULE AMDIOROUTINE; -(*----------------------------------------------------------*) -(* THIS MODULE CONTAINS TWO "ASSEMBLY" LANGUAGE SUBROUTINES *) -(* WHICH ARE CALLED FROM THE FPRTNS MODULE AND IF LOADED *) -(* THE TRAN9511 MODULE. *) -(* *) -(* THESE ROUTINES ARE SPECIFIC TO PASCAL/MT+ AND PASS *) -(* PARAMETERS BACK AND FORTH THROUGH REGISTERS *) -(* *) -(* THE USER SHOULD CHANGE THE PORT NUMBERS AS NECESSARY *) -(* FOR THEIR PARTICULAR HARDWARE IMPLEMENTATION OF THE 9511 *) -(*----------------------------------------------------------*) - -PROCEDURE @O95D; (* OUTPUT A-REG TO 9511 DATA PORT *) -BEGIN - INLINE("OUT / $88) (* CHANGE TO YOUR 9511 DATA PORT NUMBER *) -END; - -PROCEDURE @O95C; (* OUTPUT A-REG TO 9511 CONTROL PORT *) -BEGIN - INLINE("OUT / $89) (* CHANGE TO YOUR 9511 CTRL PORT NUMBER *) -END; - -PROCEDURE @I95D; (* INPUT A-REG FROM 9511 DATA PORT *) -BEGIN - INLINE("IN / $88) (* CHANGE TO YOUR 9511 DATA PORT (SAME AS @O95D) *) -END; - -PROCEDURE @I95C; (* INPUT A-REG FROM 9511 CONTROL PORT *) -BEGIN - INLINE("IN / $89) (* CHANGE TO YOUR 9511 CTRL PORT (SAME AS @O95C) *) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/APUSUB.MAC b/software/CPM/CPM12_PASCALMTP_v561/APUSUB.MAC deleted file mode 100644 index 83736a4..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/APUSUB.MAC +++ /dev/null @@ -1,99 +0,0 @@ - -;---------------------------------------------------------------; -; ; -; 9511 SUBROUTINES FOR TRAN9511 ; -; ; -;---------------------------------------------------------------; - - PUBLIC @AMD - EXTRN @I95D ;DATA PORT INPUT - EXTRN @O95D ;DATA PORT OUTPUT - EXTRN @I95C ;CTRL PORT INPUT - EXTRN @O95C ;CTRL PORT OUTPUT - -; PROCEDURE @AMD(FUNC:INTEGER; VAR R:REAL; VAR STAT:INTEGER); - -@AMD: - POP H ;RET ADR - SHLD RETADR - POP H ;ADDR OF APU STAT - POP D ;ADDR OF REAL - POP B ;FUNCTION - -; ROUTINE FOR FLOATING POINT DERIVED FUNCTIONS -; ENTER WITH: -; BC = COMMAND -; M(DE) = FUNCTION( M(DE) ) -; M(HL) = APU STAT - PUSH B - CALL PSHD ;PUSH ARGUMENT - POP B - MOV A,C ;ISSUE COMMAND - CALL APUCS - CALL POPSTAT ;GET DATA AND RETURN STATUS IN A-REG - MOV M,A ;STORE APU STATUS - INX H - MVI M,0 ;ZERO HIGH BYTE - LHLD RETADR - PCHL - -;---------------------------------------------------------------; -; ; -; 9511 UTILITY ROUTINES ; -; NOTE THESE CALL @IN95 AND @OUT95 IN AMDIO ; -; ; -;---------------------------------------------------------------; - -PSHD: INX D - INX D - INX D - MVI B,4 - -PSD10: LDAX D - CALL APUWS - DCX D - DCR B - JNZ PSD10 - INX D - RET - -APULOOP: - PUSH PSW -APUX2A: CALL @I95C - ORA A - JM APUX2A - POP PSW - RET - -APURS: CALL APULOOP - CALL @I95D - RET - -APUCS: CALL APULOOP - CALL @O95C - RET - - -APUWS: CALL APULOOP - CALL @O95D - RET - -POPSTAT: - PUSH D - MVI B,4 -PPS10: CALL APURS - STAX D - INX D - DCR B - JNZ PPS10 - POP D -RDSTAT: CALL @I95C - ORA A - JM RDSTAT - RET - - - DSEG -RETADR: DS 2 - END - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/ATWNB.SRC b/software/CPM/CPM12_PASCALMTP_v561/ATWNB.SRC deleted file mode 100644 index ec9d6b7..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/ATWNB.SRC +++ /dev/null @@ -1,95 +0,0 @@ -MODULE WRITEBYTES; -(* - * [PASLIB] @WNB - Write next byte to file - * Revisions: - * 10/21/81 Last update - * - *) - -(*$I fibdef.lib*) - -VAR - @LFB : EXTERNAL ^FIB; - RESULTIO: EXTERNAL INTEGER; - -EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; -EXTERNAL PROCEUDRE @DFLT; - -(*$E-*) -PROCEDURE WRITEBYTE(CH:CHAR); -VAR - I : INTEGER; -BEGIN - WITH @LFB^ DO - BEGIN - IF FSECINX = 128 THEN (* TIME TO WRITE *) - BEGIN - RESULTIO := @BDOS(26,WRD(ADDR(FSECTOR))); - RESULTIO := @BDOS(21,WRD(ADDR(FCB))); - FSECINX := 0 - END; - FSECTOR[FSECINX] := CH; - FSECINX := FSECINX + 1 - END (* WITH *) -END; (* WRITEBYTE *) -(*$E+*) - - -PROCEDURE @WNB; -LABEL 1; -VAR - SRCADR : ^CHAR; - CH : CHAR; - N,I : INTEGER; - -BEGIN - RESULTIO := 0; (* DEFAULT *) - MOVE(@LFB^.FBUFADR,SRCADR,2); - IF @LFB^.OPTION > FRANDOM THEN (* CONSOLE/TERM I/O *) - BEGIN - WITH @LFB^ DO - FOR N := 1 TO IOSIZE DO - BEGIN - CH := SRCADR^; - if ((ch = chr($0a)) and - (not ((option=ftrmio) or - (option=fauxio)))) then - goto 1; - IF OPTION = FLSTOUT THEN - BEGIN - I := @BDOS(5,WRD(CH)); (* WRITE IT TO THE PRINTER *) - IF CH = CHR($0D) THEN (* WE MUST ECHO LF *) - I := @BDOS(5,WRD($0A)) - END - ELSE - BEGIN - if option = fconio then - i := @bdos(2,wrd(ch)) - else if option = ftrmio then - i := @bdos(6,wrd(ch)) - else (* must be fauxio *) - i := @bdos(4,wrd(ch)); - - IF OPTION = FCONIO THEN - IF CH=CHR($0D) THEN - (* WE MUST ECHO CR/LF FOR CR *) - I := @BDOS(2,WRD($0A)) - END; -1: SRCADR := SRCADR + 1 - END; - EXIT - END; - - (* WE GET HERE ONLY IF NON-CONSOLE I/O *) - - FOR N := 1 TO @LFB^.IOSIZE DO - BEGIN - WRITEBYTE(SRCADR^); - SRCADR := SRCADR + 1 - END; - @DFLT; - -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/BCDREALS.ERL b/software/CPM/CPM12_PASCALMTP_v561/BCDREALS.ERL deleted file mode 100644 index 6170601fe1285c3ec79da018f6a6d9b981538877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3328 zcmcgu`&$!d7CtkXBohcR0fLDV4L3nRj9@XMt%D*rsUjs95H&%G5dl$(V(Zok28l>9 zAXjBIDt1|nHi8#yZ8rojDVG9PT~zb|1+}8vJk_>ZS$8L(yHEEI*!ks~bD4AAbKY}i zM%$zB6-Qt)z8?>n%a6r~sKf*f*Twa^Ap-kYMk#06l?mYy8m?hn}!Zwsg#Qzc_-P=WP`tF(2~duP}&&j}|9N>_JKl@A-K7 z@nd3?J_(G3grxAe7>(YwqF2Tqb~U?vq%X61r)xlPzr2z6w zBL;|zY;^)nW`f7;JPkMvn&kbTIfU#kE7&INPkKP#ec9+Qht_rbG+u!?Ty~mSE6az_ z0Fi<~=Y@Vx&TirCrSiC;!JV!qWA59LZ-DttQa4P+W~U zrj@adQTaDH6~ z;Vev-fW+IYgcP3b#Mo^7ehwom7ZIiD>0dk4LTOVCyhyJw3lgRDqK_c;sHD^vJe=<; z&SiN3<%B%$a3!VkL@T{0hKQ0^AfxeFNd%AM4U;t*--kJ{bQ@nIm#HzYJwP{CQC*o# z-z%3j(94HifEH_+w?iaMC!lm1&}jDJy($PWU$GajG@;TFKQfS!909Zn(rFr$z6W{D z8z_>e!-B(4{WCD6onY*Ts7YkltuuhE4sIt9cP%g&AscHPIrRv>g$n|~oCP5yn%hEk z`!9;PFg6y}PSSd-5<$7z#N!YY7g5O=QWEd7k92Z*E(PClcnWkX8Y$-@<-<<2)&bk6 zHB&Y@?JiK{P`!GXKVxCIDZt?Z5@1>C7JJeAvz?CeBsIR{Uo5;WE56i=iYXfu_wftW z$yYg}G_eC?bf+bV= zJ2?j^d*=k-($fO;Qo7EJ{UHs{^h7$@b#`#O0eNrx{Lx^u0zKCd4wV zG#x=8R?HPt*UVMXg-`$G{w<+6md|!wkDOj&2{vgla3{kFMphte-I<7)>t7E4OiO#G z&=G)i7#IG!vviF()bCvo_B91BUBSfn20}=dR6G`Qq0}2t2MF1qh&~YjVT5Ww>0K3e_PTxgfp1H(c zCIqK?23o-bfEjd}^Iw#7V9u<{T1)4rlT5!8!4Nj?hLKF)!73K0`fUW0{Ua7jSiC&8p#TGwD`)?PZRIaBUOHI!r0qj&ZG9l&heUibUV zIl4>93Z#6}grc^=-z4uJRBK`e6yQUhiUX=wv#i3PO?E^#g&2p;qb1)Nz<}U!Fn7U>zC;imT-I9iF#skryM@sM!#b zVGy-4f}zow^O_>;H<_@mB_jC+Vuvr*Q-msTM&5F$@5AnpD= zVoo)_mmov31kw=#X7sI4i;D6!{hl*W=sKf#a1!8r`fBm!n>%5p=}YcB&NEs|L<)u+ zRJUGD0VKQqBJsfZ2F@#28Mcb**>D#6gSsw5*BuG2}&mCyKk8HfcRRwgJR_tj3Mx@1V7@;oZ-6R+z5A+-QqNos($ra_t#N*pW~#=<|?VpE%j(>1`-qs)sx93db5w!;5?*YZP8;F;?UFvBuEC;0kEVBd^!l{hXgBEf?cRX zQ+tr0KSA{Za)|+adc@9;C9FIF_EiPCDh?5T!fe1dI6R!yZ_X!+j~*8V;5z(qWKd#p?+v?npjP-Pu5*a7ZoWn2ll67`M0Y4LHgfq5la8#fuN5Uw z&avv{eTovY{)^%UrD!W|r4)_3XWi);SFIOrqf{IHH%#yCQ>e*P^|iuL%<72m@wb-s z+oYuF&=KKFT>ZGQ><2|k{h`LXJ)$Rg29@F-SyEqbEU4Kpa%VNhE@AnX^%5x!^^J8! MQh-B~{%`gF8^F%Z8vp R2); - '$': WRITELN(SQRT(R1):10:3,SQRT(R2):10:3); - '<': TF(R1 < R2); - '>': TF(R1 > R2); - 'Z': TF(R1 <= R2); - 'G': TF(R1 >=R2); - '1': WRITELN(SQR(R1),' ',SQR(R2)); - '2': WRITELN(R1 + 1); - '3': WRITELN(1+R1); - '4': WRITELN(TRUNC(R1)); - '5': WRITELN(ROUND(R1)); - '6': WRITELN(RCONST); - '7': WRITELN(RCONST1); - '8': BEGIN R1 := -2.234; X[1] := 3.456; WRITELN(R1,' ',X[1]); END; - - END; -END; (* CALCULATOR *) - -PROCEDURE MENU; -BEGIN - WRITE('S:SIN '); - WRITE('C:COS '); - WRITE('A:ARCTAN '); - WRITE('L:LN '); - WRITE('E:EXP '); - WRITE('1:SQR '); - WRITELN('$:SQRT '); - WRITELN('+, -, *, / ARITHMETIC OPERATORS'); - WRITELN('M:NEGATE'); - WRITE('= : EQUAL '); - WRITELN('N : NOT EQUAL'); - WRITE('<:LESS THAN '); - WRITELN('>:GREATER THAN '); - WRITELN('Z:LESS THAN OR EQUAL TO'); - WRITELN('G:GREATER THAN OR EQUAL TO'); - WRITE('4:TRUNC '); - WRITELN('5:ROUND'); -END; - -BEGIN (* MAIN PROGRAM *) - REPEAT - WRITE('ENTER FIRST OPERAND? '); - READ(R1); - X[1] := R1; - WRITELN('R1=',R1); WRITELN; - WRITE('ENTER SECOND OPERAND? '); - READ(R2); - X[2] := R2; - WRITELN('R2=',R2); WRITELN; - WRITELN('ENTER OPERATOR:'); - MENU; - WRITE('? '); - READ(OP); - WRITELN; - CALC; - WRITELN('TYPE TO STOP'); - READ(CH1); - UNTIL CH1 = CHR(27) -END. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/CHN.MAC b/software/CPM/CPM12_PASCALMTP_v561/CHN.MAC deleted file mode 100644 index 06fe08c..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/CHN.MAC +++ /dev/null @@ -1,72 +0,0 @@ -;---------------------------------------------------------------------- -; [PASLIB] CHN.MAC: Load program and jump to it. -; @CHN -; NOTE: The body of this routine is actually executed at -; 80H+SYSBASE. This allows the routine to reside anywhere and to -; be moved to 80H+SYSBASE just before execution. @CHN also uses -; the default file control block. -; Revisions: -; 8/15/80 Last MGL update -; -; -;---------------------------------------------------------------------- - - PUBLIC @CHN - - EXTRN @MVL - - INCLUDE BCONFIG.LIB - -SYSBASE SET 0 - -@CHN:: -RTPCHAIN: - POP H - POP D ;GET FCB ADDRESS - LXI B,33 - LXI H,5CH+SYSBASE - PUSH H - PUSH D - PUSH B - CALL @MVL## ;MOVE FCB TO DEFAULT AREA - LXI SP,100H - - LXI H,100H+SYSBASE - PUSH H ;SAVE READ-IN LOCATION (ON THE NEW STACK) -; -; NOW MOVE THE REAL WORKHORSE ROUTINE TO 80H -; - LXI D,RTPCHN1 - LXI H,80H - LXI B,RTNLEN - PUSH H - PUSH D - PUSH B - CALL @MVL## - JMP 80H+SYSBASE ;AND GO FINISH IT OFF -; -; NOTE: THIS CODE ACTUALLY IS MOVED TO 80H+SYSBASE -; PRIOR TO EXECUTION -; - -RTPCHN1: - POP D ;GET ADDR OF I/O BUFFER - PUSH D ;SAVE IT AGAIN - MVI C,26 ;SETDMA CALL TO BDOS - CALL BDOS ; - POP H ;NOW BUMP IT BY 128 - LXI D,128 ; - DAD D ; - PUSH H ;SAVE IT AGAIN - LXI D,5CH+SYSBASE ;GET FCB ADDRESS - MVI C,20 ;REQUEST A READ - CALL BDOS ; - CPI 1 ;END OF FILE? - JNZ 80H+SYSBASE ;(RTPCHN1) RELOCATED - POP H ;WHEN DONE FLUSH THE STACK - JMP 100H+SYSBASE ;AND OFF TO THE NEWLY LOADED PROGRAM - -RTNLEN EQU $-RTPCHN1 - - END - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/CPMRD.SRC b/software/CPM/CPM12_PASCALMTP_v561/CPMRD.SRC deleted file mode 100644 index 8cf6b3e..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/CPMRD.SRC +++ /dev/null @@ -1,26 +0,0 @@ -MODULE CPMRD; -(* - * [PASLIB] @CPMRD - Read line from console. - * Revisions: - * - * - *) - -TYPE - IOBUF = RECORD - MAXLEN : BYTE; - RETLEN : BYTE; - IOBUF : ARRAY [0..254] OF CHAR - END; - -EXTERNAL FUNCTION @BDOS(FUNC,PARM:INTEGER):INTEGER; - -PROCEDURE @CPMRD(VAR BUF:IOBUF); -VAR - RESULT : INTEGER; -BEGIN - RESULT := @BDOS(10,ADDR(BUF)) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/CWT.MAC b/software/CPM/CPM12_PASCALMTP_v561/CWT.MAC deleted file mode 100644 index 7cb8dc2..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/CWT.MAC +++ /dev/null @@ -1,56 +0,0 @@ -;---------------------------------------------------------------------- -; [PASLIB] CWT.MAC: Wait for end-of-line character. -; @CWT -; Revisions: -; 9/6/80 Last MGL update -; -; -;---------------------------------------------------------------------- - - PUBLIC @CWT ;WAIT FOR CR - - EXTRN @GETCHR - EXTRN @LFB - -FEOLN EQU 59 ;BOOLEAN; -FBUFFER EQU 194 ;ARRAY [0..0] OF BYTE -OPTION EQU 56 ;(FREAD,FWRITE,...FLSTOUT) -FCONIO EQU 4 ;USED BY THIS MODULE - -@CWT: - LHLD @LFB - LXI D,FEOLN - DAD D - MOV A,M - RAR - JC ITSEOLN ;BR IF LAST THING WAS A CR - - CALL @GETCHR - POP B - JMP @CWT - -ITSEOLN: - MVI M,0 ;TURN EOLN OFF - LHLD @LFB - LXI D,OPTION - DAD D - MOV A,M - CPI FCONIO - RNC ;IF CONSOLE THEN WE ARE DONE - - CALL @GETCHR ;GOBBLE BLANK AND PUT LF IN BUFFER - POP B - - LHLD @LFB - LXI D,FBUFFER - DAD D - MOV A,M - CPI 0AH ;LF TO GOBBLE? - RNZ ;RETURN IF DONE - - CALL @GETCHR ;GOBBLE LF AND PUT NEXT CHAR IN BUFFER - POP B - RET - - END - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/DBUGHELP.TXT b/software/CPM/CPM12_PASCALMTP_v561/DBUGHELP.TXT deleted file mode 100644 index cfddffc..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/DBUGHELP.TXT +++ /dev/null @@ -1,23 +0,0 @@ -Pascal/MT+ SYMBOLIC DEBUGGER (c) 1983 by Digital Research, Inc. - - = [^] or with optional +/- offset - = or $ - = or : - -Display commands: - -D? Where ? is one of: - I - INTEGER C - CHAR L - BOOLEAN R - REAL - B - BYTE W - WORD S - STRING X - EXTENDED - V - var by name -PN Display procedure names -VN Display all var names associated with this procedure -SB Set breakpoint -RB Remove breakpoint -E+ Entry/Exit display on -E- Entry/Exit display off -BE Begin execution at start of user program -GO Continue execution from breakpont -TR Execute one Pascal statement and return -T Execute Pascal statements and return - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/DEBUGGER.ERL b/software/CPM/CPM12_PASCALMTP_v561/DEBUGGER.ERL deleted file mode 100644 index 88c6d37d39a2c1ac576b61f8e88522c1e561ff06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11392 zcmZvCdq5Lc8t=&@K!6w~@(_gBNuY>4Yy=t+yWRl;qD2Lj6x6i|ng~cBB3QKA9WX*v zw5Z^sp>0G^DzS@(m#%HYLqsGNP!R)K#7AkhU9H>JUH5kHHwn=0-sKPDnK|doIp=%* ze&2WY^z#xclKT5)5?1n_cpk%j!AcgnJYjhuKHb&*bsy@;>S`SQ_n$q#ZkBwg!JdB` z$p=Ip{7#1aR-Xr7jLGka{Q3XD07$qn-S=XdC~SgWS@vjsMg^KA2d{ z&vBIBp^Evh9OZY(W_}GvK9u;FAL1e(WO(quagh(5v*+K%d_;bf|F@a){w-bndHnQN$(nH%#zxq>vq{p6j9hI#{~OJ z7a!SDl}9Kk#OXsQ#(>sU<0PZUTxSaILyY4Hg-Qs7_AAi7=0tXB?0HJEz+~4Gc!w0W z1ZZ%SYlIn{C81C7CkST~$c&KP+5o#A0SoyUV1oAkMTU;=1G_N6bu>3g+QV?aAR#Db zg>F4s7lL0izz0cai`%Kz6(>U|EOH15WsJ|ezE$>%7=zgiSH%22=wF!N6q+klg)@}* z)VK`RJ)h4x?YpG)dL$l}sdpCFP`}BbMQ^7|Hl;SD+vygYW`zW1vIG|i7<`MN93TmO zUJ3rj!b=0$k!)_?lUVKz8Us4ac&SWv)fhXVusvwhBDWQPgP=9@tdaELE<__m`aV4YZe9g9C*C-kj6rU zdoC-9nR7_D79DFUchs$;jx`gE_FZ0Cqr7S5SgtY4QSz6RPqh!i zJkX5ew9Li^PEu)jH~MF24;37lVlObEx#y(6BF-Ml?wi!VD=N_9)I?SSntwqeM9d1% z5$<_CyAtK(YGVk8AaOTpT{HVu<*wQf$P!z}PvX{+to%kKF)`miFd#s`eediH_Sv3W zJeA&Kzb5WcrZGK&y+0FkYVHGFYo=n?CgM_|g(|sRANYcyRU>CZax)bpkTJFo?($NZ zc!MLLA=7?Ha@3$lpu)_vt(ZUZ9;tTi0~KzdmV4~|Dekq5^`d!P#K_+VvnqNbhbdaa z1_e2k%bBq4&n27kTbE}oMD|zl`+A1QAj@4PTWnQrt;A+5@PO13$jd6cwVKC)7E>Xf zh(aIXUw-{Vi(_wGuC<3B-6M*0nCu~=dr*iAJ(8OWF`^GCdISjZvt27oA6n-qnCf9Z z42I(~yZ`7t25bZKrdW@ZBc#7d#bU5ooZ&u}`Eyy!*-O^V85Y(!2@J$RsY=08-Vu?h z0~RO1kUzq?&axJg`V$qy2a!$dIQI(&xR@dZ)s-OPTZy!$Lp~d3k#_&Sqius^=`_*JK?3 zxgGwsesPfa-&k0NIv}`4A=0rh2BP3wVd+$mcyCd|-?Rb6r9~G~8}rSd`d;np zftAqR3UzO{r8aiEm+Xv^gpa!Sm`_s%%aD_EknVb1lywp~BukZ(`3zxLIOZfcGy0iS zwbo8K)R35(FrFK(D;=|bOF7slRjKW)hqKKt*SNVaNPG(`>e&=?=w?@5WL0T398MQz z%qj@79!_0Qg-#ij+T!QtkvxBni+;y7^Q{L-z2i=E1z1=RBkvjTx`uEto zWlKfQ%i1yGx>L~lOf4yM z2-x%MzhN&0c<}+|g4D(WFI`GoVG)DD>fX4(Yx$;meITk+M6V^CBluK*J&DaikK9!h zsSQA0Z?JpJNo=;&cCfPzY#xhZ(#CZL24FL9avmvf;YwAFJqs2Rwq(2q-0fx}Ol;ik z)NCRoGZE*{8ile>;{<-~-M{@3B(7yzU(B+)ipTZbhTYn%vakxBqVQOY#uF!SJYiGJ zrV$6mG=^r zs&RYyZDPx`AMA6DIb~tuBfE zwJf_0j@_hs{_$m3VnDgoqN-B=8*}=4a+L$nBgjEHFuIMO>!7?VN<_#WT`=8loVj=R z4bhH=T-qamKWp1v#HvmTC|~;e^u6nZVl4|t%HhNrj(=CQqQz?|+7q_k^))oo*7?=R zkegWKUD6iB=KL znOc%yj$hk>4z^ew>z0eDO(}Rx5vs~gf*|`yIs9y!YCQ|Qi$nj>Um409dI!h9uYWBg zi74j(k!^d7W6B$9`f*O~!3GKk_q=Go`Fq#zN*4{Bk#j6N(DRIBRLEsx`C4@!qW3hU ze{cWNIu_gdZ8k$R-c3GXGaM=V7vtCd1WS2F`}i#vr=0)mqY%fFsCywn({b?WE+>Qi z=0q{&Pi$BVR%CMCjfVyc9V!etPNeRbkq5dROjo zmQ4V#pmPnjqXQ7rJUy_BT%IHqLEu%9?E0CE@EBn*MAgYXAGCIc;F?${4aInAGJ(_| z``v*FNjR`|(X&E==1!j)WK{`3FcFdzwPQ(ok%Z7gua%^aFgSu0*<;nDo{qns5aKwB zJ&ID^8}f^0Aoh8aGxrrNlVW(JFyvp$4oRg9Fz4&%CYo#t39q5xg-@rO4df_+d>ETC zRo${C$CftnP5(jGh+0?Yx~nJ_KHBxIHS$>?^64kt0?Z?2SlbZRoRRaCn{e@{SnPyT z6c*foO|DL02ghvrdHVB=)#M4b58CCWAUycnoUG%+t!~D;F1~`GPx}#GL~*66`A!9m z^$m&jDsX3n)t%*k5|^X`#+_ z1EESmsBKQ}3fYW+k{|>~lYpaq-{kq;rGS`aj1hxH%{5buRdeN6A_inC}!BONo zPwmP2y4Go`U1);tGo96qE9ynBmR8&CJKx}39z)ND;{Z;+ybrF=L(m$vT&n7FQVy0i z^fm5`5$O(ez0gzL84IeW6}xs*+H0WQ82&ntf;#gLNrS5=z}rsnXaiJ>v*e$~`4^_#i!TD< zMem-l^a~PSAXU0JrcVg?uzOZo5ftY+W!Z0l5?Ivsfmgsn*?ur#|FhFD;YpW9gGpA; zXRteAVaW$kRkb0H6_j4Q?xdlPcG!2bU3KDe8uAC%VI5z#WgUV5xywsVF}QDmoo5y> z#UH`j>SwQ(epk%iGU{3$Qw;Fc%8^=5q|s!A$R6RN|I5kGMOG^t zVc`#GtglCJtx0x^NN!X>CvOe4g=c*`O)_sli4PS=M2c zby(zACxf*t!4(P=X$6`JEC80_xC(Z&BI+1D0ya!CZ1FVLnlS5%yG=2MQWhPrs$aZc zp<8AG?798(>Rm}C7HLg*%!jDTV4+ZCCy4=6?uqQCqUm3A&56%wM4hv!^t{NG+gyC` zylB!p2K_iwP|&>9g9s%Ahim-Wf0ksKgj4!(1G zd$J?LvbCGV5A2PbsT5npFfqC94x;aH^%GY_2aW)E3dw?;hlCcvmDgJq+S z7qBm->z3Agc{u-i+>sOIWcGaBo>N=pmpbL*u$+j^;-Bn|IqB)Yo0gqku(d)b={VLD zAHfQFEi9vQt61k?6|9xQHzh343YuC$pmI{>WjCiTnyrFTlS=^{|C=-qdkskek7 zukltmFz3)b#H-W(fn#G20hIh_)od5#fc`lfSU`PTpVvBC6LBLuuW}Q9nvnmMlI)gtjCmhP3NTR zF`kkTSYfXMEHAb_D7Q(HN;y{F=UrF>Var}PY$`ICSiU?Z5=igSd6{Q)UglghX6R%A zDgJ0v|Iv*YUr7qA!Apy{QkB$Ys;#HnuG7HLp8-eTqU9P1+9-0hSpl&3w3s{1nm+(f z5IsdyaRYlnYEu~*Jr`7_sVYjhMq`(%WycA7$%M#Y;;Ql<^$WntW7M&h-nU}@Oo5Z? zrLACqCTRb^ zE=sozwrPTGUPlR$gfP$y9s$Mz?@kLl^1ALl4Pc!b)_tA=81J{ZyMmYlee zeIJA6@SORklG@P)sZZ!h^CX~OTyscZed^#6*Xh`zkus&Xhm3$@UI0h z*DJPB6;S}|WvzF4Ht~Je@@Pa0{^cLW23oP;qbfNMWTAJ}{4?~r2^6*fQx3NArg=<< zt@j-fpL4`6pB!^6>&^|Wy1oJUAGJ3uohU0lwReGpz?tRAAJcoM!9)YmK6Ahi*c#7Y zb!fVsmaTlTrLR3>zR#6td)0>N%0anca2rNvN~HWcH}_4{?0}L#Fc!q7_CYYe&^BiH zJL?gCyA8sU$uTUe?1=blV4CAcxTE`=j3$V9pHL7s#~~+Sxi1*}z&cS908B9R`;5u9 z<4b7Yxj%!B;x3JKm6gSoiFM|GLTRjU0CJeAO%Ioptn9p!`jTx;AkBZe1f01rVYtB0 zTsIbMS?|xnT^3i{tAwt~J4u3R-mU;o2#0_t|Hn!p0%$!ormHK9b&ilK*ttxn)>OX7 zO0*sYpT&CQzKMigeCNn*#BD~HDbrQxR+6F z3ZP2x6>SxHG`DD|EPlBc&?_zDPbOvjd3)N-nE{X*ND`}Fy2?j*QPT*wTw?}tQha1W zOw|Y+1sn9?MD)a(LC{YmjJ=fobMFdW;$>DO0UxTZJ}6bqb5q`hnTA}IH=^SBZEpCj z{>4G!hJ9h16ZKC55e$K_n*xWOQFi2Vt#Xf7qn=JYDo77i9HO-ruYYS&gX#hQ6a|=D zwx##xsAIi^I2({sKbd7oL>-1P&|5mcNCq!_D^S3o zxnm91VQjC)iQgV$zk4kD?J@IrkICO2vwrtD@wdkaxtt7fvlo1Z!KU-vl()_$A&86% zd=7jg=%acHBD^3a0hwfCq380rBaYf31!(eWIt&>cuzrfd`h^ z{o?jlVR?ClUlwJFY3#JUv}YsatWM9nA^yzCnEA3^e9p<3K{COc^iaMwbURW#T@Cv1<^8Wb zDk44byHW21iJw9*b%SKhB0t@<;#CVYL&Q9t`P2=^)^76`m|^&Fp!th-!@`-t=F=ol z`Adri>c)DZ`JeDsTyL-4lE^HN#%Y_@ys3Me@@gCb4VeK5GCWncf`nbV1xI$utO!y- zbGG45zvme#CzPsiBp-}Y##@n86YdT8gT2HAhEeSN)|z*MQ(`2Ss|=R8!RD5+HrVdr z?1i4oijNRfSB_Yh;Qzo^{OA2)8D&QC@%^Ilx{m)Jy?_!LhOyu&^b$h1NBt)F;jbPz zMMB!7nmLs=Nj$fW@9z0u&^g&oGXlP$ze?a z2VB}Gv5$WV66+|S3@_fd@{juX){?gw7gC#`8nVkPV^qwKo&l*D#^A?HYiVH;cRySg zlVMk77)}f}pA(J>(*L1T+Z}7+q{P%xVAga^=3MksOSg}?sd}`HL1SJYC|?{aAIVeR zDcq(yFhe;aSHeE{X#{B0y#{hH4ortdU}CBNL72>_?g5!nA29w@e`R(QJjUQxmWoLJx%Cop(kr) zG4IBXz`@TopXtC3rN1mwh<#Z054QJ_auA?@ht0OkvtyzzeFtm*%KrxM(hw2pnGn|j zsUByeO8Zx_#kpZz-CeShVfB6$x_9jvos525lk9t#T>~|ux|G1MY^v4T;f-HjRp_=| zzN1HI&#&O9vc`>U4EjM_D+f{=2J9cuq+n|%;do&N8o6*ckhFG z*YQH1>X~sOh-}Y`RquEzZ=EPs{n1l?r?8mM^}IbrDm-5PCl;GwImm2z_3 z>R@-Mmn)Ny zfy`OJwyS1tZynl>dnQ83ZmWK<@#LNY-?4|5Kr+@aJrMGF1?=wtLx!B)J*CxoE`Q9$UmZzcSzxW1Q zUWRsj-T|%!#r~zxZp}+PPI%i?a#;NIx6!^3qcI&l5trvJf$DBp=FpAH zwK-iHYrPY`KT+@8{Orb_YN+(6`@s9rMcQCa=3k z{$|y*$49pGJtjmty3|bnRJ-CW{HZ z;S>JO#rwa9)$Gpx{jh|%dm%yPVnHi&xm49TQ+Ye8foAWQIueEl!eMSmYS1a?+eytT z-3;ZOs0NaHs1WO}cdhajw;eEUHVun^p2pq^HSpvHhF!L;_pK;M=Y&2|4);TM>#;)N z2`YSe5eh1HZ9#7khN@B{Nw<&=j3Bmg*P~|bKIHWvZ5e^B7Qo}m?at(7aw%c zSlx(n{zuEYq8K$J#5|wUQ?99|dl~cjEQc7{u_*7!n^nUw!8u4*8E9^h!us8DuD;(k z?HYV7yI@#+g3E+@DNoZ)h>n5P&gp$@KG9KX5k{D+cb7)WA_cV@4%(_DbRH41XaG3J z^~I+Tg0WswTRBY=XNzu$r1MSf7OSVBBlmh<#c><>s((;4^Kk^AN_m?VBMsnoP6 z;UJ;*fxaNlxk zLeh%z&a@Z7hkbbpnFrs24`B0mqu%l^XsnAEuMdKI0dN#C?_a@y3a*Z(A$ZHUIwsoT zk7vH0}8Vx9hLNpCsZRI{Kjj3Y;=O6Ua zDDX^2uf>8oY%TD0=b@5+5<~~r97+^djy0KVKfSh}A=}SG>rbN|MMu-#voe2d;KBog zKnMNe$mbdB4-Kk{ki3s^f7%j0&E%elUmc{bJb3;}T+cOTc0Uo< z927lmeL|3JnQ^}o17ijK1?|`oVieO zsevgv%JTN(tLZjMfkVT*80?yCL>VibdZQ*`w9A;KWqfzm>i#(n;SH zsgu1di9i=(;WB`9!bI!6)s3|8{`V{>{$V!X7$KRk?vbQse(x;&(I{Zl!!8#y)3LWp zE_S|J81XJ7lnI#xNp;u4DG!vkB>P1zVdQX z8Ls10Gq-3g3f#$>eSA#Ja?{pEe;Qx42=@X;0I(`Mbl+lN%{yOH-hTcZt_|dBH=`#I zA+B`3PG?ltTuE(e&HE3XZVcW&HgM{pEwg%!6nf8E1l91ipH+SY$9Zw*g97TYbz^Oe zzVvn)+^Qs4-jpN<99dF-!ImSS_gks5AF=nXUR3g6RBhIecc_Wa?)skqcKf zXm{LSI0^28#GRb5tQ3c%s(#+%bAC! zxM>||SI&LN4`#z&;%ReT97hVV!1kIvHAVlWr{i|SjbRsON|ftz2|-Oz*K$oYR&=~Z5wMg9@E67< zu+y-ahc|Aj{D2VDpNU(cO~V5BC2R`LC1wk2y57B#hDBBg`rcW4yBMZ}ylbK+LQs-n|sHkE!r%$aj0 zF1BO`CY*k}`tVx{w>^5_(_QkC(2IwcRtHKH$1DYHRNx-D1R>vq6%Vv{5R*5IOt$&zi)_kL9eY=z8KS97j}@CAsju( zGp46AHL<%9q#u3IeV!aa*4Yt-rPtAM&w7jRZ2MMT)t(d)_)=@tu^9!nQMNb^41!)C z z?DIIP=fIV)6d6h`qwLaxH3(wESsA{R%*@|gYfRuhr`#L4JZAYc-7Za)9w$n1ICMfBn*##+F@ z_!xYn-VHPz7Ee>pLD6i$#&lsJo4y+cr(;uuF9?w2C}vxe{luEA6OjN*Mks3{wB8lI zXr)*isWo$XYb(wOFQaKQpa^?Qc^l_>NRWFPtvGJT={$i9v4@b$erfU?rgc_Wg_A{K z1)DShj%3+i{Scu^;~n?3Ul|)EiH|*~p%nRk6_VB3-gq}svP4??bD@NFYjwA|z>QqC zLQ;B<>a??aGyXcoArliMaJvfb^SV`Dt>lo)W0#a_pmV;YvRm&)CahXgdWe#+@>W+~ z)w0M0c>627-B>>U)iVycOqx*oE!D~D+!%1Rk3+6p9#eXl(P@|WFyi_%w`D7&u~i6s zOwx@TtNMv>R^C5I#Jb5s3_e2X>~CLC2z`uZBCkjApC>D}GC;=x`yd7e{~&Vl3WEMy NyaLt>zw|SN{vXS=29p2) diff --git a/software/CPM/CPM12_PASCALMTP_v561/DIS8080.COM b/software/CPM/CPM12_PASCALMTP_v561/DIS8080.COM deleted file mode 100644 index 37f2a5e1a9317053ec2ecf4b00f4b1478c8f09ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22784 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 nE#G-^g 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/DIV.MAC b/software/CPM/CPM12_PASCALMTP_v561/DIV.MAC deleted file mode 100644 index 80b8ddd..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/DIV.MAC +++ /dev/null @@ -1,325 +0,0 @@ -;---------------------------------------------------------------------- -; [PASLIB] DIV.MAC: Signed and unsigned integer division and modulus. -; @DIV, @MOD, @XDIVD, @UDV, @UMD -; Revisions: -; 11/14/81 Last MGL update. -; 12/16/82 Fixed SPR problem in @MOD (CHW) -; -; -;---------------------------------------------------------------------- - - PUBLIC @DIV ;SIGNED DIV - PUBLIC @MOD ;SIGNED MOD - PUBLIC @UDV ;UNSIGNED DIV - PUBLIC @UMD ;UNSIGNED MOD - PUBLIC @XDIVD ;USED BY WRITE INTEGER - PUBLIC @GZF ;GET DIVIDE BY ZERO BOOLEAN FLAG ROUTINE - - EXTRN @HLT - EXTRN @WRS ;FOR ERROR MESSAGE - EXTRN @LFB ;FOR ERROR MESSAGE - EXTRN OUTPUT ;FOR ERROR MESSAGE - - DSEG -DIVZFLAG: DS 1 ;= 1 IF PREV DIVIDE WAS DIVIDE BY 0 -modsign: ds 1 ;= FF if result to be negative (12/16/82) - CSEG - -@GZF: - POP H - LDA DIVZFLAG ;PUT INTO CARRY - RAR ;AND PUSH IT (CARRY IS LOW ORDER BIT OF PSW) - PUSH PSW ;PUT FLAG ON STACK - PCHL ;AND EXIT - -DIVPOS: - XCHG - LXI H,0 - -;*************************************************** -;SUBR :DHLDEBYBC -;PURP :DIVIDE HLDE BY BC -;ENTRY :HL=DIVIDEND HIGH WORD,DE=DIVIDEND LOW WORD -; :BC=DIVISOR -;EXIT :HL=QUOTIENT,DE=REMAINDER -; :IF BC=0 THEN ERROR=ZERODIVISOR -; :NOTE THE QUOTIENT MUST BE BETWEEN 0,65535 -; : EXAMPLE: 70000/1 IS ILLEGAL BUT 70000/2 IS LEGAL -;USED :ALL -;CALLS :@DHLDEBYBC -;MACROS:NEGBC -;*************************************************** -@DHLDEBYBC: - XRA A - STA DIVZFLAG ;INITIALLY NO ERRORS - - MOV A,C - ORA B - JNZ CONT0 ;JIF NOT ZERO - ;ELSE ERROR EXIT - JMP ZDIV1 -; -CONT0: ;DIVISOR<>0 - MOV A,B - CMA - MOV B,A - MOV A,C - CMA - MOV C,A - INX B - ;TAKE NEGATIVE OF BC SO DAD B WILL - ;SET HL=HL-BC - MVI A,17 ;16 BITS + 1 -NEXTBIT: - DCR A - JNZ CONT1 ;JIF NOT DONE - ;ELSE EXIT - XCHG ;HL=QOUTIENT,DE=REMAINDER - JMP DIVXIT -; -;NOT DONE -;SHIFT HL LEFT CY=BIT 15 -CONT1: DAD H - JC DIV2 ;JIF BIT 15=1 -; -;SHIFT DE LEFT AND INTO HL (HL BIT0=DE BIT 15) - XCHG - DAD H - XCHG ;DE SHIFTED CY=DE BIT 15 - - JNC DIV0 ;JIF BIT15=0 (HL BIT0=0 ALREADY) - INR L ;ELSE SET IT TO 1 -; -;IF ABS(BC)>=HL THEN HL=HL-ABS(BC) AND E=E+1 -;?? -DIV0: - PUSH H ;SAVE HL - DAD B - JC DIV1 ;JIF ABS(BC) >= HL - ; ELSE GOTO NEXTBIT - POP H ;DISCARD SUBSTRACTION - JMP NEXTBIT - -; -; WELL ABS(BC) < HL SO INR E AND SET HL=HL-ABS(BC) -; -DIV1: - INR E - INX SP - INX SP ;DROP THE SAVED HL FROM THE STACK - JMP NEXTBIT -; -; -;ARRIVE HERE IF NEXTBIT=1 -DIV2: - XCHG - DAD H - XCHG ;SHIFT DE LEFT - JNC DIV3 ;JIF BIT 15=0 - INR L ;ELSE SET BIT0 OF HL=1 -; -;NOW HL=HL-ABS(BC) AND E=E+1 -DIV3: - DAD B - INR E - JMP NEXTBIT ;CONTINUE ON -; -DIVXIT: - XCHG - RET - -ZDIV1: - lxi h,output ;make it portable! - shld @lfb - lxi h,div0msg - push h - lxi h,-1 - push h - push h - call @wrs -; MVI C,9 -; LXI D,DIV0MSG -; CALL 5 - CALL @HLT - -DIV0MSG: - db div0len - db 13,10,'Divide by zero',13,10 -div0len equ $-div0msg-1 - - RET - -@XDIVD: - XRA A - STA DIVZFLAG - ORA C - JNZ Y10 ;CHECK FIRST BYTE, IF NOT ZERO BRANCH - ORA B - JZ Y99 ;IF NEXT BYTE 0 THEN DIVIDE BY 0 - XRI 80H - JZ Y99 ;MAKE SURE ITS NOT 32768 -Y10: MOV A,B - ANA A - JM Y50 ;BR IF DENOMINATOR NEGATIVE, ILLEGAL -Y20: ORA D - JM Y40 ;BR IF NUMERATOR NEGATIVE -Y30: XCHG - CALL DIVPOS - RET -Y40: ;COME HERE WHEN NUMERATOR IS NEGATIVE - MOV A,L - CPI 1 ;IF WE ARE ENTERED VIA MOD BRANCH - JZ ISMOD - - MOV A,E - CMA - MOV L,A - MOV A,D - CMA - MOV H,A - INX H ;TAKE TWOS COMPLEMENT OF NUMERATOR - CALL DIVPOS - MOV A,E - CMA - MOV E,A - MOV A,D - CMA - MOV D,A - INX D ;TAKE TWOS COMP OF QUOTIENT - RET - -ISMOD: -; LXI H,0FFFFH ;SIGN EXTEND - mov a,d - cma - mov d,a - mov a,e - cma - mov e,a - inx d - lxi h,0 - CALL @DHLDEBYBC ;GO DO THE DIVIDE - RET ;AND EXIT - -Y50: - XRA A - SUB C - MOV C,A - MVI A,00H - SBB B - MOV B,A - MOV A,D - ANA A - JM Y80 - JNZ Y60 - ORA E - JZ Y80 -Y60: XCHG - CALL DIVPOS - MOV A,E - CMA - MOV E,A - MOV A,D - CMA - MOV D,A - INX D -Y70: - - MOV A,L - SUB C - MOV L,A - MOV A,H - SBB B - MOV H,A - INX H - RET -Y80: - XRA A - SUB E - MOV L,A - MVI A,00H - SBB D - MOV H,A - CALL DIVPOS - XRA A - SUB L - MOV L,A - MVI A,00H - SBB H - MOV H,A - RET -Y99: - JMP ZDIV1 - - MVI A,1 - STA DIVZFLAG - - LXI D,0FFFFH - LXI H,0 - RET - - - -@DIV: - POP H - POP B - POP D - PUSH H - MVI L,0 ;SIGNAL NOT MOD - CALL @XDIVD - POP H - PUSH D - PCHL - - - -@MOD: - POP H - POP B - POP D - PUSH H - mvi a,0 - sta modsign - mvi a,128 - ana d - jz mod1 - mvi a,255 - sta modsign -mod1: - MVI L,1 ;SIGNAL MOD - CALL @XDIVD - lda modsign - cpi 255 - jnz mod2 - mov a,h - cma - mov h,a - mov a,l - cma - mov l,a - inx h -mod2: - XTHL - PCHL - -@UDV: ;UNSIGNED DIVIDE - POP D ;RET ADR - POP B ;DIVIDEND - POP H ;DIVISOR - PUSH D - CALL DIVPOS - XCHG - XTHL - PCHL - -@UMD: ;UNSIGNED MOD - POP D - POP B - POP H - PUSH D - CALL DIVPOS - XTHL - PCHL - END - - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/FIBDEF.LIB b/software/CPM/CPM12_PASCALMTP_v561/FIBDEF.LIB deleted file mode 100644 index 61fb546..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/FIBDEF.LIB +++ /dev/null @@ -1,25 +0,0 @@ -{ modified for 5.5 to add fauxio } - - { FIB LAYOUT } - - -TYPE - OPTTYPE = (notopen,fwrite,frdwr,frandom,fconio,ftrmio,flstout,fauxio); - - FIB=RECORD - FNAME : STRING[16]; { d:filename.ext } - FCB : PACKED ARRAY [0..34] OF CHAR; { CP/M FILE CONTROL BLOCK } - BUFLEN : INTEGER; { SIZE OF FBUFFER } - BUFIDX : INTEGER; { CURRENT INDEX INTO FBUFFER } - OPTION : OPTTYPE; - IOSIZE : INTEGER; { SIZE OF NEXT TRANSFER } - FEOLN : BOOLEAN; { TRUE IF TEXT FILE AT END-OF-LINE } - FEOF : BOOLEAN; { TRUE IF AT END-OF-FILE } - FBUFADR: WORD; { POINTER TO FBUFFER } - FSECINX: 0..128; { INDEX INTO FSECTOR +1 FOR OVERFLOW } - FTEXT : BOOLEAN; { TRUE IF THIS IS A TEXT FILE! } - NOSECTRS:BOOLEAN; { TRUE IF NO MORE DISK DATA AVAILABLE } - FSECTOR: PACKED ARRAY [0..127] OF CHAR; { 1 SECTOR BUFFER FOR CP/M } - FBUFFER: PACKED ARRAY [0..0 ] OF CHAR; - END; - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/FPREALS.ERL b/software/CPM/CPM12_PASCALMTP_v561/FPREALS.ERL deleted file mode 100644 index 5257c4c05129306bf4d4c4185dc72712789567b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 UH~D1v*DkHPgDHLQ|Ns2|0~Y+0H2?qr diff --git a/software/CPM/CPM12_PASCALMTP_v561/FPRTNS.ERL b/software/CPM/CPM12_PASCALMTP_v561/FPRTNS.ERL deleted file mode 100644 index d0f395d9bc1e1cc9ced0560660167cbe4aa4fac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmZ8fZ%h++7=G`190i(s6^g|_<7lk~%4z{6ff;vWm4ao6jV+*6O9!3e3Ka`ZWy{ro zHq0f+UsIT?jT33A0fdYVKb&<=K7H`BT?H0Y0h>e@_XfTI?CDS=l|6ZY!h-=wQY9i!oSh7I0 zl_iU`99ityuvRS37jG^wWD6ton+!!7ClMbzMQX6Nwz6D179s_?C}i$QhDIE$p<;Z6 z9;`G7CIP8_;iZITS?XC@d2eVPG)SzI^O4C%E;;*uBaj6*K=k+5r_G>zJ9GD0@V^Z9 zQi4vK3J97KZsy0q94jM?&wqY5cq%NIo&ga`Ck)RZEy3QfpzU$i03;?1_aLo70KxCm zKSE8#7kcZn2fJ>Jn=gE*j%f-6y=GxKFLfOF6p63sV0A%gRLTzr`x(`en5+Pu-6&9& zLK4uD`iqbYkX`EUjLEtTBc`!D^JAt_k{FMc7^=XXIP3gtfl!UveM43?(d7ofBD z3$`)d33}pU7$x|~(StNb0>6Z1cr8V|Dl zI#sDRi})B^K0_&b)y@tbQ|h3xzg!(>w~=kV6$aOGNMI3}FX(=kk<>LrbekCAgDhJi z@|Nq~um*b~v)(bsj>^0B%m&NAwhd1oJ6x0pxt7%h7!?K%7abN%zX8EMvvi>JoOhw_ z8x2_ubKN=`CGAkjV&tVx+agHB%7)e<|Iwk4F$w;O=p5}=?m)jPH&LA3IW8@utq2Gw z#pBZBI~jz-M4T0XhFCUp+@?ds%~xzouARG;gg~U?*IIZoZXeoI{rb$IkrJZJb- zcPFK*nxSNG9rPthAo> z8;#;Fx8GRs`cu-{5T{~EPxvU$Sk-)`vb^ko?@Gmp#*#6A%zsDRJP{atwgqRIt#6hn z4HG=eph*$3?Sb`~H3acIhkf+ulAmAJF0j^!W#ZN(gpN#`Ho>fYWRw5?b*#ZUNu|%% zv1`CqUwuCJluPvA_jjxL*8&;+$K0B_p(0CW%V*wwqMj4}wgNhj_0?E$OXj~QQ|3%7 z(i6t=Zf3h~6dLmdgT>~N?bVsCV__M`v`7RvPrY;_=k(Qlo-C!@JG*z-JPM8$(H6m(8X&M=F^_9#1rji^x*iKs--6$QE`T7H>YJj+DwWjkD` zDIZa-g05Iv*9`J;Sp2Xhsy>Jal-J$ddV2p1?n_DSO}fEu;^fl5=l>JD+6LVK diff --git a/software/CPM/CPM12_PASCALMTP_v561/FULLHEAP.ERL b/software/CPM/CPM12_PASCALMTP_v561/FULLHEAP.ERL deleted file mode 100644 index 4a68e254c54e4dd0287b96c01d86048f192e34b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 zcmcgt{Zkv)6}`KXV8KG(H5L|Mi6l~@0BsNgf(Rxnj2Jf!4LC?6k%>ou`AP~Vj>(WV z?X0l?#gGXdLnFry7Pw^GN~9vt+Rb>T8VoVP7Dm)|32{AO8-hze$i&Ss?JvD=g`Kp2 zK=+q7Z{K_O-Fxmi=XLzivV$wDV7|izVvB^f4UqAB&HMIM2_Vk|suLhH01+yHivTJI zNaO(jwG`!2OR@o4Tz-~}N{5=>=ze=M<}XiO+Hbwl}`;#=X4yhR&CoW8FP>KXo4!42?R8)9i%!aX%CR>~hxDopk~{ z$;<@Htt>PQ%zyCJe9P=godDb8`iFoOfX``zXY>@O>Iv`ohSpy)geoEJQRB%n!;!VF!o8W1EJRWEre?DBE z80vUxbpix`?@(}YYD8|7mE^8NG!A`x_VD5I(d%0B|27{3T0YMS>);~)gZG1`1Jy-~jv!kjWggSpw^RBLQQ6M;a#a4{i z7$*&dJ)>%g;tSyz$-v@*Z4+5zBR7_fuGu0Vk0?|FY3cemsbv0TiCNzPQ9{I5YnQiy z!tW;;z4~#T7UYXIdYP+%h^D6~_71i@_lUr}>cPr-ge2dh3chSC_iL=#aOl`*ucZHE z5iiXxlg*@k!Yj^2T`4)Ftbs_Ka~ckfHDpS1KNSipD{eB_`$tP`ZmP@1JF|I)u*Pf) zP&2_Z4mzPly24&_XbI`?aD=NioH@(Dzp^F+65n%>3W+zHPq^IBISlWL9HKG)E4|yM zh7SvqIcG`0{L5H$MG^AS{@ZI&x930Rs}nY*+G(Cna>5FG$AeiRi?Q#NHUC?nFZdtt ze)b-9Y;+E~ldy+#gdVLfoO+W9$Jd}Fg#h8@9pI^$4VrV^97-&T zNZ~}Zy;{irHv4-;WbCZiKjJZ6JS@EKjykTNkyPF2)vcY4C^eUwtR{CiFim-?o)S^X zN;Mwv1QcmF;4>4UkuC_fRK)0%p4#`woCY@I-vs zXlp4+ZjrI8j<8Ca&x=ms8Y_d&OYO{<09|?LI7UC7q43P-i&9Mxvr{w^H|6or_4cqS z7$JJBOwuQ^cf42LdPTF71_c@i()a3&YiOg6cHaW(ziuf~bfD<57W9Yrgs|DA1p~A`vCnd1Ypxkn zx8r5*a)pzF#y$3rz@*cDdb71pNvpVjn&Gz%umRJGB8UXo;x6lg5X~b)T zn$TVipg{^y_oqyg^=DfzNbVo#f=a7zr^SOLWtpw>zRhs>b5X%AhskN&409u)Em|8A z=wubHu02q2)112Vvv$`wqI{P|g4Wx*O^DwT;s=m_^Kreko!q5Hd{=4w4>s7}dfL4D zwdk!jwhGt7g!h>TK~{-8PQy&CP0vW%#(!nY^qPRd;5ZOjk>Hu@8{}{PlzkJjzDWo* zC0a_ePUkhFS5%@Y1P9gh2#c6E@R2s}Gw{fR7cS(d6qwhsalkxj;!<*z<@7@g{QqFm zQ}YWbHumS1)s!Xq;@#+FuAYx%x}OHaj~JczX}rKbhfKPP?{bp{lIsO36K?%i3TM-=MY2RP5Ld;IrRe+U@JE3&|wisL3;|EEq zAtHv|x$}C8J`kcz`W;yxZezKMeKouJQOc-HHK@qcQuBnG!>QFU9m8_y{aQXm=}WDK zg(#K_S!(hjDb-q{`*;37cf})@s#iJ SpXKbfEA??L00RmC$L~K?R7PL` diff --git a/software/CPM/CPM12_PASCALMTP_v561/GET.SRC b/software/CPM/CPM12_PASCALMTP_v561/GET.SRC deleted file mode 100644 index e05b08f..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/GET.SRC +++ /dev/null @@ -1,48 +0,0 @@ -MODULE GETREC; -(* - * [PASLIB] GET - Pascal GET operation. - * Revisions: - * 7/22/83 Added test for ftrmio to prevent interpretation of incoming - * characters (SP) - * - * - *) - -(*$I fibdef.lib*) - -VAR - @LFB: EXTERNAL ^FIB; - -EXTERNAL PROCEDURE @RNB; - -PROCEDURE GET(VAR F:FIB; SZ:INTEGER); -VAR - IS_EOLN : BOOLEAN; -BEGIN - F.FEOLN := FALSE; (* DEFAULT IS THAT WE RESET IT *) - - @LFB := ADDR(F); - IF F.FEOF THEN - BEGIN - F.FEOLN := TRUE; - EXIT - END; - - @RNB; (* GO READ FROM THE FILE/CONSOLE *) - - IF (F.FTEXT) and (f.option<>ftrmio) THEN - (* TEXT FILE, EOLN/EOF MUST BE SET *) - BEGIN - F.FEOF := (F.FBUFFER[0] = CHR($1A)) OR (F.FEOF); - IS_EOLN := (F.FBUFFER[0] = CHR($0D)); - IF (IS_EOLN) OR (F.FEOF) THEN - F.FEOLN := TRUE; - IF (IS_EOLN) AND (F.OPTION = FRDWR) THEN (* GOBBLE LF *) - @RNB; - IF F.FEOF OR F.FEOLN THEN - F.FBUFFER[0] := ' '; - END -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/HLT.MAC b/software/CPM/CPM12_PASCALMTP_v561/HLT.MAC deleted file mode 100644 index 68b1ac3..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/HLT.MAC +++ /dev/null @@ -1,18 +0,0 @@ -;---------------------------------------------------------------------- -; [PASLIB] HLT.MAC: Common termination point. -; @HLT -; Revisions: -; 8/1/80 Last MGL update -; -; -;---------------------------------------------------------------------- - - INCLUDE BCONFIG.LIB - - PUBLIC @HLT - -@HLT: - JMP BOOT - - END - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/INDEXER.DOC b/software/CPM/CPM12_PASCALMTP_v561/INDEXER.DOC deleted file mode 100644 index ca6564b..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/INDEXER.DOC +++ /dev/null @@ -1,9 +0,0 @@ -Indexer inputs a Pascal source file and outputs one of two forms -of index file. The first is the short form: only the procedure -or function declarations are extracted from the source. The -second is the long form: everything between the keyword 'procedure' -or 'function' and the keyword 'begin' is extracted. -Invoke indexer with the following command line: - -INDEXER [SHORT | LONG] - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/INDEXER.PAS b/software/CPM/CPM12_PASCALMTP_v561/INDEXER.PAS deleted file mode 100644 index 2d80e54fc57ef7e189d59de7b645969518c5fba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 zcmd5>&2Qtz6<3iai%KElIQUN@rG0D^2|ML!>=lSfS_>=|@otA9Op={pFJ` zxF0!s-I|v#0cjs*;YTQTbED_ELAbdA&>N2&+ZDmDVIR7?zd+Y*ZiL5UL32UqyTg6_ zYrDgf-JMgM1Q^(kaIKNR_2mqb$tnMcCUK(Wi$H{7#}`Mw9fqPUDUW%Q*6?>Q8GTBk zh#)xh{IKJA?vU1gZ23}@i*^acClpaA*_(vsH*0|=FBOtJLm!t&#dyHRPumT}Q26|f z`|XYT2a^GgTL*#XOhR$;^Cvr}Ft&Qn(G!;MTgPy+v$ds7a|+%7dWV+gfc&+TlWG|Y z7$X)2&JgDhJkJr9EA^U;MwWj}ROPO5cyj}{CVba&U@&oeq3yZwTpW+ldV%QgRrGop zGVh80#24_ZLx-%gxls*S2WUeaI}k(LC4-Uig(DRx-&@Ubv_J@KkHYt1oM#t#bOkmA zIV_80o)otbon?6uBhd2f3Z@9IY#ukI2T3R@?exInby%T1mX2-%Xz21k@IMdi4<3)Sz)Yt^}d*e z6DB(oT%r&hs&9T zj#b(v=87Upuo#9$Uk~a(wTe!| zpd)EzIMTYla6~AGWvAQea`<8ZbE@TdT~)!1*gEM`VyB+gdnIRZv5LTfW4X`aJ!G!} z*T~{1+a4b{?(?7(P^IF+-`=arXIYo)HC6AnA}8?dNTAVc*ED5tVxJ=B*kEi#8$R3z zwYzp@MU=7+HoRYw6J+68wb0oAir_l(>ytLBqIRyU7ZqILhAphUN1op&*BIMZW%z$+ zxl{^d%;-YpOK28l5+~d)ikxzMsfhBS`JY+n0iroia!l1FCHBQMmQXVb^CXQ+*xQW4 zg!|7r3#tr~1y&YXKm*rQuF^tf4=y8Sa$puZe;9T%7ilfmzAy`&KL)C+FZ0!lXpW@~ zDFBh9*Vkw?FV7+5QC?}jE0Av+~>|(BMozkgvvnEQ;IR-TeBcT zA`Zr0V8&`2;iQ;Xb&%GUflWZ7awW5qSr%6o>4L|Zr;a0o7cVn_WHzCpZ@Ixh_+0*K zKth5yTlvB~N*CwYUQwJcWWPGFU26RJsIW}2qh&ax@#hrN*>roQ(WAp8byR2Z1y)Fm z{y3dxNEhd?IP=wmpZ2ILA7PJCcas#CESma)4!8Ft2fv1Ra6M-hWPE-|Y1HmTGQ({U zivsn19g^z!S+7N@7p0VlWGhWj1Jb6hMI^1TC5@-Il*Tu&(1%(4P$0;MNHgY6b|1@= zDVA5y6}3YLS)Q6RJlpDIk0GkDCJD+WkO8V!^U0To)TxT%ty9ixG~-E+&wN7vsJ<8){~>3w7?J_sRqadAU1Ql<8Zl&^39N z&5l})RkxlvN^_ZMqw0ZI8k`l@s;btwdwiZJ1@WoW&`on~@ro+-c1p4^?OwG|ubWfd z)ZKO3`kcmT9@mnKCT?gu&;sEN$V+G_&xaPp28pE=n2#$*vq248>S!XC_dDBkw+sx` zqulTJ%Ih5QmAirWaMwbsBT9ssz55|q(b8ux>N-36E{WRS_EW&_z2}XO@eigFJaL2;Mk96atc+@!X}c>e!^&x* zb|heJkTVLj$9Ms_J!%HnS6h8bh1CIpgs7Og|JG#Xx6U? z%6lowukxZmP8*@7y+KyFD~v|9K-sOrEXm_3-H;X8UQHk^#)woxsV1l!&^vPPB+>P< z4e7!1>MF`_=`!d_-O8BTCFv}mOhw01>?%&0PP5aTH&2Zn%XKPeVQWa$NoF0IGV?rr z8w)wRY2e%s9W$L7%h%(NO0!BjB#)k+;{~F{Mb)m5YS`knmzeyU!D2z-G0m>7=W(I# zFo}Pe-1${s5z&`+buUWk95l`22(JxGGfN|t#Fd>^i88vft2~42w>CF^_WyhuuYBHa zy#3F&c!g+)H7f=Fa?@}d|M=#w-~CDa?Tc@J^zGvBXMagwzWnzN4*%|_Up;%-_|Ln$ jjkg+`jUWH(9pvzbuYdddZ%*F*N#oCr-+cGSuZRByqJRG* diff --git a/software/CPM/CPM12_PASCALMTP_v561/IOCHK.BLD b/software/CPM/CPM12_PASCALMTP_v561/IOCHK.BLD deleted file mode 100644 index fa20dca..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/IOCHK.BLD +++ /dev/null @@ -1,4 +0,0 @@ -IOCHK.ERL -IOERR.ERL -XBDOS.ERL - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/IOERR.SRC b/software/CPM/CPM12_PASCALMTP_v561/IOERR.SRC deleted file mode 100644 index ead744b..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/IOERR.SRC +++ /dev/null @@ -1,27 +0,0 @@ -(* 5.5 *) -MODULE IOERROR; - -(*$I 80rtp/fibdef.lib*) -(*$M @IOERR*) -(*$M **) - -VAR - @LFB : EXTERNAL ^FIB; - @TMP : ^FIB; (* FOR SAVING @LFB *) - -PROCEDURE @IOERR(CPMFUNC:INTEGER); -BEGIN - @TMP := @LFB; - CASE CPMFUNC OF - - 15 : WRITELN('Unable to open: ',@TMP^.FNAME); - 16 : WRITELN('Unable to close: ',@TMP^.FNAME); - 21 : WRITELN('Error writing to: ',@TMP^.FNAME); - 22 : WRITELN('Unable to create: ',@TMP^.FNAME) - - END; (* CASE *) - @LFB := @TMP -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/LIBMT.COM b/software/CPM/CPM12_PASCALMTP_v561/LIBMT.COM deleted file mode 100644 index 71e465f2f3ac306759adfce77fc6296f6fa7c7f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23808 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

    m7Y(?evBH~ln5vfzzDz>Pc z2pZNvcl)W}kyUgHQ%C1|v^-eZu*n~BoS;oEFJ~XFB9j|gE1bGv@*l1;7%^yxnqjoS zv{f!FXDO>#F7LJ>wQF_V5$w7HU3XB|bIV272er5|gWh%JUa&cuOCxP^m9wD=qa{8* z_hH;0YtKp<2~9O%rFa)rzqWl;R^GH%xQRa)iyNHA8&hdmyYUU;j)J)XUlSg=$Y z6aKzR&VsV9QhuaTd8AU`z#F8b5welaDwSGoxn3SLHp+|WgFDC$PN0Vv3=-0r_t?H? zP!BH@uY%bQx&}`u_U~2lNqjUFGMv)SDwTtk^5IJ5aAhcB#u}!w-{&91FWe#e92!JM z#MoA=U-_W&jMvxC&6|=Ylkbe|bg)c^_F-kuSCzcL>7bv@W1m$L?B6TdSCkm~s_S`Z&{)5$CA!teXAVSq?A{WNB1mq*sC1BA-4((K(iYh zUS)%W`1Z+%9sSY=mls~}51K8eUfP>D>=-7nWHBv-c7dOT>;QfN4-g~?5@A|6=-06& z*|hKiRWX@jEI1Gn-SdLO>yyn+{C0zr6V{G6lt|~!V?A#>w09kf**R>FbWWNy>0H{{ zX(plt-x}#WH;!_b9Lc+U#V_9DHAh6nPPXLl7L?*ZZCr@jI6(~!1e7?D_WX9}ZAahA zDrzCpiFZl7Xve;;M|-k45X}-T>Ox_e-n9VGz}Lf7y&i)fUvkk1W`5fDa8;t&#CthN zyyH|1`+k){DnOKCEGaMEV@-P)hZ z?>yWy!3jk=OURr(c(46WRQ<73z;~yl|1gO~VsM!sC(w4I7WYktFYK9kI-cyd# zMzb1NY;}Kkr>(pOxm7jNDpX{j;YSk2{vd&biM`rpS3*2Jy~=Zyv{2iXHq>6DSsS|9 z?KRmZ0wPY>bt&pif>9QZbl0W$R!_C*KV%uI=B1N7i$Jn=V+5^`*)~oyVTmG zu45PfToYsJHBY`-`=p^;i>M9snm>vRr8k&D>G)te#tcla^lc6Q(E@sX1Zw{I!y6wO`v%XJ51WSl`iF``Xo)QhJWo5(?&@Y_qgxwOCouMzJBt zp7(1ZcY}9=L+aV)#S@h^b;Huy)r(DN1zV1l=G#nhyL@RwM{BV^3W(b_-0eeCmoE1u zuhx{+R-|)*8!&Lw0s~*yvZJ+~m*V;suHI_Dy)GBrd$TP%q7Hz7&W-DU(1<68>%)=?mWm8WuVomf)cSI1>UI6tUkzZPf%P>r_;Re7tfOc|&P zXwfG3O(yw7opPd1e!Wh4y$&u7D-ZqxkyfN91(}hu?)LTfdXDvdQa2|jZ^!htUDIpX z={nyaMmq%WN~_(Gww8TS=i6oVAM3lR{*t+GbN!`=zPkELk$pd?zZBKCsGi+luRUDf z-S6}4?a8j+xxa5$J={I!gkb^hI(X4h@7cR^|EIg^S$6%C;w!9-=Eosk7NoO_=w#PZ zG@{e-^|J!r4iamrwVO1kBmFx!^(>@=jo$*7q1C5x2 zf7-y_Y1pn7cdF%)ixU_1Jl_ytZ#T>ydZQsQJ23Ea!>#_fq22}``(?w-tSmeUI?!-y z+)PS)6XFujHb8UmThSBa3s=-wGA72~0LOEn@%bK8pZYC4u@k9+5j zTddwgd)#mM;Ql4piC^0XQ0GsFGezClz91XG9{ zc|^g33(s$l?|cbU!x`MfUNqia<89 zp5OLe=i0gd_)wzj3$ynNbB=fCe&X>AyTL_Yf$h)tWw~}uu_n7pl=`#pprH+A7-b%-yd)BzTP={U&zOUQgTc`auSGO0@Ub5$f*XQ70s>KhG zZ%)sBF0XG8yKuJQ0OG&Sumy*pFOgh1!o?J{W*! MW6PQ0|Fo<9KXBum9RL6T diff --git a/software/CPM/CPM12_PASCALMTP_v561/LINKMT.COM b/software/CPM/CPM12_PASCALMTP_v561/LINKMT.COM deleted file mode 100644 index e0e1dccf704dbed9cd6923b8e2b1f46c88cdc519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12032 zcmeHN4RBM}mDYn;mSoH3O31csW51^-8(Z=ZDBw-rfI}LC?F0k0Ndh}*sIdicF_w`{ z{EOtHVA$Z-+bh@3{Jj{Lfo_qf8x#!+{&V5q0mno;xmC1DF7wO8srz>eD#cEO}Wv@v&VN!l$w zDD)FipIG1%3w&aMPb~0vWPypvn3`sYo*55^c4VcgC(=W4%V`nES(X`%@Q$o3dQGwu zoLXr*6B9BG&Kg5j_9UQZ;+LbRV**c*XgF&LK=I4rEPL|3l-`DLmLvJjNy78-4r?Ks zXwT?>QC?-z!m-JT{MY17CefZI-((s;6Ae#Hj!$ZW!7%WGywe2ToEgeLnucFJdEm!D z_I!t9C(_j2rZZ9bdnOPICpgzDCZlP>^NLA>nyi6S9VRr`h{1`T@ih5($w_4ng zby0eOi*wQ_C+C|<3rOqW)MY05go&*&PB$Y?Gfw%@9XW~WN5T53|&_`p7OAN)ppzx)v++!2t9#7-<5Ssj%lkp|sq|AT`o!?c z6KSJ!H(8WUX*xpXPppl zBeW>Ch@xn8)ELAxIoA@-@1uz=wuHw{vn2-STBXdwwpo1b7B$mSYw`_P*q}u%;s8@W zfCojIE#cbBzHOGUfloeLTDFsnzrQEOupUCb9T{TC_t}gnYstWv*!~O}4(c|&EZ{IG zZ^o#vHzUkeWvE6@{khp{xwWfxXQ!X<4e)J2e`~LwuWH%8h2PcD=_gyJh7Q=@->^v| zX`3Z}SvF+WmV~7NOWY*qWzNi_gB!)X0=@>XwF2h1%o2*1oQ^S*!6^;d?(2)jm>H&v zFM9vZOi#$>+LH;0#o*i|ZqPh?GR<1h+Y?pyW{!r15!))yFkvVgG7W~9us=iU%~%6# zt_9aK#wGAK0OF>TGltLO;P+2tCQSZZX3FH#7Uuhc9k94R7z_kqZEPLFpE4m0JB5-- zGnb7yJISKclagB_!@T|J^*X|5=S6rS!Qq~H5t1C9nit`PB*yFWV1u<@( zA0wf~o_P_HT6}q4gp?NFTM*;z1u=fVAjZ<{g{)DtAjY=&F%s4om=_^wjbrm7q^xmb zL5y->nF=iO?7kNsYdG9xoLA#3N-uOuzuT$6)R>PPFKZRsDGXQ z@cg=McvdFgKAvyc-qN(bDcQc3=Pxht%+hRq^G39+mX!X~^_XoI!vAU2cdlxV{JC>7 zr|Xl(pJf4`{m(-C|AOS{bGVM!MtzSm-`AMuh%Gc0X~_Bg2afuw?*7OJj+pQ@b}@vI z=p_eBt3Wh#VO4Z0yMBVD8Jud+HC}6as9soIfht=|-O{6M4S2<`k;`(}zqkM))=F8< zRCfdr&fvULylv( z^0t#InN*R!37Us;SRtuDV~vCBH!lx>XrWzg@$}2hJQTC|{ zN=Vb>2~v_R)(0ruQZcAr&kf-}u%)LF*Zp@+DDDQI_zhI7Lt(V)qO)>mj7RGGb3tvq zCKQ`cYq;?!#N_AJ@~DGTD9%S}b7N>kMWs3y#*QzRTXJiyfYe%0DE{19Gu~2NMVyyY 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/MOD1.SRC b/software/CPM/CPM12_PASCALMTP_v561/MOD1.SRC deleted file mode 100644 index b3ce2ac..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/MOD1.SRC +++ /dev/null @@ -1,13 +0,0 @@ -MODULE OVERLAY1; - -VAR - I : EXTERNAL INTEGER; (* LOCATED IN THE ROOT *) - -PROCEDURE OVL1; (* ONE OF POSSIBLY MANY PROCEDURES IN THIS MODULE *) -BEGIN - WRITELN('In overlay 1, I=',I) -END; - -MODEND. - - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/MOD2.SRC b/software/CPM/CPM12_PASCALMTP_v561/MOD2.SRC deleted file mode 100644 index c12c942..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/MOD2.SRC +++ /dev/null @@ -1,12 +0,0 @@ -MODULE OVERLAY2; - -VAR - I : EXTERNAL INTEGER; (* LOCATED IN THE ROOT *) - -PROCEDURE OVL2; (* ONE OF POSSIBLY MANY PROCEDURES IN THIS MODULE *) -BEGIN - WRITELN('In overlay 2, I=',I) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTERRS.TXT b/software/CPM/CPM12_PASCALMTP_v561/MTERRS.TXT deleted file mode 100644 index e937c50..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/MTERRS.TXT +++ /dev/null @@ -1,134 +0,0 @@ - 1 Error in simple type - 2 Identifier expected - 3 'PROGRAM' expected - 4 ')' expected - 5 ':' expected - 6 Illegal symbol (possibly missing ';' on line above) - 7 Error in parameter list - 8 'OF' expected - 9 '(' expected - 10 Error in type - 11 '[' expected - 12 ']' expected - 13 'END' expected - 14 ';' expected (possibly on line above) - 15 Integer expected - 16 '=' expected - 17 'BEGIN' expected - 18 Error in declaration part - 19 error in - 20 '.' expected - 21 '*' expected - 50 Error in constant - 51 ':=' expected - 52 'THEN' expected - 53 'UNTIL' expected - 54 'DO' expected - 55 'TO' or 'DOWNTO' expected in FOR statement - 56 'IF' expected - 57 'FILE' expected - 58 Error in (bad expression) - 59 Error in variable - 99 MODEND expected -101 Identifier declared twice -102 Low bound exceeds high bound -103 Identifier is not of the appropriate class -104 Undeclared identifier -105 sign not allowed -106 Number expected -107 Incompatible subrange types -108 File not allowed here -109 Type must not be real -110 type must be scalar or subrange -111 Incompatible with part -112 Index type must not be real -113 Index type must be a scalar or a subrange -114 Base type must not be real -115 Base type must be a scalar or a subrange -116 Error in type of standard procedure parameter -117 Unsatisified forward reference -118 Forward reference type identifier in variable declaration -119 Re-specified params not OK for a forward declared procedure -120 Function result type must be scalar, subrange or pointer -121 File value parameter not allowed -122 A forward declared function's result type can't be re-specified -123 Missing result type in function declaration -125 Error in type of standard procedure parameter -126 Number of parameters does not agree with declaration -127 Illegal parameter substitution -128 Result type does not agree with declaration -129 Type conflict of operands -130 Expression is not of set type -131 Tests on equality allowed only -133 File comparison not allowed -134 Illegal type of operand(s) -135 Type of operand must be boolean -136 Set element type must be scalar or subrange -137 Set element types must be compatible -138 Type of variable is not array -139 Index type is not compatible with the declaration -140 Type of variable is not record -141 Type of variable must be file or pointer -142 Illegal parameter solution -143 Illegal type of loop control variable -144 Illegal type of expression -145 Type conflict -146 Assignment of files not allowed -147 Label type incompatible with selecting expression -148 Subrange bounds must be scalar -149 Index type must be integer -150 Assignment to standard function is not allowed -151 Assignment to formal function is not allowed -152 No such field in this record -153 Type error in read -154 Actual parameter must be a variable -155 Control variable cannot be formal or non-local -156 Multidefined case label -157 Too many cases in case statement -158 No such variant in this record -159 Real or string tagfields not allowed -160 Previous declaration was not forward -161 Again forward declared -162 Parameter size must be constant -163 Missing variant in declaration -164 Substition of standard proc/func not allowed -165 Multidefined label -166 Multideclared label -167 Undeclared label -168 Undefined label -169 Error in base set -170 Value parameter expected -171 Standard file was re-declared -172 Undeclared external file -174 Pascal function or procedure expected -183 External declaration not allowed at this nesting level -187 Attempt to open library unsuccessful -191 No private files -193 Not enough room for this operation -194 Comment must appear at top of program -201 Error in real number - digit expected -202 String constant must not exceed source line -203 Integer constant exceeds range -206 Illegal real number -250 Too many scopes of nested identifiers -251 Too many nested procedures or functions -253 Procedure too long -256 Too many external references -257 Too many externals -258 Too many local files -259 Expression too complicated -398 Implementation restriction -399 Implementation restriction -400 Illegal character in text -401 Unexpected end of input -402 Error in writing code file, not enough room -403 Error in reading include file -404 Error in writing list file, not enough room -405 Call not allowed in separate procedure -406 Include file not legal -407 *** HEAP OVERFLOW *** -496 Invalid argument to INLINE pseudo procedure -497 Error in closing code file. -500 Non-ISO extension being used! -599 Implementation Restriction - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.000 b/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.000 deleted file mode 100644 index 1b923c84f9bfd116f7c2829ca83ebd30fd9ea93a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13056 zcmb_?3wRUfmFP&8WlPvbwlPM2&WuLJmTXIwfq)8*iFqcxAwbd;n}>M>hzXE@ZA_tg zwA)KSwwPU!%{GZU0cW=@Bw^!r)8=B$HH*Ae5|N6ge7^g6aAa`Q&4&dEppL726`pD(fW$UeEgU>ukqV+t&21}zIILV@H=i|ZT?Ap>O|nC3<^RA?I~h0ae!-^1rC*kWM=W zT#oCmna}_|VSas|>I~pM5a_HQztn$T)d598W&EM^TfldV@Z}}eCoBzuP$1W9SNlYW z*OO}T@6}>@oOn1+{9~N>O`Mpn@uy9ssMa59%#?bwr_x+`ywz_n&RJQ%b3@$@dhhxT zJ8J1YyVh^4rEB+ZUH`(Ky|tUJUvE9)X!Vtv|3TII6U|9bpru;lOA;xax^-L$MY+Bw zap|px&8}x9E<|;n@y8@C9+iK8r2SSwlaw}DX~&WFEJY};)dpretQKt#UV4~)Z>P4+Ph*mWQP)9-ddcFarR`(peXK&rEU8Bj;sxHCs=_yzoAK4({)J4Q8>Sk-4T86j;1&oOX zH*9aUs(b!ZZjo=a)BJIBcLwdr@45BARh8Uup{ukf0uZTa?vSGp*$pJJdWfv~$Sa{r znv1jRs2*ZlF9)4uEp+x&N~ET_d-h6@%>-x73-*~QRcl|G;xN)~>9pqJ`hgnln z^nA{$A%TLVrdA36GL)#HG#t0VvjmzMn>;h2NtlzU0U7wu^ezD0KBuzCwSqI~w5}{P zG=XYM8E9Ro7IqFLsw0&8bC#mgKquBzNt>nzh9xW?Ds&l@F*|SR46a!>b%r+0)ozu_ z(Awhw<=yJ5MW{|o!Om5jNOm8nx>etv6VgYV)evVj6g3^VB-DIsu+U{X>Cc&%ND1M= zM2*llNJi#RQ(7uWYN|j8K#waE*)${BD*SdZQQf9C+v_9Xg7Ds84~`L>7{l}rz$CO_ z^%_(?l$x{FkN|5bp>YsH>pIq^5q>myWnk+SZv3-$4`=>W^OeehLf3g=+o0>b`FgXk z3EO)vp&HvEm#_v~b+fQ^(5z_&fSv-}W~y1JfQ~k`@W`O~ri-59+2K0x+5;e^CJcXW zjue`|ZWc07{2C%(H4BM=z+RL|Q9q*2!)|k){0g8>QDCIJKz)yThN>czDryz9R_eSQ zZ{h5{XfBL|ce1%a4zK54p)1Y&Vq*`)B@Kc%0AYUlUQFB|d^A^4bB*V` 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.001 b/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.001 deleted file mode 100644 index bb4b307eeb3e45bfc540a7088ff979487dab1384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11136 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 OGP!aap7;Mh{{1%sy&Zu7 diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.003 b/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.003 deleted file mode 100644 index 71a82714de48cdf2eacb6d682a0c0a956d6dda9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.005 b/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.005 deleted file mode 100644 index 867c9476bc3a5e65a37913686b2f4226de9af7cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.006 b/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.006 deleted file mode 100644 index 3c77b80729060794d1cbc9d8f344f5212d8f9de2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6272 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 BG9Ul| diff --git a/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.COM b/software/CPM/CPM12_PASCALMTP_v561/MTPLUS.COM deleted file mode 100644 index 5a9e5b3605f7510a977518bf48e714b37840783b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36224 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 5.25.1 - PUBLIC @OVL ;OVERLAY LOADER - PUBLIC @OVS ;OVERLAY DISK SET - (FOR OTHER THAN DEFAULT DISK) - -;###############################################################; -; ; -; MAIN ROUTINE - @OVL ; -; PURPOSE - LOAD OVERLAY AND CALL PROCEDURE ; -;---------------------------------------------------------------; -; ON ENTRY TO @OVL, RETURN ADDRESS POINTS TO OVERLAY CALL ; -; DATA BLOCK: ; -; ; -; +0 : OVERLAY GROUP NUMBER --- 1 BYTE ; -; +1 : OVERLAY PROCEDURE NAME-- 8 BYTES ; -; ; -;###############################################################; - -@OVL: - POP H - MOV A,M - STA OVLGNUM - - INX H - MVI B,8 - LXI D,PROCNAME - -OVL1: - MOV A,M - INX H - STAX D - INX D - DCR B - JNZ OVL1 - - CALL PSH$USR$RET ;SAVE USER'S RETURN ADDRESSES - - CALL LOAD$OVLY ;GO LOAD IT (IF NECESSARY) - - CALL FIND$PROC ;GO SEARCH FOR AND FIND PROCNAME - ;DOES NOT RETURN IF PROC NOT FOUND - - - LXI H,OUR$RET ;PUSH OUR RETURN ADDRESS ON THE STACK - PUSH H - - LHLD PROCADR ;GET ADDRESS OF PROC WITHIN OVERLAY AREA - PCHL ;AND OFF TO USER ROUTINE - -OUR$RET: - CALL POP$USR$RET ;MAY RELOAD OLD OVERLAY GROUP - PCHL ;AND BACK TO THE USER (SIMPLE CASE) - -;###############################################################; -; ; -; MAIN ROUTINE - @OVS ; -; PURPOSE - SET DRIVE NUMBER FOR A SPECIFIC OVERLAY ; -; INPUT - ON STACK : OVLNUM,DRIVE ; -; OVLNUM : 1..50 ; -; DRIVE : '@'..'O' ; -; ; -; PASCAL DEFINITION: ; -; ; -; EXTERNAL PROCEDURE @OVS(OVNUM:INTEGER; DRNUM:CHAR); ; -; ; -;###############################################################; - -@OVS: - POP H ;RET ADR - POP B ;DRIVE NUMBER - POP D ;OVERLAY NUMBER - PUSH H - - MOV A,C - SUI '@' ;MAKE 0..19 - - LXI H,DRIVE$TAB - dcx d ;7/22/83 so user does not have to adjust ovl number. - DAD D - MOV M,A - RET - -;===============================================================; -; SUBROUTINE: CALC$ADDR ; -; PURPOSE : CALC OVERLAY AREA ADDRESS BASED ON OVLGNUM ; -;===============================================================; -CALC$ADDR: - LDA OVLGNUM ;GET REQUESTED GROUP NUMBER - DCR A - RAR - RAR - RAR ;DIVIDE BY 8 - ANI 1EH - MOV E,A - MVI D,0 - LHLD @XXXX1 ;GET ADDR OF OVERLAY AREA TABLE - DAD D ;POINT TO TABLE ENTRY - MOV E,M - INX H - MOV D,M - XCHG ;HL NOW POINTS TO OVERLAY AREA - SHLD OVLAREA ;SAVE IT FOR LATER - RET - -;===============================================================; -; SUBROUTINE: PSH$USR$RET ; -; PURPOSE : SAVE CONTENTS OF HL, OVERLAY AREA ADDR ; -; AND OVERLAY GROUP NUMBER ON USR$RET STACK ; -;===============================================================; - PUBLIC PSH$USR$RET - -PSH$USR$RET: - PUSH H - CALL CALC$ADDR - MOV B,H - MOV C,L - POP D - - LHLD USR$SP ;GET STACK POINTER - DCX H - MOV M,D ;STORE RET ADDR - DCX H - MOV M,E - DCX H - MOV M,B ;STORE OVERLAY AREA ADDR - DCX H - MOV M,C - DCX H - LDAX B ;GET OVERLAY NUMBER - MOV M,A - SHLD USR$SP - RET - -;===============================================================; -; SUBROUTINE: POP$USR$RET ; -; PURPOSE : POP RET ADDR, OVERLAY AREA ADDR AND NUMBER ; -; IF RELOAD IS SET TO TRUE THEN THIS ROUTINE ; -; WILL CALL LOAD$OVLY TO RE-LOAD PREVIOUS ; -; OVERLAY IF NECESSARY ; -;===============================================================; - PUBLIC POP$USR$RET - -POP$USR$RET: - LHLD USR$SP - MOV A,M - STA OVLGNUM ;SAVE OVERLAY GROUP NUMBER - INX H - MOV E,M - INX H - MOV D,M - INX H ;DE NOW CONTAINS OVERLAY AREA ADDRESS - XCHG - SHLD OVLAREA - XCHG - MOV E,M - INX H - MOV D,M ;DE NOW CONTAINS CALLERS RETURN ADDRESS - INX H - SHLD USR$SP - XCHG ;PUT REAL ADDR INTO HL -;---------------------------------------------------------------- - IF RELOAD ; THEN RELOAD OLD OVERLAY IF NECESSARY - PUSH H - LDA OVLGNUM - ORA A - CNZ LOAD$OVLY ;ELSE GO LOAD IT IN AGAIN (IF NECESSARY) - POP H ;GET RET ADDR BACK AGAIN - ENDIF -;---------------------------------------------------------------- - RET ;BACK TO MAIN @OVL ROUTINE - - -;===============================================================; -; SUBROUTINE: LOAD$OVLY ; -; PURPOSE : USING OVLADDR AND OVLBASE LOAD THE OVERLAY ; -;===============================================================; - -LOAD$OVLY: - CALL CALC$ADDR ;SETS OVLAREA AND HL-REG - LDA OVLGNUM ;GET GROUP NUMBER BACK AGAIN - CMP M ;IS REQUESTED OVERLAY IN THE AREA? - RZ ;RETURN IF ALREADY LOADED -; -; IF NOT LOADED THEN CONSTRUCT NAME AND LOAD IT -; - MOVE OVLBASE,MYFCB+1,8 - - LDA OVLGNUM - DCR A - MOV E,A - MVI D,0 - LXI H,DRIVE$TAB - DAD D - MOV A,M ;GET DRIVE NUMBER FROM TABLE - STA MYFCB ;FOR NOW DEFAULT DRIVE ONLY - - MVI A,'0' - STA MYFCB+9 - LDA OVLGNUM - RAR - RAR - RAR - RAR - CALL CV2HX ;CONVERT HIGH NIBBLE - STA MYFCB+10 - LDA OVLGNUM - CALL CV2HX ;CONVERT LOW NIBBLE - STA MYFCB+11 - - LXI H,MYFCB+12 - MVI B,23 ;NUMBER OF EXTRA BYTES -LO2: - MVI M,0 - INX H - DCR B - JNZ LO2 - - LXI D,80H ;SET DEFAULT DMA ADDRESS - MVI C,26 - CALL 5 - - LXI D,MYFCB - MVI C,15 ;FILE OPEN - CALL 5 ;GO OPEN THE FILE - CPI 255 - JZ NO$FILE ;BR IF FILE NOT FOUND -; -; OK, NOW LOAD IT UNTIL EOF -; - LHLD OVLAREA ;GET OVERLAY AREA ADDRESS - SHLD DMAPTR - -LO3: - LHLD DMAPTR - XCHG - MVI C,26 - CALL 5 ;SET DMA - - LHLD DMAPTR - LXI D,128 - DAD D - SHLD DMAPTR - - LXI D,MYFCB - MVI C,20 ;SEQUENTIAL READ - CALL 5 - - ORA A - JZ LO3 ;IF MORE TO DO THEN GO-ON - - RET ;ELSE ALL DONE, EXIT -; -; INTERNAL ROUTINE - CV2HX -; LOW ORDER 4-BITS OF A-REG CONTAIN BINARY NUMBER -; RETURN ASCII CHAR IN A-REG -; -CV2HX: - ANI 0FH - ADI '0' - CPI 03AH - RC ;RETURN IF A VAILD DIGIT - ADI 7 - RET - -;===============================================================; -; SUBROUTINE: FIND$PROC ; -; PURPOSE : GIVEN PROCEDURE NAME IN PROCNAME ; -; RETURN ADDRESS OF THIS PROCEDURE IN ; -; PROCADR ; -;===============================================================; - -FIND$PROC: - - LHLD OVLAREA ;GET ADDR OF OVERLAY AREA - INX H - MOV E,M - INX H - MOV D,M ;POINT TO TABLE - XCHG - -FP1: - MOV A,M - ORA A - JZ NO$PROC - - LXI D,PROCNAME - LDA NAMELEN - MOV B,A - PUSH H ;SAVE ADDR OF TABLE ENTRY - -FP2: - LDAX D - CMP M - JNZ FP3 ;BR IF NO MATCH - - INX H - INX D - DCR B - JNZ FP2 ;BR IF MORE TO COMPARE -; -; WE FOUND IT...... -; - POP H ;GET BASE ADDR OF TABLE ENTRY - LXI D,8 ;BYPASS NAME - DAD D - MOV E,M - INX H - MOV D,M - XCHG - SHLD PROCADR - RET ;AND EXIT - -FP3: - POP H - LXI D,10 - DAD D - JMP FP1 - -;===============================================================; -; ERROR MESSAGE PRINTING ROUTINES ; -;===============================================================; - -NO$FILE: ;***OVERLAY FILE NOT FOUND*** - - MOVE MYFCB+1,NFMSG1+2,8 ;MOVE IN NAME - MOVE MYFCB+9,NFMSG1+11,3 ;MOVE IN EXTENSION - LDA MYFCB - ADI '@' - STA NFMSG1 - LXI D,NFMSG - CPI '@' - JNZ WMSG - LXI H,' ' - SHLD NFMSG1 ;CHANGE "@:" TO " " - -WMSG: MVI C,9 ;PRINT STRING - CALL 5 - MVI C,0 ;INITIALIZE - CALL 5 - -NFMSG: - DB 13,10,'Unable to open overlay file: ' -NFMSG1: DB '@: . ',13,10,'$' - -NO$PROC: ;***PROCEDURE NAME NOT FOUND*** - - MOVE MYFCB+1,NPMSG2+2,8 ;MOVE IN NAME - MOVE MYFCB+9,NPMSG2+11,3 ;MOVE IN EXTENSION - LDA MYFCB - ADI '@' - STA NPMSG2 - CPI '@' - JNZ NP1 - LXI H,' ' - SHLD NPMSG2 -NP1: - MOVE PROCNAME,NPMSG1,8 - LXI D,NPMSG - JMP WMSG - -NPMSG: - DB 13,10,'Procedure: "' -NPMSG1: DB ' " not found in overlay: ' -NPMSG2: DB '@: . ',13,10,'$' - -;***************************************************************; -; ; -; DATA AREA FOR OVERLAY MANAGER ; -; ; -;***************************************************************; -; -; NOTE THIS TABLE MUST BE IN THE CSEG AREA BECAUSE IS MUST -; BE INITIALIZED VIA DB AND LINKMT WILL NOT SUPPORT INITIALIZED -; DATA IN THE DSEG -; - -DRIVE$TAB: ;DRIVE TABLES FOR 50 OVERLAYS - - REPT 50 - DB 0 - ENDM - -USR$SP: DW USR$RET ;USR$RET STACK POINTER - ;THIS MUST ALSO BE IN CODE SEG - DSEG - -DMAPTR: DS 2 ;DMA ADDRESS FOR INPUT XFER -PROCNAME: DS 8 ;NAME OF PROCEDURE WHICH WE ARE CALLI -NG -OVLGNUM: DS 1 ;OVERLAY NUMBER -PROCADR: DS 2 ;PROCEDURE ADDRESS -MYFCB: DS 36 ;FCB FOR FILE OPENING -; -; USR$RET STACK CONTAINS RETURN ADDRESS AND -; SAVED OVERLAY AREA ADDRESS -; AND OVERLAY GROUP NUMBER ;(MAX NESTING 25 - - DS 129 ;SAVED RETURN ADDRESSES -USR$RET: -OVLAREA: DS 2 ;LOC OF MOST RECENT OVL AREA - - END - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/PASLIB.ERL b/software/CPM/CPM12_PASCALMTP_v561/PASLIB.ERL deleted file mode 100644 index cf524dbd5e528c5c3263b474e351d5767d8a1ea9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24960 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 Q)%qqzw~vhc@A&us06zgfOB0JAC znd}CTe34~JfV<0o;K-bI{0u7kw-?Gqk=QZ^jXf3?is}HwUBG?vRa`VYeY#oa=*&)) z*`oK)2b-fS$l0^1iTYwCWG;ktStcuJGa-6+VElV{xwpW_7#Ggu--Kxl8sN@feP6N1 zH&ZH)rRG(`oGSAV9GZwj5ESmRe-kf<*w(-rkc$Yn+PJ@sX10M}24%U9d0i!?dbK>aLfIk*Q zgBUIE1Vj}k4Z}wTJpr%GucBj}WJ03=i&rIn!^U3&HpvR{*9ek3xOcX>Ls*MoBw zh&~D3F1hzYt}FpXk(p7|Edp_`9s*e>$lN+(o|Bb53Sxpq5S%Y~A{8Csqjg0(LJB~D@8z9n1nlY!`7)vi^ zQkb{~K=z0TO?Gw)Wt?z40~pRE&8LR8Rt0( zu)ZMgmIQZ?vc=K5#(ZlN)0&vxce7Q2h68V?wpBN3$YV>IYI}8Kx0^3d@s9pwsfJ8c zq|D57AbD(RR%~ge~tkgk4G~mkgnx(zIEozhbjDcxkSb zhw@%)Hu!&p)_kD!5yrL4ok=3K9BEa{i#3c0Ksy{{18#VtDAvp{ov)u}dR!yWjv~um zSSl|LGDa&X9KAgAvNY7LX+O5ut?D_5k*&8$v5e z9G*5)HNaDW`^N>k;h?nJh;ruW(Sv_EEde!a^vmFTO3zgcH7QJ>*8GbSRDc`Uj1!*7 zkV@lziJU~nlOUwnmB7Tq2=#NTb1_qS zZ|Sfmk|_Z*b^EF!qrmy4J*i4BSaDl*@XXf3S*F)W=naCII8>+}9{kH90DGD%4liD% zW5okKq$&n=!v#^M*Ab~~4SWRhJ;1H*Hd2Yq%9mk^ey9r6)3Na|T(=bT&z&kd*4iGP z%B1|$6RAsHY>G>cI(C#;*6iHbSFzGTxHS9WenWmbb{(R+_ZF1gB+14c$}+9gb@+0D z@p8<@Z7>lSw?&U$fWn2>#ZOA^*o^y6M=9rR8!DRBHC8N(t#2Qg6(0LlibJ|-hx+p4 zV%ef&?O(~=k2PzW?NKQ!V~)SQa^4nu?)zzdh_!W5S|8i{u234%8P?+FEF>dk|R zYkO>*dt(!cZH?`~+YUP!<2%&q!{NJu(_TtALSfmTy@=vzF;C$+!n1+PNSej`Up&b) zp7&2iYe&%?L_AA?F_uz1b10r?u23r;n#4{oRjn_0+pfxUV`6G83F~oLSA)1`67`QR z=cP$mUK3SgN=`@c56YTv2oMWHOeqDDzur_slsoGCWy+np`_ufGH`#HR5voC_xJe^W*fdcy%raQ z`dR8fBz|^c=6*_I zwMqRDNdoA703XzCaSHU$@22}#(UF)TMLWVvGE|cIcK$*x_DH{xQX7{Su9pp*xgu}T zn~0;~ygD<=Ar_aqJTepUd27_2Q4Ue*W><^PN@`mh)eA(9S;Oa&y~Ik6bu_AXM>%HI z?oD>utfao-l)4PhT8DE_@)+tujruJ9eY&Nr;l;7G+V)N_K7SscpH=JnEJsZ2j+V3P zS8S-Z)UjFTIu%~t?mVH6;zHI=`u})%cS~o7uk)Px-@=-6PlvmkZAsPMHhaUlbbywH HGr#`;*wdy0 diff --git a/software/CPM/CPM12_PASCALMTP_v561/READ.ME b/software/CPM/CPM12_PASCALMTP_v561/READ.ME deleted file mode 100644 index 7f2bd7f..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/READ.ME +++ /dev/null @@ -1,727 +0,0 @@ - - - - - - - - - - - ******************************************************************** - ******************************************************************** - ********************** ********************* - ********************** PASCAL/MT+ ********************* - ********************** ********************* - ******************************************************************** - ******************************************************************** - ********** ********** - ******* Release Notes ******* - ****** ****** - ******************************************************************** - ******************************************************************** - ******************************************************************** - ***** ***** - ***** Copyright (c) 1983 by Digital Research ***** - ***** ***** - ***** CP/M is a registered trademark of Digital Research. ***** - ***** ***** - ******************************************************************** - - - - - These release notes pertain to both the software and the - documentation set for the Digital Research product: - - Pascal/MT+ For the CP/M Family of Operating Systems - - They provide the most current information regarding: - - o Sofware bugs that have been identified since the product - was released. - - o Errors or omissions in the documentation set that could - not be corrected because of the lead time needed for - typesetting and printing. - - - - - - - - - - - - - - - - - - 1 - - - - - - - - SOFTWARE BUGS - - - - The following software bugs have been identified in the current - release (5.6): - - - - Problem: When compiling with the D (debugger) command-line option - enabled, symbol table overflow is not always detected. - This problem is related to the total number of constants, - types, and variables declared in the program you are - compiling. - - Solution: Reduce the number of entries in the symbol table by - breaking the program down into separately compiled - modules. - - Problem: Conformant arrays do not always work correctly. They work - for one-dimensional arrays of simple types. They do not - work for one-dimensional arrays of structured types, or - multi-dimensional arrays of any type. - - Solution: There is no fix available at this time. Work is in - progress. - - Problem: Run-time range checking enabled by the $R+ source-code - option does NOT work when indexing into string variables. - - Solution: Use the predefined functions and procedures for string - handling when working with the STRING data type. - - Problem: The ODD function does not return values in the set [0,1]. - - Solution: Application Note #3, available through Technical Support - fixes this problem. - - Problem: The $K9 and $K10 compiler options cause the compiler to - erroneously issue Error #103 upon encountering the EXIT - procedure. - - Solution: If you intend to use EXIT, you cannot use the $K9 and $K10 - options. - - Problem: Using the construct - - WRITE(f,data) - - with files of characters is NOT equivalent to the - sequence of statements - - f^ := data, PUT (f) - - Solution: Declare the file variable f, to be of type BYTE. - - - - 2 - - - - - - - - - Problem: The compiler does not detect the erroneous assignment of a - REAL number to a variable of type WORD. A program - containing such an assignment will compile and link - properly, but will halt indefinitely when executed. - - Solution: Do not assign a REAL variable to a variable of type WORD; - it is an invalid assignment. - - Problem: When using FPREALS.ERL, some formatted real numbers in the - interval (0,1) default to scientific notation on output. - - Solution: There is no fix available at this time; the problem is - being studied. - - Problem: The procedures BLOCKREAD and BLOCKWRITE do not work - correctly on operating systems with allocation block - sizes larger than 1K because the correct extents are not - always opened. - - Solution: On systems with allocation block sizes greater than 1K, - you must use the procedures SEEKREAD and SEEKWRITE with - the file variable declared as follows: - - VAR - f : FILE of PACKED ARRAY[0..127] OF BYTE - - Problem: The MOD function does not work correctly when the modulus - is a negative integer; otherwise, it works correctly. - - Solution: There is no fix available at this time; the problem is - being studied. In the interim, do not use MOD with - negative modulus. - - Problem: When using BCD reals, the run-time system does not detect - division by zero. This problem can indefinitely halt the - application program. - - Solution: You can avoid this problem by adding code to the program - that tests the divisor for zero BEFORE performing the - division, and takes appropriate action based on the - outcome. - - Problem: When using BCD reals, dividing a very small number (such - as 0.0001) by a very large number (such as - 10000000000000.0000) can cause an indefinite halt in the - application program. - - Solution: There is no solution at this time; the problem is being - studied. - - Problem: When using BCD reals, multiplication and division are very - slow. - - Solution: This performance problem is currently being studied. - - - - 3 - - - - - - - - ************************************** - * SPECIAL INSTRUCTIONS FOR SPP USERS * - ************************************** - - - - The Speed Programming Package SPP, as distributed will NOT run with - Pascal/MT+ release 5.6. You must use the utility program SPPFIX.COM - to remove the excess entry point names from the name tables at the - end of the overlay file SPP.002. SPPFIX.COM is included with the - 5.6 distribution disks. - - Note: The file STRIP.SRC, supplied on your distribution disk will - NOT work on SPP.002. (See Documenatation Errata, below). - - In order to get SPP to run with Pascal/MT+ (release 5.6), you must - perform the following steps: - - 1) Compile NSB.SRC - - 2) Change the linker command file SPPMAIN.CMD as follows - - /V:1700/D:8300/X:1500 - - 3) Change all the other CMD files to - - /P:1700 - - 4) Link the SPP files using the SUBMIT command - - A>submit linkspp - - 5) Use the command - - A>sppfix 1700 [:] - - to strip all the unused entry points. - - - - - - - - - - - - - - - - - - - - - - 4 - - - - - - - - **************************************** - * AMD9511 HARDWARE MATH CHIP INTERFACE * - **************************************** - - - - The distribution disks contain several files that enable you to - create a hardware floating point package using the AM9511 math chip. - - To use this interface you must perform the following steps: - - - 1) Edit the file AMDIO.SRC, on your distribution disk, so that the - constant definitions for the port addresses agree with your - hardware configuration. - - 2) Compile AMDIO.SRC. - - 3) Link the application with the following command line: - - A>LINKMT ,AMDIO,FPRTNS,TRAN9511,FPREALS/S,PASLIB/S - - 4) To use an early release of the AM9511 chip, declare @I95 as an - external procedure and call it from the main program. This - routine will initialize the chip. - - Note: The file APUSUB.MAC contains the AMD9511 drivers that TRAN9511 - uses and is included for your information only. APUSUB.MAC does NOT - need to be assembled because it is alreadly included in - TRAN9511.ERL. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - - - - - - - - ************************ - * DOCUMENTATION ERRATA * - ************************ - - - - The following are errors in the Pascal/MT+ Language Reference Manual - (February 1983 edition): - - - Page 2-2. Replace the second paragraph with following: - - "You cannot use reserved words such as BEGIN or IF as - identifiers. Also, you should not use predefined - identifiers to name any object in your program, - especially if the predefined identifier is the name of - a routine in the run-time library PASLIB.ERL. Using - the name of a run-time routine as an identifier makes - the routine inaccessible from inside the scope of the - new definition. This will cause unpredictable results - in your program. - - Page 3-3. Change WORD(x) to WRD(x) - - Page 6-2. Change the third paragraph to read: - - "The data type for a function must be a simple type. - Put the type name after a colon at the end of the - function heading. - - Page 6-8. In Table 6-1, change the Returns type for the Function - ABS from REAL to "same as NUM". - - Page 6-10. In Table 6-1, the Function @HERR returns a BOOLEAN type, - and the the Function ADDR returns a POINTER not an - INTEGER type. Also change FUNCTION @RLS to PROCEDURE - @RLS. - - Page 6-12. Change the first sentence in the second paragraph to - read: - - "You can use ADDR to reference external variables." - - Page 6-13. Change the example to ARCTAN(1) = 0.78539 - - Page 6-19. Change the first sentence in the second paragraph to - read: - - "CLOSEDEL closes and deletes files after use." In the - last paragraph, change File Control Blocks (FCBs) to - File Information Blocks (FIBs). - - - - - - - - 6 - - - - - - - - Page 6-44. Change the explanation of the PACK and UNPACK functions - to read: - - "The Pascal/MT+ compiler accepts PACK and UNPACK for - compatibility with other versions of Pascal. These - procedures are not necessary because Pascal/MT+ is byte - oriented. However, in Pascal/MT+ both PACK and UNPACK - generate calls to the MOVE function (see MOVE)." - - Page 6-56. At the top of the page, change - - SEEKREAD, SEEKWRITE Function - - to read as follows: - - SEEKREAD, SEEKWRITE Procedure - - Page 6-68. Change the fifth paragraph to read: - - "WRITE and WRITELN treat strings as arrays of - characters. They do not write the length byte to TEXT - files. They do write the length byte to files of other - types." - - Page 6-75. At the top of the page, change - - @HERR Function - - to read as follows: - - @HERR - - Also, change the syntax description from - - FUNCTION @HERR - - to read as follows: - - VAR - @HERR : EXTERNAL BOOLEAN - - - Page 7-2. In the second paragraph, change F2 to F3 in: - - F2^ := 45; - - puts the integer value 45 in the buffer of the file - variable F2. - - Page 7-5. Add the following to the end of the first paragraph in - Section 7.4: - - "Note: You cannot use the debugger with redirected I/O. - - - - - - 7 - - - - - - - - The following are errors in the Pascal/MT+ Programmer's Guide for - the CP/M Family of Operating Systems (March 1983 edition): - - - Page 1-1. In the third paragraph, change 8K bytes to 3K bytes. - - Page 1-3. In Table 1-1, under filetype SRC, make the change - - "(the compiler also accepts PAS as a source filetype)" - - Page 1-3. In Table 1-1, under filetype SYM, make the change - - "Symbol file used by SID, the symbolic debugger" - - Page 1-4. In Table 1-2, change DEMOPROG.SRC to PROG.SRC, and - LIBMT+.COM to LIBMT.COM. - - Page 1-5. In Table 1-2, change USCD-style to UCSD-style. - - Page 1-7. The second paragraph states you can use the distribution - disks just as they are. This is not true; they are - write-protected. You must copy them onto backup disks. - - Page 2-3. Change the first paragraph in Section 2.2.2 to read: - - "During Phase 0, When the compiler finds a syntax - error, it displays the line containing the error. If - you are using the MTERRS.TXT file, the compiler also - displays an error description. In all other Phases, - the compiler displays the line number and an error - identification number." - - Page 2-4. In Table 2-1, change the description of the default - action for the A option to read - - "Compiler does not automatically chain" - - Page 2-16. Table 2-5 is incomplete. Add the following error - message: - - Undefined symbol: xxxxxxxxx - - Explanation: The specified symbol is referenced but not - defined in the module. - - - - - - - - - - - - - - - 8 - - - - - - - - Page 3-6. Section 3.2.2, second paragraph. Change the first - sentence to read as follows: - - "When part of a program calls an overlay-resident - routine, the program accesses that routine through an - entry-point table at the end of the overlay." - - Page 3-9. In the first paragraph, change 80H to 100H. - - Page 3-9. Under the /X option, in the second paragrap, change the - last sentence to read as follows: - - "nnnn is the hexadecimal number of bytes to reserve for - overlay data." - - Page 3-10. In the first paragraph, change the last sentence to read - as follows: - - "The minimum value for /D is: 100H + size of the - largest overlay (rounded to the next multiple of 128) + - the size of the root code." - - Page 3-10. Change the fourth paragraph to read as follows: - - "When you link a root program the first time to - generate the SYM file, you must use the /V:n option to - tell the linker to save an area in the code segment for - use as the overlay area address table." - - Page 3-10. Change the command line for linking an overlay to: - - LINKMT =/O:n,/P:mmmm/X:ssss - - - Page 3-11. Change section 3.2.5 to 3.2.6. Insert section 3.2.5 as - follows: - - 3.2.5 Overlay Name Table - - The first three bytes of an overlay file are the - overlay number followed by a two byte pointer to the - name table for the overlay. Entries in the name table - are ten bytes long, eight bytes for the name followed - by two bytes for the address. - - After the overlay manager ensures that the overlay is - in memory, it searches this table for the requested - routine. The overlay manager then branches to the - address found in the name table. - - The linker always includes all entry points to the - overlay, including run-time routines, in this name - table even if only one of the entry points is - necessary. - - - - - 9 - - - - - - - - STRIP is a utility program which reduces the disk and - memory requirements for overlays by removing - unnecessary entry point names from the name table at - the end of an overlay file. - - Note: STRIP is included on the distribution disk in - source form (STRIP.SRC) only. - - In order to use STRIP, you must know: - - o the load address of the overlay (the parameter to - the V and P linker options). This is used to calculate - the offset of the name table within the overlay file. - - o the names of all the essential entry points. For - example, those declared as EXTERNAL in your Pascal - program or module. - - - You invoke STRIP with the command: - - STRIP [] - - If you omit the , STRIP prompts you for the - filename. You then enter the name of the overlay file, - for example ROOT.001. STRIP then prompts you for the - base address, the loading address. You then enter the - hexadecimal address of the overlay area into which you - want the overlay file to be loaded when it is executed, - for example 1600. - - STRIP first displays all of the entry point names, and - then begins displaying each entry point one at a time - followed by the prompt - - (Y/N/Q)? - - If you want to retain the name, enter a Y; otherwise - enter a N if the name is to be removed, or a Q to exit - this phase of the operation. - - When all entry points have been processed, STRIP - displays all of the entry points that have not been - deleted, and asks whether to write the stripped file. - If everything is correct, enter Y, and STRIP deletes - the old file and replaces it with the new stripped - file. - - Page 3-13. Change all three link command lines as follows: - - A>LINKMT PROG,PASLIB/S/V1:2000/D:4000/X:100 - - A>LINKMT PROG=PROG/O:1,MOD1,PASLIB/S/P:2000/L - - A>LINKMT PROG=PROG/O:2,MOD2,PASLIB/S/P:2000/L - - - - 10 - - - - - - - - - Also, change the values described in the text to - reflect the values given in these command lines. - - Page 4-6. In Table 4-1, change the size of the FLOATING REAL data - type to 4 8-bit bytes. - - Page 4-7. Change the paragraph under the example to read: - - "The assembly language program must remove all - parameters from the stack before returning to the - calling routine." - - Page 4-10. Change the example function KEYPRESSED to read as - follows: - - FUNCTION KEYPRESED : BOOLEAN; - - BEGIN - KEYPRESSED := (@BDOS(11,WRD(0)) <> 0) - END; - - - Page 4-12. In the example illustrating INLINE, change LHD to LHLD. - - Page 4-18. Add the following to the end of the second paragraph in - Section 4.4: - - "Note: You should avoid using local variables in - recursive procedures and functions." - - Page 5-4. Add this sentence to the end of the first paragraph: - - "If you want to use breakpoints, you must set them - before starting to debug with the BE or TR commands." - - Page 5-5. In Table 5-2, 320 bytes should be 32 bytes. - - Page 5-6. In Table 5-3, change the syntax of the E command to - - E enables display entry and exit of each - procedure or function during execution - (default is off). - - Page A-15. In the explanation of Error #253, change the limit to 2560 bytes. - - - - - - - - - - - - - - 11 - - - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/RNB.SRC b/software/CPM/CPM12_PASCALMTP_v561/RNB.SRC deleted file mode 100644 index bb847dd..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/RNB.SRC +++ /dev/null @@ -1,95 +0,0 @@ -MODULE RNBMODULE; -(* - * [PASLIB] @RNB - Read next buffer from file. - * Revisions: - * 9/17/80 Last update - * - *) - -(*$I fibdef.lib*) - -VAR - @LFB : EXTERNAL ^FIB; - RESULTIO: EXTERNAL INTEGER; - -EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; -EXTERNAL PROCEDURE @DFLT; - -(* PURPOSE: READ n BYTES FROM A FILE POINTED TO BY @LFB *) -(* n IS SPECIFIED BY @LFB^.IOSIZE *) -(* LAST UPDATE: SEPTEMBER 17, 1980 *) - -PROCEDURE @RNB; -VAR - DSTPTR: ^BYTE; - N,I : INTEGER; -BEGIN - MOVE(@LFB^.FBUFADR,DSTPTR,2); (* SET DEST POINTER *) - - IF @LFB^.OPTION = FCONIO THEN (* CON:, DO AN ECHOING READ *) - BEGIN - DSTPTR^ := CHR(@BDOS(1,WRD(0))); (* GO READ A CHAR WITH ECHO *) - IF DSTPTR^ = $0D THEN (* ECHO CR WITH CRLF *) - I := @BDOS(2,WRD($0A)) - ELSE IF DSTPTR^ = $08 THEN (* ECHO BS WITH SP/BS *) - BEGIN - I := @BDOS(2,WRD(' ')); - I := @BDOS(2,WRD($08)) - END; - EXIT - END - ELSE - IF @LFB^.OPTION = FTRMIO THEN (* KBD: DO A NON-ECHO READ *) - BEGIN - REPEAT - DSTPTR^ := CHR(@BDOS(6,WRD($FF))); (* GO READ A CHAR WITH NO ECHO *) - UNTIL DSTPTR^ <> 0; - EXIT - END - ELSE (* check for rdr: *) - IF @LFB^.OPTION = FAUXIO THEN (* RDR: *) - BEGIN - DSTPTR^ := CHR(@BDOS(3,WRD(0))); (* GO READ RDR *) - END; - - IF @LFB^.NOSECTRS THEN - BEGIN - @LFB^.FEOF := TRUE; - EXIT - END; - - FOR N := 1 TO @LFB^.IOSIZE DO - BEGIN - WITH @LFB^ DO - BEGIN - IF FSECINX = 128 THEN (* TIME TO READ MORE *) - BEGIN - FSECINX := 0; - IF NOT NOSECTRS THEN - BEGIN - I := @BDOS(26,WRD(ADDR(FSECTOR))); - RESULTIO := @BDOS(20,WRD(ADDR(FCB))); - IF RESULTIO <> 0 THEN - NOSECTRS := TRUE - END - END; - IF NOSECTRS THEN - BEGIN - DSTPTR^ := CHR($FF); - FEOF := TRUE; - BUFIDX := 0; - @DFLT; - EXIT - END - ELSE - DSTPTR^ := FSECTOR[FSECINX]; - FSECINX := FSECINX + 1 - END; (* WITH *) - DSTPTR := DSTPTR + 1 - END; - @LFB^.BUFIDX := 0; (* SO GNB WORKS *) - @DFLT; (* TO PROTECT USER DATA FROM I/O CLOBBER *) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/RNC.SRC b/software/CPM/CPM12_PASCALMTP_v561/RNC.SRC deleted file mode 100644 index 1e40fad..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/RNC.SRC +++ /dev/null @@ -1,32 +0,0 @@ -MODULE RDNXCH; -(* - * [PASLIB] @RNC - Read next character from buffer. - * Revisions: - * - * - *) - -(*$I fibdef.lib*) - -VAR - @LFB: EXTERNAL ^FIB; - -EXTERNAL PROCEDURE GET(VAR F:FIB; SZ:INTEGER); - -FUNCTION @RNC:CHAR; -BEGIN - IF @LFB^.OPTION > FRANDOM THEN (* DON'T GIVE BUFFER, BUT READ DIRECTLY *) - (* IF CONSOLE/TERMINAL FILE *) - BEGIN - GET(@LFB^,@LFB^.BUFLEN); - @RNC := @LFB^.FBUFFER[0] - END - ELSE - BEGIN - @RNC := @LFB^.FBUFFER[0]; (* @RNC := F^ *) - GET(@LFB^,@LFB^.BUFLEN); (* GET(F) *) - END -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/ROVLMGR.ERL b/software/CPM/CPM12_PASCALMTP_v561/ROVLMGR.ERL deleted file mode 100644 index cb4d57f5d41b3569080ffb6065d02e0184edc6e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmbVLYe-XJ7=FLA&$G|VYIAPs>~eBsViCG7E}=T9TNkrd=Ge+=mQ%@ybpz{%eXUKy zmSh=Sv^W(N-4zr`joNkI84t@oK8J-gEoW`3Y zCfzrprtLK89>uw(88VoxM)KXz&NGIH&##~0 z``h$$NQc!J-8(qVAw)fje+owX-1oa6yPc2yzALizN&=eq*NA#!fWCn;E&?(9Eh{_RQ z^F1jsz}of;IQJ-J7DX^ae*Iu>ST#utq~D?>aeqt~^DAr%kdIH=EGSPjp~K2V zYaY(wl%%zX7~>^fNMtJ#KoO-W=v1o$Auc<)gZ+G@v7gJj=)0jW@qFUu>k4Yt_fVRx zB$z=!d2Wi-Kt FCONIO THEN BRANCH - JNZ RSTXIT - - MVI C,0DH ;IF A CONSOLE FILE THEN ECHO CRLF - PUSH B - LXI H,-1 - PUSH H - PUSH H - CALL @CHW - LHLD @LFB - LXI D,FEOLN - DAD D - MVI M,1 ;SET @LFB^.EOLN := TRUE - -RSTXIT: - MVI A,0DH ;SO READLN WILL WORK - LHLD RETADR - PCHL - -; -; COME HERE IF NON-CONSOLE READ -; JUST CALL INDIRECT TO @SYSIN UNTIL A CR IS FOUND -; -NONCONSOLE: - LXI H,STRBUF+2 ;POINT TO INPUT BUFFER AREA - MVI A,0 - STA STRBUF+1 ;SET LENGTH - - PUSH H - LHLD @LFB ;GET FIB POINTER - LXI B,FEOLN ;READ CHARS UNTIL EOLN - DAD B - MOV A,M - POP H - RAR - JC ENDOFINPUT - -NEXTCH: - PUSH H - LXI H,RETURN - PUSH H - LHLD @SYSIN - PCHL ;GO CALL THE INPUT ROUTIN - -RETURN: - POP B ;GET CHAR - - - POP H ;GET BUFFER POINTER - LDA STRBUF+1 - CPI 0FFH ;STRING OVERFLOW? - JZ NOSTORE ;IF SO THEN DONT STORE IT - - CALL STORE$WITH$TAB$EXPANSION - - INX H ;BUMP POINTER - LDA STRBUF+1 - INR A - STA STRBUF+1 -NOSTORE: - XCHG - LHLD @LFB ;GET FIB POINTER - LXI B,FEOLN ;READ CHARS UNTIL EOLN - DAD B - MOV A,M - RAR - XCHG - JNC NEXTCH ;LOOP UNTIL EOLN - JMP ENDOFINPUT ;AND WE ARE DONE - -STORE$WITH$TAB$EXPANSION: - MOV A,C - CPI 09H ;TAB CHARACTER? - JZ TAB$EXPAND - MOV M,C - LDA COLCTR - INR A - STA COLCTR - RET - -TAB$EXPAND: - MVI M,' ' ;STORE AT LEAST ONE BLANK - - LDA STRBUF+1 - INR A - STA STRBUF+1 - - LDA COLCTR - INR A - STA COLCTR - - CPI 0FFH ;STRING OVERFLOW? - RZ ;IF SO THEN EXIT - - ANI 7 ;ON BOUNDARY? - JZ DONE$TABBING ;RETURN IF YES - - INX H - JMP TAB$EXPAND - -DONE$TABBING: - PUSH H - LXI H,STRBUF - INX H - DCR M - POP H - RET - - END - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/SPPFIX.COM b/software/CPM/CPM12_PASCALMTP_v561/SPPFIX.COM deleted file mode 100644 index f2fc0e54fd6fd007f2078fa1683e5cbc719800d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19840 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/STRIP.CMD b/software/CPM/CPM12_PASCALMTP_v561/STRIP.CMD deleted file mode 100644 index de5d85e..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/STRIP.CMD +++ /dev/null @@ -1,2 +0,0 @@ -STRIP,RANDOMIO,PASLIB/S - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/STRIP.SRC b/software/CPM/CPM12_PASCALMTP_v561/STRIP.SRC deleted file mode 100644 index 685d1ed..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/STRIP.SRC +++ /dev/null @@ -1,165 +0,0 @@ -PROGRAM STRIPIT; -(* - * STRIP - Selectively remove Overlay Entry Points from an overlay file. - * MT+ overlays may have more than one entry point, and in general, the - * linker will include all external symbols in the Overlay Entry Point - * Table, located at the end of the overlay code. This utility displays - * each of these symbols and prompts you to keep or delete the entry - * point. It is provided for users who require overlay files to be as - * compact as possible. - * - * Usage: - * STRIP filename - * - * If filename is omitted, the program will prompt for one. filename - * must be an overlay file produced by LINKMT (i.e., one with a numeric - * extension). - * - * Revised from the 5.5 version for 5.6 (3/10/83 SP) - * Revisions: - * - * - * - *) - -CONST - maxFileSize = 150; (* Max. overlay file size in 128-byte sectors *) - -TYPE - ALPHA = PACKED ARRAY [1..8] OF CHAR; - - NAMEREC = RECORD - NAME : ALPHA; - ADDR : INTEGER - END; - NAMEARR = ARRAY [0..0] OF NAMEREC; - SECTOR = ARRAY [0..127] OF BYTE; - pstr = ^string; - -VAR - NAMELIST : ^NAMEARR; - I : INTEGER; - BASE : INTEGER; - TITLE : STRING; - INFILE : FILE OF SECTOR; - COUNT : INTEGER; - INLINE : STRING[2]; - NEWSIZE : INTEGER; - cmdline : pstr; - BUF : ARRAY [0..maxFileSize] OF SECTOR; (* Overlay loading area *) - -(* PASLIB: *) -external function @cmd: pstr; (* returns pointer to command line *) - - -PROCEDURE KRUNCH(I:INTEGER); -VAR - J : INTEGER; -BEGIN - REPEAT - NAMELIST^[I] := NAMELIST^[I+1]; - I := I + 1; - UNTIL ORD(NAMELIST^[I].NAME[1]) = 0 -END; - - -PROCEDURE show_table; -var - i : integer; -begin - I := 0; - while namelist^[i].name[1] <> chr(0) do begin - if i mod 6 = 0 then writeln; - WRITE(NAMELIST^[I].NAME, ' '); - I := I + 1 - end; - writeln; - writeln(i, ' entry points remain.'); -end; - - -BEGIN (* main *) - writeln('STRIP 5.6'); - - cmdline := @cmd; - title := cmdline^; - while (title[1] <> ' ') and (length(title) > 0) do - delete(title, 1, 1); (* Remove leading blanks *) - if length(title) = 0 then begin - write('Overlay file name? '); - readln(title); - end; - - ASSIGN(INFILE, TITLE); - RESET(INFILE); - if ioresult = 255 then begin - writeln('Can''t open ', title); - exit; - end; - - COUNT := 0; - WHILE IORESULT <> 1 DO BEGIN - if count = maxFileSize then begin - writeln('File exceeds ', maxFileSize, ' sectors; increase maxFileSize'); - exit; - end; - COUNT := COUNT + 1; - BUF[COUNT-1] := INFILE^; - SEEKREAD(INFILE, COUNT); - END; - WRITELN(Count,' sectors read'); - - WRITE('Base address for this overlay (hex)? '); - READHEX(INPUT, BASE, 2); - - MOVE(BUF[0,1],I,2); (* Get pointer to Overlay Entry Point Table *) - WRITE('Entry point table begins at '); WRITEHEX(OUTPUT,I-BASE,2); WRITELN; - - NAMELIST := ORD(ADDR(BUF)) + (I-BASE); - show_table; - - I := 0; - repeat - repeat - WRITE('Retain ', NAMELIST^[I].NAME,' (Y/N/Q)? '); - READLN(INLINE); - until inline[1] in ['Y','y','N','n','Q','q']; - IF inline[1] in ['N','n'] THEN - KRUNCH(I) - ELSE - I := I + 1; - until (NAMELIST^[I].NAME[1]=CHR(0)) OR (inline[1] in ['Q','q']); - - if inline[1] in ['Q','q'] then (* advance i to end of table *) - while namelist^[i].name[1] <> chr(0) do - i := i + 1; - - (* Now write it out *) - - show_table; - - NEWSIZE := (ORD(ADDR(NAMELIST^[I].NAME))-ORD(ADDR(BUF))); - IF (NEWSIZE MOD 128) <> 0 THEN - NEWSIZE := NEWSIZE + 128; - - WRITELN('New file size is ',NEWSIZE DIV 128,' sectors'); - COUNT := NEWSIZE DIV 128; - - repeat - write('Rewrite ', title, ' (Y/N)? '); - readln(inline); - if inline[1] in ['N','n'] then begin - writeln('File not rewritten.'); - exit; - end; - until inline[1] in ['Y','y']; - - ASSIGN(inFILE,TITLE); - REWRITE(inFILE); - FOR I := 0 TO COUNT-1 DO BEGIN - inFILE^ := BUF[I]; - SEEKWRITE(inFILE,I) - END; - CLOSE(inFILE,I) -END. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/TRAN9511.ERL b/software/CPM/CPM12_PASCALMTP_v561/TRAN9511.ERL deleted file mode 100644 index 659bac308559e607606c15d6f76ef7bf1fa5485b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 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 G&+k8fnpsT% diff --git a/software/CPM/CPM12_PASCALMTP_v561/UTILMOD.ERL b/software/CPM/CPM12_PASCALMTP_v561/UTILMOD.ERL deleted file mode 100644 index 59676421f3f402ec689534d84cc4e092e6d96446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmZp@8Y&bl6e^S|;~?x+z$U@KaF~HXB7uRKhk>E5u_09@s_1c6N|a(p|yuP%t-vEmwj;G}nP$V|6yrc2xo9sk0aujFJ~B$m)uwI(mxw zC5bR7vNp&p5@29Fb#}D^6PRXTkWs%l?FNHvZUdtM!@b8P$D$4>F*VIvl6r$lK|@W+ zEsa5msYuHwO@v87bCsrBih~xDkW$s0R0}4x<*SvBc^)w0nl;PIs^kF!!#pYK0szW^ BW61yj diff --git a/software/CPM/CPM12_PASCALMTP_v561/UTILMOD.SRC b/software/CPM/CPM12_PASCALMTP_v561/UTILMOD.SRC deleted file mode 100644 index d2cf98f..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/UTILMOD.SRC +++ /dev/null @@ -1,52 +0,0 @@ -MODULE UTILITIES; - -(* USE AS FOLLOWS: - FUNCTION RENAME(F,NEWNAME); MUST BE PRECEEDED BY ASSIGN - PROCEDURE EXTRACT(F,NAME); RETURNS NAME FROM AN FILE - FUNCTION KEYPRESSED : BOOLEAN; TRUE IF KEY PRESSED -*) - -(*$I FIBDEF.LIB*) - -EXTERNAL FUNCTION @BDOS(FUNC,PARM:INTEGER):INTEGER; - -FUNCTION RENAME(VAR F:FIB; VAR NEWNAME:STRING):INTEGER; - -(* TO USE: - - ASSIGN(MYFILE,OLDNAME); - IF RENAME(MYFILE,NEWNAME) = 255 THEN - OLDNAME NOT FOUND IN DIRECTORY - ELSE - RENAME WAS SUCCESSFUL - -*) -VAR - TEMPFILE : RECORD - CASE BOOLEAN OF - TRUE: (FYLE:FILE); - FALSE:(FIBB:FIB) - END; - RESULT:INTEGER; -BEGIN - ASSIGN(TEMPFILE.FYLE,NEWNAME); - MOVE(TEMPFILE.FIBB.FCB,TEMPFILE.FIBB.FCB[16],12); - MOVE(F.FCB,TEMPFILE.FIBB.FCB,12); - RESULT := @BDOS(23,ADDR(TEMPFILE.FIBB.FCB)); - RENAME := RESULT -END; - - -PROCEDURE EXTRACT(VAR F:FIB; VAR OUTNAME : STRING); -BEGIN - OUTNAME := F.FNAME -END; - - -FUNCTION KEYPRESSED:BOOLEAN; -BEGIN - KEYPRESSED := (@BDOS(11,0) <> 0) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/WNC.SRC b/software/CPM/CPM12_PASCALMTP_v561/WNC.SRC deleted file mode 100644 index e6b5947..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/WNC.SRC +++ /dev/null @@ -1,25 +0,0 @@ -MODULE WRNXCH; -(* - * [PASLIB] @WNC - Write next character. - * Revisions: - * - * - *) - -(*$I fibdef.lib*) - -VAR - @LFB: EXTERNAL ^FIB; - -EXTERNAL PROCEDURE PUT(VAR F:FIB; SZ:INTEGER); - -PROCEDURE @WNC(CH:CHAR); -BEGIN - @LFB^.FBUFFER[0] := CH; (* F^ := CH *) - PUT(@LFB^,@LFB^.BUFLEN) (* PUT(F) *) -END; - -MODEND. - - - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/XBDOS.SRC b/software/CPM/CPM12_PASCALMTP_v561/XBDOS.SRC deleted file mode 100644 index 5bdf20e..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/XBDOS.SRC +++ /dev/null @@ -1,57 +0,0 @@ -MODULE BDOS; -(* - * [PASLIB] @BDOS - Call CP/M directly. - * Revisions: - * This version of @BDOS checks for error returns and calls @IOERR - * as required to report a CP/M error. - * - * - *) - -EXTERNAL PROCEDURE @IOERR(CPMFUNCNUM:INTEGER); - -FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; -CONST - CPMENTRYPOINT = 5; - -VAR - RESULT : INTEGER; - -BEGIN - INLINE( "LHLD / FUNC / - "MOV C,L / - "LHLD / PARM / - "XCHG / - "CALL / CPMENTRYPOINT / - "MOV L,A / - "MVI H / 0 / - "SHLD / RESULT ); - - @BDOS := RESULT; - - IF FUNC < 15 THEN - EXIT; - IF FUNC = 26 THEN - EXIT; - IF (FUNC=15) OR (FUNC=16) OR (FUNC=22) THEN - BEGIN - IF RESULT = 255 THEN - @IOERR(FUNC) - END - ELSE - IF (FUNC = 21) THEN - IF RESULT <> 0 THEN - @IOERR(FUNC); -END; - -PROCEDURE @DFLT; -(* Set default DMA address. *) -VAR - I : INTEGER; -BEGIN - I := @BDOS(26,WRD($80)); -END; - - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/XREF.COM b/software/CPM/CPM12_PASCALMTP_v561/XREF.COM deleted file mode 100644 index 8f9bc07ef22ee98eb399239af0c920c602b9864e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26368 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 diff --git a/software/CPM/CPM12_PASCALMTP_v561/XREF.DOC b/software/CPM/CPM12_PASCALMTP_v561/XREF.DOC deleted file mode 100644 index 5f480b9..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/XREF.DOC +++ /dev/null @@ -1,23 +0,0 @@ -The files XREF.SRC and XREF.COM are the source and object -of a Pascal cross referencing program. They are public -domain and not specific to Pascal/MT+ (i.e. may be used -to cross reference other Pascal programs). They may -also be used to cross reference other languages if the -keyword table is changed. - -To operate: - -1. Type XREF - -2. XREF asks: Input file? - -3. XREF asks: Output file name? - or - CON: or - LST: - -4. XREF asks: Do you want a listing? (N means No, anything else means YES) - -And that's it! - - \ No newline at end of file diff --git a/software/CPM/CPM12_PASCALMTP_v561/XREF.SRC b/software/CPM/CPM12_PASCALMTP_v561/XREF.SRC deleted file mode 100644 index cb270d3..0000000 --- a/software/CPM/CPM12_PASCALMTP_v561/XREF.SRC +++ /dev/null @@ -1,504 +0,0 @@ -(*====================================================================*) -(* PROGRAM TITLE: PASCAL CROSS-REFERENCING PROGRAM *) -(* *) -(* PROGRAM FILE: XREF.SRC *) -(* *) -(* LAST UPDATE: 09-MAR-81 by Mike Lehman *) -(* *) -(* NOTE: THIS PROGRAM WAS ORIGINALLY WRITTEN BY N. WIRTH AND *) -(* ADAPTED FOR UCSD PASCAL (I.4 - THE PUBLIC DOMAIN VERSION) *) -(* BY SHAWN FANNING (IN 1978) AND SUBSEQUENTLY ADAPTED FOR *) -(* PASCAL/MT+ BY MIKE LEHMAN (IN 1981) AND IS A PUBLIC DOMAIN *) -(* PROGRAM. IF YOU MAKE REVISIONS, ETC. PLEASE LEAVE THE AUTHOR *) -(* AND MODIFIERS NAME IN THE SOURCE FILE. THANK YOU. *) -(* *) -(* PROGRAM SUMMARY: *) -(* *) -(* THIS PROGRAM PRODUCES A CROSS-REFERENCE LISTING FOR ANY *) -(* PASCAL PROGRAM. OCCURENCES ONLY ARE LISTED. NO DISTINCTION IS *) -(* MADE BETWEEN DEFINITIONS AND REFERENCES. *) -(*====================================================================*) - - - -PROGRAM XREF; - -(*CROSS REFERENCE GENERATOR FOR PASCAL PROGRAMS. N.WIRTH, 7.5.74*) -(*'QUADRATIC QUOTIENT' HASH METHOD*) - -CONST - P = 749; (*SIZE OF HASHTABLE*) - NK = 45; (*NO. OF KEYWORDS*) - ALFALEN = 8; - REFSPERLINE = 15; - REFSPERITEM = 5; - - -TYPE - ALFA = PACKED ARRAY[1..ALFALEN] OF CHAR; - INDEX = 0..P; - ITEMPTR = ^ITEM; - WORD = RECORD - KEY: ALFA; - FIRST, LAST: ITEMPTR; - FOL: INDEX - END ; - NUMREFS = 1..REFSPERITEM; - REFTYPE = (COUNT, PTR); - ITEM = RECORD - REF : ARRAY[NUMREFS] OF INTEGER; - CASE REFTYPE OF - COUNT: (REFNUM: NUMREFS); - PTR: (NEXT: ITEMPTR) - END ; - BUFFER = PACKED ARRAY[0..131] OF CHAR; - -VAR - TOP: INDEX; (*TOP OF CHAIN LINKING ALL ENTRIES IN T*) - I,LINECOUNT,BUFCURSOR: INTEGER; (*CURRENT LINE NUMBER*) - FF,CH: CHAR; (*CURRENT CHAR SCANNED *) - BUF,BUF1,BUF2: ^BUFFER; - T: ARRAY [INDEX] OF WORD; (*HASH TABLE*) - KEY: ARRAY [1..NK] OF ALFA; (* RESERVED KEYWORD TABLE *) - ERROR, (* ERROR FLAG *) - LISTING: BOOLEAN; (* LISTING OPTION *) - INFILE: TEXT; - LST : TEXT; - LSTFILENAME : STRING; - INPUT_LINE : STRING; - -PROCEDURE INITIALIZE; -VAR - I : INTEGER; - -PROCEDURE FIRSTHALF; -BEGIN - KEY[ 1] := 'AND '; - KEY[ 2] := 'ARRAY '; - KEY[ 3] := 'BEGIN '; - KEY[ 4] := 'BOOLEAN '; - KEY[ 5] := 'CASE '; - KEY[ 6] := 'CHAR '; - KEY[ 7] := 'CONST '; - KEY[ 8] := 'DIV '; - KEY[ 9] := 'DOWNTO '; - KEY[10] := 'DO '; - KEY[11] := 'ELSE '; - KEY[12] := 'END '; - KEY[13] := 'EXIT '; - KEY[14] := 'FILE '; - KEY[15] := 'FOR '; - KEY[16] := 'FUNCTION'; -END; - -PROCEDURE SECONDHALF; -BEGIN - KEY[17] := 'GOTO '; - KEY[18] := 'IF '; - KEY[19] := 'IN '; - KEY[20] := 'INPUT '; - KEY[21] := 'INTEGER '; - KEY[22] := 'MOD '; - KEY[23] := 'NIL '; - KEY[24] := 'NOT '; - KEY[25] := 'OF '; - KEY[26] := 'OR '; - KEY[27] := 'OUTPUT '; - KEY[28] := 'PACKED '; - KEY[29] := 'PROCEDUR'; - KEY[30] := 'PROGRAM '; - KEY[31] := 'REAL '; - KEY[32] := 'RECORD '; - KEY[33] := 'REPEAT '; - KEY[34] := 'SET '; - KEY[35] := 'STRING '; - KEY[36] := 'TEXT '; - KEY[37] := 'THEN '; - KEY[38] := 'TO '; - KEY[39] := 'TYPE '; - KEY[40] := 'UNTIL '; - KEY[41] := 'VAR '; - KEY[42] := 'WHILE '; - KEY[43] := 'WITH '; - KEY[44] := 'WRITE '; - KEY[45] := 'WRITELN '; -END; - -BEGIN (* INITIALIZE *) - WRITELN; - WRITELN('Pascal/MT+ Program Xref Utility -- Release 5.2'); - WRITELN('This program is public domain'); - WRITELN; - FF:=CHR(12); - NEW(BUF1); - NEW(BUF2); - BUF:=BUF1; - ERROR := FALSE; - FOR I := 0 TO P DO - T[I].KEY := ' '; - FIRSTHALF; - SECONDHALF; - LINECOUNT:= 0; - BUFCURSOR:= 0; - TOP := P; - CH := ' ' -END; (* INITIALIZE *) - - - -PROCEDURE OPENFILES; -VAR - NUMBLOCKS: INTEGER; - OPENOK: BOOLEAN; - OPENERRNUM : INTEGER; - LISTOPTION: CHAR; - FILENAME: STRING; - -BEGIN (* OPEN *) - REPEAT - WRITELN; - WRITE( 'Input file ? ' ); - READLN( FILENAME ); - IF LENGTH(FILENAME) >0 THEN - BEGIN - ASSIGN(INFILE, FILENAME ); - RESET(INFILE) - END; - OPENERRNUM := IORESULT; - OPENOK := ( OPENERRNUM <> 255 ); - IF NOT OPENOK THEN - WRITELN( '*** INPUT OPEN ERROR #', OPENERRNUM ); - UNTIL OPENOK; - - WRITE('Output file name? '); - READLN(LSTFILENAME); - ASSIGN(LST,LSTFILENAME); - REWRITE(LST); - - WRITE( 'Do you want a listing ? ' ); - READ( LISTOPTION ); - LISTING := NOT(LISTOPTION = 'N'); - IF LISTING THEN PUTNUMBER(0); - READLN(INFILE,INPUT_LINE); - WRITELN; -END; (* OPEN *) - - -PROCEDURE LPWRITELN; -VAR - I : INTEGER; -BEGIN - BUF^[BUFCURSOR]:=CHR(13); - BUFCURSOR:=BUFCURSOR+1; - FOR I := 0 TO BUFCURSOR-1 DO - WRITE(LST,BUF^[I]); - IF BUF = BUF1 THEN BUF:=BUF2 ELSE BUF:=BUF1; - BUFCURSOR:=0; - LINECOUNT:=LINECOUNT+1; - IF (LINECOUNT MOD 60) = 0 THEN - PAGE(LST); -END; - -PROCEDURE PUTALFA(S:ALFA); -BEGIN - MOVELEFT(S[1],BUF^[BUFCURSOR],8); - BUFCURSOR:=BUFCURSOR+8; -END; - -PROCEDURE PUTNUMBER(NUM: INTEGER); -VAR I,IPOT:INTEGER; - A: ALFA; - CH: CHAR; - ZAP:BOOLEAN; - -BEGIN - ZAP:=TRUE; - IPOT:=10000; - A[1]:=' '; - FOR I:= 2 TO 6 DO - BEGIN - CH:=CHR(NUM DIV IPOT + ORD('0')); - IF I <> 6 THEN - IF ZAP THEN - IF CH = '0' THEN - CH:=' ' - ELSE ZAP:=FALSE; - A[I]:=CH; - NUM:=NUM MOD IPOT; - IPOT:=IPOT DIV 10; - END; - A[7]:=' '; - MOVELEFT(A,BUF^[BUFCURSOR],7); - BUFCURSOR:=BUFCURSOR+7; -END; - - -PROCEDURE GETNEXTCHAR; -VAR I : INTEGER; -BEGIN - - IF LENGTH(INPUT_LINE) = 0 THEN - READLN(INFILE,INPUT_LINE); - - IF LENGTH(INPUT_LINE) = 0 THEN - CH := ' ' - ELSE - BEGIN - CH:=INPUT_LINE[1]; - DELETE(INPUT_LINE,1,1) - END; - - IF EOF(INFILE) THEN ERROR:=TRUE - ELSE - BEGIN - BUF^[BUFCURSOR]:=CH; - BUFCURSOR:=BUFCURSOR+1; - IF LENGTH(INPUT_LINE) = 0 THEN - BEGIN - BUF^[BUFCURSOR]:=CHR(13); - BUFCURSOR:=BUFCURSOR+1; - LINECOUNT:= LINECOUNT +1; - IF LISTING THEN - BEGIN - IF LSTFILENAME <> 'CON:' THEN - WRITE('.'); - FOR I := 0 TO BUFCURSOR-1 DO - WRITE(LST,BUF^[I]); - IF BUF = BUF2 THEN BUF:=BUF1 ELSE BUF:=BUF2; - BUFCURSOR:=0; - PUTNUMBER(LINECOUNT); - END - ELSE - BEGIN - BUFCURSOR:=0; - WRITE('.') - END; - - IF (LINECOUNT MOD 60) = 0 THEN - BEGIN - IF LISTING THEN PAGE(LST); - WRITELN(OUTPUT,'< ',LINECOUNT:4,',',MEMAVAIL:5,' >'); - END; - END; - END; - END; (* GETNEXTCHAR *) - - -PROCEDURE SEARCH( ID: ALFA ); (*MODULO P HASH SEARCH*) -(*GLOBAL: T, TOP*) -VAR - I,J,H,D : INTEGER; - X : ITEMPTR; - F : BOOLEAN; - -BEGIN - J:=0; - FOR I:= 1 TO ALFALEN DO - J:= J*10+ORD(ID[I]); - H := ABS(J) MOD P; - F := FALSE; - D := 1; - REPEAT - IF T[H].KEY = ID - THEN - BEGIN (*FOUND*) - F := TRUE; - IF T[H].LAST^.REFNUM = REFSPERITEM - THEN - BEGIN - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].LAST^.NEXT:= X; - T[H].LAST := X; - END - ELSE - WITH T[H].LAST^ DO - BEGIN - REFNUM := REFNUM + 1; - REF[REFNUM] := LINECOUNT - END - END - ELSE - IF T[H].KEY = ' ' - THEN - BEGIN (*NEW ENTRY*) - F := TRUE; - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].KEY := ID; - T[H].FIRST := X; - T[H].LAST := X; - T[H].FOL := TOP; - TOP := H - END - ELSE - BEGIN (*COLLISION*) - H := H+D; - D := D+2; - IF H >= P - THEN - H := H - P; - IF D = P - THEN - BEGIN - WRITELN(OUTPUT,'TBLE OVFLW'); - ERROR := TRUE - END ; - END - UNTIL F OR ERROR -END (*SEARCH*) ; - - - -PROCEDURE PRINTWORD(W: WORD); -VAR - L: INTEGER; - X: ITEMPTR; - NEXTREF : INTEGER; - THISREF: NUMREFS; -BEGIN - PUTALFA(W.KEY); - X := W.FIRST; - L := 0; - REPEAT - IF L = REFSPERLINE - THEN - BEGIN - L := 0; - LPWRITELN; - PUTALFA(' '); - END ; - L := L+1; - THISREF := (L-1) MOD REFSPERITEM + 1; - NEXTREF := X^.REF[ THISREF ]; - IF THISREF = X^.REFNUM - THEN - X := NIL - ELSE - IF THISREF = REFSPERITEM - THEN - X := X^.NEXT; - PUTNUMBER(NEXTREF); - UNTIL X = NIL; - LPWRITELN; -END (*PRINTWORD*) ; - - - -PROCEDURE PRINTTABLE; - -VAR - I,J,M: INDEX; - -BEGIN - I := TOP; - WHILE I <> P DO - BEGIN (*FIND MINIMAL WORD*) - M := I; - J := T[I].FOL; - WHILE J <> P DO - BEGIN - IF T[J].KEY < T[M].KEY - THEN - M := J; - J := T[J].FOL - END ; - PRINTWORD(T[M]); - IF M <> I THEN - BEGIN - T[M].KEY:=T[I].KEY; - T[M].FIRST:=T[I].FIRST; - T[M].LAST:=T[I].LAST; - END; - I := T[I].FOL - END -END (*PRINTTABLE*) ; - - - -PROCEDURE GETIDENTIFIER; -VAR - J,K,I: INTEGER; - ID: ALFA; - -BEGIN (* GETIDENTIFIER *) - I := 0; - ID := ' '; - REPEAT - IF I < ALFALEN - THEN - BEGIN - I := I+1; - IF ('a' <= CH) AND (CH <= 'z') - THEN - ID[I] := CHR( ORD(CH) - ORD('a') + ORD('A') ) - ELSE - ID[I] := CH - END; - GETNEXTCHAR - UNTIL ( NOT(((CH>='A') AND (CH<='Z')) OR ((CH>='a') AND (CH<='z')) - OR ((CH>='0') AND (CH<='9')))) OR (ERROR); - I := 1; - J := NK; - REPEAT - K := (I+J) DIV 2; (*BINARY SEARCH*) - IF KEY[K] <= ID - THEN - I := K+1; - - IF KEY[K] >= ID - THEN - J := K-1; - - UNTIL I > J; - IF KEY[K] <> ID THEN SEARCH(ID); -END; (* GETIDENTIFIER *) - -BEGIN (* CROSSREF *) - INITIALIZE; - - OPENFILES; - WHILE (NOT(EOF(INFILE))) AND (NOT( ERROR)) DO - BEGIN - IF ((CH>='A') AND (CH<='Z')) THEN - GETIDENTIFIER - ELSE - IF (CH = '''') THEN - BEGIN - REPEAT - GETNEXTCHAR; - UNTIL (CH = '''') OR (ERROR); - GETNEXTCHAR; - END - ELSE - IF CH = '(' THEN - BEGIN - GETNEXTCHAR; - IF CH = '*' THEN - BEGIN - GETNEXTCHAR; - WHILE (CH <> ')') AND (NOT(ERROR)) DO - BEGIN - WHILE (CH <> '*') AND (NOT(ERROR)) DO - GETNEXTCHAR; - GETNEXTCHAR; - END; - GETNEXTCHAR; - END; - END - ELSE - GETNEXTCHAR; - - END; (* WHILE *) - PAGE(LST); - LINECOUNT := 0; - BUFCURSOR := 0; - PRINTTABLE; - PAGE(LST); - CLOSE(LST,I); - IF I = 255 THEN - WRITELN('Error closing output file') -END. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/ARCTAN.ERL b/software/CPM/CPM13_MTPUG_01/ARCTAN.ERL deleted file mode 100644 index dd73ff91d6f2297bc523fc3d0597ff08383a2b91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmb_a>q}E%9Dd&IY|Zvk2OG5`Qb!nJG`g@j-Q#trEEss1nD!w?)JW-sbfXgOO-q6n zC|$5lmsM0`bYB|fha>r6$xfLm*!CsDpevO`nG$rS^dIzodHDSv-sk!K9)3sqD_V!d z(DAJTpH-yKcLPrWcNju%E;$SM7!b)tgoCDXOpeo(7xu|=1!%9?Ek^d5MX8a~>H=Uh z?5d2&D-kEYICf+{+tpQ5?d6CJmZI(Zrk)00t!P!Q15065u5w>(0_(@my3a`utB6*` z;pRl!pi2+q@HD71OM|IF7`Js$WzEyzCTDfwKiHXXmwkm^MxcKpE*(I%pOPvXjqmVkg;U`#G-T4Ee(Zy)``hrL z*|=ZurOhGWU8G+Z?b8u?$;HqzGt2(4eH&n0(dA?=o_2F@s?vfUW|=ebr_Z>?5CeWKwArMB}FH zO@}SCN2jY37Nhe`p6v9@eJye}qf*rg!ZEv=BsQNKb1Kd7)i9^>0hyVUubgLKbV_ln zc|dD6Rs^%O13GiBAX+2$v-yFwapQ@(H-vu%m%@zZ!nn)}CVe79`fPQtIb28nEaf;s zM)5Qec(Ap;M%%@uc)}qybN6mjw}kPGZW%w+4x)v?-6mAgF(etFx=5YlQ%*Dz>{^%!emV=4scPT3`tc HALF_PI do AZ := AZ - PI; - while AZ < -HALF_PI do AZ := AZ + PI; - ARCTAN := AZ; - - end; - - -modend -. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/CMPXLIB.ERL b/software/CPM/CPM13_MTPUG_01/CMPXLIB.ERL deleted file mode 100644 index 482e8ac563bfada78955c6780acb5f261d53743d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmbu9T}%{L7>2(yGdmq{#6jt1rf@M-yW&rp#U)#8yg2-57eehe6$%YW2ci>QSfqpt zo3zQ{H!GrHtu(7sas4R>tVm^*l2$tfHE5lLl-kHH7q-=e)W*=JiC(lx&u$B*z3tq5 zIdkSb?|HxP&2-Gn?y|30?frBGSyQO(kO8IuWDQsmpoW0x1k?%OG(lL9xuVy-m7!K} zVR%kB1Ryj@?BUzl9Argi08M_VXknBl!g~|NDq(w#Qmljl9@!v;@K18uE1+qN9z0Y! z1*xL|-832>3w_9IhLh6~mUDeER{GL95D1Y!4Y`*3LcW+CMvv%%B4YyGj~cT3O7&!wpl6 zz06x@aShep#+;_w8_SA88JDT}O_RxLTo!+XTn*FGaORS@$28?dWV}g|+HIBhXpAq06GyTUWSxoB z!`k$~^@a+62g|tXKbJQcmFC>#`IWSHlVWJ0$5!;l&eGRH2Z?JR&TQY_1Kd^t-Fzsu zLRy7CpVenab1N`VMC~h^+~2m4El$?`0JYnyfC^2Rn%JJ4#(1Tu-a67nit{pF+8P*T z-FH!-DZKQ1iZ}Dtc(^`(jfZbQjQ_&(`rM-1{|5_uXr@_?b?t?<)W%rdOs2cNmEGcH z-G>-Rlp~By$?Xfvq_gLu@_-Gbruu@XocSaiI;hy0fZ!_$9>X%}I`fgT$Ock|ZUy`3 zvcJ1Sk?3yMLNMseAtUDo6p0I@dUArN?&pwm{T<3mx-1zCo>242xxfWwo{~$Ze?6*t z$Y|ebWewNm+gKVjMjib}Pb&A(t)GXwQip;kBu8i8fU=*N-stfKHp~)$z8C)2^B4Az B>;V7( diff --git a/software/CPM/CPM13_MTPUG_01/CMPXLIB.SRC b/software/CPM/CPM13_MTPUG_01/CMPXLIB.SRC deleted file mode 100644 index 823a887..0000000 --- a/software/CPM/CPM13_MTPUG_01/CMPXLIB.SRC +++ /dev/null @@ -1,91 +0,0 @@ - -{COMPLEX ARITHMETIC LIBRARY FOR PASCAL; (C) 1981 BY FICOMP, INC. FAIRFAX, VA} - -MODULE CMPXLIB; - -TYPE - COMPLEX = RECORD - RE,IM: REAL - END; - -TYPE - PHASOR = RECORD - MAG,ANG: REAL - END; - -PROCEDURE CMPX(N1:COMPLEX;OP:CHAR;N2:COMPLEX;VAR CRES:COMPLEX); -{TO ADD, SUBTRACT, MULTIPLY, OR DIVIDE COMPLEX NUMBERS} -VAR TERM: REAL; -BEGIN - IF OP = '+' THEN - BEGIN {COMPLEX SUM OF 2 COMPLEX NUMBERS, N1+N2} - CRES.RE := N1.RE+N2.RE; - CRES.IM := N1.IM+N2.IM; - END - ELSE - IF OP = '-' THEN - BEGIN {COMPLEX DIFFERENCE OF 2 COMPLEX NUMBERS, N1-N2} - CRES.RE := N1.RE-N2.RE; - CRES.IM := N1.IM-N2.IM; - END - ELSE - IF OP = '*' THEN - BEGIN {COMPLEX PRODUCT OF 2 COMPLEX NUMBERS, N1*N2} - CRES.RE := N1.RE*N2.RE-N1.IM*N2.IM; - CRES.IM := N1.RE*N2.IM+N1.IM*N2.RE; - END - ELSE - IF OP = '/' THEN - BEGIN {COMPLEX QUOTIENT OF 2 COMPLEX NUMBERS, N1/N2} - TERM := SQR(N2.RE)+SQR(N2.IM); - CRES.RE := (N1.RE*N2.RE+N1.IM*N2.IM)/TERM; - CRES.IM := (N2.RE*N1.IM-N1.RE*N2.IM)/TERM; - END - ELSE - WRITELN(OP,' IS AN ILLEGAL COMPLEX OPERATOR'); -END; - -PROCEDURE POLAR(N:COMPLEX;VAR VECT:PHASOR); -{TO CONVERT COMPLEX NUMBER FROM CARTESIAN TO POLAR COORDINATES} -BEGIN - VECT.MAG := SQRT(SQR(N.RE)+SQR(N.IM)); - VECT.ANG := ARCTAN(N.IM/N.RE); -END; - -PROCEDURE CART(N:PHASOR;VAR XY:COMPLEX); -{TO CONVERT COMPLEX NUMBER FROM POLAR TO CARTESIAN COORDINATES} -BEGIN - XY.RE := N.MAG*COS(N.ANG); - XY.IM := N.MAG*SIN(N.ANG); -END; - -PROCEDURE CSQR(N:COMPLEX;VAR CSQ:COMPLEX); -{SQUARE OF COMPLEX NUMBER, SQR(N)} -BEGIN - CSQ.RE := SQR(N.RE)-SQR(N.IM); - CSQ.IM := 2*N.RE*N.IM; -END; - -PROCEDURE CSQRT(N:COMPLEX;VAR CSQT:COMPLEX); -{SQUARE ROOT OF COMPLEX NUMBER, SQRT(N)} -BEGIN - CSQT.RE := SQRT((N.RE+SQRT(SQR(N.RE)+SQR(N.IM)))/2); - CSQT.IM := N.IM/(2*CSQT.RE); -END; - -PROCEDURE CONJG(N:COMPLEX;VAR CONJ:COMPLEX); -{CONJUGATE OF A COMPLEX NUMBER} -BEGIN - CONJ.RE := N.RE; - CONJ.IM := -N.IM; -END; - -FUNCTION CABS(N:COMPLEX): REAL; -{ABSOLUTE VALUE OF COMPLEX NUMBER, ABS(N)} -BEGIN - CABS := SQRT(SQR(N.RE)+SQR(N.IM)); -END; - -MODEND. -S(N:COMPLEX): REAL; -{ABSOLUTE VALUE OF \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/CMPXTEST.COM b/software/CPM/CPM13_MTPUG_01/CMPXTEST.COM deleted file mode 100644 index fdbed08af56c8ef8dce8ddfb6b914e6ffd962d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14592 zcmd^F3v?6LnI3~5$k+lKWMfOVG$SJHk&Vq*mMkqe5JH@6>XuVYcEY%HlP2ah{rm1d&#k;kpp}NTn#Ia1$QkNvTq{U8lQGA5$ zm_r0QlGz3E5ea^lz)y*jb<ml6V{Ajj%vr3xWDWP6hLNoNiHl<4!=cz@iAR zWSM#KY$6k3CovJpqL(hk#alL6VwwxbG%t3l;+Fyc+s?t>>^N0?-lWWlbhUUCX%njf zh}jB&xu25&Ohr6A(_8lryQSMrP)u19uZrI_Y06UXmg=$KZ;xlE0Qkui{1cPnE!9mi z;GuU+GguNvB1So&8RgfLX5Li2VY8*lYgt^~&{We{S6x5eJ~1-Bo|Is@&OkBkFa~Ob zhJR8ULztYjV%e%i%a<$|V|MHoPmzP_VCWb^jGV)ooZXXCs2t1ks;ZS^g(Z!efeMQu z#0Yy<6Be4Byx3d6X?tyTQ_Wu`N(t?0@zWNqZ}e{2-c)1RQN3lmDul%6k2y9O06}13 zP%U;!&j@2v<*%uU3?nwji|-_eR}#hFCyA9h>4<>AaZV?_goSjJhJ=ugWf-4uQ3n+U zTGghnjDx-1@oZdd+h-Q+L6{WQI6p|~1J;xT&qW<1k*~T zL)_1{oEdF^L7`vlla6^oM}V7qUr9jb3p$Bv2?eNz$P>zB%#@R)N}e-=ibX$EEXqIu zMkRLb0*f$-SWUiqfl(y>QYQ`|EtV0jJXNm5OCF5vb)30-nfDpM=3c zt@=wc40&pXx}t`j5(+6yGK3x%pNw`=X@4ReuV7G8WN4wKNoWD+PhA787?z32;+iB9 zyoo4+Azf3x((&=hRw|WYNCR}d)dW;cRnU{R(9xhw-Ak+V`ISyW{njLT5|eF=xi^d$ zRG2sxjpELEW8W;gQu><~M+|rq$5f@Y7 z!$HV%W)KtloBD^-xGPx{rn0`&2wM!xgB!G2TEg1lC$U8Oq=YS0OVZl{yG2-QT^&s; zW3n=swPCVS;)Y{yvf2`0vZ9bOSrOL4MCHcuWat(32|rC$>GO%8C`{@R®y9tnU* z#|7z7i44>p-w|`KZYpIDtGygd7QhHg`T~`r4y(!+U(gW25bfq(>r|4+M^Z(8D(tI# z!jV+Z5gf2@0H#@)JCO=G#FplxT(;F7k*2u@dpoDHrvT0BsSLXmtgzK3b-84pkf8S@ z=m}N}P?7P+l(E}E_}_CV?NU~$bipyMuUIpcKLN%@$t4*eE=4akr%LmZp_r=oq*BQ^ zJE3Jirp)SORmn~VX43cf8mftna6QUnDJpK*)DY?almeoNCvgDOWED~r50a*+9o#6k zAUPuaMFsy#Cne~`sVOAvsK?nQ03or2olAZo^6)=|9Hf^5vPZT@!d#NRN47@7QiH%v z)ALDsD^U1pdOOtG&V=gFI8h+e0F4bMbMJj>+;KX+x`l;(n6i0VmI}Mhjh2R*>MaG9 zl?~07>e}kMdJo+mf^rdFrw3bD8^o4W@$;1NP7I2jQ@^P+{!8Oxid*&Ko@wISda*K1 z{Mk%pU-2&nW!ZoN-5EdurX}*E3lT0MKhU$Ek8pbp{9Z$ZESg0wEJ}qL3UjteCTaSR z9_Uu!6z|lF=k&m<_L>1M{d2v}X}uo766ZJYeuI*fFB)X-W%&CEBE>-9e`1KxC^%-& zqJYcbkHNUd3_O=%=eP`rg6~e_Uj~SkEY7yfa|WDzuUTa7xPgBW=-m$T^PU4{yeNO% zkQGrf6A6iik%BW6C^WYABKI4NU9L8N@4k+_uTwqX7Gd@b@_O zOZky%>K_@139$<<{uiccRp2^k5EF@DV5bf_NE~v|z$QQvsAD0H+fDor4LB9U9NAV> zYbEZ0MUF1IYB$iC$j6DqIvotiJ!24y$q>LYQ!hiEe+HDLvU;+t++i|e3``7xd#3Y; z!NP|P{G(uvn&}Kn4Mkk?IN}HcLr?2|Z_A-t#X&EOI%swV{{nP>!NAW32hBzYg{Bix z;0Tlmj=-6e&X!cPxL>h^W*`J|ZG1OeoMO9yHZXUS&;)OwZtOwO4+qKCj~fyvnlXKe z6~Zwcs4Gu`8&4BAo<%qEr-{P&VkrFv4C_y$lqmO_L3}6;=uqHaGo*brl4a-KBKABx z*6nYkX(uF{)q?>iqLcS9Fve+OhGxfe(N#pdj5HQXY^nL4dqvm@qiB zE^0jKU>ie+201EG6%WH%VQl^+jJh^mbv(tXDS@szlumfSqsR q$_P_3<3zeLhYA z>_(`{n7TdVa#U#{CV_USPJs=p2A}Ttz*-1q6w`Q@lK_58om0+@hO8}vKL?7RGw?PD zSsRAzi5cUB{cqqCZyhfcSHUq+3H~OAE`rrrKXV+0@kR!BDNe_LDjd&_ySiB6s6Pf1 z&W%4eU=7cl=nNZUjXcd7d0>q^w8pFBMT0dkH2I%{!H3GO^Ox2(QYK?O0UL1^u)@gV zYO>dsxr>l%A(CsqAh~uC*hWU^W+lPEhhnOOGvOtRGBdw0u-Nn~7&}KVZY8M#0w8hP zIxlA%ifX|qRy&@3MEQ#bI#0noF%0Q@H}Gg*!MmuI@50v`qsVV+-nTFPds;S{%@vk zrW5E2BQD?bGH|`(?lwZMs;{{ztBm{#BaLr##zz_a-Np!z?D_ea@pJ(PF42&wG2%AW zkf};hI)I-iWh#Ci?Mr8|RX8L=o+-DHGI`Dn@|%rTZnF`7B7Ch8_rWA2sxsLuctdD4 zit93g9))(?O~Q*ytI^YH)Lt5V!Xv1e=Mf~4w>b<|u4sl=T-l zrYIW$V07Xu#{EXI7cEA6raVTBK%S6y;0|@LXVt;TE*uTLa+VmE70c3L1YNjOn&4P; zL$ml(;LUWR`e5&i2$r}S$)k(bD@O6`EHbAdQqb`gf~P|ne5@)AX(T%@y1D5vf;4Lk z0&y!bN(Tx_d6tMG&zZs4G0teJ;S7ta6=jK6vsC*4EBB_xg7YM9n(ort#nvoEQ?jsO zV`~=i>h=ju5zOM>1XJL0dfGkSMLk(C7HLOQVc?(7VrL)#6%Guiwc7yer=+TEY|a=F zxSB=u2;&UVn>>}NwALtdbr@GlXcJ?g-Z~>HyBVK!^9pA3V$COPr$3Dv4pnE>AltJ6 zp)@~3x-mluF|ScPldZDha)hRNT4e)pz)4S%VmZf&kZ!`4iIkm0iJha!dSPRsGkUf| z0+@TRWCIW5Rd|#Q5D3)~ibkhPKPcpdtgZte;BmgmjeUuHI`;rD+<<#9ntj4OMsX2U z{T`#|9-5h$6W_!?nOn+%#bD+*9Vjq~4pR&vG>*_YTwpqV9r5x6Tw~;P4m+Tm!-NsQ zFXaZn24azkDC>tsVU0ree{Q2Q;57!+X=;`9yxd`9JMWEsmUodqHN#&N%SyTJx{+;4ksPcXe)D6N; zG}FSiakp6S2m(joBOpw*uzpVLHc5BnJ~{+#!=IRd(B3uFEw$tfc87n{qls#++T9muKd7Vk(*exl7de$H*;ejsV0Nwx1_fpS zF!)ga?h22eD>&BgKfbe|v7n(~8)~G_983+A=MHwPTT=zPit}oa>#p9<{F1v3mnIU&%MyJ!&T34u`VAh4tcdUF%w zI)|gViHtAP+m=}i{u%TGpa=j3c%aFNoz})4)j1H-5&V;ublB ze8uc)AFAkI82Hk>tABUsOY^_YDw;pcSVD}Yf(BBD7Ajx`^WadwKlHhITv!c$Xty`o z8-nODtJNxgZr1N!mOFyQ56zHNpbEbSwb4&uzsIFPB9&V7DeU*Tw1>I&bh|M%z=PZ4 z+taNxQUj$HRIuHCHrOTiK+h=ji$)+1uc#auM#9 ztZs;LQ&;l342Hd%#pCAaz&7>=?DOmy_B{J5_A;BqS-2u@5m$Gw61L}f#8GW@%@4iOXB0HH_j3r7GF{Da5e`aXj% z8Amzs#o1!Q4dTih#IrYuWj3+FMh?l&*w{{6UxXZ`SlzHsebdHvjS_Hg{icoVt=0X9 z!OEYpL3G1`7p&*qHhjKrqg#>b&_u{xgxsl;#iO%TG3x&0+Y^hSM|;6Rf4%#NPP3$0a zOv26tZFCEznGFztH32s55sQ-GAMFu?PdPh>YcZSM(&5==OI@P{E^E|n*-}$my+yk{ zqu!^{?$6LSL&?UzJI3FH)&#k8{YOd;eqdTD*OW* z`_Wk8AB+nB52EZxHfcvZ)pt7o0TrjUz^6K52}PW2WBbO6lSjpUqQL{KeOg8FyKJL( zd7zCjD&HfKF?NKgjs0xw2+`3I1_@yDR0H5MZ5(Qon@o6m0|p@H(Tb6xRIATy*v5|v zL_-lAX^+Sqz>MksGiM|wiQIEO9Icg9(r4E@i}r!}_6ZMCMs zH%zX_&H6{&+&gZr+g(0MaObnd#hfP}?tR5Q6bId=?m7{un*-Yn?$bG3-yH6hJnn_O z@_6BsIl{|%<#ECv<_IVA$}PgSJa$_i_xm}lBcJQYgU^dxX+A61IamJQI=y}qFDU=l z$HXP;)_k%+<=bIVvfFVXvfJ@+rU*VF=8JiDJ|9jK;mn;JB<#*tKOru5VuSbwuM(cm zpLuiLj=GICmi5h+V#~&wrkV{+H5;{QQ0&!MKgc)oJb!CV^;U~_M@_?hTf94=Zppi^ zx~Y0g{zN@=ym3WSLtTBX*1?k3)UdsN1Kb|lIAM>4yk*7q^^F@E>b5o&L8+m-zP85V z-QHyJ-e+0w-Cn=3F?JwOGzMT3pLxp`Z*>z6xYS!$51ka8v3*p{Pw=)?^$j%}ytVap zEj1f0H4P2k220+0_`+IOzZFJ=%Y6%%EMGnbr?kou$0RTh<)6s!%Qx`f;+OM&%|IhO zH@|Uf^@f^q?7P8R4@kDx6j;_S#(MR7Z$s0K>b1r~aF233v&88sMBmXHiFi7ZXNRkA zO6H-nOYP`vpRfZRJ^o{Q#Ipl?Yj+v0yM(Z_kcdJ-?RK@ddO-p&LE`z&FO-(+djGjA z3`qsze`?ak-fl=zZaqvO%ac?9So;QOiXx=60usoULYd2^S6B zQb-Ja01SN)4NWc#9Hgd|(u%bhd9F~6kp<|6xMI3BFu7H-swy5^VYDus%OexM&*FjI z3Ma8{Trs(}L5(`tn>-hncXHea4BX^m(SzLxk9yg|LwWG48|5KguvO{86pMT2j)#Gh z9KzT`Vc@mok?UX}Fg#kkYp%!?s}dHGU^%Ku#DD=cFra`5^-*pUx#@Kt`q?R=So^S_ zRLmz7Te*Z{KB?HwB^ASGr-34+6Q?WYb;W5nDi@Lb3d+qz3RMYktN{*kdJl8=<|2$x zB;EvIR5NT6BJ4~`PE*JvBiK!N+bK-Uj@nV-AWl(35e~PDUMwO$8bRfdI;twxoY;fp zo3%k&?F8+`i==}J1b?X}a72Yz6)`{~V3js2lHm;lGHoLMZMEvD1k z5@B?D1)#0mZGvc?CoZCQq$WzH7}eKks;>dn*P!Z) z1gbh*q$^hCWeY)oInfpmqiLPMZxXnAfv*?TMTTKy?l4#w&M(N6`4GTT&Z{hSM5{|Plc=Eyz3vlc)EU*^F4G9RT;}$=K zJ2gOoB2wU#Cmd0@S&ngE#V!n!Xn{?6Lg1PZl)2j-GFRy!f~7wRe5IqUGr*QeHaM;@z!_psMp;-`+Du4bXg3AMRSb}n=j z-*c#A{y+bfxkXO6+1e#<;}5&G0_sllyJ#%B=I{!XX(fRk)*o`TKA(@qKYkxx4- z`KO#wDS`3Y817jo|E!bS=j8V}!F#aAvbZASzT${8W<^pBEw@`EouRj!*WyAcu4|J* ze{^1(94c^Kix2(UDOz1psjI6;_U#M2?`%65GPxjUBKOt}P;$#phQDz7_O%_nY;uY3 zJAX`nV%jk0E|E4(j>!db-gn|Oq{xwbMA?b$Q20+LjAmne{c+wt{r22w$2%&?R?65`O{0FT>vz7hHO^ z*MkuL3bbE#MWioX{1+}IZ{WbYC*0k3Z6u^G^X>Dt9jqPJmq~4IP^`Q4Py%3K+_Qvd8E)4-Mc&-wwg(ZayAZP$upu+f@V~G^!?-r!5HFQ5F@O%JMILr!1Nu z?Y*eEpT5EimgTP$z;upUqN-q#_t|@h*Ri}qKv+%xP-Jq5$4oBpTC3X(+QBtBEo* zlZR2d#t@*aB-=_@hftuw3@uf*y;#*nN%fk#8Ae*f&W#0$(V}y~H^!$!ed8bCdGqAt zd7g95=X<_`$y-NCo=_awlnTYBq%jLrV{7{e4HW~LEFxd59g)L<-zA!ClJ3Y|D4^n1 zs_nZx-h2i!~)1UKo6Y|+|S#rZ&!pI%JIpb?x&oG5wv^#wXH?Aj70&xL==?zf< z6F`0E(y6^1QRBgvA0!;{13rT>c zXXC1cR0hP4Z7?QVzW>(K6CUat%5WL!kFwMOjAs)FMhTlNLPZ_j0OBzcq*_RCfcRmCZzMchyyNz0iR%>MxSeJ5w7{MQ3?|RXm@IMq3hbSbRC6XL zeF(rCg)5!0IZ5!%xXDv48(QTX_TQlOvX!l_`U{rIJMcgdqfnDJkYY5>%NbD9pqgTp zcsVgtlYU4_Sf0BHfgnC7ox5{<_rV%&Bi?=(S`?-gt*Mt zq+X+?RRQz#WB$kA7O&%Cf0ANI5dQ7K;~rCBNx5l=V;kl`$()wMv^Zrm<+NloAg#t5 zW^b}jRvX6p^+$JEUD&D}H8)#{mdWR}`#P7tk_8W=^DzxW^aIWJV$)HWJZ6&x?FcCW zOj0}=ufyi+g7dN0nI;eBQvp^Bd%yH1z3Es@R=N_HQ@nrI`t8^D2JX;88fbCRW=TJV zM?)lQ{AUMdTD-~&asV}j{#NN)#*%KM)gQ%MJ6u;uM>4BBN#A&*E?6|%q(MK~4P}=1 zR$X6`j`fT>XN#x+1f#)d*o_^oEa~`OSJ@2&*AKq@7N=qi8IgDTJO_l2iB#2I3~5k! zXpmzmAM@^(-;WqHHgT3KrhNI^<`V%{iKg-6id_1fe>{m(-}~GTq_04>tr%N0qS15n zoP~(Ue)MUr{*1;Oo|@qtEz+Qp(q@F`u|- atC@_", AS - IS ANY CP/M TRANSIENT PROGRAM. THE PROGRAM WILL THEN ASK - WHETHER OR NOT THE DEC DISK IS INTERLEAVED (SEE NOTE C.) - AS SOON AS THIS QUESTION IS ANSWERED THE DIRECTORY IS READ IN, - INTERPRETED, AND PRINTED AT THE CONSOLE. THE PROGRAM THEN - IMMEDIATELY RETURNS CONTROL TO CP/M (NO REBOOT). - -2. CPMTODEC: TYPE "CPMTODEC " TO EXECUTE. THE PROGRAM WILL - FIRST ASK IF USER WANTS TO ZERO (INITIALIZE) THE DEC DISK. - IF "Y" IS TYPED, IT WILL ASK "ARE YOU SURE?". IF EITHER OF - THESE QUESTIONS IS ANSWERED BY ANYTHING BUT A "Y", THIS OP- - TION WILL BE SKIPPED. IF DEC DISK IS TO BE ZEROED, THE MES- - SAGE "PLACE DEC DISK ON DRIVE B" WILL BE PRINTED (SEE NOTE - A), FOLLOWED BY THE QUESTION "IS DEC DISK INTERLEAVED?" (SEE - NOTE C). AFTER THIS QUESTION HAS BEEN ANSWERED, THE DISK ON - DRIVE B WILL BE ZEROED. - THE PROGRAM WILL THEN ASK FOR CP/M FILENAME (SOURCE - FILE ON CP/M DISK). ALL KEYBOARD EDITING COMMANDS ARE - AVAILABLE. IT THEN REQUESTS THE DEC FILENAME (DESTINATION - FILE). ALL FILE NAMING CONVENTIONS SHOULD BE OBSERVED. IF - A SYNTAX ERROR OCCURS, THE PROGRAM ASKS FOR BOTH FILENAMES - AGAIN (CHECK CHARACTER COUNT IN NAME). THE "PLACE DEC DISK - ON DRIVE B" MESSAGE IS THEN PRINTED (SEE NOTE A). ANSWER - THE READY(Y/N)? QUESTION WITH A "Y" WHEN READY-"N" WILL ASK - FOR NEW FILENAMES. - WHEN TRANSFER IS COMPLETE, THE MESSAGE "ANOTHER - TRANSFER(Y/N)?" WILL BE PRINTED. "Y" WILL ASK FOR NEW FILE- - NAMES, "N" WILL REBOOT SYSTEM (ZERO FIRST TIME ONLY). - -3. DECTOCPM: TYPE "DECTOCPM " TO EXECUTE. THIS IS SIMILAR - TO #2 ABOVE EXCEPT THAT THE PROGRAM ASKS IF THE DEC FILE - IS ASCII. THIS MEANS: IS THE FILE TO BE TRANSFERRED AN - ASCII SOURCE, LISTING, OR OTHER ASCII-TYPE FILE, OR IS - IT A DATA FILE OR MACHINE CODE,ETC. FILE. NON-ASCII FILES - ARE TRANSFERRED ENTIRELY (ALL BLOCKS TRANSFERRED). FOR - ASCII FILES, THE LAST BLOCK IS CHECKED FOR EOF CHARACTER - (DIFFERENT IN DEC & CP/M FILE FORMATS). (NO ZERO OPTION). - -_________________________________________________________________________ - -NOTES: - - A. THE CP/M STRUCTURE INCLUDES PROVISIONS FOR AT LEAST TWO - DISK DRIVES. IN ALL THREE OF THESE PROGRAMS, THE DEC DISK - IS TO BE PLACED ON DRIVE B. FOR THOSE USERS WITH A SINGLE - DRIVE ON THEIR SYSTEM, CBIOS SHOULD PRINT OUT AN APPROPRIATE - MESSAGE AT THE CONSOLE WHEN ANY PROGRAM SELECTS A DRIVE NOT - CURRENTLY BEING ACCESSED. IN THESE PROGRAMS, THE MESSAGE - "PLACE DEC DISK ON DRIVE B" SHOULD BE IGNORED BY SINGLE - DRIVE USERS-THEY SHOULD WAIT UNTIL THEIR CBIOS NOTIFIES - THEM OF THE SWITCH. - - B. IT SHOULD BE NOTED THAT TO SIMPLIFY THESE PROGRAMS - CONSIDERABLY, THE DEC DISK'S DIRECTORY IS ASSUMED TO BE - EFFECTIVELY ONLY ONE SEGMENT (8 SECTORS) LONG (THEY ARE - NORMALLY INITIALIZED TO 4 SEGMENTS). THIS IS A REASONABLE - ASSUMPTION, SINCE UP TO APPROXIMATELY 72 ENTRIES CAN BE - CONTAINED IN ONE SEGMENT. HOWEVER, IF A FILE CANNOT BE - FOUND ON THE DEC DISK BY THE DECTOCPM PROGRAM AND A SUB- - SEQUENT DIRECTORY LISTING ON A DEC COMPUTER SHOWS THE FILE - PRESENT, THE SOLUTION WOULD BE TO PIP THE DESIRED FILE TO - ANOTHER DEC DISK WITH FEWER OR NO FILES ON IT (EG A FRESH- - LY ZEROED DISK). - - C. THESE PROGRAMS WERE ALSO WRITTEN TO HANDLE TWO DIFFERENT - DEC DISK FORMATS: - - 1. STANDARD DEC FORMAT- LOGICAL SECTORS BEGIN ON TRACK 1 - WITH PHYSICAL SECTORS 1,3,5,7...23,25,2,4,6...24,26 (EVERY - OTHER SECTOR). THIS SEQUENCE IS ALSO SHIFTED BY ADDING AN - AMOUNT B=6*(TRACK#-1) TO THE TRACK 1 VALUES (IN MOD 26). - - 2. CONSECUTIVE- LOGICAL SECTORS ARE PHYSICAL SECTORS. - - EACH PROGRAM ASKS IF THE DEC DISK IS INTERLEAVED. THIS IS - ASKING WHETHER THE DISK IS STANDARD DEC FORMAT OR IF IT IS - CONSECUTIVE (IE LOGICAL SECTORS=PHYSICAL SECTORS). A FLAG IS - SET OR RESET FOR THE DISK B HANDLING ROUTINE. THE USER MAY - WISH TO ALTER THIS FUNCTION IF HE HAS ONLY ONE TYPE OF DEC - DISK. - - D. THE CP/M PROGRAM BEING TRANSFERRED MUST BE ON THE SAME - DISK THAT THE TRANSFERRING PROGRAM (CPMTODEC OR DECTOCPM) IS - ON (DUE TO THE AUTOMATIC READ-ONLY STATUS THAT SWITCHING - DISKS CAUSES IN VERSION 1.4). - -***************************************************************************** - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/CPMTODEC.COM b/software/CPM/CPM13_MTPUG_01/CPMTODEC.COM deleted file mode 100644 index 6e80e160ca641e3289e67f090b37a63a510d797f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3840 zcmeHIYiJzT6`t2Vj_Mt;woJ0JYt6%?_9&K|#ip>8Mww`5rH!N+F*|x$R)lMUoCKq^ zX)W7Y4Qfea*Ju=ajrP_WgN6@X`quHv zyY#KE6VClc{QTe28~EoDHM*|l1hw~2K(4IP3QeUCP?(X-W8OW9) z_bg;jL9PHds^^$Ts9YJQTj#D!mmivv`XSn^EB%lu-*9`FxuAK)VA5-~Or?X#or2E$ zS0*=t)a>R2)A56kn(sZu+&VzePJ!wFoklFv{|lY#fq-&fWc)Aa+l!vhF-TP=I|nMA zeFoG__E`|;L2`iS50OC96s0(jLB=}YjAwrjlb)y4W|Yg#K_@D@Z!l_{05Ay9iF~~O zR~3w_W0%G!jHf&eaVCl==CW*PorF?;=tGGmxvD(MVoo{`v$B_+LuK#o5+4^YfOH;)dxdN(1ovm`f)^Zif61x`yr9kf4XYmX0&R1V4aV=i&wli{7aZSwpAB;4u-6l> z^8PAaX^Jf^$Jwp8K4qoJU19#2T~{U{gBhCQ=)rYYI`G$0Xq+jfzbK@}LV1D1a z_cABbH8yt|Mh;O<&{j3M{neK_hLsOiRNRhps=%=O-62kGV-8|kfj$v$p!!KLxdx z?E(K9Q#lF5k69H8wp#@kwW|yf5XRjLAG3Z6A;E+`?Yu^~H$T z&qL(|QU1zqWk)W^hJTL5f=d@bWVqdoiy+3o#JG&^??m_OSQOpO7)JMMj6_FFMOjdY z!L2+kM1d@1`#`x0(pgZhfpi8$qz))&Kuz9!_g6{xZ?Rk-1O+!07e5HIeiHD(q&I7s zr{v*vX$sc;*OPaZv)G$wVKx1EE#m}C^&30Vtqd8toXEiT$nnRMWU35@dc&}CFj09WzA%IEPbBKNbt{qkcxXk~{~Yi< zf$^^-1FHH)BH%V(Pl%nQ1F$D$sR-HLEv#HG&d=%}6Fn;Tqn-s3b23ld@DfW~`B}sf ziT=jiPZCNoETu99nU&3i_+%XsD~$D)Rc=PkT>vCAgj^)#5+RofnI)u1$dgE98KWgX zDl?N#P?_8mxj6?j=@^y4D>XT@>lxv=#R8m5l9}sa^Wvh{xDfy>zcaM5`Js!qIdst`^aqjzRKNnH^0?65t69fv6xVvRq7h!APdU^uw1GB#)b6a6#td5< zjquQwE(4941>#i~S`!LG{r%)X0w#JoD(Y?a*kEU!DU4V}Td(V5`bmPrAa><;CsGX^ z?bWUA;_Teyi^C_jy+9`{6H|@p4{L|EQVpkc%iMvlCr`jnvvgt191==HxT*80|NHk( D;zyq+ diff --git a/software/CPM/CPM13_MTPUG_01/DECTOCPM.COM b/software/CPM/CPM13_MTPUG_01/DECTOCPM.COM deleted file mode 100644 index 0cfada5b5f39e7c38528e515f857db906adf3556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 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 YY#--cx{wtJn%jr{gKNMC+yB@19|y8xG5`Po diff --git a/software/CPM/CPM13_MTPUG_01/EXP.SRC b/software/CPM/CPM13_MTPUG_01/EXP.SRC deleted file mode 100644 index 232250b..0000000 --- a/software/CPM/CPM13_MTPUG_01/EXP.SRC +++ /dev/null @@ -1,130 +0,0 @@ -MODULE EXPONENT; { Copyright (c) by T. W. Lougheed 24 April 1981 } - -{ First version 8 March 1981 - - By T. W. Lougheed - Dept. T. & A. Mechanics - Thurston Hall, Cornell U. - Ithaca, NY 14853 - - Last version 27 April 1981 - - This software is in the public domain, and may not be sold by any - person or corperation without permission of the author. } - - -FUNCTION EXP( Z :REAL) :REAL; - -CONST E = 2.718281828459045; { Base of the natural logarithms. } - - MAXREAL = 9.9999999E17; { Result of overflow. } - MINREAL = 1.0E-17; { Result of an underflow. Could be - set to be zero just as resonably. } - - CAUSES_OVERFLOW = 41.4465; { Any argument greater in absolute - value than this will cause overflow. } - -VAR Y :REAL; N :INTEGER; { Intermediate values. } - - - - { The following funtion returns e raised to an INTEGER - power N. The sign of N is ignored: its absolute value - is used. } - - FUNCTION POWER( R :REAL; N :INTEGER ) :REAL; - - VAR X, F : REAL; - M : INTEGER; - - - - { This algorithm uses the 'invariant' method. The following - equasion is always true, it is the 'invariant': - - n m - R = Y = X F - - "n" is the power we want to raise "R" to, "Y" is the answer we - are seeking, "X" is on its way to being the answer (starts at 1) - and "m" starts at "n" and arrives at "0" when "X" has arrived - at the answer "Y". "F" initially starts at "R" and increases - as necessary to keep the invariant formula true. - - Since M = 2 (M div 2) + M mod 2, if we replace X with - X * F**(M mod 2) and then F with F**2 and M with M div 2, - the invariant formula is unchanged. So we itterate this set of - replacements until we see that M is zero. As mentioned before, - M is zero, X must be the desired answer "Y". - - The only fact left to note is that M mod 2 = M bit 0, and - M div 2 = M shr 1, so we can do all that jazz cheaply. } - - BEGIN - F := R; X := 1; M := ABS( N ); - IF M <> 0 THEN REPEAT - IF TSTBIT(M, 0) THEN X := X*F; - M := SHR(M, 1); F := SQR(F); - UNTIL M = 0; - POWER := X; - END; - - { Note that the description is much longer than the algorithm: - a hallmark of the method of programming with 'invariants'. } - { Note also that the method only works well if you're clever - at guessing what a good invariant could be. } - - - { The following function gives a Tchebyshev polinomial - approximation for EXP(X) for 0 < X < 0.69; the error without truncation - would be less than 2E-10. Adapted from quasion 4.2.45 from - THE HANDBOOK OF MATHEMATICAL FUNCTIONS, by Abramowicz - and Stegun. This is really SUPPOSED to have negative arguments ... - to give 1/EXP ... but I'm using it differently. } - - FUNCTION TCHEBYSHEV( X :REAL ) :REAL; - - CONST A1 = 0.9999999995; - A2 = 0.4999999206; - A3 = 0.1666653019; - A4 = 0.0416573475; - A5 = 0.0083013598; - A6 = 0.0013298820; - A7 = 0.0001413161; - - BEGIN - TCHEBYSHEV := ((((((A7*X + A6)*X + A5)*X + A4)*X + - A3)*X + A2)*X + A1)*X + 1; - END; - - - -BEGIN { Main } - -IF Z > CAUSES_OVERFLOW THEN EXP := MAXREAL -{ These are special cases that we would like to handle exactly } -ELSE IF Z = 1 THEN EXP := E -ELSE IF Z = 0 THEN EXP := 1 -ELSE IF Z = -1 THEN EXP := 1/E -ELSE IF Z > 0 THEN BEGIN - { Split up Z into its nearest integer part, N, and the - remainder, Z. Let POWER handle the integer part and - have TCHEBYSHEV handle the fractional part. } - N := ROUND( Z ); - Z := Z - N; - Y := POWER( E, N ); - EXP := Y*TCHEBYSHEV( Z ); - END -ELSE IF Z > -CAUSES_OVERFLOW THEN BEGIN - N := ROUND( - Z ); - Z := Z + N; - Y := POWER( E, N ); - EXP := Y/TCHEBYSHEV(Z); - END -ELSE EXP := MINREAL; { Underflow. } - -END; - -MODEND -. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/F.PAS b/software/CPM/CPM13_MTPUG_01/F.PAS deleted file mode 100644 index 7fcac1d..0000000 --- a/software/CPM/CPM13_MTPUG_01/F.PAS +++ /dev/null @@ -1,14 +0,0 @@ -MODULE FORGRAPH; - -{ This is an examplary function for use with the graphing procedure. } - -FUNCTION F( X :REAL) :REAL; - BEGIN - { Happens to be an unnormalized probability amplitude function - from quantum mechanics -- for a simple-harmonic potential well, - I think. Whatever it is, it looks nice. } - F := SQR(COS(X))/EXP(SQR(X)); - END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/FILSIZ.ERL b/software/CPM/CPM13_MTPUG_01/FILSIZ.ERL deleted file mode 100644 index f564f4beaf4aa262bf3281d8c3e1da91a4c6c374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZp@a78$b$Ad$a@qntF+;KnH`-Yk`gi#t9o3_FPSCU|?D! z!63-dz^u2CqlH0|n}Pe>wvH6nh6dIM4#s0Id*(2>uv`r}al(SdAs{%Ur=7utmF0-X Vi5IL6PA>kza~K#H=1I{A006R_Jcs}Q diff --git a/software/CPM/CPM13_MTPUG_01/FILSIZ.SRC b/software/CPM/CPM13_MTPUG_01/FILSIZ.SRC deleted file mode 100644 index b497cad..0000000 --- a/software/CPM/CPM13_MTPUG_01/FILSIZ.SRC +++ /dev/null @@ -1,18 +0,0 @@ -MODULE CPMX1; -(*$I FIBDEF.LIB*) - -VAR - RESULT:INTEGER; - -EXTERNAL FUNCTION @BDOS(FUNC,PARM:INTEGER):INTEGER; - -FUNCTION FILSIZ( VAR F:FIB):INTEGER; -BEGIN - - RESULT:=@BDOS(35,ADDR(F.FCB)); - FILSIZ:=256*ORD(F.FCB[34]) + ORD(F.FCB[33]) - -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/GNB.ERL b/software/CPM/CPM13_MTPUG_01/GNB.ERL deleted file mode 100644 index 8b44c3d455b337c458f730c74e6a35883ee6ec18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmZp@crjFXVwk8Z6N9kV2M%6YOD;yO#0CZ)0|q85HinCrCoEHF;JLuScu47>1D~K6 z4?|i51Csy)<0-9!4Sd@<&$tzdCLCZC<6{s_c)-wcgF#ZCZhe6-!{9+vjumZsiXbLt;uRT;OIA=!L90sTV4DxOf3=E|W3@itjt9vg? xvNLpWab-=MsKC*%U`D5;Ekg&#Dow+Q0UQl8dRir2fU=$^f*TkZ=1I{R0030oV#WXf diff --git a/software/CPM/CPM13_MTPUG_01/GNB.SRC b/software/CPM/CPM13_MTPUG_01/GNB.SRC deleted file mode 100644 index 7764af6..0000000 --- a/software/CPM/CPM13_MTPUG_01/GNB.SRC +++ /dev/null @@ -1,58 +0,0 @@ -MODULE GETNEXT; - -(*$M GNB*) -(*$M **) - -(*$I FIBDEF.LIB*) - -VAR - @LFB: EXTERNAL ^FIB; - -EXTERNAL PROCEDURE @RNB; - -FUNCTION GNB(VAR F:FIB; SZ:INTEGER):CHAR; -BEGIN - @LFB := ADDR(F); - - WITH F DO - BEGIN - IF BUFIDX = BUFLEN THEN (* TIME TO GO READ MORE *) - BEGIN - @RNB; - BUFIDX := 0 - END; - - IF NOT FEOF THEN - BEGIN - GNB := FBUFFER[BUFIDX]; - BUFIDX := BUFIDX + 1 - END - ELSE - GNB := CHR($FF); - - END (* WITH *) -END; - -MODEND. - -%%%START PURGE -MODULE KILLFILE; - -(*$M PURGE*) -(*$M **) - -(*$I FIBDEF.LIB*) -VAR - RESULTIO: EXTERNAL INTEGER; - -EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; -EXTERNAL PROCEDURE @DFLT; - -PROCEDURE PURGE(VAR F:FIB; SZ:INTEGER); -BEGIN - @DFLT; - RESULTIO := @BDOS(19,WRD(ADDR(F.FCB))); - RESULTIO := 0 (* NO DATA FROM CP/M *) -END; - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/GNBCHK.COM b/software/CPM/CPM13_MTPUG_01/GNBCHK.COM deleted file mode 100644 index 7957317d76aa5b529fcf3026da77ed3fa706ad68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14848 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 diff --git a/software/CPM/CPM13_MTPUG_01/GNBCHK.ERL b/software/CPM/CPM13_MTPUG_01/GNBCHK.ERL deleted file mode 100644 index fb66444c8ecca11825dfeb652a1a03bf0e367a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmbtUZERCz6h80mZ7pSvTe`_6!`#*i?K%?XMlB1Hm#*!4XW6=bjp2gbGU~*2sbmv~ z{t+G(k_xnK;wyp7tTE1j9M{1!k_5el9ELox9Iv%HU z9q#SmVj(AU5~RbJGkd^w%>(!I`fReWkGyrf+^1Ixm&`OFQ=qa~lGK+X^ATDpHp&fd zAGp#Ufja=y++@At-2}U#Vcd@*E+`ytgUZvWsGky|Wa?`gv`wbL3J!)?icJ zDBU{uye_N^ooHoKrhOi)Qm%r|VT*)t=ahQ}_@y7UoA>7|%Yh%o(gzE^8Ru$d6b+ zzYXUnQ=_;fGeD$ zhZ9^Bi>ks}1!NflAJ=FU19F7;y8bphrjUf?iHg z^$jl(C;w6Kol89R6>nKvTB3d*M&0ug^?6j*o~BALEf>G%yQOpvzDSj|Yb5GvuV?~u z%k75V3B{5~6F$5d5t- z#^ky@tgmB&C%NQK-Qf$N9Bk4v!J7~#TexIR5w;q%!LLx9)OQ#YlO$$pm|zIS`JHmb zg*4aMVhtv^sP8*tGD>2L)fV)5cXY~obT)tD%##+qRc{Oa#qN;XIiK-|c|on+X13dc zeP|}UD7UZQ`r{y{ diff --git a/software/CPM/CPM13_MTPUG_01/GNBCHK.SRC b/software/CPM/CPM13_MTPUG_01/GNBCHK.SRC deleted file mode 100644 index 67c2ad5..0000000 --- a/software/CPM/CPM13_MTPUG_01/GNBCHK.SRC +++ /dev/null @@ -1,59 +0,0 @@ -PROGRAM GNBCHK; -TYPE - BUFFER= ARRAY[0..1023] OF BYTE; -VAR - FIN : FILE OF BUFFER; - FOUT : TEXT; - CH : CHAR; - I,J,N,SKIP,NREC:INTEGER; - STR:STRING; - HFLNEXT: INTEGER; - -BEGIN - WRITELN('ENTER FILENAME TO READ'); - READLN(STR); - WRITELN('ENTER NUMBER OF SECTORS TO SKIP'); - READLN(SKIP); - WRITELN('ENTER NUMBER OF SECTORS TO READ'); - READLN(NREC); - ASSIGN(FOUT,'LST:'); - REWRITE(FOUT); - ASSIGN(FIN,STR); - RESET(FIN); - - HFLNEXT:=IORESULT; - WRITELN(FOUT,'IORESULT FOR INPUT FILE= ',HFLNEXT); - HFLNEXT:=0; - J:=0; - N:=1; - WHILE (N<=NREC) DO - BEGIN - IF N>SKIP THEN WRITELN(FOUT,'SECTOR=',N); - FOR I:=1 TO 128 DO - BEGIN - CH:=GNB(FIN); - IF N>SKIP THEN WRITEHEX(FOUT,CH,1); - IF (I MOD 40=0 ) AND (N>SKIP) THEN WRITELN(FOUT); - IF ORD(CH)=10 THEN - BEGIN - J:=J+1; - IF N>SKIP THEN - BEGIN - WRITELN(FOUT,' NREC=',J); - WRITELN(FOUT,'EOF= ',EOF(FIN),' IORESULT= ', - IORESULT,' HFLNEXT= ',HFLNEXT) - END; - END; - END; - N:=N+1; - END; - - WRITELN(FOUT,'EOF= ',EOF(FIN),' IORESULT= ', - IORESULT,' HFLNEXT= ',HFLNEXT); - WRITELN(FOUT,'NORMAL END'); - CLOSE(FOUT,I) - -END. - - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/GRAPH.DOC b/software/CPM/CPM13_MTPUG_01/GRAPH.DOC deleted file mode 100644 index 7d3e051..0000000 --- a/software/CPM/CPM13_MTPUG_01/GRAPH.DOC +++ /dev/null @@ -1,17 +0,0 @@ - - The files - - GRAPH.PAS PLOT.MOD and F.PAS - - form a graphing procedure. GRAPH is the driving procedure for - the procedure PLOT, GRAPH chats with the user at the console - while plot does all the work. F supplies the function to be - plotted. - - The procedure PLOT uses escape-codes valid for an IMSAI VIO board, - hence is not likely to work on any other machine without change. - The form of the procedure is modular and I hope well commented, it - should be easilly modified for other machines. - - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/GRAPH.PAS b/software/CPM/CPM13_MTPUG_01/GRAPH.PAS deleted file mode 100644 index 2f08369..0000000 --- a/software/CPM/CPM13_MTPUG_01/GRAPH.PAS +++ /dev/null @@ -1,195 +0,0 @@ -{ Copyright by T. W. Lougheed 27 April 1981 } - -{ This program plots a set of points given by the function Y = F(X). } - -{ This is a plotting program that uses the graphic symbols of -the VDP 80's VIO board. It puts the VIO board in the extended -character set mode, plots all the points given, then returns -to the original mode. All the magic with the screen takes place -in the external module PLOT. All values of the points to be plotted -are generated by the external function F. } - -{ First version 20 August 1980 - - By T. W. Lougheed - Dept. T. & A. Mechanics - Thurston Hall, Cornell U. - Ithaca, NY 14853 - - Last version 17 January 1981 } - -{ This program is in the public domain and may not be sold by any person -or corperation without express permission of the author. } - - -PROGRAM GRAPH14; - -CONST VERSION = 14; - ROWS = 23; { Number of rows used for graphics on the screen. } - { Number of columns is assumed 80 see PLOT to change. } - -TYPE POINT = RECORD X, Y :REAL END; - -VAR C : CHAR; - CENTER : POINT; - DATA : ARRAY[ 1..100 ] OF POINT; - DX, { Increment to make along X axis. } - START, STOP, { First and last X values. } - TOP, BOTTOM : REAL; { Largest & smallest Y values. } - K, L : INTEGER; { Dummy indicies. } - - -{ This is the function to be plotted. } - -EXTERNAL FUNCTION F( X :REAL) :REAL; - - -{ This procedure plots an X,Y graph of the DATA points given on -the screen. It handles the video itself, without outside help. } - -EXTERNAL PROCEDURE PLOT ( - L : INTEGER; { Number of points to plot. } - VAR DATA : ARRAY[ M..N :INTEGER ] OF POINT; - ORIGIN : POINT; { Center of the axes -- if out-of-bounds it is set to - lie at the upper corner of the screen. } - X_MIN, - X_MAX, { Bounds for X & Y values. If MIN <= MAX then .. } - Y_MIN, { .. scaling is done automaticly for that axis. } - Y_MAX : REAL - ); - - - -{ This procedure clears the video screen. } - -PROCEDURE CLEAR; - { Writing controll-Z erases the screen. } - BEGIN WRITE( CHR($1A) ) END; - - - -{ The following procedure positions the cursor on the -screen to the row & column indicated, using escape codes -appropriate to an IMSAI VIO board. } - -PROCEDURE CURSOR( ROW, COLUMN :INTEGER); - CONST OFFSET = $1F; { The VIO offsets all co-ordinates. } - ESC = $1B; { ASCII character code. } - VAR A, B : CHAR; - BEGIN - A := CHR( $1F + ROW ); - B := CHR( $1F + COLUMN ); - WRITE( CHR(ESC), '=', A, B ); - END; - - - -{ Prints the plotters sign-on message. } - -PROCEDURE SIGN_ON; - BEGIN - CLEAR; { Erase screen. } - WRITELN; - WRITELN( ' F U N C T I O N P L O T T E R (version ', - VERSION, ') ' ); - WRITELN; - WRITELN; - WRITELN( - ' This program plots the value of the function "F" provided when the' ); - WRITELN( - 'program was linked. Note that the abscissa (X-axis) runs down the' ); - WRITELN( - 'screen and the ordinate (Y-axis) runs across: they are rotated ninety' ); - WRITELN( 'degrees from the customary directions for plotting functions.' ); - WRITELN; - WRITELN( - ' The program will now ask you for initial and final values of X and' ); - WRITELN( - 'extreem values for Y in order to determine the scales for the two axes.' - ); - WRITELN( - 'After the plot is made you may start over, so if the plot does not' ); - WRITELN( 'satisfy you, you may try again using different paramiters.' ); - WRITELN; WRITELN; - END; - - - -{ This procedure querries the user for paramiters. } - -PROCEDURE PARAMITERS; - BEGIN - - REPEAT - WRITELN; - WRITE( 'Where is the plot to start on the abscissa ? ', - '(X axis) ' ); READ( START ); - WRITE( ' ... and where is it to stop ? ' ); READ( STOP ); - IF START = STOP THEN WRITELN( 'HOLD IT ! They''re the same. ' ); - UNTIL START <> STOP; - - WRITELN; - WRITE( 'Do you want automatic scaling ? (Y/N) ' ); READ( C ); WRITELN; - IF C IN [ 'n', 'N' ] - THEN REPEAT - WRITE( 'What is the lower limit for plotted values ', - 'along the ordinate ? (Y-Axis) ' ); READ( BOTTOM ); - WRITE( ' ... and the upper limit ? ' ); READ( TOP ); - IF BOTTOM = TOP THEN WRITELN( 'Wait a minute: They''re the same !' ); - UNTIL BOTTOM <> TOP - ELSE BEGIN BOTTOM := 0; TOP := 0 END; { Forces auto-scaling. } - - END; - - - -BEGIN { GRAPHICS. } - -{ Introduce the program: } SIGN_ON; - -REPEAT - - PARAMITERS; { Find out where to start and stop, &c. } - - { Figure what the points ought to be. } - WRITELN; WRITE( 'Calculating points ' ); - L := 3*ROWS; - DX := (STOP - START)/(L - 1); - FOR K := 1 TO L DO WITH DATA[K] DO - BEGIN - WRITE('.'); IF K MOD 5 = 0 THEN WRITE( ' ' ); { Talley of points. } - IF K MOD 50 = 0 THEN BEGIN WRITELN; WRITE( ' ':18 ) END; - X := K*DX + START; Y := F(X); { This is the only appearance of "F" } - END; - WRITELN( ' Done. ' ); - - - WRITELN; - WRITE( 'Hit any key when you''re ready to see the plot.' ); - READ( C ); { Dummy input. } - - - { Call plotting routine. } - - { CENTER is the location of the origin - -- if impropper it will default to the upper corner. } - - CENTER.X := 0.0; CENTER.Y := 0.0; - { For the meaning of the paramiters, consult comments on PLOT. } - PLOT( L, DATA, CENTER, START, STOP, BOTTOM, TOP ); - - WRITELN; - REPEAT - WRITE( 'Another plot ? (Y/N) ' ); READ( C ); WRITELN; - UNTIL C IN [ 'y', 'Y', 'n', 'N' ]; - - UNTIL C IN [ 'n', 'N' ]; - - -WRITELN; -WRITELN( 'Normal end of program.' ); - -END -. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/LIST.COM b/software/CPM/CPM13_MTPUG_01/LIST.COM deleted file mode 100644 index 441ab7bc9755f09bedf522a6a13ee4b0137c4306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcma)5&u`mQ9Dnum3oO(DZ>XY?sJ=n~Ig7uDBwV+;s zRb##G!`nAmC@)lMb&IGgM7hn>67j$u5ir(_RbDbwXos9zteILD{ zX_(8Gq@Wap_DMk+&Opt0w_(rsZnWI z?Hagm3s%Y-uwVcdu$Uyy1jC+eDYuwA&33ASy34j(22U{_pU6#)gQgc@LZ8vb;&Bef zi!ogr=c4+6?O$qrbqHI4F`PmnmzgQ%bS(kXdZF+pXO9T#@0@Z)aMp!LiO73G;AuC( zA_kG~3IU2Dx|f23gK6M{%xSL!&q0ORgOkLs6eP|c!sgNbW0L(yXh!CVEYeW7`$%x& z^xyRpfW!5l4v@3u4d-(j8=wzkC+USx&R^dBkm7noPoiOfzW?caU+k>W*h{qcVJPe} z-~03U-L|V#zC@7Ii%=&+QHl<5lMm~7;5>A5;k$JBMi?Re2ySjE&r#(#MmdWNG=!eT zoY7~>{+Wi3$TpW9LZqOk^X9#g)BM7ZN0!Lu{zb39wJvy5c8?h6nr`cDA&Y`PsO+dV zQ1n{{qu{SUZ(F01?}}+avwDl|KV|w(eVCnK&4U6)GkT#o&Ud^s&)9I_uVyHWD$Zt0 zd7CKbiT`ta#Q4hXu|PNOt2$4V`z$2O^Bm@U%Odv~%Klx)8rgedI@$)NUcGT-I$r!3QA8T_RP5c^nw}tvTT!-24|39oB<~>2x2Zmjyb5HYbNYP zWv}jO7d(1Xytpf94yKz7)<_8x84(XLF`2k=4soJw&_lPc%mhS)7518<`g^aczVE$y zRo$IH=$B*^AIM|x9gY9*R;y0N$dJ^~L}ga+sLW&D0w5OJf|jYXxRmzJM+#&3fr zhj9ZQp=7wJ8VkaQKuCGlu!WJ{j*LZRJDPSE*hwd3_9o3inq6nkOLn)sg;aMVXOlMa zQ}OD^==R~{B3pIp)*>@T@49brF^E53!TLgIcs1;qIh-zbI`H$yZE&@F9kbDVw%>7QJZCvyt6M{z;(M7An#pkn%vPHA!oXqP@VJc_u>wiJjV-v(R+Jq+hGvw&z$Rt#95V?@;|;s_+Z~ z>}XMd0V=Z%xQ=x3kCD;8hM#+o>mO=d4ASmndck`_BWVB_y{5i1$97K5(}o9Saud*p z^O<9642O`|{DZuPGbMr52$ov6zdqWbT&u4~AE5M%Zuh+kR|LgDn`uG3+ z|G#KUZ^6uD51X0Z!cns~*PlJ!m+d)`&6s;ncINgS41v(smp#(cXBPT<`UeW;VE%Z< Z%;pZ~2NXG*3A@aJ+&}>oJVgK5J^_NR?Ck&m diff --git a/software/CPM/CPM13_MTPUG_01/LN.ERL b/software/CPM/CPM13_MTPUG_01/LN.ERL deleted file mode 100644 index 3ef02734d2463d81f4fa5fcf3d9399440b629319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmZvZT}V@L7{;H!=cBV6v{GUxEGHTngh-2%LFjQBttPp2iQ3I7Ijq&OAsJGFe{}$A z+ri$GFoU_+x5HQ4{G+U8{jZUYCKPxy#ImS*RK zJ?%ltCYUQjjxOYTlpkM0Z#P$rjFvR0C1C9`c+~~oo8h;2L-}Asn4E6g*gqUb1Q*&v zwHanfo9{d>zHV($Pa1xI2O~YFOlbhYER<`8ug`=7)n&ybRREedG`kn$kzTClc7i{Z z;e9|lO3AK?n&k>*)(w6Kluuz^eF#(j7B#nUAE3;6*Vl8Uy!sNRipDbum$U$Ts~gNF z17(b~MA;juxS!}3sra-5q|d;4qF!78}jC74g&lU?#{OuYRViC1sK6fg}Hzcf_23$q) zA;|G2z_}og-NDLv0AsNYp&gg9X8(@be zHvT?DKKB5-7b0KKY$(2zlIWF^&Lk+1W&%KjhGrx-34#PzVG*t(SaBjSFb`4rF3E05 zUH(GlJSqt6_(l`^EwJ%h5D60}8-mEOP!heKBtrU=2DXK!i{Ftwi$jd~JrD!ep`LfgNJ_BtK;;%UPje-i${@nB zj+JI4$8`?Z07oEgy>bzmY0cC2uf7ihwL7iF)GqL6y=Fd09B*+pZ6}fVQ_1FS-)Jp1 zw>;I`KGbN@c0qo-inQIj#8c!;fyUs(4V=HGWTo2`JOF|+JYB4>V}vLp{s;r!Ajd2R z!JFV7C@ixir;+1?JUWzwV+@?)XyMs#+%`FJyxdNk&YAq`pu~ush{>gc+*l`6OB_=~ z2Uq2$jMAoE?0J>654~c2+;Gm0kC@rZI{VB8^MV+pm01C9(^D}cv$f46UrRWfEOe7l zNJ?2t>$$lB`*e>sc~z@ z-l8xKxZBEy2|tu)({@QD%S)3a0f~Au&Q8He7u=re&Tf-`u%zGh*XnjO;B`8tiXK#1 z{wQ(m*veLfVMf>8cU!g9M9=a<0l<tx$m!3uO4mnSAa^iKRB^!#?1rHKoyFWv`gZ4a4+kcP3!-#*^(M1Qd9)#`Z9wc#g zjYZo{eTI-$fJ~B6W#kB{&D?iie#BSKtx(d;He-?x*? zJ$w_RS|=OIJ|=l281CUMX4R%1FY73E5PB{1`DQg`RbTU=Q+cFYJ;}$Y)T-g%wJ3cI z)br(Lb-HcR-Ug0vS9c#DgKFRWSPLl(9_92f3Vr|p diff --git a/software/CPM/CPM13_MTPUG_01/MATHLIB.SRC b/software/CPM/CPM13_MTPUG_01/MATHLIB.SRC deleted file mode 100644 index 3063f16..0000000 --- a/software/CPM/CPM13_MTPUG_01/MATHLIB.SRC +++ /dev/null @@ -1,118 +0,0 @@ -{MATH FUNCTION LIBRARY FOR PASCAL; (C) 1981 BY FICOMP, INC. FAIRFAX, VA.} - -MODULE MATHLIB; - -CONST DRCON = 1.74533E-02; - HALFPI = 1.5708; - LOGCON = 2.30259; - -{TRIG FUNCTIONS} - -FUNCTION RAD(X:REAL): REAL; -{CONVERTS DEGREES TO RADIANS} -BEGIN - RAD := X*DRCON; -END; - -FUNCTION DEG(X:REAL): REAL; -{CONVERTS RADIANS TO DEGREES} -BEGIN - DEG := X/DRCON; -END; - -FUNCTION TAN(X:REAL): REAL; -{TANGENT FUNCTION} -BEGIN - TAN := SIN(X)/COS(X); -END; - -FUNCTION COT(X:REAL): REAL; -{COTANGENT FUNCTION} -BEGIN - COT := COS(X)/SIN(X); -END; - -FUNCTION ASIN(X:REAL): REAL; -{ARCSIN FUNCTION} -BEGIN - ASIN := ARCTAN(X/SQRT(-X*X+1.0)); -END; - -FUNCTION ACOS(X:REAL): REAL; -{ARCOSINE FUNCTION} -BEGIN - ACOS := -ARCTAN(X/SQRT(-X*X+1.0))+HALFPI; -END; - -FUNCTION ACOT(X:REAL): REAL; -{ARCOTANGENT FUNCTION} -BEGIN - ACOT := ARCTAN(X)+HALFPI; -END; - -{COMMON LOG FUNCTIONS} - -FUNCTION LOG10(X:REAL): REAL; -{LOG (BASE 10) FUNCTION} -BEGIN - IF X<=0 THEN - LOG10 := 0.0 - ELSE - LOG10 := LN(X)/LOGCON; -END; - -FUNCTION ALOG10(X:REAL): REAL; -{ANTILOG (BASE 10) FUNCTION} -BEGIN - ALOG10 := EXP(X*LOGCON); -END; - -{POWER FUNCTIONS} - -FUNCTION POWER(X:REAL;N:INTEGER): REAL; -{COMPUTES REAL X RAISED TO INTEGER POWER N RECURSIVELY} -BEGIN - IF X=0.0 THEN - POWER := 0.0 - ELSE - IF N=0 THEN - POWER := 1.0 - ELSE - IF N<0 THEN - POWER := POWER(X,N+1)/X - ELSE - POWER := POWER(X,N-1)*X; -END; - -FUNCTION ROOT(X:REAL;N:INTEGER): REAL; -{COMPUTES INTEGER ROOT N OF REAL X} -BEGIN - IF (X=0.0) OR (N=0) THEN - ROOT := 0.0 - ELSE - IF (NOT ODD(N)) AND (X<0) THEN - ROOT := 0.0 - ELSE - IF N=1 THEN - ROOT := X - ELSE - IF X>0 THEN - ROOT := EXP(LN(X)/N) - ELSE - ROOT := -EXP(LN(ABS(X))/N); -END; - -FUNCTION RPOWER(X,N:REAL): REAL; -{COMPUTES REAL X RAISED TO REAL POWER N} -BEGIN - IF (X<=0.0) OR (N=0.0) THEN - RPOWER := 0.0 - ELSE - RPOWER := EXP(LN(X)*N); -END; - -MODEND. - REAL POWER N} -BEGIN - IF (X<=0.0) OR (N=0.0) THEN - RPOWER := 0. \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/MATHTEST.COM b/software/CPM/CPM13_MTPUG_01/MATHTEST.COM deleted file mode 100644 index f3d867d8b69054b63d87a448e6b99177dc981e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16640 zcmeHudwf*Yz3-2Vs)T>^<_xo&e(z0y9HqCW1z1UXf>q;8oihNeZ-A&=@z$i1n4%lbx3{L;us+!CJPaD zI77{@)ZrgaNSR-=^h)^VYrwyekXp6m)_4Z3lDhdC2%iCAe$A3N4m+=nU`Zr|c#$5w zHo_f=*L|g?`UZO(i|<@Rpa&DjR9y}Jp=-dONR)1^-?(*4tP{#Cb?{3qys@!i+xo_9 zxMY5EME%&teW2SLu7mv(laei48Z;-#1c&~TO0^_u3?pb6tqX(L6DJ>a#!vsX8sJ6?XTi|`W9uKPCKlipjq8Fv9N76Q)scHcJ-Fo2VuPe%=0 z{_Z1h(m=wmHoP`60H(l;y>gyEPGf?bd%u@Lz&}n?xt3_)@p*PdoAFHF&mP$|H=tSc zb1EQBR_R_xy8pWTdDgTyAL}LKS%87dCNoHO)s=+X$SxMd44z340 z5d*55(4PjENxvNt1z>M5so6FCpGMjsDgQPt0^(ydyBM&Xus==n3j?%TIa$FVL0T?l z!ZX@Ai4+Xnsy}CJ*wrvpuO50@D5QTtp(lOBWYzmlGsIpR;gXSsW?V-W06upOMky>m zPE%%I$Ab4`hQv_QPo>EprCB*u;RB5tq(ZNuD)i(doEzHQz5J11Po=4(-|XvLA0w{K zy|0iAMic{vNAdAA^hg87e9E9}E@!kf=XRvG82H z$cV6Bo!Oi&7t@sF7%-NAFxf?*?~LhZ=v?D?^jI#! zu}ix(cQUq|xgKbLCLwb!?fZ;HC!Uz&bJ~st4|8h@Mqm3gcjv_SLAGbKJ`m?YqX}c~ z&D9OS{T;&{Rw6U7t6|{evAm`UXv7$p)LuoQ!u<{t52Y#JVfX-q@XQW$r?};n;r3(< z0FIcjYi@uN`pf#GGM+b989z?EJ0l|6u~KnDn-Z63!|kL~ea$6K*IVi#r|5F7u-+NX zo+}jQ3oAlwS+mVE*t=n@KH?V&qez*;h-eX_;mz^gz>2mx_GIY&^BAEhih9JgCj;d@ zLV~C}oa#4SVf6O2J!S4aqfrm(Smi`TJIuWa<5(g;kfDqj zCnh4fAINY$Kn(i^P-er@BN=e9c(|14inlr<>TjUdp>g7)kfwZ`ATEX#EM9e!H{9mv z%W(B^SuN-#zy~?t0XKvHsaqRY&$!in?l@d!{y6y&7@H_(=Y!m*8OpK@HES%I(F|9V zQ>N-fmi2RBy;#}A@c?GHK|`vm8{tYR_onM|V@b-WSEPd!^CU4KO=eM#=0P?TwZVdR0Dc-V1|i#I`plTL94yCL%EA3_f4r3u*+wnaixB%>#6jf7O6 zQ#zX=M>4GFk@YMQRu$qh$MK=%7*kCgEF3{snI+LNVw?>xaGc$5;T)mDhH_I$b z8=EbwYggCRyR=om%Ndc+WWW~IM&)Z6%8B%NCkB*5Rawe2nTjo2 z`C+cMuJ}ftR@KnpD+4r8me`d~L^OreW{T%7OB?d!4S5kZX@2OTraCTP1HNbqvou|o ziGC{}l{uNpkxanqSQFsVYhfKRuj*u=3kkFaTRJns|70zq5epscs&DZQDrYzs^E5PKtjjf9uJ zMK|@9JZ3^dp~?TpS;ixvn(~y7vxqRjxkH+mLz?o$6eNMpi{vORk~ij2DMpQKomp#T z?tpN7($&$RGow$1Bw;)ZDDB8oGMVfEIiC^6v%CY!a#}rwR;iV7j1iMUz&&1Wg@s%5 z$1_0hI}|L`{Lz7n{lrYtYd< zb@E_m1#fvjxX#Pb9na-7l%N=C$zd??D1pMG@vc!GkB5l&c^m<(M!3q9x;=3@s*Ny{ zU>uKQkeP<~e7y&2kuW1N#k-sZ@G-rn92p7O%oi(tx$^Tdk8kIS=>i89UdR(^=$GLA*9>J5OBE16;b|HgqhFoplFLgElx0V4{j?uzkL%w3o zS3W9K#ug|y6(|oEC|MJgPbVfnDG1jc7lg4xf{=OCCuA#&h1@@1FHAiAgLcy!zqXW| z`_?q+P~xS@|1`gI+9xNUDSLF+nVGNkTO55We^#;26mY(D?AP-?822q+KyNV7^qrMY z^OfW@Ay@U+-1J!{`34h@Z*oRwzU(wb&}AzvrHtnjIG~h2BgT$+g^Myfm~q?jy}y_fZ#nd%}dEKhb;CDGy&6?I=KMwK>+Blu~j%3+A&f2aAGXT!zSn=J!%k+mF}I1@}ux(4pV)w zcQ-?%4=>a`GHHF!q#T^cY8puj9lyuqd01mUS`~o}vXvKK+&pXoHEWCn$|B+;JWNE= zcQR7!nj47aallZGDlDm%QK-CIsM`mi(vJ)fs*|*6nrnv7YFQ&@lzQ8Eqml^?(_pD5?s$B{t4p% z)0gftgcS&LC z9{g6|w@T`c4)k=%_ec@>E-8YCIm)i0jtgp$C3vuC$GP@x%0WEJDHa?!MSBXPtLnOXlZ%tm7A$P)Z?FC0-r|mi7lRXv z0Z~@f{PHWorNzzt?S4n`^z8*JTMCvn7t|=0;=%9q?|ij-@ICO@Xx(IOv~E@}n4xM@ zCkPByD|3qn@!MftWWCe6B2}Q?!1kHHO<377^DSXnGcGkvxKsz4%+<~2nili2?dFvM zDAcYFmkhTD^Ghydj;V63mdqDY{7)2DxmK~(GsPLMm1t%7JBs@gf|E)-mmSL`@owqP z7ltO4SYf2QR@HTY8YlbW%fZiz2YcTtPHWk-61NTjD{mDqTq-V?UiT-K%mGsXLx92E z{X45&E2Oet_P4*dt!#5yW7#IsD6?QN!(UV~*s*e14RlqqN?fq2tAt>23-s@->Gw4s z|4Tc`zMsn;F1aACmhQAIvfT_Px2|t+-7T%`JRd26>BW+!1E=?t_#Y@~KFIGahj4E> zw5<7PP16(A9o`Ea5USN&+h%Tf^%ehy5}08S?G*n{N~#9YpW=VMWDp=3{ufJ96FP?i zC8P*F z&);Ki`b&FtGu&LW9nR&xe&wa$HggK1hKEn*`PJr)B$9Pgpjv4#r%vopZlVD1P`+oL zv*SW_zt4Zt+|<7_c+z}o;>>wNADDw5n5%gpbr_)nE0_l_^tT63nB&4~@I9Mtv#l{e z9{q>e`cn}Wh z{e?wLcnttz@_B%QYL8wyq5}}*_>O8wQ3ShAyxI>3f>F-9Dyr*`}RF(N<@K2BQc zVsM94#64ypY5C%=aI|lebt9s(F_476RdpmW6B{D*g!@7fh=e~}{$po(N|BfF25aSLS7Zyzg627DEk@%A)Jp(t!@y);(=j+THnXv4t z340F{c7-l18Y9BW_ZV_vefNsF_a{s?-HvxmRc@XF7<{cDQwu9bjDAY{$o{*lBJin> zls(6kVNBB*xi~ts(`#h`2bkNENgzP5{dsQv7$o`*c?AfIGms{_>}oi515+jg3_4fhw{6vQye#C2g(p zBsz|kigvs7qf#6}OW2(Nv~f)@`ATRH{6A`p{}2E7EkN_;e=lWQNqcSh zg0s&?Uz+yW=nK(Ib8nzj*<+LU;*%ym{IjnaAC->mXwraUvFROSo#tgiB{w4`r7rD2AuT60lGB} zTkF?tj%5TzV+4FxF1UF^!|E->aB%}p0~%~&adgddZBxEl-?)BlLv4Ls%ldVe^^J`U zjh1O^u+3Y?&KBY@pzo$T?ieMfYIP?FDZ)T$u6(oHBzMTK$$hd;ag9xyw|V30wd*}} zkZ^57JtWz>zRa>>K0U8q)6lrZs~;5I5BF#XMH4Dr`^k3^F$w;nLcPa^^K@F~k+Tom z$k}a<-;<-`cl0B!-xIcRpyG;6_M6HXDI#>nro3CGOqnh&wg0^n9pd#6hMn?=IomP% zD8++zU6$CR8V}l;F5nP%RO7L-fAAE*gLY-6h7--^M>T$4hNVWEqsgwkUFOm_k)UL? z<7Fsx+88^=(PVcukuZG6xXrQOPIFZkNblwvctF(`#*<(>zciR=w7|9aa zo@!`4R*PPFw_V$SevGKap9)z#Lw*dV73h46wUNpCM>{_m(rQV!H?cP#PJx$7e_9J8n$64 zh96pxnAkd)_FhQpKkDI7cijPw`k-2a$>vguch^LP4zK$_jC;vUgPu9&EM?Se@zyWp>HW?hQ7BvEPbP#W=S&bH_Dl5)ekF-<;ccz zy+T)#8{V#9M+~qbqj&47CNotrS4UITX)81dfd~}(Vquvo!>8XM+wB?bS>Vfvk4;X?j2;I3R*peYxH8SX9!fIny z>V6v*dAmY+!Z2$b^_T#su>7b(*)@k(`Uy@Rme46GnVquPd4>5F&VkMmW+RO1Hqwm| z5%XXr42-gpMn^ZehBrbTDn(oqoJe>QpEG4tVzde{w)zTE3k#MX1rUdl{>uE&ORImb z7Dp03Oe3mf(V0CeqKchHL|L73vC}FQJ7ufWCRv?`sNc+$3!E%I9EDC-A<4<}h=SfS zR~hdlf_hRS{8=_^m`g938aRt1lYy+~WF3QHTi%plCa3b+T+(GURxEWrBF zm@%{y+j><#|qhk`aWkv;h{z_j-0(*U?kH zt8hoS`t@yrgv8`A<1M~+PDunc^9VIFrv?U5S>)}u|9Sc|XK<~HIGEg4ZD{+UmZSbf ztP^aB7OAjcp{80CV34cB)!nAc6E3`YlrT>QJ6zawV_Jqtc65iVvS1Q=MCv0cU0Q#miM}G z3favLi=E!aA9uql-*=yL+-u- z@vm-aXkLe7$nE%+7tS1>*E6Xz_^#U_RMxnL+z*`oU+z?4f;=>jZ%v`A+9g!B1D<^N zS9c+><>7e)p39Hc;FI6CyvpnDo~~xcf6T+v7xTm~fT;Y`t@HeU{2rFFD)EZj72YIg zRl*UO8QrQ>l{uEKNZziho{0KVWlMkid0%CyWV-rzWzY7R*xy|?p`~-EsWMgQP8dH` zwfnl%y_M1Kgin%2+Utao_E@8xngGav_}xnWxeovP@>y?SmSaxE+=$2i%F1DT@P*3M zgm9!gM28(Cs;NqOuCgl}XzC0fS01ly8oqoy)Y5tWWaV(X|3u~XPF$K!rB*8+Ri;2H z$Tp!nfpbe~dBuOSvZ-@uxH33gSz?Kyc&V~01sFX6Dr{*UWtN96;1;4(*LY~9T;o|N zFZ4v!6ro{?Al>efZ}&*^J@R}H;uEU~k=7hk*q3-v*5d!dJFJn;;1rKs!lUf+ zJk4)0V^md6voV9t38J&hLxonO6YfzSWqi>11#z1qwDl)6^l3L_P5_12g<6??`En>U zfQQ4S)P)b=qrQfBAb(Kfz2UB&P*ke-Mwc&c=?t#$h9>=Uu-bdN+RHMmZ62%?acuNb z0k8MEHhL?!$s4=_;fe(7W_+jL=vD6Uax00=-iUm-bf7ETjWYElh#$l6X)pd8i>)3+ zUl^dT7afi_ea$cW&w7<9zNVQtqEM6M$*%Mdd!x$rzS7eZebLfrZFc9f%?nq3D~w0FisiU*&r-__*&}J1$Mn4XyUQJXGV0 zs{iiAL6?RW{0{^)wIm62pa=D2<&~c!_BOIv( zUdJJ{j@AYkJ2(d_1YrCKQYj2S@m3#B5rsp5jv6gY$r$WY-t*Bd+VoQJjE_z-(2mHz z`=UgnFREN%qZmx9O0z}NY;^2_ATDbVFyLf&3J0!|FY)>FfART$11s$yq5uE@ diff --git a/software/CPM/CPM13_MTPUG_01/MATHTEST.ERL b/software/CPM/CPM13_MTPUG_01/MATHTEST.ERL deleted file mode 100644 index b5dc108ca07580ab87bc061e5f56dfecd449a1bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmchVQA}H96vxlKy=`ypZF8~3tPb?z7=rSE0(WIkU!lx4X=qp432_f#T7vnRzqj+9 zob&&kbN+8#@%ZmAFY~Qa$kaA%-2}SBdy1K%y%A+Wd?X-l*<8i27v7sRKu+RE!~OZr8t;ZotC{|NrvG* zpK$7(^P13J2wcf&f<#lnf0fxlTN`CzU2B zhk%NZb`z!U_sWhaD)AC#k8BdP9&DMt1DvhyL+97us>FF{?2D^wp=$!{)Jx~xdp_`!M9nakw*+SXWHLeha>=$w1SSSvkvO+5hEp`DBkynu= z)emj2DWu0`$c};VtnMyoN}=TAiY1jVfyO~4{*Kvuph1sbd>hAtSbth>hwh|YmSuQbjVXP-3=_~#d+Jv%(Am!f z;Vvj6U~&V7+#orjmY+fPW<{OJPT~5(2>nR4{Jyp`j@J$~$c*OtWMb}6i=NS(dMTHA z{>igZt?JlnW}uR_%yMeE7u&5o+0z6jw-}=WSEniCpC<~vOF<8!3~_2;=0(DG1JCs3 z^kRgf7;W2NM1CE0rx4>mK{mXiVM@*!WcmI*A1#ho0YUyG?pooP>?J57KlT+E4-}8i zK*f1pAWr)d>I-}6;{Sfb&qU(rkX}3)X$)eMI7QLMeYcP0(9uTLlC0Os4m_F|W=oz3 z>*NkRn!L(tgrZ@_baEGrCZ%Fh-Bs)h@VDJe>tr{IHuJhnb`o3#%sl*`yV35di{=IE z&ZQfjLmMbNrMOmZF;xmCXx|aEzPw4i39)`4o(L21&7vA39wc2aUUL;rFxk%qSK%jy z;VTV4XhJ{IfmKu!TBV@}G@)PU!1qc`s9eRwjGEgQhu4bS3Cyk!`VRd?euRvXHk90ON$3(wzEap^Rn_Zg4&35y~VuRW1 zcKf7ZYJE4e9ro8Q43>M`Pq%xe5lGm5gPA)9m;0$F8l)xM)U@qb>SAo21micbo13<+ q3qj7-MyluWnt5*PWfQy1Kj8NJJbs_F9`OyYtNl&|;M{}%$NK}z9G-vx diff --git a/software/CPM/CPM13_MTPUG_01/MATHTEST.SRC b/software/CPM/CPM13_MTPUG_01/MATHTEST.SRC deleted file mode 100644 index 3808b32..0000000 --- a/software/CPM/CPM13_MTPUG_01/MATHTEST.SRC +++ /dev/null @@ -1,59 +0,0 @@ -PROGRAM MATHTEST; -{To test MATHLIB library} - -VAR - X,NR:REAL; - NI:INTEGER; - -EXTERNAL FUNCTION RAD(X:REAL):REAL; -EXTERNAL FUNCTION DEG(X:REAL):REAL; -EXTERNAL FUNCTION TAN(X:REAL):REAL; -EXTERNAL FUNCTION COT(X:REAL):REAL; -EXTERNAL FUNCTION ASIN(X:REAL):REAL; -EXTERNAL FUNCTION ACOS(X:REAL):REAL; -EXTERNAL FUNCTION ACOT(X:REAL):REAL; -EXTERNAL FUNCTION LOG10(X:REAL):REAL; -EXTERNAL FUNCTION ALOG10(X:REAL):REAL; -EXTERNAL FUNCTION POWER(X:REAL;N:INTEGER):REAL; -EXTERNAL FUNCTION ROOT(X:REAL;N:INTEGER):REAL; -EXTERNAL FUNCTION RPOWER(X,N:REAL):REAL; - -BEGIN - WRITE('Enter real number : '); - READ(X); - - WRITELN('TAN= ',TAN(RAD(X)):8:4); - - WRITELN('COT= ',COT(RAD(X)):8:4); - - WRITELN('ASIN= ',DEG(ASIN(X)):8:4); - - WRITELN('ACOS= ',DEG(ACOS(X)):8:4); - - WRITELN('ACOT= ',DEG(ACOT(X)):8:4); - - WRITELN('LOG10= ',LOG10(X):8:4); - - WRITELN('ALOG10= ',ALOG10(X):8:4); - - WRITE('Input real number, integer power: '); - - READ(X,NI); - - WRITELN(X,' to ',NI,'power = ',POWER(X,NI):8:4); - - WRITELN(NI, 'root of ',X,' = ',ROOT(X,NI):8:4); - - WRITE('Input real number, real power: '); - - READ(X,NR); - - WRITELN(X,' to ',NR,' power = ',RPOWER(X,NR):8:4); - -END. - - WRITE('Input real number, real power: '); - - READ(X,NR); - - WR \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/MODEM.LIB b/software/CPM/CPM13_MTPUG_01/MODEM.LIB deleted file mode 100644 index 78ede9a..0000000 --- a/software/CPM/CPM13_MTPUG_01/MODEM.LIB +++ /dev/null @@ -1,667 +0,0 @@ -;MACROS LIBRARY FOR CP/M ROUTINE SIMULATION 10/15/80 - -;CONTAINS: -; 1) INBUF - DUPLICATES READ BUFFER ROUTINE -; SAME AS CP/M FUNCTION 10, BUT DOES -; NOT USE CTRL-C (REASON FOR ROUTINE). -; DOES ALLOW CONTROLS U, R, E, AND H (BACKSPACE). -; OUTPUTS BELL IF INPUT GREATER THAN BUFFER -; 2) CMDLINE - PARSES A CP/M BUFFER INTO FORMAT SAME AS -; CP/M COMMAND LINE. -; 3) INLNCOMP - COMPARES STRINGS FOLLOWING CALL TO 'ILCOMP' -; TO STRING ADDRESSED BY DE REGS. -; 4) MULTNAME - MULTI-FILE FILE ACCESS ROUTINE FROM -; CP/M USERS GROUP. -; 5) DIRLIST - LISTS DIRECTORY - -INBUF MACRO ;NO PARAMETERS USED. - - LOCAL START,INBUFO,INBUFA,DELETE,NODEL,ALERT - LOCAL INBUFLT,CLEAR,CLEARL,INBUFR,RETYPE,BKSPC,PCRLF - LOCAL CONIN,CONOUT,CONIN1,CONOUT1,NOUCASE,CTLRLP - LOCAL CONSTAT,CONST1,CONINLP - - PUSH PSW - PUSH H - PUSH B - PUSH D ;DE REGISTERS MUST BE PUSHED LAST -START CALL CLEAR ;CLEAR THE BUFFER AREA - POP D ;GET ADDRESS OF BUFFER ON RETRIES - PUSH D ;RESTORE STACK - XRA A - INX D ;ADDRESS COUNT FIELD - STAX D ;INITIALIZE WITH A ZERO IN COUNT BYTE - INX D - XCHG ;ADDRESS FIRST BUFFER BYTE WITH HL -INBUFA CALL CONIN - CPI 0DH ;IS IT A RETURN? - JZ INBUFR ;IF SO, THEN RETURN - CPI 7FH ;IS IT A DELETE? - JZ DELETE - CPI 8 ;CTRL-H WILL BACKSPACE.. - JZ DELETE ;..OVER DELETED CHAR. - CPI 'U'-40H ;IS IT A CTRL-U - JZ INBUFO ;OUTPUT # CR LF AND START OVER - CPI 'R'-40H ;CTRL-R RETYPES LINE - JZ RETYPE - CPI 'E'-40H - JZ PCRLF - CPI 20H ;NO CONTROL CHARACTERS OTHER.. - JC INBUFA ;..THAN ABOVE ALLOWED. - MOV B,A ;SAVE INPUTTED CHARACTER - XCHG ;SAVE HL IN DE - POP H ;GET ADDRESS OF BUFFER IN HL - PUSH H ;RESTORE STACK - INX H ;ADDRESS COUNT BYTE - INR M ;INCREASE COUNT BYTE - DCX H ;ADDRESS MAXIMUM - MOV A,M ;PUT MAXIMUM IN A - INX H ;ADDRESS COUNT - CMP M ;COMPARE COUNT TO MAXIMUM - JC ALERT ;IF MAXIMUM, RING BELL AND WAIT FOR CR - XCHG ;RESTORE BUFFER POINTER TO HL - MOV M,B ;PUT INPUTTED CHARACTER IN BUFFER - MOV A,B ;OUTPUT IT - CALL CONOUT - INX H ;BUMP POINTER - JMP INBUFA ;GET NEXT CHARACTER - -DELETE XCHG ;SAVE BUFFER POINTER IN DE - POP H ;ADDRESS BEGINNING OF BUFFER - PUSH H ;RESTORE STACK - INX H ;ADDRESS COUNT FIELD - MOV B,A ;SAVE DELETE CHAR - 7FH OR 08H - MOV A,M - SUI 1 ;DECREASE COUNT - MOV M,A - JC NODEL ;DON'T DELETE PAST BEGINING OF BUFFER. - XCHG ;RESTORE BUFFER POINTER TO HL - DCX H ;POINT TO LAST BYTE INPUTTED - MOV A,B ;GET BACK EITHER 7FH OR 08H - MOV B,M ;GET CHARACTER BEING DELETED - MVI M,20H ;RESTORE BLANK - CPI 8 - JZ BKSPC - MOV A,B ;ECHO CHAR IF 7FH - CALL CONOUT - JMP INBUFA ;GET NEXT CHARACTER -NODEL INR M ;DON'T LEAVE COUNT NEGATIVE - XCHG ;RESTORE POINTER TO HL - JMP INBUFA -BKSPC CALL CONOUT ;TRUE ERASE IF 08H - MVI A,20H - CALL CONOUT - MVI A,8 - CALL CONOUT - JMP INBUFA - -INBUFO MVI A,'#' - CALL CONOUT - MVI A,0DH - CALL CONOUT - MVI A,0AH - CALL CONOUT - JMP START - -RETYPE POP D - PUSH D - INX D ;POINT TO CURRENT NUMBER.. - LDAX D ;..OF CHARACTERS. - MOV B,A - MVI A,'#' - CALL CONOUT - MVI A,0DH - CALL CONOUT - MVI A,0AH - CALL CONOUT - MOV A,B ;TEST IF ZERO INPUT - ORA A - JZ INBUFA -CTLRLP INX D - LDAX D - CALL CONOUT - DCR B - JNZ CTLRLP - JMP INBUFA - -ALERT MVI A,7 - CALL CONOUT - DCR M - XCHG - JMP INBUFA - -PCRLF MVI A,0DH - CALL CONOUT - MVI A,0AH - CALL CONOUT - JMP INBUFA - -INBUFR MVI A,0DH - CALL CONOUT - MVI A,0AH - CALL CONOUT - POP D - POP B - POP H - POP PSW - RET - -CLEAR POP D ;ACCOUNTS FOR CALL - POP H ;ADDRESS BUFFER IN HL - PUSH H ;RESTORE.. - PUSH D ;..STACK - MOV B,M ;SAVE MAXIMUM IN B - INX H ;POINT TO FIRST.. - INX H ;..BUFFER BYTE. - MVI A,20H -CLEARL MOV M,A - INX H - DCR B - JNZ CLEARL - RET - -CONIN PUSH H ! PUSH D ! PUSH B -CONINLP CALL CONSTAT - ORA A - JZ CONINLP - CALL CONIN1 - CPI 61H ;CHANGE TO UPPER.. - JC NOUCASE ;..CASE SINCE CP/M.. - CPI 7BH ;..DOES THE SAME. - JNC NOUCASE - ANI 5FH -NOUCASE POP B ! POP D ! POP H - RET -CONIN1 LHLD 1 - LXI D,6 - DAD D - PCHL - -CONSTAT PUSH H ! PUSH D ! PUSH B - CALL CONST1 - POP B ! POP D ! POP H - RET -CONST1 LHLD 1 - LXI D,3 - DAD D - PCHL - -CONOUT PUSH H ! PUSH D ! PUSH B ! PUSH PSW - CALL CONOUT1 - POP PSW ! POP B ! POP D ! POP H - RET -CONOUT1 LHLD 1 - LXI D,9 - DAD D - MOV C,A - PCHL - - ENDM - -CMDLINE MACRO ;NO PARAMETERS USED - -;LOADS A COMMAND LINE ADDRESSED BY DE REGISTERS (MAX # CHARACTERS IN LINE -;IN DE, NUMBER OF CHARS IN LINE IN DE+1, LINE STARTS IN DE+2) INTO FCB -;ADDRESSED BY HL REGISTERS. THE FCB SHOULD BE AT LEAST 33 BYTES IN LENGTH. -;THE COMMAND LINE BUFFER MUST HAVE A MAXIMUM LENGTH OF AT LEAST ONE MORE -;THAN THE GREATEST NUMBER OF CHARACTERS THAT WILL BE NEEDED. - - LOCAL CMDLINE, DEFDR, DONE, DRIVE, FILL1, FILL, FILL2, INIT, INITL1 - LOCAL INITL2, INITL3, INITL4, NAME1, NAME2, SCAN, TRANS, TSTNAM - LOCAL TSTTYP, TSTTYPL, TYPE1, TYPE2, NAME2C - - - PUSH PSW - PUSH B - PUSH D - PUSH H - - CALL INIT ;FILLS FCBS WITH BLANKS AND NULLS - - XCHG ;GET START OF COMMAND LINE IN HL. - INX H ;ADDRESS # BYTES IN CMD LINE. - MOV E,M ;LOAD DE PAIR WITH # BYTES. - MVI D,0 - INX H - DAD D ;POINT TO BYTE AFTER LAST CHAR.. - MVI M,0DH ;..IN CMD LINE AND STORE DELIMITER. - POP H ;RESTORE HL AND DE. - POP D - PUSH D - PUSH H - INX D ;ADDRESS START OF COMMAND. - INX D - - CALL DRIVE - -NAME1 MVI C,8 ;TRANSFER FIRST FILENAME TO FCB. - CALL TRANS - CPI 0DH - JZ DONE - CPI 20H ;IF SPACE, THEN START OF.. - JZ NAME2 ;..SECOND FILENAME. - -TYPE1 POP H ;FILETYPE MUST BE AFTER.. - PUSH H ;..EIGHTH BYTE OF NAME. - LXI B,9 - DAD B - MVI C,3 ;TRANSFER TYPE OF FIRST FILE - CALL TRANS - CPI 0DH - JZ DONE - -NAME2 LDAX D ;EAT MULTIPLE SPACES.. - CPI 20H ;..BETWEEN NAMES. - JNZ NAME2C - INX D - JMP NAME2 - LDAX D - CPI 0DH ;TEST IF FIRST NAME.. - JZ DONE ;..ONLY AND THEN SPACE. -NAME2C POP H ;SECOND NAME STARTS IN 16TH BYTE. - PUSH H ;POINT HL TO THIS BYTE. - LXI B,16 - DAD B - CALL DRIVE - MVI C,8 - CALL TRANS - CPI 0DH - JZ DONE - -TYPE2 POP H ;SECOND TYPE STARTS IN 25TH BYTE. - PUSH H - LXI B,25 - DAD B - MVI C,3 - CALL TRANS - -DONE POP H - PUSH H - INX H ;POINT TO FIRST CHAR OF FIRST NAME IN FCB. - CALL SCAN ;CHECK FOR * (AMBIGUOUS NAMES). - POP H - PUSH H - LXI B,17 ;POINT TO FIRST CHAR OF SECOND NAME IN FCB. - DAD B - CALL SCAN - POP H - POP D - POP B - POP PSW - RET - -; =============>>> SUBROUTINES <<=============== - -INIT PUSH H ;INITIALIZES FCB WITH 1 NULL (FOR FIRST DRIVE),.. - PUSH B ;..11 BLANKS, 4 NULLS, 1 NULL (FOR 2ND DRIVE),.. - MVI M,0 ;..11 BLANKS, AND 4 NULLS. - INX H - MVI B,11 - MVI A,20H - CALL INITFILL - MVI B,5 - MVI A,0 - CALL INITFILL - MVI B,11 - MVI A,20H - CALL INITFILL - MVI B,4 - MVI A,0 - CALL INITFILL - POP B - POP H - RET - -INITFILL - MOV M,A - INX H - DCR B - JNZ INITFILL - RET - -DRIVE INX D ;CHECK 2ND BYTE OF FILENAME. IF IT.. - LDAX D ;..IS A ":", THEN DRIVE WAS SPECIFIED. - DCX D - CPI ':' - JNZ DEFDR ;ELSE ZERO FOR DEFAULT DRIVE ('INIT' PUT ZERO) - LDAX D - ANI 5FH - SUI 40H ;CALCULATE DRIVE (A=1, B=2,...).. - MOV M,A ;..AND PLACE IT IN FCB. - INX D ;ADDRESS FIRST BYTE OF.. - INX D ;..IN CMD LINE,.. -DEFDR INX H ;..AND NAME FIELD IN FCB. - RET - -TRANS LDAX D ;TRANSFER FROM CMD LINE TO FCB.. - INX D ;..UP TO NUMBER OF CHARS SPECIFIED.. - CPI 0DH ;..BY C-REG. KEEP SCANNING FIELD.. - RZ ;..WITHOUT TRANSFER UNTIL A DELIMITING.. - CPI '.' ;..FIELD CHAR SUCH AS '.', BLANK, OR.. - RZ ;..C/R (FOR END OF CMD LINE). - CPI 20H - RZ - DCR C - JM TRANS ;ONCE C-REG IS LESS THAN ZERO, KEEP READING.. - MOV M,A ;..CMD LINE BUT DO NOT TRANSFER TO FCB. - INX H - JMP TRANS - -SCAN MVI B,8 ;SCAN FILE NAME ADDRESSED BY HL. -TSTNAM MOV A,M - CPI '*' ;IF '*' FOUND, FILL IN REST OF FIELD.. - JZ FILL1 ;..WITH '?' FOR AMBIGUOUS NAME. - INX H - DCR B - JNZ TSTNAM - JMP TSTTYP -FILL1 CALL FILL - -TSTTYP MVI B,3 ;SCAN AND FILL TYPE FIELD FOR NAME.. -TSTTYPL MOV A,M ;..SPECIFIED ABOVE. - CPI '*' - JZ FILL2 - INX H - DCR B - RZ - JMP TSTTYPL -FILL2 CALL FILL - RET - -FILL MVI M,'?' ;ROUTINE TRANSFERS '?'. - INX H - DCR B - JNZ FILL - RET - - ENDM - -INLNCOMP MACRO ;NO PARAMETERS USED - -;IN-LINE COMPARE. COMPARES STRING ADDRESSED BY DE-REG TO STRING -;AFTER CALL (ENDS WITH ZERO). RETURN WITH CARRY SET MEANS STRINGS -;NOT THE SAME. ALL REGISTERS EXCEPT A-REG ARE UNAFFECTED. - - LOCAL ILCOMPL, SAME, NOTSAME, NSLP - - XTHL ;POINT HL TO 1ST CHAR. - PUSH D -ILCOMPL MOV A,M ;HL POINTS TO IN-LINE STRING. - ORA A ;END OF STRING IF ZERO. - JZ SAME - LDAX D - CMP M - JNZ NOTSAME - INX H - INX D - JMP ILCOMPL -NOTSAME MVI A,0 ;IF NOT SAME, FINISH THRU.. -NSLP INX H ;..STRING SO RETURN WILL.. - CMP M ;..GO TO INSTRUCTION AFTER.. - JNZ NSLP ;..STRING AND NOT REMAINDER OF STRING. - STC -SAME POP D - INX H ;AVOIDS A NOP INSTRUCTION.. - XTHL ;..WHEN RETURNING. - RET - - ENDM - -MFACCESS MACRO ;NO PARAMETERS USED - - LOCAL MOVE, CPM, MFNAME, MFN01, MFN02, MFFIX1, MFREQ - LOCAL MFCUR, MOVER, SRCHF, SRCHN, STDMA, BDOS, FCB, FCBEXT - LOCAL FCBRNO - - ;MFFLG1 IS NOT SET LOCAL BECAUSE IT MUST BE RESET - ;IN MAIN MODEM PROGRAM ON AN ABORT - -; -; MUST BE ASSEMBLED BY "MAC" -; -;MULTI-FILE ACCESS SUBROUTINE. ALLOWS PROCESSING -;OF MULTIPLE FILES (I.E. *.ASM) FROM DISK. THIS -;ROUTINE BUILDS THE PROPER NAME IN THE FCB EACH -;TIME IT IS CALLED. THIS COMMAND WOULD BE USED -;IN SUCH PROGRAMS AS MODEM TRANSFER, TAPE SAVE, -;ETC IN WHICH YOU WANT TO PROCESS SINGLE OR -;MULTIPLE FILES. -; -;THE FCB WILL BE SET UP WITH THE NEXT NAME, READY TO -;DO NORMAL PROCESSING (OPEN, READ, ETC.) WHEN ROUTINE IS CALLED. -; -;CARRY IS SET IF NO MORE NAMES CAN BE FOUND -; -;DEFINE DATA MOVE MACRO -; -MOVE MACRO ?F,?T,?L,?I - IF NOT NUL ?F - LXI H,?F - ENDIF - IF NOT NUL ?T - LXI D,?T - ENDIF - IF NOT NUL ?L - LXI B,?L - ENDIF - IF NOT NUL ?I - LOCAL ?B,?Z - CALL ?Z -?B DB ?I -?Z POP H ;GET TO - LXI B,?Z-?B - ENDIF - CALL MOVER -MF SET -1 ;;SHOW EXPANSION - ENDM -; -;DEFINE CP/M MACRO - CPM FNC,PARM -; -CPM MACRO ?F,?P - PUSH B - PUSH D - PUSH H - IF NOT NUL ?F - MVI C,?F - ENDIF - IF NOT NUL ?P - LXI D,?P - ENDIF - CALL BDOS - POP H - POP D - POP B - ENDM -; -;------------------------------------------------ -; -; MULTI-FILE ACCESS SUBROUTINE -; -;THE ROUTINE IS COMMENTED IN PSEUDO CODE, -;EACH PSEUDO CODE STATEMENT IS IN <<...>> -; -MFNAME: -;<> - CPM STDMA,80H - XRA A ! STA FCBEXT -;<> - LDA MFFLG1 ! ORA A ! JNZ MFN01 -; <> - MVI A,1 ! STA MFFLG1 -; <> - MOVE FCB,MFREQ,12 ;SAVE ORIG REQ - LDA FCB ! STA MFCUR ;SAVE DISK IN CURR FCB -; <> - MOVE MFREQ,FCB,12 - CPM SRCHF,FCB -;<> - JMP MFN02 -MFN01: -; <> - MOVE MFCUR,FCB,12 - CPM SRCHF,FCB -; <> - MOVE MFREQ,FCB,12 - CPM SRCHN,FCB -;<> -MFN02: -;<> - INR A ! STC ! JNZ MFFIX1 ! STA MFFLG1 ! RET ;FIX BY M.Z. -MFFIX1: -;<> - DCR A ! ANI 3 ! ADD A - ADD A ! ADD A ! ADD A ! ADD A - ADI 81H ! MOV L,A ! MVI H,0 - PUSH H ;SAVE NAME POINTER - MOVE ,MFCUR+1,11 -;<> - POP H ! MOVE ,FCB+1,11 -;<> - XRA A ! STA FCBEXT ! STA FCBRNO ;FIX BY M.Z. -;<> - RET -; -;MULTI-FILE ACCESS WORK AREA -; -MFFLG1 DB 0 ;1ST TIME SW -MFREQ DS 12 ;REQ NAME -MFCUR DS 12 ;CURR NAME -;------------------------------------------------ -; -;MOVE SUBROUTINE -; -MOVER MOV A,M - STAX D - INX H - INX D - DCX B - MOV A,B - ORA C - JNZ MOVER - RET -; -;EQUATES USED BY MULTI-ACCESS SUBROUTINE -; -SRCHF EQU 17 -SRCHN EQU 18 -STDMA EQU 26 ;FIX BY M.Z. -BDOS EQU 5 -FCB EQU 5CH -FCBEXT EQU FCB+12 -FCBRNO EQU FCB+32 - ENDM - -DIRLIST MACRO ;NO PARAMETERS USED - - LOCAL DIRLP,PRTNAME,NOFILE,DIRDONE,QSTMARK,QSTLP,PRNTNAME,NEXTSR - LOCAL MOVENAME,GETADD,DRIVE,CALCDR,SRCHFCB,NAMECT,PRNTHD,DRNAME - - LXI D,CMDBUF ;PUT COMMAND LINE IN FCB - LXI H,5CH - CALL CPMLINE - LXI H,SRCHFCB - CALL INITFCBS - LDA 6CH ;GET DRIVE # - STA SRCHFCB - LDA 6DH - CPI 20H ;IF BLANK GET ALL NAMES - PUSH PSW - CZ QSTMARK - POP PSW - CNZ MOVENAME ;ELSE MOVE NAME INTO FCB - CALL DRIVE - LXI D,80H - MVI C,STDMA - CALL BDOS - XRA A - STA NAMECT ;CR AFTER 4 NAMES - LXI D,SRCHFCB - MVI C,SRCHF ;DO FIRST SEARCH - CALL BDOS - CPI 0FFH - JZ NOFILE - -DIRLP CALL GETADD - LXI D,15 ;OFFSET FOR RECORD COUNT - DAD D - MOV A,M - ORA A - JZ NEXTSR ;NO LIST IF FILE IS ZERO LENGTH - LXI D,-5 - DAD D ;POINT TO $SYS ATTRIB BYTE - MOV A,M - ANI 80H - JNZ NEXTSR ;NO LIST IF $SYS FILE - LXI D,-10 - DAD D ;POINT TO BEGINNING OF NAME - INX H ;POINT TO FIRST LETTER - LXI D,PRNTNAME - MVI B,8 - CALL MOVE - INX D - MVI B,3 - CALL MOVE - CALL ILPRT -PRNTNAME - DB ' ',' ',' ', ' | ', 0 ;8,1,3 SPACES - LDA NAMECT - INR A - STA NAMECT - ANI 03H - ORA A - CZ CRLF -NEXTSR LXI D,SRCHFCB - MVI C,SRCHN ;DO NEXT SEARCH - CALL BDOS - CPI 0FFH - JZ DIRDONE - JMP DIRLP -NOFILE CALL ILPRT - DB 'NOT FOUND',0 -DIRDONE CALL CRLF - RET - -QSTMARK MVI A,'?' ;IF BLANK IN FCB, PUT IN 11 ?'s - MVI B,11 - LXI H,SRCHFCB+1 -QSTLP MOV M,A - INX H - DCR B - JNZ QSTLP - RET - -MOVENAME - LXI H,6DH - LXI D,SRCHFCB+1 - MVI B,11 - CALL MOVE ;MOVE IN CP/M PROGRAM - RET - -GETADD ANI 03H ;GET MOD4 FOR CP/M 1.4 - ADD A ! ADD A ! ADD A ;ADD 32 - ADD A ! ADD A - MOV E,A - MVI D,0 - LXI H,80H ;ADD DMA OFFSET - DAD D - RET - -DRIVE LDA SRCHFCB ;IF NO DRIVE, CAL - ORA A ;LOGGED IN DRIVE - JZ CALCDR - ADI 40H - JMP PRNTHD -CALCDR MVI C,25 - CALL BDOS - ADI 41H -PRNTHD STA DRNAME - CALL ILPRT - DB CR,LF,'DRIVE ' -DRNAME DB ' ',CR,LF,0 - RET - -SRCHFCB DS 33 -NAMECT DS 1 - - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/MODEM.PAS b/software/CPM/CPM13_MTPUG_01/MODEM.PAS deleted file mode 100644 index e758f07..0000000 --- a/software/CPM/CPM13_MTPUG_01/MODEM.PAS +++ /dev/null @@ -1,684 +0,0 @@ - -(* MODEM SOFTWARE PACKAGE FOR CPM *) - -(* PAUL L. GREENE *) -(* MICRO ENGINEERING *) -(* P.O. BOX 8094 *) -(* LA CRESCENTA, CA. 91214 *) - -(* THIS PROGRAM IS BEING SUBMITTED TO THE PASCAL/MT USER'S *) -(* GROUP FOR DISTRIBUTION AND USE BY INDIVIDUALS ONLY. *) -(* MICRO ENGINEERING RESERVES ALL OTHER RIGHTS TO THIS *) -(* PROGRAM. *) - -(* WRITTEN FOR THE PASCAL/MT COMPILER VERSION 3.1 *) - -(* PASCAL/MT COPYRIGHT MT MICROSYSTEMS *) -(* CP/M COPYRIGHT DIGITAL RESEARCH *) - -(*************************************************************) - -(* OPERATING INSTRUCTIONS *) - -(* THIS PROGRAM REQUIRES THAT THE "IOBYTE" BE IMPLEMENTED, *) -(* AND THAT THE MODEM IS CONNECTED TO ONE OF THE CONSOLE I/O *) -(* INTERFACES. THE PROGRAM PERFORMS CONSOLE SWAPPING TO *) -(* COMMUNICATE BETWEEN THE USER AND THE MODEM. THE USER'S *) -(* CONSOLE MUST BE AS FAST OR FASTER THAN THE MODEM SPEED. *) -(* THIS PROVIDES A HARDWARE INDEPENDENT MEANS OF CONTROLLING *) -(* THE MODEM. *) - -(* THE PROGRAM FIRST ASKS WHICH CONSOLE NUMBER THE MODEM IS *) -(* IS CONNECTED TO. ANSWER WITH A SINGLE DIGIT, 0-3. YOU *) -(* ARE THEN ASKED TO SELECT WHETHER CONSOLE INPUT IS TO BE *) -(* ECHOED ON THE CONSOLE OUTPUT. ANSWER 'Y' OR 'N'. *) - -(* YOU ARE THEN ASKED TO DEFINE SEVERAL SPECIAL CONTROL *) -(* CHARACTERS. ONLY THE CHARACTERS FOR "QUIT" AND "MODE" *) -(* ARE NOT SENT TO THE MODEM. THE OTHERS ARE USED TO *) -(* CONTROL THE REMOTE COMPUTER FROM THIS PROGRAM. A COMMAND *) -(* PROMPT LINE IS THEN DISPLAYED, AND THE DESIRED COMMAND *) -(* ENTERED BY TYPING THE FIRST LETTER. *) - -(* THE "INITIAL" COMMAND REPEATS THE ABOVE INITIALIZATION. *) - -(* THE "MODEM" COMMAND CONNECTS THE USER'S CONSOLE TO THE *) -(* MODEM FOR COMMUNICATION WITH THE REMOTE COMPUTER. THE *) -(* "COMMAND MODE" CONTROL CHARACTER CAN THEN BE USED ANYTIME *) -(* TO RETURN TO COMMAND LEVEL. *) - -(* THE "QUIT" COMMAND RETURNS CONTROL TO CP/M. *) - -(* ALL COMMUNICATION FROM THE MODEM TO THE USER MAY BE *) -(* CAPTURED ON A DISK FILE USING THE "RECEIVE" COMMAND. THE *) -(* PROGRAM WILL ASK FOR THE FILE NAME, WHICH MAY INCLUDE A *) -(* DISK DESIGNATOR. A RECEIVE FILE MAY BE OPENED AT ANY *) -(* TIME BY RETURNING TO COMMAND MODE. WHEN ALL DESIRED *) -(* TEXT HAS BEEN CAPTURED, THE FILE MUST BE CLOSED AND *) -(* LOGGED ON THE DISK USING THE "CLOSE" COMMAND AFTER *) -(* RETURNING TO COMMAND MODE. THE AMOUNT OF TEXT THAT CAN *) -(* BE CAPTURED IS ONLY LIMITED BY AVAILABLE DISK SPACE. *) -(* THE TEXT IS INITIALLY BUFFERED IN MAIN MEMORY UNTIL THE *) -(* BUFFER IS FULL. A "SUSPEND" CHARACTER IS THEN SENT TO *) -(* THE MODEM, AND THE BUFFER IS WRITTEN TO DISK. THE *) -(* PROGRAM THEN SENDS A "CONTINUE" CHARACTER TO THE MODEM *) -(* AND RESUMES CAPTURING THE TEXT. THEREFORE, THE REMOTE *) -(* COMPUTER THAT YOU ARE COMMUNICATING WITH MUST HAVE BOTH *) -(* "SUSPEND" AND "CONTINUE" CAPABILITY. *) - -(* DISK FILES MAY BE SENT TO THE MODEM USING THE "SEND" *) -(* COMMAND. THE PROGRAM ASKS FOR THE NAME OF THE FILE TO *) -(* BE SENT, WHICH MAY INCLUDE A DISK DESIGNATOR. THE FILE *) -(* IS THEN OPENED AND PREPARED FOR TRANSMISSION. ACTUAL *) -(* SENDING OF THE FILE DOES NOT BEGIN UNTIL RETURNING TO *) -(* "MODEM" MODE. THE SEND FILE IS ECHOED ON THE USER'S *) -(* CONSOLE UNTIL COMPLETE OR UNTIL SUSPENDED BY RETURNING *) -(* TO COMMAND LEVEL. THE SEND FILE IS ALSO FULLY BUFFERED *) -(* AND CAN BE ANY LENGTH UP TO AVAILABLE DISK CAPACITY. *) -(* A FILE CAN BE SENT AT ANY TIME BY USING THE ABOVE *) -(* PROCEDURE AFTER RETURNING TO COMMAND LEVEL. *) - -(* MODIFICATIONS *) - -(* A DEDICATED MODEM CAN BE USED BY MODIFYING THE FOLLOWING *) -(* PROCEDURES TO DIRECTLY ACCESS THE DEVICE: *) -(* PROCEDURE WRITEMODEM *) -(* PROCEDURE READMODEM *) -(* PROCEDURE TESTMODEM *) - - -(*************************************************************) -(*-----------------------------------------------------------*) -(*************************************************************) - -PROGRAM MODEM; - -CONST - ENDFILE=$1A; (* CP/M EOF (CONTROL-Z) *) - BUFSIZE=4095; (* DISK FILE BUFFERS *) - RECSIZE=79; - CR=$0D; - LF=$0A; - SPACE=$20; - NULL=00; - - (* BDOS FUNCTIONS - SEE CP/M MANUAL *) - IOCHK=7;IOSET=8; - - (* BIOS FUNCTIONS - SEE CP/M MANUAL *) - WBOOT=0;CONSTS=3;CONIN=6;CONOUT=9; - -TYPE - BUFFER=ARRAY [0..BUFSIZE] OF CHAR; - REC=ARRAY [0..RECSIZE] OF CHAR; -VAR - INTITLE,OUTTITLE :ARRAY [0..13] OF CHAR; - - INFILE,OUTFILE :TEXT; - - INBUF,OUTBUF :BUFFER; - - TRANSDATA,RECDATA, - SUSPEND,CONTINUE, - TERMINATE,MODE,QUIT, - CIOBYTE,MIOBYTE, - ININDEX,OUTINDEX :INTEGER; - - DISKFULL,EOF, - FISTAT,FOSTAT, - CISTAT,MISTAT, - COREADY,MOREADY, - DONE,MWAIT,CRLF, - CONECHO,PARITY :BOOLEAN; - -(*************************************************************) -(*************************************************************) - -(*$L-*) -(*$I FILEIO*) { CP/M FILE I/O LIBRARY } -(*$L+*) - -(*************************************************************) - -{ CP/M BDOS SUBROUTINE CALL } - -PROCEDURE EXTERNAL [5] MON2(FUNCT:INTEGER;INFO:INTEGER); - -(*************************************************************) - -{ CP/M BDOS FUNCTION CALL } - -FUNCTION MON1(FUNCT:INTEGER;INFO:INTEGER):INTEGER; - -VAR TEMP:INTEGER; - -BEGIN - -(* CALL MONITOR(BDOS), VALUE RETURNED IN REG A(LOW),B(HIGH) *) - -MON2(FUNCT,INFO); - -(* MOVE BA TO HL, SAVE AS TEMP *) - -INLINE ("MOV L,A/ - "MOV H,B/ - "SHLD / TEMP ); - -MON1:=TEMP; - -END; - -(*************************************************************) - -{ THIS PROCEDURE PERFORMS DIRECT ACCESS OF BIOS SUBROUTINES. } -{ THE ADDRESS OF THE BIOS SUBROUTINE JUMP TABLE IS ASSUMED } -{ TO BE AVAILABLE AT LOCATION 0001. THE PARAMETER "FUNCT" } -{ IS AN INDEX, MODULO-3, TO THE JUMP TABLE TO SELECT THE } -{ DESIRED FUNCTION. THE PARAMETER "INFO" IS PASSED TO THE } -{ BIOS SUBROUTINE IN REGISTER C. WITH SINCERE APOLOGIES, } -{ THIS ROUTINE IS SELF-MODIFYING, BUT IT IS ALSO SELF- } -{ RESTORING. THIS WAS NECESSARY SINCE FORWARD LABEL } -{ REFERENCES ARE NOT ALLOWED IN INLINE CODE, AND NO OTHER } -{ MEANS OF PERFORMING A COMPUTED SUBROUTINE CALL COULD BE } -{ DEVISED. } - -PROCEDURE BIOS2(FUNCT,INFO:INTEGER); - -VAR - ENTRY,ADDRESS,TEMP:INTEGER; -BEGIN -ENTRY:=$0001; (* LOCATION OF BIOS WARM START ENTRY ADDRESS *) -ADDRESS:=ENTRY^ + FUNCT; (* INDEX JUMP TABLE ENTRY *) -TEMP:=INFO; (* PUT INFO AT KNOWN ADDRESS *) -INLINE( [START]/"NOP / (* MODIFIED OPCODE *) - "LDA /TEMP/ (* GET INFO *) - "MOV C,A/ (* PUT IN C *) - "LHLD /ADDRESS/ (* LOAD BIOS ENTRY *) - "MVI A,/$E9/ (* 'PCHL' OPCODE *) - "STA /START/ (* MODIFY LOCATION *) - "CALL /START/ (* BRANCH TO BIOS *) - "MVI A,/$0/ (* 'NOP' OPCODE *) - "STA /START ); (* RESTORE OPCODE *) - -END; - -(*************************************************************) - -{ THIS FUNCTION IS SIMILAR TO PROCEDURE BIOS2 EXCEPT THAT THE } -{ CONTENT OF REGISTER A (AFTER RETURN FROM BIOS SUBROUTINE) } -{ IS RETURNED AS THE FUNCTION VALUE. } - -FUNCTION BIOS1(FUNCT,INFO:INTEGER):INTEGER; - -VAR ENTRY,ADDRESS,TEMP:INTEGER; - -BEGIN -ENTRY:=$0001; -ADDRESS:=ENTRY^ + FUNCT; -TEMP:=INFO; -INLINE( [START]/"NOP/ - "LDA /TEMP/ - "MOV C,A/ - "LHLD /ADDRESS/ - "MVI A,/$E9/ - "STA /START/ - "CALL /START/ - "MOV L,A/ (* SAVE RETURNED DATA*) - "MVI H,/0/ (* CLEAR HIGH BYTE *) - "SHLD /TEMP/ - "MVI A,/$0/ - "STA /START ); - -BIOS1:=TEMP; -END; - -(*************************************************************) - -PROCEDURE WRITECONSOLE(DATA:INTEGER); - -BEGIN -IF DATA=CR THEN CRLF:=TRUE; -IF (DATA <> CR) AND (CRLF=TRUE) THEN - BEGIN - IF DATA <> LF THEN BIOS2(CONOUT,LF); - CRLF:=FALSE; - END; -BIOS2(CONOUT,DATA); -END; - -(*************************************************************) - -PROCEDURE TESTCONSOLE(VAR STAT:BOOLEAN); - -VAR DATA:INTEGER; - -BEGIN -DATA:=BIOS1(CONSTS,0); -IF DATA=$00FF THEN STAT:=TRUE ELSE STAT:=FALSE; -END; - -(*************************************************************) - -PROCEDURE SETPARITY(VAR DATA:INTEGER); - -VAR RESULT:BOOLEAN; - -(*****************************) - -FUNCTION TESTPARITY(DATA:INTEGER):BOOLEAN; - -VAR -RESULT:BOOLEAN; -X:INTEGER; - -BEGIN -X:=DATA; -INLINE( "LDA /X/ (* GET CHAR *) - "ORA A/ (* SET PARITY FLAG *) - "PUSH PSW/ (* GET FLAGS TO A *) - "POP H/ - "MOV A,L/ - "RRC/ (* SHIFT PARITY TO LSB *) - "RRC/ - "ANI /$01/ (* MASK OTHER BITS *) - "MOV L,A/ (* MAKE BOOLEAN *) - "MVI H,/0/ - "SHLD /RESULT ); (* TRUE IF EVEN PARITY *) - -TESTPARITY:=RESULT; -END; - -(******************************) - -PROCEDURE CHANGEPARITY(VAR DATA:INTEGER); - -VAR X:INTEGER; - -BEGIN -X:=DATA; -INLINE( "LDA /X/ - "XRI /$80/ (* COMPLEMENT MSB *) - "STA /X ); -DATA:=X; -END; - -(******************************) - -BEGIN (*SETPARITY*) -RESULT:=TESTPARITY(DATA); -IF ((RESULT=TRUE) AND (PARITY=FALSE)) OR - ((RESULT=FALSE) AND (PARITY=TRUE)) - THEN CHANGEPARITY(DATA); -END; (*SETPARITY*) - -(*************************************************************) - -PROCEDURE WRITEMODEM(VAR DATA:INTEGER); - -BEGIN -SETPARITY(DATA); -MON2(IOSET,MIOBYTE); -BIOS2(CONOUT,DATA); -MON2(IOSET,CIOBYTE); -END; - -(*************************************************************) - -PROCEDURE TESTMODEM(VAR STAT:BOOLEAN); - -VAR DATA:INTEGER; - -BEGIN -MON2(IOSET,MIOBYTE); -DATA:=BIOS1(CONSTS,0); -IF DATA=$00FF THEN STAT:=TRUE ELSE STAT:=FALSE; -MON2(IOSET,CIOBYTE); -END; - -(*************************************************************) - -PROCEDURE READMODEM(VAR DATA:INTEGER); - -BEGIN -REPEAT - TESTMODEM(MISTAT) -UNTIL MISTAT=TRUE; -MON2(IOSET,MIOBYTE); -DATA:=BIOS1(CONIN,0); -DATA:=DATA & $007F; -MON2(IOSET,CIOBYTE); -END; - -(*************************************************************) - -PROCEDURE READFILE(VAR DATA:INTEGER); - -BEGIN -IF OUTINDEX > BUFSIZE THEN - BEGIN - WRITEMODEM(SUSPEND); - DATA:=ORD(GNB(OUTFILE,OUTBUF,OUTINDEX,EOF)); - WRITEMODEM(CONTINUE); - END -ELSE - DATA:=ORD(GNB(OUTFILE,OUTBUF,OUTINDEX,EOF)); - -IF EOF THEN - BEGIN - DATA:=0; - WRITELN;WRITELN('* * * END OF TRANSMIT FILE * * *'); - FOSTAT:=FALSE; - MOREADY:=FALSE; - END; - -END; - -(*************************************************************) - -PROCEDURE WRITEFILE(DATA:INTEGER); - -VAR - CH:CHAR; - TBUF:ARRAY[0..80] OF INTEGER; - I,TDATA,TIMER,TINDEX:INTEGER; - -BEGIN -IF ININDEX >= BUFSIZE THEN { WRITE BUFFER TO DISK } - - BEGIN - WRITEMODEM(SUSPEND); - - { CONTINUE READING MODEM UNTIL NO CHARACTERS ARE RECEIVED } - { FOR A RESPECTABLE PERIOD OF TIME. THIS ALLOWS THE REMOTE } - { TIME TO REACT TO THE "SUSPEND". THE CHARACTERS ARE PLACED } - { IN A TEMPORARY BUFFER UNTIL MODEM TRANSFERS STOP. CURRENT } - { TIMEOUT PERIOD IS APPROXIMATELY 2 SEC. } - - TINDEX:=0; - TBUF[TINDEX]:=DATA; - TIMER:=0; - WHILE TIMER < 1000 DO - BEGIN - TESTMODEM(MISTAT); - IF MISTAT THEN - BEGIN - READMODEM(TDATA); - TINDEX:=TINDEX+1; - TBUF[TINDEX]:=TDATA; - TIMER:=0; - END - ELSE TIMER:=TIMER+1; - END; - - { NOW THE CHARACTERS ARE RETRIEVED FROM THE TEMP BUFFER } - { AND WRITTEN TO DISK. IF MORE THAN 1 CHARACTER IS IN } - { THE BUFFER, THEN WRITE TO THE CONSOLE ALSO. } - - FOR I:=0 TO TINDEX DO - BEGIN - TDATA:=TBUF[I]; - CH:=CHR(TDATA); - IF (NOT DISKFULL) THEN - WNB(INFILE,INBUF,ININDEX,DISKFULL,CH); - IF I <> 0 THEN WRITECONSOLE(TDATA); - END; - - { THE REMOTE CAN NOW BE ALLOWED TO CONTINUE. } - - WRITEMODEM(CONTINUE); - END - -ELSE - - BEGIN - CH:=CHR(DATA); - WNB(INFILE,INBUF,ININDEX,DISKFULL,CH); - END; - - -IF DISKFULL THEN - BEGIN - WRITEMODEM(TERMINATE); - WRITELN; - WRITELN('* * * DISK FULL - TRANSFER TERMINATED * * *'); - FISTAT:=FALSE - END; - -END; - -(*************************************************************) - -PROCEDURE INITIAL; - -VAR - CONSOLE:INTEGER; - CH:CHAR; - -FUNCTION CONTROL:INTEGER; - -VAR CH:CHAR; - -BEGIN -READ(CH);WRITELN; -CONTROL:=ORD(CH) & $001F -END; - - -BEGIN -DONE:=FALSE;MWAIT:=FALSE;CRLF:=FALSE; -FOSTAT:=FALSE;FISTAT:=FALSE; -COREADY:=FALSE;MOREADY:=FALSE; -CISTAT:=FALSE;MISTAT:=FALSE; - -CIOBYTE:=MON1(IOCHK,0); -MIOBYTE:=CIOBYTE & $FFFC; (* LOGICAL AND TO CLEAR 2 LSB *) -CONSOLE:=CIOBYTE & $0003; (* LOGICAL AND TO MASK 2 LSB *) - -WRITELN;WRITELN('* * * MODEM COMMUNICATION PROGRAM * * *'); -WRITELN;WRITELN('CURRENT CONSOLE NUMBER: ',CONSOLE); - -REPEAT - WRITE('ENTER MODEM CONSOLE NUMBER (0-3): '); - READ(CONSOLE);WRITELN -UNTIL (CONSOLE >= 0) AND (CONSOLE <= 3); -MIOBYTE:=MIOBYTE + CONSOLE; - -WRITE('WANT CONSOLE ECHO (Y OR N)?'); -READ(CH);WRITELN; -IF CH='Y' THEN CONECHO:=TRUE ELSE CONECHO:=FALSE; - -WRITE('ENTER SUSPEND CHARACTER: CONTROL-'); -SUSPEND:=CONTROL; - -WRITE('ENTER CONTINUE CHARACTER: CONTROL-'); -CONTINUE:=CONTROL; - -WRITE('ENTER TERMINATE CHARACTER: CONTROL-'); -TERMINATE:=CONTROL; - -WRITE('ENTER COMMAND MODE CHARACTER:CONTROL-'); -MODE:=CONTROL; - -WRITE('ENTER SYSTEM RETURN CHARACTER: CONTROL-'); -QUIT:=CONTROL; - -WRITE('WANT EVEN OR ODD PARITY (E OR O)?'); -READ(CH);WRITELN; -IF CH='E' THEN PARITY:=TRUE ELSE PARITY:=FALSE; - -WRITELN('* * * INITIALIZATION COMPLETE * * *'); -WRITELN; - -END; - -(*************************************************************) - -PROCEDURE COMMAND; - -TYPE - NAME=ARRAY[0..11] OF CHAR; - STRING=RECORD - LEN:INTEGER; - VAL:ARRAY[1..79] OF CHAR - END; -VAR - CH:CHAR; - RESULT:INTEGER; - FILENAME:NAME; - -(*$L-*) -(*$ISTRIO*) -(*$IFILESTUF*) -(*$L+*) - -PROCEDURE READTITLE(VAR T:NAME); - -VAR - TITLE,FILENAME:STRING; - -BEGIN -WRITE(' FILE:'); -READSTR(FILENAME);WRITELN; -NAMEPARSER(FILENAME,TITLE); -MOVE(TITLE.VAL[1],T[0],12); -END; - -BEGIN (* COMMAND *) -WRITEMODEM(SUSPEND); -CH:=' '; -REPEAT - WRITELN;WRITELN; - WRITE('COMMAND:I(NITIAL),S(END),R(ECEIVE),C(LOSE),M(ODEM),Q(UIT) ?'); - READ(CH);WRITELN; - - IF CH='I' THEN INITIAL; - - IF CH='S' THEN - BEGIN - WRITE('SEND'); - READTITLE(FILENAME); - OPEN(OUTFILE,FILENAME,RESULT); - - IF RESULT=255 THEN - WRITELN('* * * UNABLE TO OPEN FILE * * *') - ELSE - BEGIN - OUTINDEX:=BUFSIZE+1; - FOSTAT:=TRUE; - END; - END; - - IF CH='R' THEN - BEGIN - WRITE('RECEIVE'); - READTITLE(FILENAME); - OPEN(INFILE,FILENAME,RESULT); - - IF RESULT <> 255 THEN DELETE(INFILE); - - CREATE(INFILE,FILENAME,RESULT); - IF RESULT=255 THEN - WRITELN('* * * DIRECTORY FULL * * *') - ELSE - BEGIN - ININDEX:=0; - FISTAT:=TRUE; - END; - END; - - IF CH='C' THEN - BEGIN - WRITEFILE(ENDFILE); - IF ININDEX <> 0 THEN - BEGIN - ININDEX:=BUFSIZE; - WRITEFILE(ENDFILE); - END; - CLOSE(INFILE,RESULT); - FISTAT:=FALSE; - END; - - IF CH='Q' THEN BIOS2(WBOOT,0); - -UNTIL CH='M'; -WRITELN('*** RETURNING TO MODEM ***'); -WRITELN; -WRITEMODEM(CONTINUE); - -END; - -(*************************************************************) -(*************************************************************) - -BEGIN -INITIAL; -COMMAND; -WHILE NOT DONE DO - BEGIN - - IF NOT MOREADY THEN (* GET NEW OUTPUT *) - - IF FOSTAT THEN (* GET FROM FILE *) - BEGIN - READFILE(TRANSDATA); - MOREADY:=TRUE; - END - ELSE (* GET FROM CONSOLE *) - BEGIN - TESTCONSOLE(CISTAT); - IF CISTAT THEN - BEGIN - TRANSDATA:=BIOS1(CONIN,0); - MOREADY:=TRUE; - END; - END; - - IF MOREADY THEN - BEGIN - IF TRANSDATA = QUIT THEN BIOS2(WBOOT,0); - IF TRANSDATA = MODE THEN - BEGIN - MOREADY:=FALSE; - COMMAND; - END; - - END; - - IF NOT COREADY THEN (* GET NEW INPUT *) - - BEGIN - TESTMODEM(MISTAT); - IF MISTAT THEN (* GET FROM MODEM *) - BEGIN - READMODEM(RECDATA); - COREADY:=TRUE; - IF RECDATA=SUSPEND THEN - BEGIN - REPEAT READMODEM(RECDATA) - UNTIL RECDATA=CONTINUE; - COREADY:=FALSE; - END; - END; - END; - - IF COREADY THEN (* SEND TO CONSOLE *) - BEGIN - WRITECONSOLE(RECDATA); - IF FISTAT THEN WRITEFILE(RECDATA); - COREADY:=FALSE; - END; - - IF MOREADY THEN (* SEND TO MODEM *) - BEGIN - WRITEMODEM(TRANSDATA); - IF CONECHO THEN - BEGIN - BIOS2(CONOUT,TRANSDATA); - IF TRANSDATA=CR THEN BIOS2(CONOUT,LF); - END; - MOREADY:=FALSE; - END; - - END; -END. (* MODEM *) - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/MTPUG01.BAK b/software/CPM/CPM13_MTPUG_01/MTPUG01.BAK deleted file mode 100644 index 10836e2..0000000 --- a/software/CPM/CPM13_MTPUG_01/MTPUG01.BAK +++ /dev/null @@ -1,50 +0,0 @@ -MODEM.PAS MT+Version 3.1 Program to send and recieve from -MODEM.LIB either the console or a disk file. - -ARCTAN.PAS/ERL These modules are complete and correct source - EXP.PAS/ERL for all of the trancendental functions vended - LN.PAS/ERL with Pascal/5.1. They fix a bug in the ARCTAN -SINCOS.PAS/ERL function and may either be more effedient - or more stable for large arguments. Sine and - Cosine are probably equal to those provided - TRANCEND.TWL is the replacement library. - -PAGE.DOC/PAS/COM Display a file on the console a page at a time. - -GRAPH.DOC/PAS Graph is the driving proceedure for PLOT. - PLOT.MOD Chats with the user at the terminal while - F.PAS PLOT and the function in F do all the work. - -FILSIZ.SRC/ERL Given the file name, return the file size using - CPM function 35 - -CMPXLIB.SRC/ERL Complex arithmetic library for Pascal MT+. -CMPLTEST.SRC/ERL/COM Test CMPXLIB - -MATHLIB.SRC/ERL Fifteen functions needed for most Scientific -MATHTEST.SRC/ERL/COM calculations. Test routine. - -CP/M-DEC.DOC Series of routine to read/write DEC disks to -CPMTODEC.COM CP/M or visa versa -DECTOCPM.COM -LISTDEC.COM List a DEC file. - -NSBH19.SRC Heath H-19 Version of NSB.SRC -NSBH19.DOC -SBGETCH.SRC Wordstar Version of Console Commands. - -RANDOM.PAS/ERL Random Number generator written by Ray Penley - for Pascal/Z Users Group - - RNB.SRC/ERL 5.1 Version of GNB and @RNB - GNB.SRC/ERL - -LIST.COM A program to list multiple files at either - the printer or the terminal. - -SHIFT.DOC/COM Shift from lower case to upper case: Pascal program only - -SD.COM Display the directory with space used in alphabetical - order. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/MTPUG01.DOC b/software/CPM/CPM13_MTPUG_01/MTPUG01.DOC deleted file mode 100644 index 6c9bb22..0000000 --- a/software/CPM/CPM13_MTPUG_01/MTPUG01.DOC +++ /dev/null @@ -1,50 +0,0 @@ -MODEM.PAS MT+Version 3.1 Program to send and recieve from -MODEM.LIB either the console or a disk file. - -ARCTAN.SRC/ERL These modules are complete and correct source - EXP.SRC/ERL for all of the trancendental functions vended - LN.SRC/ERL with Pascal/5.1. They fix a bug in the ARCTAN -SINCOS.SRC/ERL function and may either be more effedient - or more stable for large arguments. Sine and - Cosine are probably equal to those provided - TRANCEND.TWL is the replacement library. - -PAGE.DOC/PAS/COM Display a file on the console a page at a time. - -GRAPH.DOC/PAS Graph is the driving proceedure for PLOT. - PLOT.MOD Chats with the user at the terminal while - F.PAS PLOT and the function in F do all the work. - -FILSIZ.SRC/ERL Given the file name, return the file size using - CPM function 35 - -CMPXLIB.SRC/ERL Complex arithmetic library for Pascal MT+. -CMPLTEST.SRC/ERL/COM Test CMPXLIB - -MATHLIB.SRC/ERL Fifteen functions needed for most Scientific -MATHTEST.SRC/ERL/COM calculations. Test routine. - -CP/M-DEC.DOC Series of routine to read/write DEC disks to -CPMTODEC.COM CP/M or visa versa -DECTOCPM.COM -LISTDEC.COM List a DEC file. - -NSBH19.SRC Heath H-19 Version of NSB.SRC -NSBH19.DOC -SBGETCH.SRC Wordstar Version of Console Commands. - -RANDOM.PAS/ERL Random Number generator written by Ray Penley - for Pascal/Z Users Group - - RNB.SRC/ERL 5.1 Version of GNB and @RNB - GNB.SRC/ERL - -LIST.COM A program to list multiple files at either - the printer or the terminal. - -SHIFT.DOC/COM Shift from lower case to upper case: Pascal program only - -SD.COM Display the directory with space used in alphabetical - order. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/NSBH19.DOC b/software/CPM/CPM13_MTPUG_01/NSBH19.DOC deleted file mode 100644 index ce8279d..0000000 --- a/software/CPM/CPM13_MTPUG_01/NSBH19.DOC +++ /dev/null @@ -1,47 +0,0 @@ - - -Ver 1.00 -HELPSPP.HLP - - -New SPP editor commands - -Note: All are control(letter) - - -Function NEW (OLD) -------------------------------------------------------------------- -Cursor left word A (A) - " beg | end line B (B) - " foward page C (C) - " right word F (D) - Repeat search using last string W (E) - Insert mode on V (F) - DELETE char right G (G) - Backspace S or H (H) - Tab I (I) -Cursor down X (J) - " up E (K) - " right D (L) - " start of next line M (M) - Insert blank line following cursor N (N) - DELETE work right T (O) - DELETE line right - (P) - SUPER COMMAND Q (Q) -Cursor back page R (R) - Search esc direction count O (S) -Cursor top | bottem screen P (T) - Enter adjust mode K=accept esc=abort J (U) - End & accept insert, adjust, delete line K (V) - Copy text from copy buf (may be repeated) U (W) - Search & replace esc esc [V] L (X) - DELETE line K=accept esc=abort Y (Y) - Insert blank line at cursor Z (Z) - -Note: In search and replace Verify mode; - R = go ahead and replace - sp = don't replace but continue - esc = abort command - - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/NSBH19.SRC b/software/CPM/CPM13_MTPUG_01/NSBH19.SRC deleted file mode 100644 index 7bd7861..0000000 --- a/software/CPM/CPM13_MTPUG_01/NSBH19.SRC +++ /dev/null @@ -1,359 +0,0 @@ -(* VERSION 0058 *) -(* SETUP FOR Zenith H-19 terminal 8 July 81 frg *) -(* Uses ZDS escape sequences *) -(* ADDED CONVERSION TO WORDSTAR COMMANDS - 14 JULY 81 FRG *) -(* VER 2.04 *) -(*$K0*) -(*$K1*) -(*$K2*) -(*$K5*) -(*$K6*) -(*$K7*) -(*$K8*) -(*$K12*) -(*$K13*) -(*$K14*) -(*$K15*) -PROGRAM PASCAL_SPP; - -(*$I EDTYPES*) -(*$I EDGLBLS*) - -TYPE -CPMOPERATION = (COLDBOOT,WARMBOOT,CONSTAT,CONIN,CONOUT,LIST, - PUNOUT,RDRIN,HOME,SELDSK,SETTRK,SETSEC,SETDMA, - DSKREAD,DSKWRITE); - -FNAME = ARRAY [1..8] OF CHAR; (* CP/M FILE NAME *) - -EXTENSION = ARRAY [1..3] OF CHAR; (* EXTENSION TO NAME *) - -FCB = RECORD - DSK : BYTE; - FN : FNAME; - EXT : EXTENSION; - OTHER: ARRAY [12..36] OF BYTE - END; - -DIRENT = RECORD - ET : BYTE; - FN : FNAME; - EXT : EXTENSION; - OTHR : ARRAY [12..31] OF BYTE - END; - -(*$I SBIFDEF.LIB*) - - - -VAR - - DIRFILE: FCB; (* FOR DISPLAYING DIRECTORIES *) - DIRBUF: ARRAY [0..3] OF DIRENT; - - FSTRING: STRING; - MEMORY: ABSOLUTE [$0000] ARRAY[0..0] OF BYTE; - CMDCH: CHAR; - @SFP: EXTERNAL INTEGER; - BUFSTAT: STATREC; - INTRFACE: SB_INTERFACE; (* USED TO COMMUNICATE BETWEEN PROGRAMS *) - SB_LAST_X, - SB_LAST_Y: INTEGER; (* FOR SOFTWARE CLR TO EOL/ CLR TO EOS ROUTINES *) - - -EXTERNAL FUNCTION @BDOS(PARM,FUNC:INTEGER):INTEGER; - -EXTERNAL [1] PROCEDURE LOGWRITER; (* LOG WRITER OVERLAY *) -EXTERNAL [2] PROCEDURE SPEED; (* EDITOR OVERLAY *) -EXTERNAL [3] PROCEDURE SYNCHECK; (* SYNTAX CHECKER OVERLAY *) -EXTERNAL [4] PROCEDURE VARCHECK; (* UNDEF VAR CHECKER OVERLAY *) -EXTERNAL [6] PROCEDURE MTRUN; (* RUN PROGRAM OVERLAY *) -EXTERNAL [7] PROCEDURE DISP_DIR; (* DIRECTORY DISPLAY OVERLAY *) -EXTERNAL [8] FUNCTION GETFILE:BOOLEAN; (* GET EDITOR FILE NAME, ETC. *) -EXTERNAL [8] PROCEDURE INIT; (* EDITOR INIT *) -EXTERNAL [9] PROCEDURE EDITWRITE; (* EDITOR WRITE BUFFER OVERLAY *) -EXTERNAL[10] PROCEDURE PRETTY; (* PROGRAM REFORMATER *) - - -(*--------------------------------------------------------------*) -(* User modification area BEGINS here: *) -(*--------------------------------------------------------------*) - - -FUNCTION LINESZ : INTEGER; (* SO USER CAN SET SIZE OF A LINE *) -BEGIN - LINESZ := 79 (* 80 - 1 *) -END; - -FUNCTION SCREENSZ : INTEGER; -BEGIN - SCREENSZ := 22 (* NUMBER OF LINES ON PHYSICAL SCREEN - 2 *) -END; - -FUNCTION STATUSROW : INTEGER; -BEGIN - STATUSROW := SCREENSZ + 1 -END; - -PROCEDURE SB_OUT_CH(CH:CHAR); -BEGIN - SB_BIOS_CALL(CONOUT,ORD(CH)) -END; - -FUNCTION SB_GETCH:CHAR; -(* CONVERT MOST WORDSTAR COMMANDS TO SPP EQUIV. FRG-14JUL81 *) -VAR - CH : CHAR; - CHI, CHO : INTEGER; -BEGIN - SB_BIOS_CALL(CONIN,0); - INLINE("STA / CH); - CHI := ORD(CH); - CASE CHI OF {NEW COMMAND OLD FUNCTION} - $04 : CHO := $0C; { D L } - $05 : CHO := $0B; { E K } - $06 : CHO := $04; { F D } - $0A : CHO := $15; { J U } - $0B : CHO := $16; { K V } - $0C : CHO := $18; { L X } - $0F : CHO := $13; { O S } - $10 : CHO := $14; { P T } - $13 : CHO := $08; { S H } - $14 : CHO := $0F; { T O } - $15 : CHO := $17; { U W } - $16 : CHO := $06; { V F } - $17 : CHO := $05; { W E } - $18 : CHO := $0A; { X J } - $1F : CHO := $10; { - P } - ELSE CHO := CHI; - END ; (* CASE *) - SB_GETCH := CHR(CHO) -END; - -PROCEDURE XYGOTO(X,Y:INTEGER); (* PUT CURSOR AT HORZ, VERT *) -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH(CHR('Y')); - SB_OUT_CH(CHR(Y+32)); (* ROW *) - SB_OUT_CH(CHR(X+32)); (* COLUMN *) - SB_LAST_X := X; - SB_LAST_Y := Y; (* THESE ARE USED ONLY BY USER SOFTWARE *) - (* ROUTINES WHICH PERFORM CLR TO EOS AND *) - (* CLR TO EOL *) -END; - -PROCEDURE SB_CLR_SCRN; -BEGIN - SB_OUT_CH(CHR(ESC)); - sb_out_ch(CHR('E')); -END; - -PROCEDURE SB_CLR_EOS; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH(CHR('J')); - SB_OUT_CH(CHR(0)); (* GIVE IT TIME TO WORK *) - SB_OUT_CH(CHR(0)); (* GIVE IT TIME TO WORK *) -END; - - -PROCEDURE SB_CLR_LINE; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH(CHR('K')); -END; - - -(*--------------------------------------------------------------*) -(* User modification area ENDS WITH SB_CLR_LINE *) -(*--------------------------------------------------------------*) - - -PROCEDURE SB_FLUSH_BUF; -VAR - CH : CHAR; -BEGIN - IF NOT BUFSTAT.OCCUPIED THEN - EXIT; - - REPEAT - PRNT_AT(20,1,'Buffer occupied'); - PRNT_AT(21,1,'F)lush, U)pdate, W)rite & Flush, L)eave:'); - CH := SB_UP_CASE(SB_GETCH); - SB_OUT_CH(CH); - IF CH = 'L' THEN - EXIT; - - IF CH = 'F' THEN - BEGIN - IF NEWFILE THEN - PURGE(F); - BUFSTAT.OCCUPIED := FALSE; - EXIT - END; - - IF CH = 'W' THEN - BEGIN - EDITWRITE; - LOGWRITER; - BUFSTAT.OCCUPIED := FALSE - END; - - IF CH = 'U' THEN - BEGIN - EDITWRITE; (* BUT LEAVE IT OCCUPIED *) - LOGWRITER - END - UNTIL (CH='U') or (CH='F') OR (CH='W'); - NEWFILE:=FALSE; -END; - - -PROCEDURE SB_BIOS_CALL(FUNC:CPMOPERATION; PARM:INTEGER); -VAR - DISPATCH_LOC : INTEGER; -BEGIN - DISPATCH_LOC := (MEMORY[1] + SWAP(MEMORY[2])) + (ORD(FUNC)*3) - 3; - INLINE("LHLD / PARM / - "MOV C,L / - "MOV B,H / - "LHLD / DISPATCH_LOC / - "PCHL); -END; - -PROCEDURE PRNT_AT(ROW,COL:INTEGER; S:STRING); -BEGIN - XYGOTO(COL,ROW); - WRITE([ADDR(SB_OUT_CH)],S) -END; - -PROCEDURE MENU; -BEGIN - SB_CLR_SCRN; - PRNT_AT(1,1,'SpeedProgramming Package V5.2'); - PRNT_AT(3,1,'Options: E)dit'); - prnt_at(4,20, 'R)eformat'); - prnt_at(5,20, 'S)yntax check'); - prnt_at(6,20, 'V)ariable check'); - prnt_at(7,20, 'X)eq'); - prnt_at(8,20, 'D)ir'); - prnt_at( 9,20, 'L)ink'); - prnt_at(10,20, 'F)ast compile'); - prnt_at(11,20, 'Q)uit'); - prnt_at(22,1,'Command? ') -END; - -FUNCTION SB_UP_CASE(CH:CHAR):CHAR; -BEGIN - IF (CH >= 'a') AND (CH <= 'z') THEN - SB_UP_CASE := CHR(CH & $DF) - ELSE - SB_UP_CASE := CH -END; - - -(*$E-*) -FUNCTION GET_FILE_INTO_BUF:BOOLEAN; -BEGIN - IF NOT BUFSTAT.OCCUPIED THEN - IF GETFILE THEN (* GET FILE INTO BUFFER *) - INIT; - GET_FILE_INTO_BUF := BUFSTAT.OCCUPIED -END; -(*$E+*) - - - -BEGIN - BUFSZ := (@SFP - ADDR(BUF))-$100; (* SET UP EDITOR BUFFER SIZE *) - BUFSTAT.OCCUPIED := FALSE; - NEWFILE := FALSE; - REPEAT - MENU; - INTRFACE.NEXT_CMD := ' '; (* DEFAULT NO NEXT PROGRAM *) - INTRFACE.END_STAT := OK; - CMDCH := SB_UP_CASE(SB_GETCH); - SB_OUT_CH(CMDCH); (* ECHO IT *) - REPEAT - FSTRING := ''; (* DEFAULT IS NO PROGRAM *) - CASE CMDCH OF - 'D' : DISP_DIR; - 'E' : BEGIN - IF (BUFSTAT.OCCUPIED) AND ((INTRFACE.PREV_CMD = 'S') - OR (INTRFACE.PREV_CMD = 'R'))THEN - (* DO NOTHING *) - ELSE - SB_FLUSH_BUF; (* MAKE SURE USER WANTS TO DO THIS *) - - IF NOT BUFSTAT.OCCUPIED THEN (* BUFFER IS EMPTY *) - BEGIN - IF GETFILE THEN (* SEE IF HE WANTS A FILE *) - BEGIN - INIT; (* CALL EDITOR *) - IF BUFSTAT.OCCUPIED THEN - SPEED - END - END - ELSE - SPEED; (* BUFFER OCCUPIED, EDIT OLD *) - INTRFACE.PREV_CMD := ' '; - IF INTRFACE.NEXT_CMD = 'E' THEN - INTRFACE.NEXT_CMD := ' '; - END; - 'S' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - INTRFACE.PREV_CMD := ' '; - SYNCHECK; - IF INTRFACE.END_STAT = SYNERR THEN - INTRFACE.NEXT_CMD := 'E' - END - END; - 'V' : IF GET_FILE_INTO_BUF THEN - VARCHECK; - 'R' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - INTRFACE.PREV_CMD := 'R'; - PRETTY; - INTRFACE.NEXT_CMD := 'E'; - SB_CLR_SCRN - END - END; - 'X' : BEGIN - SB_FLUSH_BUF; - FSTRING := ''; - MTRUN - END; - 'Q' : BEGIN - INTRFACE.PREV_CMD := ' '; - SB_FLUSH_BUF; - IF BUFSTAT.OCCUPIED THEN - CMDCH := '@' - ELSE - BEGIN - SB_CLR_SCRN; - EXIT - END - END; - 'L' : BEGIN - SB_FLUSH_BUF; - FSTRING := 'LINKMT'; - MTRUN - END; - 'F' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - SB_FLUSH_BUF; - FSTRING := 'FASTCOMP'; - MOVE(ENDFILE,MEMORY[ADDR(BUF)-2],2);(* SET UP INTEGER *) - MOVE(NAME,MEMORY[ADDR(BUF)-83],81); - MTRUN - END - END - END; - CMDCH := INTRFACE.NEXT_CMD; - UNTIL (CMDCH = ' ') OR (CMDCH = INTRFACE.PREV_CMD); - UNTIL FALSE -END. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/PAGE.COM b/software/CPM/CPM13_MTPUG_01/PAGE.COM deleted file mode 100644 index 6d31b1d0e2a9e5bc5e841d04b8426b757ebab58f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14208 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

    |','|','|','|','|','|'); - - declare bishop_like (0 : 13) static bit initial - ('0','0','0','0','1','0','1','0','0','0','1','0','1','0'); - - declare rook_like (0 : 13) static bit initial - ('0','0','0','0','0','1','1','0','0','0','0','1','1','0'); - - declare board (0 : 119) static fixed (4) initial - (01,01,01,01,01,01,01,01,01,01, - 01,01,01,01,01,01,01,01,01,01, - 01,11,09,10,12,13,10,09,11,01, - 01,08,08,08,08,08,08,08,08,01, - 01,00,00,00,00,00,00,00,00,01, - 01,00,00,00,00,00,00,00,00,01, - 01,00,00,00,00,00,00,00,00,01, - 01,00,00,00,00,00,00,00,00,01, - 01,02,02,02,02,02,02,02,02,01, - 01,05,03,04,06,07,04,03,05,01, - 01,01,01,01,01,01,01,01,01,01, - 01,01,01,01,01,01,01,01,01,01); - - declare center (0 : 119) static fixed (2) initial - (00,00,00,00,00,00,00,00,00,00, - 00,00,00,00,00,00,00,00,00,00, - 00,00,00,00,00,00,00,00,00,00, - 00,00,01,01,01,01,01,01,00,00, - 00,00,01,02,02,02,02,01,00,00, - 00,00,01,02,03,03,02,01,00,00, - 00,00,01,02,03,03,02,01,00,00, - 00,00,01,02,02,02,02,01,00,00, - 00,00,01,01,01,01,01,01,00,00, - 00,00,00,00,00,00,00,00,00,00, - 00,00,00,00,00,00,00,00,00,00, - 00,00,00,00,00,00,00,00,00,00); - - declare bonus (0 : 119) static fixed (4) initial - ( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 3, 2, 1,-9, 3, 4, 1, 0, - 0, 1, 1, 1, 6, 7, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 6, 7, 1, 1, 1, 0, - 0, 1, 3, 2, 1,-9, 3, 4, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - - declare (((max_stage,max_cap) initial (3), ply, max_ply) fixed (3), - ((move_index, best_move, first_move, last_move) fixed, - (stage_lim, stage_lst) fixed (3), - move_color fixed (1), cur_piece fixed (4), - move_bonus fixed (4)) (0 : 5), - next fixed, /* index to next available of */ - ((est_score, move_score) fixed, - (move_from, move_to, move_dir) fixed (7)) - (0 : 350)) static; - - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - display: procedure; - - declare (i, j) fixed; - declare dashes static varying character (41) initial - (' +---+---+---+---+---+---+---+---+'), - spaces static varying character (9) initial (' |'); - - put skip(2); - do i = 20 to 90 by 10; - write from(dashes); - put skip; - write from(spaces); - do j = 1 to 8; - write from(piece_picture (board (i + j))); - end; - put skip; - end; - write from(dashes); - put skip(2); - - end display; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - - display_move: procedure (move); - - declare move fixed; - - declare spaces varying character (6) static initial (' '), - dash varying character (1) static initial ('-'), - takes varying character (1) static initial ('x'), - names (0 : 119) varying character (2) static initial - (' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', - ' ','a8','b8','c8','d8','e8','f8','g8','h8',' ', - ' ','a7','b7','c7','d7','e7','f7','g7','h7',' ', - ' ','a6','b6','c6','d6','e6','f6','g6','h6',' ', - ' ','a5','b5','c5','d5','e5','f5','g5','h5',' ', - ' ','a4','b4','c4','d4','e4','f4','g4','h4',' ', - ' ','a3','b3','c3','d3','e3','f3','g3','h3',' ', - ' ','a2','b2','c2','d2','e2','f2','g2','h2',' ', - ' ','a1','b1','c1','d1','e1','f1','g1','h1',' ', - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' '); - - - write from(spaces); - write from(names (move_from (move))); - if cur_piece (ply) = empty_square then - write from(dash); - if cur_piece (ply) ~= empty_square then - write from(takes); - write from(names (move_to (move))); - end display_move; - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - color: procedure (square) returns (fixed (1)); - - declare square fixed (7); - - if board (square) >= black_pawn then return (black); - if board (square) <= illegal_square then return (none); - return (white); - - end color; - - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - sort_moves: procedure; - - declare ((i, j, t) fixed, s fixed (7), color fixed (1), - switched bit) static; - - color = move_color (ply); - do switched = '1' while (switched); - switched = '0'; - do i = first_move (ply) repeat (j) - while (i < last_move (ply)); - j = i + 1; - t = move_score (i) - move_score (j); - if t < 0 & color = white | t > 0 & color = black then - do; - switched = '1'; - t = est_score (i); - est_score (i) = est_score (j); - est_score (j) = t; - t = move_score (i); - move_score (i) = move_score (j); - move_score (j) = t; - s = move_from (i); - move_from (i) = move_from (j); - move_from (j) = s; - s = move_to (i); - move_to (i) = move_to (j); - move_to (j) = s; - s = move_dir (i); - move_dir (i) = move_dir (j); - move_dir (j) = s; - if i > first_move (ply) then j = j - 2; - end; - end; - end; - best_move (ply) = first_move (ply); - end sort_moves; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - generate_moves: procedure; - - declare (move_piece fixed (4), from_square fixed (7), - castle_bonus fixed (4), move fixed) static; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - add_move: procedure (to_square, direction); - declare to_square fixed (7), direction fixed (5); - - declare (current_piece fixed (4), score fixed) static; - - current_piece = board (to_square); - if current_piece = illegal_square then return; - if color (to_square) = move_color (ply) then return; - move_from (next) = from_square; - move_to (next) = to_square; - move_dir (next) = direction; - score = center (to_square) - center (from_square) + - bonus (from_square); - if color (from_square) = black then score = - score; - score = score - piece_value (current_piece); - est_score (next) = score; - move_score (next) = score; - if move_color (ply) = white then - do; - if score > move_score (best_move (ply)) then - best_move (ply) = next; - end; else - do; - if score < move_score (best_move (ply)) then - best_move (ply) = next; - end; - last_move (ply) = next; - next = next + 1; - end add_move; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - multi_move: procedure (dir); - declare dir fixed (5); - - declare ts fixed (7) static; - - do ts = from_square + dir repeat (ts + dir) - while (board (ts) = empty_square); - call add_move (ts, dir); - end; - call add_move (ts, dir); /* adds captures */ - end multi_move; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - - generate_piece_moves: procedure; - - move_piece = board (from_square); - if move_piece = white_pawn then - do; - if board (from_square - 10) = empty_square then - do; call add_move (from_square - 10, -10); - if board (from_square - 20) = empty_square then - if bonus (from_square) ~= 0 then - call add_move (from_square - 20, -10); - end; - if color (from_square - 9) = -move_color (ply) then - call add_move (from_square - 9, -9); - if color (from_square-11) = -move_color (ply) then - call add_move (from_square - 11, -11); - end; else - if move_piece = black_pawn then - do; - if board (from_square + 10) = empty_square then - do; call add_move (from_square + 10, 10); - if board (from_square + 20) = empty_square then - if bonus (from_square) ~= 0 then - call add_move (from_square + 20, 10); - end; - if color (from_square + 9) = -move_color (ply) then - call add_move (from_square + 9, 9); - if color (from_square+11) = -move_color (ply) then - call add_move (from_square + 11, 11); - end; else - if move_piece = white_knight | - move_piece = black_knight then - do; - call add_move (from_square - 21, -21); - call add_move (from_square - 19, -19); - call add_move (from_square - 12, -12); - call add_move (from_square - 8, -8); - call add_move (from_square + 8, 8); - call add_move (from_square + 12, 12); - call add_move (from_square + 19, 19); - call add_move (from_square + 21, 21); - end; else - if move_piece = white_king | - move_piece = black_king then - do; - call add_move (from_square - 11, -11); - call add_move (from_square - 10, -10); - call add_move (from_square - 9, -9); - call add_move (from_square - 1, -1); - call add_move (from_square + 1, 1); - call add_move (from_square + 9, 9); - call add_move (from_square + 10, 10); - call add_move (from_square + 11, 11); - castle_bonus = 0; - if bonus (from_square) ~= 0 then - do; - if move_piece = white_king then - if from_square = 95 then - castle_bonus = 15; - end; else - do; - if move_piece = black_king then - if from_square = 25 then - castle_bonus = -15; - end; - if castle_bonus ~= 0 then - do; - if bonus (from_square + 3) ~= 0 then - if board (from_square + 3) = move_piece-2 then - if board (from_square + 1) = empty_square then - if board (from_square + 2) = empty_square then - do; - call add_move (from_square + 2, 2); - est_score (next - 1) = - est_score (next - 1) + castle_bonus; - move_score (next - 1) = - move_score (next - 1) + castle_bonus; - end; - if bonus (from_square - 4) ~= 0 then - if board (from_square - 4) = move_piece-2 then - if board (from_square - 3) = empty_square then - if board (from_square - 2) = empty_square then - if board (from_square - 1) = empty_square then - do; - call add_move (from_square - 2, -2); - est_score (next - 1) = - est_score (next - 1) + castle_bonus; - move_score (next - 1) = - move_score (next - 1) + castle_bonus; - end; - end; - end; else - do; - if bishop_like (move_piece) then - do; - call multi_move (-11); - call multi_move (-9); - call multi_move (9); - call multi_move (11); - end; - if rook_like (move_piece) then - do; - call multi_move (-10); - call multi_move (10); - call multi_move (1); - call multi_move (-1); - end; - end; - end generate_piece_moves; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - - move_prohibited: procedure (best_move, move) returns (bit); - declare (best_move, move) fixed; - - declare to_sq fixed (7) static; - - do to_sq = move_from (best_move) - repeat (to_sq + move_dir (best_move)) - while (to_sq ~= move_to (best_move)); - if move_to (move) = to_sq then return ('1'); - end; - if move_to (move) = to_sq then return ('1'); - return ('0'); - end move_prohibited; - - - first_move (ply) = next; - best_move (ply) = next; - move_index (ply) = next - 1; - - - - move = best_move (ply - 2); - if ply >= max_ply then - if ply >= 2 then - if move_from (move_index (ply - 2)) ~= move_from (move) then - if move_from (move) ~= move_to (move_index (ply - 1)) then - if move_to (move) ~= move_from (move_index (ply - 1)) then - if ~ move_prohibited (move, move_index (ply - 1)) then - if ~ move_prohibited (move, move_index (ply - 2)) then - do; - from_square = move_from (move); - call add_move (move_to (move), move_dir (move)); - return; - end; - - - - do from_square = 21 to 98; - if color (from_square) = move_color (ply) then - call generate_piece_moves(); - if ply >= max_ply then - if alpha_beta_cutoff (best_move (ply)) then - do; - last_move (ply) = next - 1; - return; - end; - end; - - return; - - end generate_moves; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - alpha_beta_cutoff: procedure (move) returns (bit); - declare move fixed (7); - - declare score fixed static; - - if ply = 0 then return ('0'); - if move_index (ply - 1) = first_move (ply - 1) then - return ('0'); - if move_index (ply) < first_move (ply) then - return ('0'); - score = move_score (move) + - move_score (move_index (ply - 1)) - - move_score (best_move (ply - 1)); - if move_color (ply) = white then return (score > 0); - return (score < 0); - end alpha_beta_cutoff; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - select_next_move: procedure returns (bit); - - declare (to, from) fixed (7) static; - - if alpha_beta_cutoff (move_index (ply)) then return ('0'); - move_index (ply) = move_index (ply) + 1; - if move_index (ply) > last_move (ply) then return ('0'); - to = move_to (move_index (ply)); - from = move_from (move_index (ply)); - cur_piece (ply) = board (to); - if ply >= max_cap & cur_piece (ply) = empty_square then - return ('0'); - board (to) = board (from); - board (from) = empty_square; - move_bonus (ply) = bonus (from); - bonus (from) = 0; - if board (to) = white_king | board (to) = black_king then - do; - if to = from + 2 then - do; - board (to - 1) = board (to) - 2; - board (to + 1) = empty_square; - end; else - if to = from - 2 then - do; - board (to + 1) = board (to) - 2; - board (to - 2) = empty_square; - end; - end; - return ('1'); - end select_next_move; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - retract_move: procedure; - - declare (to, from) fixed (7) static; - - to = move_to (move_index (ply)); - from = move_from (move_index (ply)); - board (from) = board (to); - board (to) = cur_piece (ply); - bonus (from) = move_bonus (ply); - if board (from) = white_king | board (from) = black_king then - do; - if to = from + 2 then - do; - board (to + 1) = board (from) - 2; - board (to - 1) = empty_square; - end; else - if to = from - 2 then - do; - board (to - 2) = board (from) - 2; - board (to + 1) = empty_square; - end; - end; - end retract_move; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - score_ply_moves: procedure recursive; - - do while (select_next_move ()); - call stage(); - move_score (move_index (ply)) = - move_score (move_index (ply)) + - move_score (best_move (ply + 1)); - if move_color (ply) = white then - do; - if move_score (move_index (ply)) > - move_score (best_move (ply)) then - best_move (ply) = move_index (ply); - end; else - do; - if move_score (move_index (ply)) < - move_score (best_move (ply)) then - best_move (ply) = move_index (ply); - end; - call retract_move(); - end; - end score_ply_moves; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - - stage: procedure recursive; - - declare i fixed static; - - ply = ply + 1; - if ply ~= 0 then move_color (ply) = -move_color (ply - 1); - stage_lst (ply) = max_ply; - stage_lim (ply) = ply + 2; - if stage_lim (ply) > max_stage then - stage_lim (ply) = max_stage; - call generate_moves(); - - - if ply ~= 0 then - if cur_piece (ply - 1) = white_king | - cur_piece (ply - 1) = black_king then - do; - move_score (best_move (ply)) = 0; - next = first_move (ply); - ply = ply - 1; - return; - end; - - - if ply < max_ply then - do max_ply = stage_lim (ply) repeat (stage_lim (ply) + 1) - while (max_ply <= stage_lst (ply)); - stage_lim (ply) = max_ply; - do i = first_move (ply) to last_move (ply); - move_score (i) = est_score (i); - end; - move_index (ply) = first_move (ply) - 1; - call score_ply_moves(); - call sort_moves(); - end; - next = first_move (ply); - max_ply = stage_lst (ply); - ply = ply - 1; - end stage; - - - -/**************************************************************** -* * -* * -* * -****************************************************************/ - - make_move: procedure (color); - declare color fixed (1); - - declare (to, from) fixed static; - - next = 0; - ply = -1; - max_ply = max_stage; - move_color (0) = color; - call stage(); - ply = 0; - to = move_to (best_move (0)); - from = move_from (best_move (0)); - cur_piece (0) = board (to); - board (to) = board (from); - board (from) = empty_square; - bonus (from) = 0; - bonus (to) = 0; - if board (to) = white_king | board (to) = black_king then - do; - if to = from + 2 then - do; - board (to - 1) = board (to) - 2; - board (to + 1) = empty_square; - bonus (to + 1) = 0; - end; else - if to = from - 2 then - do; - board (to + 1) = board (to) - 2; - board (to - 2) = empty_square; - bonus (to - 2) = 0; - end; - end; - call display_move (best_move (0)); - end make_move; - - declare (move_number, move_display) - fixed (7) static initial(1); - - put skip list('Chess Program Version 1.0'); - put skip list('Type Search Depth '); - get list(max_cap); - max_stage = max_cap; - put list('Type Number of Moves Between Displays '); - get list(move_display); - do while ('1'); - call make_move (white); - call make_move (black); - put skip; - move_number = move_number + 1; - if move_number > move_display then - do; - move_number = 1; - call display(); - end; - end; - - - end chess; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/COPY.PLI b/software/CPM/CPM23_PLI/COPY.PLI deleted file mode 100644 index 062be9d..0000000 --- a/software/CPM/CPM23_PLI/COPY.PLI +++ /dev/null @@ -1,19 +0,0 @@ -copy: - proc options(main); - dcl - (input,output) file; - - open file (input) stream env(b(8192)) - title('$1.$1'); - - open file (output) stream output env(b(8192)) - title('$2.$2'); - dcl - buff char(254) varying; - - do while('1'b); - read file (input) into (buff); - write file (output) from (buff); - end; - end copy; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/COPYLPT.PLI b/software/CPM/CPM23_PLI/COPYLPT.PLI deleted file mode 100644 index 89397eb..0000000 --- a/software/CPM/CPM23_PLI/COPYLPT.PLI +++ /dev/null @@ -1,77 +0,0 @@ -copy: procedure options(main); - dcl - (sysin, sourcefile, printfile) file; - dcl - (pagesize, pagewidth, - spaces, linenumber) fixed; - dcl - (line char(14), buff char(254)) varying; - - put list('^z File to Print Copy Program'); - - on endfile(sysin) - go to typeover; - - typeover: - put skip(5) list('How Many Lines Per Page? '); - get list(pagesize); - - put skip list('How Many Column Positions? '); - get skip list(pagewidth); - - on error(1) - begin; - put list('Invalid Number, Type Integer'); - go to getnumber; - end; - getnumber: - put skip list('Line Spacing (1=Single)? '); - get skip list(spaces); - revert error(1); - - put skip list('Destination Device/File: '); - get skip list(line); - - open file(printfile) print pagesize(pagesize) - linesize(pagewidth) title(line); - - on undefinedfile(sourcefile) - begin; - put skip list('"',line,'" isn''t a Valid Name'); - go to retry; - end; - retry: - put skip list('Source File to Print? '); - get list(line); - open file(sourcefile) stream title(line) - env(b(8000)); - - on endfile(sourcefile) - begin; - put file(printfile) page; - stop; - end; - - on endfile(printfile) - begin; - put skip list('^g^g^g^g Disk is Full'); - stop; - end; - - on endpage(printfile) - begin; - put file(printfile) page skip(2) - list('PAGE',pageno(printfile)); - put file(printfile) skip(4); - end; - - signal endpage(printfile); - do linenumber = 1 repeat(linenumber + 1); - get file (sourcefile) edit(buff) (a); - put file (printfile) - edit(linenumber,'|',buff) (f(5),x(1),a(2),a); - put file (printfile) skip(spaces); - end; - - end copy; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/CREATE.PLI b/software/CPM/CPM23_PLI/CREATE.PLI deleted file mode 100644 index 9cea6cb..0000000 --- a/software/CPM/CPM23_PLI/CREATE.PLI +++ /dev/null @@ -1,45 +0,0 @@ -create: - procedure options(main); - /* create name and address file */ - -%include 'record.dcl'; - - %replace - true by '1'b, - false by '0'b; - dcl - output file; - dcl - filename character(14) varying; - dcl - eofile bit(1) static initial(false); - - put list ('Name and Address Creation Program, File Name: '); - get list (filename); - - open file(output) stream output title(filename); - - do while (^eofile); - put skip(3) list('Name: '); - get list(name); - eofile = (name = 'EOF'); - if ^eofile then - do; - /* write prompt strings to console */ - put list('Address: '); - get list(addr); - put list('City, State, Zip: '); - get list(city, state, zip); - put list('Phone: '); - get list(phone); - - /* data in memory, write to output file */ - put file(output) - list(name,addr,city,state,zip,phone); - put file(output) skip; - end; - end; - put file(output) skip list('EOF'); - put file(output) skip; - end create; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DFACT.PLI b/software/CPM/CPM23_PLI/DFACT.PLI deleted file mode 100644 index f0fbcf7..0000000 --- a/software/CPM/CPM23_PLI/DFACT.PLI +++ /dev/null @@ -1,22 +0,0 @@ -f: - proc options(main); - dcl - i fixed; - do i = 0 repeat(i+1); - put skip list('Factorial(',i,')=',fact(i)); - end; - stop; - - fact: - proc (i) - returns(fixed dec(15,0)) recursive; - dcl - i fixed; - dcl - f fixed dec(15,0); - if i = 0 then - return (1); - return (decimal(i,15) * fact(i-1)); - end fact; - end f; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DIOCALLS.PLI b/software/CPM/CPM23_PLI/DIOCALLS.PLI deleted file mode 100644 index 63a7124..0000000 --- a/software/CPM/CPM23_PLI/DIOCALLS.PLI +++ /dev/null @@ -1,354 +0,0 @@ -diotst: - proc options(main); - /* external CP/M I/O entry points */ - /* (note: each source line begins with tab chars) */ -%include 'diomod.dcl'; - dcl - c char(1), - v char(254) var, - i fixed; - - - /********************************** - * * - * Fixed Location Tests: * - * MEMPTR, MEMSIZ, MEMWDS, * - * DFCB0, DFCB1, DBUFF * - * * - **********************************/ - dcl - memptrv ptr, - memsizv fixed, - (dfcb0v, dfcb1v, dbuffv) ptr, - command char(127) var based (dbuffv), - 1 fcb0 based(dfcb0v), - 2 drive fixed(7), - 2 name char(8), - 2 type char(3), - 2 extnt fixed(7), - 2 space (19) bit(8), - 2 cr fixed(7), - memory (0:0) based(memptrv) bit(8); - memptrv = memptr(); - memsizv = memsiz(); - dfcb0v = dfcb0(); - dfcb1v = dfcb1(); - dbuffv = dbuff(); - put edit ('Command Tail: ',command) (a); - put edit ('First Default File:', - fcb0.name,'.',fcb0.type) (skip,4a); - put edit ('dfcb0 ',unspec(dfcb0v), - 'dfcb1 ',unspec(dfcb1v), - 'dbuff ',unspec(dbuffv), - 'memptr',unspec(memptrv), - 'memsiz',unspec(memsizv), - 'memwds',memwds()) - (5(skip,a(7),b4),skip,a(7),f(6)); - put skip list('Clearing Memory'); - /* sample loop to clear mem */ - do i = 0 repeat(i+1) while (i^=memsizv-1); - memory (i) = '00'b4; - end; - - - /********************************** - * * - * REBOOT Test * - * * - **********************************/ - put skip list ('Reboot? (Y/N)'); - get list (c); - if translate(c,'Y','y') = 'Y' then - call reboot(); - - - /********************************** - * * - * RDCON, WRCON Test * - * * - **********************************/ - put list('Type Input, End with "$" '); - v = '^m^j'; - do while (substr(v,length(v)) ^= '$'); - v = v || rdcon(); - end; - put skip list('You Typed:'); - do i = 1 to length(v); - call wrcon(substr(v,i,1)); - end; - - - /********************************** - * * - * RDRDR and WRPUN Test * - * * - **********************************/ - put skip list('Reader to Punch Test?(Y/N)'); - get list (c); - if translate(c,'Y','y') = 'Y' then - do; - put skip list('Copying RDR to PUN until ctl-z'); - c = ' '; - do while (c ^= '^z'); - c = rdrdr(); - if c ^= '^z' then - call wrpun(c); - end; - end; - - - /********************************** - * * - * WRLST Test * - * * - **********************************/ - put list('List Output Test?(Y/N)'); - get list(c); - if translate(c,'Y','y') = 'Y' then - do i = 1 to length(v); - call wrlst(substr(v,i,1)); - end; - - - /********************************** - * * - * Direct I/O, CONOUT, CONINP * - * * - **********************************/ - put list - ('Direct I/O, Type Line, End with Line Feed'); - c = ' '; - do while (c ^= '^j'); - call conout(c); - c = coninp(); - end; - - - /********************************** - * * - * Direct I/O, Console Status * - * RDSTAT * - * * - **********************************/ - put skip list('Status Test, Type Character'); - do while (^rdstat()); - end; - /* clear the character */ - c = coninp(); - - - /********************************** - * * - * GETIO, SETIO IObyte * - * * - **********************************/ - dcl - iobyte bit(8); - iobyte = getio(); - put edit ('IObyte is ',iobyte, - ', New Value: ') (skip,a,b4,a); - get edit (iobyte) (b4(2)); - call setio(iobyte); - - - /********************************** - * * - * Buffered Write, WRSTR Test * - * * - **********************************/ - put list('Buffered Output Test:'); - /* "v" was previously filled by RDCON */ - call wrstr(addr(v)); - - - /********************************** - * * - * Buffered Read RDBUF Test * - * * - **********************************/ - dcl - 1 inbuff static, - 2 maxsize bit(8) init('80'b4), - 2 inchars char(127) var; - put skip list('Line Input, Type Line, End With Return'); - put skip; - call rdbuf(addr(inbuff)); - put skip list('You Typed: ',inchars); - - - /********************************** - * * - * Console BREAK Test * - * * - **********************************/ - put skip list('Console Break Test, Type Character'); - do while(^break()); - end; - c = rdcon(); - - - /********************************** - * * - * Version Number VERS Test * - * * - **********************************/ - dcl - version bit(16); - version = vers(); - if substr(version,1,8) = '00'b4 then - put skip list('CP/M'); else - put skip list('MP/M'); - put edit(' Version ',substr(version,9,4), - '.',substr(version,13,4)) (a,b4,a,b4); - - - /********************************** - * * - * Disk System RESET Test * - * * - **********************************/ - put skip list('Resetting Disk System'); - call reset(); - - - /********************************** - * * - * Disk SELECT Test * - * * - **********************************/ - put skip list('Select Disk # '); - get list(i); - call select(i); - - /********************************** - * * - * Note: The OPEN, CLOSE, SEAR, * - * SEARN, DELETE, RDSEQ, * - * WRSEQ, MAKE, and RENAME * - * functions are tested in the * - * DIOCOPY program * - * * - **********************************/ - - /********************************** - * * - * LOGVEC and CURDSK * - * * - **********************************/ - put skip list ('Login Vector', - logvec(),'Current Disk', - curdsk()); - - /********************************** - * * - * See DIOCOPY for SETDMA Function * - * * - **********************************/ - - /********************************** - * * - * Allocate Vector ALLVEC Test * - * * - **********************************/ - dcl - alloc (0:30) bit(8) - based (allvec()), - allvecp ptr; - allvecp = allvec(); - put edit('Alloc Vector at ', - unspec(allvecp),':', - (alloc(i) do i=0 to 30)) - (skip,a,b4,a,254(skip,4(b,x(1)))); - - /********************************** - * * - * Note: the following functions * - * apply to version 2.0 or newer. * - * * - **********************************/ - - /********************************** - * * - * WPDISK Test * - * * - **********************************/ - put skip list('Write Protect Disk?(Y/N)'); - get list(c); - if translate(c,'Y','y') = 'Y' then - call wpdisk(); - - /********************************** - * * - * ROVEC Test * - * * - **********************************/ - put skip list('Read/Only Vector is',rovec()); - - /********************************** - * * - * Disk Parameter Block Decoding * - * Using GETDPB * - * * - **********************************/ - dcl - dpbp ptr, - 1 dpb based (dpbp), - 2 spt fixed(15), - 2 bsh fixed(7), - 2 blm bit(8), - 2 exm bit(8), - 2 dsm bit(16), - 2 drm bit(16), - 2 al0 bit(8), - 2 al1 bit(8), - 2 cks bit(16), - 2 off fixed(7); - dpbp = getdpb(); - put edit('Disk Parameter Block:', - 'spt',spt,'bsh',bsh,'blm',blm, - 'exm',exm,'dsm',dsm,'drm',drm, - 'al0',al0,'al1',al1,'cks',cks, - 'off',off) - (skip,a,2(skip,a(4),f(6)), - 4(skip,a(4),b4), - skip,2(a(4),b,x(1)), - skip,a(4),b4, - skip,a(4),f(6)); - - /********************************** - * * - * Test Get/Set user Code * - * GETUSR, SETUSR * - * * - **********************************/ - put skip list - ('User is',getusr(),', New User:'); - get list(i); - call setusr(i); - - /********************************** - * * - * FILSIZ, SETREC, * - * RDRAN, WRRAN, WRRANZ are * - * tested in DIORAND * - * * - **********************************/ - - /********************************** - * * - * Test Drive Reset RESDRV * - * (version 2.2 or newer) * - * * - **********************************/ - dcl - drvect bit(16); - put list('Drive Reset Vector:'); - get list(drvect); - call resdrv(drvect); - - /********************************** - * * - * * - **********************************/ - end diotst; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DIOCOPY.PLI b/software/CPM/CPM23_PLI/DIOCOPY.PLI deleted file mode 100644 index 39d629e..0000000 --- a/software/CPM/CPM23_PLI/DIOCOPY.PLI +++ /dev/null @@ -1,137 +0,0 @@ -diocopy: - proc options(main); - /* file to file copy program */ - /* (all source lines begin with tabs) */ - - %replace - bufwds by 64, /* words per buffer */ - quest by 63, /* ASCII '?' */ - true by '1'b, - false by '0'b; - -%include 'diomod.dcl'; - - dcl - 1 destfile, -%include 'fcb.dcl'; - - dcl - dfcb0p ptr, - 1 sourcefile based(dfcb0p), -%include 'fcb.dcl'; - - dcl - 1 dfcb1file based(dfcb1()), -%include 'fcb.dcl'; - - dcl - 1 renfile, -%include 'fcb.dcl'; - - dcl - answer char(1), - extcnt fixed(7); - - dcl - /* buffer management */ - eofile bit(8), - i fixed(15), - m fixed(15), - nbuffs fixed(15), - memory (0:0) bit(16) based(memptr()); - - /* compute number of buffs, 64 words each */ - nbuffs = divide(memwds(),bufwds,15); - if nbuffs = 0 then - do; - put skip list('No Buffer Space'); - call reboot(); - end; - - /* initialize fcb's */ - dfcb0p = dfcb0(); - destfile = dfcb1file; - - /* copy fcb to rename file, count extents */ - renfile = destfile; - /* search all extents by inserting '?' */ - renfile.fext = quest; - if sear(addr(renfile)) ^= -1 then - do; - extcnt = 1; - do while(searn() ^= -1); - extcnt = extcnt + 1; - end; - put edit - ('OK to Delete ',extcnt,' Extent(s)?(Y/N)') - (skip,a,f(3),a); - get list(answer); - if ^ (answer = 'Y' ! answer = 'y') then - call reboot(); - end; - - /* destination file will be deleted later */ - destfile.ftype = '$$$'; - /* delete any existing x.$$$ file */ - call delete(addr(destfile)); - - /* open the source file, if possible */ - if open(addr(sourcefile)) = -1 then - do; - put skip list('No Source File'); - call reboot(); - end; - - /* source file opened, create $$$ file */ - destfile.fext = 0; - destfile.crec = 0; - if make(addr(destfile)) = -1 then - do; - put skip list('No Directory Space'); - call reboot(); - end; - - /* $$$ temp file created, now copy from source */ - eofile = false; - do while (^eofile); - m = 0; - /* fill buffers */ - do i = 0 repeat (i+1) while (i= '22'b4; - - /* read and process file name */ - put skip list('Data Base Name: '); - get list(fn); - fn = translate(fn,upper,lower); - - /* process optional drive prefix */ - i = index(fn,':'); - if i = 0 then - drive = 0; - else - if i = 2 then - do; - /* convert character to drive code */ - drive = index(upper,substr(fn,1,1)); - if drive = 0 ! drive > 16 then - do; - put skip list('Bad Drive Name'); - stop; - end; - fn = substr(fn,i+1); - end; - - /* get file name and optional type */ - i = index(fn,'.'); - if i = 0 then - do; - /* no file type specified, use .DAT */ - fname = fn; - ftype = 'DAT'; - end; - else - do; - fname = substr(fn,1,i-1); - ftype = substr(fn,i+1); - end; - - /* clear the extent field */ - fext = 0; - - if open(addr(database)) = -1 then - do; - put skip list('Creating New Database'); - if make(addr(database)) = -1 then - do; - put skip list('No Directory Space'); - stop; - end; - end; - else - do; - call filsiz(addr(database)); - put skip list('File Size:',rrec,' Records'); - end; - - /* main processing loop */ - do while('1'b); - call setrec(addr(database)); - put skip list('Current Record',rrec); - put skip list('Read(0),Write(1),Quit(2)? '); - get list(mode); - if mode < 2 then - do; - put skip list('Record Number? '); - get list(rrec); - rovf = 0; - end; - if mode = 0 then - do; - code = rdran(addr(database)); - if code = 0 then - do; - if bitbuf(1) = '00'b4 then - put skip list('Zero Record'); - else - put skip list(buffer); - end; - else - put skip list('Return Code',code); - end; - else - if mode = 1 then - do; - put skip list('Data: '); - get list(buffer); - if zerofill then - code = wrranz(addr(database)); - else - code = wrran (addr(database)); - if code ^= 0 then - put skip list('Return Code',code); - end; - else - if mode = 2 then - do; - if close(addr(database)) = -1 then - put skip list('Read/Only'); - stop; - end; - end; - end diorand; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DIV2.ASM b/software/CPM/CPM23_PLI/DIV2.ASM deleted file mode 100644 index c639fda..0000000 --- a/software/CPM/CPM23_PLI/DIV2.ASM +++ /dev/null @@ -1,52 +0,0 @@ - title 'division by power of two' - public div2 - extrn ?signal -; entry: -; p1 -> fixed(7) power of two -; p2 -> floating point number -; exit: -; p1 -> (unchanged) -; p2 -> p2 / (2**p1) -div2: ;HL = .low(.p1) - mov e,m ;low(.p1) - inx h ;HL = .high(.p1) - mov d,m ;DE = .p1 - inx h ;HL = .low(p2) - ldax d ;a = p1 (power of two) - mov e,m ;low(.p2) - inx h ;HL = .high(.p2) - mov d,m ;DE = .p2 - xchg ;HL = .p2 -; -; A = power of 2, HL = .low byte of fp num - inx h ;to middle of mantissa - inx h ;to high byte of mantissa - inx h ;to exponent byte - inr m - dcr m ;p2 already zero? - rz ;return if so -dby2: ;divide by two - ora a ;counted power of 2 to zero? - rz ;return if so - dcr a ;count power of two down - dcr m ;count exponent down - jnz dby2 ;loop again if no underflow -; -;underflow occurred, signal underflow condition - lxi h,siglst;signal parameter list - call ?signal ;signal underflow - ret ;normally, no return -; - dseg -siglst: dw sigcod ;address of signal code - dw sigsub ;address of subcode - dw sigfil ;address of file code - dw sigaux ;address of aux message -; end of parameter vector, start of params -sigcod: db 3 ;03 = underflow -sigsub: db 128 ;arbitrary subcode for id -sigfil: dw 0000 ;no associated file name -sigaux: dw undmsg ;0000 if no aux message -undmsg: db 32,'Underflow in Divide by Two',0 - end - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DPOLY.PLI b/software/CPM/CPM23_PLI/DPOLY.PLI deleted file mode 100644 index 5278a9b..0000000 --- a/software/CPM/CPM23_PLI/DPOLY.PLI +++ /dev/null @@ -1,30 +0,0 @@ -poly: - procedure options(main); - - /* evaluate polynomial */ - - %replace - true by '1'b; - dcl - (x,y,z) fixed decimal(15,4); - - do while(true); - put skip(2) list('Type x,y,z: '); - get list(x,y,z); - - if x = 0 & y = 0 & z = 0 then - stop; - - put skip list(' 2'); - put skip list(' x + 2y + z =',p(x,y,z)); - end; - - p: - proc (x,y,z) returns (fixed decimal(15,4)); - dcl - (x,y,z) fixed decimal(15,4); - return (x * x + 2 * y + z); - end p; - - end poly; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DTEST.PLI b/software/CPM/CPM23_PLI/DTEST.PLI deleted file mode 100644 index 55f22e4..0000000 --- a/software/CPM/CPM23_PLI/DTEST.PLI +++ /dev/null @@ -1,14 +0,0 @@ -dtest: - proc options(main); - dcl - div2 entry(fixed(7),float), - i fixed(7), - f float; - - do i = 0 by 1; - f = 100; - call div2(i,f); - put skip list('100 / 2 **',i,'=',f); - end; - end dtest; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DUMP.PLI b/software/CPM/CPM23_PLI/DUMP.PLI deleted file mode 100644 index 174242c..0000000 --- a/software/CPM/CPM23_PLI/DUMP.PLI +++ /dev/null @@ -1,27 +0,0 @@ -dump: - proc options(main); - /* dump file in hex at terminal */ - dcl - sysprint file, - input file; - dcl - bit(254) bit(8), - c char, - i fixed, - ibuff char(254) varying; - open file(input) stream title('$1.$1'); - open file(sysprint) stream output - linesize(78) pagesize(0) title('$con'); - on endfile(input) - stop; - do while('1'b); - read file(input) into(ibuff); - do i = 1 to length(ibuff); - c = substr(ibuff,i,1); - bit(i) = unspec(c); - end; - put edit((bit(i) do i = 1 to length(ibuff))) - (b4(2)); - end; - end dump; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/DUMP2.PLI b/software/CPM/CPM23_PLI/DUMP2.PLI deleted file mode 100644 index a3e337a..0000000 --- a/software/CPM/CPM23_PLI/DUMP2.PLI +++ /dev/null @@ -1,41 +0,0 @@ -dump: proc options(main); - %replace - items by 16; - dcl - sysprint file, - input file; - dcl - (i, j) fixed, - buff (128) bit(8), - c char(1), - char char(items), - record dec(5); - - on endfile(input) - stop; - - open file(input) record keyed title('$1.$1') - env (f(128),b(4000)); - open file(sysprint) stream output title('$2.$2') - env (b(4000)); - - do record = 0 by 1; - read file(input) into (buff); - do i = 0 to 127 by items; - do j = 1 to items; - if buff(i+j) < '20'b4 then - c = '.'; else - unspec(c) = buff(i+j); - substr(char,j,1) = c; - end; - if i = 0 then - put edit(record,':') (skip(2),f(5),a); - else - put edit(' ') (skip,a); - put edit((' ',buff(i+j) do j = 1 to items)) - (a,b4(2)); - put edit(' ',char) (a); - end; - end; - end dump; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/ENTER.PLI b/software/CPM/CPM23_PLI/ENTER.PLI deleted file mode 100644 index 89a0c30..0000000 --- a/software/CPM/CPM23_PLI/ENTER.PLI +++ /dev/null @@ -1,56 +0,0 @@ -enter: - proc options(main); - - %replace - true by '1'b, - false by '0'b; - - dcl - 1 employee static, - 2 name char(30) varying, - 2 addr, - 3 street char(30) varying, - 3 city char(10) varying, - 3 state char(7) varying, - 3 zip fixed dec(5), - 2 age fixed dec(3), - 2 wage fixed dec(5,2), - 2 hours fixed dec(5,1); - - dcl - 1 default static, - 2 street char (30) varying - initial('(no street)'), - 2 city char(10) varying - initial('(no city)'), - 2 state char(7) varying - initial('(no st)'), - 2 zip fixed dec(5) - initial(00000); - dcl - emp file; - - open file(emp) keyed output environment(f(100),b(8000)) - title ('$1.EMP'); - - do while(true); - put list('Employee: '); - get list(name); - if name = 'EOF' then - do; - call write(); - stop; - end; - addr = default; - put list (' Age, Wage: '); - get list (age,wage); - hours = 0; - call write(); - end; - - write: - procedure; - write file(emp) from(employee); - end write; - end enter; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/EPOLY.PLI b/software/CPM/CPM23_PLI/EPOLY.PLI deleted file mode 100644 index 90457d7..0000000 --- a/software/CPM/CPM23_PLI/EPOLY.PLI +++ /dev/null @@ -1,38 +0,0 @@ -poly: - procedure options(main); - - /* evaluate polynomial */ - - %replace - false by '0'b, - true by '1'b; - dcl - (x,y,z) float binary; - - dcl - eofile bit(1) static initial(false), - sysin file; - - on endfile(sysin) - eofile = true; - - do while(true); - put skip(2) list('Type x,y,z: '); - get list(x,y,z); - - if eofile then - stop; - - put skip list(' 2'); - put skip list(' x + 2y + z =',p(x,y,z)); - end; - - p: - proc (x,y,z) returns (float binary); - dcl - (x,y,z) float binary; - return (x * x + 2 * y + z); - end p; - - end poly; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/EXPR1.PLI b/software/CPM/CPM23_PLI/EXPR1.PLI deleted file mode 100644 index fb1d61e..0000000 --- a/software/CPM/CPM23_PLI/EXPR1.PLI +++ /dev/null @@ -1,61 +0,0 @@ -expression: - proc options(main); - dcl - sysin file, - value float, - token char(10) var; - - on endfile(sysin) - stop; - - on error(1) - /* conversion or signal */ - begin; - put skip list('Invalid Input at ',token); - get skip; - go to restart; - end; - - restart: - do while('1'b); - put skip(3) list('Type expression: '); - value = exp(); - put skip list('Value is:',value); - end; - - gnt: - proc; - get list(token); - end gnt; - - exp: - proc returns(float binary) recursive; - dcl x float binary; - call gnt(); - if token = '(' then - do; - x = exp(); - call gnt(); - if token = '+' then - x = x + exp(); - else - if token = '-' then - x = x - exp(); - else - if token = '*' then - x = x * exp(); - else - if token = '/' then - x = x / exp(); - else - signal error(1); - call gnt(); - if token ^= ')' then - signal error(1); - end; - else - x = token; - return(x); - end exp; - end expression; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/EXPR2.PLI b/software/CPM/CPM23_PLI/EXPR2.PLI deleted file mode 100644 index 0781e4a..0000000 --- a/software/CPM/CPM23_PLI/EXPR2.PLI +++ /dev/null @@ -1,91 +0,0 @@ -expression: - proc options(main); - - %replace - true by '1'b; - - dcl - sysin file, - value float, - (token char(10), line char(80)) varying - static initial(''); - - on endfile(sysin) - stop; - - on error(1) - /* conversion or signal */ - begin; - put skip list('Invalid Input at ',token); - token = ''; line = ''; - go to restart; - end; - - restart: - - do while('1'b); - put skip(3) list('Type expression: '); - value = exp(); - put edit('Value is: ',value) (skip,a,f(10,4)); - end; - - gnt: - proc; - dcl - i fixed; - - line = substr(line,length(token)+1); - do while(true); - if line = '' then - get edit(line) (a); - i = verify(line,' '); - if i = 0 then - line = ''; - else - do; - line = substr(line,i); - i = verify(line,'0123456789.'); - if i = 0 then - token = line; - else - if i = 1 then - token = substr(line,1,1); - else - token = substr(line,1,i-1); - return; - end; - end; - end gnt; - - exp: - proc returns(float binary) recursive; - dcl x float binary; - call gnt(); - if token = '(' then - do; - x = exp(); - call gnt(); - if token = '+' then - x = x + exp(); - else - if token = '-' then - x = x - exp(); - else - if token = '*' then - x = x * exp(); - else - if token = '/' then - x = x / exp(); - else - signal error(1); - call gnt(); - if token ^= ')' then - signal error(1); - end; - else - x = token; - return(x); - end exp; - - end expression; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FACT.PLI b/software/CPM/CPM23_PLI/FACT.PLI deleted file mode 100644 index 8aac126..0000000 --- a/software/CPM/CPM23_PLI/FACT.PLI +++ /dev/null @@ -1,17 +0,0 @@ -f: - proc options(main); - dcl - i fixed; - do i = 0 repeat(i+1); - put skip list('factorial(',i,')=',fact(i)); - end; - stop; - - fact: - procedure(i) returns(fixed) recursive; - dcl i fixed; - if i = 0 then return (1); - return (i * fact(i-1)); - end fact; - end f; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FCB.DCL b/software/CPM/CPM23_PLI/FCB.DCL deleted file mode 100644 index 2992944..0000000 --- a/software/CPM/CPM23_PLI/FCB.DCL +++ /dev/null @@ -1,16 +0,0 @@ - 2 name1, - 3 drive fixed(7), /* drive number */ - 3 fname char(8), /* file name */ - 3 ftype char(3), /* file type */ - 3 fext fixed(7), /* file extent */ - 3 space (3) bit(8),/* filler */ - 2 name2, /* used in rename */ - 3 drive2 fixed(7), - 3 fname2 char(8), - 3 ftype2 char(3), - 3 fext2 fixed(7), - 3 space2 (3) bit(8), - 2 crec fixed(7), /* current record */ - 2 rrec fixed(15), /* random record */ - 2 rovf fixed(7); /* random rec overflow */ - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FDIV2.ASM b/software/CPM/CPM23_PLI/FDIV2.ASM deleted file mode 100644 index 0c6a16e..0000000 --- a/software/CPM/CPM23_PLI/FDIV2.ASM +++ /dev/null @@ -1,63 +0,0 @@ - title 'div by power of two (function)' - public fdiv2 - extrn ?signal -; entry: -; p1 -> fixed(7) power of two -; p2 -> floating point number -; exit: -; p1 -> (unchanged) -; p2 -> (unchanged) -; stack: p2 / (2 ** p1) -fdiv2: ;HL = .low(.p1) - mov e,m ;low(.p1) - inx h ;HL = .high(.p1) - mov d,m ;DE = .p1 - inx h ;HL = .low(p2) - ldax d ;a = p1 (power of two) - mov e,m ;low(.p2) - inx h ;HL = .high(.p2) - mov d,m ;DE = .p2 - xchg ;HL = .p2 -; -; A = power of 2, HL = .low byte of fp num - mov e,m ;E = low mantissa - inx h ;to middle of mantissa - mov d,m ;D = middle mantissa - inx h ;to high byte of mantissa - mov c,m ;C = high mantissa - inx h ;to exponent byte - mov b,m ;B = exponent - inr b ;B = 00? - dcr b ;becomes 00 if so - jz fdret ;to return from float div -dby2: ;divide by two - ora a ;counted power of 2 to zero? - jz fdret ;return if so - dcr a ;count power of two down - dcr b ;count exponent down - jnz dby2 ;loop again if no underflow -; -;underflow occurred, signal underflow condition - lxi h,siglst;signal parameter list - call ?signal ;signal underflow - lxi b,0 ;clear to zero - lxi d,0 ;for default return -; -fdret: pop h ;recall return address - push b ;save high order fp num - push d ;save low order fp num - pchl ;return to calling routine -; - dseg -siglst: dw sigcod ;address of signal code - dw sigsub ;address of subcode - dw sigfil ;address of file code - dw sigaux ;address of aux message -; end of parameter vector, start of params -sigcod: db 3 ;03 = underflow -sigsub: db 128 ;arbitrary subcode for id -sigfil: dw 0000 ;no associated file name -sigaux: dw undmsg ;0000 if no aux message -undmsg: db 32,'Underflow in Divide by Two',0 - end - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FDTEST.PLI b/software/CPM/CPM23_PLI/FDTEST.PLI deleted file mode 100644 index 908c503..0000000 --- a/software/CPM/CPM23_PLI/FDTEST.PLI +++ /dev/null @@ -1,14 +0,0 @@ -dtest: - proc options(main); - dcl - fdiv2 entry(fixed(7),float) - returns(float), - i fixed(7), - f float; - - do i = 0 by 1; - put skip list('100 / 2 **',i,'=', - fdiv2(i,100)); - end; - end dtest; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FFACT.PLI b/software/CPM/CPM23_PLI/FFACT.PLI deleted file mode 100644 index 617b6db..0000000 --- a/software/CPM/CPM23_PLI/FFACT.PLI +++ /dev/null @@ -1,18 +0,0 @@ -f: - proc options(main); - dcl - i fixed; - do i = 0 repeat(i+1); - put skip list('factorial(',i,')=',fact(i)); - end; - stop; - - fact: - procedure(i) returns(float) recursive; - dcl i fixed; - if i = 0 then - return(1); - return (i * fact(i-1)); - end fact; - end f; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FIB.PLI b/software/CPM/CPM23_PLI/FIB.PLI deleted file mode 100644 index 8e0502f..0000000 --- a/software/CPM/CPM23_PLI/FIB.PLI +++ /dev/null @@ -1,18 +0,0 @@ -fibonacci: - proc options(main); - dcl i fixed; - do i = 0 to 100; - put list(fib(i)); - end; - - fib: - proc(n) returns(fixed) recursive; - dcl n fixed; - if n = 0 then - return(1); - if n = 1 then - return(1); - return(fib(n-1) + fib(n-2)); - end fib; - end fibonacci; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/FSCAN.PLI b/software/CPM/CPM23_PLI/FSCAN.PLI deleted file mode 100644 index b1a5956..0000000 --- a/software/CPM/CPM23_PLI/FSCAN.PLI +++ /dev/null @@ -1,44 +0,0 @@ -fscan: - proc options(main); - %replace - true by '1'b; - dcl - token char(80) var - static initial(''); - - gnt: - proc; - dcl - i fixed, - line char(80) var - static initial(''); - - line = substr(line,length(token)+1); - do while(true); - if line = '' then - get edit(line) (a); - i = verify(line,' '); - if i = 0 then - line = ''; - else - do; - line = substr(line,i); - i = verify(line,'0123456789.'); - if i = 0 then - token = line; - else - if i = 1 then - token = substr(line,1,1); - else - token = substr(line,1,i-1); - return; - end; - end; - end gnt; - - do while(true); - call gnt; - put edit(''''!!token!!'''') (x(1),a); - end; - end fscan; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/GOTO.PLI b/software/CPM/CPM23_PLI/GOTO.PLI deleted file mode 100644 index f2440ec..0000000 --- a/software/CPM/CPM23_PLI/GOTO.PLI +++ /dev/null @@ -1,37 +0,0 @@ -main: - proc options(main); - dcl - i fixed, - (x, y, z(3)) label; - x = lab1; - y = x; - - go to lab1; - go to x; - go to y; - - call p(lab2); - - do i = 1 to 3; - z(i) = c(1); - end; - - i = 2; - go to z(i); - go to c(i); - - c(1):; - c(2):; - c(3):; - - lab1:; - lab2:; - - p: - proc(g); - dcl - g label; - go to g; - end p; - end main; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/GRADE.PLI b/software/CPM/CPM23_PLI/GRADE.PLI deleted file mode 100644 index cd62a04..0000000 --- a/software/CPM/CPM23_PLI/GRADE.PLI +++ /dev/null @@ -1,38 +0,0 @@ -average: - proc options (main); - /* grade averaging program */ - - dcl - sysin file, - (grade,total,n) fixed; - - on error (1) - /* conversion */ - begin; - put skip list('Bad Value, Try Again.'); - get skip; - go to retry; - end; - - on endfile (sysin) - begin; - if n ^= 0 then - put skip list - ('Average is',total/n); - stop; - end; - - put skip list - ('Type a List of Grades, End with Ctl-Z'); - total = 0; - n = 0; - - retry: - put skip; - do while('1'b); - get list (grade); - total = total + grade; - n = n + 1; - end; - end average; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/IFACT.PLI b/software/CPM/CPM23_PLI/IFACT.PLI deleted file mode 100644 index b865211..0000000 --- a/software/CPM/CPM23_PLI/IFACT.PLI +++ /dev/null @@ -1,14 +0,0 @@ -f: - proc options(main); - dcl - (i,n,fact) fixed; - do i = 0 by 1; - fact = 1; - do n = i to 1 by -1; - fact = n * fact; - end; - put edit('factorial(',i,')=',fact) - (skip, a,f(2),a,f(7)); - end; - end f; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/INVERT1.PLI b/software/CPM/CPM23_PLI/INVERT1.PLI deleted file mode 100644 index 17b3baf..0000000 --- a/software/CPM/CPM23_PLI/INVERT1.PLI +++ /dev/null @@ -1,61 +0,0 @@ -inv: - procedure options(main); - %replace - true by '1'b, - false by '0'b; -%include 'matsize.lib'; - dcl - mat(maxrow,maxcol) float (24); - dcl - (i,j,n,m) fixed(6); - dcl - var char(26) static initial - ('abcdefghijklmnopqrstuvwxyz'); - dcl - invert entry - ((maxrow,maxcol) float(24), fixed(6), fixed(6)); - - put list('Solution of Simultaneous Equations'); - do while(true); - put skip(2) list('Type rows, columns: '); - get list(n); - if n = 0 then - stop; - - get list(m); - if n > maxrow ! m > maxcol then - put skip list('Matrix is Too Large'); - else - do; - put skip list('Type Matrix of Coefficients'); - put skip; - do i = 1 to n; - put list('Row',i,':'); - get list((mat(i,j) do j = 1 to n)); - end; - - put skip list('Type Solution Vectors'); - put skip; - do j = n + 1 to m; - put list('Variable',substr(var,j-n,1),':'); - get list((mat(i,j) do i = 1 to n)); - end; - - call invert(mat,n,m); - put skip(2) list('Solutions:'); - do i = 1 to n; - put skip list(substr(var,i,1),'='); - put edit((mat(i,j) do j = 1 to m-n)) - (f(8,2)); - end; - - put skip(2) list('Inverse Matrix is'); - do i = 1 to n; - put skip edit - ((mat(i,j) do j = m-n+1 to m)) - (x(3),6f(8,2),skip); - end; - end; - end; -end inv; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/INVERT2.PLI b/software/CPM/CPM23_PLI/INVERT2.PLI deleted file mode 100644 index cc8d067..0000000 --- a/software/CPM/CPM23_PLI/INVERT2.PLI +++ /dev/null @@ -1,25 +0,0 @@ -invert: - proc (a,r,c); -%include 'matsize.lib'; - dcl - (d, a(maxrow,maxcol)) float (24), - (i,j,k,l,r,c) fixed (6); - do i = 1 to r; - d = a(i,1); - do j = 1 to c - 1; - a(i,j) = a(i,j+1)/d; - end; - a(i,c) = 1/d; - do k = 1 to r; - if k ^= i then - do; - d = a(k,1); - do l = 1 to c - 1; - a(k,l) = a(k,l+1) - a(i,l) * d; - end; - a(k,c) = - a(i,c) * d; - end; - end; - end; -end invert; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/KEYFILE.PLI b/software/CPM/CPM23_PLI/KEYFILE.PLI deleted file mode 100644 index 582ac9e..0000000 --- a/software/CPM/CPM23_PLI/KEYFILE.PLI +++ /dev/null @@ -1,30 +0,0 @@ -keypr: - proc options(main); - - /* create key from employee file */ - - dcl - 1 employee static, - 2 name char(30) varying; - - dcl - (input, keys) file; - - dcl - k fixed; - - open title('$1.emp') keyed - env(f(100),b(10000)) file(input); - - open file (keys) stream output - linesize (60) title('$1.key'); - - do while('1'); - read file(input) into(employee) keyto(k); - put skip list(k,name); - put file(keys) list(name,k); - if name = 'EOF' then - stop; - end; - end keypr; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/LIB.COM b/software/CPM/CPM23_PLI/LIB.COM deleted file mode 100644 index d9e6a5c16226f34e13952861c44395329e5c312c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 diff --git a/software/CPM/CPM23_PLI/LINK.COM b/software/CPM/CPM23_PLI/LINK.COM deleted file mode 100644 index 0d3d599430aa0044bed9fadd2891fb5f3baa0725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13056 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 E0g#*aumAu6 diff --git a/software/CPM/CPM23_PLI/MACASM.PLI b/software/CPM/CPM23_PLI/MACASM.PLI deleted file mode 100644 index 777f99d..0000000 --- a/software/CPM/CPM23_PLI/MACASM.PLI +++ /dev/null @@ -1,154 +0,0 @@ -xl: - proc options(main); - /************************************************ - * (Another Sample Program....) * - * * - * this program aids in the translation of files * - * in the microsoft assembly language format, to * - * a form acceptable by RMAC. In particular, * - * RMAC requires quotes around the title string * - * and does not allow parentheses around the * - * operand of the NAME pseudo-op. Although these* - * differences only produce warnings, this pro- * - * gram can be used to automatically change these* - * elements. Note that upper case letters are * - * also changed to lower case outside of string * - * quotes. The program is initiated by typing: * - * MACASM commandfile listing * - * where "commandfile" is a file containing a * - * list of file names to process, with the file * - * type MAC, and "listing" is the name of a * - * file to receive a listing of the changes. * - * the source files must be on drive A, and the * - * resulting files, with the new file type ASM * - * are placed on drive B (this can be easily * - * generalized by making simple changes to the * - * program). Note that the listing file can be * - * $LST which sends output to the printer. * - * * - ************************************************/ - %replace - true by '1'b, - false by '0'b; - dcl - (input, output, command, listing) file, - i fixed, - column fixed, - c char, - line char(254) var, - lineno fixed, - title char (254) var; - open file (listing) print title('$2.$2'); - open file (command) title('$1.$1'); - on endfile(command) - stop; - on undefinedfile(input) - begin; - put skip list('***** file not found *****'); - go to retry; - end; - - retry: - do while('1'b); - get file(command) list(title); - open file (input) title('a:'||title||'.mac') - env(b(5000)); - open file (output) stream output - title('b:'||title||'.asm') env(b(5000)); - put file(listing) skip list('Processing:',title); - on endfile(input) - go to nextfile; - do lineno = 1 by 1; - get file(input) edit(line) (a); - if translate() then - do; - put skip file(listing) - list(lineno,':'); - column = 1; - do i = 1 to length(line); - c = substr(line,i,1); - if c = '^i' then - do while(mod(column,8)^=0); - put file(listing) edit(' ')(a); - column = column + 1; - end; - else - do; - put file(listing) edit(c) (a); - column = column + 1; - end; - end; - end; - put file(output) edit(line) (a); - put file(output) skip; - end; - nextfile: - put skip(3) file(listing); - revert endfile(input); - close file(input); - close file(output); - end; - - translate: - proc returns(bit); - /* translate current line */ - dcl - (i,j) fixed, - xl bit, - linelen fixed; - xl = lowercase(); - i = index(line,'name^i'); - if i ^= 0 then - do; - /* look for ('xxx') */ - i = i + 5; - if substr(line,i,1) = '(' then - do; - line = substr(line,1,length(line)-1); - line = substr(line,1,i-1) || - substr(line,i+1); - end; - xl = true; - end; - i = index(line,'title^i'); - if i ^= 0 then - do; - /* look for missing parens */ - i = i + 6; - if substr(line,i,1) ^= '''' then - line = substr(line,1,i-1) || - '''' || - substr(line,i) || ''''; - xl = true; - end; - return (xl); - end translate; - - lowercase: - proc returns(bit); - /* translate to lower case */ - dcl - q bit, - i fixed, - rc fixed, - c char, - lc bit; - lc = false; - q = false; - do i = 1 to length(line); - c = substr(line,i,1); - if c = '''' then - q = ^q; - rc = rank(c) - rank('A'); - if ^q then - if rc >= 0 then - if rc <= 25 then - do; - lc = true; - substr(line,i,1) = ascii(rc+rank('a')); - end; - end; - return (lc); - end lowercase; - end xl; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/MATSIZ.LIB b/software/CPM/CPM23_PLI/MATSIZ.LIB deleted file mode 100644 index ab5d02a..0000000 --- a/software/CPM/CPM23_PLI/MATSIZ.LIB +++ /dev/null @@ -1,4 +0,0 @@ - %replace - maxrow by 26, - maxcol by 40; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/MATSIZE.LIB b/software/CPM/CPM23_PLI/MATSIZE.LIB deleted file mode 100644 index ab5d02a..0000000 --- a/software/CPM/CPM23_PLI/MATSIZE.LIB +++ /dev/null @@ -1,4 +0,0 @@ - %replace - maxrow by 26, - maxcol by 40; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/NET.PLI b/software/CPM/CPM23_PLI/NET.PLI deleted file mode 100644 index 054a35e..0000000 --- a/software/CPM/CPM23_PLI/NET.PLI +++ /dev/null @@ -1,217 +0,0 @@ -graph: - proc options(main); - %replace - true by '1'b, - false by '0'b, - citysize by 20, - infinite by 32767; - dcl - sysin file; - dcl - 1 city_node based, - 2 city_name char(citysize) var, - 2 total_dist fixed, - 2 investigate bit, - 2 city_list ptr, - 2 route_head ptr; - dcl - 1 route_node based, - 2 next_city ptr, - 2 route_dist fixed, - 2 route_list ptr; - dcl - city_head ptr; - - do while(true); - call setup(); - if city_head = null then - stop; - call print_all(); - call print_paths(); - call free_all(); - end; - - setup: - proc; - dcl - dist fixed, - (city1, city2) char(citysize) var; - on endfile(sysin) go to eof; - city_head = null; - put skip list('Type "City1, Dist, City2"'); - put skip; - do while(true); - get list(city1, dist, city2); - call connect(city1, dist, city2); - call connect(city2, dist, city1); - end; - eof: - end setup; - - connect: - proc(source_city, dist, dest_city); - dcl - source_city char(citysize) var, - dist fixed, - dest_city char(citysize) var; - dcl - (r, s, d) ptr; - s = find(source_city); - d = find(dest_city); - allocate route_node set (r); - r->route_dist = dist; - r->next_city = d; - r->route_list = s->route_head; - s->route_head = r; - end connect; - - find: - proc(city) returns(ptr); - dcl - city char(citysize) var; - dcl - (p, q) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - if city = p->city_name then - return(p); - end; - allocate city_node set(p); - p->city_name = city; - p->city_list = city_head; - city_head = p; - p->total_dist = infinite; - p->route_head = null; - return(p); - end find; - - print_all: - proc; - dcl - (p, q) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - put skip list(p->city_name,':'); - do q = p->route_head - repeat(q->route_list) while(q^=null); - put skip list(q->route_dist,'miles to', - q->next_city->city_name); - end; - end; - end print_all; - - print_paths: - proc; - dcl - city char(citysize) var; - on endfile(sysin) go to eof; - do while(true); - put skip list('Type Destination '); - get list(city); - call shortest_dist(city); - on endfile(sysin) go to eol; - do while(true); - put skip list('Type Start '); - get list(city); - call print_route(city); - end; - eol: revert endfile(sysin); - end; - eof: - end print_paths; - - shortest_dist: - proc(city); - dcl - city char(citysize) var; - dcl - bestp ptr, - (d, bestd) fixed, - (p, q, r) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - p->total_dist = infinite; - p->investigate = false; - end; - p = find(city); - p->total_dist = 0; - p->investigate = true; - do while(true); - bestp = null; - bestd = infinite; - do p = city_head - repeat(p->city_list) while(p^=null); - if p->investigate then - do; - if p->total_dist < bestd then - do; - bestd = p->total_dist; - bestp = p; - end; - end; - end; - if bestp = null then - return; - bestp->investigate = false; - do q = bestp->route_head - repeat(q->route_list) while(q^=null); - r = q->next_city; - d = bestd + q->route_dist; - if d < r->total_dist then - do; - r->total_dist = d; - r->investigate = true; - end; - end; - end; - end shortest_dist; - - print_route: - proc(city); - dcl - city char(citysize) var; - dcl - (p, q) ptr, - (t, d) fixed; - p = find(city); - do while(true); - t = p->total_dist; - if t = infinite then - do; - put skip list('(No Connection)'); - return; - end; - if t = 0 then - return; - put skip list(t,'miles remain,'); - q = p->route_head; - do while(q^=null); - p = q->next_city; - d = q->route_dist; - if t = d + p->total_dist then - do; - put list(d,'miles to',p->city_name); - q = null; - end; else - q = q->route_list; - end; - end; - end print_route; - - free_all: - proc; - dcl - (p, q) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - do q = p->route_head - repeat(q->route_list) while(q^=null); - free q->route_node; - end; - free p->city_node; - end; - end free_all; - - end graph; - free p->city_node; - e \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/NETASM.PLI b/software/CPM/CPM23_PLI/NETASM.PLI deleted file mode 100644 index 4b3e5b9..0000000 --- a/software/CPM/CPM23_PLI/NETASM.PLI +++ /dev/null @@ -1,222 +0,0 @@ -graph: - proc options(main); - %replace - true by '1'b, - false by '0'b, - citysize by 20, - infinite by 32767; - dcl - (twords, mwords) entry returns(fixed); - dcl - sysin file; - dcl - 1 city_node based, - 2 city_name char(citysize) var, - 2 total_dist fixed, - 2 investigate bit, - 2 city_list ptr, - 2 route_head ptr; - dcl - 1 route_node based, - 2 next_city ptr, - 2 route_dist fixed, - 2 route_list ptr; - dcl - city_head ptr; - - do while(true); - put skip edit - ('^gTotal Storage = ',twords(),' Words', - 'Max Available = ',mwords(),' Words') - (2(column(10),a,f(6),a,skip),skip(4)); - call setup(); - if city_head = null then - stop; - call print_all(); - call print_paths(); - call free_all(); - end; - - setup: - proc; - dcl - dist fixed, - (city1, city2) char(citysize) var; - on endfile(sysin) go to eof; - city_head = null; - put skip list('Type "City1, Dist, City2"'); - put skip; - do while(true); - get list(city1, dist, city2); - call connect(city1, dist, city2); - call connect(city2, dist, city1); - end; - eof: - end setup; - - connect: - proc(source_city, dist, dest_city); - dcl - source_city char(citysize) var, - dist fixed, - dest_city char(citysize) var; - dcl - (r, s, d) ptr; - s = find(source_city); - d = find(dest_city); - allocate route_node set (r); - r->route_dist = dist; - r->next_city = d; - r->route_list = s->route_head; - s->route_head = r; - end connect; - - find: - proc(city) returns(ptr); - dcl - city char(citysize) var; - dcl - (p, q) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - if city = p->city_name then - return(p); - end; - allocate city_node set(p); - p->city_name = city; - p->city_list = city_head; - city_head = p; - p->total_dist = infinite; - p->route_head = null; - return(p); - end find; - - print_all: - proc; - dcl - (p, q) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - put skip list(p->city_name,':'); - do q = p->route_head - repeat(q->route_list) while(q^=null); - put skip list(q->route_dist,'miles to', - q->next_city->city_name); - end; - end; - end print_all; - - print_paths: - proc; - dcl - city char(citysize) var; - on endfile(sysin) go to eof; - do while(true); - put skip list('Type Destination '); - get list(city); - call shortest_dist(city); - on endfile(sysin) go to eol; - do while(true); - put skip list('Type Start '); - get list(city); - call print_route(city); - end; - eol: revert endfile(sysin); - end; - eof: - end print_paths; - - shortest_dist: - proc(city); - dcl - city char(citysize) var; - dcl - bestp ptr, - (d, bestd) fixed, - (p, q, r) ptr; - do p = city_head - repeat(p->city_list) while(p^=null); - p->total_dist = infinite; - p->investigate = false; - end; - p = find(city); - p->total_dist = 0; - p->investigate = true; - do while(true); - bestp = null; - bestd = infinite; - do p = city_head - repeat(p->city_list) while(p^=null); - if p->investigate then - do; - if p->total_dist < bestd then - do; - bestd = p->total_dist; - bestp = p; - end; - end; - end; - if bestp = null then - return; - bestp->investigate = false; - do q = bestp->route_head - repeat(q->route_list) while(q^=null); - r = q->next_city; - d = bestd + q->route_dist; - if d < r->total_dist then - do; - r->total_dist = d; - r->investigate = true; - end; - end; - end; - end shortest_dist; - - print_route: - proc(city); - dcl - city char(citysize) var; - dcl - (p, q) ptr, - (t, d) fixed; - p = find(city); - do while(true); - t = p->total_dist; - if t = infinite then - do; - put skip list('(No Connection)'); - return; - end; - if t = 0 then - return; - put skip list(t,'miles remain,'); - q = p->route_head; - do while(q^=null); - p = q->next_city; - d = q->route_dist; - if t = d + p->total_dist then - do; - put list(d,'miles to',p->city_name); - q = null; - end; else - q = q->route_list; - end; - end; - end print_route; - - free_all: - proc; - dcl - (p, px, q, qx) ptr; - do p = city_head repeat(px) while(p^=null); - do q = p->route_head repeat(qx) while(q^=null); - qx = q->route_list; - free q->route_node; - end; - px = p->city_list; - free p->city_node; - end; - end free_all; - - end graph; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/OPTIMIST.COM b/software/CPM/CPM23_PLI/OPTIMIST.COM deleted file mode 100644 index 7c33bcaa238cea3f5a8f851bc6d41af5bccbb187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 Q)Yd=g>aT*~`s@7tFU5(4kpKVy diff --git a/software/CPM/CPM23_PLI/OPTIMIST.PLI b/software/CPM/CPM23_PLI/OPTIMIST.PLI deleted file mode 100644 index 52c50df..0000000 --- a/software/CPM/CPM23_PLI/OPTIMIST.PLI +++ /dev/null @@ -1,44 +0,0 @@ -optimist: - proc options(main); - %replace - true by '1'b, - false by '0'b, - nwords by 5; - dcl - negative (1:nwords) char(8) var static initial - (' never',' none',' nothing',' not',' no'), - positive (1:nwords) char(10) var static initial - (' always',' all',' something','',' some'), - upper char(28) static initial - ('ABCDEFGHIJKLMNOPQRSTUVWXYZ. '), - lower char(28) static initial - ('abcdefghijklmnopqrstuvwxyz. '); - dcl - sent char(254) var, - word char(32) var; - dcl - (i,j) fixed; - - do while(true); - put skip list('What''s up? '); - sent = ' '; - do while - (substr(sent,length(sent)) ^= '.'); - get list (word); - sent = sent !! ' ' !! word; - end; - sent = translate(sent,lower,upper); - if verify(sent,lower) ^= 0 then - sent = ' that''s an interesting idea.'; - do i = 1 to nwords; - j = index(sent,negative(i)); - if j ^= 0 then - sent = substr(sent,1,j-1) !! - positive(i) !! - substr(sent,j+length(negative(i))); - end; - put list('Actually,'!!sent); - put skip; - end; - end optimist; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/PLANT1.EMP b/software/CPM/CPM23_PLI/PLANT1.EMP deleted file mode 100644 index 0e63947166bceb3c8a9f7169cfd3bd88245900d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmbV~Jx{|h5QeR$Bn^R){X~VpLs6Tgh?S3Ys~|!svm30$Qa&ozB?==Tem6E147G!* zdh>hdd+xonce9{8<#oAW6zRvisA^aVPN~44A6JD_CRz;6CKJmVXJ~1otglxyDBg@P z-cTZP$_?S;Ae@ep(Y45j!8p_!aBquRwoZ8ly@aSv@pEYT2%VrW%TP|2oG8oWd(pw) z%YTF(4|I}Q@e)=PbwjEbqyM9cA3y|~B+WhyRDh9kg~7Tbm&*VBhkLI0)7|Fp&SizR zA>z%*Ka}%_E0M#KasSSoEnitd<^KQppOOy_>e*()Tk0TQldNQ%cJciQBoHfSx_z+Y kHLKEA{l8!S>AO2b<319*@vZ1#_78ur{r~W{e0E*G0Wpkr!vFvP diff --git a/software/CPM/CPM23_PLI/PLANT2.EMP b/software/CPM/CPM23_PLI/PLANT2.EMP deleted file mode 100644 index 567c70eae6d154d954555968fbe6fc7a95821bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmd;fOiC?EF3QhM%1mXz1l$^V`3l7)MX9MJnhKbJ6C|CSSyHK~zz$KV2{c2Mp@0q3 zDC{EKZi$&i<*A7!8L35BRFGxA5d(uL7PGJlvAd?H14E#Mn)bUg1h8VY42vLlcxFyc zetBYE3ibT2PJ;cMzCimc%M(kgsA<0fI~K2E72*giO-#?tEJ~%K{mKjmELbhWBFOCO J?>3P30|5GCbc_H1 diff --git a/software/CPM/CPM23_PLI/PLI.COM b/software/CPM/CPM23_PLI/PLI.COM deleted file mode 100644 index 8c5db57769dbe5b69ccefe30f88427975e943e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7552 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 PEta3I4XN}0kN^G$R`eU0 diff --git a/software/CPM/CPM23_PLI/PLI1.OVL b/software/CPM/CPM23_PLI/PLI1.OVL deleted file mode 100644 index 5d278964b4525f1caf3053dd8cc053a0dbc72717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32512 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 diff --git a/software/CPM/CPM23_PLI/PLI2.OVL b/software/CPM/CPM23_PLI/PLI2.OVL deleted file mode 100644 index 08257720d58fb1fa4ed03dd22e398cd03af5723a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31232 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 lsVh?Ewhh(n(r^H_Z0p>myEu& 2.0 -; error message and stop - jmp vererr ;version error -; -chkv22: ;check for version 2.2 or greater - call getver - cpi 22h - rnc ;return if >= 2.2 -vererr: - ;version error, report and terminate - lxi d,vermsg - mvi c,printf - call ?bdos ;write message - jmp ?boot ;and reboot -vermsg: db cr,lf,'Later CP/M or MP/M Version Required$' -; -;*********************************************************** -;* * -;*********************************************************** -memptr: ;return pointer to base of free storage - lhld ?begin - ret -; -;*********************************************************** -;* * -;*********************************************************** -memsiz: ;return size of free memory in bytes - lhld ?bdos+1 ;base of bdos - xchg ;de = .bdos - lhld ?begin ;beginning of free storage - mov a,e ;low(.bdos) - sub l ;-low(begin) - mov l,a ;back to l - mov a,d ;high(.bdos) - sbb h - mov h,a ;hl = mem size remaining - ret -; -;*********************************************************** -;* * -;*********************************************************** -memwds: ;return size of free memory in words - call memsiz ;hl = size in bytes - mov a,h ;high(size) - ora a ;cy = 0 - rar ;cy = ls bit - mov h,a ;back to h - mov a,l ;low(size) - rar ;include ls bit - mov l,a ;back to l - ret ;with wds in hl -; -;*********************************************************** -;* * -;*********************************************************** -dfcb0: ;return address of default fcb 0 - lxi h,?dfcb0 - ret -; -;*********************************************************** -;* * -;*********************************************************** -dfcb1: ;return address of default fcb 1 - lxi h,?dfcb1 - ret -; -;*********************************************************** -;* * -;*********************************************************** -dbuff: ;return address of default buffer - lxi h,?dbuff - ret -; -;*********************************************************** -;* * -;*********************************************************** -reboot: ;system reboot (#0) - jmp ?boot -; -;*********************************************************** -;* * -;*********************************************************** -rdcon: ;read console character (#1) - ;return character value to stack - mvi c,readc - jmp chrin ;common code to read char -; -;*********************************************************** -;* * -;*********************************************************** -wrcon: ;write console character(#2) - ;1->char(1) - mvi c,writc ;console write function - jmp chrout ;to write the character -; -;*********************************************************** -;* * -;*********************************************************** -rdrdr: ;read reader character (#3) - mvi c,rdrf ;reader function -chrin: - ;common code for character input - call ?bdos ;value returned to A - pop h ;return address - push psw ;character to stack - inx sp ;delete flags - mvi a,1 ;character length is 1 - pchl ;back to calling routine -; -;*********************************************************** -;* * -;*********************************************************** -wrpun: ;write punch character (#4) - ;1->char(1) - mvi c,punf ;punch output function - jmp chrout ;common code to write chr -; -;*********************************************************** -;* * -;*********************************************************** -wrlst: ;write list character (#5) - ;1->char(1) - mvi c,listf ;list output function -chrout: - ;common code to write character - ;1-> character to write - call getp1 ;output char to register e - jmp ?bdos ;to write and return -; -;*********************************************************** -;* * -;*********************************************************** -coninp: ;perform console input, char returned in stack - lxi h,chrstr ;return address - push h ;to stack for return - lhld ?boot+1 ;base of bios jmp vector - lxi d,2*3 ;offset to jmp conin - dad d - pchl ;return to chrstr -; -chrstr: ;create character string, length 1 - pop h ;recall return address - push psw ;save character - inx sp ;delete psw - pchl ;return to caller -; -;*********************************************************** -;* * -;*********************************************************** -conout: ;direct console output - ;1->char(1) - call getp1 ;get parameter - mov c,e ;character to c - lhld ?boot+1 ;base of bios jmp - lxi d,3*3 ;console output offset - dad d ;hl = .jmp conout - pchl ;return through handler -; -;*********************************************************** -;* * -;*********************************************************** -rdstat: ;direct console status read - lxi h,rdsret ;read status return - push h ;return to rdsret - lhld ?boot+1 ;base of jmp vector - lxi d,1*3 ;offset to .jmp const - dad d ;hl = .jmp const - pchl -; -;*********************************************************** -;* * -;*********************************************************** -getio: ;get io byte (#8) - mvi c,getiof - jmp ?bdos ;value returned to A -; -;*********************************************************** -;* * -;*********************************************************** -setio: ;set i/o byte (#9) - ;1->i/o byte - call getp1 ;new i/o byte to E - mvi c,setiof - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrstr: ;write string (#10) - ;1->addr(string) - call getp2 ;get parameter value to DE - mvi c,printf ;print string function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdbuf: ;read console buffer (#10) - ;1->addr(buff) - call getp2i ;DE = .buff - mvi c,rdconf ;read console function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -break: ;get console status (#11) - mvi c,statf - call ?bdos ;return through bdos -; -rdsret: ;return clean true value - ora a ;zero? - rz ;return if so - mvi a,0ffh ;clean true value - ret -; -;*********************************************************** -;* * -;*********************************************************** -vers: ;get version number (#12) - mvi c,versf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -reset: ;reset disk system (#13) - mvi c,resetf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -select: ;select disk (#14) - ;1->fixed(7) drive number - call getp1 ;disk number to E - mvi c,seldf - jmp ?bdos ;return through bdos -;*********************************************************** -;* * -;*********************************************************** -open: ;open file (#15) - ;1-> addr(fcb) - call getp2i ;fcb address to de - mvi c,openf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -close: ;close file (#16) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,closef - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -sear: ;search for file (#17) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,serchf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -searn: ;search for next (#18) - mvi c,serchn ;search next function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -delete: ;delete file (#19) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,deletf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdseq: ;read file sequential mode (#20) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,readf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrseq: ;write file sequential mode (#21) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,writf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -make: ;create file (#22) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,makef - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rename: ;rename file (#23) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,renamf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -logvec: ;return login vector (#24) - mvi c,loginf - jmp ?bdos ;return through BDOS -; -;*********************************************************** -;* * -;*********************************************************** -curdsk: ;return current disk number (#25) - mvi c,cdiskf - jmp ?bdos ;return value in A -; -;*********************************************************** -;* * -;*********************************************************** -setdma: ;set DMA address (#26) - ;1-> pointer (dma address) - call getp2 ;dma address to DE - mvi c,setdmf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -allvec: ;return address of allocation vector (#27) - mvi c,getalf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wpdisk: ;write protect disk (#28) - call chkv20 ;must be 2.0 or greater - mvi c,wrprof - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -rovec: ;return read/only vector (#29) - call chkv20 ;must be 2.0 or greater - mvi c,getrof - jmp ?bdos ;value returned in HL -; -;*********************************************************** -;* * -;*********************************************************** -filatt: ;set file attributes (#30) - ;1-> addr(fcb) - call chkv20 ;must be 2.0 or greater - call getp2i ;.fcb to DE - mvi c,setatf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -getdpb: ;get base of current disk parm block (#31) - call chkv20 ;check for 2.0 or greater - mvi c,getdpf - jmp ?bdos ;addr returned in HL -; -;*********************************************************** -;* * -;*********************************************************** -getusr: ;get user code to register A - call chkv20 ;check for 2.0 or greater - mvi e,0ffh ;to get user code - mvi c,userf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -setusr: ;set user code - call chkv20 ;check for 2.0 or greater - call getp1 ;code to E - mvi c,userf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdran: ;read random (#33) - ;1-> addr(fcb) - call chkv20 ;check for 2.0 or greater - call getp2i ;.fcb to DE - mvi c,rdranf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrran: ;write random (#34) - ;1-> addr(fcb) - call chkv20 ;check for 2.0 or greater - call getp2i ;.fcb to DE - mvi c,wrranf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -filsiz: ;compute file size (#35) - call chkv20 ;must be 2.0 or greater - call getp2 ;.fcb to DE - mvi c,filszf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -setrec: ;set random record position (#36) - call chkv20 ;must be 2.0 or greater - call getp2 ;.fcb to DE - mvi c,setrcf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -resdrv: ;reset drive function (#37) - ;1->drive vector - bit(16) - call chkv22 ;must be 2.2 or greater - call getp2 ;drive reset vector to DE - mvi c,rsdrvf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrranz: ;write random, zero fill function - ;1-> addr(fcb) - call chkv22 ;must be 2.2 or greater - call getp2i ;.fcb to DE - mvi c,wrrnzf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** - end - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/PLILIB.IRL b/software/CPM/CPM23_PLI/PLILIB.IRL deleted file mode 100644 index 554b0831c96ae4269f687cb18f29596a2174ab12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41472 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 hbound(slot,1) then - put skip list(k,'Out of Range'); - slot(k) = slot(k) + 1; - if mod(n,100) = 0 then - call histogram(); - end; - call histogram(); - stop; - - histogram: - procedure; - dcl - largest decimal, - (i, j) fixed; - largest = 0; - do i = lbound(slot,1) to hbound(slot,1); - if slot(i) > largest then - largest = slot(i); - end; - if largest = 0 then - return; - put skip list(clear,'Largest Value',largest); - if largest < width then - largest = width; - do i = lbound(slot,1) to hbound(slot,1); - put edit(slot(i), - ('*' do j = 1 to slot(i)*width/largest)) - (skip,f(7),x(1),width(a)); - end; - end histogram; - - rand: - proc (seed) returns(float); - dcl - seed fixed; - seed = seed * 899; - unspec(seed)=unspec(seed) & '7FFF'b4; - return (float(seed)/32768.); - - end rand; - end random; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/READ.ME b/software/CPM/CPM23_PLI/READ.ME deleted file mode 100644 index f437d6f..0000000 --- a/software/CPM/CPM23_PLI/READ.ME +++ /dev/null @@ -1,4 +0,0 @@ -This zip file contains the PLI compiler. It came from an old set of diskettes -that I personaly used many years ago. I believe it to be complete. - - diff --git a/software/CPM/CPM23_PLI/RECORD.DCL b/software/CPM/CPM23_PLI/RECORD.DCL deleted file mode 100644 index 3a22c82..0000000 --- a/software/CPM/CPM23_PLI/RECORD.DCL +++ /dev/null @@ -1,9 +0,0 @@ - dcl - 1 record, - 2 name character(30) varying, - 2 addr character(30) varying, - 2 city character(20) varying, - 2 state character(10) varying, - 2 zip fixed decimal(6), - 2 phone character(12) varying; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/REPORT.PLI b/software/CPM/CPM23_PLI/REPORT.PLI deleted file mode 100644 index 0ef87fd..0000000 --- a/software/CPM/CPM23_PLI/REPORT.PLI +++ /dev/null @@ -1,56 +0,0 @@ -report: - procedure options(main); - - dcl - 1 employee static, - 2 name character(30) varying, - 2 addr, - 3 street character(30) varying, - 3 city character(10) varying, - 3 state character(7) varying, - 3 zip fixed dec(5), - 2 age fixed dec(3), - 2 wage fixed dec(5,2), - 2 hours fixed dec(5,1); - - dcl - dashes character(15) static initial - ('$--------------'), - buff character(20) varying; - - dcl - i fixed, - (grosspay, withhold) fixed dec(7,2); - - dcl - (repfile, empfile) file; - - open file(empfile) keyed env(f(100),b(4000)) - title ('$1.EMP'); - - open file(repfile) stream print title('$2.$2') - environment(b(2000)); - - put list('Set Top of Forms, Type Return'); - get skip; - - do while('1'b); - read file(empfile) into(employee); - if name = 'EOF' then - stop; - put file(repfile) skip(2); - buff = '[' !! name !! ']^m^j'; - write file(repfile) from (buff); - grosspay = wage * hours; - withhold = grosspay * .15; - buff = grosspay - withhold; - do i = 1 to 15 - while (substr(buff,i,1) = ' '); - end; - i = i - 1; - substr(buff,1,i) = substr(dashes,1,i); - write file (repfile) from(buff); - end; - - end report; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/RETRIEVE.PLI b/software/CPM/CPM23_PLI/RETRIEVE.PLI deleted file mode 100644 index ab8ba7b..0000000 --- a/software/CPM/CPM23_PLI/RETRIEVE.PLI +++ /dev/null @@ -1,55 +0,0 @@ -retrieve: - procedure options(main); - /* name and address retrieval program */ - -%include 'record.dcl'; - - %replace - true by '1'b, - false by '0'b; - - dcl - (sysprint, input) file; - - dcl - filename character(14) varying, - (lower, upper) character(30) varying, - eofile bit(1); - - open file(sysprint) print title('$con'); - put list('Name and Address Retrieval, File Name: '); - get list(filename); - - do while(true); - lower = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; - upper = 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - put skip(2) list('Type Lower, Upper Bounds: '); - get list(lower,upper); - if lower = 'EOF' then - stop; - - open file(input) stream input environment(b(1024)) - title(filename); - eofile = false; - do while (^eofile); - get file(input) list(name); - eofile = (name = 'EOF'); - if ^eofile then - do; - get file(input) - list(addr,city,state,zip,phone); - if name >= lower & name <= upper then - do; - put page skip(3) - list(name); - put skip list(addr); - put skip list(city,state); - put skip list(zip); - put skip list(phone); - end; - end; - end; - close file(input); - end; - end retrieve; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/REV.PLI b/software/CPM/CPM23_PLI/REV.PLI deleted file mode 100644 index 533691f..0000000 --- a/software/CPM/CPM23_PLI/REV.PLI +++ /dev/null @@ -1,50 +0,0 @@ -reverse: - proc options(main); - dcl - sentence ptr, - 1 wordnode based (sentence), - 2 word char(30) varying, - 2 next ptr; - - do while('1'b); - call read(); - if sentence = null then - stop; - call write(); - end; - - read: - proc; - dcl - newword char(30) varying, - newnode ptr; - sentence = null; - put skip list('What''s up? '); - do while('1'b); - get list(newword); - if newword = '.' then - return; - allocate wordnode set (newnode); - newnode->next = sentence; - sentence = newnode; - word = newword; - end; - end read; - - write: - proc; - dcl - p ptr; - put skip list('Actually, '); - do while (sentence ^= null); - put list(word); - p = sentence; - sentence = next; - free p->wordnode; - end; - put list('.'); - put skip; - end write; - - end reverse; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/REVERT.PLI b/software/CPM/CPM23_PLI/REVERT.PLI deleted file mode 100644 index 5fe2186..0000000 --- a/software/CPM/CPM23_PLI/REVERT.PLI +++ /dev/null @@ -1,25 +0,0 @@ -revert: - proc options(main); - dcl - i fixed, - sysin file; - - do i = 1 to 10000; - call p(i,exit); - exit: - end; - - p: - proc(index,lab); - dcl - (t, index) fixed, - lab label; - on endfile(sysin) - go to lab; - put skip list(index,':'); - get list(t); - if t = index then - go to lab; - end p; - end revert; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/RMAC.COM b/software/CPM/CPM23_PLI/RMAC.COM deleted file mode 100644 index 8fc9f0ea8ea7be8f129e07b4ff65f74d383bad78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13568 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 diff --git a/software/CPM/CPM23_PLI/SELECT.PLI b/software/CPM/CPM23_PLI/SELECT.PLI deleted file mode 100644 index 4c4968c..0000000 --- a/software/CPM/CPM23_PLI/SELECT.PLI +++ /dev/null @@ -1,78 +0,0 @@ -select: - proc options(main); - /***************************************************** - * * - * This program is used to selectively print pages * - * from a TEX file, using the command shown below * - * * - * select source destination * - * * - * where "source" is a source file, usually a "prn" * - * file produced by TEX, and "destination" is a file * - * or device (e.g., $lst) to receive the selected * - * output pages. The program prompts the console: * - * * - * Page Length: p (or "," followed by return) * - * * - * where p is the page length (default is 66). * - * * - * Range of Pages: n,m * - * * - * where n is the first page to print, and m is the * - * last page. The range prompt will continue until * - * the end of the document is encountered, or an end * - * of file is entered at the console. * - * * - *****************************************************/ - %replace - true by '1'b, - false by '0'b, - copy by true, - deflen by 66, - nocopy by false; - dcl - (sysin, input, output) file, - (lower, upper, page, pagelen) fixed, - linebuff char(254) var; - - open file(input) title('$1.prn') env(b(8000)); - on endfile(sysin) - stop; - on endfile(input) - stop; - open file(output) output title('$2.$2') - env(b(8000)); - - pagelen = deflen; - put list('Page Length: '); - get list(pagelen); - - upper = 0; - lower = 0; - page = 1; - do while(true); - do while (page y then - if x > z then - max = x; - else - max = z; - else - if y > z then - max = y; - else - max = z; - return(max); - end max3; - end test; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/TITLE.PLI b/software/CPM/CPM23_PLI/TITLE.PLI deleted file mode 100644 index d88cf0c..0000000 --- a/software/CPM/CPM23_PLI/TITLE.PLI +++ /dev/null @@ -1,179 +0,0 @@ -title: - proc options(main); -/*************************************************************** -* This program prepares a title page from a series of print * -* files constructed using the TEX Text formatter. This program* -* scans the files, looking for headings of the form: * -* aa.bb.cc.ee. xxxxxxxxxxxxxxxxxxxxxxx. * -* where aa through ee represent one or more heading digits * -* and xxxxx represents a heading title, optionally followed by * -* a period. Headings of the form: * -* aa. XXXXXXXXXX * -* are taken as chapter titles, and are preceded by a blank * -* line. The operator enters the page size and starting page * -* number (or a comma, if default values are to be used), along * -* with the name of a file which, in turn, lists the names of * -* files to be scanned. This file, called the command file, * -* is read with a GET LIST statement, and normally contains the * -* names of TEX files with the extension PRN. The output from * -* this program appears as: * -* 10. MAJOR TITLE . . . . . . . . . . . . . . . . . . . 100 * -* 10.1. Minor Title . . . . . . . . . . . . . . . . 102 * -* 10.1.1. Paragraph Title . . . . . . . . . 103 * -* * -* The Table of Contents shown in the "PL/I-80 Reference Manual"* -* was prepared using this program, so it provides a good exam- * -* of the input and output forms. * -***************************************************************/ - %replace - fw by 3, /* starting field width */ - fi by 2, /* field increment */ - fm by 30, /* max field width */ - lpp by 66, /* lines per page */ - true by '1'b, - false by '0'b; - dcl - blanks char(30) static initial - (' '), - dots char(80) var static initial -('. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '); - dcl - (commd, input, output) file, - page decimal(3), - fv fixed, - fn fixed, - lppv fixed, - linc fixed, - line char(254) var, - pref char(254) var, - title char(254) var; - - put list ('Output File Name ? '); - get list(title); - open file (output) title(title) stream output - env (b(1000)); - put list ('Command File Name? '); - get list (title); - on undefinedfile(commd) - begin; - put list (title,'command file not present'); - stop; - end; - open file (commd) title(title) stream input; - lppv = lpp; - put list ('Lines Per Page ? '); - get list (lppv); - page = 1; - put list ('Start Page Number? '); - get list (page); - page = page - 1; - linc = lppv; - put file(output) edit('.ce','TABLE OF CONTENTS','.sp 2','.li') - (a,skip); - on endfile(commd) - begin; - put file(output) edit('.br') (skip,a); - put file(output) skip; - stop; - end; - on undefinedfile(input) - begin; - put skip list(title,'Not Found, Continue? (Y/N)'); - get list(title); - if title = 'y' | title = 'Y' then - go to retry; - stop; - end; - retry: - do while(true); - get file(commd) list(title); - open file (input) title(title) stream input - env(b(1000)); - put skip list('Processing: ',title); - on endfile(input) - go to nextfile; - do while(true); - get file(input) edit(line) (a); - call deblank(); - linc = linc + 1; - if linc > lpp then - do; - linc = 1; - page = page + 1; - end; - title = ''; - fv = 0; - fn = fw; - do while(numeric()); - title = title || pref; - fn = fn + fi; - fv = fv + fn; - end; - if title ^= '' then - if fv <= fm then - if substr(line,1,1) = ' ' then - do; - fv = fv - fn; - if fv = 0 then - put file(output) skip; - else - title = substr(blanks,1,fv) - || title; - fv = fv + fn; - if length(title) < fv then - title = title || - substr(blanks,1,fv-length(title)); - title = title || heading(); - line = title || substr(dots,length(title)+1); - put file(output) edit(line,page) (skip,a,f(3)); - end; - end; - nextfile: - linc = lpp; - revert endfile(input); - close file(input); - end; - - numeric: - proc returns(bit(1)); - dcl - i fixed; - i = index(line,'.'); - if i <= 1 then - return (false); - if verify(substr(line,1,i-1),'0123456789') = 0 then - do; - pref = substr(line,1,i); - line = substr(line,i+1); - return (true); - end; - return (false); - end numeric; - - heading: - proc returns (char(254) var); - dcl - i fixed; - call deblank(); - i = index(line,'.'); - if i ^= 0 then - line = substr(line,1,i-1); - i = index(line,' '); - do while (i ^= 0); - line = substr(line,1,i) || substr(line,i+2); - i = index(line,' '); - end; - return (line || ' '); - end heading; - - deblank: - proc; - dcl - i fixed; - i = verify(line,' '); - if i = 0 then - return; - line = substr(line,i); - end deblank; - end title; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/UPDATE.PLI b/software/CPM/CPM23_PLI/UPDATE.PLI deleted file mode 100644 index bd7c6d9..0000000 --- a/software/CPM/CPM23_PLI/UPDATE.PLI +++ /dev/null @@ -1,57 +0,0 @@ -update: - proc options(main); - dcl - 1 employee static, - 2 name char(30) var, - 2 addr, - 3 street char(30) var, - 3 city char(10) var, - 3 state char(7) var, - 3 zip fixed dec(5), - 2 age fixed dec(3), - 2 wage fixed dec(5,2), - 2 hours fixed dec(5,1); - dcl - (emp, keys) file; - dcl - 1 keylist (100), - 2 keyname char(30) var, - 2 keyval fixed binary; - dcl - (i, endlist) fixed, - eolist bit(1) static initial('0'b), - matchname char(30) var; - - open file(emp) update direct env(f(100)) - title ('$1.EMP'); - - open file(keys) stream env(b(4000)) title('$1.key'); - - do i = 1 to 100 while(^eolist); - get file(keys) list(keyname(i),keyval(i)); - eolist = keyname(i) = 'EOF'; - end; - - do while('1'b); - put skip list('Employee: '); - get list(matchname); - if matchname = 'EOF' then - stop; - do i = 1 to 100; - if matchname = keyname(i) then - do; - read file(emp) into(employee) - key(keyval(i)); - put skip list('Address: ', - street, city, state, zip); - put skip list(' '); - get list(street, city, state, zip); - put list('Hours:',hours,': '); - get list(hours); - write file(emp) from (employee) - keyfrom(keyval(i)); - end; - end; - end; - end update; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/WAGE.PLI b/software/CPM/CPM23_PLI/WAGE.PLI deleted file mode 100644 index f5f5f5b..0000000 --- a/software/CPM/CPM23_PLI/WAGE.PLI +++ /dev/null @@ -1,34 +0,0 @@ -payroll: - procedure options(main); - - declare - name (100) character(30) varying, - hours(100) fixed decimal(5,1), - wage (100) fixed decimal(5,2), - done bit(1), - next fixed; - - declare - (grosspay, withhold, netpay) fixed decimal(7,2); - - /* read initial values */ - done = '0'b; - do next = 1 to 100 while(^done); - put list('Type ''employee'', hours, wage: '); - get list(name(next),hours(next),wage(next)); - done = (name(next) = 'END'); - end; - - /* all names have been read, write the report */ - put list('Adjust Paper to Top of Page, Type return'); - get skip(2); - - do next = 1 to 100 while(name(next) ^= 'END'); - grosspay = hours(next) * wage(next); - withhold = grosspay * .15; - netpay = grosspay - withhold; - put skip(2) list('$',netpay,'for',name(next)); - end; - - end payroll; - \ No newline at end of file diff --git a/software/CPM/CPM24_PLI80_v13/ACK.PLI b/software/CPM/CPM24_PLI80_v13/ACK.PLI deleted file mode 100644 index 968d773..0000000 --- a/software/CPM/CPM24_PLI80_v13/ACK.PLI +++ /dev/null @@ -1,27 +0,0 @@ -ack: - procedure options(main,stack(2000)); - dcl - (m,maxm,n,maxn) fixed; - put skip list('Type max m,n: '); - get list(maxm,maxn); - put skip - list(' ',(decimal(n,4) do n=0 to maxn)); - do m = 0 to maxm; - put skip list(decimal(m,4),':'); - do n = 0 to maxn; - put list(decimal(ackermann(m,n),4)); - end; - end; - stop; - - ackermann: - procedure(m,n) returns(fixed) recursive; - dcl (m,n) fixed; - if m = 0 then - return(n+1); - if n = 0 then - return(ackermann(m-1,1)); - return(ackermann(m-1,ackermann(m,n-1))); - end ackermann; - end ack; - \ No newline at end of file diff --git a/software/CPM/CPM24_PLI80_v13/DFACT.PLI b/software/CPM/CPM24_PLI80_v13/DFACT.PLI deleted file mode 100644 index f0fbcf7..0000000 --- a/software/CPM/CPM24_PLI80_v13/DFACT.PLI +++ /dev/null @@ -1,22 +0,0 @@ -f: - proc options(main); - dcl - i fixed; - do i = 0 repeat(i+1); - put skip list('Factorial(',i,')=',fact(i)); - end; - stop; - - fact: - proc (i) - returns(fixed dec(15,0)) recursive; - dcl - i fixed; - dcl - f fixed dec(15,0); - if i = 0 then - return (1); - return (decimal(i,15) * fact(i-1)); - end fact; - end f; - \ No newline at end of file diff --git a/software/CPM/CPM24_PLI80_v13/LIB.COM b/software/CPM/CPM24_PLI80_v13/LIB.COM deleted file mode 100644 index 3438d672464d7b118fc430c9ef66c338daf01ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 a1CLyd*K7a7o!tM%t8Z<4F8lxK=f45bmW?t1 diff --git a/software/CPM/CPM24_PLI80_v13/OPTIMIST.PLI b/software/CPM/CPM24_PLI80_v13/OPTIMIST.PLI deleted file mode 100644 index 52c50df..0000000 --- a/software/CPM/CPM24_PLI80_v13/OPTIMIST.PLI +++ /dev/null @@ -1,44 +0,0 @@ -optimist: - proc options(main); - %replace - true by '1'b, - false by '0'b, - nwords by 5; - dcl - negative (1:nwords) char(8) var static initial - (' never',' none',' nothing',' not',' no'), - positive (1:nwords) char(10) var static initial - (' always',' all',' something','',' some'), - upper char(28) static initial - ('ABCDEFGHIJKLMNOPQRSTUVWXYZ. '), - lower char(28) static initial - ('abcdefghijklmnopqrstuvwxyz. '); - dcl - sent char(254) var, - word char(32) var; - dcl - (i,j) fixed; - - do while(true); - put skip list('What''s up? '); - sent = ' '; - do while - (substr(sent,length(sent)) ^= '.'); - get list (word); - sent = sent !! ' ' !! word; - end; - sent = translate(sent,lower,upper); - if verify(sent,lower) ^= 0 then - sent = ' that''s an interesting idea.'; - do i = 1 to nwords; - j = index(sent,negative(i)); - if j ^= 0 then - sent = substr(sent,1,j-1) !! - positive(i) !! - substr(sent,j+length(negative(i))); - end; - put list('Actually,'!!sent); - put skip; - end; - end optimist; - \ No newline at end of file diff --git a/software/CPM/CPM24_PLI80_v13/PLI.COM b/software/CPM/CPM24_PLI80_v13/PLI.COM deleted file mode 100644 index a8dd0560d62903a5576ac3f44f9f4ff730862d2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 zcmeHMdvp|4ny>0-x|4L$d3ObF^-Y41$`GK%oS_Kq1`FQ|fY{FuFO=luHyRE$?TGQ3i)ErH8wl9v> zG`Dp{XD?`PkJjV|+Y^Ld*bbxS&;3EPd-1#$*wwwDs}qYgZJi67+S{6=pN9 zpNadzKFR)7Q2;MQ@x504_95OXor=$ zs;iW$pD9(V6nn0Z54etMmn$E_K+Pwe(dV+p*j$!z8Gg6k!3L#4c?-XYZC6t#TzoNW zkohHe=$EibYRd19lTn+t@XOe4nv!wuxC_HTy4Y<#<+2Zk<)F*n;raS{en0zp-Ae5~ zb|R$Mrz;gF)yWgSdv1K5g=Dk{E4m9 z{>09aPK3NPZ`yw@m!xT(_L9)Kf?O6<4+%LBLQX);w}WfD;Btxi!)&E~Iie_e^oLm{ z&p6~3ao1O}Ok?`EGYRF{H@ImzXq+OyO>&Eg_bCSp6kF%BW0G

    pL+Di*@33P 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 diff --git a/software/CPM/CPM24_PLI80_v13/PLI2.OVL b/software/CPM/CPM24_PLI80_v13/PLI2.OVL deleted file mode 100644 index 5c45b779a4de94c146f1e9416d391fbda33e4c7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31616 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 diff --git a/software/CPM/CPM24_PLI80_v13/XREF.COM b/software/CPM/CPM24_PLI80_v13/XREF.COM deleted file mode 100644 index 32c57ae09843237801c3a0b216105e726b2b5571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15488 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 HU&sAB;QJ6q diff --git a/software/CPM/CPM25_PLI80_v14/A.PLI b/software/CPM/CPM25_PLI80_v14/A.PLI deleted file mode 100644 index a50b221..0000000 --- a/software/CPM/CPM25_PLI80_v14/A.PLI +++ /dev/null @@ -1,6 +0,0 @@ -a: - procedure(x) returns (float); /* external procedure */ - declare x float; - return (x/2); -end a; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/ACK.PLI b/software/CPM/CPM25_PLI80_v14/ACK.PLI deleted file mode 100644 index 1fdb644..0000000 --- a/software/CPM/CPM25_PLI80_v14/ACK.PLI +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************/ -/* This program evaluates the Ackermann function */ -/* A(m,n), and increases the size of the stack */ -/* because of the large number of recursive calls. */ -/******************************************************/ -ack: - procedure options(main,stack(2000)); - declare - (m,maxm,n,maxn) fixed; - put skip list('Type max m,n: '); - get list(maxm,maxn); - put skip - list(' ',(decimal(n,4) do n=0 to maxn)); - do m = 0 to maxm; - put skip list(decimal(m,4),':'); - do n = 0 to maxn; - put list(decimal(ackermann(m,n),4)); - end; - end; - stop; - - ackermann: - procedure(m,n) returns(fixed) recursive; - declare (m,n) fixed; - if m = 0 then - return(n+1); - if n = 0 then - return(ackermann(m-1,1)); - return(ackermann(m-1,ackermann(m,n-1))); - end ackermann; - -end ack; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/ACKTST.PLI b/software/CPM/CPM25_PLI80_v14/ACKTST.PLI deleted file mode 100644 index 356a836..0000000 --- a/software/CPM/CPM25_PLI80_v14/ACKTST.PLI +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************/ -/* This program tests the STKSIZ function while */ -/* evaluating a RECURSIVE procedure. */ -/************************************************/ -ack: - procedure options(main,stack(2000)); - declare - (m,n) fixed, - (maxm,maxn) fixed, - ncalls decimal(6), - (curstack, stacksize) fixed, - stksiz entry returns(fixed); - - put skip list('Type max m,n: '); - get list(maxm,maxn); - do m = 0 to maxm; - do n = 0 to maxn; - ncalls = 0; - curstack = 0; - stacksize = 0; - put edit('Ack(',m,',',n,')=',ackermann(m,n), - ncalls,' Calls,',stacksize,' Stack Bytes') - (skip,a,2(f(2),a),f(6),f(7),a,f(4),a); - end; - end; - stop; - - ackermann: - procedure(m,n) returns(fixed) recursive; - - declare - (m,n) fixed; - ncalls = ncalls + 1; - curstack = stksiz(); - if curstack > stacksize then - stacksize = curstack; - if m = 0 then - return(n+1); - if n = 0 then - return(ackermann(m-1,1)); - return(ackermann(m-1,ackermann(m,n-1))); - end ackermann; - - end ack; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/ALLTST.PLI b/software/CPM/CPM25_PLI80_v14/ALLTST.PLI deleted file mode 100644 index 2aa01f4..0000000 --- a/software/CPM/CPM25_PLI80_v14/ALLTST.PLI +++ /dev/null @@ -1,35 +0,0 @@ -/*****************************************************/ -/* This program tests the TOTWDS, MAXWDS, and ALLWDS */ -/* functions from the Run-time Subroutine Library. */ -/*****************************************************/ -alltst: - procedure options(main); - declare - totwds returns(fixed(15)), - maxwds returns(fixed(15)), - allwds entry(fixed(15)) returns(pointer); - - declare - allreq fixed(15), - memptr ptr, - meminx fixed(15), - memory (0:0) bit(16) based(memptr); - - do while('1'b); - put edit (totwds(),' Total Words Available', - maxwds(),' Maximum Segment Size', - 'Allocation Size? ') (2(skip,f(6),a),skip,a); - get list(allreq); - memptr = allwds(allreq); - put edit('Allocated',allreq,' Words at ',unspec(memptr)) - (skip,a,f(6),a,b4); - - /* clear memory as example */ - do meminx = 0 to allreq-1; - memory(meminx) = '0000'b4; - end; - end; - -end alltst; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/ANNUITY.PLI b/software/CPM/CPM25_PLI80_v14/ANNUITY.PLI deleted file mode 100644 index fc4893c..0000000 --- a/software/CPM/CPM25_PLI80_v14/ANNUITY.PLI +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************/ -/* This program computes either the present value(PV),*/ -/* the payment(PMT), or the number of periods in an */ -/* annuity. */ -/******************************************************/ -annuity: - procedure options(main); - %replace - clear by '^z', - true by '1'b; - declare - PMT fixed decimal(7,2), - PV fixed decimal(9,2), - IP fixed decimal(6,6), - x float binary, - yi float binary, - i float binary, - n fixed; - - declare - ftc entry(float binary(24)) - returns(character(17) varying); - - put list (clear,'^i^iO R D I N A R Y A N N U I T Y'); - put skip(2) list - ('^iEnter Known Values, or 0, on Each Iteration'); - - on error - begin; - put skip list('^iInvalid Data, Re-enter'); - goto retry; - end; - - retry: - do while (true); - put skip(3) list('^iPresent Value '); - get list(PV); - put list('^iPayment '); - get list(PMT); - put list('^iInterest Rate '); - get list(yi); - i = yi / 1200; - put list('^iPay Periods '); - get list(n); - - if PV = 0 | PMT = 0 then - x = 1 - 1/(1+i)**n; - - /******************************/ - /* compute the present value */ - /******************************/ - if PV = 0 then - do; - PV = PMT * dec(ftc(x/i),15,6); - put edit('^iPresent Value is ',PV) - (a,p'$$$,$$$,$$$V.99'); - end; - - /******************************/ - /* compute the payment */ - /******************************/ - if PMT = 0 then - do; - PMT = PV * dec(ftc(i/x),15,8); - put edit('^iPayment is ',PMT) - (a,p'$$,$$$,$$$V.99'); - end; - - /*****************************/ - /* compute number of periods */ - /*****************************/ - if n = 0 then - do; - IP = ftc(i); - x = char(PV * IP / PMT); - n = ceil ( - log(1-x)/log(1+i) ); - put edit('^i',n,' Pay Periods') - (a,p'ZZZ9',a); - end; - end; - -end annuity; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/CALL.PLI b/software/CPM/CPM25_PLI80_v14/CALL.PLI deleted file mode 100644 index f69fb8f..0000000 --- a/software/CPM/CPM25_PLI80_v14/CALL.PLI +++ /dev/null @@ -1,35 +0,0 @@ -call: - procedure options(main); - declare - f(3) entry(float) returns(float) variable, - a entry(float) returns(float); */ entry constant */ - declare - i fixed, x float; - - f(1) = a; - f(2) = b; - f(3) = c; - - do i = 1 to 3; - put skip list('Type x '); - get list(x); - put list('f(',i,')=',f(i)(x)); - end; - stop; - - b: - procedure(x) returns(float); /* internal procedure */ - declare x float; - return (2*x + 1); - end b; - - c: - procedure(x) returns(float); /* internal procedure */ - declare x float; - return(sin(x)); - end c; - - -end call; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/COPY.PLI b/software/CPM/CPM25_PLI80_v14/COPY.PLI deleted file mode 100644 index c5a2771..0000000 --- a/software/CPM/CPM25_PLI80_v14/COPY.PLI +++ /dev/null @@ -1,24 +0,0 @@ -/*****************************************************/ -/* This program copies one file to another using */ -/* buffered I/O. */ -/*****************************************************/ -copy: - procedure options(main); - declare - (input_file,output_file) file; - - open file (input_file) stream - environment(b(8192)) title('$1.$1'); - - open file (output_file) stream output - environment(b(8192)) title('$2.$2'); - declare - buff character(254) varying; - - do while('1'b); - read file (input_file) into (buff); - write file (output_file) from (buff); - end; -end copy; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/COPYLPT.PLI b/software/CPM/CPM25_PLI80_v14/COPYLPT.PLI deleted file mode 100644 index b56a664..0000000 --- a/software/CPM/CPM25_PLI80_v14/COPYLPT.PLI +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************/ -/* This program copies a STREAM file on disk to a */ -/* PRINT file, and formats the output with a page */ -/* header, and line numbers. */ -/******************************************************/ -copy: procedure options(main); - - declare - (sysin, sourcefile, printfile) file, - (pagesize, pagewidth, spaces, linenumber) fixed, - (line character(14), buff character(254)) varying; - - put list('^z File to Print Copy Program'); - - on endfile(sysin) - go to typeover; - - typeover: - put skip(5) list('How Many Lines Per Page? '); - get list(pagesize); - - put skip list('How Many Column Positions? '); - get skip list(pagewidth); - - on error(1) - begin; - put list('Invalid Number, Type Integer'); - go to getnumber; - end; - getnumber: - put skip list('Line Spacing (1=Single)? '); - get skip list(spaces); - revert error(1); - - put skip list('Destination Device/File: '); - get skip list(line); - - open file(printfile) print pagesize(pagesize) - linesize(pagewidth) title(line); - - on undefinedfile(sourcefile) - begin; - put skip list('"',line,'" isn''t a Valid Name'); - go to retry; - end; - retry: - put skip list('Source File to Print? '); - get list(line); - open file(sourcefile) stream environment(b(8000)) - title(line); - on endfile(sourcefile) - begin; - put file(printfile) page; - stop; - end; - - on endfile(printfile) - begin; - put skip list('^g^g^g^g Disk is Full'); - stop; - end; - - on endpage(printfile) - begin; - put file(printfile) page skip(2) - list('PAGE',pageno(printfile)); - put file(printfile) skip(4); - end; - - signal endpage(printfile); - do linenumber = 1 repeat(linenumber + 1); - get file (sourcefile) edit(buff) (a); - put file (printfile) - edit(linenumber,'|',buff) (f(5),x(1),a(2),a); - put file (printfile) skip(spaces); - end; - -end copy; - - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/CPMDIO.ASM b/software/CPM/CPM25_PLI80_v14/CPMDIO.ASM deleted file mode 100644 index a71df3e..0000000 --- a/software/CPM/CPM25_PLI80_v14/CPMDIO.ASM +++ /dev/null @@ -1,608 +0,0 @@ - name 'CPMDIO' - title 'Direct CP/M Calls From PL/I-80' -; -;*********************************************************** -;* * -;* CP/M calls from PL/I for direct i/o * -;* * -;*********************************************************** - public memptr ;return pointer to base of free mem - public memsiz ;return size of memory in bytes - public memwds ;return size of memory in words - public dfcb0 ;return address of default fcb 0 - public dfcb1 ;return address of default fcb 1 - public dbuff ;return address of default buffer - public reboot ;system reboot (#0) - public rdcon ;read console character (#1) - public wrcon ;write console character(#2) - public rdrdr ;read reader character (#3) - public wrpun ;write punch character (#4) - public wrlst ;write list character (#5) - public coninp ;direct console input (#6a) - public conout ;direct console output (#6b) - public rdstat ;read console status (#6c) - public getio ;get io byte (#7) - public setio ;set i/o byte (#8) - public wrstr ;print string (#9) - public rdbuf ;read console buffer (#10) - public break ;get console status (#11) - public vers ;get version number (#12) - public reset ;reset disk system (#13) - public select ;select disk (#14) - public open ;open file (#15) - public close ;close file (#16) - public sear ;search for file (#17) - public searn ;search for next (#18) - public delete ;delete file (#19) - public rdseq ;read file sequential mode (#20) - public wrseq ;write file sequential mode (#21) - public make ;create file (#22) - public rename ;rename file (#23) - public logvec ;return login vector (#24) - public curdsk ;return current disk number (#25) - public setdma ;set DMA address (#26) - public allvec ;return address of alloc vector (#27) - public wpdisk ;write protect disk (#28) - public rovec ;return read/only vector (#29) - public filatt ;set file attributes (#30) - public getdpb ;get base of disk parm block (#31) - public getusr ;get user code (#32a) - public setusr ;set user code (#32b) - public rdran ;read random (#33) - public wrran ;write random (#34) - public filsiz ;random file size (#35) - public setrec ;set random record pos (#36) - public resdrv ;reset drive (#37) - public wrranz ;write random, zero fill (#40) -; -; - extrn ?begin ;beginning of free list - extrn ?boot ;system reboot entry point - extrn ?bdos ;bdos entry point - extrn ?dfcb0 ;default fcb 0 - extrn ?dfcb1 ;default fcb 1 - extrn ?dbuff ;default buffer -; -;*********************************************************** -;* * -;* equates for interface to cp/m bdos * -;* * -;*********************************************************** -cr equ 0dh ;carriage return -lf equ 0ah ;line feed -eof equ 1ah ;end of file -; -readc equ 1 ;read character from console -writc equ 2 ;write console character -rdrf equ 3 ;reader input -punf equ 4 ;punch output -listf equ 5 ;list output function -diof equ 6 ;direct i/o, version 2.0 -getiof equ 7 ;get i/o byte -setiof equ 8 ;set i/o byte -printf equ 9 ;print string function -rdconf equ 10 ;read console buffer -statf equ 11 ;return console status -versf equ 12 ;get version number -resetf equ 13 ;system reset -seldf equ 14 ;select disk function -openf equ 15 ;open file function -closef equ 16 ;close file -serchf equ 17 ;search for file -serchn equ 18 ;search next -deletf equ 19 ;delete file -readf equ 20 ;read next record -writf equ 21 ;write next record -makef equ 22 ;make file -renamf equ 23 ;rename file -loginf equ 24 ;get login vector -cdiskf equ 25 ;get current disk number -setdmf equ 26 ;set dma function -getalf equ 27 ;get allocation base -wrprof equ 28 ;write protect disk -getrof equ 29 ;get r/o vector -setatf equ 30 ;set file attributes -getdpf equ 31 ;get disk parameter block -userf equ 32 ;set/get user code -rdranf equ 33 ;read random -wrranf equ 34 ;write random -filszf equ 35 ;compute file size -setrcf equ 36 ;set random record position -rsdrvf equ 37 ;reset drive function -wrrnzf equ 40 ;write random zero fill -; -; utility functions -;*********************************************************** -;* * -;* general purpose routines used upon entry * -;* * -;*********************************************************** -; -getp1: ;get single byte parameter to register e - mov e,m ;low (addr) - inx h - mov d,m ;high(addr) - xchg ;hl = .char - mov e,m ;to register e - ret -; -getp2: ;get single word value to DE -getp2i: ;(equivalent to getp2) - call getp1 - inx h - mov d,m ;get high byte as well - ret -; -getver: ;get cp/m or mp/m version number - push h ;save possible data adr - mvi c,versf - call ?bdos - pop h ;recall data addr - ret -; -chkv20: ;check for version 2.0 or greater - call getver - cpi 20 - rnc ;return if > 2.0 -; error message and stop - jmp vererr ;version error -; -chkv22: ;check for version 2.2 or greater - call getver - cpi 22h - rnc ;return if >= 2.2 -vererr: - ;version error, report and terminate - lxi d,vermsg - mvi c,printf - call ?bdos ;write message - jmp ?boot ;and reboot -vermsg: db cr,lf,'Later CP/M or MP/M Version Required$' -; -;*********************************************************** -;* * -;*********************************************************** -memptr: ;return pointer to base of free storage - lhld ?begin - ret -; -;*********************************************************** -;* * -;*********************************************************** -memsiz: ;return size of free memory in bytes - lhld ?bdos+1 ;base of bdos - xchg ;de = .bdos - lhld ?begin ;beginning of free storage - mov a,e ;low(.bdos) - sub l ;-low(begin) - mov l,a ;back to l - mov a,d ;high(.bdos) - sbb h - mov h,a ;hl = mem size remaining - ret -; -;*********************************************************** -;* * -;*********************************************************** -memwds: ;return size of free memory in words - call memsiz ;hl = size in bytes - mov a,h ;high(size) - ora a ;cy = 0 - rar ;cy = ls bit - mov h,a ;back to h - mov a,l ;low(size) - rar ;include ls bit - mov l,a ;back to l - ret ;with wds in hl -; -;*********************************************************** -;* * -;*********************************************************** -dfcb0: ;return address of default fcb 0 - lxi h,?dfcb0 - ret -; -;*********************************************************** -;* * -;*********************************************************** -dfcb1: ;return address of default fcb 1 - lxi h,?dfcb1 - ret -; -;*********************************************************** -;* * -;*********************************************************** -dbuff: ;return address of default buffer - lxi h,?dbuff - ret -; -;*********************************************************** -;* * -;*********************************************************** -reboot: ;system reboot (#0) - jmp ?boot -; -;*********************************************************** -;* * -;*********************************************************** -rdcon: ;read console character (#1) - ;return character value to stack - mvi c,readc - jmp chrin ;common code to read char -; -;*********************************************************** -;* * -;*********************************************************** -wrcon: ;write console character(#2) - ;1->char(1) - mvi c,writc ;console write function - jmp chrout ;to write the character -; -;*********************************************************** -;* * -;*********************************************************** -rdrdr: ;read reader character (#3) - mvi c,rdrf ;reader function -chrin: - ;common code for character input - call ?bdos ;value returned to A - pop h ;return address - push psw ;character to stack - inx sp ;delete flags - mvi a,1 ;character length is 1 - pchl ;back to calling routine -; -;*********************************************************** -;* * -;*********************************************************** -wrpun: ;write punch character (#4) - ;1->char(1) - mvi c,punf ;punch output function - jmp chrout ;common code to write char -; -;*********************************************************** -;* * -;*********************************************************** -wrlst: ;write list character (#5) - ;1->char(1) - mvi c,listf ;list output function -chrout: - ;common code to write character - ;1-> character to write - call getp1 ;output char to register e - jmp ?bdos ;to write and return -; -;*********************************************************** -;* * -;*********************************************************** -coninp: ;perform console input, char returned in stack (#6a) - lxi h,chrstr ;return address - push h ;to stack for return - lhld ?boot+1 ;base of bios jmp vector - lxi d,2*3 ;offset to jmp conin - dad d - pchl ;return to chrstr -; -chrstr: ;create character string, length 1 - pop h ;recall return address - push psw ;save character - inx sp ;delete psw - mvi a,1 ;length to a - pchl ;return to caller -; -;*********************************************************** -;* * -;*********************************************************** -conout: ;direct console output (#6b) - ;1->char(1) - call getp1 ;get parameter - mov c,e ;character to c - lhld ?boot+1 ;base of bios jmp - lxi d,3*3 ;console output offset - dad d ;hl = .jmp conout - pchl ;return through handler -; -;*********************************************************** -;* * -;*********************************************************** -rdstat: ;direct console status read (#6c) - lxi h,rdsret ;read status return - push h ;return to rdsret - lhld ?boot+1 ;base of jmp vector - lxi d,1*3 ;offset to .jmp const - dad d ;hl = .jmp const - pchl -; -;*********************************************************** -;* * -;*********************************************************** -getio: ;get io byte (#7) - mvi c,getiof - jmp ?bdos ;value returned to A -; -;*********************************************************** -;* * -;*********************************************************** -setio: ;set i/o byte (#8) - ;1->i/o byte - call getp1 ;new i/o byte to E - mvi c,setiof - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrstr: ;write string (#9) - ;1->addr(string) - call getp2 ;get parameter value to DE - mvi c,printf ;print string function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdbuf: ;read console buffer (#10) - ;1->addr(buff) - call getp2i ;DE = .buff - mvi c,rdconf ;read console function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -break: ;get console status (#11) - mvi c,statf - call ?bdos ;return through bdos -; -rdsret: ;return clean true value - ora a ;zero? - rz ;return if so - mvi a,0ffh ;clean true value - ret -; -;*********************************************************** -;* * -;*********************************************************** -vers: ;get version number (#12) - mvi c,versf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -reset: ;reset disk system (#13) - mvi c,resetf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -select: ;select disk (#14) - ;1->fixed(7) drive number - call getp1 ;disk number to E - mvi c,seldf - jmp ?bdos ;return through bdos -;*********************************************************** -;* * -;*********************************************************** -open: ;open file (#15) - ;1-> addr(fcb) - call getp2i ;fcb address to de - mvi c,openf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -close: ;close file (#16) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,closef - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -sear: ;search for file (#17) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,serchf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -searn: ;search for next (#18) - mvi c,serchn ;search next function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -delete: ;delete file (#19) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,deletf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdseq: ;read file sequential mode (#20) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,readf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrseq: ;write file sequential mode (#21) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,writf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -make: ;create file (#22) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,makef - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rename: ;rename file (#23) - ;1-> addr(fcb) - call getp2i ;.fcb to DE - mvi c,renamf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -logvec: ;return login vector (#24) - mvi c,loginf - jmp ?bdos ;return through BDOS -; -;*********************************************************** -;* * -;*********************************************************** -curdsk: ;return current disk number (#25) - mvi c,cdiskf - jmp ?bdos ;return value in A -; -;*********************************************************** -;* * -;*********************************************************** -setdma: ;set DMA address (#26) - ;1-> pointer (dma address) - call getp2 ;dma address to DE - mvi c,setdmf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -allvec: ;return address of allocation vector (#27) - mvi c,getalf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wpdisk: ;write protect disk (#28) - call chkv20 ;must be 2.0 or greater - mvi c,wrprof - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -rovec: ;return read/only vector (#29) - call chkv20 ;must be 2.0 or greater - mvi c,getrof - jmp ?bdos ;value returned in HL -; -;*********************************************************** -;* * -;*********************************************************** -filatt: ;set file attributes (#30) - ;1-> addr(fcb) - call chkv20 ;must be 2.0 or greater - call getp2i ;.fcb to DE - mvi c,setatf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -getdpb: ;get base of current disk parm block (#31) - call chkv20 ;check for 2.0 or greater - mvi c,getdpf - jmp ?bdos ;addr returned in HL -; -;*********************************************************** -;* * -;*********************************************************** -getusr: ;get user code to register A - call chkv20 ;check for 2.0 or greater - mvi e,0ffh ;to get user code - mvi c,userf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -setusr: ;set user code - call chkv20 ;check for 2.0 or greater - call getp1 ;code to E - mvi c,userf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdran: ;read random (#33) - ;1-> addr(fcb) - call chkv20 ;check for 2.0 or greater - call getp2i ;.fcb to DE - mvi c,rdranf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrran: ;write random (#34) - ;1-> addr(fcb) - call chkv20 ;check for 2.0 or greater - call getp2i ;.fcb to DE - mvi c,wrranf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -filsiz: ;compute file size (#35) - call chkv20 ;must be 2.0 or greater - call getp2 ;.fcb to DE - mvi c,filszf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -setrec: ;set random record position (#36) - call chkv20 ;must be 2.0 or greater - call getp2 ;.fcb to DE - mvi c,setrcf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -resdrv: ;reset drive function (#37) - ;1->drive vector - bit(16) - call chkv22 ;must be 2.2 or greater - call getp2 ;drive reset vector to DE - mvi c,rsdrvf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrranz: ;write random, zero fill function - ;1-> addr(fcb) - call chkv22 ;must be 2.2 or greater - call getp2i ;.fcb to DE - mvi c,wrrnzf - jmp ?bdos -; -;*********************************************************** -;* * -;*********************************************************** - end - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/CREATE.PLI b/software/CPM/CPM25_PLI80_v14/CREATE.PLI deleted file mode 100644 index 3f31918..0000000 --- a/software/CPM/CPM25_PLI80_v14/CREATE.PLI +++ /dev/null @@ -1,49 +0,0 @@ -/*****************************************************/ -/* This program creates a name and address file. The */ -/* data structure for each record is in the %INCLUDE */ -/* file RECORD.DCL. */ -/*****************************************************/ -create: - procedure options(main); - -%include 'record.dcl'; -%replace - true by '1'b, - false by '0'b; - - declare - output file, - filename character(14) varying, - eofile bit(1) static initial(false); - - put list ('Name and Address Creation Program, File Name: '); - get list (filename); - - open file(output) stream output title(filename); - - do while (^eofile); - put skip(3) list('Name: '); - get list(name); - eofile = (name = 'EOF'); - if ^eofile then - do; - /* write prompt strings to console */ - put list('Address: '); - get list(addr); - put list('City, State, Zip: '); - get list(city, state, zip); - put list('Phone: '); - get list(phone); - - /* data in memory, write to output file */ - put file(output) - list(name,addr,city,state,zip,phone); - put file(output) skip; - end; - end; - put file(output) skip list('EOF'); - put file(output) skip; - -end create; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DECPOLY.PLI b/software/CPM/CPM25_PLI80_v14/DECPOLY.PLI deleted file mode 100644 index a6e09eb..0000000 --- a/software/CPM/CPM25_PLI80_v14/DECPOLY.PLI +++ /dev/null @@ -1,33 +0,0 @@ -/*****************************************************/ -/* This program evaluates a polynomial expression */ -/* using FIXED DECIMAL data. */ -/*****************************************************/ -decpoly: - procedure options(main); - - %replace - true by '1'b; - declare - (x,y,z) fixed decimal(15,4); - - do while(true); - put skip(2) list('Type x,y,z: '); - get list(x,y,z); - - if x=0 & y=0 & z=0 then - stop; - - put skip list(' 2'); - put skip list(' x + 2y + z =',P(x,y,z)); - end; - - P: - procedure (x,y,z) returns (fixed decimal(15,4)); - declare - (x,y,z) fixed decimal(15,4); - return (x * x + 2 * y + z); - end P; - -end decpoly; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DEMO.PLI b/software/CPM/CPM25_PLI80_v14/DEMO.PLI deleted file mode 100644 index fe629f3..0000000 --- a/software/CPM/CPM25_PLI80_v14/DEMO.PLI +++ /dev/null @@ -1,15 +0,0 @@ -demo: - procedure options(main); - - declare - name character(20) varying; - - - put skip(2) list('PLEASE ENTER YOUR FIRST NAME: '); - get list(name); - put skip(2) list('HELLO '||name||', WELCOME TO PL/I'); - -end demo; - - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DEPREC.PLI b/software/CPM/CPM25_PLI80_v14/DEPREC.PLI deleted file mode 100644 index 5ecc523..0000000 --- a/software/CPM/CPM25_PLI80_v14/DEPREC.PLI +++ /dev/null @@ -1,298 +0,0 @@ -/*******************************************************/ -/* This program calculates three kinds of depreciation */ -/* schedules: straight_line, sum_of_the_years, and */ -/* double_declining. */ -/*******************************************************/ -depreciate: - procedure options(main); - %replace - clear_screen by '^z', - indent by 15, - ITC_rate by .1, - bonus_rate by .1, - bonus_max by 2000; - - declare - selling_price decimal(8,2), - adjusted_price decimal(8,2), - residual_value decimal(8,2), - year_value decimal(8,2), - depreciation_value decimal(8,2), - total_depreciation decimal(8,2), - book_value decimal(8,2), - tax_rate decimal(3,2), - sales_tax decimal(8,2), - tax_bracket decimal(2), - FYD decimal(8,2), - ITC decimal(8,2), - bonus_dep decimal(8,2), - months_remaining decimal(2), - new character(4), - factor decimal(2,1), - years decimal(2), - year_sum decimal(3), - current_year decimal(2), - select_sched character(1); - - declare - copy_to_list character(4), - output file variable, - (sysprint, list) file; - - declare - schedules character(3) static initial ('syd'), - schedule (0:3) entry variable; - - schedule (0) = error; - schedule (1) = straight_line; - schedule (2) = sum_of_years; - schedule (3) = double_declining; - - open file (sysprint) stream print pagesize(0) - title ('$con'); - - do while('1'b); - put list(clear_screen,'^i^i^iDepreciation Schedule'); - put skip(3) list('^i^iSelling Price? '); - get list(selling_price); - put list('^i^iResidual Value? '); - get list(residual_value); - put list('^i^iSales Tax (%)? '); - get list(tax_rate); - put list('^i^iTax Bracket(%)? '); - get list(tax_bracket); - put list('^i^iProRate Months? '); - get list(months_remaining); - put list('^i^iHow Many Years? '); - get list(years); - put list('^i^iNew? (yes/no) '); - get list(new); - put edit('^i^iSchedule:', - '^i^iStraight (s)', - '^i^iSum-of-Yrs (y)', - '^i^iDouble Dec (d)? ') (a,skip); - get list(select_sched); - put list('^i^iList? (yes/no) '); - get list(copy_to_list); - if copy_to_list = 'yes' then - open file(list) stream print title('$lst'); - factor = 1.5; - if new = 'yes' then - factor = 2.0; - sales_tax = decimal(selling_price*tax_rate,12,2)/100+.005; - if new = 'yes' | selling_price <= 100000.00 then - ITC = selling_price * ITC_rate; - else - ITC = 100000 * ITC_rate; - bonus_dep = selling_price * bonus_rate; - if bonus_dep > bonus_max then - bonus_dep = bonus_max; - put list(clear_screen); - call display(sysprint); - if copy_to_list = 'yes' then - call display(list); - put skip list('^i^i^i Type RETURN to Continue'); - get skip(2); - end; - -/******************************************************/ -/* This procedure displays the various depreciation */ -/* schedules. It calls the appropriate schedule with */ -/* an index into an array of entry constants. */ -/******************************************************/ -display: - procedure(f); - declare - f file; - output = f; - call schedule (index (schedules,select_sched)); -end display; - -/********************************************/ -/* This is a global error recovery routine. */ -/********************************************/ -error: - procedure; - put file (output) edit('Invalid Schedule - Enter s, y, or d') - (page,column(indent),x(8),a); - call line(); -end error; - -/*******************************************************/ -/* This procedure computes straight_line depreciation. */ -/*******************************************************/ -straight_line: - procedure; - adjusted_price = selling_price - bonus_dep; - put file (output) edit('S T R A I G H T L I N E') - (page,column(indent),x(14),a); - call header(); - depreciation_value = adjusted_price - residual_value; - book_value = adjusted_price; - total_depreciation = 0; - do current_year = 1 to years; - year_value = decimal(depreciation_value/years,8,2) + .005; - if current_year = 1 then - do; - year_value = year_value * months_remaining / 12; - FYD = year_value; - end; - depreciation_value = depreciation_value - year_value; - total_depreciation = total_depreciation + year_value; - book_value = adjusted_price - total_depreciation; - call print_line(); - end; - call summary(); -end straight_line; - -/*************************************************/ -/* This procedure computes depreciation based on */ -/* the sum_of_the_years. */ -/*************************************************/ -sum_of_years: - procedure; - adjusted_price = selling_price - bonus_dep; - put file (output) edit('S U M O F T H E Y E A R S') - (page,column(indent),x(11),a); - call header(); - depreciation_value = adjusted_price - residual_value; - book_value = adjusted_price; - total_depreciation = 0; - year_sum = 0; - do current_year = 1 to years; - year_sum = year_sum + current_year; - end; - - do current_year = 1 to years; - year_value = decimal(depreciation_value * - (years - current_year + 1),12,2)/ year_sum + .005; - if current_year = 1 then - do; - year_value = year_value * months_remaining / 12; - FYD = year_value; - end; - depreciation_value = depreciation_value - year_value; - total_depreciation = total_depreciation + year_value; - book_value = adjusted_price - total_depreciation; - call print_line(); - end; - call summary(); -end sum_of_years; - -/********************************************/ -/* This procedure computes double_declining */ -/* depreciation. */ -/********************************************/ -double_declining: - procedure; - adjusted_price = selling_price - bonus_dep; - put file (output) edit('D O U B L E D E C L I N I N G') - (page,column(indent),x(10),a); - call header(); - depreciation_value = adjusted_price - residual_value; - book_value = adjusted_price; - total_depreciation = 0; - do current_year = 1 to years - while (depreciation_value > 0); - year_value = decimal(book_value/years,8,2) * factor+.005; - if current_year = 1 then - do; - year_value = year_value * months_remaining / 12; - FYD = year_value; - end; - if year_value > depreciation_value then - year_value = depreciation_value; - depreciation_value = depreciation_value - year_value; - total_depreciation = total_depreciation + year_value; - book_value = adjusted_price - total_depreciation; - call print_line(); - end; - call summary(); -end double_declining; - -/**************************************************/ -/* This procedure prints an output header record. */ -/**************************************************/ -header: - procedure; - declare - new_or_used character(5); - - if new = 'yes' then - new_or_used = ' New'; - else - new_or_used = ' Used'; - put file (output) edit( - '--------------------------------------------------', - '|',selling_price+sales_tax,new_or_used, - residual_value,' Residual Value|', - '|',months_remaining,' Months Left ', - tax_rate,'% Tax',tax_bracket,'% Tax Bracket|') - (2(skip,column(indent),a), - 2(p'B$$,$$$,$$9.V99',a), - skip,column(indent),a,x(5),f(2),a,2(x(2),p'B99',a)); - - put file (output) edit( - '--------------------------------------------------', - '| Y | Depreciation | Depreciation | Book Value |', - '| r | For Year | Remaining | |', - '--------------------------------------------------') - (skip,column(indent),a); -end header; - -/*******************************************/ -/* This procedure prints the current line. */ -/*******************************************/ -print_line: - procedure; - put file (output) edit( - '|',current_year, - ' |',year_value, - ' |',depreciation_value, - ' |',book_value,' |') - (skip,column(indent),a,f(2),4(a,p'$z,zzz,zz9v.99')); -end print_line; - -/***************************************************/ -/* This procedure prints the summary of values for */ -/* each type of depreciation schedule. */ -/***************************************************/ -summary: - procedure; - declare - adj_ITC decimal(8,2), - total decimal(8,2), - direct decimal(8,2); - - call line(); - adj_ITC = ITC * 100 / tax_bracket; - total = FYD + sales_tax + adj_ITC + bonus_dep; - direct = total * tax_bracket / 100; - put file (output) edit( - '| First Year Reduction in Taxable Income |', - '--------------------------------------------------', - '| Depreciation ' ,FYD, '|', - '| Sales Tax ' ,sales_tax, '|', - '| ITC (Adjusted) ' ,adj_ITC, '|', - '| Bonus Depreciation ' ,bonus_dep, '|', - '| ------------- |', - '| Total for First Year ' ,total, '|', - '| Direct Reduction in Tax ' ,direct, '|') - (2(skip,column(indent),a),2(4(skip,column(indent),a, - p'$z,zzz,zz9v.99',x(3),a),skip,column(indent),a)); - call line(); -end summary; - -/*******************************************/ -/* This procedure prints a line of dashes. */ -/*******************************************/ -line: - procedure; - put file (output) edit( - '--------------------------------------------------') - (skip,column(indent),a); -end line; - - -end depreciate; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DFACT.PLI b/software/CPM/CPM25_PLI80_v14/DFACT.PLI deleted file mode 100644 index 46163df..0000000 --- a/software/CPM/CPM25_PLI80_v14/DFACT.PLI +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************/ -/* This program evaluates the Factorial function (n!) */ -/* using recursion and FIXED DECIMAL data. */ -/******************************************************/ -dfact: - procedure options(main); - declare - i fixed; - do i = 0 repeat(i+1); - put skip list('Factorial(',i,')=',factorial(i)); - end; - stop; - - factorial: - procedure(i) returns(fixed decimal(15,0)) - recursive; - declare - i fixed; - - if i = 0 then return (1); - return (decimal(i,15) * factorial(i-1)); - end factorial; - -end dfact; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DIO80.DCL b/software/CPM/CPM25_PLI80_v14/DIO80.DCL deleted file mode 100644 index 17ccf2a..0000000 --- a/software/CPM/CPM25_PLI80_v14/DIO80.DCL +++ /dev/null @@ -1,5 +0,0 @@ -declare - allvec entry returns(pointer), - getdpb entry returns(pointer); - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DIOCALLS.PLI b/software/CPM/CPM25_PLI80_v14/DIOCALLS.PLI deleted file mode 100644 index 462eeee..0000000 --- a/software/CPM/CPM25_PLI80_v14/DIOCALLS.PLI +++ /dev/null @@ -1,440 +0,0 @@ -/************************************************************** -* This PL/I program tests CP/M operating system entry points. * -* Note: The file DIOMOD.DCL contains only those declarations * -* for the entry points common to both the 8080 and 8086 * -* implementations. If you are running under CP/M 2.2 (or * -* newer) you also need to include the file DIO80.DCL. If you * -* are running under CP/M-86, you also need to include the * -* file DIO86.DCL. * -***************************************************************/ -diotest: - procedure options(main); - - %include 'diomod.dcl'; /* and either 'dio80.dcl' - or 'dio86.dcl' */ - - declare - c character(1), - v character(254) varying, - i fixed; - - -/********************************** -* * -* Fixed Location Tests: * -* * -* MEMPTR, MEMSIZ, MEMWDS, * -* DFCB0, DFCB1, DBUFF * -* * -**********************************/ -declare - memptrv pointer, - memsizv fixed, - (dfcb0v, dfcb1v, dbuffv) pointer, - command character(127) varying based (dbuffv), - 1 fcb0 based(dfcb0v), - 2 drive fixed(7), - 2 name character(8), - 2 type character(3), - 2 extnt fixed(7), - 2 space (19) bit(8), - 2 cr fixed(7), - memory (0:0) based(memptrv) bit(8); - memptrv = memptr(); - memsizv = memsiz(); - dfcb0v = dfcb0(); - dfcb1v = dfcb1(); - dbuffv = dbuff(); - - put edit ('Command Tail: ',command) (a); - put edit ('First Default File:', - fcb0.name,'.',fcb0.type) (skip,4a); - put edit ('dfcb0 ',unspec(dfcb0v), - 'dfcb1 ',unspec(dfcb1v), - 'dbuff ',unspec(dbuffv), - 'memptr',unspec(memptrv), - 'memsiz',unspec(memsizv), - 'memwds',memwds()) - (5(skip,a(7),b4),skip,a(7),f(6)); - put skip list('Clearing Memory'); - -/* sample loop to clear memory */ - -do i = 0 repeat(i+1) while (i^=memsizv-1); - memory (i) = '00'b4; -end; - - -/********************************** -* * -* REBOOT Test * -* * -**********************************/ -put skip list ('Reboot? (Y/N)'); -get list (c); -if translate(c,'Y','y') = 'Y' then - call reboot(); - - -/********************************** -* * -* RDCON, WRCON Test * -* * -**********************************/ -put list('Type Input, End with "$" '); -v = '^m^j'; -do while (substr(v,length(v)) ^= '$'); - v = v || rdcon(); -end; -put skip list('You Typed:'); -do i = 1 to length(v); - call wrcon(substr(v,i,1)); -end; - - -/********************************** -* * -* RDRDR and WRPUN Test * -* * -**********************************/ -put skip list('Reader to Punch Test?(Y/N)'); -get list (c); -if translate(c,'Y','y') = 'Y' then - do; - put skip list('Copying RDR to PUN until ctrl-z'); - c = ' '; - do while (c ^= '^z'); - c = rdrdr(); - if c ^= '^z' then - call wrpun(c); - end; - end; - - -/********************************** -* * -* WRLST Test * -* * -**********************************/ -put list('List Output Test?(Y/N)'); -get list(c); -if translate(c,'Y','y') = 'Y' then - do i = 1 to length(v); - call wrlst(substr(v,i,1)); - end; - - -/********************************** -* * -* Direct I/O, CONOUT, CONINP * -* * -**********************************/ -put list ('Direct I/O, Type Line, End with Line Feed'); -c = ' '; -do while (c ^= '^j'); - call conout(c); - c = coninp(); -end; - - -/********************************** -* * -* Direct I/O, Console Status * -* RDSTAT * -* * -**********************************/ -put skip list('Status Test, Type Character'); -do while (^rdstat()); -end; -/* clear the character */ -c = coninp(); - - -/********************************** -* * -* GETIO, SETIO IObyte * -* * -**********************************/ -declare - iobyte bit(8); - - iobyte = getio(); - put edit ('IObyte is ',iobyte,', New Value: ') - (skip,a,b4,a); - get edit (iobyte) (b4(2)); - call setio(iobyte); - - -/********************************** -* * -* Buffered Write, WRSTR Test * -* * -**********************************/ -put list('Buffered Output Test:'); - -/* "v" was previously filled by RDCON */ - -call wrstr(addr(v)); - - -/********************************** -* * -* Buffered Read RDBUF Test * -* * -**********************************/ -declare - 1 inbuff static, - 2 maxsize bit(8) initial('80'b4), - 2 inchars character(127) varying; - -put skip list('Line Input, Type Line, End With Return'); -put skip; -call rdbuf(addr(inbuff)); -put skip list('You Typed: ',inchars); - - -/********************************** -* * -* Console BREAK Test * -* * -**********************************/ -put skip list('Console Break Test, Type Character'); -do while(^break()); -end; -c = rdcon(); - - -/********************************** -* * -* Version Number VERS Test * -* * -**********************************/ -declare - version bit(16); - -version = vers(); - -if substr(version,1,8) = '00'b4 then - put skip list('CP/M'); -else - put skip list('MP/M'); - -put edit(' Version ',substr(version,9,4),'.',substr(version,13,4)) - (a,b4,a,b4); - - -/********************************** -* * -* Disk System RESET Test * -* * -**********************************/ -put skip list('Resetting Disk System'); -call reset(); - - -/********************************** -* * -* Disk SELECT Test * -* * -**********************************/ -put skip list('Select Disk # '); -get list(i); -call select(i); - -/********************************** -* * -* Note: The OPEN, CLOSE, SEAR, * -* SEARN, DELETE, RDSEQ, * -* WRSEQ, MAKE, and RENAME * -* functions are tested in * -* the DIOCOPY program. * -* * -**********************************/ - -/********************************** -* * -* LOGVEC and CURDSK * -* * -**********************************/ -put skip list ('Login Vector',logvec(), - 'Current Disk',curdsk()); - -/********************************** -* * -* See DIOCOPY for SETDMA Function * -* * -**********************************/ - -/********************************** -* * -* Allocate Vector ALLVEC Test * -* * -* Note: This test contains two * -* different versions; one for * -* 8080 code, and another for * -* 8086 code. Before compiling * -* you must comment out the * -* version you don't want to use. * -* * -**********************************/ - -/* 8080 version - -declare - alloc (0:30) bit(8) based (allvec()), - allvecp pointer; - -allvecp = allvec(); -put edit('Alloc Vector at ',unspec(allvecp),':', - (alloc(i) do i=0 to 30)) - (skip,a,b4,a,254(skip,4(b,x(1)))); */ - - -/* 8086 version - -declare - alloc (0:30) bit(8), - allvecp(2) pointer; - -call allvec(allvecp); -call movgtl(31,allvecp,addr(alloc)); -put edit('Alloc Vector at offset ', unspec(allvecp(1)), - ', segment ',unspec(allvecp(2)),':', - (alloc(i) do i=0 to 30)) - (skip,a,b4,a,b4,a,254(skip,4(b,x(1)))); */ - - -/********************************** -* * -* Note: the following functions * -* apply to version 2.0 or newer. * -* * -**********************************/ - -/********************************** -* * -* WPDISK Test * -* * -**********************************/ -put skip list('Write Protect Disk?(Y/N)'); -get list(c); -if translate(c,'Y','y') = 'Y' then - call wpdisk(); - -/********************************** -* * -* ROVEC Test * -* * -**********************************/ -put skip list('Read/Only Vector is',rovec()); - -/********************************** -* * -* Disk Parameter Block Decoding * -* Using GETDPB * -* * -* Note: This test contains two * -* different versions; one for * -* 8080 code, and another for * -* 8086 code. Before compiling * -* you must comment out the * -* version you don't want to use. * -* * -**********************************/ - -/* 8080 version - -declare - dpbp pointer, - 1 dpb based (dpbp), - 2 spt fixed(15), - 2 bsh fixed(7), - 2 blm bit(8), - 2 exm bit(8), - 2 dsm bit(16), - 2 drm bit(16), - 2 al0 bit(8), - 2 al1 bit(8), - 2 cks bit(16), - 2 off fixed(15); - -dpbp = getdpb(); -put edit('Disk Parameter Block:', - 'spt',spt,'bsh',bsh,'blm',blm, - 'exm',exm,'dsm',dsm,'drm',drm, - 'al0',al0,'al1',al1,'cks',cks, - 'off',off) - (skip,a,2(skip,a(4),f(6)),4(skip,a(4),b4), - skip,2(a(4),b,x(1)),skip,a(4),b4, - skip,a(4),f(6)); */ - - -/* 8086 version - -declare - dpbp(2) pointer, - 1 dpb, - 2 spt fixed(15), - 2 bsh fixed(7), - 2 blm bit(8), - 2 exm bit(8), - 2 dsm bit(16), - 2 drm bit(16), - 2 al0 bit(8), - 2 al1 bit(8), - 2 cks bit(16), - 2 off fixed(15); - -call getdpb(dpbp); -call movgtl(15,dpbp,addr(dpb)); -put edit('Disk Parameter Block:', - 'spt',spt,'bsh',bsh,'blm',blm, - 'exm',exm,'dsm',dsm,'drm',drm, - 'al0',al0,'al1',al1,'cks',cks, - 'off',off) - (skip,a,2(skip,a(4),f(6)), - 4(skip,a(4),b4), - skip,2(a(4),b,x(1)), - skip,a(4),b4, - skip,a(4),f(6)); */ - - -/********************************** -* * -* Test Get/Set user Code * -* GETUSR, SETUSR * -* * -**********************************/ -put skip list ('User is',getusr(),', New User:'); -get list(i); -call setusr(i); - -/********************************** -* * -* FILSIZ, SETREC, * -* RDRAN, WRRAN, WRRANZ are * -* tested in DIORAND * -* * -**********************************/ - -/********************************** -* * -* Test Drive Reset RESDRV * -* (version 2.2 or newer) * -* * -**********************************/ -declare - drvect bit(16); - -put list('Drive Reset Vector:'); -get list(drvect); -call resdrv(drvect); - -/********************************** -* * -* * -**********************************/ - -end diotest; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DIOCOPY.PLI b/software/CPM/CPM25_PLI80_v14/DIOCOPY.PLI deleted file mode 100644 index 68ac9f4..0000000 --- a/software/CPM/CPM25_PLI80_v14/DIOCOPY.PLI +++ /dev/null @@ -1,155 +0,0 @@ -/********************************************************* -* This PL/I program demonstrates direct operating system * -* calls by performing a file-to-file copy. * -*********************************************************/ -diocopy: - procedure options(main); - - %replace - bufwds by 64, /* words per buffer */ - quest by 63, /* ASCII '?' */ - true by '1'b, - false by '0'b; - - %include 'diomod.dcl'; - - declare - 1 destfile, - %include 'fcb.dcl'; - - declare - dfcb0p ptr, - 1 sourcefile based(dfcb0p), - %include 'fcb.dcl'; - - declare - 1 dfcb1file based(dfcb1()), - %include 'fcb.dcl'; - - declare - 1 renfile, - %include 'fcb.dcl'; - - declare - answer char(1), - extcnt fixed(7); - -/* buffer management */ - - declare - eofile bit(1), - i fixed(15), - m fixed(15), - nbuffs fixed(15), - memory (0:0) bit(16) based(memptr()); - -/* compute number of buffs, 64 words each */ - - nbuffs = divide(memwds(),bufwds,15); - if nbuffs = 0 then - do; - put skip list('No Buffer Space'); - call reboot(); - end; - -/* initialize fcb's */ - - dfcb0p = dfcb0(); - destfile = dfcb1file; - -/* copy fcb to rename file, count extents */ - - renfile = destfile; - -/* search all extents by inserting '?' */ - - renfile.fext = quest; - if sear(addr(renfile)) ^= -1 then - do; - extcnt = 1; - do while(searn() ^= -1); - extcnt = extcnt + 1; - end; - put edit ('OK to Delete ',extcnt,' Extent(s)?(Y/N)') - (skip,a,f(3),a); - get list(answer); - if ^ (answer = 'Y' ! answer = 'y') then - call reboot(); - end; - -/* destination file will be deleted later */ - - destfile.ftype = '$$$'; - -/* delete any existing x.$$$ file */ - - call delete(addr(destfile)); - -/* open the source file, if possible */ - - if open(addr(sourcefile)) = -1 then - do; - put skip list('No Source File'); - call reboot(); - end; - -/* source file opened, create $$$ file */ - - destfile.fext = 0; - destfile.crec = 0; - if make(addr(destfile)) = -1 then - do; - put skip list('No Directory Space'); - call reboot(); - end; - -/* $$$ temp file created, now copy from source */ - - eofile = false; - do while (^eofile); - m = 0; - /* fill buffers */ - do i = 0 repeat (i+1) while (i= '22'b4; - -/* read and process file name */ - - put skip list('Data Base Name: '); - get list(fn); - fn = translate(fn,upper,lower); - -/* process optional drive prefix */ - - i = index(fn,':'); - if i = 0 then - drive = 0; - else - if i = 2 then - do; /* convert character to drive code */ - drive = index(upper,substr(fn,1,1)); - if drive = 0 ! drive > 16 then - do; - put skip list('Bad Drive Name'); - stop; - end; - fn = substr(fn,i+1); - end; - -/* get file name and optional type */ - - i = index(fn,'.'); - if i = 0 then - do; /* no file type specified, use .DAT */ - fname = fn; - ftype = 'DAT'; - end; - else - do; - fname = substr(fn,1,i-1); - ftype = substr(fn,i+1); - end; - -/* clear the extent field */ - fext = 0; - - if open(addr(database)) = -1 then - do; - put skip list('Creating New Database'); - if make(addr(database)) = -1 then - do; - put skip list('No Directory Space'); - stop; - end; - end; - else - do; - call filsiz(addr(database)); - put skip list('File Size:',rrec,' Records'); - end; - -/* main processing loop */ - - do while('1'b); - call setrec(addr(database)); - put skip list('Current Record',rrec); - put skip list('Read(0),Write(1),Quit(2)? '); - get list(mode); - if mode < 2 then - do; - put skip list('Record Number? '); - get list(rrec); - rovf = 0; - end; - if mode = 0 then - do; - code = rdran(addr(database)); - if code = 0 then - do; - if bitbuf(1) = '00'b4 then - put skip list('Zero Record'); - else - put skip list(buffer); - end; - else - put skip list('Return Code',code); - end; - else - if mode = 1 then - do; - put skip list('Data: '); - get list(buffer); - if zerofill then - code = wrranz(addr(database)); - else - code = wrran (addr(database)); - if code ^= 0 then - put skip list('Return Code',code); - end; - else - if mode = 2 then - do; - if close(addr(database)) = -1 then - put skip list('Read/Only'); - stop; - end; - end; - - end diorand; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DIV2.ASM b/software/CPM/CPM25_PLI80_v14/DIV2.ASM deleted file mode 100644 index c639fda..0000000 --- a/software/CPM/CPM25_PLI80_v14/DIV2.ASM +++ /dev/null @@ -1,52 +0,0 @@ - title 'division by power of two' - public div2 - extrn ?signal -; entry: -; p1 -> fixed(7) power of two -; p2 -> floating point number -; exit: -; p1 -> (unchanged) -; p2 -> p2 / (2**p1) -div2: ;HL = .low(.p1) - mov e,m ;low(.p1) - inx h ;HL = .high(.p1) - mov d,m ;DE = .p1 - inx h ;HL = .low(p2) - ldax d ;a = p1 (power of two) - mov e,m ;low(.p2) - inx h ;HL = .high(.p2) - mov d,m ;DE = .p2 - xchg ;HL = .p2 -; -; A = power of 2, HL = .low byte of fp num - inx h ;to middle of mantissa - inx h ;to high byte of mantissa - inx h ;to exponent byte - inr m - dcr m ;p2 already zero? - rz ;return if so -dby2: ;divide by two - ora a ;counted power of 2 to zero? - rz ;return if so - dcr a ;count power of two down - dcr m ;count exponent down - jnz dby2 ;loop again if no underflow -; -;underflow occurred, signal underflow condition - lxi h,siglst;signal parameter list - call ?signal ;signal underflow - ret ;normally, no return -; - dseg -siglst: dw sigcod ;address of signal code - dw sigsub ;address of subcode - dw sigfil ;address of file code - dw sigaux ;address of aux message -; end of parameter vector, start of params -sigcod: db 3 ;03 = underflow -sigsub: db 128 ;arbitrary subcode for id -sigfil: dw 0000 ;no associated file name -sigaux: dw undmsg ;0000 if no aux message -undmsg: db 32,'Underflow in Divide by Two',0 - end - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/DTEST.PLI b/software/CPM/CPM25_PLI80_v14/DTEST.PLI deleted file mode 100644 index c4be1f1..0000000 --- a/software/CPM/CPM25_PLI80_v14/DTEST.PLI +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************/ -/* This program tests an assembly language routine to */ -/* do floating point division. */ -/******************************************************/ -dtest: - procedure options(main); - declare - div2 entry(fixed(7),float), - i fixed(7), - f float; - - do i = 0 by 1; - f = 100; - call div2(i,f); - put skip list('100 / 2 **',i,'=',f); - end; - -end dtest; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/ENTER.PLI b/software/CPM/CPM25_PLI80_v14/ENTER.PLI deleted file mode 100644 index a47aaeb..0000000 --- a/software/CPM/CPM25_PLI80_v14/ENTER.PLI +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************/ -/* This program constructs a data base of employee */ -/* records using a structure declaration. */ -/******************************************************/ - -enter: - procedure options(main); - %replace - true by '1'b, - false by '0'b; - - declare - 1 employee static, - 2 name character(30) varying, - 2 address, - 3 street character(30) varying, - 3 city character(10) varying, - 3 state character(12) varying, - 3 zip fixed decimal(5), - 2 age fixed decimal(3), - 2 wage fixed decimal(5,2), - 2 hours fixed decimal(5,1); - - declare - 1 default static, - 2 street character(30) varying - initial('(no street)'), - 2 city character(10) varying - initial('(no city)'), - 2 state character(12) varying - initial('(no state)'), - 2 zip fixed decimal(5) - initial(00000); - declare - emp file; - - open file(emp) keyed output environment(f(128),b(8000)) - title ('$1.EMP'); - - do while(true); - put list('Employee: '); - get list(name); - if name = 'EOF' then - do; - call write_it(); - stop; - end; - address = default; - put list (' Age, Wage: '); - get list (age,wage); - hours = 0; - call write_it(); - end; - - write_it: - procedure; - write file(emp) from(employee); - end write_it; - -end enter; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/EXPR1.PLI b/software/CPM/CPM25_PLI80_v14/EXPR1.PLI deleted file mode 100644 index 10f02c8..0000000 --- a/software/CPM/CPM25_PLI80_v14/EXPR1.PLI +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************/ -/* This program evaluates an arithmetic expression */ -/* using recursion. It contains two procedures. GNT */ -/* obtains the input expression consisting of separate*/ -/* tokens, and EXP which performs the recursive */ -/* evaluation of the tokens in the input line. */ -/******************************************************/ -expression: - procedure options(main); - declare - sysin file, - value float, - token character(10) varying; - - on endfile(sysin) - stop; - - on error(1) /* conversion or signal */ - begin; - put skip list('Invalid Input at ',token); - get skip; - goto restart; - end; - - restart: - - do while('1'b); - put skip(3) list('Type expression: '); - value = exp(); - put skip list('Value is:',value); - end; - - gnt: - procedure; - get list(token); - end gnt; - - exp: - procedure returns(float binary) recursive; - declare x float binary; - call gnt(); - if token = '(' then - do; - x = exp(); - call gnt(); - if token = '+' then - x = x + exp(); - else - if token = '-' then - x = x - exp(); - else - if token = '*' then - x = x * exp(); - else - if token = '/' then - x = x / exp(); - else - signal error(1); - call gnt(); - if token ^= ')' then - signal error(1); - end; - else - x = token; - return(x); - end exp; - -end expression; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/EXPR2.PLI b/software/CPM/CPM25_PLI80_v14/EXPR2.PLI deleted file mode 100644 index 82c689b..0000000 --- a/software/CPM/CPM25_PLI80_v14/EXPR2.PLI +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************/ -/* This program evaluates an arithmetic expression */ -/* using recursion. It contains an expanded version */ -/* of the GNT procedure that obtains an expression */ -/* containing separate tokens. EXP then recursively */ -/* evaluates the tokens in the input line. */ -/******************************************************/ - -expression: - procedure options(main); - - %replace - true by '1'b; - - declare - sysin file, - value float, - (token character(10), line character(80)) varying - static initial(''); - - on endfile(sysin) - stop; - - on error(1) /* conversion or signal */ - begin; - put skip list('Invalid Input at ',token); - token = ''; line = ''; - goto restart; - end; - - restart: - - do while('1'b); - put skip(3) list('Type expression: '); - value = exp(); - put edit('Value is: ',value) (skip,a,f(10,4)); - end; - - gnt: - procedure; - declare - i fixed; - - line = substr(line,length(token)+1); - do while(true); - if line = '' then - get edit(line) (a); - i = verify(line,' '); - if i = 0 then - line = ''; - else - do; - line = substr(line,i); - i = verify(line,'0123456789.'); - if i = 0 then - token = line; - else - if i = 1 then - token = substr(line,1,1); - else - token = substr(line,1,i-1); - return; - end; - end; - end gnt; - - exp: - procedure returns(float binary) recursive; - declare x float binary; - call gnt(); - if token = '(' then - do; - x = exp(); - call gnt(); - if token = '+' then - x = x + exp(); - else - if token = '-' then - x = x - exp(); - else - if token = '*' then - x = x * exp(); - else - if token = '/' then - x = x / exp(); - else - signal error(1); - call gnt(); - if token ^= ')' then - signal error(1); - end; - else - x = token; - return(x); - end exp; - -end expression; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FCB.DCL b/software/CPM/CPM25_PLI80_v14/FCB.DCL deleted file mode 100644 index 7f93ba2..0000000 --- a/software/CPM/CPM25_PLI80_v14/FCB.DCL +++ /dev/null @@ -1,16 +0,0 @@ - 2 name1, - 3 drive fixed(7), /* drive number */ - 3 fname character(8), /* file name */ - 3 ftype character(3), /* file type */ - 3 fext fixed(7), /* file extent */ - 3 space (3) bit(8), /* filler */ - 2 name2, /* used in rename */ - 3 drive2 fixed(7), - 3 fname2 character(8), - 3 ftype2 character(3), - 3 fext2 fixed(7), - 3 space2 (3) bit(8), - 2 crec fixed(7), /* current record */ - 2 rrec fixed(15), /* random record */ - 2 rovf fixed(7); /* random rec overflow */ - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FDIV2.ASM b/software/CPM/CPM25_PLI80_v14/FDIV2.ASM deleted file mode 100644 index 0c6a16e..0000000 --- a/software/CPM/CPM25_PLI80_v14/FDIV2.ASM +++ /dev/null @@ -1,63 +0,0 @@ - title 'div by power of two (function)' - public fdiv2 - extrn ?signal -; entry: -; p1 -> fixed(7) power of two -; p2 -> floating point number -; exit: -; p1 -> (unchanged) -; p2 -> (unchanged) -; stack: p2 / (2 ** p1) -fdiv2: ;HL = .low(.p1) - mov e,m ;low(.p1) - inx h ;HL = .high(.p1) - mov d,m ;DE = .p1 - inx h ;HL = .low(p2) - ldax d ;a = p1 (power of two) - mov e,m ;low(.p2) - inx h ;HL = .high(.p2) - mov d,m ;DE = .p2 - xchg ;HL = .p2 -; -; A = power of 2, HL = .low byte of fp num - mov e,m ;E = low mantissa - inx h ;to middle of mantissa - mov d,m ;D = middle mantissa - inx h ;to high byte of mantissa - mov c,m ;C = high mantissa - inx h ;to exponent byte - mov b,m ;B = exponent - inr b ;B = 00? - dcr b ;becomes 00 if so - jz fdret ;to return from float div -dby2: ;divide by two - ora a ;counted power of 2 to zero? - jz fdret ;return if so - dcr a ;count power of two down - dcr b ;count exponent down - jnz dby2 ;loop again if no underflow -; -;underflow occurred, signal underflow condition - lxi h,siglst;signal parameter list - call ?signal ;signal underflow - lxi b,0 ;clear to zero - lxi d,0 ;for default return -; -fdret: pop h ;recall return address - push b ;save high order fp num - push d ;save low order fp num - pchl ;return to calling routine -; - dseg -siglst: dw sigcod ;address of signal code - dw sigsub ;address of subcode - dw sigfil ;address of file code - dw sigaux ;address of aux message -; end of parameter vector, start of params -sigcod: db 3 ;03 = underflow -sigsub: db 128 ;arbitrary subcode for id -sigfil: dw 0000 ;no associated file name -sigaux: dw undmsg ;0000 if no aux message -undmsg: db 32,'Underflow in Divide by Two',0 - end - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FDTEST.PLI b/software/CPM/CPM25_PLI80_v14/FDTEST.PLI deleted file mode 100644 index 4fb2d76..0000000 --- a/software/CPM/CPM25_PLI80_v14/FDTEST.PLI +++ /dev/null @@ -1,18 +0,0 @@ -/****************************************************/ -/* This program tests the assembly-language routine */ -/* called FDIV2 which returns a FLOAT BINARY value. */ -/****************************************************/ -fdtest: - procedure options(main); - declare - fdiv2 entry(fixed(7),float) returns(float), - i fixed(7), - f float; - - do i = 0 by 1; - put skip list('100 / 2 **',i,'=',fdiv2(i,100)); - end; - -end fdtest; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FFACT.PLI b/software/CPM/CPM25_PLI80_v14/FFACT.PLI deleted file mode 100644 index 525e0e2..0000000 --- a/software/CPM/CPM25_PLI80_v14/FFACT.PLI +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************/ -/* This program evaluates the Factorial function (n!) */ -/* using recursion and FLOAT BINARY data. */ -/******************************************************/ -ffact: - procedure options(main); - declare - i fixed; - do i = 0 repeat(i+1); - put skip list('Factorial(',i,')=',factorial(i)); - end; - stop; - - factorial: - procedure(i) returns(float) recursive; - declare - i fixed; - if i = 0 then return (1); - return (i * factorial(i-1)); - end factorial; - -end ffact; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FLTPOLY.PLI b/software/CPM/CPM25_PLI80_v14/FLTPOLY.PLI deleted file mode 100644 index 4bae21f..0000000 --- a/software/CPM/CPM25_PLI80_v14/FLTPOLY.PLI +++ /dev/null @@ -1,33 +0,0 @@ -/*****************************************************/ -/* This program evaluates a polynomial expression */ -/* using FLOAT BINARY data. */ -/*****************************************************/ -fltpoly: - procedure options(main); - - %replace - true by '1'b; - declare - (x,y,z) float binary(24); - - do while(true); - put skip(2) list('Type x,y,z: '); - get list(x,y,z); - - if x=0 & y=0 & z=0 then - stop; - - put skip list(' 2'); - put skip list(' x + 2y + z =',P(x,y,z)); - end; - - P: - procedure (x,y,z) returns (float binary(24)); - declare - (x,y,z) float binary; - return (x * x + 2 * y + z); - end P; - -end fltpoly; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FLTPOLY2.PLI b/software/CPM/CPM25_PLI80_v14/FLTPOLY2.PLI deleted file mode 100644 index 60c8904..0000000 --- a/software/CPM/CPM25_PLI80_v14/FLTPOLY2.PLI +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************/ -/* This program evaluates a polynomial expression */ -/* using FLOAT BINARY data. It also traps the end-of */ -/* file condition for the file SYSIN. */ -/******************************************************/ -fltpoly2: - procedure options(main); - %replace - false by '0'b, - true by '1'b; - declare - (x,y,z) float binary(24), - eofile bit(1) static initial(false), - sysin file; - - on endfile(sysin) - eofile = true; - - do while(true); - put skip(2) list('Type x,y,z: '); - get list(x,y,z); - - if eofile then - stop; - - put skip list(' 2'); - put skip list(' x + 2y + z =',P(x,y,z)); - end; - - P: - procedure (x,y,z) returns (float binary(24)); - declare - (x,y,z) float binary(24); - return (x * x + 2 * y + z); - end P; - -end fltpoly2; - -  \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/FSCAN.PLI b/software/CPM/CPM25_PLI80_v14/FSCAN.PLI deleted file mode 100644 index 5cac035..0000000 --- a/software/CPM/CPM25_PLI80_v14/FSCAN.PLI +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************/ -/* This program tests the procedure called GNT, which */ -/* is a free-field scanner (parser) that reads a line */ -/* of input and breaks it into individual parts. */ -/******************************************************/ -fscan: - procedure options(main); - %replace - true by '1'b; - declare - token character(80) varying - static initial(''); - - gnt: - procedure; - declare - i fixed, - line character(80) varying - static initial(''); - - line = substr(line,length(token)+1); - do while(true); - if line = '' then - get edit(line) (a); - i = verify(line,' '); - if i = 0 then - line = ''; - else - do; - line = substr(line,i); - i = verify(line,'0123456789.'); - if i = 0 then - token = line; - else - if i = 1 then - token = substr(line,1,1); - else - token = substr(line,1,i-1); - return; - end; - end; - end gnt; - - do while(true); - call gnt; - put edit(''''!!token!!'''') (x(1),a); - end; - -end fscan; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/IFACT.PLI b/software/CPM/CPM25_PLI80_v14/IFACT.PLI deleted file mode 100644 index e72770d..0000000 --- a/software/CPM/CPM25_PLI80_v14/IFACT.PLI +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************/ -/* This program evaluates the Factorial function (n!) */ -/* using iteration. */ -/******************************************************/ -ifact: - procedure options(main); - declare - (i, n, F) fixed; - - do i = 0 by 1; - F = 1; - do n = i to 1 by -1; - F = n * F; - end; - put edit('factorial(',i,')=',F) - (skip, a,f(2), a, f(7)); - end; -end ifact; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/INVERT.PLI b/software/CPM/CPM25_PLI80_v14/INVERT.PLI deleted file mode 100644 index a8d7ce2..0000000 --- a/software/CPM/CPM25_PLI80_v14/INVERT.PLI +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************/ -/* This is an external procedure called by MAININVT. */ -/******************************************************/ -invert: - procedure (a,r,c); - %include 'matsize.lib'; - declare - (d, a(maxrow,maxcol)) float binary(24), - (i,j,k,l,r,c) fixed binary(6); - do i = 1 to r; - d = a(i,1); - do j = 1 to c - 1; - a(i,j) = a(i,j+1)/d; - end; - a(i,c) = 1/d; - do k = 1 to r; - if k ^= i then - do; - d = a(k,1); - do l = 1 to c - 1; - a(k,l) = a(k,l+1) - a(i,l) * d; - end; - a(k,c) = - a(i,c) * d; - end; - end; - end; - -end invert; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/KEYFILE.PLI b/software/CPM/CPM25_PLI80_v14/KEYFILE.PLI deleted file mode 100644 index ace1b4a..0000000 --- a/software/CPM/CPM25_PLI80_v14/KEYFILE.PLI +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************/ -/* This program reads an employee record file and */ -/* creates another file of keys to access the records.*/ -/******************************************************/ - -keyfile: - procedure options(main); - declare - 1 employee static, - 2 name character(30) varying; - - declare - (input, keys) file, - k fixed; - - open file(input) keyed environment(f(128),b(10000)) - title('$1.emp'); - - open file(keys) stream output - linesize (60) title('$1.key'); - - do while('1'); - read file(input) into(employee) keyto(k); - put skip list(k,name); - put file(keys) list(name,k); - if name = 'EOF' then - stop; - end; - -end keyfile; - - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/LABELS.PLI b/software/CPM/CPM25_PLI80_v14/LABELS.PLI deleted file mode 100644 index d58ea96..0000000 --- a/software/CPM/CPM25_PLI80_v14/LABELS.PLI +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************/ -/* This is a non-functional program. Its purpose is */ -/* to illustrate the concept of label constants and */ -/* variables. */ -/******************************************************/ -Labels: - procedure options(main); - declare - i fixed, - (x, y, z(3)) label; - x = lab1; - y = x; - - goto lab1; - goto x; - goto y; - - call P(lab2); - - do i = 1 to 3; - z(i) = c(i); - end; - - i = 2; - goto z(i); - goto c(i); - - c(1):; - c(2):; - c(3):; - - lab1:; - lab2:; - - P: - procedure (g); - declare - g label; - goto g; - end P; - -end Labels; - - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/LIB.COM b/software/CPM/CPM25_PLI80_v14/LIB.COM deleted file mode 100644 index 49a4e4df485ec614044a055b15d943c3c175b060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 d-MC-7$G3o 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 diff --git a/software/CPM/CPM25_PLI80_v14/LOAN1.PLI b/software/CPM/CPM25_PLI80_v14/LOAN1.PLI deleted file mode 100644 index b3b87fc..0000000 --- a/software/CPM/CPM25_PLI80_v14/LOAN1.PLI +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************/ -/* This program produces a schedule of loan payments */ -/* using the following algorithm: if P = loan payment,*/ -/* i = interest, and PMT is the monthly payment then */ -/* P = (P + (i*P) - PMT. */ -/******************************************************/ -loan1: - procedure options(main); - declare - m fixed binary, - y fixed binary, - P fixed decimal(11,2), - PMT fixed decimal(6,2), - i fixed decimal(4,2); - - do while('1'b); - put skip list('Principal '); - get list(P); - put list('Interest '); - get list(i); - put list('Payment '); - get list(PMT); - m = 0; - y = 0; - do while (P > 0); - if mod(m,12) = 0 then - do; - y = y + 1; - put skip list('Year',y); - end; - m = m + 1; - put skip list(m,P); - P = P + round( i * P / 1200, 2); - if P < PMT - then PMT = P; - put list(PMT); - P = P - PMT; - end; - end; - -end loan1; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/LOAN2.PLI b/software/CPM/CPM25_PLI80_v14/LOAN2.PLI deleted file mode 100644 index ac2812b..0000000 --- a/software/CPM/CPM25_PLI80_v14/LOAN2.PLI +++ /dev/null @@ -1,221 +0,0 @@ -/*****************************************************/ -/* This program computes a schedule of loan payments */ -/* using an elaborate analysis and display format. */ -/* It contains five internal procedures: DISPLAY, */ -/* SUMMARY, CURRENT_YEAR, HEADER, and LINE. */ -/*****************************************************/ -loan2: - procedure options(main); - %replace - true by '1'b, - false by '0'b, - clear by '^z'; - - declare - end bit(1), - m fixed binary, - sm fixed binary, - y fixed binary, - sy fixed binary, - fm fixed binary, - dl fixed binary, - P fixed decimal(10,2), - PV fixed decimal(10,2), - PP fixed decimal(10,2), - PL fixed decimal(10,2), - PMT fixed decimal(10,2), - PMV fixed decimal(10,2), - INT fixed decimal(10,2), - YIN fixed decimal(10,2), - IP fixed decimal(10,2), - yi fixed decimal(4,2), - i fixed decimal(4,2), - INF fixed decimal(4,3), - ci fixed decimal(15,14), - fi fixed decimal(7,5), - ir fixed decimal(4,2); - - declare - name character(14) varying static initial('$con'), - output file; - - put list(clear,'^i^iS U M M A R Y O F P A Y M E N T S'); - - on undefinedfile(output) - begin; - put skip list('^i^icannot write to',name); - goto open_output; - end; - - open_output: - put skip(2) list('^i^iOutput File Name '); - get list(name); - if name = '$con' then - open file(output) title('$con') print pagesize(0); - else - open file(output) title(name) print; - - on error - begin; - put skip list('^i^iBad Input Data, Retry'); - goto retry; - end; - - retry: - do while(true); - put skip(2) list('^i^iPrincipal '); - get list(PV); - P = PV; - put list('^i^iInterest '); - get list(yi); - i = yi; - put list('^i^iPayment '); - get list(PMV); - PMT = PMV; - put list('^i^i%Inflation '); - get list(ir); - fi = 1 + ir/1200; - ci = 1.00; - put list('^i^iStarting Month '); - get list(sm); - put list('^i^iStarting Year '); - get list(sy); - put list('^i^iFiscal Month '); - get list(fm); - put edit('^i^iDisplay Level ', - '^i^iYr Results : 0 ', - '^i^iYr Interest: 1 ', - '^i^iAll Values : 2 ') - (skip,a); - get list(dl); - if dl < 0 | dl > 2 then - signal error; - m = sm; - y = sy; - IP = 0; - PP = 0; - YIN = 0; - if name ^= '' then - put file(output) page; - call header(); - do while (P > 0); - end = false; - INT = round ( i * P / 1200, 2 ); - IP = IP + INT; - PL = P; - P = P + INT; - if P < PMT then - PMT = P; - P = P - PMT; - PP = PP + (PL - P); - INF = ci; - ci = ci / fi; - if P = 0 | dl > 1 | m = fm then - do; - put file(output) skip - edit('|',100*m+y) (a,p'99/99'); - call display(PL * INF, INT * INF, - PMT * INF, PP * INF, IP * INF); - end; - if m = fm & dl > 0 then - call summary(); - m = m + 1; - if m > 12 then - do; - m = 1; - y = y + 1; - if y > 99 then - y = 0; - end; - end; - if dl = 0 then - call line(); - else - if ^end then - call summary(); - end retry; -/****************************************************/ -/* This procedure performs the output of the actual */ -/* parameters passed to it by the main part of the */ -/* program. */ -/****************************************************/ -display: - procedure(a,b,c,d,e); - declare - (a,b,c,d,e) fixed decimal(10,2); - - put file (output) edit - ('|',a,'|',b,'|',c,'|',d,'|',e,'|') - (a,2(2(p'$zz,zzz,zz9v.99',a), - p'$zzz,zz9.v99',a)); -end display; - -/*************************************************/ -/* This procedure computes the summary of yearly */ -/* interest. */ -/*************************************************/ -summary: - procedure; - end = true; - call current_year(IP-YIN); - YIN = IP; -end summary; - -/****************************************************/ -/* This procedure computes the interest paid during */ -/* current year. */ -/****************************************************/ -current_year: - procedure(I); - declare - yp fixed binary, - I fixed decimal(10,2); - yp = y; - if fm < 12 then - yp = yp - 1; - call line(); - put skip file(output) edit - ('|','Interest Paid During ''',yp,'-''',y,' is ',I,'|') - (a,x(15),2(a,p'99'),a,p'$$$,$$$,$$9V.99',x(16),a); - call line(); -end current_year; - -/******************************************************/ -/* This procedure defines and prints out an elaborate */ -/* header format. */ -/******************************************************/ -header: - procedure; - put file(output) list(clear); - call line(); - put file(output) skip edit - ('|','L O A N P A Y M E N T S U M M A R Y','|') - (a,x(19)); - call line(); - put file(output) skip edit - ('|','Interest Rate',yi,'%','Inflation Rate',ir,'%','|') - (a,x(15),2(a,p'b99v.99',a,x(6)),x(9),a); - call line(); - put file(output) skip edit - ('|Date |',' Principal |','Plus Interest|',' Payment |', - 'Principal Paid|','Interest Paid |') (a); - call line(); -end header; - -/*******************************************************/ -/* This procedure prints out a series of dashed lines. */ -/*******************************************************/ -line: - procedure; - declare - i fixed bin; - put file(output) skip edit - ('-------','------------', - ('---------------' do i = 1 to 4)) (a); -end line; - - -end loan2; - - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/MAININVT.PLI b/software/CPM/CPM25_PLI80_v14/MAININVT.PLI deleted file mode 100644 index 91ec230..0000000 --- a/software/CPM/CPM25_PLI80_v14/MAININVT.PLI +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************/ -/* This program is the main module in a program that */ -/* performs matrix inversion. It calls the entry */ -/* constant INVERT which does the actual inversion. */ -/******************************************************/ -maininvt: - procedure options(main); - %replace - true by '1'b, - false by '0'b; - %include 'matsize.lib'; - - declare - mat(maxrow,maxcol) float binary(24), - (i,j,n,m) fixed(6), - var character (26) static initial - ('abcdefghijklmnopqrstuvwxyz'), - invert entry - ((maxrow,maxcol) float(24), fixed(6), fixed(6)); - - put list('Solution of Simultaneous Equations'); - do while(true); - put skip(2) list('Type rows, columns: '); - get list(n); - if n = 0 then - stop; - - get list(m); - if n > maxrow ! m > maxcol then - put skip list('Matrix is Too Large'); - else - do; - put skip list('Type Matrix of Coefficients'); - put skip; - do i = 1 to n; - put list('Row',i,':'); - get list((mat(i,j) do j = 1 to n)); - end; - - put skip list('Type Solution Vectors'); - put skip; - do j = n + 1 to m; - put list('Variable',substr(var,j-n,1),':'); - get list((mat(i,j) do i = 1 to n)); - end; - - call invert(mat,n,m); - put skip(2) list('Solutions:'); - do i = 1 to n; - put skip list(substr(var,i,1),'='); - put edit((mat(i,j) do j = 1 to m-n)) - (f(8,2)); - end; - - put skip(2) list('Inverse Matrix is'); - do i = 1 to n; - put skip edit((mat(i,j) do j = m-n+1 to m)) - (x(3),6f(8,2),skip); - end; - end; - end; - -end maininvt; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/MATSIZE.LIB b/software/CPM/CPM25_PLI80_v14/MATSIZE.LIB deleted file mode 100644 index 4e7b4f3..0000000 --- a/software/CPM/CPM25_PLI80_v14/MATSIZE.LIB +++ /dev/null @@ -1,4 +0,0 @@ -%replace - true by '1'b, - false by '0'b; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/MPMCALLA.PLI b/software/CPM/CPM25_PLI80_v14/MPMCALLA.PLI deleted file mode 100644 index fcc3d34..0000000 --- a/software/CPM/CPM25_PLI80_v14/MPMCALLA.PLI +++ /dev/null @@ -1,515 +0,0 @@ -/* -******************************************************* -* Direct MP/M Operating System Call Test Program * -******************************************************* - -The programs MPMCALLA.PLI and MPMCALLB.PLI demonstrate direct MP/M -Operating System calls from PLI. The following instructions describe -the steps to assemble, compile, link and execute these programs. - - 1) Compile the PLI programs with the commands: - - A>pli mpmcalla $pl - A>pli mpmcallb $pl - - 2) Assemble the mpmdio.asm module with the command: - - A>rmac mpmdio - - 3) Link the mpmcalla, mpmcallb, and mpmdio modules: - - A>link mpmcalla,mpmcallb,mpmdio - - 4) Gensys your MP/M system as follows: - - Top .... = ff - Number of con.. = 1 - Add system call ... ? n - Bank switched mem... ? n - :0 - :a0 - :ff - - 5) Run the program: - - A>mpmcalla - - -*/ - - -mpmtest: /* external MP/M I/O entry points */ - -procedure options(main); - -declare - part2 entry; - -%replace - true by '1'b, - false by '0'b; - -%include 'mpmdio.dcl'; - -declare - vers entry returns(bit(16)); - -declare - sysin file, - version bit(16), - oldpriority fixed(7), - v character(254) var, - i fixed; - -declare - pdadr pointer, - 1 pd based (pdadr), - 2 link pointer, - 2 status fixed(7), - 2 priority fixed(7), - 2 stkptr pointer, - 2 name character(8), - 2 console fixed(7), - 2 memseg fixed(7), - 2 b fixed(15), - 2 thread pointer, - 2 dmadr pointer, - 2 slct bit(8); -/* 2 dcnt fixed(15), - 2 searchl fixed(7), - 2 searcha pointer, - 2 drvact bit(16), - 2 registers (20) fixed(7), - 2 scratch fixed(15); - */ - -declare - 1 localpd static, - 2 link pointer, - 2 status fixed(7), - 2 priority fixed(7), - 2 stkptr pointer, - 2 name character(8) initial ('LocalPD '), - 2 console fixed(7), - 2 memseg fixed(7), - 2 b fixed(15), - 2 thread pointer, - 2 dmadr pointer, - 2 slct fixed(7), - 2 dcnt fixed(15), - 2 searchl fixed(7), - 2 searcha pointer, - 2 drvact bit(16), - 2 registers (20) fixed(7), - 2 scratch fixed(15); - -declare - localstk (0:255) entry (fixed) variable; - -declare - sysdatpgadr pointer, - 1 sysdatpg based (sysdatpgadr), - 2 memtop bit(8), - 2 nmbcns fixed(7), - 2 brkptrst fixed (7), - 2 syscallstks bit(8), - 2 bankswitched bit(8); -/* 2 z80cpu bit(8), - 2 bankedbdos bit(8), - 2 basebankedbdos pointer; - */ - -declare - upper character(27) static initial - ('ABCDEFGHIJKLMNOPQRSTUVWXYZ '), - lower character(27) static initial - ('abcdefghijklmnopqrstuvwxyz '); - - -/********************************** -* * -* Local procedures used during * -* testing. * -* * -**********************************/ - -flagtest: -procedure; -declare - boolean bit(1); - -call attcon(); -boolean = flgwt (30); -put skip list ('-> flagtest wait on #30 complete.'); -call detcon(); -boolean = flgset (31); -call term ('ffff'b4); -end flagtest; - -queuetest: -procedure; -declare - 1 qcbB static, - 2 link fixed(15), - 2 name character(8) initial ('QueueB '), - 2 msglen fixed(15) initial (10), - 2 nmbmsgs fixed(15) initial (2), - 2 dqph pointer, - 2 nqph pointer, - 2 msgin pointer, - 2 msgout pointer, - 2 msgcnt fixed(15), - 2 buffer (2), - 3 lnk pointer, - 3 character(10); - -declare - 1 uqcbA static, - 2 pointer pointer, - 2 msgadr pointer, - 2 name character(8) initial ('QueueA '); - -declare - 1 uqcbB, - 2 pointer pointer, - 2 msgadr pointer; - -declare - msgA character(10), - msgB character(10); - -uqcbA.msgadr = addr (msgA); -uqcbB.pointer = addr (qcbB); -uqcbB.msgadr = addr (msgB); -call makque (addr (qcbB)); -do while (~opnque (addr (uqcbA))); - call delay (1); /* until qcbA created */ -end; -do while (true); - call rdque (addr (uqcbA)); - msgB = translate (msgA,upper,lower); - call wrque (addr (uqcbB)); -end; -end queuetest; - - -/************************************************** -*************************************************** -******** ******** -******** M a i n P r o g r a m ******** -******** ******** -*************************************************** -**************************************************/ - - -/********************************** -* * -* Verify Operation Under MP/M * -* Without Banked Memory. * -* * -**********************************/ - -version = vers(); -if substr (version,1,8) = '00'b4 then -do; - put skip list ('Tests cannot run under CP/M.'); - call term('0000'b4); -end; -sysdatpgadr = sysdat (); -if sysdatpg.bankswitched = 'FF'b4 then -do; - put skip list ('Tests cannot run under MP/M'); - put list ('with bank switched memory.'); - call term('0000'b4); -end; -if sysdatpg.syscallstks = 'FF'b4 then -do; - put skip list ('Tests cannot run under MP/M'); - put list ('with system call user stacks.'); - call term('0000'b4); -end; -pdadr = rpdadr(); /* get current running pd adr */ -oldpriority = pd.priority; - -/********************************** -* * -* Memory Management Tests: * -* AMEMRQ, RMEMRQ, MEMFR * -* * -**********************************/ -declare - 1 memdscr, - 2 base fixed (7), /* base page */ - 2 size fixed (7), /* # of pages */ - 2 attrib fixed (7), /* attributes */ - 2 bank fixed (7); /* bank byte */ - -on endfile (sysin) - goto rmemrqtst; -put skip list ('Memory Management Tests:'); -do while (true); - put skip(2) list (' Absolute Request'); - put skip list (' Base (xx in hex) = '); - i = pd.memseg; /* save old memseg index */ - get edit (unspec (memdscr.base)) (b4(2)); - if amemrq (addr (memdscr)) then - do; - put skip list (' Absolute Request satisfied.'); - put edit (' Base = ',unspec (memdscr.base),'H') - (skip,a,b4,a); - put edit (' Size = ',unspec (memdscr.size),'H') - (skip,a,b4,a); - put edit (' Attr = ',unspec (memdscr.attrib),'H') - (skip,a,b4,a); - put edit (' Bank = ',unspec (memdscr.bank),'H') - (skip,a,b4,a); - call memfr (addr (memdscr)); - pd.memseg = i; /* restore former memseg index */ - end; - else - do; - put skip list (' Absolute Request failed.'); - end; -end; - -rmemrqtst: - -get edit (v) (a); /* clear input buffer */ - -on endfile (sysin) - goto polltst; -do while (true); - put skip(2) list (' Relocatable Request'); - put skip list (' Size (xxh) = '); - i = pd.memseg; /* save old memseg index */ - get edit (unspec (memdscr.size)) (b4(2)); - if rmemrq (addr (memdscr)) then - do; - put skip list (' Relocatable Request satisfied.'); - put edit (' Base = ',unspec (memdscr.base),'H') - (skip,a,b4,a); - put edit (' Size = ',unspec (memdscr.size),'H') - (skip,a,b4,a); - put edit (' Attr = ',unspec (memdscr.attrib),'H') - (skip,a,b4,a); - put edit (' Bank = ',unspec (memdscr.bank),'H') - (skip,a,b4,a); - call memfr (addr (memdscr)); - pd.memseg = i; /* restore former memseg index */ - end; - else - do; - put skip list (' Relocatable Request failed.'); - end; -end; - -/********************************** -* * -* Poll Tests: * -* The poll call cannot be tested * -* unless the poll device table * -* in the XIOS is known. * -* * -**********************************/ - -polltst: - -get edit (v) (a); /* clear input buffer */ - -/* The following code is "commented out" - -call poll (devicenumber); -put edit ('Device ',devicenumber,'is ready.') - (skip,a,f,a); - -End of comment-deleted code */ - -put skip(2) list ('Poll call not tested.'); - -/********************************** -* * -* Flag Tests: * -* FLGWT, FLGSET * -* * -* Note: this test assumes that * -* flags 30 & 31 are unused. * -* * -**********************************/ -declare - flagover bit(1), - flagunder bit(1); - -unspec (localpd.link) = '0000'b4; -localpd.priority = 100; -localpd.stkptr = addr (localstk(255)); -localpd.console = pd.console; -localpd.memseg = pd.memseg; -localstk(255) = flagtest; -call crproc (addr (localpd)); -put skip(2) list ('Flag Tests:'); -call setpri (101); -call detcon(); -flagover = ~flgset (30); -call attcon(); -call setpri (oldpriority); -flagunder = ~flgwt (31); -if flagover then - put skip list ('-> flag over-run.'); -if flagunder then - put skip list ('-> flag under-run.'); -put skip list ('-> flag tests successful.'); - -/********************************** -* * -* Queue Management Tests: * -* MAKQUE,OPNQUE,DELQUE * -* RDQUE,CRDQUE,WRQUE,CWRQUE * -* * -**********************************/ -declare - 1 qcbA static, - 2 link fixed(15), - 2 name character(8) initial ('QueueA '), - 2 msglen fixed(15) initial (10), - 2 nmbmsgs fixed(15) initial (2), - 2 dqph pointer, - 2 nqph pointer, - 2 msgin pointer, - 2 msgout pointer, - 2 msgcnt fixed(15), - 2 buffer (2), - 3 lnk pointer, - 3 character(10); - -declare - 1 uqcbA, - 2 pointer pointer, - 2 msgadr pointer; - -declare - 1 uqcbB static, - 2 pointer pointer, - 2 msgadr pointer, - 2 name character(8) initial ('QueueB '); - -declare - msgA character(10), - msgB character(10); - -put skip(2) list ('Queue Tests:'); -on endfile (sysin) - goto abtsprtest; - -uqcbA.pointer = addr (qcbA); -uqcbA.msgadr = addr (msgA); -uqcbB.msgadr = addr (msgB); -call makque (addr (qcbA)); - -put skip(2) list (' Testing Conditional Write Queue'); -do i = 1 to 10 while (cwrque (addr (uqcbA))); - put edit (' Message #',i) (skip,a,f(2)); -end; -put skip list (' Queue is full.'); - -put skip(2) list (' Testing Conditional Read Queue'); -do i = 1 to 10 while (crdque (addr (uqcbA))); - put edit (' Message #',i) (skip,a,f(2)); -end; -put skip list (' Queue is empty.'); - -unspec (localpd.link) = '0000'b4; -localpd.priority = 100; -localpd.stkptr = addr (localstk(255)); -localpd.console = pd.console; -localpd.memseg = pd.memseg; -localstk(255) = queuetest; -call crproc (addr (localpd)); - -do while (~opnque (addr (uqcbB))); - call delay (1); /* until qcbB created */ -end; -put skip list (' Enter character(10) message:'); -do while (true); - put skip list ('->'); - get edit (msgA) (a); - call wrque (addr (uqcbA)); - call rdque (addr (uqcbB)); - put edit ('<-',msgB) (skip,a,a(10)); -end; - -/********************************** -* * -* Abort Specified Process Test: * -* * -**********************************/ -declare - 1 abtpb static, - 2 pda bit(16) initial ('0000'b4), - 2 termcode bit(16) initial ('ffff'b4), - 2 name character(8) initial ('LocalPD '), - 2 console fixed(7); - -abtsprtest: - -get edit (v) (a); /* clear input buffer */ - -put skip(2) list ('Abort Specified Process Test:'); -put skip list (' Aborting LocalPD.'); -abtpb.console = pd.console; -if abtspr (addr (abtpb)) then - do; - put skip list ('->Abort successful'); - end; -else - do; - put skip list ('->Abort Failed'); - goto error; - end; -if ~delque (addr (qcbA)) then - do; - put skip list ('*** Unable to delete QueueA ***'); - call term('0000'b4); - end; -if ~delque (uqcbB.pointer) then - do; - put skip list ('*** Unable to delete QueueB ***'); - call term('0000'b4); - end; - - -/*************************************** -**************************************** -**** **** -**** Call external procedure **** -**** "part2" for other tests **** -**** **** -*********************************** -**********************************/ - -call part2(); - - -/********************************** -* * -* Termination Test: * -* * -**********************************/ - -put skip(2) list ('Termination Test:'); -call term ('0000'b4); - -/********************************** -* * -* Unrecoverable Error: * -* * -**********************************/ - -error: - -put skip list ('*** Unrecoverable Error ***'); -call disabl(); -do while (true); - end; - -end mpmtest; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/MPMCALLB.PLI b/software/CPM/CPM25_PLI80_v14/MPMCALLB.PLI deleted file mode 100644 index 4574ec6..0000000 --- a/software/CPM/CPM25_PLI80_v14/MPMCALLB.PLI +++ /dev/null @@ -1,323 +0,0 @@ -/************************************************************ -* Direct MP/M Operating System Call Test Program (Cont'd) * -* See comments at the beginning of the MPMCALLA.PLI program.* -************************************************************/ - -part2: - -procedure; /* external MP/M I/O entry points */ - -%replace - true by '1'b, - false by '0'b; - -%include 'mpmdio.dcl'; - -declare - sysin file, - oldpriority fixed(7), - v character(254) varying, - i fixed; - -declare - pdadr pointer, - 1 pd based (pdadr), - 2 link pointer, - 2 status fixed(7), - 2 priority fixed(7), - 2 stkptr pointer, - 2 name character(8), - 2 console fixed(7), - 2 memseg fixed(7), - 2 b fixed(15), - 2 thread pointer, - 2 dmadr pointer, - 2 slct bit(8); -/* 2 dcnt fixed(15), - 2 searchl fixed(7), - 2 searcha pointer, - 2 drvact bit(16), - 2 registers (20) fixed(7), - 2 scratch fixed(15); -*/ - -pdadr = rpdadr(); /* get current running pd adr */ -oldpriority = pd.priority; - -declare - upper character(27) static initial - ('ABCDEFGHIJKLMNOPQRSTUVWXYZ '), - lower character(27) static initial - ('abcdefghijklmnopqrstuvwxyz '); - - -/********************************** -* * -* Local procedures used during * -* testing. * -* * -**********************************/ - -clresptest: - -procedure (stringadr) returns (pointer); -declare - stringadr pointer, - string based (stringadr) character(27); - -put edit ('->STRING proc passed: ',string) - (skip,a,a(27)); -return (addr (lower)); -end clresptest; - - -/********************************** -* * -* Delay Test: * -* * -**********************************/ - -put skip(2) list ('Delay Test:'); -put skip list ('->a dot will be printed each second'); -put list ('for ten seconds '); -do i = 1 to 10; - call delay (60); - put edit ('.') (a); -end; - -/********************************** -* * -* Disptach Test: * -* * -**********************************/ - -put skip(2) list ('Dispatch Test:'); -call dsptch(); -put skip list ('->dispatch successful.'); - -/********************************** -* * -* Console Tests: * -* ATTCON, DETCON already tested * -* SETCON not tested * -* ASNCON tested in send CLI cmd * -* GETCON * -* * -**********************************/ - -put skip(2) list ('Console Test:'); -put edit ('->current console is #',getcon()) - (skip,a,f(2)); - -/********************************** -* * -* Send CLI Command Test: * -* This example shows how to run * -* a program in another memory * -* segment and then get the con- * -* sole back to the main program.* -* E.G. as in a menu-driven * -* application. * -* * -**********************************/ -declare - 1 clicmd, - 2 dslct bit(8), /* default disk / user code */ - 2 console fixed(7), /* console number */ - 2 line character(128); - -declare - 1 apb static, - 2 console fixed(7), - 2 name character(8) initial ('cli '), - 2 match bit(8) initial ('00'b4); - -put skip(2) list ('Send CLI Command Test:'); -on endfile (sysin) - goto clresptst; - -pdadr = rpdadr(); /* get current running pd adr */ -oldpriority = pd.priority; -clicmd.dslct = pd.slct; -clicmd.console = pd.console; -apb.console = pd.console; -do while (true); - put skip list (' Enter CLI Command: '); - get edit (clicmd.line) (a); - if ~asncon (addr (apb)) then - do; - put skip list ('*** Failed to assign Cli the console ***'); - end; - else - do; - call setpri (197); - call sclicd (addr (clicmd)); - call attcon(); - call setpri (oldpriority); - end; - end; - -/********************************** -* * -* Call Resident System Proc Test: * -* * -**********************************/ -declare - 1 cpb, - 2 nameadr pointer, - 2 paramadr pointer; - -declare - aparam pointer; - -declare - procname character(8) static initial ('STRING '); - -declare - 1 stringqcb static, - 2 link fixed(15), - 2 name character(8) initial ('STRING '), - 2 msglen fixed(15) initial (2), - 2 nmbmsgs fixed(15) initial (1), - 2 dqph pointer, - 2 nqph pointer, - 2 msgin pointer, - 2 msgout pointer, - 2 msgcnt fixed(15), - 2 buffer pointer; - -declare - 1 stringuqcb, - 2 pointer pointer, - 2 msgadr pointer; - -declare - stringprocadr entry (fixed) variable returns(pointer); - -declare - rtnstringadr pointer, - rtnstring based (rtnstringadr) character(27); - -clresptst: - -get edit (v) (a); /* clear input buffer */ -put skip(2) list ('Call Resident System Process Test:'); -call makque (addr (stringqcb)); -stringuqcb.pointer = addr (stringqcb); -stringuqcb.msgadr = addr (stringprocadr); -stringprocadr = clresptest; -call wrque (addr (stringuqcb)); -cpb.nameadr = addr (procname); -cpb.paramadr = addr (aparam); -aparam = addr (upper); -unspec (rtnstringadr) = clresp (addr (cpb)); - -put edit ('->STRING proc returned:',rtnstring) - (skip,a,a(27)); - -if ~delque (addr (stringqcb)) then - do; - put skip list ('*** Unable to delete stringqcb ***'); - call term ('0000'b4); - end; -put skip list ('->Call clresp test complete.'); - -/********************************** -* * -* Parse Filename Test: * -* * -**********************************/ -declare - done bit(1); - -declare - line character(80); - -declare - 1 pfcb, - 2 flname pointer, - 2 fcb pointer; - -declare - delimptr pointer, - delim based (delimptr) character(1); - -declare - oldptr pointer, - old based (oldptr) character(10); - -declare - 1 afcb, - 2 name, - 3 drive fixed(7), - 3 fname character(8), - 3 ftype character(3); - -put skip(2) list ('Parse Filename Test:'); -on endfile (sysin) - goto gettodtest; - -put skip list (' Enter string of filenames to be parsed,'); -put list ('separated by commas:'); -do while (true); - put skip list ('->'); - get edit (line) (a); - line = substr (line,1,index (line,' ')-1) || ascii (13); - pfcb.flname = addr (line); - pfcb.fcb = addr (afcb); - oldptr = addr (line); - done = false; - pfcb.flname = parse (addr (pfcb)); - do while (~done & (unspec (pfcb.flname) ~= 'ffff'b4)); - oldptr = pfcb.flname; - put edit (' ',ascii (afcb.drive+64),': ', - afcb.fname,' ',afcb.ftype) - (skip,a,a,a,a(8),a,a(3)); - if unspec (pfcb.flname) = '0000'b4 then - do; - done = true; - end; - else - do; - delimptr = pfcb.flname; - if delim = ',' then - do; - unspec (i) = unspec (pfcb.flname); - i = i + 1; - unspec (pfcb.flname) = unspec (i); - end; - pfcb.flname = parse (addr (pfcb)); - end; - end; - if ~done then - do; - put skip list (' *** Bad Entry *** ->'); - put edit (old) (a(10)); - end; -end; - -/********************************** -* * -* Time and Date Test: * -* * -**********************************/ -declare - 1 tod, - 2 date fixed(15), - 2 time, - 3 hour bit(8), - 3 min bit(8), - 3 sec bit(8); - -gettodtest: - -get edit (v) (a); /* clear input buffer */ -put skip(2) list ('Time and Date Test:'); -call gettod (addr (tod)); -put edit ('-> ',tod.date,' ',tod.hour,':',tod.min,':',tod.sec) - (skip,a,f(5),a,b4(2),a,b4(2),a,b4(2)); - - -end part2; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/MPMDIO.ASM b/software/CPM/CPM25_PLI80_v14/MPMDIO.ASM deleted file mode 100644 index 368f4bd..0000000 --- a/software/CPM/CPM25_PLI80_v14/MPMDIO.ASM +++ /dev/null @@ -1,495 +0,0 @@ - name 'MPMDIO' - title 'Direct MP/M Calls From PL/I-80' -; -; Note: The CP/M function get version number (#12) has been -; included in this module. If you wish to link both the -; DIOMOD and the MPMDIO, you must remove the function -; from this module. -; -;*********************************************************** -;* * -;* MP/M calls from pl/i for direct i/o * -;* * -;* This interface is re-entrant. * -;* * -;*********************************************************** - public amemrq ;absolute memory request (#128) - public rmemrq ;relocatable memory request (#129) - public memfr ;memory free (#130) - public poll ;poll device (#131) - public flgwt ;flag wait (#132) - public flgset ;flag set (#133) - public makque ;make queue (#134) - public opnque ;open queue (#135) - public delque ;delete queue (#136) - public rdque ;read queue - unconditional (#137) - public crdque ;conditional read queue (#138) - public wrque ;write queue - unconditional (#139) - public cwrque ;conditional write queue (#140) - public delay ;delay (#141) - public dsptch ;dispatch (#142) - public term ;terminate calling process (#143) - public crproc ;create process (#144) - public setpri ;set process priority (#145) - public attcon ;attach console (#146) - public detcon ;detach console (#147) - public setcon ;set console (#148) - public asncon ;assign console (#149) - public sclicd ;send CLI command (#150) - public clresp ;call resident system process (#151) - public parse ;parse filename (#152) - public getcon ;get console number (#153) - public sysdat ;return system data page adr (#154) - public gettod ;get time and date (#155) - public rpdadr ;return process descr adr (#156) - public abtspr ;abort specified process (#157) - - public disabl ;disable interrupts - public enable ;enable interrupts - - public vers ;CP/M function - get version number (#12) -; -; - extrn ?bdos -; -;*********************************************************** -;* * -;* equates for interface to mp/m xdos * -;* * -;*********************************************************** -amemrqf equ 128 ;absolute memory request -rmemrqf equ 129 ;relocatable memory request -memfrf equ 130 ;memory free -pollf equ 131 ;poll device -flgwtf equ 132 ;flag wait -flgsetf equ 133 ;flag set -makquef equ 134 ;make queue -opnquef equ 135 ;open queue -delquef equ 136 ;delete queue -rdquef equ 137 ;read queue - unconditional -crdquef equ 138 ;conditional read queue -wrquef equ 139 ;write queue - unconditional -cwrquef equ 140 ;conditional write queue -delayf equ 141 ;delay -dsptchf equ 142 ;dispatch -termf equ 143 ;terminate calling process -crprocf equ 144 ;create process -setprif equ 145 ;set process priority -attconf equ 146 ;attach console -detconf equ 147 ;detach console -setconf equ 148 ;set console -asnconf equ 149 ;assign console -sclicdf equ 150 ;send CLI command -clrespf equ 151 ;call resident system process -parsef equ 152 ;parse filename -getconf equ 153 ;get console number -sysdatf equ 154 ;return system data page adr -gettodf equ 155 ;get time and date -rpdadrf equ 156 ;return process descr adr -abtsprf equ 157 ;abort specified process - -versf equ 12 ;get version number (CP/M function) -; -; utility functions -;*********************************************************** -;* * -;* general purpose routines used upon entry * -;* * -;*********************************************************** -getp1i: - call getp1 - jmp ?bdos ;return through bdos - -getp1: ;get single byte parameter to register e - mov e,m ;low (addr) - inx h - mov d,m ;high (addr) - xchg ;hl = .char - mov e,m ;to register e - ret -; -getp2: ;get single word parameter to DE -getp2i: ;(equivalent to getp2) - call getp1 - inx h - mov d,m ;get high byte as well - jmp ?bdos ;return through bdos -; -getp3i: ;get single word parameter to DE - ;perform bdos call and then compliment result - call getp2i - cma - ret -; -;*********************************************************** -;* * -;*********************************************************** -amemrq: ;absolute memory request (#128) - ;1->addr(memdscr) - mvi c,amemrqf ;abs mem rqst function - jmp getp3i ;DE = .memdscr - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rmemrq: ;relocatable memory request (#129) - ;1->addr(memdscr) - mvi c,rmemrqf ;rel mem rqst function - jmp getp3i ;DE = .memdscr - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -memfr: ;memory free (#130) - ;1->addr(memdscr) - mvi c,memfrf ;memory free function - jmp getp2i ;DE = .memdscr - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -poll: ;poll device (#131) - ;1->fixed(7) poll device number - mvi c,pollf ;poll function - jmp getp1i ;device number to E - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -flgwt: ;flag wait (#132) - ;1->fixed(7) flag number - mvi c,flgwtf ;flag wait function - call getp1i ;flag number to E - cma - ret -; -;*********************************************************** -;* * -;*********************************************************** -flgset: ;flag set (#133) - ;1->fixed(7) flag number - mvi c,flgsetf ;flag set function - call getp1i ;flag number to E - cma - ret -; -;*********************************************************** -;* * -;*********************************************************** -makque: ;make queue (#134) - ;1->addr(qcb) - mvi c,makquef ;make queue function - jmp getp2i ;DE = .qcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -opnque: ;open queue (#135) - ;1->addr(uqcb) - mvi c,opnquef ;open queue function - jmp getp3i ;DE = .uqcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -delque: ;delete queue (#136) - ;1->addr(qcb) - mvi c,delquef ;delete queue function - jmp getp3i ;DE = .qcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rdque: ;read queue - unconditional (#137) - ;1->addr(uqcb) - mvi c,rdquef ;read queue function - jmp getp2i ;DE = .uqcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -crdque: ;conditional read queue (#138) - ;1->addr(uqcb) - mvi c,crdquef ;conditional read queue function - jmp getp3i ;DE = .uqcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -wrque: ;write queue - unconditional (#139) - ;1->addr(uqcb) - mvi c,wrquef ;write queue function - jmp getp2i ;DE = .uqcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -cwrque: ;conditional write queue (#140) - ;1->addr(uqcb) - mvi c,cwrquef ;conditional write queue function - jmp getp3i ;DE = .uqcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -delay: ;delay (#141) - ;1->number of ticks to delay - mvi c,delayf ;delay function - jmp getp2i ;DE = #ticks - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -dsptch: ;dispatch (#142) - mvi c,dsptchf ;dispatch function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -term: ;terminate calling process (#143) - ;1->terminate code - mvi c,termf ;terminate function - jmp getp2i ;DE = terminate code, where - ; if D = FF then keep mem seg - ; if E = FF term sys process - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -crproc: ;create process (#144) - ;1->addr(pdadr) - mvi c,crprocf ;create process function - jmp getp2i ;DE = .pdadr - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -setpri: ;set process priority (#145) - ;1->fixed(7) priority - mvi c,setprif ;set priority function - jmp getp1i ;priority to E - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -attcon: ;attach console (#146) - mvi c,attconf ;attach console function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -detcon: ;detach console (#147) - mvi c,detconf ;detach console function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -setcon: ;set console (#148) - ;1->fixed(7) console - mvi c,setconf ;set console function - jmp getp1i ;console to E - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -asncon: ;assign console (#149) - ;1->addr(apb) - mvi c,asnconf ;assign console function - jmp getp3i ;DE = .apb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -sclicd: ;send CLI command (#150) - ;1->addr(clicmd) - mvi c,sclicdf ;send CLI command function - jmp getp2i ;DE = .clicmd - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -clresp: ;call resident system process (#151) - ;1->addr(cpb) - call getp1 ;DE = .cpb - inx h - mov d,m - xchg - mov c,m - inx h - mov b,m ;BC = cpb.name - inx h - mov d,h - mov e,l ;DE = .cpb.param - lxi h,-14 - dad sp - sphl ;make room for uqcb+2 on stk - push d -; -; Stack Structure: -; -; +-----------------------+ -; | Return Address | -; +-----------------------+ -; | | -; uqcb.name(0) - name(7) -; | | -; +-----------------------+ -; | uqcb.msgadr | ---+ -; +-----------------------+ | -; | uqcb.pointer | | -; +-----------------------+ | -; | (space for .pliproc) | <--+ -; +-----------------------+ -; S--->| .cpb.param | -; +-----------------------+ -; - mov d,h - mov e,l - inx h - inx h - inx h - inx h - mov m,e - inx h - mov m,d ;uqcb.msgadr <- - inx h - mvi e,8 -clresploop: - ldax b - mov m,a - inx b - inx h - dcr e - jnz clresploop - lxi b,-12 - dad b ;HL = .uqcb - mvi c,opnquef - xchg - call ?bdos ;open the cpb.name queue - inr a - lxi h,0001h - pop d ;DE = cpb.param - jz clresprtn ;queue not found - lxi h,2 - dad sp - mvi c,rdquef - push d - xchg - call ?bdos ;read proc adr from queue - pop d ;DE = cpb.param - pop h ;HL = procadr - push h - lxi b,clresprtn - push b ;setup return addr - push h - xchg - ret ;call pliproc (param) -clresprtn: ;return here from pliproc call - push h ;save returned result - lxi h,4 - dad sp - xchg ;DE = .uqcb - mvi c,wrquef - call ?bdos ;write proc adr to queue - pop d ;DE = result returned from pliproc - lxi h,14 - dad sp - sphl ;discard uqcb on stack - xchg - ret ;return with HL = pliproc() - ; -;*********************************************************** -;* * -;*********************************************************** -parse: ;parse filename (#152) - ;1->addr(pfcb) - mvi c,parsef ;parse filename function - jmp getp2i ;DE = .pfcb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -getcon: ;get console number (#153) - mvi c,getconf ;get console function - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -sysdat: ;return system data page adr (#154) - mvi c,sysdatf ;get system data pg adr fn - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -gettod: ;get time and date (#155) - ;1->addr(todadr) - mvi c,gettodf ;get time and date function - jmp getp2i ;DE = .todadr - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -rpdadr: ;return process descr adr (#156) - mvi c,rpdadrf ;return Proc dscr adr fn - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -abtspr: ;abort specified process (#157) - ;1->addr(abtpb) - mvi c,abtsprf ;abort specified proc fn - jmp getp3i ;DE = .abtpb - ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** -disabl: ;disable interrupts - di - ret -; -;*********************************************************** -;* * -;*********************************************************** -enable: ;enable interrupts - ei - ret -; -;*********************************************************** -;* * -;*********************************************************** -vers: ;get version number (#12) CP/M function - mvi c,versf - jmp ?bdos ;return through bdos -; -;*********************************************************** -;* * -;*********************************************************** - end - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/MPMDIO.DCL b/software/CPM/CPM25_PLI80_v14/MPMDIO.DCL deleted file mode 100644 index 95ea165..0000000 --- a/software/CPM/CPM25_PLI80_v14/MPMDIO.DCL +++ /dev/null @@ -1,35 +0,0 @@ -declare - amemrq entry (pointer) returns (bit(1)), - rmemrq entry (pointer) returns (bit(1)), - memfr entry (pointer), - poll entry (fixed(7)), - flgwt entry (fixed(7)) returns (bit(1)), - flgset entry (fixed(7)) returns (bit(1)), - makque entry (pointer), - opnque entry (pointer) returns (bit(1)), - delque entry (pointer) returns (bit(1)), - rdque entry (pointer), - crdque entry (pointer) returns (bit(1)), - wrque entry (pointer), - cwrque entry (pointer) returns (bit(1)), - delay entry (fixed(15)), - dsptch entry, - term entry (bit(16)), - crproc entry (pointer), - setpri entry (fixed(7)), - attcon entry, - detcon entry, - setcon entry (fixed(7)), - asncon entry (pointer) returns (bit(1)), - sclicd entry (pointer), - clresp entry (pointer) returns (bit(16)), - parse entry (pointer) returns (pointer), - getcon entry returns (fixed(7)), - sysdat entry returns (pointer), - gettod entry (pointer), - rpdadr entry returns (pointer), - abtspr entry (pointer) returns (bit(1)), - - disabl entry, - enable entry; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/NETWORK.PLI b/software/CPM/CPM25_PLI80_v14/NETWORK.PLI deleted file mode 100644 index af36cfc..0000000 --- a/software/CPM/CPM25_PLI80_v14/NETWORK.PLI +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************/ -/* This program finds the shortest path between nodes */ -/* in a network. It has 8 internal procedures: */ -/* SETUP, CONNECT, FIND, PRINT_ALL, PRINT_PATHS, */ -/* SHORTEST_DISTANCE, PRINT_ROUTE, and FREE_ALL. */ -/******************************************************/ -network: - procedure options(main); - %replace - true by '1'b, - false by '0'b, - citysize by 20, - infinite by 32767; - declare - sysin file; - declare - 1 city_node based, - 2 city_name character(citysize) varying, - 2 total_distance fixed, - 2 investigate bit, - 2 city_list pointer, - 2 route_head pointer; - declare - 1 route_node based, - 2 next_city pointer, - 2 route_distance fixed, - 2 route_list pointer; - declare - city_head pointer; - - do while(true); - call setup(); - if city_head = null then - stop; - call print_all(); - call print_paths(); - call free_all(); - end; - -/******************************************************/ -/* This procedure reads two cities and then calls the */ -/* procedure CONNECT to establish the connection (in */ -/* both directions) between the cities. */ -/******************************************************/ - setup: - procedure; - declare - distance fixed, - (city1, city2) character(citysize) varying; - on endfile(sysin) goto eof; - city_head = null; - put skip list('Type "City1, Dist, City2"'); - put skip; - do while(true); - get list(city1, distance, city2); - call connect(city1, distance, city2); - call connect(city2, distance, city1); - end; - eof: - end setup; - -/******************************************************/ -/* This procedure establishes a single route_node to */ -/* connect the first city to the second city by */ -/* calling the FIND procedure twice; once for the */ -/* first city and once for the second city. */ -/******************************************************/ - connect: - procedure(source_city, distance, destination_city); - declare - source_city character(citysize) varying, - destination_city character(citysize) varying, - distance fixed, - (r, s, d) pointer; - - s = find(source_city); - d = find(destination_city); - allocate route_node set (r); - r->route_distance = distance; - r->next_city = d; - r->route_list = s->route_head; - s->route_head = r; - end connect; - -/******************************************************/ -/* This procedure searches the list of cities and */ -/* returns a pointer to the requested city_node. */ -/******************************************************/ - find: - procedure(city) returns(pointer); - declare - city character(citysize) varying, - (p, q) pointer; - - do p = city_head - repeat(p->city_list) while(p^=null); - if city = p->city_name then - return(p); - end; - allocate city_node set(p); - p->city_name = city; - p->city_list = city_head; - city_head = p; - p->total_distance = infinite; - p->route_head = null; - return(p); - end find; - -/******************************************************/ -/* This procedure starts at the city_head and displays*/ -/* all the cities in the city_list. */ -/******************************************************/ - print_all: - procedure; - declare - (p, q) pointer; - - do p = city_head - repeat(p->city_list) while(p^=null); - put skip list(p->city_name,':'); - do q = p->route_head - repeat(q->route_list) while(q^=null); - put skip list(q->route_distance,'miles to', - q->next_city->city_name); - end; - end; - end print_all; - -/******************************************************/ -/* This procedure reads a destination city, calls the */ -/* SHORTEST_DISTANCE procedure, and sets the */ -/* total_distance field in each city_node to the */ -/* total distance from the destination city. */ -/******************************************************/ - print_paths: - procedure; - declare - city character(citysize) varying; - - on endfile(sysin) goto eof; - do while(true); - put skip list('Type Destination '); - get list(city); - call shortest_distance(city); - on endfile(sysin) goto eol; - do while(true); - put skip list('Type Start '); - get list(city); - call print_route(city); - end; - eol: revert endfile(sysin); - end; - eof: - end print_paths; - -/******************************************************/ -/* This procedure is the heart of the program. It */ -/* takes an input city (the destination), and computes*/ -/* the minimum total distance from every city in the */ -/* network to the destination. It then records this */ -/* minimum value in the total_distance field of every */ -/* city_node. */ -/******************************************************/ - shortest_distance: - procedure(city); - declare - city character(citysize) varying; - declare - bestp pointer, - (d, bestd) fixed, - (p, q, r) pointer; - do p = city_head - repeat(p->city_list) while(p^=null); - p->total_distance = infinite; - p->investigate = false; - end; - p = find(city); - p->total_distance = 0; - p->investigate = true; - do while(true); - bestp = null; - bestd = infinite; - do p = city_head - repeat(p->city_list) while(p^=null); - if p->investigate then - do; - if p->total_distance < bestd then - do; - bestd = p->total_distance; - bestp = p; - end; - end; - end; - if bestp = null then - return; - bestp->investigate = false; - do q = bestp->route_head - repeat(q->route_list) while(q^=null); - r = q->next_city; - d = bestd + q->route_distance; - if d < r->total_distance then - do; - r->total_distance = d; - r->investigate = true; - end; - end; - end; - end shortest_distance; - -/******************************************************/ -/* This procedure displays the best route from the */ -/* input city to the destination. */ -/******************************************************/ - print_route: - procedure(city); - declare - city character(citysize) varying; - declare - (p,q) pointer, - (t,d) fixed; - p = find(city); - do while(true); - t = p->total_distance; - if t = infinite then - do; - put skip list('(No Connection)'); - return; - end; - if t = 0 then - return; - put skip list(t,'miles remain,'); - q = p->route_head; - do while(q^=null); - p = q->next_city; - d = q->route_distance; - if t = d + p->total_distance then - do; - put list(d,'miles to',p->city_name); - q = null; - end; - else - q = q->route_list; - end; - end; - end print_route; - -/******************************************************/ -/* This procedure frees all the storage allocated */ -/* by the program while processing the network. */ -/******************************************************/ - free_all: - procedure; - declare - (p, q) pointer; - do p = city_head - repeat(p->city_list) while(p^=null); - do q = p->route_head - repeat(q->route_list) while(q^=null); - free q->route_node; - end; - free p->city_node; - end; - end free_all; - -end network; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/OPTIMIST (2).PLI b/software/CPM/CPM25_PLI80_v14/OPTIMIST (2).PLI deleted file mode 100644 index 2aae57f..0000000 --- a/software/CPM/CPM25_PLI80_v14/OPTIMIST (2).PLI +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************/ -/* This program demonstrates PL/I character string */ -/* processing by turning a negative sentence into a */ -/* positive one. */ -/******************************************************/ -optimist: - procedure options(main); - %replace - true by '1'b, - false by '0'b, - nwords by 5; - declare - negative (1:nwords) character(8) varying static initial - (' never',' none',' nothing',' not',' no'), - positive (1:nwords) character(10) varying static initial - (' always',' all',' something','',' some'), - upper character(28) static initial - ('ABCDEFGHIJKLMNOPQRSTUVWXYZ. '), - lower character(28) static initial - ('abcdefghijklmnopqrstuvwxyz. '), - sent character(254) varying, - word character(32) varying, - (i,j) fixed; - - do while(true); - put skip list('What''s up? '); - sent = ' '; - do while - (substr(sent,length(sent)) ^= '.'); - get list (word); - sent = sent !! ' ' !! word; - end; - sent = translate(sent,lower,upper); - if verify(sent,lower) ^= 0 then - sent = ' that''s an interesting idea.'; - do i = 1 to nwords; - j = index(sent,negative(i)); - if j ^= 0 then - sent = substr(sent,1,j-1) !! - positive(i) !! - substr(sent,j+length(negative(i))); - end; - put list('Actually,'!!sent); - put skip; - end; - -end optimist; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/OPTIMIST.COM b/software/CPM/CPM25_PLI80_v14/OPTIMIST.COM deleted file mode 100644 index bb2c5a73a3a5a421d3b8eb7ec0b43e8359307a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 N!!7^Jc>dPke*-NXO<4c{ diff --git a/software/CPM/CPM25_PLI80_v14/OPTIMIST.PLI b/software/CPM/CPM25_PLI80_v14/OPTIMIST.PLI deleted file mode 100644 index 545dd68..0000000 --- a/software/CPM/CPM25_PLI80_v14/OPTIMIST.PLI +++ /dev/null @@ -1,44 +0,0 @@ -optimist: - proc options(main); - %replace - true by '1'b, - false by '0'b, - nwords by 6; - dcl - negative (1:nwords) char(8) var static initial - (' never',' none',' nothing',' not',' no',' turkey'), - positive (1:nwords) char(10) var static initial - (' always',' all',' something','',' some',' good guy'), - upper char(28) static initial - ('ABCDEFGHIJKLMNOPQRSTUVWXYZ. '), - lower char(28) static initial - ('abcdefghijklmnopqrstuvwxyz. '); - dcl - sent char(254) var, - word char(32) var; - dcl - (i,j) fixed; - - do while(true); - put skip list('What''s up? '); - sent = ' '; - do while - (substr(sent,length(sent)) ^= '.'); - get list (word); - sent = sent !! ' ' !! word; - end; - sent = translate(sent,lower,upper); - if verify(sent,lower) ^= 0 then - sent = ' that''s an interesting idea.'; - do i = 1 to nwords; - j = index(sent,negative(i)); - if j ^= 0 then - sent = substr(sent,1,j-1) !! - positive(i) !! - substr(sent,j+length(negative(i))); - end; - put list('Actually,'!!sent); - put skip; - end; - end optimist; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/PLI.COM b/software/CPM/CPM25_PLI80_v14/PLI.COM deleted file mode 100644 index 2bfc7596a91c33b924b78d67adf43808f63260aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8064 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 diff --git a/software/CPM/CPM25_PLI80_v14/PLI0.OVL b/software/CPM/CPM25_PLI80_v14/PLI0.OVL deleted file mode 100644 index 46d15d923a486d4becd293b032724a06750fc5ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18048 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 diff --git a/software/CPM/CPM25_PLI80_v14/PLILIB.IRL b/software/CPM/CPM25_PLI80_v14/PLILIB.IRL deleted file mode 100644 index 3e3344f5696859e0113bd30538b37f8d0d29f400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71808 zcmd44d013e(m!6eyMYD)8w3Ob+JGP+V6!RW(hc1p$kwt2lxU-%XpCvsn8YMk1wlnc zML;Fm;;tk?V8+ z?m4GURh>`Ose1u``2YGxnV6WDq3s6FPMIB-o`i&k2n`Z%644E!XuKyqDyADGvy@rm zGqbzFDnOZ)OgCHUh`^hzJ&C~IWnO8l8zt(nWXcG z=my(hWkMc~!M0EtC-iMMfKlCGm#2(l_w;dA#<3pyq$;yBgLU~f+Yi^jej`>`Po z>js&aQPJJt?8T_4Zs=dgsK{<`pT#H~l*cQK3hxGAKcXT>bi*L_lt`RtKrCw;-VHZTBBQz?7nFHS`nlM7TsAFc?khym+CLwK6qEn+bC6;S zkQau7#1-g~1b#pfWKo9`%q5NK+=J#pPKjQfO{4E__;s2B{zv zqdFlu6{)H86a_w6pu%wkL;7HEsTrBwT!@u2FEb-2y_*XiND@L7+jah|)7sf)AFqXKN z(L%D4u($Z(W?SLZW0dN=+%y!PMuJq9I?Y1m5>AuM-b`{mI&{vs}lbwho zKuSvrQZ$9GB_rp|U}bW;maff;R>sF^h4@iwoPfWux>H8{E67uP}0+pT7 z&CRi)HZ3aQ{FjvK=xM$Ad1@Ti9mlOzD#zz(va$q9lSkBeEw&}2 z>6s}sJyBK|symsUD8G+#d}35yOt)x4I#OgbMCD|q(p943$ki|^Efu$MMrm@1nmkxJ z9v_@%roy9<(oMzQViKdeMN_m3sPpe5GBZkC_yen337R>06C~% zF$58X{faq3R`F&kJQ^vH6h}b4iN!f=EQw|+JQ^v<2&E>K<|ekXR%)`c8TGnSlTKD3 zwjPEqon5uD!>c*eW|M)gpHa4WpN2GEOcd@~_&f*XP^VEFqcYNva`Z)Bl7`r^P^rlv zRTKBcHZ|>s;=YrW@#=_(bTbuBlx&zXJ}VVh#!TVLh-C|~Et|D5irSp}D$@mC=ix}P z-keL6>B2nvxhmCJ5pkMsF;clblsYT2r;SlAcFHXD=vm!jmvo}gX^UMsq{yXh>1hM^EV=M-*LkcT;A?WzkjliAb@hFpBlz5v$A^$F2$# zadrm%=$I68PzRLh(kmYfqZ5HZ%=p?*CUG7EinMsNT3irB86iZ zi@{eO8~<3G2~yNH71x(tO+rA46!Iovr&%-(Gl36I79*l%E+-jrP(rwZ+H#PJAZnZl zXTY4)xL{?R1~nVof|Xf0@kFHuDK*KtL}}+L({fUY%Hl9e%t3@D&YGu8%SuA&W@B8C zo{@?D=lCP`uu#eA>V&**ac+Oyh1r9jk5Ho9qKD)yP^PkAO+2A5cAJJVk9b0&Qk|NR zhyHS+7^$q}u}C3MP19x}RnUjPHO8{y0<|)gL1m)i1nLDpWm*R9rDB0fz&^|r?jB|e zS8kF&Vw4HwohRkuShA8(b0%9c3fm^5@5zZz!?8>*QD!G(Wl!i9>%5hD6Ij2xJdCBY zX)H*^u^|(I{t&kyqAYjCWsSv0U`vMOrVPtH8J2r8*gaEZN_9HhET&9W;;=H%kxw0@ zr2PXo8l-a4H8j{Fblij)?N6Z6b=`3i2Vgk^~$IEXV8sEnL$ ziO5Cye5M*zK_Yqsg&BvL41vnf<}oTEGYthtZSe_Xk(Vf(M`{+MQ11|4GL9SqngVYe zA~&Ma64EmB8Kp_oWaf5DY{yb`fL$Pw7q7uQ2Wzqr8ia)k)-)@NtDH8>VD$N=V^ z1(3*jxV0HTssiqGbv%G$z5&DuOMN6@GqkqP@$2^%9h~rP-EFWIqQ1%vJoa)?oe+46 zHKj*|S8k%Fq8n;kBS4v}ENi_y>!HTw<_a9gB^S{I0PF{QxD8e;HC4GpxIatUF0~eN zK=pW?IM)fB$DsRM@;ASSm1&Q- zoZ=;eTQU<^uZjYwTuTy)RBNutfD5w+Bkz1cWvka)TS3iwwp4B|P%DK(mF)~IEO$)E zB!xGDC?tdnbB0!<^F`ns?O_@ZP8(GAZ|+{drhZwdFYLw(Ixg2*xL~k>)&d9poah?}Alb_AmBiP8^)>GPf z@e&R->fwmr@i7JO>2Oi64olDHy2#ZJa>{-$RLryFX)SDOX)m@iZ4P;dsSjMyvHX6d z)!Bn^}g;xE{!R=XZm(Vyr!!dB5S*;w-ZsxIAl`$ccvB!x{4%&TLdX?DJWg zhn!ETUSv{l&K#GjtSZyghY5pRZZhHOxzvouP(@{-wp!^Hu@aH36)$0;ygr zCYMwpIBhlOC}QqoogUpsQ%TA0U?bRff+!*u{pN<%_Wclhak!x*CKLt8q2=%fOd#Oru=ts8{%LO+T)I@G7&*G+b^UO^#F*t1R<=sEGh{2)ZUwij3fVVm% zMt=iXUGvDl;%k&Un-uoIh1!6tPR6;hU(9(sq4PddF!OtMA*-$-z=YATxEb$A*~qgt;cI{QxdB3}hw+ zyAXjFI;01zQxzzQnJ9^BmvuP-yG{Lg%d$HZ_L}dNp7~Ds!}$VOSFF&>(YphrECuVe zhB-fI1G!Luq0)|X2i@#(=0-MzJ~ZX!G-bA}`}xXoW{S?1Xj<|Fz?Gf(ny;c<#8$Sw z6K6&tRw01MOUgtsNM~kPjtt2>GAvymyz}sUQ8lED1FJj**WuFw4sNtLhEr#|m#=8> zk~7|b9{GB4rQp8@R3^vR6JUvuPqo9XgmWuQ}g6U-sofmop^9S~Tis0B^Qxc?? zi(@?3D^D+l{?iouzAbQvAH4j|t-l5~R|ChqRBH$B$>*kqH0!v^x1;+PALFHC+gEU5 za^O-bRI;J#oPH@7M}n0_T(6?vOKaVDZkMgW8TGlVvhl9d6qD_otJZR;S;kA}NX6AT ztIWzSCzCQOdr>N>Ou*oM(m9WqK~|zc7B5pLjF@xVS_w6)d8yv?6mOE5R}=G{V0BE? z!7Urem}`hPQk@X)s1UG#!fecApz>fRl)DRt*@eqTQ6k}pYMK3;4VCMs%=A48qDDOv zdyvZg*MvcBm)+Hs0&Y+VHX9_J!?Q6S0AY;bxiR3n^0QU1bOOYlREh4HPJ4shK_fKg z;^XXNo48ONylZg&i)hHHTDl20hA;C(}QtwHA&RNy7D=IFQZgQIDZ3i3K#1xMbJN z7k6?!PTl@mFY7*MQDXb+e`wvaYEGa0S*3b{Ol62nL4p7k-70fO8nZj9&;whyRVY&g z`I-~%Xoa5Sb?lP%Zy0Z62%kAt``(VVqh}}$e>fEH{pC`R|Lvjl_IW3IhBD<}59MhD zZ#~mEiAMzQzA@q0nPxfY^rPx;weWpD+*|);m<&=zuGzgpZ{QxfjSfGJ{sn(T1-K-& zju<%|Gvc2d7v@XNQja+bur8q82V|Mon`|C8;~olf`K}WHL31iVcQafy&J+ACJIe`! zsBtF3{u@mK?5_~aMRVTK9p+ZdxhhT|ubOB?rSaI_@ZxRkG!P1nwlhHTQIgn^Pf5b~ z4R`4fNZAMx7<$x!+QxTZP{6(&UBJ0bfZ8EYY_Of7gYrPZqIqiy#na%&p-45Ae>nO!f=8&;pR%61EQ=ao`RXj}NCFLyQ7PT6u=bf1lj7Q8eKS z_?*-^j&~dkCGVq&oHhu1NZK2;hrEf>x-J)_)q>J0>Ze9&DVZVH@q!cE6Q+aXI_Ikf z+j%nUkx+9S>k|aEK1uSGvrd9NK z8y&NZOVlY^MhiXymq;co(JWdbTU;V?u79Ij)Z|=;vtG6sE#oQz^gMqv+0Ii~4~Lqs za9ncs&}%*85;*ENZ`#0TCl8fE4-}UbLRTGq_GGn2%!}nwi&oXjv!7t*PYFD6MutkTH%fv zpbX#k%|h>cQ1joA)#Wkck+ggu4k@Nh7*Y`6kfKNzpB~ai1rBL9>Y~pHCYgvsVquFU zH&(0{dK2*ABMRFoY;EGtp%pS%TzRgSuQ>Cy*;iDa`vYHrFyQ|l4`TZGe*q6xp7VKn z$2eojZd9K0{nx$`=Sz6-RfY$nG>8Z3M})8^>J9PQxl4Fk#Ab^Ua~D)J@o+#&{sV+H z^958u39Z=@h6jrB(0Y0jAMI$!bf#rVeGEij(2m}tQVw8FJQNws420-USrC2AI>_v_ zol#=$Od)g@K(2!+NSV-C7xIR9dIp^? z!i37R*LsQR?-sQ?9|0(|@bm-FdW6%#MrWMh994}l0(Xy+?mk}LC zPE4JrY1TngNKBpoe~J#}z0hIv{{S6cWrp?y9k!DX{MYF4i~k`yZ2C9o@B}YvEcu_J z!>A|d@Pv`j;d6)%4TKI)@V(I?-f2dMs~I{R_CH03DQk`4Ao;LBRIrq*1ph-O+Ei#O ziqxS##kuO*&0uy~Dd{5lt~p6eq!)Pxn$h(Opm{UlHH?7wgsI7|f8J#~H_$p1YW~8f ztTQUGkE4LTiyYImGva~UclvG*S#z+7J?aa7>O+?e;`!4k$~lU5fKkrMSs2wtzDb^* zqPk}Jlc>(Vmlb#R1oQTPY{iSWl_z=V<)ZNmyOn6gZhg2{Nj=|veQ)~xYhaz!Zk&ti zDYJiX*(?lRewr4s8P&7TF43iv7`!l~HU~`;-c+AniN7Qw--0~+jd9Ek0GH-Aq7m8{ z;MMp=Pq5`xP*>pY(>P1meb#}nmEj)3&~-$JfX7|hVyX~HoHR#zK4xF=o*W<^pf8__ z@HqmJ_@xWuFJAKB$-6X*CKMnt07M3X!bWte*^CTcMeig7SS)5}Mb7e_TepYC!d~9_ zl8SSTVcT#uZK{@hXAmv6gR6fy0jw-O{Fjvx$t(6fD6RsVd|(!li(Bl<~%DotL z>Y!i|asLYXtrSmoTD2k;kNy~gKT6Rd+qh*z6xA$^_mRw2Y*@i!Kg8EgJ zduRLyklthSe;i#@o-OP(6iXVT^6Zp997_J))Id~tZuQZtW6&Rqr-vV;XnnZk9a4A@ z%Sz{?!iRc0ykCj_`1UY(?iTvv!Pj+vMTMUjb~0eo9J%;y_nVO^E5RvVJ7>M1@ZgLJ zk3UOlJz*Gkv)aDdgny~z#V2_O{&jzG7@nP^RH?8{WLK~f?5c2I(9fhN>HcP&L95s%m14PjL)E4%#NkG#3BUqZk!B3Zds* zod7*EPfKF~kPjXZg8STXD+2&YGQ8R6hxCh$K&|76g&3=&1RblUI%)Nh% zI#Gofa}rMEktm{r7kMp0w0+YkpzUVDsLKd#$58Joq4!Bf?A?cYAH=NW44&w)*tn(% z@)WkS+$A3*iCXv+ol$~A>+tC?i=omihC{csWISsyQsIku+gW-j4;J*d%3=yP1#_!2 z>+e#prGmRQ;tW$e&nwI`oK|Jo{%cebD#?d+qJj^(bt?bEM(10dl)c*x-o+|rRr}%O zw?P5cw_Cjo>`}u2AB9Llp{`LecYW3Dt||UF%U}zkF_Z+k>p#UnD^)U4xE5JV+O4p)*lmNpqB&04WNCg@ZWg)lxPfK#EtR^Mdp2{pBt zd*aRbekz`|%)jX|LuwTbHJf?6COxcj#4NIjUEhX#Xi?FP$T&wk!6|F8cf|8MkKqm+ zMC(8~kD1jyIgiS-z4pE{mc(7OLam~=jOFl6x(jPCnOmi&0LSondXU}#Bb@sT$LQWIuxZmFjPC#GBwZbG9jxXQ%$`>33_)AVBE6aoByxH2 zaUOqj;xGl~N-I?`_l6w*#?bsZ7!9kkCC#^SDT)lmCyjko^2=OUJj@cG3iOz(5PuC7F=pC91hNf+Y5VC=O7>*ht6;#p;~g{2 zyI~9(4CY$Xbd3X4m>*ayc88P{-v5l;y^U?1xP#}{iwaI~n~eUud6D}F*W~2rw1GTG z-%pZ!R4tC;Q_^|Kh{bI8Bd@Y~T=L!b6Oan}pfqlcSnA>x?bynwbSTu0}_?*?T3jufm&vqT!MkKN6Oj8L? za*I7c%?EtG$#zy3ln*3_nIuRx%JfXBo~<)WwSQA~UpdApRg@TM6ilaHh2ud0xOvQ5 zm516(9QASzfTsHP+y;0n)UHRm! z!~DZS8)^6y-fY#5M<8VqAF@dD;V4iq zrwo={u+U9}`Il0v>XjP>TdTmwtiwYEjrlQiX(X8c)0GckVmOC+R^f=io1fZgI~x(cmvEs6 z;a}@w*7k*2K2y9BA*%56Cfk?Vt!_cheI5a2xLk6iT2!!{D>wQdHHgf>XS5tW3&yFZ z$P8Ym@zYt?Uz$bC3_343X=|RKX9piw+i8@|VC{d5o=Mv&o6)URkv2c_Oq3= zGzQxN>Jx@uGII`)ra={gt~ylp17d#Q>f7^wuFniASzgfKjc#yj`1Xrm&q>@ZK0Z>M zX%e@7`7jw|XM>AK7SgJgkz^eC_VPTJWc_daTIWqz7vmw5r@w#ddt5%zhA8 zYEeGnO%ku-qyQrpEPr7Z-r8`!5MpL!EW|9-jy+*^!=4RU#QUt;5Ms4-t7Zi-PdL|J zaq3k*R%j_7W9|PbJjDsHA6vZ&bF9uFu6Bl==y54;l@|yJW$2Ez%;jlR;lH#-%-Pgj zZVk9d()MODL@c5flokY~EuvEkpL(wVOwbZUM?}AYPgxFx=<5YU-z8}-5%)!e*bC85 z!P`yNcoMw{)mlhZZ9$m}h(6G21k}_cqSwMICk$O>OzpP|Yod-b*PB&Wq0Lq3^>qx< zBMK^Hh`yd7`dn5!hAZ{V;xSxiOZ6CADONf3MBcfqd<>bNSwBY1<^nRt%u0ZIGcz4| zW(k?V{6t4s70?rAH|&{oU-BiVz*RB*2Bz7 zhda{W5pL7&BbJl)4exmE~_TPZl76BhJDa0 zsFpDc^<+=FCFb*Tf%%!Xh|E257D~#VFuNf$jrrNtR@84#x4+R1HzzDBV;;u#S+g}4 zma*ANe>>Zpexw+su9{~Sma$i9d%FFtROd>@&P9ERfyg|!nA?8}z&;@Z;zgeb1iLw5KX-G7Z9o$qp;p%3zWPgS0wM-(d0 zSodB$Ev-fXEn zqv<|Xc}5!p%cipShJT&6!0gUjf4(K=pX6}l2*|84W?hDER|cyjSd}NZT~>~FW0~Z< z+3gDDczXSwFgs}BozGX95rfk@Jf&!=tS`~|w5SLIMbY-U_oUs3s0(%M^+C-Nxdxms$7>J@A8UurT_os|i1!19#0dm+8 zx;c#4Aj8f!>-C#`j`6Is*@Pn<9bIl6Q@QI!6Xt@?F+sSm3Bq-7$A=b!`JriAelX6h zOc2wPd=`m`<+GTW{1ITQ*GYca5xqp}Y~n>tp)sEpR82_vSp-Utf>ebtIP=>NjGVezKjpAI;^2A+%i zTI}K+^xV+mb`WR3s`%x_nZaY%-{d8cKI>m{@BhWJpXc%*<-#zJbnveM=a;-up{zyt zFZ^^3JYC0I{*d{fRl$mR><|ds`dU41SVWEki&Nj867n?{RskL0+^Odl0p5jfW@CJEH$~A()YSFWyGmjv2 zzaBNaayR+`pK}JbD$~rXauRb@GWW$|(kSa~>*Da&3|b(anOvZqlJ0>hAR15d27VI4GL2i4~sUD`%mVvgo{8eU6F zYu$l(-tPGHsZRiHaRTa}A?7~5&0 zlTI}+owpaGp&G%>LZm0W13Ouqy9sw=p3IiT_wQ_9X_8Kgv{A)3X^PXY!BU0 z*&Ddfy-=G1)3vrQsi1ru6WLjvS!5P@93pw_v9Vq1)yC2)!vW*TRMRzuSsv3Kp*%v+ zx1HV%k$WXaK=eWsx0&~E2Io6QN~9ZUj!d*|=0y4#6m8@h6z%xcZjO=>514S~p|g!B zY+1_I{Wclk#bssTj&*F^-^R$SX?fMkQcCQMq=+`kbS>39g6WIRBdD0$iIRC+B?R4< zP%>5L9N7Uyc_^FQXLaUiq7e0A8$HvobLGC!@8Qqj{1wkRF2Fp)ygWeP8)L%e6XTXqN=uj3iD$TtQ-=SVj3s#Y0SU9q8!+y8Rn;# zLTS?L4CYBkdjSiE1n0iJ=lqPu!>aSxc>Z|vd3DX?jO((G&M5!a$MYm3LE|~W@B?i^ zf3P?7oQPmzj%%@Zue1NOe#g(~&@Tm7_-%0BbMSGq3fjKZE$3TJkGcyKz{`Tp+gRlYDo#OxsX(zo5zD27wFH;TBb=g1KMI z&5d5-pXX`KbYJfANA0+!)yA3|@FXW?8w~u%&-1!0ElVXIyMqL3H8ASr&^`C01z!*B z7-sah6b4=Z(K~WXd)zTRT^P8m^t@vpYV`b0L8FDjK-6e-JGF)UG(6b@$tNyiMNeU1 zF`shKI4tkCg@I?GwuqmFB{f(WSjbZxc?uI&zbOn1!EAPHg^)EKtV0XcnXW~t>oEWA z9VH}qswus)9Jj?^03>*8htFBnQ-y)kZEPF7HO$8dg@LAP=`U>M>RDmn_cDhlRv7r5 zkO#xUz`N1|cGmIuaPkR4VW8<+@4~=~D$GI67jjTSVIaOqOof5i&n?;4W@!n9fh4U4 z=4^z*K-y$3!e=}c1}@xdy_ppTE)mahg&GrWt0 z zVE+L~)O)FSnOW_sum+H!vCE_m=H5FDSno>jq4mS??3bx8punNxgk6^yYGva2aoL z;dy+I3xB#Y5M7i|8Hg_P-&O|x-{W<8z1RN&UVpkYkS5GZ1KEUq|8UP@9!vy{J$Rji zX>!EtJwN`(Kz#U4vL^B6on!AWHTDz>9t1cbL)GeCEJ&&)ymTlO3nC7CpYmGmlsLrC zHc{r6a2P8VL|v+s;|WA5JH-%+1(AVHF{oIO1z}H$1zBf0L63!ELF#OUz{`pS3FK7p zm}aM9!3v(CK`Davr;7!J$j(wMNCJAQSdawAPMKKyEhAWogNj2mo}ZN8H}Twvikq%p zpKiH}2p*1uBxkg1PzxdW**{0GN)No?NeKS4w6~4l8Gh6gf=}J{<-XR_-*pm#=W4=q zz9Hj&AO!FIkMNK09nFj;1TTtie_K%<*~}1pa9hN$jv~91Q*(KdN7boem3@AQd;Afq zI3R+L%KL6ZiSbWuPa*h4eQzOxH~&bTzmY@gM`z4`+AQrJKkCUT*6Xx46=SJq3?SAT zk&yqLAV^l?iCB%j@1sF%+8QzCwW{(&0h!RMQ8uzR0ZMS?uTtIl6W&3*fb*i%4ZgS{>7E?524AB5YDL zJly0`bGECjro4as%LkbEI2;2<7eydcf5#4nxK?0@;P@V-?io!;d92k5pERvz}KaOK3I_<_K`kO!cABCzi)6x+>UR*yv=ZXr|qoUJ-D5+c@*kc zjCwVO!IsY+VaIfuKv1|!?j_*=XbJZe6z&~wv)W0t*46)} zc5=an&DUyv9{qz7(-Kx4y0-jN?|wGCKI=?Q2=}@IkW?+^(e7O#Jqk?w0~R?DP*kUbw)J|3;V!QXT%X zeR%TaH%HeF0uOOt$^BWzsgq7uL*JWak3RV2b>)a9XvO8RaK8; zKD-FZ6=cw^n;aEicQ{fo8|ADXxm#wHtJaFI69eehs zBtwv1a=01remsvg30wCDy%{l51&AE$%&ZCP1*+Wf<#X@R@e}5AHg)9UA0G#ap%qS1)MmS{9q!`wg~x`Cc( z^dM?=aU=n;bxf;k%vp%tKA+Jc=ccCsCVi>~I{-VMZrd@0k0c*gidB%J50TXZe(Am>?(x(JLUz zSoKO3#uR&?Q|0`*-gZHf^(Lr6En5)7Jl-_@hO z(Ue-a`+9ZVe-u=2+WT}+O(&HkVhXAon)H<=bcW?eewLkKjS;HS*k0c&pgm(rcK*8p zRoCdg0ZvWlACXt-XZziaPZYyGA+OSZN=|;`iF4|{=vDfDxc;4Y1GF1!(W_YdJgoUu zSz{$8uj0x_jV)XI-UsAWF3e5$-DI4`lUIpLY&?|=zpN&&GG|MB$B#{4{4fT+iciJ4 z6RmT6QzxfXgY`Ks=GK%p+1g#F!J%lyx|&%5qiYX+4c1jNX0Kjs@3HK!^Hf}!Ofh+= zcZchD=vA~g=D2yz{;}yN^eV0nhpx7ZPes3uUS;9CRT+P&vrin2@L<@MN}`fouZn=>jXW=-FzrxvJsT#)2rTx9lR!*{=+ z2QRmEc54szx%pO@rJXbVxwZ&wtairl_%8nE$)^uvA&%|BDl->|B%hQ(P#~ft%lqmt z@pd0lg~k!Hcao!b!VGP{v6u^d2(oW^4Bh7P!kgv1uu%q7ETA$33rFr#{_N-Oh`$>| z-g*owf6xjcH~|kd77QwzFuq%OTZr#6RcPZrl%Sl=Hl&V4W(0&AlJfi&aARp1~o0b6o*!={=}R!b2p2j`0vK&RHBJqT-YP{o5A@i*5Lfa z9<)i0`JL%gJ~lrUHFSDKLp$bBea8@nmq z518X0&f~c;)vl1^f7ys5z$9=TE+8SrbAdPl`gj^``V?-wh>NqC+Cp*s`z<7a^}S@*uu-|mM!iuSiKS?6ly z8QikHQKZCVUG%Y+%PLB*pQmJ9U->Pb|8CCszPnC>_}G8%YMSipZFAu!z#(_X*4I9+ zICf{QiVLjkob2DXW%~n6*8OtY0ZxieF8T?Rb#dW`k^{0YN?*rh-K4V1pB)Up7Badv z3fx>8)y@?cUL0_`9%Od6jQe80l=m&heZQ%xZGORgE1N^NL7YEYcfrN#ZS|@7DsbAl zKS;T%k-Pb^MHMhqdO=}U3&L6kfRw!|nES2V+=z8l3$$X@!nYy^S34Fz{*e9uM?A5aS%GzRxvYGy4#H*^G2A)35lefdi3P0%W z^oWvtpLo03=OvVb&D9eK^f#oj?9(|gGf(1IUoo{4DaSWXc0X!c^ zYmPSbx=ssDk#I(1#MLg&QNk{4QlR_5)6v;Je={)<7a=%ImMHq5QS=$4Oy?z-4eP)g z1gTOSM#0K&q{=dVDAkfrml`Mx@-C&#Loc}R>z2*q$H&E=8YOI%EYG_n_&)YLLc=2w z4O3i~glUd^^qkYp+f~r%WxSrZKT-keWjwn;hnDyek>_Y-2^9Y%^inngYY16^aLRNT zs+Ztu2y(9$K=?L23WMd(%ya(5Jm)qxt}o5=lw$sjoh)7By;*^9tpj}DWm}?^mfOSo z=!e_&j^+sUdm)GGV$QfN_1??8xSuM<9HAaz7_bNvZ$gAx4htW#0^w2OBUB)arS@KU zvgFHozpQ6iK7bQm(KtgYmMJ!$ER8(Mwxkr}oF`bGN`{4#B`>z38+eQYEhkH?WSE^S zeZ)pkETK1qQBf2aRd&d6{KBiCa1Jfad_H@v*U^b3yYoM*Att-+Dd?)T63iF?Pg6^I zJO|Jl=)l#@(kxfi_Cw3l>@Lv2&o2F)z8kz3mV^aE!cZr*^S+$@%IerBFBMf{ zSy(%&in0y;sgNH!#fuZYTcPGQOg7rSY{FL@pXyLji5Vggv|}fR)ZXy#v(sc(7+@*Cy1z_|Sq>O$1!Df>HTR?dheEBEa|BY|c40G2 zAb5*GddUGBOo8Mn;Ia7=23SIjcU1^?rI3QNyR2bg`Hm1d#I`~o`kIZ;F*z!-k6DqE zEQ)+hhKg)2>`uj0je_eMu(C;ud-ig3gz_gd(ALD1GOw1e!afLS<47EvFf#djdB&#W zzUxvn5wtA~1zaNuEp@4&$ChLI3O&#LT=~zDO?TQck1aY5DN}g=<8pVoXrc@Fv_3Vw zGj%vTc0_VrNU?50bwU?!H}`sz{RA#_3)bIPG2`84K8;INU|vIGHr{~4!aHucl;ki7 zNr@m8NG|O)7lD+{KBTX#q-y4K9}d9{iN4=qoih+z0l0Op9w7VEz#Fxv@d5#N`eYde z9>pGg;pCkax65su)}iw3UAcSj2Oi$A=XT%$JE!$p^gDaE>gRX_S~3JYI_g|Hrk7*= zn$@73WEz1zjevr614@Yj+6WPfS9WP#&R|rAvhh{gYOG3pP~_qt#Td{D;o3=fo5A0N zKmOs=8dk$h7malH25qhr-F?ZmGzq01?LWd<3tV&v6{$s*=)^Jr{ox5%{=75Z9>1m8 zhGdfpqL&%%^p%ONsQE_Pf7V^x4FJJYUp(ELi&gn*rUd=m+S&3x@pP+L)w zc;N2A4PIV}i9Ei>vEQkst!S}mn_=IMJ?U)Z8?w#|V|k!SR%s=duwWfa^_+BIE{79& zNyrs=WOuSUJp=|&&H=_rT%T**BNo#Vpb7XGRS0iL&+M8&yt@E*1U#U&vW)FD-$6xk zv+Fpa#(})H^g?iTkWvrAeW)NKD1MNQ3K5 zv_`V?nOV3-rBT_{r&Kb@C5>g^G#(o9VHe2Z!8^i)Tcu1gA1Fc8uyc1}yb&KWr)6n9 z4XKendBr4wYGv9ZHkHmj z!bi(Y*CX)FolBSdopbc_mt*N;jslzLi&4%wYw(jbG;ya5{VtJt6tz8M=26LXjbkqcdDs{=W;pM_b)5}<`85Euo=8q*Wz7cZ@IF%@ebCd^NW@rbr6e8DN*TKJDF zOR6tBU%HUH3!q=F!TO~>u;5Vs;Sey+DB@KhT2hpa>FQ40pW2CKc;v<2 z@TPCQ9uH9f;6r2E<3Fll>ztW2 zp1reDeM$4smbAJZ9(_=#)!R%Q^ytWI`?u~n{s~H9?mF9d@yPCHwGqLW_??D(uVxy> z*Dr5O!E%Go6>x7+VJwRc2JLJQBTtn9Y~(8B#w+fT*nQMod+ znJGQkXfdTmZgyAywbE~ne{va3cSO8g24#=`DLSaDrfcgM;Dh4ugFx{xZn>?q`2F zI7#I&V)4gc`pV=m_pWRya8-JF)GM|X_->aL1lhC4-PYlMtsvP~F30uML_N4{OM@OS z!wnSIQ-gct3|fRhh-crIer1{2N3csJ?P#K!bo|ygTe|UrLwbRuz9as zx{5=SH*u#P74s^$e_#*sDAa;?$Ln1?VvQiaB4=BKO&)NMWizsyteO{ZwSTPwT~d4W zMy=7>$UWy+&ySjrgRgOYy~z7yo`jqIxIrgsl)#-@1nIoW->7mnsn~l^>^~<}VpZn@ z&CU4_rKj9cW9fg6RBoUq7t|^?L&0r7(4gDKZ$UfZ$3Y^r)?Bm_UaN@H;YbJcwORJX zXQD?jvNvs(wV3|vK;3}%M;wx`WofvMPUJML#WzYQn8{> z!d(nQR0@0wZ)7ON$s>I9xL7Tr6x=BN2IFSpGy>1S*aABVDxxu~$Ym|Wi@-7WyWl`f zuPj?)vtUsr_Q~7V9%zhz^wyfmA)jMNg=oevH)jNzD2QwG%DVpP^{4y~29bAF-0p%> z0I!eRN5@B$;E?*|WL*+~6TuH$_o7P= zG&5)yH__}+S<&Kf4|mVja;?`~bzqak`a?gYf(S>+z@_nuy6Cbb3Q8zWK)ob^{ARnS z5^cZ4cyxOaLED$k5`YB0B7K6e1$|Ybo{kgQM=#CT0-H>vjRfatR2FRvfp`gh?fjKx zb=|KNon(N^&UtebyP41&n*wu1gyxtl!mq+ykP#O7r2(xa7S8UJ+kY;FUv?NA-TEZ3 z@9Kv2Uv>OKivU|)ui$HPV!0{q(I7wDWqH|0xeW;PFvi_GM0&oHQo5Vh*RS@VP#oX3 zT{(}ZaaIdnq}c35E~~h2eMABf*m{19VOw9*G1dKtqeqWzm#p*h1qh$eK$1lRkHtmUl1*th>G*AsVjN4254V;wu7&&f&zbk}hayoTbH{dZ`ien36l?oe6b8@*AA z%1w~F8+eo$=Lln*m4%f}_Vyz++bH>TP9 z4MLsvh)eVFWIDZ0(CH!pzIibChC4z!&?}n@ak8xqDEU_ z2yR(&bUvPZ?(l7N-+Y37aCXM_hN5D3YQhhqoJcT+|1!?bX+>j^i+JG9hE48+8Qjd& zYB$gq^{ZX{2yXgYNfB=1c>BP_qgFRgB;T9eRcH=l)-Ns9z3feREif=K;9wPkv-R~w zy0>FU1=iIFZ(ROgewbhQR`@2KeP^33^*V-09~24BjlO&oL6eyU1dvJ7j=XlTU{?S9 zTeI))1P*nu?cQrg_jPg7>SKF!sHNk!!Kg{^b$kqC><5v89RK$I9;5x|A4BUNBUc0t zPwAola9&t0TdT+t5D(kKusL%&Nq_M!7( zW9m_zKrri40cuyZ%LS($!3Ml1rn4oTDHAoJO*37l?WmIb_Tj{>%WloPy7*6v`)>NX z-xXI57JZugjq#)UpZX8oy7bm76%Wfayhk_z>`KG#s@1~k{Qu&$T>9ikjF7VWN*r2=jA_wPdgjA*dgg8#KxuBuxdg&~aV4ru)+ivvLU}58U49vwI&4J3U)HJ!hGO zxmVi#WG84)NK2A`bVPr@D6C$fjFXEKFApQT_b3mCnLk zh#(=nK2>h)Eg?bjrBOmBx4GFJyLd^L+!X<+dt>f_>Zm^zW-6er(z9bXK(4DJCJ^#M z@a67nB~9_VT-QFJJ8)uG+t>~< zuI$1hcT6Q$w6_kQIII$4CJe1z_0EM15tq;H-uK4bF|w$Ad5{OU?6=j2%Bs@J6L~+D zm{FV(@C`nfO{Vmic`}Q*Ry?3Wcy~&+d2$~R`-VSPoj9ovND6BzuELw1(!aERxG^85 ze59EY74+$@aYjk`H$$?GGn_UoS*oZ2a461^S^XH?0Ft&@v9saY+=|a$ywrgRdGm|7hMyOG{3Y`MO?A_@Zf8bw@gn-?qNoRLZLZ0r+*kzVqf(w6y7AR7 z5=XsCVFqn+Rd}0B$R%ml3me&>jmyLp?!Vgl>)JjiGfRS*8;=>q+&fDpqC@-Tpz!S2 z%iG<%ajEO0m$DT$LvmIIE%1eq81$Q_$rv|9s;31R(L98HCyrh-tX zlt#OIh3DlqE06wtx}eq0<64%q&G$mB9@OZ*g>6nb>$2Ix6y*pDb6LU`reIfB6GZs= zNk1RdB@bU|H4xK6H@TI!W^Q|1cO_>iOpd_*SC@|k&oDRX>T-<=fA={qPZDD~D0fxD z{ma8w@Iu^z{}RZI;k6qsUL;pL=)r@w86==)==xf2bLyLN1s`^B@K&!=Rx7-`WG-c2 z82jh#y0Ugac=9)Vb9C8Q-o_}I@##{B!trwP4d(1S=}~*gD#wp^?ROa;nw_9|h~c5P z>-Z7Qf#cBCYd4Nxw+mGL@=e1j3UZ1&d3*1;z3pG%7YDkzrhT2@grT}r72l~PK&)!q zUj(kjnN{Mh)ePohXs9~7lScy!f(3^)M(*^jD|g-k_Z&TRMch!?R86(p$qzYEFpHsB z`_G$1?+u8Yt(6_X*nP6m&9y%_Dwg;s@iF z@6hjW_XPca)7>FsQ zUxj?`D>}Bvz@CB4Ztei@;aA7FTGXkz3eI%863?gs45bqAdjCa5zelQ$cZ@@?O|&!e z^rz!V_;Xp~5HAs)1~)$v4||`Be39=r?jrxr)!g|KcZcE$GTC#(jxLF`+dTdtIDj>>@+*4U?k8IJuu4!%;KMK2Wz%=fsmtGYWUIw4O-Vjr9&c5nE@P|tVmd@JH zIez^Wcjb~aT*ld_=2pDw&b=|~71_Ni@sG%N$f!=-hwfR{C5O|Rudfv~tCw6+J2or{ z{VI2s6kk@7ULO!kFIujhA^Q2wQ5aJC+0?KIxB|7GrJ2OnrnSCrQok#KBZUPJkaBrT zBK$pMh)EJ_QsH2`M6!FG^q&Tv8)0{D%7A!!%+l#T`DZuIF_st1f;F)>RG=CX{7;T^ z77Z8!HPimu>4TL??cni&%mJfC&8QNX*}7ddYu#U-g8@=hb^Q8oTUZ8Zqz;(BE#7z)io9Dkp$G6{jR|Q8# zMGQPmj6w|C`=Z_i(qk9u>>%Dwd~P|r`^zSDkc|GFwu z%$tV#at{&W`fvAFoI1Es=k;dk(u&G09zTdq-k#CXzJL4%d=+J7y+PPY#%ERIR)S9L zmgJ$-aMfBEQniFn8>jlhHv|)~%LE744BVsQC16uffG}Z)&i-!^68hDN2yY2k=efY* z+-X;JK8{vUnAyqgdo=0ge#*9~we4uIp;vP-2pfTy19GOqK)X#Jy4!BdR&lM?-dSK{ zSB}i_0FLRt;dkxc0ma=U*(3ZgyiwdzV*?&Ks{Y15b>c=xz-`thPsRoO@{Tmpx0el^!(pzwQ3P517=>)mVeKPG=LrZB!Y@ zBF|$*p;qB^MGE*pnfOt5$Da-2YvN&#mMCuTmEIM@h_yFD>>;)VB=@d}VcJ)+fS2^5 z!Yf_emH)@yn}_oHLu^o9yDK-I7?4bHY&Mb*=0I45hUc|*D7b}G`z^r+4wEq@3))bXoMvg zf5I5!JMMC;f!{FGR%m&yjc|zFYr1jW8S8dI!a;mep+C@){~kv$e2Et2a^%-Ucs^#H2I?OuQPHO+1hIUnp`k=)F1%7hp@7X$F)54NxgAX zoXq4ts6=HIq5GPz+o-VbQ)})tJEhG;%2a% z-&(Bo;EXsJ^FqAl z5^M3?wLo{1csy?2?lqWk%rLfXe$rVqF11`WSWUhnkR>0iYr(EB*>X7SUhX@v&v`W(# za)a#M{0q_aJXdO*1?<|&L|leHS&WX8c=AXOxQHC|JF=$QEX@7j4@H!^2v>0Mgdr`* z3loewZ&#MabN*%nJ&C0sXV9WT)TvX5UXDdSTh9PR+#gn+63h}=LXARE`|3#utG`3* zFuedwMm!Xwn`pg0m@cb}1ySlPF@Kcne&Ff7U#ekUCd@rsn?-4}QDpMXT0@%vcoxs= zj>5$CJMxgrP!BKGFwmRu0odg;`rm5UutvJEUP)V@xLB_=(Z(%4$Bbv5r*85)$|#=h z<~{xguU%D@>zG4f=&SlQaHZGc>Wp^Uwq}goWhH}A!@4T3rKDWoki5#l`EoQdt5!C; zR%lV>i|a{{5VPu4LP+`@@ozx^#x5%ck$5z`;cIHzDed}St5iaaUK9%* zPA^qrn+uqn6Y0u8;3jf=b2I&Q<#eT~Q61)>AyQY~Y5d8rwv*>~pHX1y9%_xLouEJ9 zk)Hs-B;x<1;aA^hpe40ir9Ut}KbbLsFmzekLh{)M)Mh2vvc1w3u;30OKzZ;H?~Xp> zVE7qh!nm!)hev;w-1Hn*?4*i_$a~Ca{sb}Qe(SVal(_5+s5H-&@T`dOxSOb^vhJN# z^G*n%Io*VN;lhH86JH zIvDMKzn$2F$qw#VRKS7=4NeTyGK>?eLR`QU5hbua>|!@WmIF$IYz6;+}#MU$jAXGyg(5J8>kJ>=8(RhRC zzhm@EwS#o)VHK})zVS9@GUM(R3n#I+pobdZn^z0&mq=vAVGd|&dd#YwyDw9j6h8n< z6_Wg&(`7^=ttVZu) znZx;rAhdd`E*TZwboi=g8%!{HFVP%)I4!H*3it-w3XI1)Y}-7aYH^PrseKDJfy8-tyLZx#PJ)n`_j3k?})Cjc@*Jn2Gve0Y#r)E*~+dY^_nd z-%p}nOq&?~Lu_XfSZ3xxL%lyeN?Ne}`MdV?i_FjGE-!EWx`eE}MZzH}{eZ=D#?9{` zXzE=?823W`t)r+MPg-bQ*tT@%vU^m<9NZw^$`zRMb2Ooi`baoxmRzsw(&FKrb{o=?sh~lh)fjMQO`kmX3i5lq^0EHc$(C z26TKPNpw#I7m={>?i0ut6sd^BIFb($K6NfU>AqP?nR}oL0w1bz$)h2~udW}S<$|Xr zG7b}D98WO_N_(-$cDc+ICl+KvIz{lmbH=C5hz^S?W|;XeS3geg3BQVw`?!ec=-A?V z?$XeajxLGemcr2-S@NGpTFgWRVcr=~1tgO8&l?1kMg>gS@^@uX1?6(4`2B!Ukz;}= z$NmgIM*avf5S@IdWdr|$ke(-?#+h*$1TVRFw9AK32KEETQA`tvXCXeMGK4q*0xW%F zUBnnWC{Hkdn5!bO10;bMCFT1CtkFDE^8C7)k$cW|a>$7X+bt4;;3K&#egm~{Hpo_s zsa^+%fcIFx%0RTruiTh5V30q9v9^E5E&hT92xi;AliZ%TDywnIvKUJ=U!+Ahrkvg# zA_URFozE>2_+X`}k&`zVMO?d|2`eP~aY%5sGAO^-a6cA&CQr^YaudOO3+^igTdswz zlE7xKK+oe- z<517o!b~LrE?4{MRX$u~Ha=&7pU9m~Irg00MKcjOtW%3F zX=`Uu=fub5vs)qBO=MWBIR`7JpGCQ_!;$F~N^mX7ub>DpKimR8BT~wlft4PDdGfG-k@T z$xZt@MN=qjHz7?`P!_fz?$c%0kqp@Wx-CoGK0uwz(*au4rrm1F*a72?0|FVQJBLG^ z%Ctv8C7OYx@aEOE=tcB&f)>`ar_*4CzrX}`o?wJ3-HDokuev0sQSA#wOyEl@Sra|` z7TC3^$>hB54JYB(tE3m`+22qeF>qXK+B<+PzVzP5G+4%K!B|$;&hnDh6w!O-l*b1k zO&g#rywT|Zl!Y(J+@&l65XYREUt+K{d>GRATISH9O~0NFV*q!#!b}u>D^82)9u+Uq zFD&PGbLn*U|H#aQIs<#r*zcc8O0qCgQFdU6OgeAHb-zU>MotrTWWrtlH)P_%C&^xa z*P#>>39vyZYJFUXQlGY0J_#h>YiAJ?lVy;L7&m%_=#UDgUt}ITS$wMiZx? zqB8?Kj~DTgE2dYpNyFcg2dfz;bc%_=XmfHm`}lfHYD^X!Hr~pNPFmdr_7qH<_UHtL)&3I4LLnb6YSf_O`8|M1buJ+K`3l-&iC-|meeZhV{mU_2w>gcqb&tFA za>JOk6yV)^upw98c>5I{5!Wpj38#;{1jv*>tKj%N|=A-U-Q z+Cwt_1u;F(kQyg|U7MJQR%BFiF_C}fLu?8wjyC~!U1>VN8f0hkFHE54*;C`BIs;1S z^hjm;qSGLIkbfbMo)a_S}FfY`YYj$B<>Q5uqNEBN^b|p z?^zuwA`YUKlt8^C+ZvS-VDE{ci2E%s??MPW`q@L zGAZVkeT$YBBjlldtNblN?84JyRGrv+HBaf(qB7NX8e}2tb_ku~OxYM<4jxC*B#?Nt z@o3q{HhjFa#C5S@441AtOyqI5OKx|`(_cRJc^Q&qIWYj~$3k!BjEKaEqaK=PbI*Woy9?9H+-!Mm0heiop5f(C38G##4 zXM%wEiy(*L?jZPWD%~%rkjXEi2p>Bnz=hlv=iyc|PJN8&0Pa{e|3V073y*|d#b^t& zPLI^4F9r3J)up?M>@;6D;&8$&+B{>vc7YyC>E>1pn(FVM%1IaM`$8OwO( z8V0(q+^|N;b9Ovte{9SRd?X(WivEs0L=CeC?)txB59YWz{a3~ox|Rl)2noM8H^U1Z z!s&}kr(_v&n$%Iaxjq^RG)tv#KOGZgzmpE!&y{${0D#3qJ1;yt$QX~sJv+6&4{D=x3zWehw6 z=SMl+{o}@bJYzGjwlfH8Km?}Oj+KwaE+FG~UpwZ#JC`)JL)&Xt4vMKSK@YIy1Z2Z5 zlt$R8MvJvaDTM&yh*E}M;JxmXlnTr{a$+ba6H=)N+ap1r-tnh^+zlI-zyT$Kvp9q8 z&gXJ07ca%oO&F=+a3r)|xVR{Nt;@A3CHes&a#R;OPOdzkQYG^xN9|pPWEu;vbRzKc zw3#!bIZ1+TC*2`KZLnAjo87tJJMcW?l&8&1MQPr}8t$Y#B0&6DMGZ(WY!eobeuBMe zR#kg!ioC@Y`8Q&O08dudKR7YVrNEdw%G0zYe~9+FLG8GGEADnTe*((EU5wLJ#u5<- zzX7|e4EOuDBwIjS7WV{ONp{n-pOTz#rz%E@iLe9UdWEIkS+KjtjpfZBy7y8tCjGd! zD^22_+T?05?n5`IIY`5WUB>83WrCct2Dk+MML12%WlHr!OjS{<1|kZM~ss2Vr>ynRe5;aC#G54Prvc2X78Ogda{l{Y&tn&i=KAEicie zZDhE%eg~ubSNm_aL&HYi+MLa)M$UjnRaA7_orDTq)+>3w^PzPfP_SuwpO%xq)mVw; zxcr&$B<~EV|RWE31GRH5!R38 z)^$!r@I|H7nDLhF36`{{Wd8J= zblUDZi0(V{JT%lf@Vd`Px)Fn_Yw<%*2?O<<1g|EY-_8G^C5^E@62C9>|`! z{73wN>x`_1p7R*z!HDiR@jM2oFTm?R7|ZvCMuXJO*U-3N66?gZE5FW~eg~oogz}+x z1z=1WD`3P0Lo7oJw0l3eUdMwlKzXi(n+Vs*+8Jk&1U*S9xNkgKwtau@mAzYXP~Rje z)@5-R(Rj7`aRusm3Vyc_NoBWZ!T6K~pXiH3jrBzKLV-$Ykfq>KD(a6p9;*o>N&KIz zoSw`1{&w`-E_>T7m>b}v)AzXR|Bj&#nFUHrsp6LV4~AYcY!;#Fk25fkMt$jBTYNbq zVE?r*<5bLvl|CPf8v77}qB$CDT)c_e$j_<)f8j<+UaqQFst128IZ$MU^^)S@wSZ69 z89}X&nWFHYwz5dm%nSL}AwZ~GLN0zQ*cdCX;90hBNG&&%S14AmwcjOSas_Ans z^&&=i&#u(M<_~KCd*wbgXkTnNrNIl+&QnVSHrO9Y4T)f|1c-NV=N3p*7%Y)Nfr#)* zvQyJ3Pg`hHoA#DaiBgcHWf`mx3dRs^-cZww80_d+)D?bSKu6sgN2mAI>t-Q|Br4%3FofxG^{K@Rj)MhPo(I=SjE z3ah_1|55!ld~gw&=dW_EA_liykJQHD84&Hs)au!j9yWN9G8O=-WjftoPl3%{uP(V^ zI_2So1<}M*O+g8?35{a8Yyv$y3$11)?QTzbj(}FV>1{2Q$OnlE7u$e4S{00FV|8I( zUGX`TFQR*sD33^}lbiO41(9t-Ew(VARtz5BD1qlZ`x7b&oElINiI7xODheZHQk5J_ zq!V%&E4y7=9^hYWu_)9b@17;un8mH2Q;Q!xMBNd*GET`Y6!aV!iJlp$;!vWdUrlG+ zYxrm5sePeJ*%}o+-<{*_-VE`*7zKrAVD*f*w1m8EiC`~l{x|2e1C*y3u-MyDV~|xN zpkQau-x;K6JBx7{3RtI$a?+}0Io6x02!HinJ7kb1d(Y7tut+;-GsfQ{yu{}WA9;xk zZAQpo-gYyI`OP9O!K(XKH%3h4TGZw}f`X=J;nS!QcALLtFmgW-zXEste}iHKNHJ8b zRu1mXA{gN!{nO6GJQMXJ&ODq!>^a=OJ((&!G|o3O#?4}`n8;8gr$2M&n1~n_+hM#_ z1sJ~c&51-45;Yvf_x}8*CVDRu5rwHgN%U-gY6dtR<2?McU8otX(=oI%vIw~DyU13v zFc?BvPX2>o2;pSJ1O^CASrw`{=^_I^h{#ncgxFsXo98MmQSN16-~}TwHDisNRrJ>= zb#Pj6hw_*U4UB0o=7R;n&cjS%mcbI7&13pB6OqhXdYkFWbxEI|?~y$PyJNtWWsOv~ zkz{tE86-DYqTx6D@F*r?F7q}kQDJr{3WHXaX`fi+OnKzu%r)H13y9k2@_oC#Oo2YU z5xHQ**pJtcX7d8Jc8OZA5_Wc=L!yy2W4OH)V~fu}F(-obFbkgBTXNn0zc2UvL)$OY zB6X{|8o)sGB$vgB6Z~~mUJ;BEML?4^+O^ygrMnL;QACi^C6nLegUroX$J};wo0Yun zlRyW7PDXLp|2IhN-^(aZDexom8SvVqK&~~^U%B}$X%I+xTEa!OX=f*uI1-!hX((e$ zj=2!%_Y>85jWvWgP5TDOW?NF9O+i)r6;rGwtG6i1uiv5r*<2lz_3-HrCg`C1&!$_6% zY&D8PEru6;ksS%MkrHW#QN-cMKa)Z?B7`33N26Sto@RJVh$+>Cyhp-h-<)DOYExXG z3+q~CTl4T)#aqv|(-$EkmC;Kguh&!HW3vS4J!@9L=1t)CRjbcW{b>6Ps3;9T43Ee{ z#zVOYWSA#B!GY^3f4u|?jN-h!W=!%(Qlg4b%`;>omUC{kBzg{_x&IN5fUOpc zP>FuA@vv(ogJN^J3v4!Lh?a08e8?|0=W|APhB}e%g)ZMeHGR-I0ud8#4ND3IEM<1y zXXa)ZEN|wY^`W0J5o=g%-a0aco^yioSOlMFO~1xtDc1W6cH)n5jAt|dTnasVErs{t zkGGX0@V>7g{rXy+2X06A{}pEjnR*=O2z)v02;4BFAd0v=GKmU-0xk@h1yggRlrD7nLf7&i=7LtAHx^7zu}!rd?_(Q2@exCAG_? zo)3W!QcUR|(lN%Xegz&$=JA0}5>h3Kd|vrZ6iL z20gE%li3yH8d1Ko#O@&m*i8E$%cF{Sq;{<%!kXN#tBbPkD&H z4~Rw*RecxnJsmA5KIV}KCzPgN$%iLdKCo?RD^X@;U~db82-1T#cC7h9osp8m(00*~ zzBF30jWN9oBM|TN0POsHs2?Kv5Y#)b42GRe1y1>pm@qufsNhB*2a}ADg(Lhf*>>=` z0u8CP)GBZ~&k$8bGJ@ebq-u+o!pV2 z(q?EDr>|bfu7IY@d!OQ*<&RvY)Zv`Pqh)JPCqg@bRJYKOeAr;zh0Tt&hm3WuY^PFfgtK1XtjBIoLPWKR@D65S=m+IXqFXZ{$xguz3nK%zS$lZv@rsm4$! z`jHJt4ckk?q`Jh6?W0o6uGw%V1Y@1}tv(@0;g7@5*}~}fewe;-{h8_corkbwfyxbP zs9OMTMh9~v1Eb+trefi4V+FIk;4$xCy7oGQ&y7~i@_zGv7c3jzcgP9Em%Yc72lJ10v zOinF1tDw7>h)mY9kK!ZQv4=RAeL0Fe3;@y0Y^Tq?8ye59j%@!!z7ZtyVgHA{X5c=gbKn+HrP$ zjQ-llb4m07L}X)n3+5$dDV-Iqe$i^bG3sN%X<=YpWTO_}L&|0&&mx zY{#Te8hrD&sSN*8KE8ttB+xJ$ZPTwUz?4J0Z47r?ZNEsXqv*d=lDXUqqN{Tg{GTa0 zmdPR}`BTot(T6kQp$Wk`jWNm$j4Ik7GYic?9?HgGv<>;3qzz%l|5|2m+EGOSnT2?y z@A!IHz+ts%S10j5c?h7IKpRnCi7>?#C=(Hk0;j{Qc>@XG2C`t3%ENa`5sXf@H5dD% zD#v#6oBBz0t`*xWMya7?cq$6${G@uvMa^^{1w<%$mmje`SjK)ulvcPnz(D;aC{IM&+v{x1PiZ2b>GDXeruCNXb z$+_n#k(%qT`6M(x+!|fC!nXKuo8BuNU`m8vJ{|xK6m8?3CVzHpI%v_bbJ-|Jx3ze_ z=_jXsQy9ypB&uxPoJL;M{1Jmbw`x_Qv=NRzZ^W2L-5WfZ(#~a0-nV-_A${^@%$!_S z^2W1qrrTO&q}3H^jOv3Vf6wd3)FypAYF{!dTXT)tH&bcb8ivXFjQ65`UQ*f{%CDgY zmddVRrrOaL3P8o7XbSSg^Z~9yh}K0IJhV{OQlit{+#^ zb(4%8<}{uZ^0IR=6X_&IfAKw*O)sg}ff@5upjx^VQoqsgm@d2wEH%gP3&yL45f+Pt z3vPD`609i+Ca$`QX+K*{zslfia#w@f4}fzP)rDcgzg83|M;k&24X*yQfFem^&Eztu zBFIp6j8G=vZf>R>F#9+`&R;q?wVO5j6hDwkihrPo-)osrj7j_W^-44k#8gs37GE?5 z)ex*0$)G+mzLTgWKkLV@wz;NFO;SpFZ1g{r3*uK>i-cly58Yc29Zk%b6{ENz6CJrB z6C1c8*Q)qS<&vDF#1g)}5QIzph3RXi20ggJYp&a|sjw|WD|CmAADP^lCFctr1ey~< zgTCcg?8>jS(v}nU%g0I#r_ed^`{mB&9k~E}bgY*vS<2`U#Xq>m{oXxzW2&eJv$yuj zr&cBQ7fYHDY$m~s7NT-<-6W(ay^jg7|9?E2Kp|D^D-# zr+>+hVGp(n5)$YIy;)dFzn2t}i;pD7eB1zbbX&Si_~HB2-f-iF6+0gWhDq1a)voxef3<8ZI^8+yTAv9ry8(hI&Rk$&p>GKaTm`p*%5wtw&_*OebBE1#DR#O#~NUb$A9V5>g~lYy&6jn_YuJM<=4@Mbm69H%ui zETv8_%Q7=A%Q^jiwD^}d=h6=zWStXyd7~R^YpgyiyJV}E-1OQgx81)nEWX5=EQf;_ z(nG_8?w)BgIFrHLT;d$;_ZeoIM~mx9HWkcOX>a?L<`mTo`fuwEtY#knylg&iPGkMx zD8Dn5@J5<sQF8q1*irZ>Z&T2ydGz(;+NFUT1-QIH-X#s+ez?l^PU3!1 z@YI~kxph;FEu}jSK3h8tlLgMQX__Jw0F%y_2=J>h43`;=MFmr-yG<_e+Uv0T`8{*6 zuVSCy^Mk;{%wM%`(@W{o@0W~l{XM7j%lIst*Yu)Tc}#+pzQ5bZPx3q4C@cLPHVRyiQr`I9%Lstvq>qjwj zT_v!uLR_NVK+vj8wk9Un>q!dR;x||?{e4YQO=kcm6fJll7D%@XCVr78s<#%o9@ajp z^EdwBBiNTvBVJ0c$$NkmSQ@@G23AOo^=)E0KTzmZrseSEDoB6*v(o0y+DtJyQMfUC z`QjWURsPdm_&}eB30n4ouF;B<3i;FRyf2tyH*3+wv)XOZSyB5I=2$t@1sZ>w<#obe zo+rX=uLJG8=BL{?oo6EJPYCU3hBxNBM)<*ag!eMF{6*#boIGTBMVonK>q6o|l$VJJ z;Ko+(=Cxta;76R?zz0cr(O8eg+RMT5wW%cUW{Vw?6{cOV&MI{OAJ#taM5Xfg)K0|; zT;5q9w=G<2!_!~Ti3-su$cR>~U3QgT(5dEaHO|>|np8+{LpCUT7umnro+h!;W@XDI zT(#G|loya!WU`WNGJ5=Br+rF9lURzS6D>DyBE_=w>17%>AIyXzLw-ox>RFyMm*UfR z3FJf=YZ))H#zWxkc1Jwudc9fQP$w|P$$j_TfI;Pwps6>1CX>3aO2nghQLTE2%=?*m zD{AKhd1?67cO6{A$nAY2|Mq(DT*h2=bYTrxqM*8-xXce$oKJ4LgC)EZkIbBQx#vIi z)-=zI_@F07Fsry`AmIB29fz6gvs|8*Zu%m(*i|mNeqJ@hVypb&#VT#vx6AmvtfpjI zao_lFxwyswFP3-I$y+2UEajQgSXZcciM0OJ^}79{S2nSV59<96<}}tNd0%Rfrp9N@ z|Mb%4h@9Q-77>26G&u=6!oS0F%|T)LU2g(UfAVC^df`pa*>q@gaiGBXx*B=5A9Scy z2;5@W#xtzx47~8eL~d_v^%pQe*ZCNu^;f`BNq69xwCJuHc*Fa$liQa;{v`0Jk@<&& zfT%n#J=O9Tl*GpN-c0cilRnb)2q9iJ;N zc3z$SBhQ4f$N%odWz|Z=V7f}OKX2iRXZX5LF2zUNbUd5Wm~lw`W2bgqCNrTaeDrJ= z6AughoyEMXVL49@Ge359uFD*l(6nLn>?tN54*EOGcvq(dJvyh&{%vAVfTeR_(g>oF z>`ZVtrfvRh?lja?0z0@%l`)4;0e30ED)6BZX2qIycg=57-XVpT9t++rG16%(^Xt^z zzXj>V*n2k_?C2Gjnsq<2Qzrc;u{094dfDsk=#rFl7SA8gX8$HJNU*f>T5GVQGtLZs z_1@|`zgbR`B6x`3h#j3V64SUxRPZ5c6_cR`(9TDS zpH!IT4|m_Z5&H>>OR_TU0lA-y=eXf_OO;CRQ^y2`rE#It|2R1v8zp4ttdf3om^qri z=(`b)YjPNi=TssO(}2+EYkx*FlXDyDn&A2ot&yu2DvjC^YlD8d_L0NE+=t!+DF@!z zHZ`;ZHt0@GE}>A=TKWrvaF3t3x2K&6Y7s26fJ{w@oQ3p<#`>q1y1>R0+;ex^4n6w9yBK4uvLnu(`;*`bqPI|`n%_El z0QHUNtk8Y$gUsP_0!@uR&tzg%gz@J2yb*mWDA>XXW{&u_=VwTLkEInM0wmAfYHhjk zQ^qI7^{4aNNmFfs*RLyTEDXWfwuNO8DP5w7**p!DEiq{OViuGPu2L`>tIjB7Fj7)) zb-fA*sN6=Y<99KA8wICjLJfa?Yopo$ZK^khnuZ#ozq>1|GCsSk7e*`Uqeu7^Gm7Um z!g|1HQ_In1^RSF6n$E7Ln7}WSFreM4VaM!L_#C)?LhiN})5!5x{ehS*VM;6@0&50Y zB=XjM)B@Dudj&8@bNr4FpXKAuT=m<<_#MA9!tW+ysKH1RfT$1)ZjJY2&6EN@TYhC1 zDjQsZgsC=~1fZL(iM?x6k8ZT^jzw-UU7gk&tE-C(@@?!9QFeNNduGh;ECh(nD?D(_ z61xuc7h-ksZ3d|?F5WCQHgyPeQtBJz>*S1v4R*^%x9mdie7P{Up{8P=x870rpUp>ao_gKW~tTf@-Y={d~XBIT~9ga zOSU;*bYb?tA1E|f5O<~Gil;Yz+%}*ZA4S84<~v~L`3^vbJvbp#L)RNWa%OPE_8cap z?WK=qyZ@hQuZPful?C=+qN8aw{$WiYgJ>S*VGZI(EEk`V!!ZP0T(opgrclp;K#wa} z5LzY#jGt)a85l`b#+93O-f9gH{^=a8WDFaz{j3A#h{$29BSe%j;}NU;HOUp?LQf+4 z;L$OMjx=UeGg28nyO_iQ@|Y$S zg;p^9fM~#zjQB}jb!oH9TrG*hz<^|@N>os?v!STE7rYoSSOo&~K%8YFb~6OlwTVu_ zvO;h|^TS#W_SeDmTQtfkk5$;>QRkHZfOu3f80GqNB;q-L#zf3x^^z43TFK}oCvm>6 zwqz9~?9}D8gzm)4=&L=GieZp%)glaoU~3*fm>-R;dHCm>dF~ifP-1dCgko!*8(`T^ z&%vO|b>bwUy=M?dZOrYGgy(yf-qEWk;ZnoKP6$DLVOL(p!a0@b?g(2BuJ)#NUfv|H zz_1aUg@z@rIUkC1u(#AXY>!u=2IUZlj$#D-x)RV~rvzOC%(IwB9V03(-(S_x1QH3N zb8|T{SJAULe@Y)V>~dcgnz!1XURlNVKQ#8 zvODx_bDn25T*WjHwZvEsl7+0ns!qWM*jWgLtJIuFsA$NWNIXJfUKnH?1_w-sjWRL{ zKrff5agcw0kT;5nn976%3~~m0IJ0uEtCiJCb-f1&+hz;txj?DWlcXZzufwhbjAIg` zxzPG41UDtl*X1$B3m>5jj3_F>yC$Jb{TIDlX0B& z>Q{+Ar#zNZVgx)R(bknzM`lgtqK-|E(aCg&H^N0*k3Q3+IayTs3+y#giA!D zP`sv1_sKhxp5P+o#GoKDI3hMQIHxksw7WD~o8c4hUQs}F4}A}9&}$`ubxpC`oG63<7?J$tJkP$Z=7n zQR=s>MP<>IMMT+NB+wnX&lT_o)>#6hv~Iu!Cdi@`CIsnf6pC8y_wHYfaE3Ki?qh2& zPeD&kQLEM7{pl%q=}^^}nlOSaT4ZmvJ}d==| zWJ2DVF4U_sOu^Q7$Mvl0%W6*Xh(WVc0$=bvPYD4!4KJWMJTP(Xy=tH><#IqrHg#Hw zp~@0-x`F}xf72d&&YYmv-uG3dA0l-i3}$6Ktg`K`UeO6KE=f_VfTu^Xtk3Xe?Pva# z-UyNd+$`8{0uAwyCt?fX`F6@-NKj{LW@k*Ixr4LZ{5L&cy+E%zyb#}Y`>-qCVib@p zo$iG=M%_K;x6H=iT=L_id%5K{_sv6(^c{Y$S}+@Fq7}GYWG~D`c6TJcPrgH^ybv8^ zsHYhiMItAUGs&Rd* z4C^sXsD}Dwc`JaRA+P}6*f%z4d4nAtrx{v|Aicg=b|+Z&F}42m;z1HofE-qzlKJM( zWkx%=J_I{_%`G)-+lT@NwPQe(JCC~wB1p(*^wQkj;bM)7n}f7iqvpBxB0NJw{S>%% zO67h(koLOBP4IfH(jDhH^ygxooJLX!Y-Nm6ml!@{oT9#OtNpmwwUwnx5of|CQLg`j zI`S7K-)rXYf5Yqxl9PpJ6k0#kB9|qdxlJ~?`=D1hxN_q2{1Ihb)Ij7_Ps z7Q^)#@U*ZopoE)PsvHp@BLOetQNzoUImSDfrm0CvszFFxq${pIsY5}fpOndYd@(r9 z^Si+mX;>=yld2{Az=&J6x_E zcVNO&VbQOKiw#$&MRf9`dv~ujPhI<27FJySO>O)6s4~4ylx2z|(3?eh(@OzV) z6&wQbg>-++LOnXR`tapNc!{gmU4St8>MCdTv9L5H@|vo>Q_>f*JliTeGWcKc#HN+4 zuUnmAu5Wv^?kGYR$HEF7Jg}A!H)#TmyoB`G+kyh82lWATvf^p=B*tc+@Ct=rM>g~v zft#sA-_c~aXfNk5AZ>HMCnUb{L%H!oOSw$X5UEaz1~s*LCh+5zLdG<(vLE^A^~zrs zYfx$F2ZBE8ljL8F$aX`JvKbk2^R zxHwTHeqVg(d@}?5zFtv;SUS-=b#z0{(yy>v-DlaMj*XiTPv4$)L=Rlrmgu|oLozkTdh9=k?o{~ch9`kJCexKo=EOhEz4$!xu1Jf`Xeef$mTWGBhX4NXr2{9UM@k5 zN%R3h_M9)=`bYR(Vw$J6p|;4xG^}vYs zA5GYNOH3l~br9#UqfY@M$z&ii#Ys*q%!+A%zI9WMPyw!AGGZtXK{^>XmspZ%rWz z6vwunv}mAwLx@=8FsxrJzJ_i+j6V*JoLP)c(}Ynl>j=jnJ5V5?mo{56@8S`lE7i-M zOk+)QehPRw>3zwx$-lG6#tM<07rtlmLdVt|IGKfQ9n%7ZD1BlhqY@qL5m!$y$|le& zYglA4vfuQKe4`A#0tqmI`K_2oB=atHku-IR7bdN9P}e%4m1r#4hIB98lsA7G(tY>f z@VVxsupQ!Bj@wyJR9vsxW~f0fsXmxf{_txQDZ&~J6od=#XyHjf7M}R+jp zFqVR&5lVb0VJP8w3 z^o3h#@DE9nQFV4KXJBzTXyn;P_AC+pM!qwKhU1unl!Ld6=3{vl^0#Lr_g%_;;r&}~ zz=l)v)TzuJrGvlla%JQnCQKciSz=Nr+Oz1`s>9sT!nQ=zA5ka6hx{~*5Ucw9jZZGX{x?QtAnfggESsTO*hGLd zNd;TS|7^J^C3+ZJz5zEyqQYV!41zL1*C%m0)|jsbx+>R!b=4?8Fy__YJ*%Qx9a10Q zpkIOTu2!&Y6}g+pYHPo=!uOTuvM*c7cVjV74xeYs$C}6 zTkw_AB4H%uD7<;IZ=f-=EXfNeQ32PsYHzVA114Kcd=v+@#t~BtJn+_k*v+?8)+TT*E_*lO?1r@xxX}H`! zz7cxW7Ser{kxD(gV*@Rf5ny}KLMlWXkY0*l*6TjvTgDGStSI%iSg=J~81>EpK8yHn zbt<1B?c7MnKIF9X=+5G(!vvk5Q@yz}8{MT-xP3xU;YQx2)hl{4qV!IDHrKdeCK8JQ4lqPC_2INK@mYO+Pi>MYQ5N4ZInts8>T)AkwhiWgEOp zWE2k5i5#!w@}D<42|)c-8yre4n155LtfB|frkAU(MMra~P8K0$329TyaVny*5L zrzdOBq8#RR_nyP`lX3wMVS!tZF|<1k&m<}Z)oYAsFSS?)#s|Z;BstMyEzc=1;C+i{<6H|7&ESJDM`4KtuE0+;h^|lZqU${?4p>O z#AQkOr=Yf0y(X8%jIR@PU+ULds{g7Ux@T3?V3<9w_pX7KS8J8F7mrmgq?U+ufV))% z#kl25hpFH|mLWk%PPGiBj`ep43M9J*L>udJ30Z7FcU|40El(xoV(X1{dv~X$TE2sx z+nS=w&Sng!n(I6j<{?8T8M7xtG5c(DB_<#iUV8N9K#-dAD3uVJ*-n~QkXwcA>S5IP zt=y$h-?6N2IP=?tiH3ywTtUXrbAeiJyS}NGfjo47qNicUZNt;@<1M9wix_;FJ zgTG2-()?hh^-TeS&wu17Qv&@Ye>yYTZEbM(lo5oPz396T`MWJGuFh&-bZuY^o>;xB zhPzM(YqJ8|4p^mV>TszZni>_c1l{HZIqanx2%DIim?elLc(^rH_G6ERB_KbwUq6JN z6dxloCrw3gp1xzrJTu`ympF&zm5uLP{uwP!6kI)L$MrIJ`pu3+0C^C)I4V%q9zA}0Uz(&k9U4vGt@Dm zo4ow6tM)B~`uG@~f5tpS=bw=f|BR6G^}sY9?jIkckOV0nR4^z)YC^q)x<&LX68j*! z1g0r{kLa0Vo*!}OH1jGF7{+?(?*44DPtz3dY~Rk1&n-7gYR5$Dm=LT6FD@gOe6SXc z+d9M`(1{pQoQ8Io2xuB6CRMKx${+w0c;K~uT{#PQGy8b1^$fyBy2ipIQ-dV*{(OA- zVjX(kmbmVK$pt2LA@Ig#LTw>0N!8;zGSmZ2(y`0p2H@)ALyX}ZOiVF+f08#NSlbf; znR#qOpfz-1b$w*r9dI<&;Bvm&JV$9#xVC2jOw_T;-WRHUZA3WrUYay4oSZN^_LQ1Q zdQCWZ;8Ol6n_^>hvZ01H{=iS|QtKOBdiX0^72`RET&7yS zg)3Pf>+D=pTBgLKSeTw+DMLVyv6sUPx+;{SjfMNS5Aov|@ojFALwt0LoQ1H%=rOSy zx$3uG%MGWLth(!gvjeTE$>Q-5$!S{wEe?m38%GE&{_46OEcikt_H1~tVXy76-7FRG zAWWJXs|8IH5&OX{yr2A9(A}@01}E8?Y;Ie6pAW4yDq0*3D@O|t9&G(qnhDZv1){)y zcq1dC6SZn%O`R4R9#1lMjC!boCspgPtA*#RnnC+b$e($;w(cH%S!QzyA(i)l@wWUM z;%CmB9#6hQXU4>oaMpl%I&6{sFYy{8a@*Bbrw3u>(oxJj{B0_Gj~d|*_B;R*$0 zXBA(bkM-9JzSr>-e41-f6BCA>1)Xj8|C|Q@&uQ>~#Ay&Sq?4zY^VSiHO~NK)s`E+5 zi92m!;^!#;`%6ol(iQzGojQKlardapK|~$*nucu+qS3%O=4P+!q7@%g7D>8jnWvYV zC6mFP50gJuKI6$osqPLhGBrsai4lYHA5pTjP}u_~)}tE3K*I8DlhT`ZKYnOj0y3j< zBej@DtD_T5s~S8D5IwVsx?n(H1B^Hd?3NA+K}M@j64o z>#R6lhsj-o$k=iX^geYh2E#c@1U=jw3?{|8@lhyDLB9&lz1%F`r5$@(a4*;bfBym< zzp5DGS1Ky^*~lG64;Ny`q;aDy{{umsEx=}nY_$S$vDcpok!Qi<&k-Lgf|yvsHlL6sYx z*I7QOVvP!N-|yqW2DyRPe9mR#gwQmc)e;-?$7*HjR?CX4*688Yy2h-(P?Jsk14P_` zPzf(kv>Ic#h1)iWWBYWhv!K7L6Zv^nS=!=l$l`U{R!OH${qjczD8`J_r(TA%4e3++ zA-iRb&WThc;G0}N#3*;Vsmxvj&FoU!z}K}Q@cDSiTMe_?W9RD2;2*8hP0nHWtp%4Yb* z%P1pGt@o2*B?#}VZpPFIK6;jRaWL#Vy2u+GoEcO_CSq8HtWu0wDcN$axesUCrEnCT zq*f{4k~?~-(TrdOCkwjB1Dq^~5p$wf*93?hhKgZ(R0&=JzQ@Jzz5tzcQ}Om_JF3Ct z@g}qc*8BmLUnL)oVf~@0;Tpv0)*xPIYBGN}rqS2)A9wyX;aRZ3jlS_jlLVV(Bd;Fk z_N%{WaqUx1%Z(uoc*r;P=mz;pH%Ri?3k2%hcy>eLvXhXlwr#OMHTOk=B1BG{xldN2 z>q*P_{CMs!s2cpOXJ0xydR&Y!3ENfe`;z6Se*AFbqWEag`8nFZ%m381jPYL53DV86 zXy7X0Nw1v{co?my80rkgLf@(hviNxF;p_8S>>;J(dPuoPE96szoY{`cbk4{juTQ=k z{W%(~$Ra!s4UU`~N=0S={H=aNj&>k>!Ve#=nqc@);bwT9@k%))_QzB&x8o1qzj^@r zczl!AGoKnh0ZNJF^f}<$ATiuu{En^j=I_5%0J@_$C5zszraX1JJhvdit14_VH4`D~ zIk_7nk(P676^bxHNEf~nCEO{ArSuW<#~Lv20V#0jvWJMKtl)KgT{)GpvKOPD{g*YL zOl1kMd6%xkPeLzJ8Ybaj*}-ROP))huXhv&lS?bAhT?@TsgQOJ{s&#&^VWP4{;F9Nv z*yoEng?Z*+oi_#juNl49tF`tcH@)^6Wn_d3&{^;m=Q6w!Je=b~j$M=1x96io07wj-1 z;(kv|qauGIix)CQ493{EA)HJl?>&?MO3J_+@$(q&^OS7<`d=8-&Q7}U97V#({Jd1$ zhW}!`rpU8+4PF~pO&D!_uHFwJ>67LEcv>_T;W9DV-0xP%A`M#)Gwvk{`SM9oCbw@i zDfa*1um(ARYdn30$ER8P#eZHiN#+qF>A}z6W=q>p{hCCje@Xgk*xNU*&m&e%71!-4 z953B+EnDxX)$t1*nfr8eTW2)UcM4%}J{SPc5^P26e$u;eR}vDHC?^NB@OAId1U`Ox zYRrWxY4|lojNR=Y(kbf=zblVDV9j+s-nzuMCAs`ylN#O0efW0L&5660#f6G4xmH|`Z+Ar8tA6Y`A!@r4NEXTt)*J|Z8n>>0 zH1aoYM5`^`Fln`nE4Cu&HO3BV7T->8BTE`xp=0+5`l5S0 zTK9MgxM6L4oT3>U(J771%AGI)Z_l>p_k5r)pzucIE|>f_zuWR-9S4@URsz1D5C*H< z4#sEvmrP;UQ6tx9&%gA1f0Ev{=YeUkPW9PL`jvhAiFG4u6El7mN=rU88S3+Mu~y5u znDUO+s8-k*;fGCMT;R-oSlrNhJtjC|WVdASYq`qSG?LRKW&~sDFULFLu&+lvE&!r# z^>9St4?k+s1-n`myFDtEpnvmc&LBtps-wD&C~-rd{A5VNb-Qy9Y)4-1v015$U<5?P z=x8Ro`&vm1j_&L2XdW*6EjjXvo+$<=PUfGh?+K?2Tk!EuRE1Z@zfiT!@a`NVm1F(Lf#o&YlM_7kPF1et~dW?5;%x{cqjSEUf>$|==7`ZPJCj% zy&Ov_^^B7J$SIHSjMfce?wfvxTu;`um6C%I|G~+)pSr{H-`T+kF9!7GmN;CPW#sA! zQ|TNTS|#}+(ut-9XL`7+n(c=0f;-Kx-i_z~UkW221xqWL7^fL*JW zODs^``fMh~l1Sc#A!Z^SO+h9L9L?{I-HXEtao8hc4;{TsAcqKy*nX1HfS2mV-oQKa zgM(1)mUl6nURT)bCPnOH)ND5z2#E7QhW(jldUD(%ZhBn& zkcEF+tQ+Z4Mkq#HqQ)D=%phD?O8UJ#FBs7Z@AXsA6^e0OJ8g%(p6e0(xE!bzf@&YU2|hzR=To)KleIGwoWW=6url3E zo_u7l#82@ZKE}6)HoIH58@@xEErB(qdCSkaY|FZLNTpwZhG*ZqC?Of{(PXZ3SoiG& zWD0h=OG8ZIHg>HdM2&MLq=R+ueq_NMaI}w8eJ@VWV=ZA+>U3@c= zGMRQhM=k&2;ke=)2Ftne4i4NsDL5)Rn0s>~c4ZSIsgW-VAZ5@DdGn(&!uA{QY%LCD zfbXNEE?-L5B)MCVRPKP8o(pqZN-*A+!Gft)&MnNJ!^M=$&@G|aro476x5n1=)5+fI zk+8bA5?7K_8@kACTwtHOgWz;`<44?{FIQpWfdm_BbIKXHi!3P)_Ai$-$lqVLq_|<- zcgTJOg@pL~4=w2o-Kv=VH>-jV>sG})Bp7>Elgv!KqC3+urN+9?2>x#<0pFsd1YA)c z?#&_75{KVR9wyVqhyUfY@!@}%_TN9uQ9|&he@zMau#OV&n|nAK{D+4LCE&yVk`nOY zIF5{P+UTjo1$*n^a$IdWK73oZbw2;i){)!(zuvw*F3M`}cRkMxFd)zjH-S)x;ZCRs zXlS6LTm|?wVt8Oe9!y7pL0IPf53<5x7K>r`rX&>A|4%mrUgJup2wN@b5FVgNsKbdLZVMc~IC9YxOHAKh=j8mu}M92Kh`V$05>L@ZuKmTxX6 zp{Kfof*sGFdNd3u&Uk71j3D!|s2UFfZk!w@5+5B?1IBvq0J3^OP@%l9jdx1(^O5kjfrD8ioagkIO)j@Kg z;c=h^O^L}m_PI(fCxtzx&>t)^enyb>f3!%4A-2d;(QUt;E|OkA2Mi*_C5pJ^TtZ~E zlsZT1%BdIPqs0g^WjtsI>lqqR>c_%$Lmv)nO0G(JVwWhyH<)xEaYD=VV z*7r&OMb@8U7Fjmly3i*_xznV@WBvyWz;HNqlNmeDP`0v%qmxaI6`NEI&VDDU0w3hp zRlL%OtxB%mD$YJ)njOXDaGNvcfTJ3KwdpI)&{vnatHt1_%R#Qly2m4jYhbl(9JYuN z(;`?!Zg;6*;d8B!+%_$q{?WkRwiRdX!PkIyYmJwfT(+jXJMj6e@jVEz%sO^KD>lh& z@^*9f{&*fNgrKgj?v>fT2x8garfNuFGuPQN63*FVB4PIV%P~#goS~MW`vj z%?+OqeQ?Ewcl>(U=U3U-u+5K%h-91ZK-D}Vh7MGg=jGAXqWiD+ZQfi(ajhjUZx?HI znhZGhxe*ajY|kHs+y5wB%YG*J>3mAcHX|ZWF}eT9d^`UD_uG6Rc)&%81pf%!zDMD9 zvH293Pnk-=V%2%le_TM|*(3i@4naZ-tsuyryR^D{uTo;PNB9KJouB5!(FCmwR;F5M z>$Hj|D~_GWkfMl;K}oAszx7PLjVi#LT+02b!+h0k)bmJUIc*gkC^vC~$Z+F-X!iz# zG{cRg6&qaig#Fj$Xbf@?4MuK9MjMYDvWiz~YY^igx5#Ld3c;&&k{KTevreEp*ZGal z9Y3Tc%_&bhyoaBw%3dH7vfAy)z%jM$VVXNv5jFX#1eCI=Se)KLyk{AdXw$_LkH)$e zqT2kwCKK!aXIniPx31#(th(9{iDk#PNU=mffdNqye<3RS`CYVt+^u!n7V$eW_U(H` z&1>r>jF8-~jFQU@vzN~<8~6q~FQO+S(Yg9M!M%b6t*o8JaLURXxM-*u@sRZ+mNzy& zD5$bbSaz>D>-ofnj*Oh*;+yhgiGD5bIRSqli@STWM`CBH{3Q1SFddbkat&UVO1 z87H`v(B#AJ0lnJhSp?4s=8@<~zt`PBtgZ!-+o)J*;qHR`K-#h^^p=$BZx+7Did4}2 zz1{H!wNmpJmWX*C1^#cUTw$QF6O83~0HlWVAF|f$Ncq562vSpG=aZ-hXyN;F=7fa z;;u!9>bSwPK>?4BCK?tdJjfic7!z_SJ5fRB)sV7(56*l>E$;g8f)y$WPcJ}3K z1xi%dM#`;o#`gSoTo=q)f(O`)xk#C*U5lpMWz-zu(}*{nTJPQ>k7S5eelH79fg4Q8Yv; zJZT1$s7S$WRSInokoQ3p!gaP^%6j*C(O)$tcQJyf*+oP_v%?4lzaK$V!xpuQ*BFRB z&hCsx)Wkr=uo!W=bI;ygD~&)Ux)cpn=OQAZb7G*E9vMhY^|^-zTKCQp4;p@PV#Tp# z^pccPasstK=#qxmNKv9co-T<2QFja!7i02SEjeMu$T}E$#{T5CvsE!h!~Nm zsRQa`F_g(}kZ|8|Wpf4OM)MGMB|URHF0739Q0yy38Ur}&jDsC&A#jvz1- z_vJYPBC+%=!bR#ZcXI`0|7;e#jt>edyi@OgAPbh3T^6Z?+osyEE zTLnkk^GKy#q<5oRpGDhu{}jTW&*48Y10#K^@5*-{+I}RU%nCG%Ngj<6SH2(I_|~gW z?D*XO?#_)HNxUO21y6--BykGd5F}Z>R#}{v4~oYnaqi}-nhrc@&C7IoL%cO+n!Tbn z-Wp;D7yOo#9(DLY1^OrXPbBkwYCrjU?WiBmG+CQB_X3-l6 zaX6}lDQaxkC=xcxa3^# zV$1v#f$WUy%o$Idm36hj#FAbuIndI6yU<#p9wG-LnO8OX6;qgK>7r<1f*!XGF8bINtDKu{w zEU_lSbRnW8ciT6hETkIAH1X^3OFt6-u}xF^-H2!{&{wbbl|#FVgmzUS0C>bhdc#1s z1f$U{iSY2F3#{kPug};ftke@SkH&A<9$vWMbwT>&>ZFAWwg}QMRx57#Z>JYMAsow} zVUWIkNYsK2l^DquXot8sU>4Qru*;!+U2KV=AJQYYm3R+GQAx3>&qqI-B#OQIP|P&sra}$d!MHJmR!9> zH10+sMB~nrP#ZJx^cC()Q97PFx!FpTj&(Moblha(=3yk{6-7zUeB7Ukzr1WRgIrxr zg9C!e#Z4wY9?0$OLeFS^h9z{dbt0p4(GH$rj4rt<-ehN*mV&q4ae)c@mpgwZ&-Av# zU{?Y)q0iuL`{nEt=xkJWC(fQ?VyeCL2E`svxNgT6q4p2C$9D9FZ;Q9(Ie{TO3D5H za^C6gLxyqbXNB9Ay02yi4ZH6kbGqp|irIhR=FF^d3v-ChX?XN`>?n zc9YY(2Z^6Fp?gE|S^t{su(6DoC_G|GGP#1pltj8hjRJm!8@8`pjw@HU znZMK8DRGEMGH`~k>BhGxdDmS;v0rOCCwd?zPulg@{Xe!)==9dF9j$0?eBC7g_t^R6 zZB|va^kVcti*Bb2iUQv_c(bqNjxNdiwMPBXihV8|{B7l}EB=~XSAfm}4UNsaT{6kX zw=7THj6JLygjcS-1Hts!0IZ0;dGJgPy*z0x+4Y7?5FNhND(_A$2P;b!JgCmce9l1&Xwsh|-O-L_qd-yyZ|moZ94$vBaE5wJCMqLv2ba zEaVc;okL2Yhu-1maGE;li3ewBwm(L8%uJ4-Sb*(FbEr+#K@E-a(p+I?6!TAlG4RUq z#++t|#m)Jt8`k(=z&BAG`RVJ|CS1^p{VtlwAy=K}t zvg}tU%6cieeP{sPJ=JBP*nzE+WHK??x~r9lAolNC70(6S5g$VMP?bW(Q%e5JZYu<_;qDpAeM0 zb~CIEy$(M@k>R%1b?7Tqlh&ea+RxvpT~gHIwQh^gUNFFDoQRmSCpS4oqazJCN1AF6 z{{_p&k0fF?e)a`0M4FAy92lBm`_ot&OIm+jjf@U-o5TTvS}aa<-j_bWl9qQpcV9l6 z3&EMn&;w$&#i!Q>e>^@q$pgVkS`wueq)Nj5`01RC3B5|tjosT6w_LMPF#(%tzA6;S z!1)(w>D{d~4Q6`e_nXT5aS=ohB&Bj65mVpGPa%+&Zdhe4p0IQ5r%&jn>Y;KuhP-s0 zW?-ZxL`J1lzK)GY1e9mKfwBOF6AK^ejVcjCs{SADt||b(kYV(tq~%su-89*k{nQnGzgs-6n@AqS>8MAFSgG~3q8f%Vf%)oNGC+$a4@1*-g; z*aIbEk+CQdPu!bU8jC{_8y;~Iw$p}a1YT&x(-$)~>H7S;_wEWa0yv2#Pa6SyBBbWe z|7TcQY+)|N3ZRJys&P0&L5Iyk7-)MvW-fC z>%RG|d5AOvs|GWtj5%2j=7evc1ZYXu;Y$YtIhkeo^JL>WdBWAzNU#p z_cSRLR2!^sZft#Hf(+~Or*cO}Wr}HCsj0(N=~&m$J!Hk3E-}pK#3PRL>7s4t@W*&B zL_?*}0>K1 za-;~E#NY2UdOR1p2)xoHV(C_DXudh6(WnsdhLLUM+jGoL8_zsxC795M$sme8^mX`w z7$5Tc6$8u(A94A}=*HW?9ux0iiNYo>kW`ILzc*duIm8e(Ktxm@d^|%`%Dqjpo31EL zp&53<`;lqWqYlz3l=OX(YqXUz{aMrtbV^a0Q=oLGDvA;JN}C_X2*_cn8nrHCcy6u< zt2&NS`ELO!;oD{Z z#2@a3ymSM_ZH5S3JKPitvIB+jHwj+dC}1MDEa;S?OU;rHZpxEn8^I~D8AeTL1asOpPDs5A>E}CYzytb*4c?%08t}8ZAB+EMO3zxTcDtANXe;s*221II@Td6_Jp7 z1S(rgT#^SRhW@QYmZzs|yGd|(iQh(22->(vkFKX<6Awzf%r`+(oke$rN)1J5tiQQt zSXXUl1V&|h_I^N@dY!w8EMPPkYjfNsDzlRIs0g)fR=8QADWG*V8D}G+4NvVpU1!hV_u_ znvi?=v~U;JTsI|kUfjZ8y9>nZLEuG1VnS+Cg|!fYt^$-q&adS9?=hLz=D&l?Wc@0l z)P@PD=uv61ffg(hh304ka=d%VjL8Z^_`1UtxC$wS`CsK(~E&LWwSA5f5}Mc zzH}I5{@LVK?pcF5s$bDwZ?p|)gAC<3-_o<(;9I6XUSZ^ix^UUKf!3SU0fNR@WFAKX zZ;g@?DRDdYF`Cr4ZYbPUMv%#CY1EQ3LEyWT)vWgM4BCfsMNbF9V;P@~h_acE zHq)59APJQ@2aTYj-d-A8&B}8oAwDOPqwE~1-gm;vArzkI`k{6nZ9m-|Jne6J-FslD zgwf)Cet~8_WFK)j0DT1i(-NVwFlc9_S#VLw$sD;N(R`ET(AO^oA;~UTJgLv}Q+~V= z`s}Kt4*QFdA8m+p{9T1^3A_~LpZg3qxu5sf8!d)*-U&fio9dua1~Pbc zL1Xn6e=Gi$V^wMPr9~O()2B}C`L@-G7ysbI|0U*4dmDfJe^Joez9et<#p8POYDg~A z;O)^KaI_HpzqDtyh=A%2qHgaw78f-E(#s)=2D8;iVuffA8m+9`qTn)N;JGg5d-f=m zgUQa#QL1vQ=+xJT`q!dVNRS)4Inx=hrhO3p7 zb@V#cQ~IAK?M|-arVD)GR;;bgiiFflGpuPRuqV3iba3y^SG&BMM`jNlHt;CgIg-8g zfSi0{M(k+;TNE7Rir?(fKWBwXkvrdSHfvX-DKc@kHssTs^-*a~v05_shv9VG>FLS8 zGIuW%Ts(}vpFj&;lfi$fL!sU_y`;8c-~$pc-s;Ozt-vc$`gEN@ESdsf?6#{pITAx? z7Is#E6)Kt^J#(QEsw1~{l9O|G_tJaF7*dKK=PB0ar=DH&?kfVB)qu2lq0Eq6hcaoGJ2+gK z(@Zr>B(m={x|^0!l6}d=ISu!fN88QbjY4Y{2kv}+U~qoMxD|gzwJ#Z=EoqdTT+43O zCGCWSyTAi9;Rc!A{MqX*F=dW|g|PqXhyKl^Og+oM?MxK}e6d$qyc+Em%t^e;q6pXX zUvf`yB-DX8yuy|DwEMrq`y2GOxNVgPlTxzb?%67l(Qp0>$9}Bgvr)Jx;4}&a?AJ+%8q1^w&}tor}nmDo>R~1QU#nR{+}An&NiVyxYdyulqDN@%doJ(wwq*WjPB{n zQDcXoXxeg;dBG^Rd5`4&qr*F9J-T3TlYPaPST`O~X;Gk1TZv$Y~-lP^4bSGq37;M^IiZ7xk zWRuTcG(KsysmP|Zd&UF{UjBu0yssHBLj0oa!;9V}mV1YD&l}uFq6F?AO6!XaQg?I0 z`HvQ8Zrdn2T0`wU9fCfCi)vIEvB$u{D{4KfyN$&C^9p*J8mSq!nGi|QH-T`Z$TQE6 zDhra!o+m|JEffCC@1Rv))m{cItMVEu?eqk`$YoNVBZ6A#Q~Ub%%N=;~fBkPqh_G;% z!D~Qo_w}gtZLX07_nE(nxf|8c!5@%+_o*%4r^=MR6ChvMWbittCnQ$h9Q%|a5)1Kd ziJi=T5u6fKHT@;q*SM)=KK8xRtk}Q`rMW|Svz-!)mCuh6;4^zC%j#3=M%&-!t*nn; zWH|g_*MeDv*302WYuVd!FyQ2C29#6_Qf)t)bHM7&JwE$eqyHove$Z{F+R%_)G7hEK z{F^+O23f1nRHslC63Pl?^h^=(^`PuP<8bG1}6}oG|s0FQK&N31fmhSBen_gtSssD@7?>dy@UXH-M`GzB_`y{*4;<42G2oe#xPe)cI$ADR&`E1P%MYvb@G;Aj)F zXe8XL3wC@Kd(v?k7k&uR>?Hq-^u4yuaWjqyM^@L9`_Ti(^nB}fUa@gbkB3q9r7oOG z)2E*rK0okx{S)KI*?uS-Sy>>v|I*d9lTe1Hww{~x#OLp8xb9PhvInJ1 zg0LALmu}HjFoo;>`O>Ejtap2+15x@{mzShW z^K6JxjXm+ITBt;|?$$U?cj}7K#kw(pt0^y4x~N+dxN55$wTrAc65Pe49&R5cmh0ux z%nY{`S_?VwGxwp2o^qg8^Jg(;nX zem>U5eL-*~i%1-DLS=|h_%zLIrUaqO_fSgexgif9XaXR;xwZwcA&{>GB8Db_lqE{- zv5t#qX~M*Wh@^-Lxd0ae)i>t}(tjAqR%p0z_TK1U0rC3NFR~d2wIsTn7JJ6YY<}@+ z7aO05*yCR){ob(l4$cr7Uk+-hJlXT-FJgw*HBM~*=X#a~t`Bs!xw&ykU~4FMuMpR) zPdLSt;nI3@$^R;MChizY7vpJX`3zO&bX)cgTb6V$N3XAWtg6#Q9>qi&dY5}IY>zMy zO9PZ=_(SI^0pe_v&6%+>fFEUMs5zH!H+CP<^TB6-tj!b5vW|QY31@X;_2DPr87^1r zNuQ(6mZuH@*u*Q<&MzND9*dDkje#Tr>JJ^z&f5H)u>qGDI2Sar%lQ-G7GdDOY1zOV z;Q+zFUlSQ^ZgyyCIBP=KPf$&lD)=SG3BQ!*rn-wc&1`>f=}~|_DjgO6z9MwXry~_$ zz4@G|l=#&74Ft!bp(g~p&;k7qsgg~5jPl`PoS`aq)YIO)DnqJ3PlZ7MYrb@^TG+F9Wdl?OOqXm}h)zaghfWgqt@G2SL=|pa-g6yae7M?J8jVSHzbXcyxE5-0JF`)9~@VQwgEGgPHSe1O1if5R{Cqk*OQQu_vajs^_i__aL9&|y>sBN7fAGjtt)pvGz$OI|B$+=lQ&26hW z&$~CD&Y$HRU(8q4e4P{6P?=k#6~37^-ny6GIz$yA(nm(3ic#qw65S?zW;_VUT0b(@ zWZMVGl+=35? zbftWpZ7XRzv3$*D6YSL7kBeC?!D*NmN&KaKY&k5-btxY74BVU8l@djVOZulkNt zB|d3hf;wtESAcAq=K~F(PZ%yC#x@OHwqm3I!xl8-9}aC zfS){qpFENE-ULV{qZ0X=EBo7t3XR(aj_R%b*Ymh(4VZO+x0N2r&ybane=qE~rNmEC zxT&b};#>U2eYgrp#I|q18Vjlv;(*pB-bT$4?AHU;)GDrY=Y`=4yDx4UbsIkE42^KJEAs21}PA z_DGi&eqP7vvAJOm&_@+j4z*2zB;;qy@bHwN2NF|@k*5&(VyOscPKz3QJB>p%e21QQ z?}3ss>2tF=l+cRA?juV0wX;J!oIxwJ1qoGaS%LU{P-~O)=6Me2pZsgd_`kwKs~x$U z=H+?MPxPL_N?b_PUV_%nptjWdN;{nS3|lT>38|YREJWA1Eqc2?Vwo+I77(6k-HgdF vt-HVhPgFh!KOPSrqY83Wl&tAMQoD!y9_Nph^bu diff --git a/software/CPM/CPM25_PLI80_v14/RECORD.DCL b/software/CPM/CPM25_PLI80_v14/RECORD.DCL deleted file mode 100644 index 3a22c82..0000000 --- a/software/CPM/CPM25_PLI80_v14/RECORD.DCL +++ /dev/null @@ -1,9 +0,0 @@ - dcl - 1 record, - 2 name character(30) varying, - 2 addr character(30) varying, - 2 city character(20) varying, - 2 state character(10) varying, - 2 zip fixed decimal(6), - 2 phone character(12) varying; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/RELNOTES.PRN b/software/CPM/CPM25_PLI80_v14/RELNOTES.PRN deleted file mode 100644 index 8d1c831fd97df5a160d925c574adf13596841e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34688 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 diff --git a/software/CPM/CPM25_PLI80_v14/REPORT.PLI b/software/CPM/CPM25_PLI80_v14/REPORT.PLI deleted file mode 100644 index 6a440cc..0000000 --- a/software/CPM/CPM25_PLI80_v14/REPORT.PLI +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************/ -/* This program reads an employee data base and */ -/* prints a list of paychecks. */ -/******************************************************/ -report: - procedure options(main); - declare - 1 employee static, - 2 name character(30) varying, - 2 address, - 3 street character(30) varying, - 3 city character(10) varying, - 3 state character(12) varying, - 3 zip fixed decimal(5), - 2 age fixed decimal(3), - 2 wage fixed decimal(5,2), - 2 hours fixed decimal(5,1); - - declare - i fixed, - dashes character(15) static initial - ('$--------------'), - buff character(20) varying, - (grosspay, withhold) fixed decimal(7,2), - (repfile, empfile) file; - - open file(empfile) keyed environment(f(128),b(4000)) - title ('$1.EMP'); - open file(repfile) stream print environment(b(2000)) - title('$2.$2'); - - put list('Set Top of Forms, Press Return'); - get skip; - - do while('1'b); - read file(empfile) into(employee); - if name = 'EOF' then - stop; - put file(repfile) skip(2); - buff = '[' !! name !! ']^m^j'; - write file(repfile) from (buff); - grosspay = wage * hours; - withhold = grosspay * .15; - buff = grosspay - withhold; - do i = 1 to 15 - while (substr(buff,i,1) = ' '); - end; - i = i - 1; - substr(buff,1,i) = substr(dashes,1,i); - write file (repfile) from(buff); - end; - -end report; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/RETRIEVE.PLI b/software/CPM/CPM25_PLI80_v14/RETRIEVE.PLI deleted file mode 100644 index b2669c0..0000000 --- a/software/CPM/CPM25_PLI80_v14/RETRIEVE.PLI +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************/ -/* This program reads a name and address data file */ -/* and displays the information on request. */ -/******************************************************/ -retrieve: - procedure options(main); - -%include 'record.dcl'; -%replace - true by '1'b, - false by '0'b; - - declare - (sysprint, input) file, - filename character(14) varying, - (lower, upper) character(30) varying, - eofile bit(1); - - open file(sysprint) print title('$con'); - put list('Name and Address Retrieval, File Name: '); - get list(filename); - - do while(true); - lower = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; - upper = 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - put skip(2) list('Type Lower, Upper Bounds: '); - get list(lower,upper); - if lower = 'EOF' then - stop; - - open file(input) stream input environment(b(1024)) - title(filename); - eofile = false; - do while (^eofile); - get file(input) list(name); - eofile = (name = 'EOF'); - if ^eofile then - do; - get file(input) - list(addr,city,state,zip,phone); - if name >= lower & name <= upper then - do; - put page skip(3)list(name); - put skip list(addr); - put skip list(city,state); - put skip list(zip); - put skip list(phone); - end; - end; - end; - close file(input); - end; - -end retrieve; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/REVERSE.PLI b/software/CPM/CPM25_PLI80_v14/REVERSE.PLI deleted file mode 100644 index 9d9de6e..0000000 --- a/software/CPM/CPM25_PLI80_v14/REVERSE.PLI +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************/ -/* This program reads a sentence and reverses it. */ -/******************************************************/ -reverse: - procedure options(main); - declare - sentence pointer, - 1 wordnode based (sentence), - 2 word character(30) varying, - 2 next pointer; - - do while('1'b); - call read_it(); - if sentence = null then - stop; - call write_it(); - end; - - read_it: - procedure; - declare - newword character(30) varying, - newnode pointer; - sentence = null; - put skip list('What''s up? '); - do while('1'b); - get list(newword); - if newword = '.' then - return; - allocate wordnode set (newnode); - newnode->next = sentence; - sentence = newnode; - word = newword; - end; - end read_it; - - write_it: - procedure; - declare - p pointer; - put skip list('Actually, '); - do while (sentence ^= null); - put list(word); - p = sentence; - sentence = next; - free p->wordnode; - end; - put list('.'); - put skip; - end write_it; - -end reverse; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/REVERT.PLI b/software/CPM/CPM25_PLI80_v14/REVERT.PLI deleted file mode 100644 index 211d912..0000000 --- a/software/CPM/CPM25_PLI80_v14/REVERT.PLI +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************/ -/* This program is nonfunctional. Its purpose is to */ -/* illustrate how PL/I executes the ON and REVERT */ -/* statements. */ -/******************************************************/ -auto_revert: - procedure options(main); - declare - i fixed, - sysin file; - - do i = 1 to 10000; - call p(i,exit); - exit: - end; - - P: - procedure (index,lab); - declare - (t, index) fixed, - lab label; - - on endfile(sysin) - goto lab; - - put skip list(index,':'); - get list(t); - if t = index then - goto lab; - end P; /* implicit REVERT supplied here */ - -end auto_revert; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/RFACT.PLI b/software/CPM/CPM25_PLI80_v14/RFACT.PLI deleted file mode 100644 index c9b8fc5..0000000 --- a/software/CPM/CPM25_PLI80_v14/RFACT.PLI +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************/ -/* This program evaluates the Factorial function (n!) */ -/* using recursion. */ -/******************************************************/ -rfact: - procedure options(main); - declare - i fixed; - do i = 0 repeat(i+1); - put skip list('factorial(',i,')=',factorial(i)); - end; - stop; - - factorial: - procedure(i) returns(fixed) recursive; - declare - i fixed; - if i = 0 then return (1); - return (i * factorial(i-1)); - end factorial; - -end rfact; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/RMAC.COM b/software/CPM/CPM25_PLI80_v14/RMAC.COM deleted file mode 100644 index 87b62da2281aded57743a4ddf8517861880ad474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13568 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 Q7YF`29Kadu|Jm<<0}ruEFaQ7m diff --git a/software/CPM/CPM25_PLI80_v14/SAMPLE.PLI b/software/CPM/CPM25_PLI80_v14/SAMPLE.PLI deleted file mode 100644 index 2c9a5c1..0000000 --- a/software/CPM/CPM25_PLI80_v14/SAMPLE.PLI +++ /dev/null @@ -1,41 +0,0 @@ -sample: - procedure options(main); - declare - c character(10) varying, - i fixed binary(15); - - do; - put skip list('Input: '); - get list(c); - c = upper(c); /* function reference */ - put skip list('Output: ',c); - end; - - begin; - declare - c float binary(24); - - put skip list('Input: '); - get list(c); - call output(c); /* subroutine invocation */ - end; - - upper: - procedure(c) returns(character(10) varying); - declare - c character(10) varying; - - return(translate(c,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz')); - end upper; - - output: - procedure(c); - declare - c float binary(24); - - put skip edit(c) (column(20),e(10,2)); - end output; - -end sample; - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/TEST.PLI b/software/CPM/CPM25_PLI80_v14/TEST.PLI deleted file mode 100644 index 7df6c39..0000000 --- a/software/CPM/CPM25_PLI80_v14/TEST.PLI +++ /dev/null @@ -1,35 +0,0 @@ -/***************************************************/ -/* This program computes the largest of three */ -/* FLOAT BINARY numbers x, y, and z */ -/***************************************************/ -test: - procedure options(main); - declare - (a,b,c) float binary; - - put list ('Type Three Numbers: '); - get list (a,b,c); - put list ('The Largest Value is',max3(a,b,c)); - - /* this procedure computes the largest of x, y, and z */ - max3: - procedure(x,y,z) returns(float binary); - declare - (x,y,z,max) float binary; - - if x > y then - if x > z then - max = x; - else - max = z; - else - if y > z then - max = y; - else - max = z; - return(max); - end max3; - -end test; - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/UPDATE.PLI b/software/CPM/CPM25_PLI80_v14/UPDATE.PLI deleted file mode 100644 index 7ce9729..0000000 --- a/software/CPM/CPM25_PLI80_v14/UPDATE.PLI +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************/ -/* This program allows you to retrieve and update */ -/* individual records in an employee data base using */ -/* a keyed file. */ -/******************************************************/ -update: - procedure options(main); - declare - 1 employee static, - 2 name character(30) varying, - 2 address, - 3 street character(30) varying, - 3 city character(10) varying, - 3 state character(12) varying, - 3 zip fixed decimal(5), - 2 age fixed decimal(3), - 2 wage fixed decimal(5,2), - 2 hours fixed decimal(5,1); - - declare - 1 keylist (100), - 2 keyname character(30) varying, - 2 keyval fixed binary; - - declare - (i, endlist) fixed, - eolist bit(1) static initial('0'b), - matchname character(30) varying, - (emp, keys) file; - - open file(emp) update direct environment(f(128)) - title ('$1.EMP'); - - open file(keys) stream environment(b(4000)) - title('$1.key'); - - do i = 1 to 100 while(^eolist); - get file(keys) list(keyname(i),keyval(i)); - eolist = keyname(i) = 'EOF'; - end; - - do while('1'b); - put skip list('Employee: '); - get list(matchname); - if matchname = 'EOF' then - stop; - do i = 1 to 100; - if matchname = keyname(i) then - do; - read file(emp) into(employee) - key(keyval(i)); - put skip list('Address: ', - street, city, state, zip); - put skip list(' '); - get list(street, city, state, zip); - put list('Hours:',hours,': '); - get list(hours); - write file(emp) from (employee) - keyfrom(keyval(i)); - end; - end; - end; - -end update; - - - \ No newline at end of file diff --git a/software/CPM/CPM25_PLI80_v14/XREF.COM b/software/CPM/CPM25_PLI80_v14/XREF.COM deleted file mode 100644 index 32c57ae09843237801c3a0b216105e726b2b5571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15488 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 HU&sAB;QJ6q diff --git a/software/CPM/CPM25_PLI80_v14/Z80.LIB b/software/CPM/CPM25_PLI80_v14/Z80.LIB deleted file mode 100644 index 4f29a00..0000000 --- a/software/CPM/CPM25_PLI80_v14/Z80.LIB +++ /dev/null @@ -1,457 +0,0 @@ -; @CHK MACRO USED FOR CHECKING 8 BIT DISPLACMENTS -; -@CHK MACRO ?DD ;; USED FOR CHECKING RANGE OF 8-BIT DISP.S - IF (?DD GT 7FH) AND (?DD LT 0FF80H) - 'DISPLACEMENT RANGE ERROR - Z80 LIB' - ENDIF - ENDM -LDX MACRO ?R,?D - @CHK ?D - DB 0DDH,?R*8+46H,?D - ENDM -LDY MACRO ?R,?D - @CHK ?D - DB 0FDH,?R*8+46H,?D - ENDM -STX MACRO ?R,?D - @CHK ?D - DB 0DDH,70H+?R,?D - ENDM -STY MACRO ?R,?D - @CHK ?D - DB 0FDH,70H+?R,?D - ENDM -MVIX MACRO ?N,?D - @CHK ?D - DB 0DDH,36H,?D,?N - ENDM -MVIY MACRO ?N,?D - @CHK ?D - DB 0FDH,36H,?D,?N - ENDM -LDAI MACRO - DB 0EDH,57H - ENDM -LDAR MACRO - DB 0EDH,5FH - ENDM -STAI MACRO - DB 0EDH,47H - ENDM -STAR MACRO - DB 0EDH,4FH - ENDM - -LXIX MACRO ?NNNN - DB 0DDH,21H - DW ?NNNN - ENDM -LXIY MACRO ?NNNN - DB 0FDH,21H - DW ?NNNN - ENDM -LDED MACRO ?NNNN - DB 0EDH,5BH - DW ?NNNN - ENDM -LBCD MACRO ?NNNN - DB 0EDH,4BH - DW ?NNNN - ENDM -LSPD MACRO ?NNNN - DB 0EDH,07BH - DW ?NNNN - ENDM -LIXD MACRO ?NNNN - DB 0DDH,2AH - DW ?NNNN - ENDM -LIYD MACRO ?NNNN - DB 0FDH,2AH - DW ?NNNN - ENDM -SBCD MACRO ?NNNN - DB 0EDH,43H - DW ?NNNN - ENDM -SDED MACRO ?NNNN - DB 0EDH,53H - DW ?NNNN - ENDM -SSPD MACRO ?NNNN - DB 0EDH,73H - DW ?NNNN - ENDM -SIXD MACRO ?NNNN - DB 0DDH,22H - DW ?NNNN - ENDM -SIYD MACRO ?NNNN - DB 0FDH,22H - DW ?NNNN - ENDM -SPIX MACRO - DB 0DDH,0F9H - ENDM -SPIY MACRO - DB 0FDH,0F9H - ENDM -PUSHIX MACRO - DB 0DDH,0E5H - ENDM -PUSHIY MACRO - DB 0FDH,0E5H - ENDM -POPIX MACRO - DB 0DDH,0E1H - ENDM -POPIY MACRO - DB 0FDH,0E1H - ENDM -EXAF MACRO - DB 08H - ENDM -EXX MACRO - DB 0D9H - ENDM -XTIX MACRO - DB 0DDH,0E3H - ENDM -XTIY MACRO - DB 0FDH,0E3H - ENDM - -LDI MACRO - DB 0EDH,0A0H - ENDM -LDIR MACRO - DB 0EDH,0B0H - ENDM -LDD MACRO - DB 0EDH,0A8H - ENDM -LDDR MACRO - DB 0EDH,0B8H - ENDM -CCI MACRO - DB 0EDH,0A1H - ENDM -CCIR MACRO - DB 0EDH,0B1H - ENDM -CCD MACRO - DB 0EDH,0A9H - ENDM -CCDR MACRO - DB 0EDH,0B9H - ENDM - -ADDX MACRO ?D - @CHK ?D - DB 0DDH,86H,?D - ENDM -ADDY MACRO ?D - @CHK ?D - DB 0FDH,86H,?D - ENDM -ADCX MACRO ?D - @CHK ?D - DB 0DDH,8EH,?D - ENDM -ADCY MACRO ?D - @CHK ?D - DB 0FDH,8EH,?D - ENDM -SUBX MACRO ?D - @CHK ?D - DB 0DDH,96H,?D - ENDM -SUBY MACRO ?D - @CHK ?D - DB 0FDH,96H,?D - ENDM -SBCX MACRO ?D - @CHK ?D - DB 0DDH,9EH,?D - ENDM -SBCY MACRO ?D - @CHK ?D - DB 0FDH,9EH,?D - ENDM -ANDX MACRO ?D - @CHK ?D - DB 0DDH,0A6H,?D - ENDM -ANDY MACRO ?D - @CHK ?D - DB 0FDH,0A6H,?D - ENDM -XORX MACRO ?D - @CHK ?D - DB 0DDH,0AEH,?D - ENDM -XORY MACRO ?D - @CHK ?D - DB 0FDH,0AEH,?D - ENDM -ORX MACRO ?D - @CHK ?D - DB 0DDH,0B6H,?D - ENDM -ORY MACRO ?D - @CHK ?D - DB 0FDH,0B6H,?D - ENDM -CMPX MACRO ?D - @CHK ?D - DB 0DDH,0BEH,?D - ENDM -CMPY MACRO ?D - @CHK ?D - DB 0FDH,0BEH,?D - ENDM -INRX MACRO ?D - @CHK ?D - DB 0DDH,34H,?D - ENDM -INRY MACRO ?D - @CHK ?D - DB 0FDH,34H,?D - ENDM -DCRX MACRO ?D - @CHK ?D - DB 0DDH,035H,?D - ENDM -DCRY MACRO ?D - @CHK ?D - DB 0FDH,35H,?D - ENDM - -NEG MACRO - DB 0EDH,44H - ENDM -IM0 MACRO - DB 0EDH,46H - ENDM -IM1 MACRO - DB 0EDH,56H - ENDM -IM2 MACRO - DB 0EDH,5EH - ENDM - - -BC EQU 0 -DE EQU 2 -HL EQU 4 -IX EQU 4 -IY EQU 4 -DADC MACRO ?R - DB 0EDH,?R*8+4AH - ENDM -DSBC MACRO ?R - DB 0EDH,?R*8+42H - ENDM -DADX MACRO ?R - DB 0DDH,?R*8+09H - ENDM -DADY MACRO ?R - DB 0FDH,?R*8+09H - ENDM -INXIX MACRO - DB 0DDH,23H - ENDM -INXIY MACRO - DB 0FDH,23H - ENDM -DCXIX MACRO - DB 0DDH,2BH - ENDM -DCXIY MACRO - DB 0FDH,2BH - ENDM - -BIT MACRO ?N,?R - DB 0CBH,?N*8+?R+40H - ENDM -SETB MACRO ?N,?R - DB 0CBH,?N*8+?R+0C0H - ENDM -RES MACRO ?N,?R - DB 0CBH,?N*8+?R+80H - ENDM - -BITX MACRO ?N,?D - @CHK ?D - DB 0DDH,0CBH,?D,?N*8+46H - ENDM -BITY MACRO ?N,?D - @CHK ?D - DB 0FDH,0CBH,?D,?N*8+46H - ENDM -SETX MACRO ?N,?D - @CHK ?D - DB 0DDH,0CBH,?D,?N*8+0C6H - ENDM -SETY MACRO ?N,?D - @CHK ?D - DB 0FDH,0CBH,?D,?N*8+0C6H - ENDM -RESX MACRO ?N,?D - @CHK ?D - DB 0DDH,0CBH,?D,?N*8+86H - ENDM -RESY MACRO ?N,?D - @CHK ?D - DB 0FDH,0CBH,?D,?N*8+86H - ENDM - -JR MACRO ?N - DB 18H,?N-$-1 - ENDM -JRC MACRO ?N - DB 38H,?N-$-1 - ENDM -JRNC MACRO ?N - DB 30H,?N-$-1 - ENDM -JRZ MACRO ?N - DB 28H,?N-$-1 - ENDM -JRNZ MACRO ?N - DB 20H,?N-$-1 - ENDM -DJNZ MACRO ?N - DB 10H,?N-$-1 - ENDM - -PCIX MACRO - DB 0DDH,0E9H - ENDM -PCIY MACRO - DB 0FDH,0E9H - ENDM - -RETI MACRO - DB 0EDH,4DH - ENDM -RETN MACRO - DB 0EDH,45H - ENDM - -INP MACRO ?R - DB 0EDH,?R*8+40H - ENDM -OUTP MACRO ?R - DB 0EDH,?R*8+41H - ENDM -INI MACRO - DB 0EDH,0A2H - ENDM -INIR MACRO - DB 0EDH,0B2H - ENDM -IND MACRO - DB 0EDH,0AAH - ENDM -INDR MACRO - DB 0EDH,0BAH - ENDM -OUTI MACRO - DB 0EDH,0A3H - ENDM -OUTIR MACRO - DB 0EDH,0B3H - ENDM -OUTD MACRO - DB 0EDH,0ABH - ENDM -OUTDR MACRO - DB 0EDH,0BBH - ENDM - - -RLCR MACRO ?R - DB 0CBH, 00H + ?R - ENDM -RLCX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 06H - ENDM -RLCY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 06H - ENDM -RALR MACRO ?R - DB 0CBH, 10H+?R - ENDM -RALX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 16H - ENDM -RALY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 16H - ENDM -RRCR MACRO ?R - DB 0CBH, 08H + ?R - ENDM -RRCX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 0EH - ENDM -RRCY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 0EH - ENDM -RARR MACRO ?R - DB 0CBH, 18H + ?R - ENDM -RARX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 1EH - ENDM -RARY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 1EH - ENDM -SLAR MACRO ?R - DB 0CBH, 20H + ?R - ENDM -SLAX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 26H - ENDM -SLAY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 26H - ENDM -SRAR MACRO ?R - DB 0CBH, 28H+?R - ENDM -SRAX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 2EH - ENDM -SRAY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 2EH - ENDM -SRLR MACRO ?R - DB 0CBH, 38H + ?R - ENDM -SRLX MACRO ?D - @CHK ?D - DB 0DDH, 0CBH, ?D, 3EH - ENDM -SRLY MACRO ?D - @CHK ?D - DB 0FDH, 0CBH, ?D, 3EH - ENDM -RLD MACRO - DB 0EDH, 6FH - ENDM -RRD MACRO - DB 0EDH, 67H - ENDM - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/cmdlin.pas b/software/CPM/CPM26_TPASCAL_v300a/cmdlin.pas deleted file mode 100644 index f9ef0df80dfc3c2d43ed86c0ee9ae25bfe94c271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmc&yyH3L}6lIQ-ALw-0sD!ElTM7NEwba4Kv>(!Ld$w~w z#b&9@d>vvs=(O^t;1M7;ISMLIRMnw@CnMAwrrOjz#^pIyUrU^1;RJZn z22z#UG{U;Z#YVT?aC<`8s@xs!ud%C1@QI<4JK|oxbZh?T_a)wq#z@@_QaK?KsulIf z_kNtA@4btTAu(Y?OBEUZ8@{)pN-8JC8NlEJZk)l=J?>1m%A(M{(}$6kYIW5?{H9lO RIAjS@1)B^mcn$v9{}*%^*t-A# diff --git a/software/CPM/CPM26_TPASCAL_v300a/lister.pas b/software/CPM/CPM26_TPASCAL_v300a/lister.pas deleted file mode 100644 index 47bc609dc92e67be0ca54723b86256e7fd76bab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmc&&TTk0q5Z-4b{y?8*yOolZfEu9HD!oW)2;E3Pq9n8rhzH}G5UY+I`BIie{qOtD zoQsb`N>|#I7FuNcoSFINn>jOMue0E}=Oz32AKDwCBCcW8kbV1|E=+mTkPV`x2d6Xv9Ie7J|$0{H`TShtIUqE@ZTE~jk z#$J(93}bW;yEMC;d>qlZH|_V%C>JDlV}8JzMAvvaxI7tAe{?dC`_2K;X_U-q9OPjT zTfs#HGf;n{#Dbd3=0j{ACQ%Uuar9RO<6DqL!A-1k*>r?WqqRzC6-0@zPgakyI?mEi zSYThsADfX!Kn zi_lP{(nV8(z$CXMApv;ES$Emzw3~`;PJw>9T64%5a8@Q_)@E6mN6D=`krX@VkIvZ{ z-k)haoENjZlV2@qg#*q!@uC0DfBNvMu$eXv zZq=7)UM%T7{r<|Gm@y~anM!VD;q~ikAt;vSIV9dx3#VzeI#p_pr@wU$-G0=tB0@2l z1vgIJk)$6-)uQ;4W?!cTY~Dg#UtDz#-&{L2r*PtegI%qU9TMKQyYo57th#=gP0~B+ za=lQuQh#+A&T)>dsxE4sR_d(Sh=BM#{JR8{c#tEkzKlatpS>1 zH!m~gRZg*Tqi&-_tGC$SlZ{3gXL-mygnckrsQaE84=);fjbY<0(F59zjdvI%C@JU! zQIV^7@hc(dmE>V188vD;k7T9!(kS(Xj=d!#rBECmB3J*vLlsM$mPyFRMyh@j&43o` zu8=8bRddeS*y_?vn#L;7RoWw%K(p;?D9B?jGjQ-)paNjtRsazFU_m=j|5=!=P zg!M8m=-mf;#g)qNiuUC=Hcbf}o(3qf#spCqr@8Vp6TH;s6}IWCN_Li&T2#2uea`YA zZA~K0?T_k-oL1!FsLuVg48x|rwLyq5ibyebx?1!B z!LqfR)0}>$!K_2hEACH4j2&*( zmue{HBZzS7lgQkDlrhjJ*6c#baJ6Wt=eA+e{M?%`O`Eak(nqfrK@`1&`pd6<44z#X zKb@mk4AZz=CG~{DV=tDtGtyEx_idqd!u)uh=1tpKG^UDTLcq0|M`a8;faojF#H>Y2 zUg^zyN7uGUkzcVkuvr&ae(X>jwI89NpWt``$#I2*>R2|J5{HD+I-bLAcz%xP2}~Y4 zY_!G@Kd48LpKNF9cssIxg6#=(HO7F>)m_0+yRF?IRcx|hhQ7i`&~EHEuBG*1&XBj8 zVZz)>vvUa|FBi3S*U(@QCNNc0%lc#*;i|it!)x~ODU~yZ`^_^}olCCA+%Bd?kQHsY z9B>cV9M*us)4MT~)fZV^HCt4sydr?khTgsf*hcXXwjbw$1I$G7(QUjKHriTUYp{ljQ^p1xDJM%vhM0d1OK7MHV5&Cha=GIbe zj|7PQ3)A(z@j*sFohMdi-?_inX?Y41C#>kOO$2_)iN^3~draiL!JCm0yAUe=1YlnW z7=xcJY{U_UA&5EV@q;m1InD%o%>Y~eG2Tb@PmkuF^15@D z44nmAKEK$c*vtqHy2%7@_A~0-+$v)Wznvb)ubaK=Y^{PQSwLS!RgES7ngxRF#JrUq z6m#PvrWKFAdOA4*JwE*1Ho6-f?&&N6b;fPYwZ&=!6>n{W$nEykIER hXF@Shdm}QKSPqMWixYfWdG^b{_<5#mtNMTJ{|!x){cQjM diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc-mod00.inc b/software/CPM/CPM26_TPASCAL_v300a/mc-mod00.inc deleted file mode 100644 index 405a57e..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc-mod00.inc +++ /dev/null @@ -1,43 +0,0 @@ -{.PA} -{*******************************************************************} -{* SOURCE CODE MODULE: MC-MOD00 *} -{* PURPOSE: Micellaneous utilities an commands. *} -{*******************************************************************} - - -procedure Msg(S: AnyString); -begin - GotoXY(1,24); - ClrEol; - Write(S); -end; - -procedure Flash(X: integer; S: AnyString; Blink: boolean); -begin - HighVideo; - GotoXY(X,23); - Write(S); - if Blink then - begin - repeat - GotoXY(X,23); - Blink:=not Blink; if Blink then HighVideo else LowVideo; - Write(S); - Delay(175); - until KeyPressed; - end; - LowVideo; -end; - -procedure Auto; -begin - AutoCalc:=not AutoCalc; - if AutoCalc then Flash(65,'AutoCalc: ON ',false) - else Flash(65,'AutoCalc: OFF',false); -end; - -then Flash(65,'AutoCalc: ON ',false) - else Flash(65,'AutoCalc: OFF',false); -end; - - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc-mod01.inc b/software/CPM/CPM26_TPASCAL_v300a/mc-mod01.inc deleted file mode 100644 index 0b24989..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc-mod01.inc +++ /dev/null @@ -1,74 +0,0 @@ -{.PA} - -{*******************************************************************} -{* SOURCE CODE MODULE: MC-MOD01 *} -{* PURPOSE: Display grid and initialize all cells *} -{* in the spread sheet. *} -{*******************************************************************} - - - -procedure Grid; -var I: integer; - Count: Char; -begin - HighVideo; - For Count:='A' to FXMax do - begin - GotoXY(XPos[Count],1); - Write(Count); - end; - GotoXY(1,2); - for I:=1 to FYMax do writeln(I:2); - LowVideo; - if AutoCalc then Flash(65,'AutoCalc: ON' ,false) - else Flash(65,'AutoCalc: OFF',false); - Flash(33,' Type / for Commands',false); -end; - - -procedure Init; -var - I: ScreenIndex; - J: Integer; - LastName: string[2]; -begin - for I:='A' to FXMAX do - begin - for J:=1 to FYMAX do - begin - with Screen[I,J] do - begin - CellStatus:=[Txt]; - Contents:=''; - Value:=0; - DEC:=2; { Default number of decimals } - FW:=10; { Default field whith } - end; - end; - end; - AutoCalc:=True; - FX:='A'; FY:=1; { First field in upper left corner } -end; - -procedure Clear; -begin - HighVideo; - GotoXY(1,24); ClrEol; - Write('Clear this worksheet? (Y/N) '); - repeat Read(Kbd,Ch) until Upcase(Ch) in ['Y','N']; - Write(Upcase(Ch)); - if UpCase(Ch)='Y' then - begin - ClrScr; - Init; - Grid; - end; -end; - - -nd; -end; - - - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc-mod02.inc b/software/CPM/CPM26_TPASCAL_v300a/mc-mod02.inc deleted file mode 100644 index e6a1881..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc-mod02.inc +++ /dev/null @@ -1,150 +0,0 @@ -{.PA} -{*******************************************************************} -{* SOURCE CODE MODULE: MC-MOD02 *} -{* PURPOSE: Display values in cells and move between *} -{* cells in the spread sheet. *} -{*******************************************************************} - - -procedure FlashType; -begin - with Screen[FX,FY] do - begin - GotoXY(1,23); - Write(FX,FY:2,' '); - if Formula in CellStatus then write('Formula:') else - if Constant in CellStatus then Write('Numeric ') else - if Txt in CellStatus then Write('Text '); - GotoXY(1,24); ClrEol; - if Formula in CellStatus then Write(Contents); - end; -end; - - -{ The following procedures move between the Cells on the calc sheet.} -{ Each Cell has an associated record containing its X,Y coordinates } -{ and data. See the type definition for "Cell". } - -procedure GotoCell(GX: ScreenIndex; GY: integer); -begin - with Screen[GX,GY] do - begin - HighVideo; - GotoXY(XPos[GX],GY+1); - Write(' '); - GotoXY(XPos[GX],GY+1); - if Txt in CellStatus then Write(Contents) - else - begin - if DEC>=0 then Write(Value:FW:DEC) - else Write(Value:FW); - end; - FlashType; - GotoXY(XPos[GX],GY+1); - end; - LowVideo; -end; - -{.CP20} - -procedure LeaveCell(FX:ScreenIndex;FY: integer); -begin - with Screen[FX,FY] do - begin - GotoXY(XPos[FX],FY+1); - LowVideo; - if Txt in CellStatus then Write(Contents) - else - begin - if DEC>=0 then Write(Value:FW:DEC) - else Write(Value:FW); - end; - end; -end; - - -{.CP20} - -procedure Update; -var - UFX: ScreenIndex; - UFY: integer; -begin - ClrScr; - Grid; - for UFX:='A' to FXMax do for UFY:=1 to FYMax do - if Screen[UFX,UFY].Contents<>'' then LeaveCell(UFX,UFY); - GotoCell(FX,FY); -end; - -{.CP20} - -procedure MoveDown; -var Start: integer; -begin - LeaveCell(FX,FY); - Start:=FY; - repeat - FY:=FY+1; - if FY>FYMax then FY:=1; - until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FY=Start); - if FY<>Start then GotoCell(FX,FY); -end; - -{.CP20} - -procedure MoveUp; -var Start: integer; -begin - LeaveCell(FX,FY); - Start:=FY; - repeat - FY:=FY-1; - if FY<1 then FY:=FYMax; - until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FY=Start); - if FY<>Start then GotoCell(FX,FY); -end; - -{.CP20} - -procedure MoveRight; -var Start: ScreenIndex; -begin - LeaveCell(FX,FY); - Start:=FX; - repeat - FX:=Succ(FX); - if FX>FXMax then - begin - FX:='A'; - FY:=FY+1; - if FY>FYMax then FY:=1; - end; - until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FX=Start); - if FX<>Start then GotoCell(FX,FY); -end; - -{.CP20} - -procedure MoveLeft; -var Start: ScreenIndex; -begin - LeaveCell(FX,FY); - Start:=FX; - repeat - FX:=Pred(FX); - if FX<'A' then - begin - FX:=FXMax; - FY:=FY-1; - if FY<1 then FY:=FYMax; - end; - until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FX=Start); - if FX<>Start then GotoCell(FX,FY); -end; - -ellStatus*[OverWritten,Locked]=[]) or (FX=Start); - if FX<>Start then GotoCell(FX,FY); -end; - - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc-mod03.inc b/software/CPM/CPM26_TPASCAL_v300a/mc-mod03.inc deleted file mode 100644 index 62948f9..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc-mod03.inc +++ /dev/null @@ -1,195 +0,0 @@ -{.PA} -{*******************************************************************} -{* SOURCE CODE MODULE: MC-MOD03 *} -{* PURPOSE: Read, Save and Print a spread sheet. *} -{* Display on-line manual. *} -{*******************************************************************} - -type - String3 = string[3]; - -var - FileName: string[14]; - Line: string[100]; - -function Exist(FileN: AnyString): boolean; -var F: file; -begin - {$I-} - assign(F,FileN); - reset(F); - {$I+} - if IOResult<>0 then Exist:=false - else Exist:=true; -end; - - -procedure GetFileName(var Line: AnyString; FileType:String3); -begin - Line:=''; - repeat - Read(Kbd,Ch); - if Upcase(Ch) in ['A'..'Z',^M] then - begin - write(Upcase(Ch)); - Line:=Line+Ch; - end; - until (Ch=^M) or (length(Line)=8); - if Ch=^M then Delete(Line,Length(Line),1); - if Line<>'' then Line:=Line+'.'+FileType; -end; - -{.CP20} - -procedure Save; -var I: screenIndex; -J: integer; -begin - HighVideo; - Msg('Save: Enter filename '); - GetFileName(Filename,'MCS'); - if FileName<>'' then - begin - Assign(MCFile,FileName); - Rewrite(MCFile); - for I:='A' to FXmax do - begin - for J:=1 to FYmax do - write(MCfile,Screen[I,J]); - end; - Grid; - Close(MCFile); - LowVideo; - GotoCell(FX,FY); - end; -end; - -{.CP30} - -procedure Load; -begin - HighVideo; - Msg('Load: Enter filename '); - GetFileName(Filename,'MCS'); - if (Filename<>'') then if (not exist(FileName)) then - repeat - Msg('File not Found: Enter another filename '); - GetFileName(Filename,'MCS'); - until exist(FileName) or (FileName=''); - if FileName<>'' then - begin - ClrScr; - Msg('Please Wait. Loading definition...'); - Assign(MCFile,FileName); - Reset(MCFile); - for FX:='A' to FXmax do - for FY:=1 to FYmax do read(MCFile,Screen[FX,FY]); - FX:='A'; FY:=1; - LowVideo; - UpDate; - end; - GotoCell(FX,FY); -end; - - -{.PA} - -procedure Print; -var - I: screenIndex; - J,Count, - LeftMargin: Integer; - P: string[20]; - MCFile: Text; -begin - HighVideo; - Msg('Print: Enter filename "P" for Printer> '); - GetFileName(Filename,'LST'); - Msg('Left margin > '); Read(LeftMargin); - if FileName='P.LST' then FileName:='Printer'; - Msg('Printing to: ' + FileName + '....'); - Assign(MCFile,FileName); - Rewrite(MCFile); - For Count:=1 to 5 do Writeln(MCFile); - for J:=1 to FYmax do - begin - Line:=''; - for I:='A' to FXmax do - begin - with Screen[I,J] do - begin - while (Length(Line)0 then Str(Value:FW:DEC,P) else Str(Value:FW,P); - Line:=Line+P; - end; - end else Line:=Line+Contents; - end; { With } - end; { One line } - For Count:=1 to LeftMargin do Write(MCFile,' '); - writeln(MCFile,Line); - end; { End Column } - Grid; - Close(MCFile); - LowVideo; - GotoCell(FX,FY); -end; - -{.PA} - -procedure Help; -var - H: text; - HelpFileName: string[14]; - Line: string[80]; - I,J: integer; - Bold: boolean; - -begin - if Exist('MC.HLP') then - begin - Assign(H,'MC.HLP'); - Reset(H); - while not Eof(H) do - begin - Readln(H,Line); - ClrScr; I:=1; Bold:=false; LowVideo; - repeat - For J:=1 to Length(Line) do - begin - if Line[J]=^B then - begin - Bold:=not Bold; - if Bold then HighVideo else LowVideo; - end else write(Line[J]); - end; - Writeln; - I:=I+1; - Readln(H,Line); - until Eof(H) or (I>23) or (Copy(Line,1,3)='.PA'); - GotoXY(26,24); HighVideo; - write('<<< Please press any key to continue >>>'); - LowVideo; - read(Kbd,Ch); - end; - GotoXY(20,24); HighVideo; - write('<<< Please press to start MicroCalc >>>'); - LowVideo; - Readln(Ch); - UpDate; - end else { Help file did not exist } - begin - Msg('To get help the file MC.HLP must be on your disk. Press '); - repeat Read(kbd,Ch) until Ch=^M; - GotoCell(FX,FY); - end; -end; - -toCell(FX,FY); - end; -end; - - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc-mod04.inc b/software/CPM/CPM26_TPASCAL_v300a/mc-mod04.inc deleted file mode 100644 index f3cd95c..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc-mod04.inc +++ /dev/null @@ -1,294 +0,0 @@ -{.PA} -{*******************************************************************} -{* SOURCE CODE MODULE: MC-MOD04 *} -{* PURPOSE: Evaluate formulas. *} -{* Recalculate spread sheet. *} -{* *} -{* NOTE: This module contains recursive procedures *} -{* and is for computer scientists only. *} -{*******************************************************************} - -var - Form: Boolean; - -{$A-} -procedure Evaluate(var IsFormula: Boolean; { True if formula} - var Formula: AnyString; { Fomula to evaluate} - var Value: Real; { Result of formula } - var ErrPos: Integer);{ Position of error } -const - Numbers: set of Char = ['0'..'9']; - EofLine = ^M; - -var - Pos: Integer; { Current position in formula } - Ch: Char; { Current character being scanned } - EXY: string[3]; { Intermidiate string for conversion } - -{ Procedure NextCh returns the next character in the formula } -{ The variable Pos contains the position ann Ch the character } - - procedure NextCh; - begin - repeat - Pos:=Pos+1; - if Pos<=Length(Formula) then - Ch:=Formula[Pos] else Ch:=eofline; - until Ch<>' '; - end { NextCh }; - - - function Expression: Real; - var - E: Real; - Opr: Char; - - function SimpleExpression: Real; - var - S: Real; - Opr: Char; - - function Term: Real; - var - T: Real; - - function SignedFactor: Real; - - function Factor: Real; - type - StandardFunction = (fabs,fsqrt,fsqr,fsin,fcos, - farctan,fln,flog,fexp,ffact); - StandardFunctionList = array[StandardFunction] of string[6]; - - const - StandardFunctionNames: StandardFunctionList =('ABS','SQRT','SQR','SIN','COS', - 'ARCTAN','LN','LOG','EXP','FACT'); - var - E,EE,L: Integer; { intermidiate variables } - Found:Boolean; - F: Real; - Sf:StandardFunction; - OldEFY, { Current cell } - EFY, - SumFY, - Start:Integer; - OldEFX, - EFX, - SumFX:ScreenIndex; - CellSum: Real; - - function Fact(I: Integer): Real; - begin - if I > 0 then begin Fact:=I*Fact(I-1); end - else Fact:=1; - end { Fact }; - -{.PA} - begin { Function Factor } - if Ch in Numbers then - begin - Start:=Pos; - repeat NextCh until not (Ch in Numbers); - if Ch='.' then repeat NextCh until not (Ch in Numbers); - if Ch='E' then - begin - NextCh; - repeat NextCh until not (Ch in Numbers); - end; - Val(Copy(Formula,Start,Pos-Start),F,ErrPos); - end else - if Ch='(' then - begin - NextCh; - F:=Expression; - if Ch=')' then NextCh else ErrPos:=Pos; - end else - if Ch in ['A'..'G'] then { Maybe a cell reference } - begin - EFX:=Ch; - NextCh; - if Ch in Numbers then - begin - F:=0; - EXY:=Ch; NextCh; - if Ch in Numbers then - begin - EXY:=EXY+Ch; - NextCh; - end; - Val(EXY,EFY,ErrPos); - IsFormula:=true; - if (Constant in Screen[EFX,EFY].CellStatus) and - not (Calculated in Screen[EFX,EFY].CellStatus) then - begin - Evaluate(Form,screen[EFX,EFY].contents,f,ErrPos); - Screen[EFX,EFY].CellStatus:=Screen[EFX,EFY].CellStatus+[Calculated] - end else if not (Txt in Screen[EFX,EFY].CellStatus) then - F:=Screen[EFX,EFY].Value; - if Ch='>' then - begin - OldEFX:=EFX; OldEFY:=EFY; - NextCh; - EFX:=Ch; - NextCh; - if Ch in Numbers then - begin - EXY:=Ch; - NextCh; - if Ch in Numbers then - begin - EXY:=EXY+Ch; - NextCh; - end; - val(EXY,EFY,ErrPos); - Cellsum:=0; - for SumFY:=OldEFY to EFY do - begin - for SumFX:=OldEFX to EFX do - begin - F:=0; - if (Constant in Screen[SumFX,SumFY].CellStatus) and - not (Calculated in Screen[SumFX,SumFY].CellStatus) then - begin - Evaluate(Form,Screen[SumFX,SumFY].contents,f,errPos); - Screen[SumFX,SumFY].CellStatus:= - Screen[SumFX,SumFY].CellStatus+[Calculated]; - end else if not (Txt in Screen[SumFX,SumFY].CellStatus) then - F:=ScrEEn[SumFX,SumFY].Value; - Cellsum:=Cellsum+f; - f:=Cellsum; - end; - end; - end; - end; - end; - end else - begin - found:=false; - for sf:=fabs to ffact do - if not found then - begin - l:=Length(StandardFunctionNames[sf]); - if copy(Formula,Pos,l)=StandardFunctionNames[sf] then - begin - Pos:=Pos+l-1; NextCh; - F:=Factor; - case sf of - fabs: f:=abs(f); - fsqrt: f:=sqrt(f); - fsqr: f:=sqr(f); - fsin: f:=sin(f); - fcos: f:=cos(f); - farctan: f:=arctan(f); - fln : f:=ln(f); - flog: f:=ln(f)/ln(10); - fexp: f:=exp(f); - ffact: f:=fact(trunc(f)); - end; - Found:=true; - end; - end; - if not Found then ErrPos:=Pos; - end; - Factor:=F; - end { function Factor}; -{.PA} - - begin { SignedFactor } - if Ch='-' then - begin - NextCh; SignedFactor:=-Factor; - end else SignedFactor:=Factor; - end { SignedFactor }; - - begin { Term } - T:=SignedFactor; - while Ch='^' do - begin - NextCh; t:=exp(ln(t)*SignedFactor); - end; - Term:=t; - end { Term }; - - - begin { SimpleExpression } - s:=term; - while Ch in ['*','/'] do - begin - Opr:=Ch; NextCh; - case Opr of - '*': s:=s*term; - '/': s:=s/term; - end; - end; - SimpleExpression:=s; - end { SimpleExpression }; - - begin { Expression } - E:=SimpleExpression; - while Ch in ['+','-'] do - begin - Opr:=Ch; NextCh; - case Opr of - '+': e:=e+SimpleExpression; - '-': e:=e-SimpleExpression; - end; - end; - Expression:=E; - end { Expression }; - - -begin { procedure Evaluate } - if Formula[1]='.' then Formula:='0'+Formula; - if Formula[1]='+' then delete(Formula,1,1); - IsFormula:=false; - Pos:=0; NextCh; - Value:=Expression; - if Ch=EofLine then ErrPos:=0 else ErrPos:=Pos; -end { Evaluate }; - -{.PA} - -procedure Recalculate; -var - RFX: ScreenIndex; - RFY:integer; - OldValue: real; - Err: integer; - -begin - LowVideo; - GotoXY(1,24); ClrEol; - Write('Calculating..'); - for RFY:=1 to FYMax do - begin - for RFX:='A' to FXMax do - begin - with Screen[RFX,RFY] do - begin - if (Formula in CellStatus) then - begin - CellStatus:=CellStatus+[Calculated]; - OldValue:=Value; - Evaluate(Form,Contents,Value,Err); - if OldValue<>Value then - begin - GotoXY(XPos[RFX],RFY+1); - if (DEC>=0) then Write(Value:FW:DEC) - else Write(Value:FW); - end; - end; - end; - end; - end; - GotoCell(FX,FY); -end; -FW); - end; - end; - end; - end; - end; - GotoCell(FX,FY); -end; - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc-mod05.inc b/software/CPM/CPM26_TPASCAL_v300a/mc-mod05.inc deleted file mode 100644 index 8f838ee..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc-mod05.inc +++ /dev/null @@ -1,394 +0,0 @@ -{.PA} -{*******************************************************************} -{* SOURCE CODE MODULE: MC-MOD05 *} -{* PURPOSE: Read the contents of a cell and update *} -{* associated cells. *} -{*******************************************************************} - - -{ Procedure GetLine will let the user type and/or edit a string of } -{ maximum length "MAX". The string will start at cursor position: } -{ ColNO,LineNO. If ErrPos <> 0 then the cursor will jump to position } -{ ErrPos in the string. If the last parameter is "True" then all } -{ characters entered will be translated to upper case. } -{ If the user at anytimes types then the string returned } -{ contain $FF to indicate that editing was aborted. } - - -procedure GetLine(var S: AnyString; { String to edit } - ColNO,LineNO, { Where start line } - MAX, { Max length } - ErrPos: integer; { Where to begin } - UpperCase:Boolean); { True if auto Upcase } -var - X: integer; - InsertOn: boolean; - OkChars: set of Char; - - - procedure GotoX; - begin - GotoXY(X+ColNo-1,LineNo); - end; - -begin - OkChars:=[' '..'}']; - InsertOn:=true; - X:=1; GotoX; - Write(S); - if Length(S)=1 then X:=2; - if ErrPos<>0 then X:=ErrPos; - GotoX; - repeat - Read(Kbd,Ch); - if UpperCase then Ch:=UpCase(Ch); - case Ch of - ^[: begin - S:=chr($FF); { abort editing } - Ch:=^M; - end; - ^D: begin { Move cursor right } - X:=X+1; - if (X>length(S)+1) or (X>MAX) then X:=X-1; - GotoX; - end; - ^G: begin { Delete right char } - if X<=Length(S) then - begin - Delete(S,X,1); - Write(copy(S,X,Length(S)-X+1),' '); - GotoX; - end; - end; - ^S,^H: begin { Move cursor left } - X:=X-1; - if X<1 then X:=1; - GotoX; - end; - ^F: begin { Move cursor to end of line } - X:=Length(S)+1; - GotoX; - end; - ^A: begin { Move cursor to beginning of line } - X:=1; - GotoX; - end; - #127: begin { Delete left char } - X:=X-1; - if (Length(S)>0) and (X>0) then - begin - Delete(S,X,1); - Write(copy(S,X,Length(S)-X+1),' '); - GotoX; - if X<1 then X:=1; - end else X:=1; - end; - ^V: InsertOn:= not InsertOn; - -{.PA} - - else - begin - if Ch in OkChars then - begin - if InsertOn then - begin - insert(Ch,S,X); - Write(copy(S,X,Length(S)-X+1),' '); - end else - begin - write(Ch); - if X=length(S) then S:=S+Ch - else S[X]:=Ch; - end; - if Length(S)+1<=MAX then X:=X+1 - else OkChars:=[]; { Line too Long } - GotoX; - end else - if Length(S)+1<=Max then - OkChars:= [' '..'}']; { Line ok again } - end; - end; - until CH=^M; -end; - - -{.PA} - - -procedure GetCell(FX: ScreenIndex;FY: Integer); -var - S: AnyString; - NewStat: Set of Attributes; - ErrorPosition: Integer; - I: ScreenIndex; - Result: Real; - Abort: Boolean; - IsForm: Boolean; - -{ Procedure ClearCells clears the current cell and its associated } -{ cells. An associated cell is a cell overwritten by data from the } -{ current cell. The data can be text in which case the cell has the } -{ attribute "OverWritten". If the data is a result from an expression} -{ and the field with is larger tahn 11 then the cell is "Locked" } - - procedure ClearCells; - begin - I:=FX; - repeat - with Screen[I,FY] do - begin - GotoXY(XPos[I],FY+1); - write(' '); I:=Succ(I); - end; - until ([OverWritten,Locked]*Screen[I,FY].CellStatus=[]); - { Cell is not OVerWritten not Locked } - end; - -{.CP20} -{ The new type of the cell is flashed at the bottom of the screen } -{ Notice that a constant of type array is used to indicate the type } - - procedure FlashType; - begin - HighVideo; - GotoXY(5,23); - LowVideo; - end; - -{.CP20} -{ Procedure GetFormula repeats calling the procedure GetLine and } -{ Evaluate until the line read by GetLine contains a valid formula. } -{ Evaluate returns an error position in the string evaluated. If } -{ this position is non zero GetLine is called. If the user types } -{ ESC in GetLine to abort the editing then the string returned from } -{ Getline will contain $FF and te original value of the cell will } -{ be restored later. } - - procedure GetFormula; - begin - FlashType; - repeat - GetLine(S,1,24,70,ErrorPosition,True); - if S<>Chr($FF) then - begin - Evaluate(IsForm,S,Result,ErrorPosition); - if ErrorPosition<>0 then - Flash(15,'Error at cursor'+^G,false) - else Flash(15,' ',false); - end; - until (ErrorPosition=0) or (S=Chr($FF)); - if IsForm then NewStat:=NewStat+[Formula]; - end; - -{.CP20} -{ Procedure GetText calls the procedure GetLine with the current } -{ cells X,Y position as parameters. This means that text entering } -{ takes place direcly at the cells posion on the screen. } - - procedure GetText; - begin - FlashType; - with Screen[FX,FY] do GetLine(S,XPos[FX],FY+1,70,ErrorPosition,False); - end; - -{.CP20} -{ Procedure EditCell loads a copy of the current cells contents in } -{ in the variable S before calling either GetText or GetFormula. In } -{ this way no changes are made to the current cell. } - - procedure EditCell; - begin - with Screen[FX,FY] do - begin - S:=Contents; - if Txt in CellStatus then GetText else GetFormula; - end; - end; - -{.PA} -{ Procedure UpdateCells is a little more complicated. Basically it } -{ makes sure to tag and untag cells which has been overwritten or } -{ cleared from data from another cell. It also updates the current } -{ with the new type and the contents which still is in the temporaly } -{ variable "S". } - - - procedure UpdateCells; - var - Flength: Integer; - begin - Screen[FX,FY].Contents:=S; - if Txt in NewStat {Screen[FX,FY].CellStatus} then - begin - I:=FX; FLength:=Length(S); - repeat - I:=Succ(I); - with Screen[I,FY] do - begin - FLength:=Flength-11; - if (Flength>0) then - begin - CellStatus:=[Overwritten,Txt]; - Contents:=''; - end else - begin - if OverWritten in CellStatus then - begin - CellStatus:=[Txt]; - GotoCell(I,FY);LeaveCell(I,FY); - end; - end; - end; - until (I=FXMax) or (Screen[I,FY].Contents<>''); - Screen[FX,FY].CellStatus:=[Txt]; - end else { string changed to formula or constant } - begin { Event number two } - I:=FX; - repeat - with Screen[I,FY] do - begin - if OverWritten in CellStatus then - begin - CellStatus:=[Txt]; - Contents:=''; - end; - I:=Succ(I); - end; - until not (OverWritten in Screen[I,FY].CellStatus); - with Screen[FX,FY] do - begin - CellStatus:=[Constant]; - if IsForm then CellStatus:=CellStatus+[Formula]; - Value:=Result; - end; - end; - end; - - -{.PA} -{ Procedure GetCell finnaly starts here. This procedure uses all } -{ all the above local procedures. First it initializes the temporaly } -{ variable "S" with the last read character. It then depending on } -{ this character calls GetFormula, GetText, or EditCell. } - -begin { procedure GetCell } - S:=Ch; ErrorPosition:=0; Abort:=false; - NewStat:=[]; - if Ch in ['0'..'9','+','-','.','(',')'] then - begin - NewStat:=[Constant]; - if not (Formula in Screen[FX,FY].CellStatus) then - begin - GotoXY(11,24); ClrEol; - ClearCells; - GetFormula; - end else - begin - Flash(15,'Edit formula Y/N?',true); - repeat read(Kbd,Ch) until UpCase(CH) in ['Y','N']; - Flash(15,' ',false); - if UpCase(Ch)='Y' then EditCell Else Abort:=true; - end; - end else - begin - if Ch=^[ then - begin - NewStat:=(Screen[FX,FY].CellStatus)*[Txt,Constant]; - EditCell; - end else - begin - if formula in Screen[FX,FY].CellStatus then - begin - Flash(15,'Edit formula Y/N?',true); - repeat read(Kbd,Ch) until UpCase(CH) in ['Y','N']; - Flash(15,' ',false); - if UpCase(Ch)='Y' then EditCell Else Abort:=true; - end else - begin - NewStat:=[Txt]; - ClearCells; - GetText; - end; - end; - end; - if not Abort then - begin - if S<>Chr($FF) then UpDateCells; - GotoCell(FX,FY); - if AutoCalc and (Constant in Screen[FX,FY].CellStatus) then Recalculate; - if Txt in NewStat then - begin - GotoXY(3,FY+1); Clreol; - For I:='A' to FXMax do - LeaveCell(I,FY); - end; - end; - Flash(15,' ',False); - GotoCell(FX,FY); -end; - -{.PA} -{ Procedure Format is used to } - - -procedure Format; -var - J,FW,DEC, - FromLine,ToLine: integer; - Lock: Boolean; - - - procedure GetInt(var I: integer; Max: Integer); - var - S: string[8]; - Err: Integer; - Ch: Char; - begin - S:=''; - repeat - repeat Read(Kbd,Ch) until Ch in ['0'..'9','-',^M]; - if Ch<>^M then - begin - Write(Ch); S:=S+Ch; - Val(S,I,Err); - end; - until (I>=Max) or (Ch=^M); - if I>Max then I:=Max; - end; - -begin - HighVideo; - Msg('Format: Enter number of decimals (Max 11): '); - GetInt(DEC,11); - Msg('Enter Cell whith remember if larger than 10 next column will lock: '); - GetInt(FW,20); - Msg('From which line in column '+FX+': '); - GetInt(FromLine,FYMax); - Msg('To which line in column '+FX+': '); - GetInt(ToLine,FYMax); - if FW>10 then Lock:=true else Lock:=False; - for J:=FromLine to ToLine do - begin - Screen[FX,J].DEC:=DEC; - Screen[FX,J].FW:=FW; - with Screen[Succ(FX),J] do - begin - if Lock then - begin - CellStatus:=CellStatus+[Locked,Txt]; - Contents:=''; - end else CellStatus:=CellStatus-[Locked]; - end; - end; - NormVideo; - UpDate; - GotoCell(FX,FY); -end; - -Video; - UpDate; - GotoCell(FX,FY); -end; - - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc.hlp b/software/CPM/CPM26_TPASCAL_v300a/mc.hlp deleted file mode 100644 index 2048b3a..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc.hlp +++ /dev/null @@ -1,145 +0,0 @@ - INTRODUCTION - -MicroCalc is a tiny spread sheet program a la VisiCalc. It is -provided with the TURBO-Pascal system as an example program. - -Since MicroCalc is only a demonstation program it has its limita- -tions (which you may have fun eliminating): - - * You cannot copy formulas from one cell to others. - * You cannot insert and delete lines or columns. - -In spite of its limitations MicroCalc does provide some interest- -ing features among which are: - - * 11 digits floating point reals (Thanks to TURBO Pascal!) - * Full set of mathematical functions (SIN,COS,LN,EXP etc.) - * Built in line editor for text and formula editing. - * Text can be entered across cells. - * Once entered a formula is protected from accidental erasure. -.PA - - -In addition to this MicroCalc offers all the usual features of a -spread sheet program: - - - * Load a spread sheet from the disk. - * Save a spread sheet on the disk. - * Automatic recalculation after each entry. (May be disabled). - * Print the spread sheet on the printer. - * Clear the current spread sheet. - -The spread sheet is an electronic piece of paper on which you can -enter text, numbers and formulas and have MicroCalc do calcula- -tions automatically. - -The next page shows the electronic spread sheet. -.PA ----------------------------------------------------------------- - A B C D .... - 1 22.00 - 2 1.00 - 3 2.00 - 4 3.00 - 5 28.00 - . - . -A 5 Formula: -(A1+A2+A3+A4+A5) ------------------------------------------------------------------ - -In the example the next last line shows that the active cell is -cell A5 and that A5 contains a formula: (A1+A2+A3+A4) which -means that the numbers in A1,A2,A3 and A4 should be added and -placed in A5. - -The formula can be abbreviated to: (A1>A4) meaning: add all cells -from A1 to A4. -.PA - -You move the cursor around just like you do in the TURBO editor: - - (Up) - Ctrl-E - (Left) Ctrl-S Ctrl-G (Right) - Ctrl-X - (Down) - -A cell may contain a number, a formula or some text. The type of of the cell -and its coordinates are shown in the bottom left corner of the screen: - -A 5 Formula: (Means that the current cell is A5 and that it - contains a formula) - -A 1 Text (Cell A1 contains text) - -A 2 Numeric (Cell A2 contains a number and no cell references) - -.PA - Summary of MicroCalc - Cells are denoted A1 through G21 giving a total of 147 cells. - -Summary of standard functions and operators: -SIN, COS, ARCT, ABS, FACT, EXP, LN, +,-,/,* -Futhermore the operator '>' can be used to denote a range of cells to add. - -Entering data -To enter data in any field move the cursor to the cell and enter the -data. MicroCalc automatically determines if the field is numeric or a -a text field. - - -When moving between fields: -^S,^D,^E,^X move left right up and down. - -When editing a field -^S,^D moves left and right. ^A,^F moves to beginning/end of line. -DEL,^G deletes left or right character. -ESC makes it possible to regret changes and to edit an existing cell. -.PA - - - Summary of commands - - - / will restore the screen - Q will Quit MicroCalc - L will Load a spread sheet from the disk. - S will Save a spread sheet on the disk. - R will Recalculate - P will Print the spread sheet. - F makes it possible to change the output format for numbers. - A switches Autocalc ON and OFF - -Note: to use scientific notation use the the F command and enter minus one - -1 for the number of decimals. - -.PA - - EXAMPLES - -The following are examples of valid cell formulas: - -A1+(B2-C7) subtract cell C7 from B2 and add the result to cell A1 -(A1>A23) the sum of cells: A1,A2,A3..A23 -(A1>B5) the sum of cells: A1..A5 and B1..B5 - -The formulas may be as complicated as you want:  - -SIN(A1)*COS(A2)/((1.2*A8)+LN(FACT(A8)+8.9E-3))+(C1>C5) - -To edit an existing formula or text simply move to the cell and -press ESC, make your changes and press . If you make -a mistake you may press ESC again, the old value of the cell will -then be restored. - -To try MicroCalc now you may use the /L command and load the file: -CALCDEMO. - - - try MicroCalc now you may use the /L command and load the file: -CALCDEMO. - - - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mc.pas b/software/CPM/CPM26_TPASCAL_v300a/mc.pas deleted file mode 100644 index 445ecdb..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/mc.pas +++ /dev/null @@ -1,160 +0,0 @@ -program MicroCalc; -{ - MICROCALC DEMONSTRATION PROGRAM Version 1.00A - - This program is Copyrighted by Borland International, Inc. - 1983, 1984, 1985 and is hereby donated to the public domain for - non-commercial use only. Dot commands are for the program - lister: LISTT.PAS (available with our TURBO TUTOR): - - .PA, .CP20, etc... - - INSTRUCTIONS - 1. Compile this program using the TURBO.COM compiler. - a. Use the O command from the main menu to select Options. - b. Select the C option to generate a .COM file. - c. Select the Q option to Quit the Options menu. - d. Select the M option to specify the Main file - e. Type "MC" and hit - f. Type C to compile the program to disk - g. Type R to run the program - - 2. Exit the program by typing: /Q -} - -{$R-,U-,V-,X-,A+,C-} - - -const - FXMax: Char = 'G'; { Maximum number of columns } - FYMax = 21; { Maximum number of lines } - -type - Anystring = string[255]; - ScreenIndex = 'A'..'G'; - Attributes = (Constant,Formula,Txt,OverWritten,Locked,Calculated); - -{ The spreadsheet is made out of Cells every Cell is defined as } -{ the following record: } - - CellRec = record - CellStatus: set of Attributes; { Status of cell (see type def.) } - Contents: String[70]; { Contains a formula or some text } - Value: Real; { Last calculated cell value } - DEC,FW: 0..20; { Decimals and Cell Whith } - end; - - Cells = array[ScreenIndex,1..FYMax] of CellRec; - -const - XPOS: array[ScreenIndex] of integer = (3,14,25,36,47,58,68); - -var - Screen: Cells; { Definition of the spread sheet } - FX: ScreenIndex; { Culumn of current cell } - FY: Integer; { Line of current cell } - Ch: Char; { Last read character } - MCFile: file of CellRec; { File to store sheets in } - AutoCalc: boolean; { Recalculate after each entry? } - - -{ The following include files contain procedures used in MicroCalc. } -{ In the following source code there is a reference after each } -{ procedure call indicating in which module the procedure is located.} - -{ If you want a printer listing of the following modules then you } -{ must let the include directives start in column one and then use } -{ the TLIST program to generate a listing. } - - {$I MC-MOD00.INC Miscelaneous procedures } - {$I MC-MOD01.INC Initialization procedures } - {$I MC-MOD02.INC Commands to move between fields } - {$I MC-MOD03.INC Commands to Load,Save,Print } - {$I MC-MOD04.INC Evaluating an expression in a cell } - {$I MC-MOD05.INC Reading a cell definition and Format command} - - -{.PA} -{*********************************************************************} -{* START OF MAIN PROGRAM PROCEDURES *} -{*********************************************************************} - - -{ Procedure Commands is activated from the main loop in this program } -{ when the user type a semicolon. Commands then activates a procedure} -{ which will execute the command. These procedures are located in the} -{ above modules. } -{ For easy reference the source code module number is shown in a } -{ comment on the right following the procedure call. } - -procedure Commands; -begin - GotoXY(1,24); - HighVideo; - Write('/ restore, Quit, Load, Save, Recalculate, Print, Format, AutoCalc, Help '); - Read(Kbd,Ch); - Ch:=UpCase(Ch); - case Ch of { In module } - 'Q': Halt; - 'F': Format; { 04 } - 'S': Save; { 03 } - 'L': Load; { 03 } - 'H': Help; { 03 } - 'R': Recalculate; { 05 } - 'A': Auto; { 00 } - '/': Update; { 01 } - 'C': Clear; { 01 } - 'P': Print; { 03 } - end; - Grid; { 01 } - GotoCell(FX,FY); { 02 } -end; - -{ Procedure Hello says hello and activates the help procedure if the } -{ user presses anything but Return } - -procedure Wellcome; - - procedure Center(S: AnyString); - var I: integer; - begin - for I:=1 to (80-Length(S)) div 2 do Write(' '); - writeln(S); - end; - -begin { procedure Wellcome } - ClrScr; GotoXY(1,9); - Center('Welcome to MicroCalc. A Turbo demonstation program'); - Center('Copyright 1983 by Borland International Inc. '); - Center('Press any key for help or to start'); - GotoXY(40,12); - Read(Kbd,Ch); - if Ch<>^M then Help; -end; - -{.PA} -{*********************************************************************} -{* THIS IS WHERE THE PROGRAM STARTS EXECUTING *} -{*********************************************************************} - -begin - Init; { 01 } - Wellcome; - ClrScr; Grid; { 01 } - GotoCell(FX,FY); - repeat - Read(Kbd,Ch); - case Ch of - ^E: MoveUp; { 02 } - ^X,^J: MoveDown; { 02 } - ^D,^M,^F: MoveRight; { 02 } - ^S,^A: MoveLeft; { 02 } - '/': Commands; - ^[: GetCell(FX,FY); { 04 } - else - if Ch in [' '..'~'] then - GetCell(FX,FY); { 04 } - end; - until true=false; { (program stops in procedure Commands) } -end. - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/mcdemo.mcs b/software/CPM/CPM26_TPASCAL_v300a/mcdemo.mcs deleted file mode 100644 index a197eb9ceb0bc46f8587adc4581d9e403a837bad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11904 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 DD>nmz diff --git a/software/CPM/CPM26_TPASCAL_v300a/tinst.dta b/software/CPM/CPM26_TPASCAL_v300a/tinst.dta deleted file mode 100644 index b93362225e928ec8df9561735740d7b422de32e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4608 zcmc(jUr*yk5WsiW7RQ}{^5-6|Y<1m-KG2FNc5=A`p+4l2NJk+hC4m!{mzu*pEG2eo zn+xO;Rmzi(%DZHSXNHW5-+V%IzNj(?e%ogMR<{7Y7=^?F;BjAE%$EE_~MUE@Y8 zx}G`c{30Qznl1z(bR{88Oc*~(%n50|qJ*#sO`wF57ZU1?QG6Q{!P2LJqH9P&zfmj- zit#2)8Sg=#4z(en&K-L=@EkWRm{oWjp>RxXQ_g@zzGEk!6&#V1`eJkpFW8Nc=hl*k<0mb-_@~t}(j`5D1 zHDrGZ{myJCh$+4LYx_{H8tXElmU-7O4h-W%yy%$@x`@uZrC*4~yMG**a%T2XX7u4P zkb?hUW**DF2{8p?#=Fqd15`wnIz~3@jhZ;M9QV>2?utEe>4dNpADP!Op>Qz*EC#jq z!TQVYg^p_rvtmR(%!JZM8wqAe2{>n?@5aPz^sSVAFJ)|m+mMaW!)&w#y|UDVCa@PJ z>km+kVBn*ja#%{|6HqG98Am9_H&F?Uh{HId;V7ZFgyLJ^?8tpdP4FZon@85&!1u(^ z39rSq({n=G$aY`q?prPv2zf0jAc|@bSsH&2J-iAdi0G@lu?m0~=;^y}LqY8d*Nd3I zmAHIvONB~brJxvp*nR0xTgSHL7ut^frDyvBl2)O#h@}=u2`NwzQ`1mob7A)}{?nML zvhq|46vWiCW9QQL!@DtMxdJ^$MqeCiwdwi3Hx$i!2OXzcc1oBy9O5eBQ5iitkdr@8 zriAAw!KLS8mKw8_u72c$gmHCN#FAWrt`^0rrjHqbqOcJsp}>7>C!z1TmZ*lI_4(S4 zEXDZm@%!b-xRsdCg<@PC7aBkN0aL=6z_oGdaxAa0fJukaf4k{ND7aL$$GdMw3d*&IqVHYVy#SXi3Prb{C{MN9 z&BEFHa*Qv>OsFL;%c+M&%AXpCatcZo6U!+G@pos~8_>@VbP!XHH&s1_S8&b9M#plm zAboxjo%*>bmCOprGoiF~x&FR`n8ItS3W7+i$~)*wSmfdC2oSrl{h){Kr($YC6KVk{ z8xB3|P6W2^*nu!Hfo4MG`f!NYqG47_fLqg_SOB$xP$5+5Wg{-}azQ0i-pmh&sgzJy z28KLU!b^nu>Rj2L*f&eXeb|Njr5u*Z1%=1Jyo@eyCpCdcy6@Hs#GxC6KBQ4Ml-mz( z&20UmBXH)2!;5n#xUqWh;U1sH@MI24T_m6*_c8u;Ow2g$X~y438RNHd zHh#=VK~fWlpq~187ue$CMZq-S{|WF1v6TlZY4m%jr^!=GpKKS(bNOTLJDnJYUc2$T zgzlnHo(+U*BrbI1?u$(ecD;vc#PtNE2*&?}xMqAHza(Jyff~kVSZeKr$fAJAq5$5e K-oO1nzyCjZUK(@& diff --git a/software/CPM/CPM26_TPASCAL_v300a/tinst.msg b/software/CPM/CPM26_TPASCAL_v300a/tinst.msg deleted file mode 100644 index cc25774..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/tinst.msg +++ /dev/null @@ -1,123 +0,0 @@ -1 TURBO Pascal installation menu. -2 Choose installation item from the following: -3 -4 [S]creen installation | [C]ommand installation | [Q]uit -5 -6 Enter S, C, or Q: -10 Duplicate definition. Error occurred between question -11 Commands starting with the same letter must have the same length. - Error occurred between question -12 The total maximum length of commands are execeeded -13 -> - - -14 CURSOR MOVEMENTS: - -20 Character left -21 Alternative -22 Character right -23 Word left -24 Word right -25 Line up -26 Line down -27 Scroll down -28 Scroll up -29 Page up -30 Page down -31 To left on line -32 To right on line -33 To top of page -34 To bottom of page -35 To top of file -36 To end of file -37 To begining of block -38 To end of block -39 To last cursor position - - -15 INSERT & DELETE: - -40 Insert mode on/off -41 Insert line -42 Delete line -43 Delete to end of line -44 Delete right word -45 Delete character under cursor -46 Delete left character -47 Alternative - - -16 BLOCK COMMANDS: - -48 Mark block begin -49 Mark block end -50 Mark single word -51 Hide/display block -52 Copy block -53 Move block -54 Delete block -55 Read block from disk -56 Write block to disk - - -17 MISC. EDITING COMMANDS: - -57 End edit -58 Tab -59 Auto tab on/off -60 Restore line -61 Find -62 Find & replace -63 Repeat last find -64 Control character prefix - -101 Nothing - ^Q: Quit, ^R: Last page, ^C: Next page, : Select terminal: - Wait Sorting Definitions - Change to: - (Y/N)? - y - n - Text file name: - Command: - Numeric entry expected - Legal range is - , please re-enter: - Choose one of the following terminals: - None of the above ( Max. 20 Characters ) - Delete a definition ( Max. 20 Characters ) - Which terminal? (Enter no. or ^Q to exit): - Delete terminal? (Enter no. or ^Q to exit): - Do you want to modify this definition before installation? - Terminal type: - Send an initialization string to the terminal? - Initializaion defined as a command string? (No = a file) - Send a reset string to the terminal - Reset defined as a command? (No = a file) - CURSOR LEAD-IN command: - CURSOR POSITIONING COMMAND to send between line and column: - CURSOR POSITIONING COMMAND to send after both line and column: - Column first - OFFSET to add to LINE: - OFFSET to add to COLUMN: - Binary address - Number of ASCII digits (2 or 3): - CLEAR SCREEN command: - Does CLEAR SCREEN also HOME cursor - HOME command: - DELETE LINE command: - INSERT LINE command: - ERASE TO END OF LINE command: - START HIGHLIGHTING command: - END HIGHLIGHTING command: - Number of rows (lines) on your screen: - Number of columns on your screen: - Delay after CURSOR ADDRESS (0-255 ms): - Delay after CLEAR, DELETE and INSERT (0-255 ms): - Delay after ERASE TO END OF LINE and HIGHLIGHT (0-255 ms): - Is this definition correct? - Hardware dependent information - Operating frequency of your microprocessor in MHz (for delays): -pendent information - Operating frequency of your microprocessor in MHz (for delays): - \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/turbo.com b/software/CPM/CPM26_TPASCAL_v300a/turbo.com deleted file mode 100644 index 892b18cfc0b4a971b0bf05160431a59acf8a8751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30848 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 Okf1wZthfK4>;ErFRdcBT diff --git a/software/CPM/CPM26_TPASCAL_v300a/turbo.msg b/software/CPM/CPM26_TPASCAL_v300a/turbo.msg deleted file mode 100644 index 701b32b..0000000 --- a/software/CPM/CPM26_TPASCAL_v300a/turbo.msg +++ /dev/null @@ -1,101 +0,0 @@ - are not allowed - can not be - constant - does not - expression - identifier - file - here - Integer - File -Illegal - or -Undefined - match - real -String -Textfile - out of range - variable - overflow - expected - type -Invalid - pointer -01';' -02':' -03',' -04'(' -05')' -06'=' -07':=' -08'[' -09']' -10'.' -11'..' -12BEGIN -13DO -14END -15OF -17THEN -18TO DOWNTO -20Boolean -21  -22  -23  -24  -25  -26  -27  -28Pointer -29Record -30Simple -31Simple -32 -33 -34 -35 -36Type -37Untyped -40 label -41Unknown syntax error -42 in preceding definitions -43Duplicate label -44Type mismatch -45 -46 and CASE selector -47Operand(s) operator -48 result -49  length -50 length -51 subrange base -52Lower bound > upper bound -53Reserved word -54 assignment -55 exceeds line -56Error in integer -57Error in -58 character in -60s -61 s ands -62Structureds -63s -64s and untypeds -65Untypeds -66I/O -67 s must be parameters -68 componentss -69dering of fields -70Set base -71 GOTO -72Label not within current block -73 FORWARD procedure(s) -74INLINE error -75 use of ABSOLUTE -90 not found -91Unexpected end of source -97Too many nested WITH's -98Memory -99Compilerd WITH's -98Memory -99Compiler \ No newline at end of file diff --git a/software/CPM/CPM26_TPASCAL_v300a/turbo.ovr b/software/CPM/CPM26_TPASCAL_v300a/turbo.ovr deleted file mode 100644 index bd9292e22a743c7de744baf3dbafc40805996ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmc&y(MwZd6h9|*aHZY6(`eg+ec!Iwva-6!f*~S`6-bIw5@g0;Y9rckE>mZ*2cLS$ zZ9Z01^al(Hhc6)vVhb*~XcG01%T~x-W?|q%Tj$J9U6QZFI+lMxVDak&hJ==CEk{2#6uL{ zoK8t0;32T&Gotn1onj5?blkp1$twwx(o$2LXiZdrx`xHFMQ0G>EoI3TqcVjlt)$CW zdfU1gW9{9S_Exxyjg@*tBl(%v7hpraJ6?Aq>m5Ah@s1Aq1I+Ciy~R9U=JtEW2H907 zb9vqDrYFF9JLu1@y4_6w4X6oO+v#xDwn1x?*5SzJ>sDncoRxls_4cQUdUY!zTBtr{ zH7qinP33c#M#uIgOw(cW&lEa0!|_5}F5j>bF2u6Z#vcpuxt-@_Gf1Sy)Q=GW0czkV z)WdN&2^XOcu7eAPskZ@`fDlYmpJ(9}yn!^lgAcF*-(VdKC}0(uu@*aU7;obkwXGhX z!gF{5bMO-8p;RKmvjcLUoU0DbCFwnROP72;FXa6vM$KO{)Hnyo4p2v;c8i0_2DBEf zc0mnB?^es@=ARB2S3;21+_G8|$w)m>-Vazsldl^^GD@ypo74}yCyI>RDWG2Nh|c)V hfwXp}i;_jQSZ)4YbiFSImzJ46272f|Y}S3g|1a5Q0>}UW diff --git a/software/CPM/CPM27_WORDSTAR_v30/INSTALL.COM b/software/CPM/CPM27_WORDSTAR_v30/INSTALL.COM deleted file mode 100644 index e21b8bf6c60f9c082e3830a06decc6cdff8cc867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33024 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 diff --git a/software/CPM/CPM27_WORDSTAR_v30/MERGPRIN.OVR b/software/CPM/CPM27_WORDSTAR_v30/MERGPRIN.OVR deleted file mode 100644 index 5826d6ea4628121a1fc928b1dae6a350f5456621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 diff --git a/software/CPM/CPM27_WORDSTAR_v30/READ.ME b/software/CPM/CPM27_WORDSTAR_v30/READ.ME deleted file mode 100644 index c8d9003..0000000 --- a/software/CPM/CPM27_WORDSTAR_v30/READ.ME +++ /dev/null @@ -1,88 +0,0 @@ -CP/M WordStar patch for VT100 up to 5 colors. - -Features : -WordStar patch for ANSI/vt100 terminals like Linux Console or X11 xterm. -Works with CP/M 2.2 (or MP/M) with fixed height and fixed width at offset 232h and 233h (default values are actually 24x80). -Get console height and width dynamically from SCB Bdos #49 (for use with CP/M Plus). -Could do the same with CP/M 2.2 (or MP/M) as CP/M Plus if SCB Bdos #49 return non-0 values for height and width. -Support for up to 120 lines of 250 columns (e.g. 43 or 44 lines of 132 columns CRT mode) with limitations. - -Send sequence codes to delete and insert line on screen. -Orange (customizable at offset 33Dh) background color instead of simple reverse video (only with color compatible vt100 terminals). -Bright status line (number one) instead of reverse video. -Blue (customizable at offset 31Ch) foreground color for latest flags column (only with color compatible vt100 terminals). -Up to five colors (white/orange/black/bright/blue). -Bright and reverse video only with non-color vt100 terminals. - -Works with Zilog Z80 or Intel 8080/8085. No use of Z80 specific op-codes. -Fit in exact amount of bytes for patches. No extra memory needed. -Works with WS 3.3 pre-patched with WINSTALL.COM - - -Installation procedure: Patch yourself your copy of WS.COM with this WS3.HEX file. -C>WINSTALL - -... - -The changes made during this session of INSTALL are stored -in a temporary file. You may now save these changes in your -installed file C:WS.COM. - -These are your current values: - -Terminal : DEC VT-100 -Printer : Standard Printer -Communications protocol : No protocol -Driver : Primary list device - - ***** EXIT OPTIONS MENU ***** - -A Save the changes made during this INSTALL session -B Quit this session of INSTALL without saving changes -C Change any of your choices / Remain in INSTALL - - Enter the letter of your choice (A/B/C). - - - -Your new installed WordStar file is C:WS.COM. - - -You are returning to the operating system. - - -C>TYPE WS3.HEX -:03010000C30046F3 -:1C02320018500000000000000000000000000000000000000000000000C3BB02C8 -:20025000031B5B4B000000031B5B4D000000031B5B4C0000000000051B5B34336D00051BD0 -:200270005B30306D000000000000000000000000000000000000000000C90000C9000A05A5 -:01029000006D -:02029300FF006A -:0302A000C307038E -:2002BB00CDE9027DCDF3023E3BCD06017CCDF3023E48CD06017DB7210B37113030C2E1029A -:2002DB00213031113232226A02EB227102C93E1BCD06013E5BC306013C06FFD60A04D2F6B8 -:2002FB0002F578C4F402F1C63AC30601F5573A33023DBC21A00236000165020A5EC21E039F -:20031B001E222FB7CA36037AB7FA36030A2F02CDE9027BCDF4023E6DCD0601F1FE0BC24386 -:10033B00033E21CDF4023E3BE67FCD060136C3C919 -:20460000112A460E31CD0500B7CA10463C323202112C460E31CD0500B7CA27463CFEFADAFF -:0E46200024463EFA323302C3FC2C1C001A0062 -:00000001FF - -C>SID WS.COM -CP/M 3 SID - Version 3.0 -NEXT MSZE PC END -4600 4600 0100 DAFF -#Rws3.hex -NEXT MSZE PC END -462E 462E 0100 DAFF -#Wws.com -008Bh record(s) written. -#g0 - -C>device console [lines=44,columns=132] - -Console width set to 132 columns -Console page set to 44 lines - - -C>ws \ No newline at end of file diff --git a/software/CPM/CPM27_WORDSTAR_v30/WIMSGS.OVR b/software/CPM/CPM27_WORDSTAR_v30/WIMSGS.OVR deleted file mode 100644 index 4d804ea6795bd876ce39a69bb6ef35219c7f2288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmc&yJx{|h6lAW{KfrWjsZ_eNrD=eOD2)M%Ztq9W9)QLY8;H$;*o_t28|Anoh{&UShuTn}SB z9wSc6D9@K!8O{Cq#4%i?WxhxzA)Eo%ZdCX3GPItOXh2VqoXK^XCsMQy5z(FfsCc`CX}aXdQ@rbtf_iiSX~x7!Tg*FCA&0ZXA*uQcIJ#% zZ0je>(_)m9kkjH_?RF%mE2|un^rP~hkQ&>tWxu&hu+&}4njF)a+QwL~>Gi+Y)#caM JV%; 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 diff --git a/software/CPM/CPM27_WORDSTAR_v30/WSMSGS.OVR b/software/CPM/CPM27_WORDSTAR_v30/WSMSGS.OVR deleted file mode 100644 index ece7473744d83f35fdfb43f96dbeea71b3abdeb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28416 zcmeI5Yiy&}ncvlDFk$ZUVtq2Q-Lk8MKAhLwAe+bXn_Vr(O^F$+wB6Wu|c!#qL(jI@5GsnGZT!R zU=#F1fB)y4_d-f`F75VHUwI_*eb41N&w1|8b6$UaV!{p$}9P-TdU`DE?+7+8>a4R z#d@)Jv$&XZZoSvvsSlfdcPV$Cfm?$?bFbwZtv7}P_X{8S)JG@&(NyhV;=}*q&;Qm( zX8vO7FMTBQYaiSH%m3pS_dfCV)2&Z^<S8*!ll1?>7QTvlS`K`|Fg^g`tt8z ze(Um|UjFEdwS%WFUwrX5Ui?=tK6)|tQu(FY!9RKKM^pdnFZ_oqH?IAD`Gxks-1}SW zzx!8juGJ1M+|a1e&nvTEeCgY>h1_>P_hV-Jquh6M4|Bgw@2|Y%f4=e3H~3UL_>-4D z{BrGJ@8vJO{Od1&?d5l0e&LmaS8lx8dG$ZNT08jitAEPxPt0AI`<1!BG52e8e{b$9 zbN^=Uzs|ig_vDqoeX(}%=_@Z@sU2+b?>G4Of9EIT(%0vmeq7mA+^k!2E3V{1jizS!QWa?k;b!T@*#yDoyTCtp8P4zFi!hW+00WJ31uWOo&yXA_vRvK>DbM-re zVe24P_^VeMMsLPGRes8beq-};}F1Guv?P0Hf$GImy_aXWpyQ=%8c%0-z z2CV#_{6xrJbq2<2v)x&3^;ymMRrd|*hpkS>n8zBNOpLd)?fTg^EE)n>PVU~l`_0Gq z-+A!82M_N({?WfWzOXUu3>|N|c-sel+cOZCQP+N} zbLcv)*IS*jIo}V6v1WYD7;YkToV@qw8*kLR_>aH! z-o3{sfAIbH9z1&Z?p?;>T6CVuo6f~V?sqM*iH%i`$Lgke#yCu4 zG0G_0>E>yQI+@6PS)e($)a$#0<{RyUqXTEio8CR@bR67#q-{LxH1Eu0C&5Z+?*^?7 z4C9uC=#nA&lH0oDhIbCz-95K?ZTV6zG;i#;2Mpwe{_QrSZg*NJgWLPCeAB(wy5neY z*r!EnC&v_-iHvJh-10_s8P;zUv#yFVsk_;nTWIa}`YqpB^UP-5o!$|U-|;wh2R%f> z_ECS(>(9B(`n>-LDeMljZgVmE-f!>i4|DWc*>(GO4uPaOZ1=jZ+Z(!_)&Q#8$!aYv zx4Dp;WFbKHoum9ljyN@29y!q&d_rG`l z;d{n+#(BSc|DF5q-M_1?JGuMjgLmJ$|IR!29^QZSgLm(qaP#EuAH4US`;Sjf-n{?N zZe>`o+ujGYS}v>gUu>=Jc=M|B-|4!!;u_5@rr%s}HKFu?o721f-ho3PbzQI9xibTN zn|XH|-5thT@?XMu&==z|*DmAT#7aQjH(aHBuClbm$j6)4JaM?q>u#ab+kQ>s6T^Ui~ZZwKUY_jnT?@RJ?aijB2e*%iAx?y%W!BJ~gVk2fo>(j9E~TTr3D zfbWaGi@m%@mM*LyDWw+8DwE9EnHw?}ujbDscaA5{U+^j`kwBl5I##?jsVegR9 zwtEK$P2gmbQx{g+TCHBGLD>0u+hW@sYX_;@9ov2py5A-LHH?&TlWub!wwq+StX)G6Ob3DH}-}ad9?e3m~L)Cj_erVL|Q9s`b`^uBG`GN3gD=kMo z<2{1h=le$P3|yMu6^-?wv1UYMbVSrFt=w|giyMebXbv)lfFTyhE|P? z42ttwmAf^+)f*0BQlxv>##VPRP&qdPLuk0#{8nqP-R(+9daY0}Jo(S={OqgQh3xh0 z&1{vSk)Qq7T7CLQTkXC$zuoH&+ufty(ZIOXt*7sJp4CL@E822N?_zn;l~&5dxu}8U z#k`j!+}hx?C(-CRe=)>X%8OZ8s#*d!Y`?Chc?kn}V=#p6_jD_7d*|}p9vp2AhV9|e z5IkknvzTwVa`9FJWxBeWFE0YX4R-yo)f~Dbmeetg6V#0cORkCJWAZ5x@Ha4jS6sne z=V5FP^ZA1WyzHw}0v_=#2EUsU@OQ@qyrll!Q2{SAqV5qmFtS(-81&zcHv%E_hsR4M zKiv=y%OTE#;eCdHFJdzr>x!{%xjZ^}7T1qbgp0y)7nj?xyQB2XcOZ z5&*o?)1Zt8n>*d?4fkO*jeab{1>Q4-yNaEab6$E}|GA}yc&@m((l}So-xT*O&M)?) zZ6(#at!(R7dx#Y{UvIwN%A)s>Vd9PE777Q+nsKZ78oIhvDO~rgw=nP5Fu->oy6f{o zz25}qmgkot!gIkkq_g#Nm1?nOp@KSmcXR%rce54kSYf`Kp+nC?Mf`n`Rer8;L z5y&mZfD|Ydk-iAATB{jT(E9v(za4jQ*P;Q8z%uT6&_<|YrF_)`Uzy*oFrA(vM~d_P zVz+r9Vd|>$zXZICEA{JiT3o3W3yn%`19(gGrQV)-Es5m8WlfwATtl$5QZLY0q%@Bi zJUq8AZuETN1u4W(Mp|}`4$9sj#i{)4hbA=l_?1YP1so`xRY{k$aQPtVa`#*Jeu&X? zav~QEHv^IJwRax9^<5l~`;YGh--DapgB!hhmibtBA`Os&Esi74cnc1b8$IF#mh2}H zvm7?ch-Yh=7s8C&T&qOxv91gcR6}l%6~Whf zL!?XBLe$kf9wVq@cMbLEX-kvZg^6{B`FO+S1MPbubqou;Re2D^toYB!O>+9dyWc$- zL+V-P*Mqb*oU zs{A#h2_}U1=bIfM!3l$r+QaRA?v^p-5KK+n54$yaiyP|IV-aTDoRd1hRGgO&ywz_t zUkjpIHp3wh$y74oJ$W_$-ap#X0Cr(-%^x<81_9FLdA7cPXugH))yZIACU=8zdLz4@ zEoN);^z5Sm@J0A5dkMS_CMV6Xn;)_Hm~O()Ir=+c|0--H=dnS9H2?o3<3f>$Z+-v% zTMzENb8_W_}0cL0D z>ZZlH!!{h*YHsh(*m!xDKebtBdXEcEJ5SsrY`WOLGJ;_nuZ-`L-e_)~ZCqgetckb= zA};G%v5?`&)=MUsP?Aw$o9o9rgZ(jh>M=#xcuTIDCL8OCWT}|aP80l@#s$)&9`TIt zdNm#|COi4{O#k%pk%? z-C4!Ko_J1yV=OE=c4PcMVNb??1@?!Gq3r?^pvVt8Bar~_$Nm|27d7+tgNN^){L_;^ zy!SuRHe&Vv_~0S2+TZ)Z!?$AX54pYh=<)rNKYaA|+p-cwZD%R}l2cgTf(T)QjtegA zv^f$6{P8uHM(LS+U$c?Ccjt#X#A?7KVl=5@v@R7emSJd?}e=_rO|ghsD* zOa)Jv(B<(W@`vb@C(_i!JQ@N*o0CNMopG_xtH@k?5TbG#<=#3PXd`6RLDIQYDXn{gHe z1v^ks$U#aIl0k;MGZuITXFu_Ze3OK#G}sx=!%sKZ>G>G!G?}@Ri9h>`IC(vC=4E$# zuY~Ap93#NqP-a%qYx7hRkDR`QLR)BiOu|%WqR_Q)H*_X898B^kNR*ktByx?7YLO6c zRYA)FbhT1mEBa6Zv^?>YZif)R56t(oq&YP zmp2;A`cN#@i@8aL4NWiL=P};Rd~E}>p;#pN>BGX@tT!rEAjo|7v!8YAd5SEEY>2(q zYZXSiS*+EGmbl82Td%Lyuhw&wn>9B(>n1VSD&)&oNtxxZ5=U9hZvYMnnnIrJ0crwl6KSON^O<0l#Q$- zr6BY7=1OI)?iTWe>uXitX{8==6|i(>vQjQ>xcm}eSTN1;w7ym-fKJW5p}2BY6%C6s z>?CLeOx9I?p`nlxf$I%d1@CU5R?J_ogLbll87HV3UN=5~~ExqYtZnuFI6Xjv@k=q^edXh^_Xwm~T_Q7yZN0R#c_Aq+m;eCK@~TEo(Q7Nx`jK3&A}ku zn|yZEmB7kjr=`jn5=zN9bX}p*ibr26O_q%QexD3&Nr_E;(k|axByou%gOJ`Ic!&QD z0+>DtK8T#1){bSqX|6689gdiGN2xC`Yo!6x7iL4;V^+d9b|7cS%N)iz7InYiM0=#a ztmD8NFbZ zsw3EXf~-D5N1X11aBx$(xSnn`eLm|hWZlKAWZd3ulodvp~)Vs6D=tcS)lX;SwDwW}`?aFy<89n?o? zwMfnMY8PuONPVzZuB;0iLfGl&)5P|P5#XQ`AM7fnrxg6m7t~{o6%JJt674A5Lmpni zKgFIb6bP~S>a0QUs89CAW5h29+NGJ#q@>GV1}s-g^&x^CzXQmj-Q6o-&@NFTZu^$# zC2qj<&?SqWZsZrth%m20Q(keeK;RvVCJbh-fJ?|&F$8nX239XJ*e82*#qGD<7E$S4 zb4pZ4VjB#@XdK%J`jX*fQxS(qV=oL?=Qfou0*DR>Gk)7fOf62u2qLaBB;sxxa`J)r zbKTbMq`XK|BbURKIT2;D+IANfHgqeH=PO^>{wB=*Mw@tvkQ0^RdFUa8r_f{iVuU4% zzA*a=;R5aQfHcrvdkF9pakcvG-i{eVwwV-@9EMc+`PoY;6HV1Ml-9^8Fee0(luR+-`$9f>OqasSvw>)n?=-A->p>+JK*$sF_Hf ziTDS~J=h}QC^4KGm}3Y|R4x>AlGQP3ml31A+mYowQ2ImzX;8o?*f~&HkzJXPPt(1WA;Wjwp5VP^mz%v?E7M7$j-o!f$J>M<&A{$N_{ypHkJC5Q9!m9D?#9H zRMrq}8`x#5Zn1(bC}V9|R$H-LS;MefEv}OK(omvJa(Ank9rcyfwNfKrF3L`d2gR(5 z5^P4zCRWYtQIjyKTVIxevRbTNEzU;GWtH0aWcLLwk~F`7nTYk8YB;_Msjx49nWd*#4Jtxgr8?{SkL22o!82R<$PJn$9OUzQhUIylvgkTVphsGsnA|@ zA9pIDMR_67x&3kXDWilXtnEb!`KO4Z-*%sfDBZIF#^Y0NYGX>&5$%`lLDo%`?JiY$ zn6%W@t*Om2mN--V>{sTgU;Km(jCMd6zz0Dz%VNN23f8LBp|TL}OGkKiu+^OTQT0Zi zx-(2;v%1S`s|%>}=~SP%5JuVu$IJXGZ{NRP7o|UZ<1ikSLT%;>9F!jULTF@;$;Vw~ ztsyIYdgEMKh5}RJ>HB+r1N@L{btn#}#4X_%F<{cXzE;IQq0-UdQk#6kI6Bp)nh*VH z1iv~@3@}e)T~3&KrpB~Ht*m~_QAL$U9yub1Q_?Udf%g@ML0(F{G>~MSCSf@gVe=l zLQN%N7V(c7HiH6kVx}NWqjCv1y?K3cCXzo!PqDlS^7qeLmP)pp_qWn$nEW)cEblHY zA?34YJCQmsQoT}FRcWb#j0o_}V9qSF^@FE{nciN>H+mgAJmJD317UC z_?5b^Y7j&UUWi@O0!FvUQ<8`)2WJ;In2~*dAvD#~_xl<9hbe-|idamqUawbYCaM)X@k7qwrOQNBYL(ScmguId)kY=1I5Qyx zj#>~IL|x6>8=(Y%4SeLeKWsO$}hkG&Q`01 zgMm<>W903$_(G{78A{`|S`iOf2n=(Do93=z{RHvo9W@Py(-#W%f8Op9=6$#fUs0!~ zw0IxOn)nzjYmqniF_^W`?7lEG!GvvWqDp?23=1<3P-(g6o_h|oU?YVJCGJ_}(w47v z5At?Wfu;q>v2v3b)U)AZv8H&FsL57*DmaKe5H$dE6Ux3*$?pOABubxZH3B+26P_Ts z!^V26z&7hCC`e{8#dWv|E#gN5W%O+wpOgtM)4JdK(vb@0&6$<=!V0(L#^U-MbuB28 zn_)-eu_p)$Ue$g>7#t=mu2vg<4bOZbek2ZGSn&ZaO0K+_n$QR02d<8+aqvt)F37zo zJQvCH+L{lQ<$3O>wcyBU5{4SZeN%LZnocR$ry^1WD3dHnucXkXO^dd8^i0uF7oUDW zTkz9-oijd7s$P%>HVPXYmpyLpx3*u4B3S0jgFVA9wk$f-p6ggd1}#-H6r0AiCSKox z+Yh*iaF|7vM5h$R8B%6NN%EN!hru$qCIqDL716A>EusfV%^eGNv4l{*XYsNmW@T$M zvmGw}6r3#)x}kGA5|U5K`ZU?+4N!!p8Q?yqAUpK55@cIU$a&9#CXq)1%cYc~q^iF_ zay&_xmwi%H+vNBcVv8$*1&OJxU)YFAN+!LJe(A)EDh6>0{EZVcjH_mvT6K{XcQ$ub z5^?@IUeW~WV11%4}pD3*`v?LeNZXz68kW($!oe_uop57*8G099yOzsG{ za?j-!mmo(>a0FNFX7nI7A5F0I6gOxNn~v2UVSx4FexwGoj$q++vi@R+5J>21z$DUP z!Oo~lJpQ7FZN0Hiv6ikcdqo&R3-$-1;HdzX) zed$})>eQ{8jwp$hB`Iz_+!kZ&Ld@Rr;Ru!1Fj?v>Rn_*M87UVch^l zgl)HJt{lCh7SU+~qo^njWRS;`P%?A7Hyffj+r1ry#cbgL-gIa!OUBrE2|PtWTI9{= zBMiIt9eqYYUqI$aM%KX85~KdoyF1#wj*1U`08ttG(Utm8unM+?iPXAD1ECCRWRh@r z*>GP5u1`TnlQMZ)C<~OAV)t>X^GKJsSj-owq)3n}L$Y41LW9^oIzWLhq}*9f7At0{ z0_p5ou9}}zsIQveqpmXEC>|85u4|7BJMCS_22C`?&2n0}Hp_~9j3S^9H4EEJ?@D#D zazGffsvxIFHCYQU7*HFAcFT@PD_9WMrtu(^Cq4OD=d$IE*uB%uZMx~;5`kibl!o5moEE2t{wQA@sn1f-j&^5 zCZ9vX45{m)ejk=kt(rs#rI1lj;uY(h3$-04xoGaaTmx2llZbON(I+og6MZ4t>gs&P zE@zNibM9%EBhVfSt(J>kjhJBbhgPgDO~T@1Xtqe(yk-zBRif@om0r(0ZJ-W$HNVec zM`xlzlFro<)B*M}^jxXc-5c&h%)_1%QUSF{7^9xa1QRd4WD~D8)HhVza0sK(JDhXR z`qrGH1TsjjN;HH?VG`0R&q)3yV~*I^dl3W_!| zfvE9v@e2TqUsRAp*n$sw?!^~v^5s<~Uk>`(12M;81h5&nWUDp2tyrw&kjXIvMRk^d zzNFqu0nKOhX5HFcrrY(6v})^WaLco|AWz5=W8?&X+U4s?xnPN`;1!u_(z_LKiF8SB z*`mC zt3cMFbJoN&!o}B!!%msWu`2ScPoHr*nId-!0?9p@maan)DuFozQUG@Z zkP8<_MkfDv-fqN$8v)d70yL@jJvUOTTO$E2sK-|vlm6N@DmRwSA?%%-T5WIld%mo) zjm1Q0b4pn&jytB9ty0#!;aX!IB!!MJMv&~o5a8QE7};S1tj)cy^2tavGOYM*cE#PP z_rE|)fQIxfc8J-7iEWAwVM&m7=ZJJ~#A~uLWUZX@)x@bK5XX(;W!nF|xj<;`_6zh3j@Z@MY4ad0@CvLPm2UX=wFh_PMiyU|f1NZs?A@p%D~ zc34R05{ODzBKE=zgdAJJ72nhl&^zKKSnK8+lE8g6+`z7ja=x=K4CtO)T1g`)@-w3} zvT&3zTyAkSdLslksWqVZVbfe>1L(N>LfG4I@lRsS#f;y&{O#Qx&&v2c&8sRRVF~cKbBaf+bE^A6C;%4yhf^wu+s(?Yq^sIf z&VviAN)EgH>^ny+K*c5gNhmf+NZQb)>O|R8EIfwURw+5D?%F@3(FM&~PiBo`6+Q{5 zS>x_rjGLXKqc3uFNo!SQfkLyK=48Jz-ltj5ldo^mq}ez348p`SW?BfG%hR|?Y(=)@ znsA|vY$N?)D~Q2Z7C7~~51_0jP$Hh>5UUqca@|IEnimLA79J=^jZI&5qgrq?7yXLj zzHX^7-{o>kCI1)VhNe1Av;;&2xJq4s$UuiV^<-YuyDoiUD<+nKo8G!J zY(d!;)bzvXcM{wP{FICw19jHO#(LVRK}K4=iU*qHP~YOa_plz zbES7_A{Hl0rTo>jgVwh(xq)U3D&~@|rhPv20qL^h{ht6eJNBuBbHBr0>;lm`^IV)B$2(2yk z0$0e2;YLP1gp!OmuiUgRKnOv>nb4!EZS&0(=t41gLnbJj7>3Fy44&RG2Mka@*1{Dm zg$0Z3ib;2S(ZGhA=tU`4;1!dTzSE5*dfmwLtE30mLa?cdH#|^&2)P5YaALV)Ug4BE z5YkHmVhR$lJ}f2}I)nj=1kov6*Na#D-7p|^4GP}K0WlYbm5j;Ytov(3^?g!Q-iw-f zO$0{e=!RMzy);8sb|N^8UZZzv_!7=U@c3d)V1zzWl1CE8%T-fF(j}1~iYN7jUpJ*Y z^`Z|@92pUK<@Q1!NeD%gXGEFW84Zoyu-_sygB_$ZO3qfE6z!2B?_>A1_Zfna9NqFk=+38 zNH&H}Xk)0-ev_VI)A~9da5OZe+SlCs#xqCqUy+co31ccjQdpHn-j`$O=t`Pi0(2L^ zqk;{AN`P*+-G@G6H4S`Ln0MXQ4d@*ESG_*{GVbDNZx5A``RV@Gg*WRjLW;0IEgI7e zt=gC4+VCkQK{v0jBid9LDZ|@MM<9pN@rT(wi|E8q8(EnMiikZ)a4_@c^@0bB3jaLqr*SUI}1%BzbcS{)iu%8_6~XS(zhAFd|}^D-Tk(q+p)3v!gsOuGLDB39qGI%n z;XgHHL@ZwSjuD<|6JX-$Bd z6)u?YvjI-1^9Q-0+M1}eoHi}cPH$aMGKz> z)M`HS240YJ^TN1uGo{F)Czx?-NS03&+|ers2TZ( z8wgUkC*qFp=WL%E!N`(nHRYe#n;fPhp;wU-GoFdIWsHwyZKy%e9>jF))MT_NkqnUJ zlqgP-+MH{cDN!lqVu9rM4)o)+qXK;xDlXGd^9VB`LKPz57iKSBK5q)cgXfty(Hf%4 z3c3|6h_|EgR%8K6R>%Vi*03L=ST9iI4W3Nw3wR#~_u6DGNY+XX8L4ALh<#-#qY*z?8jON7%Tz?)83FxU*@Y)(>z)LFyUkDti(0X|KjiqDQ8N+-~u`x30EG{Z< zj49Fx(wc{bhF-KSnun#6fgHplZaCcUAGuc}#tFM3UnUp}LCu>#BQj504Vnh>u=hO! zcgA3+jrQX75W)M2A-@*8Q6&X{Bilh3ADx^1kY@wIrgu70j+#_&AoF3LWYe!mdJ!7( z7Oc7|7Y1l>jJ=4FrXJ!zC7#C3qLqM4gsoTik(r9cvtZd^6aGv-CS(lvQw@l=PIz@- zPVi(z13EXTV169T7RBa>l=; zDQu(fDRJS8f?Cdt7^O3yqCk<5Q4+pJdG`*p9;e3bQ_oICp(Vb1H^8#aQK5+5iN^4H zGAh9QiK6v-; zdkAWn1z_4gnpOQ151#~qo!2#g-Uum-h!%WZHM5pY=Jn!EF@PXI(*t14!Bs#4$|Ex( z;9I=F(a|`j9*0fxs_fzf0@(-_Mdd67tLrT)3NYmd!`Pm(;bQSoN3f=FDK56-QHf?@ zg;X8K9sH}0gz!-M7NK2YBH}yZ{8G}`3$jqWMl!C)ZWzTp`)+Drc#Xqn9ztw?mQy+c;q3 z)Kb(%bB+^*{NJ$g_JaQCKp-y$FP7{`SDY5IW{ks?(1O0$sZsyZ=OlpRA;`L~e(iU> zzpf?uMp8r3vN4;pePQ1s@ zZTO5;<|glmvT0&-Li9ySCL+nm#DXn(6@s_2?0*drYqBsdNgdu=EQr%X`H(dd+7zhr zLgzv@$Y5o%G)DLw-m^gu(*v?5tgGJyqd9K*D0FH;d>j)TCMtNN6ED2twMzbtNOheI zbopA5N>-(bKIj!znF)D^|1ak!->Cmb(c?Ei+JEyOeD2ME_zPH(ke}Xt+3$7R+bC>3 zS0Rv+DL5F-ZN0Mtgv*=gbogI8D3V0vz4cLr@yy1I&NPUULvcoqF(3Wx=i~o>k3U-s F{BLKrr*QxP diff --git a/software/CPM/CPM27_WORDSTAR_v30/WSOVLY1.OVR b/software/CPM/CPM27_WORDSTAR_v30/WSOVLY1.OVR deleted file mode 100644 index f4944d1f7af20e8ee06ee00029da481265557005..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34304 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%0AdbI6gH;P{Eu#zF4;F)rGC)xczJ0nTf1Wgu~P# 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

    H$JG~D9;U(}c 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 diff --git a/software/CPM/CPM28_PLM80/README.TXT b/software/CPM/CPM28_PLM80/README.TXT deleted file mode 100644 index 8132758..0000000 --- a/software/CPM/CPM28_PLM80/README.TXT +++ /dev/null @@ -1,128 +0,0 @@ - The accompanying software is being provided by Intel Corporation in -response to your request for this software. - - This software is considered proprietary, is copyrighted, and is provided -to you under the same terms of the Intel Software License Agreement provided -with the original product at the time of purchase. A copy of the license -agreement is included in this file for your reference. - - If you or your company can not agree to the terms set forth in this -agreement, do not decompress (unzip) this file any further. Instead, -please immediately delete all files that are contained in the compressed -file and any that were transferred to other media and notify Intel at -1-800-628-8686 that you have done so. - - The software contained in this compressed file has been virus -scanned prior to compression for the protection of your system. By using -the command below, you are agreeing to the terms and conditions of the -Software License Agreement included in this file. - - To decompress the software contained on this media enter the following -command and parameters at the DOS prompt; - - intel [-d] [outpath] - - Where; - intel is the compressed self-extracting file - OPTIONAL: - d is used if you wish to retain any sub-directories - that may be contained in . - outpath is the destination directory path. - - EXAMPLE: intel -d C:\INTEL\MCS96 - - BY USING THIS SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE - TERMS OF THIS AGREEMENT. DO NOT USE THIS SOFTWARE UNTIL YOU - HAVE CAREFULLY READ AND AGREED TO THE FOLLOWING TERMS AND - CONDITIONS. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, - PROMPTLY RETURN THE SOFTWARE AND ANY ACCOMPANYING ITEMS. - - IF YOU USE THIS SOFTWARE, YOU WILL - BE BOUND BY THE TERMS OF THIS AGREEMENT - -LICENSE: Intel grants you the right to use the enclosed software program -(the "Software"). You will not use, copy, modify, rent, sell or transfer -the Software or any portion thereof except as provided in this Agreement. - -Intel also grants you the royalty-free right to reproduce and distribute -executable files created using this Software and any runtime modules -included with this Software provided: a) they are distributed as a part of -your software product and b) you agree to indemnify, hold harmless, and -defend Intel against any claims or lawsuits that arise from the use or -distribution of your software product. - -You may: -1. Use the Software on a single computer; -2. Copy the Software solely for backup or archival purposes. - -RESTRICTIONS: -You Will Not: -1. Use the Software or cause the Software to be used on more than one - computer at the same time including using the Software across a - network system; -2. Sublicense the Software; -3. Reverse engineer, decompile, or disassemble the Software; -4. Copy the Software except as provided in this Agreement; - -TRANSFER: You may transfer the Software to another party if the receiving -party agrees to the terms of this Agreement and you retain no copies of the -Software and accompanying documentation. - -Transfer of the license terminates your right to use the Software. - -OWNERSHIP AND COPYRIGHT OF SOFTWARE: Title to the Software and all -copies thereof remain with Intel or its vendors. The Software is copyrighted -and is protected by United States copyright laws and international treaty -provisions. You will not remove the copyright notice from the Software. You -agree to prevent any unauthorized copying of the Software. - -WARRANTY: Intel warrants that it has the right to license you to use the -Software. Intel warrants that the media on which the Software is furnished -will be free from defects in material and workmanship under normal use for a -period of ninety (90) days from the date of purchase. Intel's entire -liability and your exclusive remedy shall be the replacement of the Software -if the media on which the Software is furnished proves to be defective. This -warranty is void if the media defect has resulted from accident, abuse, -or misapplication. Any replacement of media will be warranted for the -remainder of the original warranty period or thirty (30) days, whichever is -longer. - -DISCLAIMER: Except as provided above, the Software is provided "AS IS" -without warranty of any kind. - - LIMITATION OF LIABILITY: THE ABOVE WARRANTIES ARE THE ONLY - WARRANTIES OF ANY KIND EITHER EXPRESS OR IMPLIED INCLUDING - WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR - PURPOSE. NEITHER INTEL NOR ITS VENDORS SHALL BE LIABLE FOR ANY - LOSS OF PROFITS, LOSS OF USE, INTERRUPTION OF BUSINESS, NOR FOR - INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY - KIND WHETHER UNDER THIS AGREEMENT OR OTHERWISE. - -AUDIT: Intel reserves the right to conduct or have conducted audits to -verify your compliance with this Agreement. - -TERMINATION OF THIS LICENSE: Intel may terminate this license at any time if -you are in breach of any of its terms and conditions. Upon termination, you -will immediately destroy the Software or return all copies of the Software -and documentation to Intel along with any copies you have made. - -U.S. GOVERNMENT RESTRICTED RIGHTS: The Software and documentation -are provided with "RESTRICTED RIGHTS." Use, duplication or disclosure by the -Government is subject to restrictions as set forth in FAR52.227-14 and -DFAR252.227-7013 et seq. or its successor. The use of this Software by the -Government constitutes acknowledgement of Intel's proprietary rights in the -Software. - -EXPORT LAWS: You agree and certify that neither the Software nor the direct -product thereof is intended to be shipped either directly or indirectly to -country groups Q, S, W, Y, Z, Afghanistan or the People's Republic of China, -unless a validated export license is obtained from the -U.S. Department of Commerce. - -APPLICABLE LAW: This Agreement is governed by the laws of the state of -California and the United States, including patent and copyright laws. Any -claim arising out of this Agreement will be brought in Santa Clara County, -California. -MPS0026-1 2/4/91 - 466864-001 - INTEL END USER SOFTWARE LICENSE AGREEMENT diff --git a/software/CPM/CPM29_ZSID_v14/READ.ME b/software/CPM/CPM29_ZSID_v14/READ.ME deleted file mode 100644 index 9b9e8cc..0000000 --- a/software/CPM/CPM29_ZSID_v14/READ.ME +++ /dev/null @@ -1,10 +0,0 @@ -This is ZSID v1.4. It is a Z80 debugger. There were evidently a couple of -problems with this program. The files in this ZIP file are : - -ZSID.COM - The original unmodified program. -ZSID-FIX.DOC - A file describing a patch. -ZSID-PAT.COM - ZSID.COM with the above patch applied. - -ZSID.PAT - A file describing a different patch. This patch has NOT - been applied to the ZSID.CON file. - diff --git a/software/CPM/CPM29_ZSID_v14/ZSID-FIX.DOC b/software/CPM/CPM29_ZSID_v14/ZSID-FIX.DOC deleted file mode 100644 index 6052ea7..0000000 --- a/software/CPM/CPM29_ZSID_v14/ZSID-FIX.DOC +++ /dev/null @@ -1,74 +0,0 @@ - - - **************************************************************** - - PATCH TO MAKE ZSID.COM THE SAME DUMP DISPLAY AS DDT AND SID - - RESEARCH BY DATAFACS SYSTEMS, INC. - - **************************************************************** - - - DO THE FOLLOWING: - - ZSID ZSID.COM - - S125F 5F AF <--- PUT THIS IN HIT RETURN - 1260 ?? . "" - - S12C0 CD 00 <---- PUT THIS IN HIT RETURN - 12C1 ?? 00 "" - 12C2 ?? 00 "" - 12C3 06 ?? <---- LEAVE THIS ALONE - 12C4 06 01 <---- PUT THIS IN HIT RETURN - 12C5 ?? . "" - -* S12E1 CD 00 <---- PUT THIS IN HIT RETURN -* 12E2 ?? 00 "" -* 12E3 ?? 00 "" -* 12E4 CD 00 "" -* 12E5 ?? 00 "" -* 12E6 ?? 00 "" - 12E7 13 . <-- **** DONE **** - - CONTROL C OR G0 ZERO AND SAVE THE PROPER AMOUNT - - - IF YOU DON'T TRUST THIS SAVE IT AS A DIFFERENT NAME FIRST - - ******* HAVE FUN AND ENJOY ****** - -* CALLS THE SAME ADDRESS - ------------------------------------------------------------------ - -Addendum by Bob Fisher - De Paul University - -The above patch MAY work, but it depends on what address your cpm -runs at. Try instead the following: - - S125F - 125F 5F AF (SAME AS ABOVE) - 1260 ?? . - - S12C0 CD 18 (PUT IN A RELATIVE JUMP) - 12C1 ?? 01 - 12C2 ?? 00 (THIS DOESN'T MATTER) - 12C3 06 06 (DON'T CHANGE) - 12C4 06 01 - 12C5 ?? . - - S12E1 - 12E1 CD 18 (ANOTHER RELATIVE JUMP) - 12E2 ?? 04 - 12E3 ?? ?? - 12E4 CD 18 (YET ANOTHER RELATIVE JUMP) - 12E5 ?? 01 - 12E6 ?? . - -When ZSID relocates itself an offset is added to bytes 12c2, 12e3, and -12e6. The previous patch left this offset to be interpreted as an opcode. -The result can be benign or disastrous depending on the size of your -cpm. - - \ No newline at end of file diff --git a/software/CPM/CPM29_ZSID_v14/ZSID-PAT.COM b/software/CPM/CPM29_ZSID_v14/ZSID-PAT.COM deleted file mode 100644 index 30423c9694b847ec91be4998a65a450220011f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 D_{sP3 diff --git a/software/CPM/CPM29_ZSID_v14/ZSID.COM b/software/CPM/CPM29_ZSID_v14/ZSID.COM deleted file mode 100644 index 221c0ae6a58eb8209b3fd8d479cefd3fb3cca94f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 Also, ZSID binary is now available. - -Could you please mention the patch from "Dr. Dobbs Journal #62, Dec 1981 -page 519: ZSID Bug and (Risky?) Patch" ? -It changed the byte at 02AE from C2 to C3. - -Befor, some adresses of FF80 to FFFF would be handled bad in (A)ssemble, -(F)ill, (M)ove and (D)ump - commands: - -A>ZSID -ZSID VERS 1.4 -#A100 -0100 LD HL,0FF7F -0103 LD HL,0FF80 -0106 LD HL,0FFFF -0109 -#L100,108 - 0100 LD HL,FF7F - 0103 LD HL,0080 - 0106 LD HL,00FF - 0109 - -=========================== - -Some months later, I got a letter from Digital Research which 'begged' -for the allowence to use this patch, which I did... - -Greetings, Holger - diff --git a/software/CPM/CPM30_WORDSTAR_v400/ANAGRAM.COM b/software/CPM/CPM30_WORDSTAR_v400/ANAGRAM.COM deleted file mode 100644 index 0579d843bb6d694c989a7e318c91b56eaca95482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 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 Jo&V2&{{vzjgb4ru diff --git a/software/CPM/CPM30_WORDSTAR_v400/LOOKUP.COM b/software/CPM/CPM30_WORDSTAR_v400/LOOKUP.COM deleted file mode 100644 index 460bdfa30d15c5abb7b91af832e4d2a08c1a5d23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 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ν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%0AUxi@AXbvu7`LKQs;1~90_*v=v>6gF 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 diff --git a/software/CPM/CPM30_WORDSTAR_v400/MOVEPRN.COM b/software/CPM/CPM30_WORDSTAR_v400/MOVEPRN.COM deleted file mode 100644 index 63e864f4018b8d3c101ba5ceecb521b43a775a17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4992 zcmeHJVQd@a8NN&63vqJxeRtNRM9TKrXDD@oDM?kdD0P}9F^x!U$99M+HWjyV8dJv? z-Cc094pWJL{MnzukFh_~eyp3u!dRKNbt;KX5I*S&?#R?d17yH#!`mb#O6ZU-d%rt3 zakX_~fA}%wPX4~{{odz&-uHdJ&z6hda8MN9d#F1;dl-C2%ok(2bNH9zQR#Y~$d{9E zKg+%X`wHwUu&=Ze zuHfWyN>PHzy z%%-4?Gg3xPq%xMMP&v7VW^1&?IY*jZa1< z#y~AgAM2_rCRtowX*fSi0|iSNd|FcHaUDq{Qj$s5o}Evfna5d4KBwT*Nw^i+6rfh5 zCAjz&IXN8o&knLc1EeMI?ODCMEqeDqxHVQSAK_^BKI)F+X4~GONtX%x{?W z){WM;nfDlqDlu1?-!a#j_Ew7eqPV{?2E5;Ae#HC?*e)|`%!{p;THj~>418}eZ!v#h z-eH`;ha$1@(0JS%iw{TRUJs!vHk=RIdB1k?Mw-N*6k?2_5G)@dp z1j%P2$V840k31YRhlnjQJOKb0qBEnmNGv{zaVQ*}oEdEyjhu)@M#z9MF{0DQ%>mn@ zX4Szrvw|<`^QQyP4K=2;H!Q+f7lPyJ&j(o4MW zRMWTf1sXkRIAQdCvk9%)>lCbS)>&Nob1h^la0)yf()9Zqm8FPie8Lcc3czbq56c@*Opp z&^yGa5C=3@aWFXpYyWWSPjMn!_`n%B3M=0>9USSEcgO;7>Z-uCK|Sr43GdlN>)${VyR9j*7rFricoz{4EDTO__5P*AtorZnuN$$1Q*A8uLRv&UhcfL<(QCD0&*Iwo}kV^Yxnx-ke%C8q* z;=llH;9wAMFTzQv^y0Dzl2pp;C4C#JF)tU|p&2SCLaXm{dHC=`3tPC#6+htEa&5WK zpf`1!P_9|v5=gQJYHV{QD8EQij<%wWvXtsZ`YD&lzFu@7Ky;&0fQ5~Ky?Dw6)q*}@ zUdw{y9aJadIzoxI!Vp3iC`XrWqbk*!1HoJ#1jte89_k=@=nGUE(=G}*-d1=V1$K%n zC_q8=`4SN3@`axwi}liNtk1#`)*Md4I;dSjJx6x*01v^xye(MUst3P|0L@wGcL7ZS zw9){DZ$zP+w-R;pjpZ9=qOVw?-TZE%uknplzIqvnHHQGGLG9~Mhgtt-6~48dt69-} zE9H{GU7IIGKF%A%Tl2gzb;}G;^=`Fi_^PE9(7AywAJ~Dt##Gu14G>Qq@7MS;1C%^7}C zdqU{xuy%M+V8OH%#$bM0FuhL;J(g1}J|-;ZVLO0%fSebY=9Rqme4PwJZQ2h7w(v~d z|GWTl{zRzjvx%+=LRVf}6Rs3~A(S61m2<|Sp*M|z>-rxBV;EMCmb~|i_Z_>(H$)kU z>&E#v|Bg%f*EgyU=0j?Y2 YKnGYK6Vpdi(qF#y-L>=2mg@Qc1s1s(mjD0& diff --git a/software/CPM/CPM30_WORDSTAR_v400/PATCH.LST b/software/CPM/CPM30_WORDSTAR_v400/PATCH.LST deleted file mode 100644 index 7a4a98f..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/PATCH.LST +++ /dev/null @@ -1,1877 +0,0 @@ - ; - ;In order to minimize changes to the locations of User area - ;data, the origin is forced here to 180H above the start of - ;the TPA. - ; - ORG TPA+180H ;Always start user area in same spot - - ; - ;This jump table provides commonly used subroutines for use - ;by custom subroutines in the User areas. It must not be - ;modified in any way. - ; - - ; - ;To output a character to the terminal from within your - ; custom subroutines, call DISPLA with the character - ; to be output in the accumulator (A register). All - ; registers will be preserved. - ; -0280 DISPLA:: -0280 C3 0CB6 JMP CO ;Display character routine - - ; - ;To output a string to the terminal that is in the normal - ; user area format (count followed by bytes), call - ; STRING with HL pointing to the string to be output. - ; Upon returning, HL points to the byte following the - ; string. - ; -0283 STRING:: -0283 C3 17C6 JMP STROUT ;Display string routine - - ; - ;To use WordStar's standard list output drivers, call the - ; following subroutines. In all cases, all registers - ; except for the PSW are unchanged by the subroutines. - ; -0286 LSTOUT: ;Prints char in A. -0286 C3 0000* JMP LO - -0289 LSOSTA: ;Returns output status to A (0 if busy). -0289 C3 0000* JMP LOSTAT - -028C LSTIN: ;Inputs char from printer to A. (Only -028C C3 0000* JMP LI ;works if custom ULISTI exists.) - -028F LSISTA: ;Returns input status to A (0 if no char). -028F C3 0000* JMP LISTAT ;(Only works if custom ULISTA.) - -0292 LSTRNG: ;Send string to list device. (HL points - -0292 C3 0000* JMP LSTSTR ;to string, count byte first, just like - ;console strings). - - ; - ;This flag is used if WordStar is on a multi-user system. It should - ;be set to zero on single-user systems. Each bit of MPMFLG is used - ;as follows: - ; - ; Bit Meaning - ; - ; - ; 0 If 0, WordStar will issue a SYSTEM RESET when logging - ; onto a removable disk drive. If 1, no reset will - ; occur, and the operating system itself must handle - ; any disk swapping. - ; - ; 1 If 1, users can share documents. Before opening a - ; document to edit, WordStar will check to see if temporary - ; files with that document name (e.g. FILENAME.$A$) - ; already exist. If such files exist, WordStar will open - ; the document as a protected document, preventing any - ; changes to it. If 0, WordStar will delete existing - ; temporary files when opening the document for editing. - ; - ; 2 If 1, users can share printer. MP/M function calls are - ; issued to attach and detach the list device. If 0, - ; the printer is assumed to be always attached. - ; - ; 3 If 1, WordStar will issue frequent MP/M "dispatch to - ; next task" function calls to assure that multiple users - ; have balanced access to the computer. If 0, WordStar - ; assumes that only one user is on the computer at a time. - ; If the operating system itself can load share adequately - ; (such as MP/M 8/16 systems), set this bit to 0. - ; - ; 4-6 Reserved. - ; - ; 7 If 1, TurboDOS 1.3 operating system. WordStar will not - ; check the disk drive write protect vector, will not check - ; printer busy status, and will issue the TurboDos printer - ; detach call when done printing. If 0, CP/M or MP/M. - ; WordStar does not support TurboDos 1.2. - ; - ;If you are using MP/M, bits 0, 1 and 2 should all be set to 1. Bit 3 - ;should be set for older versions of MP/M. If you are running on a - ;networked system, only bit 1 should be set. If you are using TurboDos - ;1.3 in a multi-user environment, bits 1 and 7 should be set. If you - ;are using single-user TurboDos, only bit 7 should be set. - ; -0295 MPMFLG:: -0295 00 DB 0 ;Zero for single-user systems - -0296 00 DB 0 ;Reserved - - ; - ;SHARE specifies how WordStar will handle two users in a shared file - ;system who attempt to edit the same file. If 0, the second user - ;will be denied access to the file. If 1, the second user can - ;view as much of the file as can be loaded into memory, but he - ;cannot modify the file. - ; -0297 SHARE:: -0297 01 DB 1 ;Allow viewing (protected edit) - -0298 00 00 00 DB 0,0,0 ;Reserved - - ; - ;The function key table allows you to program any function keys that - ;your terminal supports into one or more other keystrokes. Note that - ;on many terminals, the function keys generate a sequence of characters - ;where the first character is a control code. Since WordStar probably - ;uses this same code for one its commands, a timer is used to determine - ;when the "burst" of characters from the function key is done. - ;This works because the terminal will usually send the function - ;key characters at close to full baud rate. At 9600 baud, each character - ;takes 1/960 of a second to send, or close to one millisecond. That - ;means that three characters would take approximately three milliseconds. - ;There is no way that even the fastest human typist could type that - ;fast! Therefore, this method will usually work. - ; - ;Each function key in the table below is represented by two strings. - ;The first describes the "burst" from the key. The second is what it - ;should be translated into. You may not use string indirections in - ;this table (size of -1 followed by address). - ; - ;The end of the function key table is indicated when the size of the - ;function key string is zero. If you have more function keys than will - ;fit, you can put a continuation address after the zero to point to more - ;table. The table at that address must be the same format as this - ;one. No continuation is indicated by an address of zero. - ; - ;One character "bursts" will not work here. If you need to translate - ;a single character into something else, use the user console input - ;routine UCONI. - ; - ;Warning! Terminals or computers that have their own type-ahead - ;buffering may cause problems with this approach since it will be more - ;likely that characters other than just function keys will be "burst" - ;into WordStar by it. - ; - -029B FUNDLY:: -029B 00 DB 0 ;Milliseconds of delay between characters - ;of function key burst (if zero, no - ;function keys are implemented). See - ;section on delays below before adjusting - ;FUNDLY for your system. - -029C 01 DB CTRLA ;Character that starts each burst - ;(set to 0FFh to disable) - -029D FUNTBL:: -029D 03 DB 3 ;Three chars in burst -029E 01 40 0D DB CTRLA,'@',CR ;Function key 1 -02A1 02 DB 2 ;Two chars in replacement -02A2 0B 42 DB CTRLK,'B' ;Mark beginning of block - -02A4 03 DB 3 -02A5 01 41 0D DB CTRLA,'A',CR ;Function key 2 -02A8 02 DB 2 -02A9 0B 4B DB CTRLK,'K' ;Mark end of block - -02AB 03 DB 3 -02AC 01 42 0D DB CTRLA,'B',CR ;Function key 3 -02AF 02 DB 2 -02B0 0B 43 DB CTRLK,'C' ;Copy marked block - -02B2 03 DB 3 -02B3 01 43 0D DB CTRLA,'C',CR ;Function key 4 -02B6 02 DB 2 -02B7 0B 56 DB CTRLK,'V' ;Move marked block - -02B9 03 DB 3 -02BA 01 44 0D DB CTRLA,'D',CR ;Function key 5 -02BD 02 DB 2 -02BE 0B 59 DB CTRLK,'Y' ;Delete marked block - -02C0 03 DB 3 -02C1 01 45 0D DB CTRLA,'E',CR ;Function key 6 -02C4 02 DB 2 -02C5 11 46 DB CTRLQ,'F' ;Find string - -02C7 03 DB 3 -02C8 01 46 0D DB CTRLA,'F',CR ;Function key 7 -02CB 02 DB 2 -02CC 11 41 DB CTRLQ,'A' ;Search and replace - -02CE 03 DB 3 -02CF 01 47 0D DB CTRLA,'G',CR ;Function key 8 -02D2 01 DB 1 -02D3 0C DB CTRLL ;Repeat last find or replace again - -02D4 03 DB 3 -02D5 01 48 0D DB CTRLA,'H',CR ;Function key 9 -02D8 02 DB 2 -02D9 0B 44 DB CTRLK,'D' ;Save document - -02DB 03 DB 3 -02DC 01 49 0D DB CTRLA,'I',CR ;Function key 10 -02DF 02 DB 2 -02E0 0B 51 DB CTRLK,'Q' ;Abandon editing - -02E2 03 DB 3 -02E3 01 4A 0D DB CTRLA,'J',CR ;Function key 11 -02E6 06 DB 6 -02E7 11 46 10 DB CTRLQ,'F',CTRLP ;Find end of paragraph -02EA 0D 0D 0D DB CR,CR,CR - -02ED 03 DB 3 -02EE 01 4B 0D DB CTRLA,'K',CR ;Function key 12 -02F1 08 DB 8 -02F2 11 46 10 DB CTRLQ,'F',CTRLP ;Find beginning of paragraph -02F5 0D 0D 42 0D DB CR,CR,'B',CR,CTRLD -02F9 04 - -02FA 00 DB 0 ;End of table -02FB 0000 DW 0 ;No continuation - - REPT 128-($-FUNTBL) ;Allow 128 bytes for table - DB 0 - ENDM - -031D 00 00 DB 0,0 ;Reserved - - ; - ; TERMINAL PATCH AREA - ; - ;This section contains the user-modifiable constants and - ; routines for hardware-dependent terminal functions - ; and characteristics required by the editor. - ; - ;There are three types of patches in this area. One can - ; patch data values (HITE, WID) which describe the - ; terminal, strings (CLEAD1, ERAEOL) which define - ; control sequences, or actual microprocessor - ; instructions. - ; - ;For the string sequences, the first byte of the patch - ; indicates the number of bytes in the string, - ; followed by that many string bytes. If there is - ; insufficient room for the whole string, the format - ; can be modified by putting a -1 (0FFH) where the - ; number of bytes would go, and then putting the - ; address in the following two bytes (low order byte - ; first) of the address where the longer patch - ; resides. The longer patch must then be of the - ; normal format which is the number of bytes followed - ; by the string. - ; - ;This area is normally patched for your specific terminal - ; by the interactive INSTALL program. Additional - ; patching to this area is needed only for unusual - ; terminals or video boards, or to meet special - ; requirements, or to enhance or personalize your - ; copy of WordStar. The default user area is - ; set up for this example installation. - ; - - ; - ;Video screen height, width, and wrap-around parameters are required. - ; -031F HITE:: -031F 18 DB 24 ;Must be exact screen height in lines. -0320 WID:: -0320 50 DB 80 ;Must be <= exact screen width in columns. -0321 WRAP:: -0321 FF DB TRUE ;Indicates if terminal wraps around to next - ;line if a character is displayed in WIDth - ;column of screen (set FALSE if it doesn't) - -0322 XONOFF:: -0322 FF DB TRUE ;TRUE if XON/XOFF protocol to be used for - ;the CRT terminal - -0323 SCROLL:: -0323 14 DB 20 ;Number of columns that are horizontally - ;scrolled when cursor moves beyond right - ;or left side of screen. - -0324 DIRSIZ:: -0324 05 DB 5 ;Number of lines available for directory - ;at bottom of screen. If zero, no directory. - -0325 0B DB 11 ;Larger directory for document selection - - ; - ;Delete Display String - ; - ;The following string indicates to WordStar how to display a delete - ;character (hex 7F) on the screen while editing. On terminals that - ;interpret the delete character code into a displayable character, it - ;is recommended that DELSTR be translated into the delete code itself - ;(length of 1, then 7FH). All characters in the string must display. - ; -0326 DELSTR:: -0326 03 DB 3 ;Number of chars in string -0327 44 45 4C DB 'DEL' ;What is displayed -032A 00 00 DB 0,0 ;Spare bytes - - ; - ;Soft and End of Line Hyphen Display String - ; - ;In order to distinguish soft hyphens from normal hyphens in the text, - ;WordStar will substitute the following string when one is encountered. - ; - -032C SHYSTR:: -032C 01 DB 1 ;Number of chars in string -032D 3D DB '=' ;What is displayed -032E 00 00 00 00 DB 0,0,0,0 ;Spare bytes - ; - ;Block Marker Strings - ; - ;Block marker strings are displayed on the screen to show the start and - ;end of a block of text. The strings are in the typical format of the - ;length followed by as many characters. Control characters should not - ;be included within these strings because they would not be sent - ;directly to the screen. - ; - -0332 BBLOCK:: -0332 03 DB 3 ;Three chars -0333 3C 42 3E DB '' ;Begin block -0336 00 DB 0 ;1 spare - ; -0337 KBLOCK:: -0337 03 DB 3 ;Three chars -0338 3C 4B 3E DB '' ;End block -033B 00 DB 0 ;1 spare - - ; - ;Special character used when displaying soft spaces with ^OB. - ; -033C SOFTSP:: -033C 2B DB '+' ;Soft spaces show up as plus signs - -033D 00 00 00 00 DB 0,0,0,0,0 ;Reserved -0341 00 - - ; - ;The following string is used at sign-on to describe the type - ;of terminal being used by WordStar. Up to 40 bytes are available - ;for the string, including its null terminator. - ; -0342 CRTID:: -0342 55 6E 69 6E DB 'Uninstalled Terminal',CR,LF,0 ;Terminal name -0346 73 74 61 6C -034A 6C 65 64 20 -034E 54 65 72 6D -0352 69 6E 61 6C -0356 0D 0A 00 -0359 20 20 20 20 DB ' ' ;Extra room -035D 20 20 20 20 -0361 20 20 20 20 -0365 20 20 20 20 -0369 20 - - ; - ;Cursor positioning control sequences are required. - ; - ;Cursor positioning for most terminals is accomplished - ; by sending: - ; - ; 1. A 'lead-in' string of one or more terminal - ; specific characters. - ; 2. The line number, with an offset (often 20H) added. - ; For some terminals, the column number is - ; sent first. - ; 3. For some terminals, another 'lead-in' string. - ; 4. The column (or line) number, with an offset. - ; 5. For some terminals, a terminating string. - ; - ;For most terminals, the line and column number are sent - ; as one-byte binary numbers. Some terminals require - ; that a two- or three-digit ASCII number is sent. - ; - ;For terminals that do not fit the above patterns, you - ; must code your own subroutine. - ; - ;For example, the cursor is positioned on this sample - ; installation by sending: - ; - ; ESCAPE, '=', - ; line number plus 20H, - ; column number plus 20H. - ; -036A CLEAD1:: ;Initial lead-in string -036A 02 DB 2 ;Number of characters -036B 1B DB ESC ;First character -036C 3D DB '=' ;Second character -036D 00 00 DB 0,0 ;Space for two more characters - -036F CLEAD2:: ;Sent between line and column -036F 00 DB 0 ;Number of characters, none in our -0370 00 DB 0 ;example. First character -0371 00 00 00 DB 0,0,0 ;Space for three more characters - -0374 CTRAIL:: ;Terminating string -0374 00 DB 0 ;Number of characters -0375 00 00 00 00 DB 0,0,0,0 ;Space for four characters - -0379 CB4LFG:: ;Send column before line? -0379 00 DB 0 ;Set non-zero to send column first - -037A CUROFF:: ;Cursor offsets - - ;Offset to add to line -037A 20 DB 20H ;Add 20H to line number (0 is top - ;line of screen before offset) - - ;Offset to add to column -037B 20 DB 20H ;Add 20H to column number (0 is - ;left-most column of screen - ;before offset) - -037C ASCUR:: ;Binary/ASCII digit flag -037C 00 DB 0 ;0 to send binary line and column - ;2 to send 2-digit ASCII numbers - ;3 to send 3-digit ASCII numbers - - ; - ;Provision for positioning cursor by user-coded - ; subroutine, instead of under control of above - ; items. For use in exceptional cases only. - ; - ;Insert a JMP instruction to your subroutine in the - ; following three bytes. Whenever the first byte - ; is non-NOP, this location will be called to - ; position the cursor, and the above cursor patch - ; items will be ignored. - ; - ;Your subroutine will receive the line number in the L - ; register (0 = top line), the column number in - ; the H register (0 = left-most column), and the - ; video attributes at the next typing position in - ; the A register. Attributes are represented as - ; described for the VIDATT routine, except that the - ; warning/error bit indicates double-strike. - ; - ;Your subroutine may alter all registers. - ; -037D UCRPOS:: -037D 00 NOP ;Normally NOP, or JMP to your cursor -037E 00 NOP ;positioning routine. -037F C9 RET - - ; - ;Displaying characters on some screens can be significantly faster if the - ;cursor can be turned off. - ; -0380 ONCUR:: ;Turn cursor on by changing to jump -0380 00 NOP ;to custom subroutine. -0381 00 NOP ; L = current cursor line -0382 C9 RET ; H = cursor column - -0383 OFFCUR:: ;Turn cursor off by changing to jump -0383 00 NOP ;to custom subroutine. -0384 00 NOP ; L = current cursor line -0385 C9 RET ; H = cursor column - - ; - ;Everything in the rest of this section is optional. - ; The items relate either to enhanced performance, - ; or for accomodating unusual terminals. - ; - - ; - ;Erase screen. If this function is not available, leave - ; the first byte zero, and the WordStar will either send - ; line feeds, or update a screen of text using ERAEOL - ; below. - ; - ;After the screen is erased, WordStar assumes that the video - ; attributes are set to normal (dim for the example - ; terminal), and that the cursor is at the home position - ; (upper left hand corner). - ; -0386 ERASCR:: -0386 03 DB 3 ;Number of characters -0387 1A DB CTRLZ ;First character (clear screen) -0388 1B 29 DB ESC,')' ;Additional characters (dim) -038A 00 00 00 00 DB 0,0,0,0,0,0 ;Room for 13 more -038E 00 00 -0390 00 00 00 00 DB 0,0,0,0,0,0,0 -0394 00 00 00 - - ; - ;Backspace one character string. If this function is not - ; available, leave the first byte zero, and WordStar - ; will use cursor addressing to backspace. - ; -0397 BAKSPC:: -0397 01 DB 1 ;Number of characters -0398 08 DB BS ;First character -0399 00 00 00 DB 0,0,0 ;Additional characters - - ; - ;Erase to end of line string. If this function is not - ; available, leave the first byte zero, and WordStar - ; will perform the function more slowly via software. - ; -039C ERAEOL:: -039C 02 DB 2 ;Number of characters -039D 1B DB ESC ;First character -039E 54 00 00 DB 'T',0,0 ;Additional characters - - ; - ;Erase to end of screen string. If this function is not - ; available, leave the first byte zero, and WordStar - ; will perform the function more slowly via software. - ; -03A1 ERAEOS:: -03A1 02 DB 2 ;Number of characters -03A2 1B DB ESC ;First character -03A3 59 00 00 DB 'Y',0,0 ;Additional characters - - ; - ;Delete screen line containing the cursor, and move lower - ; lines on the screen up one line. If this function - ; is not available, leave the first byte zero, and - ; WordStar will perform the function more slowly - ; via software. - ; -03A6 LINDEL:: -03A6 02 DB 2 ;Number of characters -03A7 1B DB ESC ;First character -03A8 52 00 00 DB 'R',0,0 ;Additional characters - - ; - ;Insert a blank line on the screen, moving the line - ; containing the cursor, and the lines below it down - ; one line. If this function is not available, leave - ; the first byte zero, and WordStar will perform - ; the function more slowly via software. - ; -03AB LININS:: -03AB 02 DB 2 ;Number of characters -03AC 1B DB ESC ;First character -03AD 45 00 00 DB 'E',0,0 ;Additional characters - - ; - ;WordStar will use LINDEL and LININS to delete or insert a group - ; of lines rather than just displaying a whole new screenful - ; of characters. LINMAX below indicates the maximum number - ; of lines that this would generally be faster than the - ; re-display. Set to zero if don't care. - ; -03B0 LINMAX:: -03B0 05 DB 5 ;Five lines - - ; - ;Terminal initialization string. A string of bytes which - ; will be sent to the terminal at the beginning of a - ; session. See also INISUB. - ; -03B1 TRMINI:: -03B1 FF DB -1 ;Number of bytes -03B2 0386 DW ERASCR ;Use extension mechanism (-1 as byte -03B4 00 00 DB 0,0 ;count) to erase screen as initialization. - - ; - ;Terminal un-initialization string. A string of bytes - ; which will be sent to the terminal at the end of a - ; session. See also UNISUB. - ; -03B6 TRMUNI:: -03B6 02 DB 2 ;Number of bytes -03B7 1B 28 DB ESC,'(' -03B9 00 00 DB 0,0 - - ; - ;User-patchable initialization subroutine. Called before - ; the TRMINI string is sent. This subroutine may be - ; used for special console initialization or other - ; purposes. See UCRPOS comments. - ; -03BB INISUB:: -03BB 00 NOP ;Normally NOP, or JMP to -03BC 00 NOP ;your subroutine -03BD C9 RET - - ; - ;User patchable un-initialization subroutine. Called - ; before the TRMUNI string is sent. This subroutine - ; may be used to 'undo' any special terminal status - ; used for the WordStar. See UCRPOS comments. - ; -03BE UNISUB:: -03BE 00 NOP ;Normally NOP, or JMP to -03BF 00 NOP ;your subroutine -03C0 C9 RET - - ; - ;Video attributes are used in various places on the WordStar display. - ;The following table describes what each bit of an attribute byte - ;means when used within WordStar. Note that when no bit is set, that - ;is the normal condition. - ; - ; Bit WordStar Usage - ; - ; none Normal text - ; 0 Strike-out text - ; 1 Warning & error messages - ; 2 Marked block of text - ; 3 Underlined text - ; 4 Subscripted text - ; 5 Superscripted text - ; 6 Bold text - ; 7 Italic (or ribbon color) - ; - ;For this sample installation, the following translation of attribute - ;bits into video conditions could be used. - ; - ; WordStar Example - ; - ; Normal Dim - ; Warning Blink - ; Marked Inverse - ; Underlined Underline - ; Subscripted Bright - ; Superscripted Bright - ; Highlighted Bright - ; - ;Because each terminal uses such diverse strings to change video - ;attributes, you must provide a custom subroutine at VIDATT to - ;build the proper one for yours. You may be able to take advantage - ;of the fact that many terminals use a binary method to encode the - ;attributes. If you do not wish to use any video attributes, put - ;the customary two NOP's followed by a RET at VIDATT to disable it. - ; - ;The following implementation is for this sample installation. On that - ;terminal the following sequences are required for the different - ;attributes in our table: - ; - ; Attribute Sequence Screen Space - ; - ; Dim ESC ) NO - ; Bright ESC ( NO - ; Normal video ESC G 0 YES - ; Blink ESC G 2 YES - ; Inverse ESC G 4 YES - ; Underline ESC G 8 YES - ; Underline, blink ESC G : YES - ; Underline, inverse ESC G < YES - ; Underline, inverse, blink ESC G > YES - ; - ;However, since the ESC G attributes take up screen space, we cannot - ;use them with WordStar. Therefore, all attributes are highlighted - ;using bright. - - - ; - ;The VIDATT subroutine is used to change video attributes on the screen. - ;On entry, WordStar will supply the attributes that are on in the C - ;register. You must translate them into whatever your particular terminal - ;requires. The following implementation is a sample installation. - ;This subroutine is called only when a video attribute changes. - ; -03C1 VIDATT:: ;Change to NOP, NOP, RET if not needed -03C1 21 03D2 LXI H,vdim -03C4 0C INR C ;Normal video? -03C5 0D DCR C -03C6 CA 0283 JZ STRING - ; -03C9 21 03CF LXI H,vbrite ;Highlight everything else -03CC C3 0283 JMP STRING - ; -03CF 02 1B 28 vbrite: DB 2,ESC,'(' ;Bright -03D2 02 1B 29 vdim: DB 2,ESC,')' ;Dim - - REPT 128-($-VIDATT) ;Allow total of 128 bytes for VIDATT - DB 0 - ENDM - - ; - ;Normally the status line, text and directories are displayed in - ;dim intensity so that bold and doublestruck text can be shown in - ;high intensity. Setting BRITE to 0FFH reverses the usage of - ;bright and dim for the status line, text and directories ;zero - ;normally. - ; -0441 00 BRITE:: DB 0 ;Don't reverse - ;0FFH = normal text bright - - ; - ;Delays are executed after various terminal functions, before - ; the next character is sent to the terminal, to - ; allow response time required by certain terminals - ; when operating at a high baud rate. Set to a - ; larger value if you suffer a loss of characters - ; after a terminal function. - ; - ;Note that an additional delay FUNDLY is located near the - ; function key table FUNTBL above. - ; - ;Each delay is approximately the number of milliseconds - ; on a 4 MHz Z80 processor, about twice as long on - ; a 2 MHz 8080 (in other words, divide delay values - ; in half for a 2 MHz processor to achieve the same - ; results). - ; -0442 DELCUS:: -0442 00 DB 0 ;No delay after cursor positioning - ;(if your terminal works better with - ;5 milliseconds of delay, you would - ;put a "5" here instead) - -0443 DELMIS:: ;Miscellaneous screen delays -0443 00 DB 0 ;No delay - -0444 DXOFF:: ;If XON/XOFF used for terminal, sometimes -0444 07D0 DW 2000 ;a legitimate ^S will be interpreted as an - ;XOFF character. DXOFF is used to time out - ;so that the terminal will continue. - -0446 DLONG:: ;Long delays (like at sign-on) -0446 07D0 DW 2000 ;2 seconds = 2,000 milliseconds - ;(1000 if 8080) - -0448 DMED:: ;Medium delays (like at P, O, or K menus) -0448 03E8 DW 1000 ;1 second = 1,000 milliseconds - ;(500 if 8080) - -044A DSHORT:: ;Short delays (like before help menus) -044A 00C8 DW 200 ;200 milliseconds (100 if 8080) - -044C UPDLY:: ;Position update delay -044C 00C8 DW 200 ;200 milliseconds (100 if 8080) - -044E DDISK:: ;Disk access delay. If character typed -044E 01F4 DW 500 ;during disk access, wait this duration for - ;more characters. 500 milliseconds - -0450 DFAST:: ;Delay when typing fast. Holds off displaying -0450 0032 DW 50 ;the rest of the line briefly - - ; - ;Optional user-supplied console I/O subroutines. You may - ; patch JMP's here to your own console input, console - ; output, and console status subroutines, in which - ; case these routines, instead of the operating - ; system BIOS entry points, will be used for all - ; console I/O. These subroutines may alter all registers. - ; - ;Use of a custom subroutine accessed here is suggested, - ; for example, to drive a video board that cannot be - ; driven via output to the operating system. - ; -0452 UCNSTA:: ;User console status subroutine. -0452 00 NOP ;Normally NOP, or JMP to your own -0453 00 NOP ;subroutine. Must return 0 in A if -0454 C9 RET ;no character ready, 0FFH if one is - ;ready. - -0455 UCONI:: ;User console input subroutine. -0455 00 NOP ;Normally NOP, or JMP to your own -0456 00 NOP ;subroutine. Must return the -0457 C9 RET ;character in A. May be called - ;before a character is ready. If - ;no character is ready, routine - ;must wait until a character is - ;available. - -0458 UCONO:: ;User console output subroutine. -0458 00 NOP ;Normally NOP, or JMP to your own -0459 00 NOP ;subroutine. Subroutine receives -045A C9 RET ;the character in A, video attributes in - ;B, and current cursor address in HL. - - ; - ;This is 128 bytes set aside for anything that the user wishes to use. - ;If more than 128 bytes are required, it is necessary to put them after - ;the main WordStar code which can be determined by looking at the - ;contents of BGNMEM to see where it is. After using as much space as - ;necessary, change BGNMEM to the new beginning of free memory. - ; -045B MORPAT:: -045B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -045F 0000 0000 -0463 0000 0000 -0467 0000 0000 -046B 0000 0000 -046F 0000 0000 -0473 0000 0000 -0477 0000 0000 -047B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -047F 0000 0000 -0483 0000 0000 -0487 0000 0000 -048B 0000 0000 -048F 0000 0000 -0493 0000 0000 -0497 0000 0000 -049B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -049F 0000 0000 -04A3 0000 0000 -04A7 0000 0000 -04AB 0000 0000 -04AF 0000 0000 -04B3 0000 0000 -04B7 0000 0000 -04BB 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -04BF 0000 0000 -04C3 0000 0000 -04C7 0000 0000 -04CB 0000 0000 -04CF 0000 0000 -04D3 0000 0000 -04D7 0000 0000 - - ; - ;CRTPAT is a patch area that may be used by WordStar's installation - ;program. - ; -04DB CRTPAT:: -04DB 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -04DF 0000 0000 -04E3 0000 0000 -04E7 0000 0000 -04EB 0000 0000 -04EF 0000 0000 -04F3 0000 0000 -04F7 0000 0000 -04FB 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -04FF 0000 0000 -0503 0000 0000 -0507 0000 0000 -050B 0000 0000 -050F 0000 0000 -0513 0000 0000 -0517 0000 0000 -051B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -051F 0000 0000 -0523 0000 0000 -0527 0000 0000 -052B 0000 0000 -052F 0000 0000 -0533 0000 0000 -0537 0000 0000 -053B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -053F 0000 0000 -0543 0000 0000 -0547 0000 0000 -054B 0000 0000 -054F 0000 0000 -0553 0000 0000 -0557 0000 0000 - - ; - ;The following string is used to describe the name of the default - ;printer used by WordStar. Up to 40 bytes are provided for the - ;string, including its null terminator. - ; -055B PRNID:: -055B 44 72 61 66 DB 'Draft Printer',CR,LF,0 ;Printer name -055F 74 20 50 72 -0563 69 6E 74 65 -0567 72 0D 0A 00 -056B 20 20 20 20 DB ' ' ;Additional room -056F 20 20 20 20 -0573 20 20 20 20 -0577 20 20 20 20 -057B 20 20 20 20 -057F 20 20 20 20 - - ; - ;WordStar uses a default printer driver if none is specified by the - ;user. The following is its name. It may be up to six characters long, - ;null terminated. - ; -0583 DEFPRN:: -0583 44 52 41 46 DB 'DRAFT',0 ;Standard driver -0587 54 00 -0589 20 DB ' ' ;One extra char - - ; - ;The print delay timer is used to time how long the printer is busy - ;before telling the user that it's been busy a long time. This would - ;primarily be used when the printer was in another room and you might - ;not know that it was busy due to a paper jam or being off line. - ; -058A PRNDLY:: ;Delay before saying printer busy -058A 0000 DW 0 ;Zero to disable - - ; - ;Pausing between each page is used if single sheets of paper are being - ;printed. - ; -058C PPAUSE:: -058C 00 DB FALSE ;Continuous form (don't pause) - - ; - ;Many printers can use form feeds to quickly get from one page to the - ;next. If your printer can, setting PFFEED to TRUE will cause WordStar - ;to use form feeds instead of carriage returns and line feeds. - ; - -058D PFFEED:: -058D 00 DB FALSE ;Carriage returns to next page - - ; - ;Some users, like programmers, may want to usually print non-documents. - ;In this case, WordStar prints any lines that begin with a period (dot - ;commands), and expands tab characters (09H) according to the filetype - ;in the EDCOND table elsewhere in the User Area. - ; -058E PNODOC:: -058E 00 DB FALSE ;Don't print as a non-document - - ; - ;Printer protocol flags. Only one of these flags may be set TRUE at - ;one time. If neither flag is set, WordStar assumes all printer busy - ;handshaking is done externally to WordStar (requires ULISTA and ULSTI - ;subroutines below). - ; - -058F LXOFF:: ;Printer XON/XOFF protocol. -058F 00 DB FALSE - -0590 LETX:: ;Printer ETX/ACK protocol. -0590 00 DB FALSE - -0591 LCHRMX:: ;Maximum chars before sending ETX. -0591 80 DB 128 ;Half of buffer size. - - ; - ;User list device output subroutines are used if the normal systems list - ;device is not to be used. The user subroutine overrides the LSTDEV - ;selection below. - ; -0592 ULOSTA:: -0592 00 NOP ;User list output status subroutine. -0593 00 NOP ;Normally NOP, or JMP to your own -0594 C9 RET ;subroutine. Must return 0 in AL if - ;list device is busy, 0FFH if idle. - -0595 ULSTO:: -0595 00 NOP ;User list output subroutine. -0596 00 NOP ;Normally NOP, or JMP to your own -0597 C9 RET ;subroutine. Subroutine receives the - ;character in AL. - - ; - ;User list input subroutines are used if either XON/XOFF or ETX/ACK - ;protocols are used to indicate when the printer is busy. - ; -0598 ULISTA:: -0598 00 NOP ;User list input status subroutine. -0599 00 NOP ;Normally NOP, or JMP to your own -059A C9 RET ;subroutine if LXOFF or LETX is TRUE. - ;Must return 0 in AL if no char pending. - -059B ULSTI:: -059B 00 NOP ;User list input subroutine. -059C 00 NOP ;Normally NOP, or JMP to your own -059D C9 RET ;subroutine if LXOFF or LETX is TRUE. - ;Returns character in AL. - - ; - ;Printer Output Selection - ; - ;When WordStar prints, it sends its output to one of the devices specified - ;with LSTDEV. - ; - ; 00H = TTY device - ; 01H = CRT device - ; 02H = LPT device - ; 03H = UL1 device - ; FFH = Default LST device - ; -059E LSTDEV:: -059E FF DB 0FFH ;Use LST device - - ; - ;Before printing, WordStar will call ULPORT below to allow for custom - ;print output redirection. A pointer to the name of the printer (null - ;terminated, all capital letters) will be passed to the subroutine in HL. - ;It is up to this subroutine to then route the printer output to the - ;appropriate output port by whatever means is available to it. - ; - -059F ULPORT:: -059F 00 NOP ;Normally NOP if no redirection to be done. -05A0 00 NOP ;Change to JMP to your own subroutine. -05A1 C9 RET - - ; - ;The user list device uninitialize routine is called after printing is - ;completed, and can be used to restore the printer state for non-WordStar - ;applications. - ; - -05A2 ULUNPT:: -05A2 00 NOP -05A3 00 NOP -05A4 C9 RET - - ; - ;The ULINI string is sent to the list device after ULPORT is executed - ;and before the document is printed. - ; -05A5 ULINI:: ;User list device initialize string -05A5 00 DB 0 -05A6 00 00 00 00 DB 0,0,0,0,0,0,0,0,0 -05AA 00 00 00 00 -05AE 00 - ; - ;The ULUNI string is sent to the list device after the document is - ;printed and before the ULUNPT routine is executed. - ; -05AF ULUNI:: ;User list device uninitialize routine -05AF 00 DB 0 -05B0 00 00 00 00 DB 0,0,0,0,0,0,0,0,0 -05B4 00 00 00 00 -05B8 00 - - ; - ;When WordStar begins printing, space is allocated for the three header and - ;three footer lines. HFMAX determines how much space to allocate. - ; -05B9 HFMAX:: -05B9 0064 DW 100 ;Up to 100 characters per header or footer - - ; - ;DATSEP is used while merge printing to separate one data item from - ;another in the data file. - ; -05BB DATSEP:: ;Comma -05BB 2C DB ',' - - ; - ;DLIST is the list output delay. Every time a character is output to - ;the printer, this delay is used. - ; -05BC DLIST:: -05BC 00 DB 0 ;No delay - - ; - ;Custom Printer Control Strings: These strings are sent to the printer - ;when the custom print control characters, ^Q, ^W, ^E, or ^R are - ;encountered in text being printed. They can be used to invoke special - ;printer functions not controlled by the standard driver, such as expanded - ;or compressed modes of printing. - ; - ;Note that some drivers may interfere or override the custom print controls - ;you have defined. In this case, use a generic driver such as DRAFT or - ;CUSTOM. - ; - ;A fixed length of 25 bytes is reserved for each string, where the - ;first byte is the count of characters to be sent to the printer, and - ;the following bytes (up to 5) are the characters to be sent. If - ;longer strings are required, the first byte can be -1, followed by a - ;two byte address pointing into a patch area, where the actual count - ;and string can be found. - ; -05BD UPRCTL:: ;Custom Print Controls - -05BD 00 UPRQ:: DB 0 ;^Q, length -05BE 00 00 00 00 DB 0,0,0,0,0,0 ; string of up to 24 characters -05C2 00 00 -05C4 00 00 00 00 DB 0,0,0,0,0,0 -05C8 00 00 -05CA 00 00 00 00 DB 0,0,0,0,0,0 -05CE 00 00 -05D0 00 00 00 00 DB 0,0,0,0,0,0 -05D4 00 00 - ; -05D6 00 UPRW:: DB 0 ;^W -05D7 00 00 00 00 DB 0,0,0,0,0,0 -05DB 00 00 -05DD 00 00 00 00 DB 0,0,0,0,0,0 -05E1 00 00 -05E3 00 00 00 00 DB 0,0,0,0,0,0 -05E7 00 00 -05E9 00 00 00 00 DB 0,0,0,0,0,0 -05ED 00 00 - ; -05EF 00 UPRE:: DB 0 ;^E -05F0 00 00 00 00 DB 0,0,0,0,0,0 -05F4 00 00 -05F6 00 00 00 00 DB 0,0,0,0,0,0 -05FA 00 00 -05FC 00 00 00 00 DB 0,0,0,0,0,0 -0600 00 00 -0602 00 00 00 00 DB 0,0,0,0,0,0 -0606 00 00 - ; -0608 00 UPRR:: DB 0 ;^R -0609 00 00 00 00 DB 0,0,0,0,0,0 -060D 00 00 -060F 00 00 00 00 DB 0,0,0,0,0,0 -0613 00 00 -0615 00 00 00 00 DB 0,0,0,0,0,0 -0619 00 00 -061B 00 00 00 00 DB 0,0,0,0,0,0 -061F 00 00 - - ; - ;Strike-out character - ; -0621 STKCHR:: -0621 2D DB '-' ;Strike out character - ; - ;If PFFEED above is TRUE, or you specifically tell WordStar to use form feeds - ;during printing, the following string is sent to the printer to eject the - ;paper to the next page. All printer drivers use this string. - ; -0622 01 FORMF:: DB 1 ;^L -0623 0C DB FFEED -0624 00 00 00 00 DB 0,0,0,0,0 -0628 00 -0629 00 00 00 00 DB 0,0,0,0,0,0 -062D 00 00 -062F 00 00 00 00 DB 0,0,0,0,0,0 -0633 00 00 -0635 00 00 00 00 DB 0,0,0,0,0,0 -0639 00 00 - ; - ;This is 128 bytes set aside for printer subroutines. - ;This area is also used for print control strings for the CUSTOM - ;printer driver. - ; -063B PRNPAT:: -063B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -063F 0000 0000 -0643 0000 0000 -0647 0000 0000 -064B 0000 0000 -064F 0000 0000 -0653 0000 0000 -0657 0000 0000 -065B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -065F 0000 0000 -0663 0000 0000 -0667 0000 0000 -066B 0000 0000 -066F 0000 0000 -0673 0000 0000 -0677 0000 0000 -067B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -067F 0000 0000 -0683 0000 0000 -0687 0000 0000 -068B 0000 0000 -068F 0000 0000 -0693 0000 0000 -0697 0000 0000 -069B 0000 0000 DW 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -069F 0000 0000 -06A3 0000 0000 -06A7 0000 0000 -06AB 0000 0000 -06AF 0000 0000 -06B3 0000 0000 -06B7 0000 0000 - - ; - ;If non-standard initialization parameters are used, the - ;following identification string can be displayed at - ;sign-on. Up to 40 bytes are available for the string, - ;including the null terminator. - ; -06BB INITID:: -06BB 00 DB 0 ;No ID if standard -06BC 20 20 20 20 DB ' ' -06C0 20 20 20 20 -06C4 20 20 20 20 -06C8 20 20 20 20 -06CC 20 20 20 -06CF 20 20 20 20 DB ' ' -06D3 20 20 20 20 -06D7 20 20 20 20 -06DB 20 20 20 20 -06DF 20 20 20 20 - - ; - ;Legal Drives - ; - ;Note that the first drive is assumed to be the default drive where any - ;special files are located such as the WSMSGS.OVR file. The drives listed - ;should be reduced to the ones that are actually in use on the system - ;upon which WordStar is running. - ; - ;If the most significant bit of the drive letter is set to 1, WordStar - ;will assume that the drive is non-removable. A disk reset will not - ;be done when non-removable drives are logged. - ; -06E3 LGLDRV:: -06E3 41 42 43 44 DB 'ABCDEFGHIJKLMNOP',0 ;Every legal drive -06E7 45 46 47 48 -06EB 49 4A 4B 4C -06EF 4D 4E 4F 50 -06F3 00 - - ; - ;Legal User Numbers - ; - ;Some CP/M operating systems can support user numbers from 0 to 15, - ;others support 0 to 31. Also, a user can be prevented from accessing - ;other user numbers if zero. - ; -06F4 LGLUSR:: -06F4 10 DB 16 ;Sixteen user numbers from 0 to 15 - - ; - ;WordStar uses several files. Their names are specified here. WordStar - ;uses the following search pattern to try to find the file: - ; - ; 1. Look on the current drive and user. - ; 2. Default user (DEFUSR) on the current drive. - ; 3. Current user on the default drive. - ; 4. Default user on the default drive. - ; - ;If the drive byte of the filename is non-zero, it should be set to a - ;number 1 through 16 representing drives A through P respectively. In - ;this case, WordStar will look only on the specified drive and the - ;DEFUSR user number for the file. - ; -06F5 MSFILE:: ;Message file -06F5 00 57 53 4D DB 0,'WSMSGS OVR' -06F9 53 47 53 20 -06FD 20 4F 56 52 - -0701 HPFILE:: ;Help messages file -0701 00 57 53 48 DB 0,'WSHELP OVR' -0705 45 4C 50 20 -0709 20 4F 56 52 - -070D FF DB 0FFH ;Zero if never to search for help - -070E IXFILE:: ;Indexer exclusion word list filename -070E 00 57 53 49 DB 0,'WSINDEX XCL' -0712 4E 44 45 58 -0716 20 58 43 4C - -071A LDFILE:: ;Load file for overlays -071A 00 57 53 20 DB 0,'WS OVR' -071E 20 20 20 20 -0722 20 4F 56 52 - -0726 OVFILE:: ;Print driver overlays -0726 00 57 53 50 DB 0,'WSPRINT OVR' -072A 52 49 4E 54 -072E 20 4F 56 52 - -0732 WSFILE:: ;File containing WordStar (after running pgm) -0732 00 57 53 20 DB 0,'WS COM' -0736 20 20 20 20 -073A 20 43 4F 4D - -073E SHFILE:: ;Shorthand file -073E 00 57 53 53 DB 0,'WSSHORT OVR' -0742 48 4F 52 54 -0746 20 4F 56 52 - - ; - ;If WordStar does not find its own files (WS.COM, WS.OVR...) on the - ;logged user, it will look for them on the default user. - ; -074A DEFUSR:: -074A 00 DB 0 ;Default user number for system files - ;Set to 0-16 or 0-31 (depends on LGLUSR), - ; or -1 to defeat - - ; - ;When you use the S command at the Opening Menu, this is the spelling - ;check command that is used. If you want WordStar to prompt for the - ;document to be checked and then automatically append it to this command, - ;set SPFILE non-zero. - ; -074B 02 SPCMD:: DB 2 ;Five letters in command -074C 54 57 DB 'TW' ;Run The WORD Plus -074E 00 00 00 00 DB 0,0,0,0,0 ;Spare bytes for longer commands -0752 00 -0753 00 00 00 00 DB 0,0,0,0,0 -0757 00 - -0758 FF SPFILE::DB 0FFH ;Automatically ask - - ; - ;When you run a program at the Opening Menu, WordStar first tries to find - ;the COM file in the current drive and user, then in this drive and user. - ;The default is to look on drive A, user 0. - ; -0759 01 URUN:: DB 1 ;Drive code (0=disabled, 1=A, 2=B, ...) -075A 00 DB 0 ;User number - - ; - ;INILOG allows the user to specify a drive and user number for WordStar to - ;log onto at start up time. The first byte is a character count, the - ;following bytes (up to three) can contain a drive name (A-P) and user - ;number (0-31). - ; -075B INILOG:: -075B 00 DB 0 -075C 00 00 00 DB 0,0,0 - - ; - ;WordStar creates backup and temporary files. The following - ;are the file types to be used for them. - ; -075F BAKTYP:: ;Type for backup files -075F 42 41 4B DB 'BAK' - -0762 BFTYPE:: -0762 24 42 24 DB '$B$' ;File type of temporary file before memory - -0765 AFTYPE:: -0765 24 41 24 DB '$A$' ;File type of temporary file after memory - -0768 BLKTYP:: -0768 24 43 24 DB '$C$' ;Type for block move/copy buffer file - - ; - ;When the directory is displayed, file types from this table - ;are suppressed. Question marks may be used as wild cards to - ;match any character. - ; -076B NOTYPE:: ;File types to be ommitted from directories -076B 43 4F 4D DB 'COM' ;Command files -076E 4F 56 52 DB 'OVR' ;Overlays -0771 24 3F 24 DB '$?$' ;WordStar temporary files - -0774 00 00 00 DB 0,0,0 -0777 00 00 00 DB 0,0,0 -077A 00 00 00 DB 0,0,0 -077D 00 00 00 DB 0,0,0 -0780 00 00 00 DB 0,0,0 -0783 00 DB 0 ;End of table - - ; - ;DIRFIL is a file name "image" that is used in conjunction with NOTYPE (above) - ;to determine which files are to be displayed in WordStar's directories. - ;DIRFIL determines which files can possibly be included, and NOTYPE then - ;eliminates certain types of files. Use a question mark in DIRFIL at each - ;spot where any file name character can match. - ; -0784 DIRFIL:: -0784 3F 3F 3F 3F DB "???????????" ;All files match -0788 3F 3F 3F 3F -078C 3F 3F 3F - - ; - ;The name of the file to be edited can be specified at the operating system - ;prompt. ININON indicates whether the file should be edited as a document - ;or nondocument. - ; -078F ININON:: -078F 00 DB FALSE ;Not non-document from command line - - ; - ;WordStar normally makes BAK backup files every time you save your work. - ;INITBAK can be used to disable backups by setting it FALSE. - ; -0790 INIBAK:: -0790 FF DB TRUE ;Make backups - - ; - ;When a nondocument is edited, WordStar will decide how to expand tabs - ;(ASCII 09H), and whether or not to use auto-indenting by looking in this - ;table. - ; - ;There is a special case of the tab masks shown below. When the most - ;significant bit of the tab mask is set to 1, WordStar will assume that - ;you want to use variable tabbing. When the tab key is typed, instead - ;of inserting an ASCII 09H into the file, spaces will be entered up to - ;the next tab stop. The tab stops used are in the INIRLR table. An - ;ASCII 09H can still be entered in this mode, however, by typing ^PI. - ; -0791 EDCOND:: ;Edit conditions for specific file types -0791 50 41 53 01 DB 'PAS',00000001B,TRUE ;File extension, followed by a -0795 FF -0796 50 4C 49 03 DB 'PLI',00000011B,TRUE ;binary tab mask (e.g. a mask of -079A FF -079B 43 20 20 03 DB 'C ',00000011B,TRUE ;00000111B expands tab characters -079F FF -07A0 48 20 20 03 DB 'H ',00000011B,TRUE ;to every 8th column), followed by -07A4 FF - ;TRUE if auto-indent is turned on. - -07A5 00 00 00 07 DB 0,0,0,00000111B,FALSE ;End of table with defaults if file -07A9 00 - ;type doesn't match above - -07AA 00 00 00 00 DB 0,0,0,0,0 ;Room for four more -07AE 00 -07AF 00 00 00 00 DB 0,0,0,0,0 -07B3 00 -07B4 00 00 00 00 DB 0,0,0,0,0 -07B8 00 -07B9 00 00 00 00 DB 0,0,0,0,0 -07BD 00 - - ; - ;WordStar normally only considers alphabetic or numeric characters - ;as being within a "word". If other characters are legally part - ;or a word too, then the bit for the corresponding character code in - ;the following table must be set to a 1. - ; - ;There are 256 bits in the table to allow for 8-bit character sets. - ;The default table has the bits set for the numbers "0" through "9" - ;(ASCII codes of 30H through 39H), for the upper case letters - ;"A" through "Z" (41H through 5AH), and the lower case letters "a" - ;through "z" (61H through 7AH). Since the ASCII codes are only - ;seven bits, the corresponding codes with the eighth bit set are - ;also legal. - ; -07BE LGLCHR::; 01234567 89ABCDEF -07BE 00 00 DB 00000000B,00000000B ;Codes 00H to 0FH -07C0 00 00 DB 00000000B,00000000B ;Codes 10H to 1FH -07C2 00 00 DB 00000000B,00000000B ;Codes 20H to 2FH -07C4 00 00 DB 00000000B,00000000B ;Codes 30H to 3FH -07C6 7F FF DB 01111111B,11111111B ;Codes 40H to 4FH -07C8 FF E0 DB 11111111B,11100000B ;Codes 50H to 5FH -07CA 7F FF DB 01111111B,11111111B ;Codes 60H to 6FH -07CC FF E0 DB 11111111B,11100000B ;Codes 70H to 7FH -07CE 00 00 DB 00000000B,00000000B ;Codes 80H to 8FH -07D0 00 00 DB 00000000B,00000000B ;Codes 90H to 9FH -07D2 00 00 DB 00000000B,00000000B ;Codes A0H to AFH -07D4 00 00 DB 00000000B,00000000B ;Codes B0H to BFH -07D6 7F FF DB 01111111B,11111111B ;Codes C0H to CFH -07D8 FF E0 DB 11111111B,11100000B ;Codes D0H to DFH -07DA 7F FF DB 01111111B,11111111B ;Codes E0H to EFH -07DC FF E0 DB 11111111B,11100000B ;Codes F0H to FFH - - ; - ;When you use ^A or ^F to move a word at a time, WordStar uses the - ;following table to determine which characters to skip. It is organized - ;in the same manner as LGLCHR above. - ; -07DE MOVCHR::; 01234567 89ABCDEF -07DE FF 92 DB 11111111B,10010010B ;Codes 00H to 0FH -07E0 FB C3 DB 11111011B,11000011B ;Codes 10H to 1FH -07E2 3F F5 DB 00111111B,11110101B ;Codes 20H to 2FH -07E4 FF CE DB 11111111B,11001110B ;Codes 30H to 3FH -07E6 FF FF DB 11111111B,11111111B ;Codes 40H to 4FH -07E8 FF FF DB 11111111B,11111111B ;Codes 50H to 5FH -07EA FF FF DB 11111111B,11111111B ;Codes 60H to 6FH -07EC FF FE DB 11111111B,11111110B ;Codes 70H to 7FH -07EE FF 92 DB 11111111B,10010010B ;Codes 80H to 8FH -07F0 FB C3 DB 11111011B,11000011B ;Codes 90H to 9FH -07F2 3F F5 DB 00111111B,11110101B ;Codes A0H to AFH -07F4 FF CE DB 11111111B,11001110B ;Codes B0H to BFH -07F6 FF FF DB 11111111B,11111111B ;Codes C0H to CFH -07F8 FF FF DB 11111111B,11111111B ;Codes D0H to DFH -07FA FF FF DB 11111111B,11111111B ;Codes E0H to EFH -07FC FF FE DB 11111111B,11111110B ;Codes F0H to FFH - - ; - ;Certain special characters can be inserted into this table to cause - ;WordStar to automatically generate a backspace character (^H) preceding - ;the character as you type. This can be especially useful for accent - ;characters in some foreign languages. - ; -07FE AUTOBS:: ;Automatic backspace table -07FE 00 DB 0 ;Number of characters in table -07FF 00 00 00 00 DB 0,0,0,0 ;Up to 8 character codes -0803 00 00 00 00 DB 0,0,0,0 - - ; - ;When WordStar gets a file for editing, it will use the following - ;initial conditions. - ; -0807 INIDOC:: ;Document initializations - -0807 03 DB 3 ;Top of page margin. - -0808 08 DB 8 ;Bottom of page margin. - -0809 42 DB 66 ;Total lines per page. - -080A 0001 DW 1 ;Initial page number (note 2 bytes). - -080C FF DB TRUE ;Page number prints at bottom of page - ;if TRUE. No page number if FALSE. - -080D 1C DB 28 ;Column where page number prints. - -080E 02 DB 2 ;Heading margin. This is the number of lines - ;above the text where the heading is to print. - -080F 02 DB 2 ;Footing margin. This is the number of lines - ;below the text where the footing is to print. - -0810 07 DB 00000111B ;Default document tab mask (must be - ;binary, 00000000B through 01111111B). - -0811 08 DB 8 ;Left column where printing starts. - -0812 FF DB TRUE ;Bidirectional printing if TRUE. Just - ;unidirectional or printer controlled - ;if FALSE. (Many printers do not allow - ;software control of print direction). - -0813 FF DB TRUE ;Letter quality printing if TRUE. Draft - ;quality if FALSE. (Only supported on - ;some printers.) - -0814 02 DB 2 ;Microjustified printing. 0 turns it off, - ;1 turns it on, and 2 makes it discretionary - ;(depending on the printer driver in use). - -0815 00 DB FALSE ;Underline blanks between words if TRUE. - ;NOTE: Not implemented for all printers. - -0816 0C DB 12 ;Standard character width (in HMI units). - ;The printer is reset to this when done - ;printing. - -0817 08 DB 8 ;Standard line height (in VMI units). The - ;printer is reset to this after .LH dot - ;commands. It is also used to determine - ;the page size in VMI units by multiplying - ;by the lines per page above. - -0818 0C DB 12 ;Character width (in HMI units) - ;for normal pitch. If HMI is 120, ten pitch - ;is 12/120, twelve pitch is 10/120. - -0819 0A DB 10 ;Character width for alternate pitch (use - ;^PA to select alternate pitch while editing). - -081A 03 DB 3 ;Subscript and superscript roll (in VMI - ;units). This value determines how - ;far up or down the carriage moves when - ;subscripting or superscripting. - -081B 08 DB 8 ;Line height (in VMI units). This value - ;determines how far to roll the carriage - ;to get to the next line. - - ; - ;The default ruler line can be described by defining the following values. - ;Note that the tab stop tables must contain values in ascending order only. - ;The regular tab stops are put in the table first, immediately followed by - ;the decimal tabs. - ; -081C INIRLR:: ;Ruler data - -081C 01 DB 1 ;Left ruler margin - -081D 41 DB 65 ;Right ruler margin - -081E 00 DB 0 ;Paragraph margin - -081F 0B DB 11 ;Eleven tabs -0820 06 0B 10 15 DB 6,11,16,21 ;Tab stops -0824 1A 1F 24 29 DB 26,31,36,41 ;(Must be in -0828 2E 33 38 DB 46,51,56 ;ascending order) -082B 00 00 00 00 DB 0,0,0,0 ;Space for 4 more - -082F 00 DB 0 ;No decimal tabs -0830 00 00 00 00 DB 0,0,0,0,0,0 ;Space for 6 -0834 00 00 - -002F inisiz EQU $-INIDOC ;Size of document initialization - - ; - ;INIRLI determines whether the ruler line is re-initialized from INIRLR each - ;time any document is edited. If INIRLI is FALSE, you can change the initial - ;ruler line with ^OL, ^OR, ^OI, and ^ON commands, and have those changes - ;be used for every document edited until you exit WordStar. - ; -0836 INIRLI:: -0836 FF DB TRUE ;Initialize ruler for each document - - ; - ;As you move through a document, WordStar executes some of the dot commands, - ;like .RR ruler line commands, as they are encountered. As WordStar moves - ;forward through the text, the old ruler line is stored in memory so that it - ;can be restored when you move backwards over the .RR later. Other dot - ;commands work in a similar manner. - ; - ;DSTKSZ is used to allocate storage for the dot commands. While you are - ;editing, WordStar puts a Dot-Limit indicator in the status line if you - ;use too many dot commands. - ; - ; Dot Command Size - ; .RR 26 - ; .RM .LM .LH .PL 1 - ; .MT .MB 1 - ; .PN 2 - ; -0837 DSTKSZ:: -0837 01F4 DW 500 ;Room for 19 .RR commands or 500 .RM & .LM - - ; - ;INIDIR determines whether the directory is initially displayed or not. - ;DIRSRT tells WordStar whether or not to sort directories in alphabetical - ;order before displaying them. - ; - -0839 INIDIR:: -0839 FF DB TRUE ;Directory on - -083A DIRSRT:: -083A FF DB TRUE ;Sort directory in alphabetical order - - ; - ;INIHLP is the default help level. It can have a value from 0 to 3. - ; - -083B INIHLP:: -083B 03 DB 3 ;Maximum help level at start - - ; - ;When editing, the last erasure can be undone with ^U. UNONE determines - ;whether single character erasures with ^G and DEL can also be undone. - ; - ;UNSIZE is the maximum erasure that can later be undone. The unerase - ;buffer shares the same memory space as the text you are editing. Making - ;UNSIZE very large may cause WordStar to "spill over" to disk more - ;frequently, slowing down editing. - ; -083C UNONE:: ;Don't unerase single characters -083C 00 DB FALSE - -083D UNSIZE:: -083D 01F4 DW 500 ;Maximum unerase size - - ; - ;VMSIZE indicates the number of 128-byte records that can be read from - ;the disk for WordStar's messages and menus. - ; -083F VMSIZE:: -083F 04 DB 4 ;Four records (.5k byte) - - ; - ;EDSIZE indicates the minimum number of records of edit buffer required - ;to edit a document properly. WordStar must be able to keep a whole - ;page in memory to determine page breaks and line numbers correctly. - ;Less memory can sometimes be used with occasional strange results. - ;(Non-documents are automatically allocated a minimum of 6 records.) - ; -0840 EDSIZE:: -0840 1C DB 28 ;Enough memory for an average full page - - ; - ;BFSIZE is the number of 128-byte records that WordStar uses for its - ;general purpose buffer. There is a different buffer allocation for - ;editing, the Opening Menu, and for merge printing. - ; - ;This buffer is used for: - ; - ; - File directories (each file uses 11 bytes), - ; - Printer driver directory (each driver uses 11 bytes and 256 - ; bytes are used for buffering), - ; - File copies, - ; - Block reads and writes, - ; - Merge printing. - ; -0841 BFSIZE:: -0841 10 DB 16 ;Edit buffer size (16 records = 2k) - ;(Minimum is 1 record) - -0842 10 DB 16 ;Opening menu buffer size - ;(Minimum is 3 records) - -0843 10 DB 16 ;Merge print buffer size - ;(Minimum is 1 record) - - ; - ;If a document becomes too large to fit in memory at one time, WordStar - ;begins to "spill" the excess to the disk. TYSIZE determines how many - ;128-bytes records to use for each spillover. Picking a correct size - ;is important but can usually be done by trial and error. If TYSIZE is - ;too large, you may see long delays during scrolling or typing when memory - ;fills. - ; -0844 TYSIZE:: -0844 10 DB 16 ;Number records read or stored while typing - -0845 00 00 00 00 DB 0,0,0,0 ;Reserved - - ; - ;A "find" or "find and replace" uses the INIFIN options if you do not - ;explicitly enter any at the "Options?" prompt. The possible options - ;that can be used are: - ; - ; W whole words only - ; U ignore case - ; B backwards search - ; G whole file - ; R rest of file - ; N replace without asking - ; - ;Blank the unused options. - ; -0849 INIFIN:: -0849 20 20 20 20 DB ' ' ;No options -084D 20 20 - - ; - ;The status line is usually displayed at the top of the screen. - ;INISTA lets you always turn it off. STFILL specifies what character - ;to use to fill unused space in the status line. - ; -084F INISTA:: -084F FF DB TRUE ;Display status line - -0850 STFILL:: -0850 20 DB ' ' ;Fill with blanks - - ; - ;When paragraphs are aligned with ^B or ^QU and hyphen help is on, HYMAX - ;is used to determine when to ask the user to hyphenate a word. - ; -0851 HYMAX:: -0851 05 DB 5 ;Ask user when the word extends more than 5 - ;characters past the right margin - - ; - ;When WordStar asks a question that requires a Y for yes or N for no response, - ;YNCR indicates whether or not the user must push the RETURN key before - ;WordStar will accept it. - ; -0852 YNCR:: -0852 00 DB FALSE ;Don't wait for RETURN key - - ; - ;WordStar can index every word in a document as well as selected words and - ;phrases. IDXALL determines whether this is the default or not. - ; -0853 IDXALL:: -0853 00 DB FALSE ;Don't index every word - - ; - ;Using ^B or ^QU in a nondocument normally strips the eighth bit from - ;each character in a line. STRPFL can disable stripping. - ; -0854 STRPFL:: -0854 FF DB TRUE ;Stripping is enabled - ; - ;Editor Entry Conditions - ; -0855 INIEDT:: -0855 FF DB TRUE ;Right justification when typing -0856 FF DB TRUE ;Word wrap when typing at end of line -0857 FF DB TRUE ;Insert on -0858 FF DB TRUE ;Print controls displayed -0859 00 DB FALSE ;No hyphen help -085A FF DB TRUE ;Ruler displayed -085B 00 DB FALSE ;Block column mode off -085C 00 DB FALSE ;Block column replace mode off -085D 01 DB 1 ;Single spacing -085E 02 DB 2 ;Scrolling speed -085F 00 DB FALSE ;Proportional spacing off -0860 00 DB FALSE ;Soft space not displayed - -0861 00 00 00 DB 0,0,0 ;Reserved - ; -000F iniesz EQU $-INIEDT ;Size of editor conditions - - ; - ;The following are special characters that affect how numbers are - ;evaluated and dispayed. - ; -0864 COMCHR:: -0864 2C DB ',' ;Comma to separate 1,000's - -0865 DECCHR:: -0865 2E DB '.' ;Decimal point - - ; - ;The following flags are used to control the way WordStar processes - ;certain commands. CTLNFL and CTLHFL are provided primarily to allow - ;WordStar 3.3 users to use ^N and ^H in the same way as they are accustomed. - ; -0866 CTLNFL:: -0866 FF DB TRUE ;Set non-zero if ^N to break line and - ;RETURN moves down a line when insert off. - ;Set to zero so ^N converts paragraph lines - ;and turns auto indent on/off for - ;nondocuments, and RETURN always inserts CRLF. - -0867 CTLHFL:: -0867 00 DB 0 ;Set non-zero if ^H to be same as ^S instead - ;of DEL. - -0868 CASEFL:: -0868 00 DB 0 ;Set non-zero if ^^ is case toggle. When - ;zero and CLTNFL is non-zero, use as - ;paragraph line and auto-indent on/off. - -0869 DELFLG:: -0869 00 DB 0 ;Set non-zero if DEL erases to left, zero - ;to erase to right (like ^G). - -086A BLKFLG:: -086A FF DB 0FFH ;Set non-zero if the cursor should move - ;to column 1 if the cursor is next to a block - ;marker at the left edge of the screen - -086B LSPFLG:: -086B 00 DB 0 ;Set non-zero if lines with soft carriage - ;returns should not be added to paragraphs - ;for line spacing other than 1 - - ; - ;RLRVID allows the user to select video attributes used to highlight - ;the ruler line. See VIDATT for bit definitions. - ; -086C RLRVID:: -086C 00 DB 0 ;No ruler highlighting - - ; - ;AHEAD indicates whether type ahead is allowed for ^E, ^X, ^W, ^Z, - ;^G, DEL, ^T, ^Y, ^QY, and ^QDEL. If AHEAD is 0, WordStar's type - ;ahead buffer will be flushed whenever one of the functions is - ;encountered. If it is non-zero, no flushing will occur. This - ;flag should be used primarily for external keyboard enhancers where - ;the functions shown above are to be used. WordStar's function key - ;and shorthand processing automatically compensate. - ; -086D AHEAD:: -086D 00 DB 0 ;Flush - - ; - ;Maximum size for the shorthand definitions. Should be optimized to - ;match actual usage since it reduces the amount of memory available - ;for text while editing and printing. The size of each definition - ;is equal to 5 plus the number of characters defined. If this value - ;is smaller than the size of the shorthand file (see SVFILE above), - ;only some of the definitions will be used. Setting it to zero - ;disables shorthand and makes the ESC key clear the screen instead. - ; -086E HANMAX:: -086E 04 DB 4 ;Size of shorthand buffer in records - ;(4 times 128 = 512 bytes) - - ; - ;With shorthand you can insert the dollar-formatted results of the last - ;math you performed. WordStar uses the format below when you do this. - ;(Make sure that the character count includes the zero at the end.) - ; -086F DOLLAR:: -086F 11 DB 17 ;Character count -0870 2D 2D 2C 2D DB '--,---,---,---.99' -0874 2D 2D 2C 2D -0878 2D 2D 2C 2D -087C 2D 2D 2E 39 -0880 39 -0881 00 00 00 DB 0,0,0 ;Spare - -0884 00 00 00 00 DB 0,0,0,0,0,0,0,0 ;Reserved -0888 00 00 00 00 -088C 00 00 00 00 DB 0,0,0,0,0,0,0,0 -0890 00 00 00 00 - - ; - ;EXTRA is a large buffer area for general patching. Some versions of - ;the WINSTALL installation program use EXTRA. Whenever EXTRA is used, - ;RAM1ST must be changed to point to the first available byte within EXTRA - ;that is still available for WordStar's use. If all of EXTRA is used, - ;RAM1ST should point to endpat. - ; -0894 RAM1ST:: -0894 0896 DW EXTRA ;First location in EXTRA that WordStar can use - ; -0896 EXTRA:: DS 512 ;Patch area -0A96 endpat:: ;End of patch area - - -0A96 08 0C 57 UDATE: DB 08,12,87 ;User area version date - - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/PRINT.TST b/software/CPM/CPM30_WORDSTAR_v400/PRINT.TST deleted file mode 100644 index b8dc204..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/PRINT.TST +++ /dev/null @@ -1,143 +0,0 @@ -.hePRINT.TST Features of Your Printer -.f1 WordStar -.f2 Print test -.f3 Page # -.oj on - WordStaò anä Youò Printer - -WordStar‚  workó  witè á widå rangå oæ printeró anä offeró  yoõ  á -varietù oæ prinô enhancements® Whetheò youò printeò caî producå -thå  prinô enhancementó outlineä iî thió documenô dependó oî  itó -capabilities®   Pleaså notå thaô noô alì printeró arå capablå  oæ -showinç alì thå exampleó below. - -Speciaì Printinç Capabilities - -WordStaò supportó thå followinç speciaì printinç capabilities: - - ª Boldface¬ Doublå strike - * Italics/Alternatå ribboî color - * Strikå out - * Overprinô (aó iî co^te) - * Noncontinuouó underline¬ anä -.ul on - * Continuouó underline -.ul off - - * SuperScript¬ SubScript - - * anä almosô anù combinatioî -­ WordStar - -Characteò Width - -Somå  printeró  wilì  supporô  WordStar‚  commandó  foò   variablå -characteò widths® - -.cw 24 -µ characteró peò inch® (.C× 24) -.cw 20 -¶ characteró peò inch® (.C× 20) -.cw 14 -8.¶ characteró peò inch® (.C× 14) -.cw 12 -1° characteró peò inch® (.C× 12) -.cw 10 -1² characteró peò inch® (.C× 10) -.cw 7 -17.± characteró peò inch® (.C× 7) -.cw 12 - -Youò printeò caî alsï bå seô tï "toggle¢ betweeî normaì pitcè anä -alternatå pitch: - -     Thió  sentencå ió printeä witè thå normaì 1°-pitcè  setting¬ -     theî toggleä tï 1² pitch¬ theî bacë tï normal. -.cw 7 - -Yoõ caî alsï changå thå normaì anä alternatå characteò widths: - -.cw 14 -.rm 55 -     Thå  "normal¢ characteò widtè ió 1´ (8.¶ cpi©  anä -     thå alternatå characteò widtè ió · (17.± cpi). -.pa Š.rm 65 -.cw 10 - -.cw 12 -Linå Height - -Yoõ caî alsï uså differenô linå heights. - -.lh 16 -Thió ió aî examplå oæ variablå linå height® (.LÈ 1¶ ­ ³ lpi) -.lh 12 -Thió ió aî examplå oæ variablå linå height® (.LÈ 1² ­ ´ lpi) -.lh 8 -Thió ió aî examplå oæ variablå linå height® (.LÈ ¸ ­ ¶ lpi) -.lh 6 -Thió ió aî examplå oæ variablå linå heighô® (.LÈ ¶ ­ ¸ lpi) -.lh 8 - -Proportionaì Printing - -.ps on -.uj on -WordStar‚  alsï supportó proportionaì printinç foò  mosô  printeró -thaô  havå  it®   Yoõ  selecô  proportionaì  fontó  bù   changinç -characteò widthó aó iî thå followinç examples: - -.cw 22 -Thió ió characteò widtè 22. -.cw 11 -Thió ió characteò widtè 11. -.cw 9 -Thió ió characteò widtè 9. -.cw 7 -Thió ió characteò widtè 7. -.uj dis -.ps off -.cw 12 - -Other - -Phantoí Spacå¬ Phantoí Rubout - -WordStaò maù allo÷ yoõ tï prinô speciaì characteró (foò  example¬ -á  paragrapè  sigî  oò centó sign© bù  usinç  thå  phantoí  spacå -commanä (^PF© oò thå phantoí rubouô commanä (^PG© iî á  document® -Foò  youò  printer¬ thå phantoí spacå characteò isº  ¬  anä  thå -phantoí rubouô characteò isº . - -Switchinç tï Drafô Mode - -.lq off -Doô matriø printeò driveró allo÷ switchinç froí NLÑ (neaò  letteò -quality© modå tï drafô modå foò fasteò printing. -.lq on - -Microspacå Justification - -.uj on -WordStar‚   allowó  microspacå  justification¬  iæ  youò   printeò -supportó  it¬ tï producå evenlù spaceä wordó iî  justifieä  text® -Microspacinç spreadó thå whitå spacå betweeî wordó (anä sometimeó -betweeî thå letteró oæ eacè word© aó evenlù aó possible® -.uj dis -.pa ŠLookinç Aô Thió Filå Onscreen - -Iæ  yoõ wanô tï seå thå embeddeä commandó thaô produceä thå  texô -yoõ arå no÷ reading¬ follo÷ theså steps: - -1 Aô thå Openinç Menu¬ presó D‚ tï ediô á document. - -² Aô thå prompô foò filename¬ typå print.tsô anä presó Enter. - -Noticå thaô thå texô onscreeî includeó somå characteró thaô don'ô -appeaò  iî  thå  printeä copy® Foò example¬ á  headinç  linå  ió -identifieä  bù  thå  doô  commanä .he®   Wordó  iî  boldfacå  arå -surroundeä bù ^ anä appeaò eitheò highlighteä oò iî á  differenô -coloò oî youò screen. - -Tï continuå viewinç thå contentó oæ thió file¬ ¬ presó ^C® Presó -^R‚ tï movå iî thå otheò direction. - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/READ.ME b/software/CPM/CPM30_WORDSTAR_v400/READ.ME deleted file mode 100644 index 3f1cf90..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/READ.ME +++ /dev/null @@ -1,2141 +0,0 @@ - --THE README FILE-- - ------------------------ - -README contains late-breaking news and tips about WordStar, -and information about printers. - - -THE DISKS THAT CAME IN YOUR PACKAGE ------------------------------------ - -The file HOMONYMS.TXT is included on the Speller disk -contrary to what is listed in Appendix D. - - -INSTALLATION ------------- - -WINSTALL and WSCHANGE - - WordStar has two installation programs: - - o WINSTALL contains the basic choices to install WordStar. - It is recommended for all users. - - Be sure and install your valid disk drives since WordStar - running under CP/M cannot recover from attempts to access non- - existent disk drives. - - o WSCHANGE contains every installation and customization - choice. It is designed for advanced users and users who - want to customize WordStar after they're familiar with it. - Use the menu listing below for a directory of the menus - in WSCHANGE. - -Directory of WSCHANGE Menus - - The chart below shows the organization of menus in WSCHANGE. - Print it out and refer to it as you customize WordStar. - - Main Installation Menu - - A Console - A Monitor - A Monitor selection - B Monitor name - C Screen sizing - B Function keys - C Monitor patches - A Special characters - B Cursor control - C Screen control - D Keyboard patches - A Function keys - B Save function keys - E Interface patches - A Console busy handshaking - B Special I/O subroutines - B Printer - A Printer choices - A Printer selection - B Printer name - C Default printer driver - B Printer driver library - A Select library file - B Create smaller library - C Add new printer driver - D Change printer driver data - C WS printer patches - A Custom print controls, printer initialization - - NOTE: Disregard the "CUSTOM & SIMPLE Controls Save CUSTOM/SIMPLE - Controls" option shown. This is not available from this menu. - - D Printing defaults - E Printer interface - A Printer port selection - B Printer busy handshaking - C Printer subroutines - C Computer - A Disk drives - A Valid disk drives - B Maximum valid user number - C Delay disk access if typing - B Operating system - A Single-user system - B Multi-user MP/M - C Multi-user Turbo DOS - D ZCPR3 - C Memory usage - D WordStar files - E Directory display - F Computer patches - D WordStar - A Page layout - A Page sizing & margins - B Headers & footers - C Tabs - B Editing settings - A Edit screen & help level - B Typing - C Paragraph alignment - D Blocks - E Erase & unerase - F Lines & characters - G Find & replace - H WordStar 3.3 compatibility - I Printing defaults - C Other features - A Spelling checks - B Nondocument mode - C Indexing - D Shorthand (key macros) - E Merge printing - F Miscellaneous - E Patching - A Auto patcher - B Save settings - C Reset all settings - -MEMORY USAGE ------------- - - WordStar requires a minimum TPA size of 50 kbytes to run - using the factory defaults. The TPA is the amount of memory - available in your computer for use by programs that have a - file type of COM. To see how big the TPA is in your computer, - press the question mark key (?) at the Opening Menu. - - The amount of memory required by WordStar can be reduced by - approximately 3 kbytes if necessary. Use the WSCHANGE program - to select the minimum memory configuration option. The menu - will show you what capabilities are being reduced. - - WordStar uses a general-purpose buffer for a variety of - tasks. WordStar allocates memory to this buffer for editing, - for merge printing, and at the Opening Menu (see BFSIZE in - PATCH.LST). The buffer used for editing is usually the most - sensitive to a reduced TPA size. (You may be able to use the - Opening Menu and print, but there may be insufficient memory - for editing.) - - The merge print buffer is used only to hold merge print - variable names and data. Increase it if you run out of memory - while merge printing. - - The Opening Menu buffer is used primarily to hold the file - directory, and for miscellaneous tasks. - - -LOW-MEMORY INDICATOR IN STATUS LINE ------------------------------------ - - If the Low-Memory indicator appears in the status line, it - means that WordStar was unable to complete some function. - The most common symptoms are: the line number in the - status line is wrong, or a paragraph alignment could not be - completed. You may correct the line counter by saving your - file, exiting WordStar, and re-loading your file. To correct - the paragraph alignment, move your cursor to the point where - paragraph alignment stopped, and then press ^B again. - - The reason this comes up is that WordStar was not able to fit - a big enough chunk of text into memory at one time. - - When you first begin editing, WordStar uses the value from - EDSIZE in the user area to determine the minimum amount - of memory required for a page of text. The default - is set for approximately a 55 line by 66 column page. If - your page size is routinely larger than this, you may want - to increase EDSIZE. Multiply the number of lines by the - number of columns, and divide by 128. - - If the Low-Memory indicator comes on while printing, it is due - to either the same reasons as for editing, or there is - insufficient memory to print the text proportionally spaced. - The amount of memory required depends on which printer - driver you are using. If you aren't using the .PS ON dot - command to turn proportional spacing on in your document, - low memory won't be a problem. Also, WordStar uses more - memory for merge printing than it does for regular printing - (around 2.5 kbytes more). - - The Low-Memory indicator will also appear when a full disk error - is encountered during editing. Treat the disk-full error as you - would normally. - - -RAM-RESIDENT PROGRAMS ---------------------- - - RAM-resident programs, such as SmartKey, reduce the amount of - working memory (TPA) that WordStar can use. The new features in - WordStar, such as shorthand, may reduce the need for these - RAM-resident programs, thus freeing memory for WordStar. - - -ZCPR3 SUPPORT -------------- - - In order to enable the ZCPR facilities within WordStar, the user - must use the Z3INS utility provided with ZCPR to install the - address of the ZCPR "environment" into WordStar. The environment - contains information that WordStar uses to support ZCPR-specific - functions. - - Generally, the user should log onto the drive containing the file - WS.COM, and issue the command: - - Z3INS SYS.ENV WS.COM - - The user should also run either WINSTALL or WSCHANGE to further - install WordStar for ZCPR. However, this is not mandatory because - the only thing that happens is that the WordStar sign-on says - "ZCPR3," and the LGLUSR location in the user area is changed for a - maximum user number of 31. (The normal default for LGLUSR is 15.) - - Once the user has installed WordStar for use with ZCPR, the user - will be able to use the following ZCPR features: - - - A named directory may be used when logging onto a new drive/user. - - - A named directory may be used instead of a drive/user as part - of any file name. - - - The drive/user always appears above file directories. (For CP/M - only the drive letter is shown if the user number is zero.) - - - The directory name also appears above the directory if one has - been defined for the currently logged drive/user. - - - If WordStar does not find its OVR files on the current drive and - user, it will search the drives and user numbers in the ZCPR - search path rather than using its standard search pattern. - - - WordStar installs itself as a ZCPR "shell" process which lets the - user enter any legal ZCPR command when running a program. (CP/M - can only run programs that are COM files.) - - -OSBORNE USERS -------------- - - The command to change a hard carriage return to a soft carriage - return (document mode) or to turn Auto-indent ON (nondocument - mode) does not function on the Osborne because of a limitation - in its BIOS. The following patch can be applied to change the - command from ^^ to ^- (Ctrl-Hyphen): - - Using DDT or SID in the file WSMSGS.OVR: - - At 02DA replace 1E with a 1D - At 02EF replace 1E with a 1D - At 0359 replace 1E with a 1D - At 06B2 replace 1E with a 1D - At 06C9 replace 1E with a 1D - - At the system prompt type SAVE 53 WSMSGS.OVR - - For more information on how to use SID or DDT, see your CP/M - reference guide. As always, be sure and apply the patch to a - COPY of the file. - - -INSTRUCTIONS FOR TWO FLOPPY DISK COMPUTERS ------------------------------------------- - - Do not remove the Program disk while you are using WordStar. - - The Printer Driver Library file (WSPRINT.OVR) on the WordStar - program disk is much smaller than the Printer Driver Library - file contained on the disk labeled PRINTER. Be sure to read the - section in "Starting" that discusses the printer library file. - - -RUN A PROGRAM -------------- - - Once you press R you can type the drive and user number for the - program you want to run. You may run only .COM files. CCP commands, - such as DIR cannot be used. - - -INDEXING --------- - -Using StarIndex - - StarIndex 1.01 works with files created with this release of - WordStar. - -"Can't Use That Printer" Message - - When WordStar creates an index or table of contents, it uses - the printer drivers $INDEX and $TOC. If you created a smaller - WSPRINT.OVR file, you may have left these drivers out. To - return them to the file, copy the original WSPRINT.OVR file - onto your disk. When you create a smaller file again, be sure - to save these drivers. See Appendix C in the WordStar manual - for a list of other drivers to save. - - -SPELL CHECKING --------------- - - Dual floppy disk users: - - Unless you have sufficient room on your working WordStar program - disk for the files TW.COM, SPELL.COM, MARKFIX.COM, REVIEW.COM and - MAINDICT.CMP you will not be able to run a spell check from the - Opening Menu. You will need to exit WordStar and replace the - working WordStar program disk with the dictionary disk you created - during installation. This disk should contain the files listed - above. Make sure the disk in drive B has the file you want to - spell-check. - - Follow the directions for running a spell check in The WORD Plus - manual. - - -UPGRADING FROM A PREVIOUS RELEASE ---------------------------------- - - This release of WordStar contains many new features and commands. - See the "What's New" booklet for a complete list. The following - changes came in too late to be included in the documentation. - -Printer Patches - - Previous versions of WordStar treat most dot matrix printers - and other non-daisy wheel printers as a DRAFT printer with a - few patchable items. Because of this, many users have used - these patches to be able to use certain features of their - printers. Sometimes the patches have been quite extensive, and - some users have many files that count on them. - - The printer drivers of WordStar Release 4, on the other hand, - are very powerful. Almost every driver recognizes all the print - controls and all the dot commands. In fact, if a document is - written to be printed on one kind of printer, it is likely that - it will also print fine on some other printer. - - However, if you want to use your existing files with WordStar - 4, and those files rely on the user area being patched in a - special way, you can probably do so by moving the patches into - WordStar 4, and using the CUSTOM or SIMPLE printer driver. - - On the INSTALL disk is a program called MOVEPRN.COM that - copies the printer driver portion of the previous release's - user area into files that can be installed into Release 4 with - the "auto patcher" feature. - - Copy the program MOVEPRN.COM onto the disk containing the - WS.COM file for the previous version. Type - - MOVEPRN WS.COM FILE1.PAT FILE2.PAT - - MOVEPRN extracts the proper portions of the user area and - writes them into two files that may then be used with the "auto - patcher" feature of WSCHANGE. - - FILE1.PAT is to be used with the general patching menu - (Choose E "Patching" on the WSCHANGE Main Menu, then A "Auto - Patcher"). FILE2.PAT should be used to install strings first - into the SIMPLE driver, and then into the CUSTOM driver (choose - B "Printer" on the WSCHANGE Main Menu, then B "Printer driver - library", D "Change printer driver data" and D "Driver auto - patcher"). - - Test print your document first with the SIMPLE driver, and then - with the CUSTOM driver to see which one produces the most - satisfactory results. - - Also read Appendix C for more information on using the Auto - Patcher. - - -Hanging Indents - - For WordStar Professional Release 4, MailMerge reformats indented - text created with ^OG to the current margins. If you want the text - to remain indented, use embedded ruler lines or the .RM, .LM, - and .PM commands. See the "Reference Guide" for more information. - - Pressing ^OG to wrap back to the first tab on the ruler line after - having reached the last tab works the same way it did in previous - versions of WordStar, contrary to what is stated in the manual. - - -TERMINALS ---------- - - WordStar comes installed for an "idealized" special terminal. - WINSTALL and WSCHANGE allow you to install many terminals by - name, thus allowing WordStar to take advantage of the special - features that the terminal might support, such as underlining - or the function keys. - - Use either WINSTALL or WSCHANGE to pick your specific terminal - or computer screen from the Monitor menu. If your terminal - isn't on the menu, it probably emulates one of those that is - there. Look in your terminal documentation to find out. - - After you install WordStar for the proper terminal, run - WordStar and open the file PRINT.TST to see which attributes - (such as bold and underline) work on your screen. - WordStar will highlight the following in some way... - - Bold (^PB) - Underline (^PS) - Strike-out (^PX) - Subscript (^PV) - Superscript (^PT) - Doublestrike (^PD) - Italics (^PY) - Blocks (^KB, ^KK) - Error messages - - Most of the time, normal text will be shown in dim intensity, - and highlighted text will be shown in bright intensity. You - may have to use a brightness and/or contrast knob to adjust - your screen the first time you use WordStar this way. - - If your dim intensity is too dim to see well, and you can't - adjust it, you can change the BRITE flag to ON using WSCHANGE. - This will invert bright and dim in your text, so that regular - text is displayed bright, and highlighted text will be - displayed as dim. However, text in the menus is not affected. - - -DISPLAY PROBLEMS WITH TERMINALS -------------------------------- - - Once you have installed WordStar for the proper terminal, you - may still experience display problems. - - If text from the previous screen remains after WordStar - displays a new screenful of text, the most likely cause is - cursor wrap. Basically, WordStar must know what happens to the - cursor when a character is displayed at the rightmost position - of the screen. It can either remain at the right edge, or it - can wrap to the beginning of the next line. The WRAP flag in - WordStar must be set either on or off to correspond to the - way the terminal works. (It is generally set for the - terminal's factory default, but the default can usually be - changed using the terminal's setup mode.) - - Another possible cause for display problems is your terminal's - incomplete emulation of some other terminal. The most - common differences are... - - Line insert (LININS), line delete (LINDEL), - Erase to end of screen (ERAEOS), - Erase to end of line (ERAEOL), - And, erase screen (ERASCR). - - Look in the manual for your terminal and use WSCHANGE to see - if the control sequences match. - - -PRINTERS --------- - -WHAT'S IN THIS SECTION - - This section contains the following information: - - Choosing a Printer - Setting Up Your Printer - Printer Drivers - Proportional Printing - Laser Printers - Information on Specific Printers - -CHOOSING A PRINTER - - WordStar is ready to work with over 100 printers. The printer you - choose during installation becomes your default printer. However, - when you print a document, you can choose any other printer. To - choose a default printer, follow these steps: - - 1. Look at the Printer Information brochure that came in your - package. The first chart shows the printers listed on the - Printer Selection Menus. If your printer is on the menu, - simply choose it during installation. - - 2. If your printer isn't listed on the menu, it may work like a - printer that is. Refer to the second chart in the Printer - Information brochure for a list of printers that work like - printers on the menu. When WordStar asks you to choose a - printer, choose the printer that works like yours. - - 3. If neither chart lists your printer, choose Typewriter Printer - (if your printer can backspace) or Draft Printer (if it can't). - These choices may not take advantage of all your printer's - features, but they will work with almost any printer. - - Note: If you choose Draft or Typewriter, you can modify custom - print controls and printer initialization. - - If you want to make more modifications to take advantage of your - printer's feature, choose the Custom or Simple drivers, then use - the WS Printer Patches section of WSCHANGE to tell WordStar the - codes for your printer. Refer to your printer manual for these - codes. Some printers work better with the Custom driver and some - with the Simple driver. Try using both and see which works better - with your printer. See the "Reference Guide" for more information. - -SETTING UP YOUR PRINTER - -Choosing a Printer Port - - Each printer is connected to a printer port at the back of - the computer. WordStar looks for printers on the LST: port. - If your printer is connected to a different port, use - WSCHANGE to tell WordStar the correct port. - -Testing Your Printer Connection - - At the operating system prompt, type "PIP LST:=READ.ME." This - file should be printed by your printer. If it is not, your printer - may be connected to a different port. See your computer reference - manual, and the section on the STAT command in your CP/M - reference manual for more information. - - -PRINTER DRIVERS - - The WSPRINT.OVR file on the Printers disk contains a printer - driver for each printer on the Printer Selection Menu. The printer - driver for a printer contains all the codes WordStar needs to work - with that printer. - - Each printer driver has a short name. If you choose a printer when - you print a document, you see the names of the printer drivers, not - the names of the printers. - -PROPORTIONAL PRINTING - - WordStar supports proportional printing on a number of printers. - To turn on proportional printing, either install WordStar to - default to proportional printing, or place a ".PS on" command - in your document. At print time, WordStar selects the - appropriate proportional font based on the character width - (.CW) currently in effect. - - The specific printer descriptions later in this section show - recommended character widths for proportional typefaces. - These widths are for a normal mix of upper- and lowercase - letters. If you have many words or phrases all in uppercase - or if you want your text less densely printed, choose a larger - character width. - - While WordStar mostly sets character widths based on the - proportional-width table in the driver, on the more advanced - daisy wheel printers, WordStar uses the printer's proportional- - spacing mode. WordStar determines how much white space is needed - to right-justify the line based on its own proportional width - tables. If the table values don't match the wheel installed, - WordStar won't be able to justify the line correctly. - - WordStar sends standard ASCII characters; if a proportional wheel - uses a different spoke mapping, set up the printer to handle this. - -LASER PRINTERS - - WordStar supports laser printer features such as font changes - and proportional spacing. - - WordStar supports several laser printers: the Canon LPB-8 A1 & A2; - the Hewlett-Packard LaserJet, LaserJet+, and LaserJet 500+; - and the Ricoh LP4080. Refer to the "Specific Printer - Information" section of this file for information on these - printers. General notes about using laser printers are given below. - -Paper Size and Margins - - Laser printers come with preset page margins. You need to - compensate for these margins by changing page length in your - WordStar documents. The chart below shows the recommended - settings for 8 1/2 X 11 inch paper for both portrait and landscape - orientations. These settings allow 55 lines of text for portrait - orientation and 40 lines of text for landscape orientation (at 6 - lines per inch). They also allow for a footer of up to 3 lines - and a one-line header. If you use multiple-line headers, adjust - the top margin accordingly. - - Dot Default Portrait Landscape - Setting Command Value Orientation Orientation - ------- ------- ------- ----------- ----------- - page length .PL 66 62 47 - top margin .MT 3 2 2 - bottom margin .MB 8 5 5 - header margin .HM 2 1 1 - footer margin .FM 2 2 2 - - If the laser printer is your primary printer, you can use WSCHANGE - to make these settings the defaults. - - Because laser printers leave small margins at the left and right - sides of the page, you may want to use a smaller page offset - setting (the default is .PO 8). - -Form Feeds - - When you print with a laser printer, answer Y for yes to the "Use - form feeds (Y/N)?" prompt at print time. (The default is NO.) If - the laser printer is your primary printer, you can use WSCHANGE to - change the default to yes. - -WordStar Commands for Font Selection - - The WordStar dot commands and print control commands listed below - determine the fonts used for printing a document. - - .PR .PR OR=L selects landscape orientation; .PR OR=P (or just - .PR OR) selects portrait orientation (the default). If - either of these commands appears after the first printing - line on a page, the orientation will not change until the - following page. - - .PS .PS ON selects proportionally spaced characters; .PS OFF - (the default) selects fixed-spaced characters. - - .CW The character-width setting (.CW followed by the width in - 120ths of an inch) determines the character pitch and font - selected for fixed-width printing. For proportional fonts, it - determines the point size and proportional-width table - selected. - - .LQ .LQ ON selects near letter quality print (if supported by - your printer). LQ OFF selects draft quality print. Default - is ON. - - ^PY The italic print control toggles between normal and italic - characters when the appropriate italic font is available. - - ^PB The boldface print control toggles between normal and bold - characters when the appropriate bold font is available. - - ^PD The double strike print control used with the laser printers - toggles overprinting with a horizontal offset of 1/120" - between the two character images. This allows a bold effect - where no bold font is available. - - ^PA ^PA turns alternate pitch on. Use .CW to assign different - character widths to normal pitch (see ^PN below) and alternate - pitch so that each pitch accesses a different font. You can - then change fonts by switching between the two pitches. This - is the only way to use two fonts on the same line. - (See "Character width" and "Pitch" in the "Reference Guide.") - - ^PN ^PN turns normal pitch on. You can use it with ^PA as - described above. - - ^P@ When working with columns, if you use alternate and normal - pitch for two fonts, or if you use proportional spacing, you - may need to use ^P@ to make sure the columns line up. - Remember that the column position set with ^P@ is determined - by the normal pitch character width. (See "Columns" and - "Proportional spacing" in the "Reference Guide." - -INFORMATION ON SPECIFIC PRINTERS - - This section describes the capabilities of each printer listed on - the Printer Selection Menu. The printers are listed in alphabetical - order (except for the generic printers such as "Draft," - "Typewriter," "Custom," "Simple," and the various print-to-disk - options, which are listed first). - - There is a chart for each printer explaining how features work and - listing any special notes about the printer. Each printer is - described in the following format: - -PRINTER NAME ----- Driver: (short name) - - ^PY Effect of italics/ribbon color print control - ^PT/V Subscript/superscript information - .CW Information on available character widths and fonts. The - chart shows the .CW, .LQ, and .PS settings required to use - different fonts. - - .LQ OFF .LQ ON .PS ON Font Name - ------- ------ ------ --------- - .cw val .cw val recommended value (range) font 1 - .cw val .cw val recommended value (range) font 2 - - .UL Continuous-underline information (if restrictions) - .UJ Microspace-justification information (if restrictions) - - N/A means a command has no effect on this printer. - - NOTES Switch settings, special features, anomalies. - -DRAFT PRINTER (nonbackspacing) ----- Driver: DRAFT - - ^PD Overprints the line twice - ^PB Overprints the line three times - ^PS Overprints the underscore character in a separate pass - ^PT/V Prints super/subscripts with a full line between - super/subscript and text - .LH Sets line height only in multiples of full lines - .CW N/A - .PS N/A - .LQ N/A - .UJ N/A - - NOTES This driver works with any printer that doesn't automatically - perform a line feed when it receives a carriage return command. All - overprinting is done by returning the carriage and passing over the - line again. - -TYPEWRITER PRINTER (backspacing) ----- Driver: TYPEWR - - ^PD Backspaces and overprints each character twice - ^PB Backspaces and overprints each character three times - ^PS Backspaces and overprints the underscore character - ^PT/V Prints super/subscripts with a full line between - super/subscript and text - .LH Sets line height only in multiples of full lines - .CW N/A - .PS N/A - .LQ N/A - .UJ N/A - - NOTES This driver works with any printer that doesn't automatically - perform a line feed when a it receives a carriage return command, - and responds to a backspace character. Overprinting is done by - backspacing. - -AUTO LINE FEED PRINTER (backspacing) ----- Driver: AUTOLF - - ^PD Backspaces and overprints each character twice - ^PB Backspaces and overprints each character three times - ^PS Backspaces and overprints the underscore character - ^PT/V Prints super/subscripts with a full line between - super/subscript and text - .LH Sets line height only in multiples of full lines - .CW N/A - .PS N/A - .LQ N/A - .UJ N/A - - NOTES This driver works with any printer that automatically - performs a line feed when it receives a carriage return character, - and responds to a backspace command. Overprinting is done by - backspacing. - -SIMPLE CUSTOMIZABLE PRINTERS ----- Driver: SIMPLE - - All print controls cause control strings (on and off) in - the user area to be sent to the printer. These strings - are used by both the SIMPLE and CUSTOM drivers. They can - be installed with the WSCHANGE program. - - .LQ Controlled by user area strings - .PS Controlled by user area strings - .CW N/A - .UJ N/A - .LH N/A - - NOTES This printer driver prints the line in one pass, sending - control strings from the user area to select print enhancements. - -CUSTOMIZABLE PRINTERS ----- Driver: CUSTOM - - All print controls cause control strings (on and off) in - the user area to be sent to the printer. These strings - are used by both the SIMPLE and CUSTOM drivers. They can - be installed with the WSCHANGE program. - - .LQ ON/OFF controlled by user area strings - .PS ON/OFF controlled by user area strings - .LH Sets line height only in multiples of full lines - .UJ N/A - .CW N/A - - NOTES This driver prints the line in multiple passes, sending - control strings from the user area to select print enhancements. - -PREVIEW TO DISK ----- Driver: PRVIEW - - This driver prints documents to the PREVIEW.WS file to allow - you to preview the format and appearance of a document before - printing. Headers, footers, and pagination are shown correctly - and print controls remain in the file to display onscreen - attributes. Dot commands are not printed. - -PRINT TO DISK WITHOUT PRINT CONTROLS ----- Driver: ASCII - - This driver prints to the ASCII.WS file, stripping headers and - footers, high bits, and print controls. - -PRINT TO DISK WITHOUT HEADERS AND FOOTERS ----- Driver: XTRACT - - This driver prints to the XTRACT.WS disk file, stripping headers - and footers, but preserving high bits and print controls. - -ANADEX 9500A, 9500B ----- Driver: 9500 - - ^PY N/A - ^PT/V Even superscript roll - - .CW .CW Font name - --- --------- - 9 13.3 cpi - 10 12 cpi - 12 10 cpi - 18 6.7 cpi - 20 6 cpi - 24 5 cpi - - .LH 1/24" resolution, use even values - .UJ This printer has no incremental horizontal positioning - .PS N/A - .LQ N/A - -ANADEX 9501B, INTEQ 5100B ----- Driver: 9501B - - ^PY N/A - ^PT/V Even superscript roll - - .CW .CW Font name - --- --------- - 7 16.7 cpi - 8 15 cpi - 10 12.5 cpi - 12 10 cpi - 14 8.3 cpi - 16 7.5 cpi - 20 6.2 cpi - 24 5 cpi - - .LH 1/24" resolution, use even values - .UJ This printer has no incremental horizontal positioning - .PS N/A - .LQ N/A - -C. ITOH STARWRITER 1550 AND 8510 ----- Driver: C1550 - - ^PY N/A - ^PT/V Prints full-size characters with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - -C. ITOH F10 STARWRITER ----- Driver: QUME - - See Diablo 630, 1610, 1620 Daisy Wheel. - - Note: Proportional printing was tested with a Theme 10 wheel. - -CANON LBP-8A1 AND LBP-8A2 LASER PRINTER ----- Driver: LBP8 - - ^PY Selects italics if appropriate font installed - ^PT/V Prints full-size characters with roll - .PS .PS - .CW OFF ON Font Name - --- -- --------- - 6 - 20 cpi - 8 - 15 cpi - 9 - 13.3 cpi - 10 - 12 cpi (elite) - 12 - 10 cpi - 20 - 6 cpi - 24 - 5 cpi - 16 - 7.5 cpi - - 7 (0-8) Garland 8 point - - 10 (9-11) Garland 12 point - - 14 (12-17) Expanded 8 point - - 20 (18-30) Expanded 12 point - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended - .PR OR "=Landscape" or "=Portrait" to select orientation - - NOTES Answer yes to the "Use form feeds" prompt. This driver is - configured to select all the built-in fonts in the LBP8, as well - as fixed pitch cartridges and the Garland PS cartridge. Other - proportional cartridges require modifying the proportional spacing - tables with WSCHANGE. For more information on laser printers, see - the "Laser Printers" section above. - -CITIZEN MSP ----- Driver: CITMSP - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LH Use even values. Driver operates at 2/48 resolution. - .PS N/A - .UJ Microjustification slows printing. Continuous underlining - suppresses microjustification. - - -DATAPRODUCTS PAPER TIGER SPG-8050 & SPG-8070 ----- Driver: SP8050 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, prints full-size - .LQ .LQ .PS - .CW ON OFF ON Font name - --- --- --- --------- - 7 7 5 (0-6) condensed - 10 10 8 (7-8) elite - 12 12 10 (9-13) pica - 14 14 - expanded condensed - 20 20 16 (14-17) expanded elite - 24 24 20 (18-30) expanded pica - -DIABLO 630, 1610, 1620 DAISY WHEEL ----- Driver: DIABLO - - ^PY Selects red/black ribbon color - ^PT/V Prints super/subscripts in separate pass with specified roll - .CW Supports any value from 0 to 30. Usual fixed pitch values - are 8 (15 cpi), 10 (12 cpi), and 12 (10 cpi). - .BP ON selects bidirectional printing; OFF selects left-to-right - printing - .LQ N/A - .UL Continuous underlining does not suppresses microspace - justification. Continuous underlining may be irregular. - .PS ON selects proportional spacing; OFF selects fixed pitch - spacing. If a proportional print wheel has a non-standard - spoke pattern, configure the printer to translate spoke - position into the appropriate character. This driver - explicitly positions each character when proportional spacing - is selected. - - NOTES The proportional spacing tables are set up for a Diablo - metal 96 character BOLD PS wheel. - -DIABLO 630 DAISY WHEEL WITH WP OPTIONS ----- Driver: 630WP - - ^PY Selects red/black ribbon color - ^PT/V Prints super/subscripts in separate pass with specified roll - .CW Supports any value from 0 to 30. Usual fixed pitch values - are 8 (15 cpi), 10 (12 cpi), and 12 (10 cpi). - .LQ N/A - .UL Continuous underlining does not affect microspace justifi- - cation - .PS ON selects proportional spacing; OFF selects fixed pitch - spacing. If a proportional print wheel has a non-standard - spoke pattern, configure the printer to translate spoke - position into the appropriate character. This driver sends - codes to the printer to turn proportional spacing on and off, - and the printer controls character to character spacing. - - NOTES The proportional spacing tables are set up for a Diablo - metal 96 character BOLD PS wheel. - -DIABLO 630 DAISY WHEEL, EXTENDED CHARACTER SET ----- Driver: 630ECS - - ^PY N/A - ^PT/V Prints super/subscripts in separate pass with specified roll - .CW Supports any value from 0 to 30. Usual fixed pitch values - are 8 (15 cpi), 10 (12 cpi), and 12 (10 cpi). - .LQ N/A - .UL Continuous underlining does not affect microspace justifi- - cation - .PS ON selects proportional spacing; OFF selects fixed pitch - spacing. If a proportional print wheel has a non-standard - spoke pattern, configure the printer to translate spoke - position into the appropriate character. This driver sends - codes to the printer to turn proportional spacing on and off, - and the printer controls character to character spacing. - - NOTES The proportional spacing tables have been set up for a Diablo - metal 96 character BOLD PS wheel. - -DIABLO C150 & C200 COLOR JET PRINTERS ----- Driver: C150 - - ^PY Selects red/black ink - .CW 10 characters per inch only - .LH 1/30" resolution - .PS N/A - .LQ N/A - -EPSON FX-80 AND FX-100 ----- Driver: FX80 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - -EPSON FX-85, FX-185 AND FX-286 ----- Driver: FX85 - - ^PY Selects draft quality italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 6 - - compressed elite - 7 - - compressed - 10 - - elite - 12 12 11 (10-13) courier - 14 - - expanded compressed - 20 - - expanded elite - 24 24 22 (20-30) expanded courier - - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - .UJ must be on for proportional text to be right-justified. - -EPSON LQ-800 AND LQ-1000 ----- Driver: LQ800 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - - - - compressed script - 6 6 - compressed elite - 7 7 6 (0-7) compressed - 8 - subscript 15 cpi - 10 10 - elite - 12 12 10 (8-16) pica - 14 14 - expanded compressed - 16 - expanded script - 20 20 - expanded elite - 24 24 - expanded courier - -EPSON LQ-1500, VERSION 2.0 ----- Driver: LQ1500 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - 10 10 - elite - - - 8 (1-9) subscript 15 cpi - 12 12 11 (10-13) courier - 14 - - expanded compressed - - - 15 (14-18) expanded script - 20 20 - expanded elite - 24 24 20 (19-30) expanded courier - - .UL Continuous underlining suppresses microspace justification. - In proportional fonts, continuous underlining may appear - broken between words. - - NOTES If you have an older LQ-1500 (firmware version 1.8), your - printer will have horizontal position registration problems. For - best results, contact your printer dealer about a ROM upgrade. - -EPSON LX-80 - Driver: LX80 - - ^PY Selects draft mode italics - ^PT/V Prints half height if .SR 0, else full height with roll - - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 - compressed - 10 - elite - 12 12 courier - 14 - expanded compressed - 20 - expanded elite - 24 24 expanded courier - - .LH Use even values. Driver operates at 2/48" resolution. - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - -EPSON MX-80 AND MX-100 WITH GRAFTRAX+ -EPSON MX-80 III AND MX-100 III ----- Driver: MX80 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 12 pica - 14 expanded compressed - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - - NOTES Older MX-80 and MX-100 printers don't have graphics mode (for - fine horizontal spacing), variable line height setting, printer - controlled underlining, or printer controlled super/subscripts. If - you have one of these printers, use the DRAFT driver, or adapt the - CUSTOM or SIMPLE driver to your needs. - -EPSON RX-80 AND RX-100 ----- Driver: RX80 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - -HEWLETT-PACKARD LASERJET PRINTERS - - The following information applies to the LaserJet, the LaserJet+, - and the LaserJet 500+. For general information on laser printers, - see the "Laser Printers" section above. - -The LaserJet Fonts - - The LaserJet has three different types of fonts: - - - The "internal" fonts that came with the printer - - Plug-in cartridges - - Soft fonts that must be downloaded through your computer. - (Only the LaserJet+ and LaserJet 500+ can use downloaded fonts.) - - The fonts available in your LaserJet depend on which cartridge - you have installed and which fonts you have downloaded. - -Font Installation - - Internal Fonts: - - The fonts that came with your printer are already in memory and - ready to use. Different LaserJet models come with different sets - of internal fonts. - - Cartridges: - - Cartridges containing a variety of character fonts can be - inserted into any LaserJet model. See your printer manual for - instructions. - - The font selection guidelines in the sections below contain - information about specific cartridges. The letter that identifies - your cartridge is on the front label, directly following the - number 92286. For example, the Y cartridge is labeled 92286Y. - - Soft fonts: - - Soft, or downloadable, fonts are supplied on disk. These fonts - are not explicitly supported by WordStar. - -LaserJet Font Selection - - Each LaserJet font has several characteristics associated with - it. When a printer driver specifies font characteristics to the - LaserJet, the LaserJet searches its available fonts for the best - match to the characteristics requested. The following table - describes these characteristics, in the order in which the - LaserJet evaluates them when selecting a font. - - Characteristic WordStar Control - -------------- ----------------- - * Orientation (portrait or landscape) .PR OR=P/L - * Symbol Set (Roman-8, USASCII, Printer driver - Line Draw, etc.) - * Proportional or fixed spacing .PS ON/OFF - * Print pitch (fixed-width fonts) .CW - * Character height (point size) .CW - * Character style (upright or italic) ^PY - * Stroke weight (light, medium, bold) ^PB - - Note that symbol set is high in the list of characteristics: - make sure that the driver you select is compatible with the symbol - set of your cartridge or downloaded fonts. The symbol sets used by - each driver are listed in the table in the next section. For example, - if your cartridge has the USASCII Symbol Set, you can't use the - HPLJ:U driver because it uses only the Roman-8 Symbol Set. - -LaserJet Printer Drivers - - WordStar provides two printer drivers for use with different - LaserJet font cartridges. Each of these drivers - lets you print with several of the available fonts. You can - use any of these drivers with the LaserJet, LaserJet+, or - LaserJet 500+, depending on the cartridge. - Refer to the table below to see which driver works - best for you. - - The table lists the following information for each driver: - - o The symbol sets used for fixed and proportional spacing - - These must correspond to the symbol sets on the installed - fonts you want to use. The "Default" symbol set refers to the - one the LaserJet defaults to. - - o The proportional-spacing tables used by the driver - - These tables are part of the LaserJet's method of proportional - spacing. The tables determine the width of each character in a - proportionally spaced font. The fonts corresponding to these - tables are used if available. If the corresponding font is not - installed, the table is still used, and the closest available - font is used. This may cause the spacing to appear too tight or - too loose. In this column, the number is the point size, R stands - for regular, B stands for bold, and I stands for italics (the - LaserJet has separate tables for each of these). - - o The font cartridges that work best with - the symbol sets and tables used by the driver - - The cartridges listed are the only ones directly - supported for use with WordStar. If your cartridge is not - listed, you may still be able to use it. Look at - the font information below and try the most compatible driver. - You may need to try different dot command settings or another - driver. The HPLJET is the most "general purpose" driver, so if - you're not sure which driver to use, try it first. - - Fixed-width Proportional Proportional Downloaded - Driver Symbol Set Symbol Set Tables Fonts/Cartridges - ------ ----------- ------------ ------------- ---------------- - - HPLJET Default Default TmsRmn 8R, F, P, most fixed - 10R,10B,10I - Helv 14B - - HPLJ:B Default USASCII TmsRmn 8R, B - 10R,10B,10I - Helv 14B - - HPLJ:U Roman-8, Roman-8 Helv 6R,8R, U, V - Line Draw 10R,12R,14R - - HPLJ:Y PCSET1 USASCII TmsRmn Y, AC - PCSET2 6,8,10,12,14 - (all in R,B,I) - 18B,24B,30B - - HPL:AD Roman-8, Roman-8 TmsRmn AD - Line Draw 6,8,10,12,14 - (all in R,B,I) - 18B,24B,30B - - The printer driver charts below show the actual fonts that print - with each printer driver and the recommended font cartridges. - The charts show the fonts used for both fixed - and proportional spacing and for different character width (.CW) - settings. - - The recommended .CW settings are shown first. The settings in - parentheses select the same font, but the spacing of characters - within a line may appear tighter or looser. - - After the name of each font, the charts note whether regular (R), - bold (B), and italic (I) fonts are available. If a bold font is - not available, you can use the ^PD (double strike) command to get - a boldface effect. - - The last column shows whether you can print in landscape (chosen - in WordStar with .PR OR=L) as well as portrait orientation. - - To use a particular font, choose the settings listed. For example, - to use the Times Roman 8 font with the HPLJET printer driver, insert - the F cartridge, turn .PS on and set character width to .CW 7. - -HP LASERJET, LASERJET+ (F cartridge and others) ----- Driver: HPLJET - - ^PY Selects italics if appropriate font installed - ^PT/V Prints full-size characters with roll - - Cartridge/ - Soft font .PS .CW Font/Point Size R B I Landscape - --------- --- -------- --------------- - - - --------- - F on 7 (0-7) Times Roman 8 x - 9 (8-11) Times Roman 10 x x x - 13 (12-30) Helvetica 14 x - off 7 (0-11) Line Printer 8.5 x - 12 (12-30) Courier 12 x x - P on 9 (0-30) Times Roman 10 x x x x - off 7 (0-11) Line Printer 8.5 x - 12 (12-30) Courier 12 x x (0-30) - - The following fixed pitch fonts may be available depending - on your cartridge. (Note that these are measure by pitch, - not by point size.): - - .CW Font Name - --- --------- - 7 16.7 pitch - 10 12 pitch - 12 10 pitch - 15 8.1 pitch - 18 6.5 pitch - 21 5.8 pitch - 27 4.5 pitch - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended. - Too large a value will cause text to be lost at page bottom. - .PR OR "=Landscape" or "=Portrait" to select orientation. - - NOTES Answer yes to the "Use form feeds" prompt. This driver has - proportional spacing tables for all fonts in the F and P cartridges. - It should also work with many fixed width cartridges. -.p - -HP LASERJET, LASERJET+ (B cartridge) ----- Driver: HPLJ:B - - ^PY Selects italics if appropriate font installed - ^PT/V Prints full-size characters with roll - - Cartridge/ - Soft font .PS .CW Font/Point Size R B I Landscape - --------- --- -------- --------------- - - - --------- - B on 7 (0-7) Times Roman 8 x - 9 (8-11) Times Roman 10 x x x - 13 (12-30) Helvetica 14 x - off 7 (0-11) Line Printer 8.5* x x - 12 (12-30) Courier 12 x x - * Line printer 8.5 is not available in portrait mode - unless the LaserJet+ is used. - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended. - Too large a value will cause text to be lost at page bottom. - .PR OR "=Landscape" or "=Portrait" to select orientation. - - NOTES Answer yes to the "Use form feeds" prompt. This driver has - proportional spacing tables for all fonts in the B cartridge. -.p - -HP LASERJET, LASERJET+ (U and V cartridges) ----- Driver: HPLJ:U - - ^PY Selects italics if appropriate font installed - ^PT/V Prints full-size characters with roll - - Cartridge/ - Soft font .PS .CW Font/Point Size R B I Landscape - --------- --- -------- --------------- - - - --------- - U on 5 (0-5) Helvetica 6 x - 7 (6-7) Helvetica 8 x - 9 (8-9) Helvetica 10 x - 11 (10-11) Helvetica 12 x - 13 (12-30) Helvetica 14 x - off 7 (0-11) Letter Gothic 9.5 x - 12 (12-30) Courier 12 x x (0-30) - - V on 5 (0-5) Helvetica 6 x landscape only* - 7 (6-7) Helvetica 8 x "* - 9 (8-9) Helvetica 10 x "* - 11 (10-11) Helvetica 12 x "* - 13 (12-30) Helvetica 14 x "* - off 7 (0-11) Letter Gothic 9.5 x ** - 12 (12-30) Courier 12 x - * No proportional font is available in portrait orientation. - ** With fixed spacing, in portrait orientation, .CW7 (0-11) - produces Line Printer 8.5 on the LaserJet+ and Courier 12 - on the LaserJet. - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended. - Too large a value will cause text to be lost at page bottom. - .PR OR "=Landscape" or "=Portrait" to select orientation. - - NOTES Answer yes to the "Use form feeds" prompt. This driver has - proportional spacing tables for all fonts in the U and V cartridges. -.p - -HP LASERJET, LASERJET+ (Y cartridge, AC TmsRmn) ----- Driver: HPLJ:Y - - ^PY Selects italics if appropriate font installed - ^PT/V Prints full-size characters with roll - - Cartridge/ - Soft font .PS .CW Font/Point Size R B I Landscape - --------- --- -------- --------------- - - - --------- - Y on none available - off 7 (0-11) Line Printer 8.5 x x - 12 (12-30) PC Courier 12 x x x - - AC* on 5 (0-5) Times Roman 6 x x x x - 7 (6-7) Times Roman 8 x x x x - 9 (8-9) Times Roman 10 x x x x - 11 (10-11) Times Roman 12 x x x x - 13 (12-14) Times Roman 14 x x x x - 16 (15-18) Times Roman 18 x x - 20 (19-24) Times Roman 24 x x - 25 (25-30) Times Roman 30 x x - off 7 (0-11) Line Printer 8.5 x x (0-30) - 12 (12-30) Courier 12 x - * Other .CW settings may access additional fonts if a - cartridge is also installed. - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended. - Too large a value will cause text to be lost at page bottom. - .PR OR "=Landscape" or "=Portrait" to select orientation. - - NOTES Answer yes to the "Use form feeds" prompt. This driver is for - use with the Y cartridge, which provides an IBM PC compatible symbol - set. In addition, this driver has complete proportional spacing - tables for the AC set of downloadable TmsRmn fonts. -.p - -HP LASERJET, LASERJET+ (AD TmsRmn) ----- Driver: HPL:AD - - ^PY Selects italics if appropriate font installed - ^PT/V Prints full-size characters with roll - - Cartridge/ - Soft font .PS .CW Font/Point Size R B I Landscape - --------- --- -------- --------------- - - - --------- - AD* on 5 (0-5) Times Roman 6 x x x x - 7 (6-7) Times Roman 8 x x x x - 9 (8-9) Times Roman 10 x x x x - 11 (10-11) Times Roman 12 x x x x - 13 (12-14) Times Roman 14 x x x x - 16 (15-18) Times Roman 18 x x - 20 (19-24) Times Roman 24 x x - 25 (25-30) Times Roman 30 x x - off 7 (0-11) Line Printer 8.5 x - 12 (12-30) Courier 12 x x (0-30) - - The following fixed pitch fonts may be available depending - on your cartridge. (Note that these are measure by pitch, - not by point size.): - - .CW Font Name - --- --------- - 7 16.7 pitch - 10 12 pitch - 12 10 pitch - 15 8.1 pitch - 18 6.5 pitch - 21 5.8 pitch - 27 4.5 pitch - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended. - Too large a value will cause text to be lost at page bottom. - .PR OR "=Landscape" or "=Portrait" to select orientation. - - NOTES Answer yes to the "Use form feeds" prompt. This driver is for - use with the AD TmsRmn downloaded fonts, and for a ROMAN8 or - ROMAN8+LINEDRAW fixed width font cartridge. The driver includes - complete proportional spacing tables for the AD set of downloadable - TmsRmn fonts. - -HP THINKJET, IBM mode ----- Driver: HPTJI - - ^PY N/A - ^PT/V Prints full-size characters with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is ON. - - NOTES This printer does not have a true 10 pitch font, so character - widths are not exact, and ^P@ does not align exactly with text. - Because the printer has an automatic page offset, set the WordStar - page offset to zero. - -IBM COLOR PRINTER 5182 ----- Driver: IBMCLR - - ^PY Selects red/black ribbon color - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ .PS - .CW OFF ON ON Font Name - --- --- -------- --------- - 7 7 5 (0-6) compressed - 10 10 8 (7-8) elite - 12 12 10 (9-13) pica - 14 14 - expanded compressed - 20 20 15 (14-16) expanded elite - 24 24 20 (17-30) expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ Has same effect as ^PD - .UL Underlining may be irregular with microspace justification on - .UJ Microspace justification slows printing. Default is OFF. - -IBM GRAPHICS PRINTER 5152 ----- Driver: IBMGR - - ^PY N/A - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 12 pica - 14 expanded compressed - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - -IBM PROPRINTER 4201 ----- Driver: IBMPRO - - ^PY N/A - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 7 compressed - 10 10 elite - 12 12 pica - 14 14 expanded compressed - 20 20 expanded elite - 24 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .PS N/A - .LQ Has same effect as ^PD - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - - NOTES If you have a Proprinter XL, you can use WSCHANGE to patch - in the extra features. - -IBM QUIETWRITER 5201 ----- Driver: IBMQUI - - ^PY Toggles between A and * font cartridge. Set character - width to match cartridge in use. (A cartridge uses current - ^PN character width; * cartridge uses ^PA character width.) - ^PT/V Prints full-size characters with roll - .CW Selects character width. Character width must correspond - to the cartridge being used. - .LQ N/A - .PS ON selects proportional spacing, OFF selects fixed pitch - spacing - -IBM WHEELPRINTER 5216 ----- Driver: IBMWP - - ^PY N/A - ^PT/V Printer determined roll if .SR 0 - .CW Selects character spacing. Any value from 0 to 30 is - supported. Usual fixed pitch values are 8 (15 characters - per inch), 10 (12 cpi) and 12 (10 cpi). - .LQ N/A - .UL Continuous underlining does not affect microjustification - .PS ON selects proportional spacing, OFF selects fixed pitch. - This driver sends codes to the printer to turn proportional - spacing on and off, and the printer controls character to - character spacing. - - NOTES The proportional spacing tables are set up for an IBM - BOLD PS wheel. - -IBM WHEELPRINTER 5223 E ----- Driver: IBMWPE - - ^PY N/A - ^PT/V Printer determined roll if .SR 0 - .CW Selects character spacing. Any value from 0 to 30 is - supported. Usual fixed pitch values are 8 (15 characters - per inch), 10 (12 cpi) and 12 (10 cpi). - .LQ N/A - .UL Continuous underlining does not affect microjustification. - Continuous underlining will be somewhat irregular. - .PS ON selects proportional spacing, OFF selects fixed pitch. - This driver will send codes to the printer to turn propor- - tional spacing on and off, and the printer will control - character to character spacing. - - NOTES The proportional spacing tables are set up for an IBM - BOLD PS wheel. - -MANNESMANN TALLY MT-160L ----- Driver: MT160L - - ^PY N/A - ^PT/V Prints full-size characters with specified even roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 6 - compressed elite - 7 - compressed - 10 10 elite - 12 12 pica - 14 - expanded compressed - 20 - expanded elite - 24 - expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .UJ N/A - - NOTES This printer is not capable of incremental horizontal - positioning. As a result, microspace justification is not possible. - In addition, when changing character widths, characters may not - align to closer than one full character width. Also, page offsets - smaller than a character will not work. - -MPI PRINTMATE 99 & 350 ----- Driver: MPI99 - - ^PY N/A - ^PT/V Even superscript roll - .LQ .LQ - .CW OFF ON Font name - --- --- --------- - 7 - 17.1 cpi - 10 - 12 cpi - 12 12 10 cpi - 14 - 8.5 cpi - 20 - 6 cpi - 24 24 5 cpi - - .LH 1/24" resolution, use even values - .PS N/A - .UJ N/A - -NEC PINWRITER P2-3, P2-6, P3-3, P6-6 ----- Driver: NECP2I - - ^PY N/A - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 - compressed - 10 10 elite - 12 12 pica - 14 - expanded compressed - 20 20 expanded elite - 24 24 expanded pica - - .PS N/A - .UL Continuous underline suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - - NOTES Page offsets smaller than the character width in effect are - not supported. Make sure switch 5 on the printer is off. - -NEC PINWRITER P5XL, P6, P7 ----- Driver: NECP5 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 6 6 - compressed elite - 7 7 6 (0-8) compressed - 8 8 - subscript 15 cpi - 10 10 - elite - 12 12 10 (9-17) pica - 14 14 - expanded compressed - 16 16 - expanded script - 20 20 - expanded elite - 24 24 20 (18-26) expanded courier - 30 30 30 (27-30) triple elite - - -NEC SPINWRITER 2000R, 3500R -NEC SPINWRITER 2010, 3510, 7710 -NEC SPINWRITER 2030, 3530, 7730 ----- Driver: SPINWR - - See Diablo 630, 1610, 1620 Daisy Wheel. - - .BP N/A - - NOTES The proportional spacing tables are set up for a NEC BOLD PS - wheel. Proportional spacing is not supported on the 2010 and 2030. - -NEC SPINWRITER 2015, 3515, 7715 ----- Driver: DIABLO - - See Diablo 630, 1610, 1620 Daisy Wheel. - - .BP N/A - - NOTES The proportional spacing tables are set up for a NEC BOLD PS - wheel. This printer does not respond correctly to the phantom blank - and phantom rubout characters, and may lose horizontal alignment if - they are included in your document. Proportional spacing is not - supported on the 2015. - -NEC SPINWRITER 2050, 3550, 8850 ----- Driver: SPIN50 - - See Diablo 630, 1610, 1620 Daisy Wheel. - - .BP N/A - - NOTES The proportional spacing tables are set up for a NEC BOLD PS - wheel. Proportional spacing is not supported on the 2050. - -OKIDATA MICROLINE 84 STEP 2, STANDARD ----- Driver: ML84 - - ^PY N/A - ^PT/V Printer controlled if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 7 compressed - 10 10 elite - 12 12 pica - 14 14 expanded compressed - 20 20 expanded elite - 24 24 expanded pica - - .PS N/A - .UJ In draft mode (.LQ OFF), this printer is not capable of - microspace justification. Different character widths may - not line up correctly. - - NOTES Page offsets smaller than the character width in effect are - not supported. - -OKIDATA MICROLINE 92 AND 93, STANDARD ----- Driver: ML92 - - ^PY N/A - ^PT/V Printer controlled if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 compressed - 10 10 elite - 12 12 pica - 14 expanded compressed - 20 20 expanded elite - 24 24 expanded pica - - .PS N/A - .UJ In draft mode (.LQ OFF), this printer is not capable of - microspace justification. Different character widths may - not line up correctly. - - NOTES Page offsets smaller than the character width in effect are - not supported. - -OKIDATA MICROLINE 84, 92, 93, IBM PLUG & PLAY ----- Driver: ML92I - - ^PY N/A - ^PT/V Printer controlled if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 compressed - 12 12 pica - 14 expanded compressed - 24 24 expanded pica - - .PS N/A - .UJ In draft mode (.LQ OFF), this printer is not capable of - microspace justification. Different character widths may - not line up correctly. - - NOTES Page offsets smaller than the character width in effect are - not supported. - -OKIDATA MICROLINE 182, STANDARD ----- Driver: ML182 -OKIDATA MICROLINE 182, IBM ML182I - - ^PY N/A - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 - compressed - 10 10 elite - 12 12 pica - 14 - expanded compressed - 20 20 expanded elite - 24 24 expanded pica - - NOTES This printer is not capable of incremental horizontal - positioning, so microspace justification is not possible. In - addition, when changing character widths, characters may not align - to closer than one full character width. Also, page offsets smaller - than a character do not work. - -OKIDATA MICROLINE 192, STANDARD ----- Driver: ML192 -OKIDATA MICROLINE 192, IBM ML192I - - ^PY Selects draft mode italics. No half height italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - 10 10 9 (9-10) elite - 12 12 11 (11-17) pica - 14 - - expanded compressed - 20 20 18 (18-20) expanded elite - 24 24 22 (21-30) expanded pica - - NOTES This printer does not have control strings to select - proportional and fixed pitch printing. This choice can only be - made through the printer's own menu functions. For reasonable - results, make sure that your document and printer are both fixed - pitch or both proportional. - -OKIDATA MICROLINE 292, STANDARD ----- Driver: ML292 -OKIDATA MICROLINE 292, IBM ML292I - - ^PY Selects italics. No half height italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 7 7 (6-8) compressed - 10 10 9 (9-10) elite - 12 12 11 (11-12) pica - 14 14 13 (13-17) expanded compressed - 20 20 18 (18-20) expanded elite - 24 24 22 (21-30) expanded pica - - NOTES This printer does not have control strings to select - proportional and fixed pitch printing. This choice can only be - made through the printer's own menu functions. For reasonable - results, make sure that your document and printer are both fixed - pitch or both proportional. - -OKIDATA PACEMARK 2410, STANDARD ----- Driver: PM2410 - - ^PY N/A - ^PT/V Prints full-size characters with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 7 - compressed - 10 10 elite - 12 12 pica - 14 - expanded compressed - 20 20 expanded elite - 24 24 expanded pica - - .UJ Compressed and expanded compressed characters will not be - microspace justified. Also, they may not align perfectly - with other character widths. - - NOTES If you have the IBM-compatible printer, do not use this - installation. Instead, choose the IBM Graphics Printer. - -PANASONIC KX-P1090 ----- Driver: P1090 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification. - -QUME SPRINT SERIES ----- Driver: QUME - - See Diablo 630, 1610, 1620 Daisy Wheel. - - .PS N/A - - NOTES Make sure you use the appropriate switch settings for your - interface module. Set the switches on the module accordingly: - IBM Centronics module: 1, 2, 8, 9 ON. All others OFF. - RS-232-C module: 1, 2 ON. All others OFF. - -QUME SPRINT WITH WP OPTION ----- Driver: QUMEWP - - See Diablo 630, 1610, 1620 Daisy Wheel. - - .PS N/A - -RICOH LP4080R LASER PRINTER ----- Driver: LP4080 - - ^PY N/A - ^PT/V Prints full-size characters with roll - .PS .PS - .CW OFF ON Font Name - --- --- --------- - 8 - 15 cpi - 10 - 12 cpi elite - 12 - 10 cpi courier - - 11 (0-30) proportional - - .LQ N/A - .PL For 11 inch paper, a value of 62 is recommended - .PR OR "=Landscape" or "=Portrait" to select orientation - - NOTES Answer yes to the "Use form feeds" prompt. This driver is - configured to select all the built in fonts in the LP4080R, in both - portrait and landscape mode. For more information on laser printers, - see the "Laser Printers" section above. - -SILVER REED EXP-550/500 DAISY WHEEL ----- Driver: SR550 - - See Diablo 630, 1610, 1620 Daisy Wheel. - - NOTES Proportional spacing tables (Model 500 does not support - proportional printing) are set up for a Silver Reed PS wheel. - You need to change the switch settings for proportional - fonts. Set the SW-1 switches accordingly: - For proportional fonts: 1, 2 ON, 3-6 OFF - For nonproportional fonts: All OFF. - -STAR MICRONICS GEMINI 10X AND 15X ----- Driver: GEM10X - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - - .CW .CW Font Name - --- --------- - 7 compressed - 10 elite - 12 pica - 14 expanded compressed - 20 expanded elite - 24 expanded pica - - .LH Use even values. Driver operates at 2/48" resolution. - .LQ N/A - .PS N/A - .UL Continuous underlining suppresses microspace justification - .UJ Microspace justification slows printing. Default is OFF. - -STAR MICRONICS NX-10 ----- Driver: NX10 - - ^PY Selects draft quality italics - ^PT/V Prints half-size if .SR 0; otherwise full-size with roll - .LQ .LQ .PS - .CW OFF ON ON Font Name - --- --- --- --------- - 6 - 4 (0-5) compressed elite - 7 - 7 (6-7) compressed - 10 - 9 (8-9) elite - 12 12 11 (10-12) pica - 14 - - expanded compressed - 20 - - expanded elite - 24 24 - expanded pica - - .UL Continuous underlining suppresses microjustification - .UJ Microjustification slows printing - -STAR MICRONICS SG10 ---- Driver: SG10 -STAR MICRONICS SG10I ---- Driver: SG10I - - ^PY Selects draft mode italics - ^PT/V Prints full size characters with roll - - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - 10 - 10 (9-12) elite - 12 12 - pica - 14 - - expanded compressed - 20 - 20 (18-24) expanded elite - 24 24 - expanded pica - - .UL Continuous underlining suppresses microjustification - .UJ Microjustification slows printing - .PS Draft quality proportional - - NOTE: Because of printer firmware limitations, combinations of - print enhancements may cause poor printed output. - -TANDY DMP-130 MATRIX PRINTER ----- Driver: DMP13 - - ^PY Selects italics - ^PT/V Prints half-size characters (17 cpi, or 8.5 cpi for - expanded fonts) - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - - 10 - elite - 12 12 11 (11-13) pica - 14 - - expanded compressed - - 20 - expanded elite - 24 24 22 (21-30) expanded pica - - NOTES Printer must be in Tandy mode. - -TANDY DMP-2100P MATRIX PRINTER ----- Driver: D2100P - - ^PY N/A - ^PT/V Prints full-size characters with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - - 10 9 (9-10) elite - 12 12 11 (11-13) pica - 14 - - expanded compressed - - 20 18 (18-20) expanded elite - 24 24 22 (21-30) expanded pica - - NOTES Printer must be in Tandy mode. - -TANDY DMP-2110 MATRIX PRINTER ----- Driver: D2110 - - ^PY Selects italics - ^PT/V Prints half-size if .SR 0; otherwise, full-size with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - - 10 9 (9-10) elite - 12 12 11 (11-13) pica - 14 - - expanded compressed - - 20 18 (18-20) expanded elite - 24 24 22 (21-30) expanded pica - - NOTES Printer must be in Tandy mode. - -TANDY DWP-230 DAISY WHEEL ----- Driver: DWP230 -TANDY DWP-520 DAISY WHEEL ----- Driver: DWP520 - - ^PY N/A - ^PT/V Prints super/subscripts in separate pass with specified roll - .CW Supports any value from 0 to 30. Usual fixed pitch values are - 10 (12 cpi) and 12 (10 cpi). - .BP N/A - .LQ N/A - .PS ON selects proportional spacing. Spacing tables are set up for - a DIABLO BOLD PS wheel, #303029-01. - .UL Continuous underlining does not suppress microjustification - for DWP230; does suppress it for DWP520. - -TEXAS INSTRUMENTS 855 AND 865 ----- Driver: TI855 - - ^PY N/A - ^PT/V Prints full-size characters with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 6 6 6 (0-8) compressed - 10 10 10 (9-11) elite - 12 12 12 (12-17) pica - 14 14 - expanded compressed - 20 20 20 (18-22) expanded elite - 24 24 24 (23-30) expanded pica - -TOSHIBA P351, P351C, P341, P321 ----- Driver: P351 - - ^PY Selects italics - ^PT/V Prints full-size characters with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - - 10 9 (0-9) elite - 12 12 11 (10-14) pica - 14 - - expanded compressed - - 20 18 (15-19) expanded elite - 24 24 22 (20-30) expanded pica - -TOSHIBA P1340 ----- Driver: P1340 - - ^PY No effect - ^PT/V Prints full-size characters with roll - .LQ .LQ - .CW OFF ON Font Name - --- --- --------- - 10 10 elite - 12 12 pica - 14 - expanded compressed - 20 - expanded elite - 24 24 expanded pica - -TOSHIBA P1351 ----- Driver: P1351 - - ^PY N/A - ^PT/V Prints full-size characters with roll - .LQ .LQ - .CW OFF ON .PS ON Font Name - --- --- ------ --------- - 7 - - compressed - - 10 9 (0-9) elite - 12 12 11 (10-14) pica - 14 - - expanded compressed - - 20 18 (15-19) expanded elite - 24 24 22 (20-30) expanded pica - -ZENITH Z-125AA ----- Driver: Z125 - - ^PY N/A - ^PT/V No incremental vertical positioning - - .CW .CW Font name - --- --------- - 7 16.7 cpi - 9 13.3 cpi - 10 12 cpi - 12 10 cpi - 14 8.3 cpi - 18 6.7 cpi - 20 6 cpi - 24 5 cpi - - .LH Full lines only - .UJ N/A - .PS N/A - .LQ N/A - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/README b/software/CPM/CPM30_WORDSTAR_v400/README deleted file mode 100644 index 39793da..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/README +++ /dev/null @@ -1,15 +0,0 @@ -This disk contains an updated printer driver file for your -WordStar, CP/M Edition, Release 4. This file corrects problems -you may have experienced with form feeds, page length, and right- -justified proportional spacing. - -Follow the instructions on page xxii of the WordStar Reference -Guide for creating a new WSPRINT.OVR file. Substitute a copy of -this WSPRINT disk (make sure it is a boot disk) for the copy of -your original PRINT disk in step 2. - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/REVIEW.COM b/software/CPM/CPM30_WORDSTAR_v400/REVIEW.COM deleted file mode 100644 index ec90bc0310af71ff13f8f5d4de98a67858d20b97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5376 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 diff --git a/software/CPM/CPM30_WORDSTAR_v400/TABLE.DOC b/software/CPM/CPM30_WORDSTAR_v400/TABLE.DOC deleted file mode 100644 index 90748d1..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/TABLE.DOC +++ /dev/null @@ -1,17 +0,0 @@ - TABLÅ II - - CENTRIFUGAÌ FORCÅ CALIBRATIOÎ DATA - -__________________________________________________________________ - Elemenô No® | Maximuí ç ü Minimuí ç ü Averagå ç ü Spreaä iî ç | -______________|____________|___________|___________|_____________| - ± ü 2.2± ü 1.6µ ü 1.9³ | 0.5¶ | - ü 2.2° ü 1.6µ ü 1.9³ ü 0.5° | - ² ü 2.4¸ ü 2.2µ ü 2.3¶ ü 0.2³ | - ü 2.5° ü 2.2² ü 2.3¶ ü 0.2¸ | - ³ ü 3.0¸ ü 2.5¹ ü 2.8´ ü 0.4¹ | - ü 3.1² ü 2.5¸ ü 2.8µ ü 0.5´ | - ´ ü 3.0· ü 2.6° ü 2.8´ ü 0.4· | - ü 3.1° ü 2.6° ü 2.8µ ü 0.5° | - - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/TEXT.DOC b/software/CPM/CPM30_WORDSTAR_v400/TEXT.DOC deleted file mode 100644 index e0cfaab..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/TEXT.DOC +++ /dev/null @@ -1,94 +0,0 @@ - Gulliver'ó Travels - Parô I - - Á Voyagå tï Lilliput - - Chap® I - - -Mù fatheò haä á smalì estatå iî Nottinghamshire» É waó thå  thirä -oæ  fivå  sons®  Hå senô må tï Emanueì Collegå  iî  Cambridgå  aô -fourteeî  yearó  old¬ wherå É resideä threå  years¬  anä  applieä -myselæ  closå  tï mù studiesº buô thå chargå  oæ  maintaininç  må -(althougè  É haä á verù scantù allowance© beinç toï greaô  foò  á -narro÷  fortune¬  É waó bounä apprenticå tï Mr® Jameó  Bates¬  aî -eminenô surgeoî iî London¬ witè whoí É continueä fouò years»  anä -mù  fatheò  no÷ anä theî sendinç må smalì sumó oæ money¬  É  laiä -theí  ouô  iî  learninç  navigation¬  anä  otheò  partó  oæ   thå -mathematics¬  usefuì tï thoså whï intenä tï travel¬ aó  É  alwayó -believeä iô woulä bå somå timå oò otheò mù fortunå tï do® Wheî  É -lefô Mr® Bates¬ É wenô dowî tï mù father» wherå bù thå assistancå -oæ  hií anä mù unclå John¬ anä somå otheò relations¬ É goô  fortù -pounds¬  anä á promiså oæ thirtù poundó á yeaò tï maintaiî må  aô -Leydenº  therå  É  studieä physiã twï  yearó  anä  seveî  months¬ -knowinç iô woulä bå usefuì iî lonç voyages. - -Sooî  afteò mù returî froí Leyden¬ É waó recommended¬ bù mù  gooä -masteò Mr® Bates¬ tï bå surgeoî tï thå "Swallow,¢ Captaiî Abrahaí -Panneì  commander» witè whoí É continueä threå yearó anä á  half¬ -makinç  á  voyagå oò twï intï thå Levant¬ anä somå  otheò  parts® -Wheî  É  camå back¬ É resolveä tï settlå iî Londoî tï  whicè  Mr® -Bates¬ mù master¬ encourageä me¬ anä bù hií É waó recommendeä  tï -severaì  patients® É tooë parô oæ á smalì houså iî thå Olä  Jury» -anä  beinç  adviseä tï alteò maù condition¬ É marrieä  Mrs®  Marù -Burton¬ seconä daughteò tï Mr® Edmunä Burton¬ hosieò iî  Newgatå- -street¬ witè whoí É receiveä fouò hundreä poundó foò á portion. - -But¬ mù gooä masteò Bateó dyinç iî twï yearó after¬ anä É  havinç -fe÷  friends¬ mù businesó begaî tï fail» foò mù consciencå  woulä -noô  suffeò må tï imitatå thå baä practicå oæ toï manù  amonç  mù -brethren®   Havinç thereforå consulteä witè mù wife¬ anä somå  oæ -mù  acquaintance¬ É determineä tï gï agaiî tï sea® É waó  surgeoî -successivelù  iî  twï ships¬ anä madå severaì  voyages¬  foò  siø -years¬ tï thå Easô anä Wesô-Indies¬ bù whicè É goô somå  additioî -tï  mù fortune® Mù houró oæ leisurå É spenô iî readinç  thå  besô -authors¬  ancienô anä modern¬ beinç alwayó provideä witè  á  gooä -numbeò oæ books» anä wheî É waó ashore¬ iî observinç thå  manneró -anä  dispositionó  oæ  thå  people¬ aó  welì  aó  learninç  theiò -language¬  whereiî É haä á greaô facilitù bù thå strengtè  oæ  mù -memory. - -Thå  lasô  oæ theså voyageó noô provinç verù  fortunate¬  É  gre÷ -wearù  oæ thå sea¬ anä intendeä tï staù aô homå witè mù wifå  anä -family®   É  removeä froí thå Olä Jurù tï Fetteò-Lane¬  anä  froí -thencå tï Wapping¬ hopinç tï geô businesó amonç thå sailors»  buô -iô woulä noô turî tï account® Afteò threå yearó expectatioî  thaô Šthingó woulä mend¬ É accepteä aî advantageouó offeò froí  Captaiî -Williaí  Prichard¬  masteò oæ thå "Antelope,¢ whï  waó  makinç  á -voyagå  tï thå Soutè-Sea® Wå seô saiì froí Bristoì Maù  4¬  1699¬ -anä ouò voyagå waó verù prosperous. - -Iô  woulä noô bå proper¬ foò somå reasons¬ tï troublå thå  readeò -witè  thå  particularó oæ ouò adventureó iî thoså  seasº  leô  iô -sufficå  tï  inforí him¬ thaô iî ouò passagå froí thencå  tï  thå -Easô-Indies¬ wå werå driveî bù á violenô storí tï thå  nortè-wesô -oæ  Vaî Diemen'ó Land® Bù aî observation¬ wå founä  ourselveó  iî -thå  latitudå oæ 3° degreeó ² minuteó south® Twelvå oæ  ouò  cre÷ -werå  deaä bù immoderatå labouò anä ilì food¬ thå resô werå iî  á -verù  weaë  condition® Oî thå fiftè oæ November¬  whicè  waó  thå -beginninç oæ summeò iî thoså parts¬ thå weatheò beinç verù  hazy¬ -thå  seameî  spieä á rock¬ withiî halæ á cable'ó  lengtè  oæ  thå -ship»  buô thå winä waó sï strong¬ thaô wå werå  driveî  directlù -upoî  it¬ anä immediatelù split® Siø oæ thå crew¬ oæ whoí  É  waó -one¬  havinç leô dowî thå boaô intï thå sea¬ madå á shifô tï  geô -cleaò oæ thå ship¬ anä thå rock® Wå roweä bù mù computatioî abouô -threå leagues¬ tilì wå werå ablå tï worë nï longer¬ beinç alreadù -spenô  witè  labouò  whilå wå werå iî  thå  ship®   Wå  thereforå -trusteä ourselveó tï thå mercù oæ thå waves¬ anä iî abouô halæ aî -houò thå boaô waó overseô bù á suddeî flurrù froí thå north® Whaô -becamå mù companionó iî thå boat¬ aó welì aó oæ thoså whï escapeä -oî  thå  rock¬  oò werå lefô iî thå vessel¬ É  cannoô  tell»  buô -concludå  theù werå alì lost® Foò mù owî part¬ É swaí aó  fortunå -directeä  me¬ anä waó pusheä forwarä bù winä anä tide®   É  ofteî -leô mù legó droð anä coulä feeì nï bottomº buô wheî É waó  almosô -gone¬  anä ablå tï strugglå nï longer¬ É founä myselæ  withiî  mù -depth» anä bù thió timå thå storí waó mucè abated® Thå  declivitù -waó  sï  small¬  thaô É walkeä neaò á milå beforå É  goô  tï  thå -shore¬  whicè  É  conjectureä  waó abouô  eighô  o'clocë  iî  thå -evening® É theî advanceä forwarä neaò halæ á mile¬ buô coulä  noô -discoveò anù sigî oæ houseó oò inhabitants» aô leasô É waó iî  sï -weaë  á condition¬ thaô É diä noô observå them® É  waó  extremelù -tired¬ anä witè that¬ anä thå heaô oæ thå weather¬ anä abouô halæ -á pinô oæ brandù thaô É dranë aó É lefô thå ship¬ É founä  myselæ -mucè inclineä tï sleep. - - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/TW.COM b/software/CPM/CPM30_WORDSTAR_v400/TW.COM deleted file mode 100644 index 57747ef68f3a2bd23f41c3ff361c1e5e19a6fc49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 zcmd^B|8E;-8GrA5=X`1GEV{FsqxACN!dPf|IQ4$krY9C9&$9 zgMC@zrg2i(gqRRNOkxaa6=JOhzw8SFWCq%_+HIA)>Lgq#6+|FmkWr>cXdRRvhIHY1 z&(4~%lz)I%^6U3~-p}*>z2|+p9&al)GZoXvWCKoS6aGU^<{jfp3^sXpgUO>JLf$$C z>$}`2cWFpk{B7YdbMZGY>E6Buj6BTqtQl%BM;J_;=DR}iEQ5Jx@m;}ug$Y~|9}naUf``YMi5 z(IxodSz8H0?q)c&Hg&v=+CgT9NFNkiyKd>wUL(c;Y z_>VUJvkq!%EgfFOI`;&T#23aLG!d<}6nUx%0a(A3+YJf1U?1?$G;Kq2_%2={v{VhnKBStG(hDn8Fa zRzoP$Zxf{NZjrLo7<=I5L&X+e@ zrJNNq4)TX`^#1PS-SuVR>udr%jmhdbeJ=;r#{g_Pl3&hX=p1{IzoNdvpTGqiZkoR%i`Y^4e>>wQ&12{tmHD zfH>>xK+Wqfq<-hqz3r0kbB`Q2c&Ot@&-gRXE-YTmo!h@e4fc~WC!&#o$XAG;j7}vo zL`$WT1pedlv^=TAy~NcxmQjeTrnD&~O=78;Y^STy=W2Y|@O6w%Ddfyh^duQh&Sp9Y zc|u8N5-F8*bq2azjlCctotT``NY@v?&_z1PkemU1BiW3mOlNGlzFt|~uaSv_8n4>Z z?(6Iw8f*u>Bg1{CPy3>MPYm>(@eQ7cezkw#NnfKYB2OzMH32M11z1RIN{O96PD0d9 ze_u2@6!nt<^*K42h*vQxFnED+WJZZ4er?Z3}Rar;m=M?Z*)s%USB-Dx2 zadP%ZgdB(}+Ofz%Tl&DHno28VYv_Po78r2r4bTLuLSrFcY?%b(`iN3NJi19k&wdSw35k? zw4%+XRho^NbSkDO@xvsQCYc#IR!b4J&R6|-I>^ZE^fZlr2V|_5W{;X?r!z#rtg#H; zZ_AQR1!HXwwxtNLc1|dLTUJtPGFy$!cEAqdB^_a^?-Lo@6IMIh3Y?wk9YPK4Taf#) zrDCCcOS|TOUI;bl^m#u=>op!n^r^fe;-tN}gxpNfC)xG-kSEwHH3j>nrVuaO?3sgq zTDebof+Mh85GjGy?GaCK0G70B$34L>!!k$DvVmpf{idhA4yrJ;7=jxb6leg94?VP@ z0PUYBeU*YhM_?S97Y4s0KrMZc0lJRu=JG<#++`GWNYq~XKK$7eJS|nc%jmIka8QEx zVb1$uO?~K+2we)E5J7VFm4Yq_!Iw!3#mMNBqqG=(YUJ|9QE(jUc{oIiI+W&!fa_6P z&LS(}P9Q;1jtF`M_QunK1O!)MNPzyw?rgk>X@6btzb;hZ^=yM>$!>f~t9F-TA>+JI zszAG9zCwEyn9KSNXA``^LBba<3)ggn&bi%19=Tg`yQNlF;cY>O>*<3|>z>`|-KD)2 z?EDPEPSl3igw+rJwq(g4uM5_~N9)2J0szZlAVg93&be90fX#&LLI#%~>e{E=t`e$6 z?tdX__3z;_XtkZ5Nh+FBD|^0rhOwplQOPjBw%d52(OhpiW;hy;70S&OSeGj1SWBDv h(-!mJ&E>a#kP4$$C+W7htFC4Lx+9Jn_x_)c{{SU3%6|X= diff --git a/software/CPM/CPM30_WORDSTAR_v400/WC.COM b/software/CPM/CPM30_WORDSTAR_v400/WC.COM deleted file mode 100644 index 857ca9b18728e83fbc1ad873a72b8d6b128d940e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmd^7-)mGy6rMSAchfGpH{NV5F~vGJHxO8V#0{0!AeT*(R#M4c6W4A+ly)(@$+nuc z*)829kj95T>4Q*OS`op&K>7ogK4|q`+~zKf5+NboHx={ZOB!&|5GFl0QTvkrpa1aQ`d4Qk z_4I2mvma9N8#PW5{cS}IGxS;mlH`Vyp?dXo2eAsWxpIZduC)x6!>bwUBVB9XVX#)D z!iGwb%KhjfmSVP8ii`Bx799~W3p!O^T}PiKS~H61Rr*qF&Og3|Q0cZYOY~t7>(nEO zqIGg6*3E?jY%$3QF!R9+aV_@(a0R$!!XVpMp;o z?mn|f$0N{Jmc&iao7T~HK7vx^I%xaEW6-Z|_;}6t7WE4^{Nq1&<{x@i`;lGMKf#s< zo%t=&-++|OvZ?mubo*!FT^{izhBUzOY?4GBlUJN|u=w(~GWA?euPky8YdVvxR5`@- zn6fopd`f?$k~sa$h$$^Y%$n^OWH&mJEHcFWq4Y5mQDcxDa{8E&WbgTR!eupk6bG)= z&or80)j7?)2v2qm#CzjMd4wm%vUy&}<<4^4M^fifqv;WYtD%$mG*6A^3S;RBekON* z@_-s@P1*xJyxTq*PweIV)AU3>n;YlR15q{9jTIBw(Xj%L9{wQ8_j5ay$9^X!^M&-e zyc!C%_Ku(by1+BpvuR%_ZYMZ$N3!`Zv2OxJPz_fr|0XvvlIPiRj>?gR@{I@hmfw@wUv59uz_5a%M4Yccb<&{SaYsSBD|S%vGx-Jc{x|r%3Zd*lN?=MX+SGqZo3z2v&BwQTz(Z`HmJlAG6T*t(0KFz-2MeD0eM0I diff --git a/software/CPM/CPM30_WORDSTAR_v400/WINSTALL.COM b/software/CPM/CPM30_WORDSTAR_v400/WINSTALL.COM deleted file mode 100644 index 4ed26d075b703788beb967e5bde7ae61a190865f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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 btj3d*YV2{4XreOyRWZynk^X`Ii}wE)4(A#v diff --git a/software/CPM/CPM30_WORDSTAR_v400/WORDFREQ.COM b/software/CPM/CPM30_WORDSTAR_v400/WORDFREQ.COM deleted file mode 100644 index 27e74c5224ef12b68438f20c19a6eaa7b9a697fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2560 zcmd@W?{5?5`OZFk_a6Aj*=vbYZM?ndNp#20Kc zCnRyhm+s3pRB2PCuA8>JOHoR&8^qK+n|`88D21Dp_r!wyrv0C8BA2+4G*= z1g1&*19l&t_xb%i@AJIx^WNr*9(^tS2eY0YZFJE~ur|5qGx_bbxM7um%vF?5QGS*d zFL45uI}w&27<*HDm^Q?xtI{WE|0K0bUbT3V&dFB2)=pQ^F0F@dJd5-QZMAAix^V{S zC+WH3%x&?dis{Y6f&=`EZ&t|ZLJ4%u-@5$2qQnVg-iHYCXJpnOAceJ{YAtE+(&Fir zyeLY#i2Rp4(nm-#k>aAnAC`R5739B$T$Fj5wd(RGoL1{%k+yz$t4L=VnJ`-yzXy8p zE86@8n+F(Y^FMW18?{acNX=JR%S~v$N>`+aurL7?Az(zab+OX{u5C;GD|${jhh*s- zDg|;2li88Rt4M*&&LhP{QUNI!(Zt*N1&4ATm6ZZI{_gB=9NL0o;+@$Ahi__pegDMz zc}tawNW6w}a-W);f4;qL{`tQze&*0FIO^sn^XD8nfS);(B6>zXSPmQvJmXEvDZNMo zA9Q4|{wE?79h48kwor|;NKe}w3kp*}Ep(N01vOno?ZLzMFL_D9AYxrs_O8;96SA8K z9v%;Ndm(FC_FdTFEE8;Jr{6)L<8S46IQeYgfz^7@sa%1LoJWuWY^@Ai^+6ZB-ZC@= zM1gHoU>gn2!FnR7jtBeYGGY5>i?mo+Zepb>CtOW4Xi9s50n$9mNRKfDwlYd9BefA| zjx%MYjqyp%jQ&rj(#)9cj1*!3DTCApRGBdMFLTODh$$1gYTInvg3kEVqGwslJW}xt zrbiebi2mk;C^Cr&DO6(u`!7!7=f{-BPiwC_^%odw`71soUh?=zQwqjhg(yH>O2&$S zbPJ@FMys$l<2KX;DkI-CVAoLJOCE3_&lSso+?4iLCXlmeSQG=!lz|GR)vHI|(0ga063XTpW(m124gBaG{*ifuL-s{J1{y;j8V@WkL z5KrMAb$E0W*mZ{^J9kCe_60CL7*C}WY7%eW)ad3zAWtRw2Qql`&mY~4H{x(C4c_*T zrZe#&NQ|%V7#xiEL#F9$BGWT~6a7gw74O9xTW~%2?MMzE%izAmV4Nh;6^=rpxHpl0 z4rFe=Bbh$d*O%x?#FH636dzJkqqt8^;l#3)o8OyK`%|$Y-1@AV%D@J|tUJ;XZNqJm zNH_v+n$E&;q{sjgykttjdcQq_@=qf|ka_f4hV^-YBn%7)nl0bus zc8B*yJHlO|&b`aW@E%0KE~@B-DFS0~J1fKFl30t+Z(^+;t(N_7{Kpq-S?kEHTK4ke z9xvn8N-ll7t;lQOpo+T*UKsHhbAHI@BwI4*26pYb^$o%8kNw*C^o#PpzWwg(#}_YO z`(*y>1xr#IoAfz9Z5(9jt-f*1nv+JE7KqBW_{)Y(gpe{_l zl$G7uFd`KQ@DyJ8?m4=56F;i#itM|a{lD?gYos+)bN&`<0wz$+T50X;`ZsLLn#LN+ QbW!?h*4*c*`#=Bw4J@%V8UO$Q diff --git a/software/CPM/CPM30_WORDSTAR_v400/WS.COM b/software/CPM/CPM30_WORDSTAR_v400/WS.COM deleted file mode 100644 index 86cfe91022723cc956f8f7b3daaf1654d327aa07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6784 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 diff --git a/software/CPM/CPM30_WORDSTAR_v400/WSCHANGE.COM b/software/CPM/CPM30_WORDSTAR_v400/WSCHANGE.COM deleted file mode 100644 index 2bcc433b10da8cc8289f19c5db89ba22b4b56040..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34944 zcmeFa30R!f-8Xz@?wMhR0AbN2Kw|D;APa;w2?-=XW@liA8D<6;vXKFX9fq(3NR-5; zrnRfKF0H23XzSBHwvDL^af@Nbq+!~zC5rl>R(X_Io!V-vb`{>=|DJ&)YM$|S+#mqVXbIyM||Fdtmet$-6be%(6uC6lb`As=_c|6Y-8QR8tD>Fr#C~N62j!RYf9l%ma;5?u%@TIr+>iR)#YjCou0n#c2tAdXohNZ^`AIZ zAYT;5^8hEp|G1RY^@|Avh~#j@sZMh0$+458XG}VOj3aOzVG*_RA{P@II4V~Dn)4qO zBSHKrR)qLJ`}dou-$eb6yTC564@CtK70J~9tkD1ObJz8`TLySrUpsXWpI0Ly^+RV@ z8=Q=fWa!8h_M4br2z)lT&1}PGBmW0tvPCif16==)u)Ml`{mYPAqt)pR#&T0drP)$t zwXt|s=dd`84xYEx+5wmA%{Bp^N5E92)4O<=)(kkzGK^%io2r}A(l8^s@BJSYfE_@*kVGsU4zuo7u$8Yk8iVFDD0R zQJ*HdDtvf;{tfyqL@tEqzx5A)*+=uw&4>TyJ{?}bXPjIkV)HA-;wbt2yqLwvW1=~^ zNX?eWmc(D1vO0Zz&c>~a$c)W@D4L(=(A*^}{QmFX|Bo#okEx5Y*=tSuI+keb^BidR4DkbA-q7CVK}Q

    +ceni=^40!g-q?xnoMl9 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 diff --git a/software/CPM/CPM30_WORDSTAR_v400/WSCHHELP.OVR b/software/CPM/CPM30_WORDSTAR_v400/WSCHHELP.OVR deleted file mode 100644 index bad58e6ee0f7cff325f4bda0742cd2c27945503f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29056 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 I_~HKf->^rhRR910 diff --git a/software/CPM/CPM30_WORDSTAR_v400/WSHELP.OVR b/software/CPM/CPM30_WORDSTAR_v400/WSHELP.OVR deleted file mode 100644 index 02634675fa7a32731b3ed77f5e70cea753a5f8ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25856 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 R%c&G&4dyTS-+$qs{|CUiWVQeR diff --git a/software/CPM/CPM30_WORDSTAR_v400/WSINDEX.XCL b/software/CPM/CPM30_WORDSTAR_v400/WSINDEX.XCL deleted file mode 100644 index 4b0e5c5..0000000 --- a/software/CPM/CPM30_WORDSTAR_v400/WSINDEX.XCL +++ /dev/null @@ -1,232 +0,0 @@ -A -ABOUT -ABOVE -ACROSS -AFTER -AFTERWARDS -AGAIN -AGAINST -AGO -AHEAD -ALIKE -ALL -ALMOST -ALONE -ALONG -ALREADY -ALSO -ALTHOUGH -ALTOGETHER -ALWAYS -AMONG -AN -AND -ANOTHER -ANY -ANYMORE -ANYONE -ANYTHING -ANYWAY -ANYWHERE -ARE -AREN'T -AROUND -AS -ASIDE -AT -AVAILABLE -AWAY -B -BE -BECAUSE -BEEN -BEFORE -BEFOREHAND -BELOW -BENEATH -BESIDES -BETWEEN -BEYOND -BUT -BY -C -D -DID -DIDN'T -DO -DOES -DOESN'T -DONE -DON'T -DOWN -DOWNRIGHT -E -EACH -EITHER -ELSE -EVEN -EVER -EXCEPT -F -FINALLY -FOR -FROM -G -H -HAD -HADN'T -HAPPEN -HAS -HASN'T -HAVE -HAVEN'T -HE -HER -HERE -HERE'S -HERS -HIM -HIS -HOW -HOWEVER -I -IF -IN -INTO -IS -ISN'T -IT -ITS -ITSELF -IT'LL -IT'S -I'D -I'LL -I'M -I'VE -J -JUST -K -KNOW -KNOWING -KNOWS -L -LIKE -M -MAYBE -ME -MY -N -NO -NONE -NOR -NOT -NOW -O -OF -OFF -OFTEN -OH -ON -ONLY -ONTO -OR -OTHER -OTHERWISE -OUR -OURS -OUT -OVER -P -Q -R -S -SHE -SINCE -SO -SOME -SOON -SOONER -SUCH -T -THAN -THAT -THAT'S -THE -THEIR -THEM -THEMSELVES -THEN -THERE -THEREFORE -THERE'LL -THERE'S -THESE -THEY -THEY'D -THEY'LL -THEY'RE -THEY'VE -THIS -THOSE -THOUGH -THROUGH -THROUGHOUT -THUS -TIL -TO -TOGETHER -TOO -U -UN -UNDER -UNTIL -UP -US -V -VALUE -VALUED -VERY -W -WAS -WASN'T -WE -WE'D -WE'LL -WE'RE -WE'VE -WHAT -WHATEVER -WHATEVER'S -WHAT'S -WHEN -WHENEVER -WHERE -WHEREAS -WHEREVER -WHERE'S -WHETHER -WHICH -WHICHEVER -WHILE -WHO -WHOSE -WHY -WILL -WITH -WITHIN -WITHOUT -WON'T -X -YES -YET -YOU -YOUR -YOURS -YOURSELF -YOU'D -YOU'LL -YOU'RE -YOU'VE -Z - \ No newline at end of file diff --git a/software/CPM/CPM30_WORDSTAR_v400/WSMSGS.OVR b/software/CPM/CPM30_WORDSTAR_v400/WSMSGS.OVR deleted file mode 100644 index 7f16fda88b52990a1f68cb5b3a818636ae6822ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13440 zcmc(Gdvp}%dH&2StN}Clf*m_nTHX`q#G*B8gY7!@Nea3F0^N`n1a6Pc8SRdwDYHA9 z-C2a%o|7GjjjYyk0hc(zPVIw(9rLr@#>Oc*iT_9(H-$yu8#a}k+z^&8&*^^ zsmhAS0_wa9(PAH^ThRpS1l1%$WLp%nqP7uD>VYyzo!Qx8#VM+9wJ8yb>w1*%*|wgC;1pYQ>e9^^ z4{Er+nOf!bO69CobC$1=S~bJQsl7jHZ4?``)uy8=K~PK$TyOI8}DPHMGfFR3#k zyrf!ZbuX#cBUZeJR3NNc9Ubb*hgz!}YU&!B>T82l8#gttS^cMF%Uc#nS7~qi6ST{U zZ`N%8HFM_9yLP_1;JWK?xN+f4H-F)lTfcZ)*_Xcc`=3d(7S8d@x6bz6c*||q-Ei&v zd1YThWA(l)Y8)zmkvynE@gd+xpOkM9541B;}JP2UQxU)Nl< zvbLqVX5*^Wtq;{VRj%DIMY4R6RM)(*v2{(&s+OwNwGF|Q)s>5+8`ZKo-�J_TO~P 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 diff --git a/software/CPM/CPM30_WORDSTAR_v400/WSPRINT.OVR b/software/CPM/CPM30_WORDSTAR_v400/WSPRINT.OVR deleted file mode 100644 index 6f5aa6965bdaaab52dffab33433687b27b63de3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152704 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%0AiR9}0}niar_*KKIusbLTY1I0 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 gYMTf3_?gI9v})b7GVm?*xHhq9OTAu7w#@x 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 diff --git a/software/CPM/CPM31_WORDSTAR_v330/DEMO.TXT b/software/CPM/CPM31_WORDSTAR_v330/DEMO.TXT deleted file mode 100644 index 8473dee..0000000 --- a/software/CPM/CPM31_WORDSTAR_v330/DEMO.TXT +++ /dev/null @@ -1,20 +0,0 @@ -Dear Mom: - -You'lì neveò believå whaô happeneä lasô week!  É finallù decideä -tï  takå  thå  oshaî  tï oshaî  (actuallù  Phillydelphyá  tï  Saî -Fransisco© railroaä trip®  Iî thå nationeì wilderneó areá outsidå -oæ Chicogo¬ thå traiî wenô ofæ thå trax® Nï onå waó hurt¬ buô onå -alderlù ladù complainä loudlù thaô thå traiî companù waó goinç tï -havå tï paù foò á heò ne÷ quafeur. - -Iô turnó ouô thaô wå stoppeä oî toð oæ aî olä semetry®  Yoõ kno÷ -ho÷  É  aí  abouô theí -- iô tooë á loô oæ  disiplinå  tï  remaiî -conshus®  Fortunatelù  É useä somå gooä jugemenô anä saô dowî  - -unfortunatelù  É  imbeddeä á sliveò iî mù leg®  Iî  additioî  tï -that¬  É  developeä newmoanyá froí sittinç ouô iî thå colä  nighô -air® I'lì writå morå wheî É feeì better. - -Love, - -Your son, -Ken \ No newline at end of file diff --git a/software/CPM/CPM31_WORDSTAR_v330/MAILMRGE.OVR b/software/CPM/CPM31_WORDSTAR_v330/MAILMRGE.OVR deleted file mode 100644 index 31303ebe9db73a8f8ce3bcc99b72169f8dee7e57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 zcmeHtdw5e-x_3%TfzkqP9V;!A?rd-*0m{T)aHj;Zmo&Yl_ba`(NwZVsrnXQT7{@_T zQSmlj&|w@!W>BMkYDQ^6!ff3v}zm;%2e&;*S^ZoJt z^F8O$r>wo!yWaa+>s{}9qo`8FL}i;x>&i{W{K}LYvR9}49*TDcih%`yKU=jt=%cvTX$^Rx+6GR7ZbI)yE|ov&DwSQ&XgUUJ3DvW+1UYTRL#~M z9Tm5??no)`?Cxyc*_m?Vx*ON8N!fa5=Z@~yT`3k@cW26Ncih_6xg$jfd~*oCGsUuX zM@n(4t-H8$hqZG}N=4@m8$_}xoAU}bWM&psrNl%fmY6GY>(-=fF3&Cbab-%KxoVT@ z|K-1@W8#u1eZ=jIN+srIhyGM5NzBWpf5V01UAf}Nx#H36L{)?;T&3ES@_)#aoVri# zy7}GYXFpjIu344QpZccoOb+=l+o^jxgT$wjJq!O6I=F0h_~+Svp*)+!=b#lkv&n@d zikNua%qAl-{aEu*q{HR@9m_Vc)vWM~Y~NoE0o`L9bL|H5Rt_1?HmEStU7s6-R-8BfS)FT<{KW30ctB8B$M;o}I44s(4%4cjo=y$z?gSoS2~l)A`+gm;88+GGG3A&PMrA4w=m1a?_d9`u!)unH%Q}ocbb% zJFPcHY*gG+yK^EX&BAVCVGR-D;}n(J@b(JvG1_KuvME`Q2H}P{zRcl3d3|@c{D-f`!<{$LzY7?5V)jy=d3%*GnY9G~r_* zh^#Yd$7X$`BVj>Ku|KF!tciIq5556ezutW*6|Iz=9|)+(z^bXyJoVjr2|E}}m~Fi1 z$z$#ewp)2GlWruDi}pLF z#iV8vl0P;?X7hEY^;n+=Yvnr~T-J=1H}PRj}TJ?!+_mD42r z`l-$Na(2EFBX7ZD2}LG$Q8>C|IL}Io++=cL zsWa(v?=#7F05L{rGodfsW|C$NDRg|N$uBv`{U$dH_q!xzom=7DipH&Maw{n(-VZ-d`$NB!yaeBw3xm(}=rhLw%xd&h2 zoQVkp)c5F_qjpC|z%{z85W8($Rlr=?fS5pX3&dpw*ix}3Ii^5~5#kDP7Tz&oN97jG zVl(-fOB+4{9#=?F)>D*!m~aH%F>%KrT6NR#$N8Z6jU8^ex@e13Wz1`Z+dW3!iVo{ls_y$_r7p>e*yWtfSgH?I|{_Mf)K`i;lgtTvtapJp*9yR@B0H5ZYG2yj}?Fz;xHc=G`X(yF6n< z;-SJ_io0+8Qb7+J4WWY((lvuW@`z^&$i0Q+g9PDFA&k4WkbB4EGQ?m+CKH4JomBP; za|$WaosGiELNU~b*6Rx;vOZ+h==wtN_tMCx^=Trz$&rNd{zC4!-DOCW9fg`X-QJ8u z8uxBYjNPYN>H{87d{do;9>-Yo%w87p(u1vuWZbmzYY791^shJ8idFQ`9Q*X?e1W6q(7za;J5xj_1{RygHv(7x3yL zURTcdDMy5hg+yy+%K0?liRTKraz1hnF<0~{2j%;Ultg(&5qUpBURp#-iYZ2*km!p< ziMFJm0*r$Ku%x4fSmAtNsC#y=h zT;3)06*2a3?#4N%BL=2+7CEvQisdK*a%2Q_Fa#p!islL~pLfZS_*U^%#+awPe^Ug; zCn5(v+FlHXG@pTWCf=#5;F*e`JxbJQk(pZZUJ)$JP*Ho&6{W#oYRaji&=l5P_*c_Iq;n`xC%Zp911}&)!tDApXc&S5ue8R?P+9t@r33d_LVDF`ZO2pSi-UK{9>+< zXNviwO8luOi^U~HeU$yV1i7bJm(O!~Jp9n-`qB_!O#Fbbt(YBf_e4fQg2b8Nm;J@N z>E_#BEJ0(sz(HmXWv@F;g3GBICA`i|B{-A|=bgnF7nI0L8IclK1nMCw+%*{T(t!L> zF_|r%B!4Ro0iHM!uFU%=G&1wS(a9j6eeQG#C?_J})qzQ_g!Zr=5_c!ue{BiZ$BRq} zSIoQIhQN8I#Hs7zL-Nu~zEg-UyKqkl2{(^#DbeKdB#ZA5~uiJ z2^1O+Vx4-tWcJkGiv8ogB~V?NGyY^Txu=9P^QR-25@^wbC~NMaieq%LN1}#h4wA)Y zFXy)-do03!AthWX4^5w#A|*;Vh92ntb1zfM4>$nwz)w;T6tX7h8o%A;4w0XP0E&7N zOer1hPdY#&LM6zB=HrXZ4hizsE#A2C(z(MqbtZ?; zTNF^D<)4|ADB2{ViQXPDNYg*zp@pDkPUX&=9gvTknaSMX#~u2N<_-uhGvz;X*250W ziUVf!qhsXXo45LfDf2{f6r_&zD^bE<%s8wU%lnmRHx6tSMq-tDf($K$xQkHeL;aYf zxl7Ng@6yNKucs;YetJb5Wv1;% zAn@jtvSLmtIQekx(5P2i>O@vXo+=gpYSx^yr==qR&YH;$m0I3#iO(!xP^=+*o5G=u%OQZ7sH8l)7_Wg38A)@NdW>h9B%iG{td zyM3B{`lT>T@;U+2c=YJ2Kh`5N__B16OkL+@W;T%L%J8TlH48z%dJhw=TG~Tmmrg~L z4Kkn7NvFj1>s|8MQmSftS>nVj^Th@v5I#S-`8pr-w+%?dkT;KsXG>`|HTv>(%s)1e z7s?FtX|9E&;>%Jwy^JzRbq$VqL%H&6X{j#mb^Yj5Wt=T@814ED+SbsPxnDp0NSXXl z8SaWy7xS`x^pP^Ud5$E=e=l{=99sf=@zZ=S&0~CHr1(1DG|SR_P{NYI>2JOz{Iv|8 zcDOX3*jb+@Q$Knn!Js-tmpU{P8>U(cjo$8&G%xGDnveCqY3($#FMw<4Lp{>#J+5#3 zWpJ{G=IV>Wz-xhzNyaTj79?Z@SRd1`4_mGh&s>WcFB=;iVXel1OP4GTSHJoTT=Bu} zE;N*DX6)GT+ZL@R9p#!Y?EMjQkpUsP$-U)>&%Na|2=6T?kCc;V%O}OoawF~98{KqB zW8vQN;4%Bc9z15a^UM2`#7s91*5^1_J#2=mqFFiUMn)JV443Z)&u7c~a5-nXk<^9{ zc!UoDjLLK?(V6Z(mlUbWgofT(O*QXh=BRG+tI_$FIGqS!Fo<1KfhfdS`5vx}CmCjh z7}}b79bye21~WF9o!9)$?qKs+FLOi1v@-AHJznOa3euC{U@cpxdnFH%D!{VO<&F%S z@Ydjt=-nvWDrUJa?Hh&8iVPL&7q?Z=k$h*xHnvyyrF{ph{)ZhC8LIDY6VKSBc(FXY z;@OIqDvnn;D};&@6}Z?PNM)a`kaV5Aq_gmn7rF)&f4`!4U}~^pn@7TZFNxMVr_OH& zXQ&F+JuE`%iyzK9oY{+GqEU5w!%(u3D}%G1p`8eC)0GIW)0J#^vI+rqx-vRO5Gy?s-UZVRvOe19 zA-5*@dS4g3m1BJ_`K3zn&B_U~x!P0NhuB<8WAk<;3VR1}(;dBCn!x)owuKLyOT$xG z3m@CSGuwH?+}S9XL(Zy-3y)|08-=v0v5BjbomVG?y8oCgt6~~(dH-{&yDH=&w$W z$%v9z^~*ftVB=qVpWUNpak3|EtD zYrG!t`z3L>GCunl9#pG!}@}fvo*@vVZ6Mbt)Zv+xfzDDq1kP}UbPD$o3tmyUZA(%d3wkYs!!28KCX_+^^rGgMQ<&NFJxVvXK2K` zD=rC-R~@P>l(%PSOhQ#A9O;H5j!jx9>gv85YU3A*o4+^2Y-!!}1g+ot27F`F^b#UF z>!$cRoEVZ@#kKI7R({Wm8lHd4O$&@R-5x$u z!jlUlgmCgfy?CS!NG`!$r}@TCmN!g_E9+@5tzlB0sKdYzphITMB=-=|7T0r+;sD}P zk572L<}jZeh2^2Q=5pau9i3fql|b_(@6$BWT4hIq`T(y*egNKwd98z%H_~JY2tAei2;6pHdc2*H3%I@_Kqye}yitc8?Z*aYxwgxY=mxrC*4Gv}>?=l>byBnChU@&QEq@K!bsF?6-?z-w~?8bgxeK!x! z9s-xU8$Dy=nGH^foNdUIyyW!;&o@ssU;rN=f!!Tk9;DoSa4keo&@}E#u8DVD@=>N3 zbA@JX_B}2MV(4m8IK2iK3L4tVN*9-4pdU~q1WNBtP@@oLr2@m`OI!ld1B zy&L7hxshS`ZH0Gi zWB2#$CSN4<%KAp9nRRTZBRrIX7G;ertY#kJ(?AT%J;A8gA9^%mz1F&wWVf;c zP*hto-7X}mDCO;bOg`9{d1;f>_c$#Mk9cuxmAzBHY&7iEJ;WPb^4pDc$?(w};P<%B zztcz`M+f+R=6M{jG?zTu`0%*UxQ{u+KQVr~aet4~>{>BC)5!daPm^aFv(nRbzvg@C z>>=F?yk`gztO?mFyAX@80-IM@-^ASur>$>t(#;+`zss7~h2qzZ+~+xRnRo%6)F;A$o4ouMNnzH^D#L^SsdB1c~YAcQi4-4t-wW)4$o# zv@xrOIlw0$x#mZ1NFH~yxN2d zfLU}C%~Sr{A2cvM!mP9`dJi%C=7h)u=A0!X43USOD}2&~XBBFg&v%TFTU&9YSqtN^ z7}Py%JbAq(X^4E#9GpAXY~)yrt5;avtf=MH&0bth%)Lk@>InvBd#9p@G<{1;} zo5f=t_%Q~*UL5OCpR>qMH&4U{_R={3#3RiH)q64+fl&Sf6++t&ny-#w!;A&Hfc&_< zpHW+SU^u$8SdE7em4yoOH=i~Sx-uoFGz+7Yfb4Jfi%VMkO4ihp7G=};l9pMm1J=xK zVW}tJeb(ZaVD}v@C}%HjnH@n&`dE16T=IO&)aDj+W9Q-blL^%9f`Bp4kY8Nff=`gW zP})M-_!T?wy%}`YGpIVrJMf{+JQ7qefbz#;- z*pSr<%g|&^`KYbF7BQ=p*^MI0H&mxEtC-xXte;A2Rk-oARxXS(Ol}S7kl0GuEpG+8 zv=C%XEAy>IOl@VZSkmIfKT{4WE2Ja5Pz04w+{#_Ch^4LEx0dE>@!$>u+gjCgtYT-Y zI>KsL93t?7Lu8ae)q_2GN2^EDT(RtVPyT1CM!{D&)*2j-|FU%@xu%`y+r+hPB&nU~ zXeWp=KHN%Yq&5gLa*@`3I_NdgN|Aor1{FfEE0z$SnIQ6i!^S;+P1{vIS1e}mF@oQ| zL%K+7NY+(;-(H=&a&=DMrdeQRCCwZwwRUrxCc+vr7#9w!o@Yg6+scxZb}cx%+|&{3 z1wkOW+~yMYwQ1&AsVu{KYX0q%8C*lzQ9{u9u2%&qw=U%r3%vSV8%r4ksoibBV}q(H z7UH3@L+D$n5XvV=YNRS~0g9o$3U>+T+hTWzC-zY4EZ7*5|8<+R2RTvuZrV8Fv`I0- zTrjDpHUh@ zV7jFv@w8e#*lq}<>OQqd-jT=!nn%LLU$>(-2gi=Q(Y|ZQGdo();TIn6z%KuJA_tT&Vcku0?KViD^)IL6}YlkFX;knm~;S=TA_caSGK zg>4-YIn}{LUybPgF@%%RXlBk$;?Fvmh+rETZ085tDB61Q3+Zg950$g9mGn`rIiOd6 z)rnG;dZ`7)Ep?J*YzRN=-mmuo?JCMwo$3R6O_BxmK+RGM3WKq;on$x>5W_ya6hPwx z+=swB^;HL;bo$1t(>lnL=2e5lRzS^ov1r}(n+>$X7ZI zD$O~I_7B2uI^T2SiU{&bkzWZ(4BiBvKoA~ZpLC+`@ku9coq<6X|L+LZz%z4JJlSao zgWI73${LBNYzXH%CDZ~gYc2#7r*58pcGRZz55KD=gUg0Hmni2dt+rlbzNi>o)6l>rbsatdb;6Pte%76pzE;%aEA6kcm@HT&#`k$HdQLE$hmxHrlmm`+izKKY-{VQUP?NS713(SeMDd7ujyL1|T(H4CF*uyR>=yemXlgHN*y z!{t8pWt-10`5?;2&DzZ5jV>SD>DvX*N)g-zn@c{`<(lh8VeKR>8>URX+Z7$-j){vG z-|dQz;m+Dz!j-P?&!3|6c#6y8RPRj&)e0=sRRr-$*RB_(U2jR04z(PKtg)p^BpFQ* z!kw|X41r7EAE_`R(Liwi-tCyPoDCN@+YFb*2AkmuZN8;VK;yUli^kGSsm10nqM~xf z){D2oSzFlWw&Z!NxXA|2HB^NBsO^n8;mPxu&uxItf#I+p335S9q-w#T@nbfp^!v#^ zDRv&B&Yw8lC>Q(pNU>oZ`D|URLOZkQ`IV)zc^$$)=2|6Eo?fTSqfN?38&tXvI9h*T zrW3u~Am_S*i)>>m^8x2TJx`8Koy9hPCDl(JO?7Ja&+}>A966EdR=YW7l-o7X6T5pJ zclW&EcT;2cUZYyi#~z)>9G}-qcBP8ZshWp@e}em7sQ97#|DOi}G2Pj>{#UiSZ+-LD znXMGsyS;ZOJ~LaL+x{!k591#^@Ph|_@W2lq_`w4|c;J7m2cG#KYuOKm{og$B@Bb45 A82|tP diff --git a/software/CPM/CPM31_WORDSTAR_v330/PRINT.TST b/software/CPM/CPM31_WORDSTAR_v330/PRINT.TST deleted file mode 100644 index 202e461..0000000 --- a/software/CPM/CPM31_WORDSTAR_v330/PRINT.TST +++ /dev/null @@ -1,121 +0,0 @@ -.cw12 -.hå (Thió texô ió á printouô oæ thå filå nameä PRINT.TST) -.fï WordStaò Overvie÷ Pagå # - - Welcome_to_WordStar* - -WordStar‚  ió  á powerfuì worä processinç systeí designeä tï  meeô -texô preparatioî requirementó foò alì leveló oæ usersº - - * professional writers - * programmers - * text editors - * office administrators - * clerical staff - * students - - SPECIAL PRINTING CAPABILITIES INCLUDE: - - * Boldface¬  Doublå  Strike¬  Underline“  - - * Strikeout¬ Overprint (co^te) - - * SUPERScript - - * SUBScript - - * and any combination -- WordStar - - -On-screen printer-image text formatting commands include - Automatic-Centering‚ -whicè  allowó texô tï bå automaticallù centereä oî á linå witè  á -two-strokå  command®  - - Margiî settingó caî bå changed¬ anä -                              thå   reformatteä   texô  wilì   bå -                              displayeä oî command® -                               -                              Selectivå    margination‚    permitó -                              "cutting¢ arounä aî illustration® - -Á  widå rangå oæ letteò qualitù anä drafô printeró arå  supporteä -(includinç Diablo¬  NEC¬  Qume¬  Epsoî anä  Olivetti)®  WordStar -fullù utilizeó bidirectionaì printinç capability® - -Somå  printeró  wilì  supporô  WordStar„  commandó  whicè  specifù -variablå linå heighô anä variablå anä alternatå characteò pitch. - -(The examples below will not be demonstrated by all printers.) - -.CW19 -This is an example of variable pitch. (.CW 19) -.CW15 -This is an example of variable pitch. (.CW 15) -.CW12 -This is an example of variable pitch. (.CW 12) -.CW11 -This is an example of variable pitch. (.CW 11) -.CW10 -This is an example of variable pitch. (.CW 10) - -.cw12 -* WordStar„  ió  á registereä trademarë oæ MicroPrï  Internationaì -  Corporation. Š.LH 20 - This is an example of variable line height. (.LH 20) -.LH 18 - This is an example of variable line height. (.LH 18) -.LH 16 - This is an example of variable line height. (.LH 16) -.LH 14 - This is an example of variable line height. (.LH 14) -.LH 12 - This is an example of variable line height. (.LH 12) -.LH 10 - This is an example of variable line height. (.LH 10) -.LH 8 - This is an example of variable line height. (.LH 8) -.LH 6 - This is an example of variable line height. (.LH 6) -.LH 8 - -Daisù  wheeì  printeró  caî alsï bå seô tï "toggle¢  betweeî  thå -standard 10-pitch and alternate 12-pitch printing: - - This sentence is printed with the normal 10-pitch setting, - then toggled to 12-pitch, then back to normal. - - -Tï  seå  thå embeddeä commandó whicè produceä thió  text¬  follo÷ -thió procedure: - - - Iî responså tï thå basiã prompô froí youò system¬ enter - -        wó  - - - Wheî  thå  Openinç Menõ appearó oî  youò  screen¬  typå  D‚ -       (ord©  tï  ediô á document®  Then¬  iî responså  tï  thå -       requesô foò filå name¬ type - - print.tst  - -Thå  firsô  thinç yoõ wilì noticå ió thaô thå texô oî thå  screeî -includeó somå characteró whicè dï noô appeaò oî thå printeä copy® -Foò example: - - ï thå headinç linå ió identifieä bù á doô command¬ .hå - - o words in boldface are marked by "^B" - -Tï  continuå  viewinç PRINT.TSÔ oî youò screen¬  trù eacè oæ  thå -followinç commandó tï scrolì througè thå file: - - CTRÌ Ã tï vie÷ thå NEXÔ fulì seô oæ lines - - CTRÌ Ò tï vie÷ thå PRECEDINÇ fulì seô oæ lines - - NOTEº Holä dowî thå CTRÌ keù whilå yoõ presó thå nexô key. - -Wå  thinë yoõ wilì finä WordStaò aî easy-to-use¬  essentiaì  tooì -foò alì youò texô processinç needs® - \ No newline at end of file diff --git a/software/CPM/CPM31_WORDSTAR_v330/Read.me b/software/CPM/CPM31_WORDSTAR_v330/Read.me deleted file mode 100644 index 452b770..0000000 --- a/software/CPM/CPM31_WORDSTAR_v330/Read.me +++ /dev/null @@ -1,2 +0,0 @@ -The files WSterminalname.COM are patched files for the indicated terminal. -You should rename the appropriate file to WS.COM. diff --git a/software/CPM/CPM31_WORDSTAR_v330/SAMPLE.TXT b/software/CPM/CPM31_WORDSTAR_v330/SAMPLE.TXT deleted file mode 100644 index 92c7be6..0000000 --- a/software/CPM/CPM31_WORDSTAR_v330/SAMPLE.TXT +++ /dev/null @@ -1,73 +0,0 @@ -.op - Apriì 1¬ 198± - - Calviî P® Hotstuff - Freewheelinç Enterprises - Biloxi¬ Mississippé - - -MicroPrï Internatoinal -129¹ Fourtè Street -Saî Rafael¬ Californiá 94901 - Attnº Customeò Service - -Deaò Sirs: - - É  wanô  tï starô bù tellinç yoõ thaô É thinë WordStaò ió  á -verù  finå worä processor®  Yoõ peoplå aô MicroPrï havå  outdonå -yourselveó designinç thió programm¡  É couldn'ô appreciatå  morå -whaô iô haó donå foò mù career®  Howeveò É feeì thaô É musô brinç -tï  youò  attentioî  á probleí É havå beeî havinç  witè  WordStaò -lately. - - É goô mù WordStaò threå monthó ago¬  anä waó amazeä aô  whaô -aî exciting¬  hard-wrknç programí iô is®  Iô didn'ô takå lonç tï -learî thå commandó anä sooî É waó usinç WordStaò foò everythinç É -did®  Letters¬ reports¬ memoó - alì werå perfectlù formatteä anä -printed® Anä editinç mù weeklù saleó survaù waó á breeze! - - WordStaò  anä  É  becamå inseparablå -- whaô á  greaô  team¡ -Wheî É ordereä MailMerge¬ thingó starteä goinç sï welì thaô É goô -promoteä tï Europeaî Saleó Manager®  Mù worë goô donå sï quicklù -anä  efficientlù thaô É starteä tï havå extrá timå oî  mù  hands® -Sï  É  signeä  uð foò discï rolleò skatinç classeó aô thå  Ù  anä -boughô myselæ á crusheä velveô jumpsuit® - - Prettù  sooî  É waó hittinç thå rolleò  discoó  nightlù  anä -havinç myselæ á ball®  É meô Maureeî aô Whiskey'ó Discï Citù anä -felì iî love® Wå werå dynamitå oî wheels! - - Righô abouô theî É starteä noticinç littlå thingó werå goinç -wronç  witè mù WordStar®  Exclamatioî pointó woulä poð uð iî thå -middlå oæ thå screeî anä typoó begaî tï sneaë intï mù corespond -ence®  Sometimeó  WordStaò  woulä  jusô dra÷  á  blank¡  Nexô  É -realizeä thaô thå helð screenó haä alì disappeared¬ anä control-Â -haä stoppeä working® Iô waó alì downhilì froí there. - - Thå daù Maureeî anä É announceä ouò engagemenô É  discovereä -cigarettå  stainó  oî thå keytopó anä WordStaò waó  hiccupinç  aô -pagå breaks® É waó distraught¡ É trieä tï prinô mù weeklù saleó -surveù  anä  alì  É  goô waó twï pageó oæ questioî  markó  anä  á -paragrapè froí Unclå Tom'ó Cabin® -.pa Š.pn - Well¬  I'í  aô mù wit'ó end®  É lovå WordStar®  É  owå  mù -promotioî anä eveî mù happù marriagå tï WordStar'ó brilliancå anä -itó onscreeî helð menus® Buô É havå tï puô mù fooô down® É jusô -can'ô allo÷ thió kinä oæ insubodrination®  Aó yoõ caî seå bù thå -numbeò oæ typoó iî thió letter¬ thingó haven'ô gotteî anù better¬ -despitå mù offeò tï takå WordStaò discï dancing® - - Whaô dï yoõ suggesô -- grouð therapy¿ AA¿ Maybå á vacatioî -iî Southerî California¿ I'í willinç tï dï whateveò iô takes¬ buô -É  musô  confesó I'vå neveò haä thió kinä oæ managemenô  probleí -before®  É hopå yoõ caî helð må ouô witè mù dilemmá -- É reallù -don'ô wanô tï loså WordStar. - - Verù trulù yours, - - - Calviî P® Hotstuff - Europeaî Saleó Manager - -CH/wó - \ No newline at end of file diff --git a/software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.DCT b/software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.DCT deleted file mode 100644 index 8d3325870720c3adae33c0d349866618b01acf5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97280 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 IQ~&>e08u}Ag8%>k diff --git a/software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.OVR b/software/CPM/CPM31_WORDSTAR_v330/SPELSTAR.OVR deleted file mode 100644 index 62870caeaabfb52dc540ae971be3c07ed8709e58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 P0>MMe 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 diff --git a/software/CPM/CPM31_WORDSTAR_v330/WS.INS b/software/CPM/CPM31_WORDSTAR_v330/WS.INS deleted file mode 100644 index aabf0750142ee397e3a8f66a6cdf33f22950af60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58240 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

    b;$KqW)fdpUvgRhTTjS{3yAr z3$q(2crl)s5Yw0BnLqOzkxVXuV{@MD`(h_18e3fr%1-pL+__ll1 z@XP}BC)`uQkFV`QC76egxIhOO<=gShf**dR6HoBN-{ceg@auenAAX|~i%4Q> = comments -To modify the actual file, subtract 100h from the memory location (IE: 193=093) - - MEM - LOC -LABEL 330 LEN INSTALLED ID TEST RANGE DEFAULT ------- --- --- ------------------------------------- ----- -------- -IDTEX 18A 34 TERMINAL ID TEXT (varies) -PIDTEX 1AE 34 PRINTER ID TEXT (varies) -PROTTX 1D2 34 PRINTER PROTOCOL TEXT (varies) -PDRVTX 1F6 34 PORT DRIVER TEXT (varies) - 128 1 INSTALL FLAG(00=installed,FF=not inst) 00 FF 00 - -LABEL 330 LEN TERMINAL ESCAPE SEQUENCE CODES CTRL RANGE DEFAULT ------- --- --- ------------------------------------- ----- -------- -HITE 232 1 SCREEN HEIGHT(24 lines) 10-19 18 -WID 233 1 SCREEN WIDTH(80 columns) 40-50 50 -CLEAD1 234 9 CURSOR POS-LEAD-IN STR #00 00-00 -CLEAD2 23D 5 CURSOR POS-STR BETWEEN COL/LINE #00 00-00 -CTRAIL 242 5 CURSOR POS-TRAILING STR #00 00-00 -CB4LFG 247 1 CURSOR POS-FLAG(00=ln/col,FF=col/ln) 00 FF 00 -LINOFF 248 1 CURSOR POS-LINE OFFSET 00-20 20 -COLOFF 249 1 CURSOR POS-COLUMN OFFSET 00-20 20 -ASCUR 24A 1 CURSOR POS-DATA(00=binary,02=digit) 00 02 00 -ERAEOL 250 7 ERASE TO END OF LINE ^QY #00 00-00 -LINDEL 257 7 DELETE LINE ^Y #00 00-00 -LININS 25E 9 INSERT LINE ^N #00 00-00 -IVON 267 7 TURN ON HIGHLIGHTING #00 00-00 - (inverse video, half intensity, underlining) -IVOFF 26E 7 TURN OFF HIGHLIGHTING #00 00-00 - (inverse video, half intensity, underlining) -TRMINI 275 9 TERMINAL INITIALIZATION STRING #00 00-00 -TRMUNI 27E 9 TERMINAL UNINITIALIZATION STRING #00 00-00 -USELST 28D 1 CAN USE LAST LINE ON CRT FLAG(FF=on,00=off) 00 - -LABEL 330 LEN INITIAL DELAYS RANGE DEFAULT ------- --- --- ------------------------------------- ----- -------- -DELCUS 28E 1 CURSOR ADDRESSING DELAY(msec) 00-FF 0A -DELMIS 28F 1 OTHER MISC FUNCT DELAY(msec) 00-FF 05 -DEL1 2AF 1 CURSOR BLINK-ON SHORT DELAY(msec) 00-FF 03 -DEL2 2B0 1 CURSOR BLINK-OFF MED-SHORT DELAY(msec) 00-FF 09 -DEL3 2B1 1 SUBMENUS MED-LONG DELAY(msec) 00-FF 19 -DEL4 2B2 1 MESSAGES AND SIGN-ONS LONG DELAY(msec) 00-FF 40 -DEL5 2B3 1 SCREEN REDISPLAY/REFRESH DELAY(msec) 00-FF 09 - -LABEL 330 LEN INITIAL SETUP CTRL RANGE DEFAULT ------- --- --- ------------------------------------- ----- -------- -DEFDSK 2B9 1 FIND .OVR FILES ON DRIVE(01=A:,02=B:) 01-16 01 -ITHELP 34D 1 HELP LEVEL ^JH 00-03 03 -ITITOG 34F 1 INSERT MODE(FF=on,00=off) ^V 00 FF FF -ITDSDR 350 1 FILE DIR DISPLAY(FF=on,00=off) ^KF 00 FF FF -INITWF 36D 1 WORD WRAP(FF=on,00=off) ^OW 00 FF FF - +1 36E 1 JUSTIFY(FF=on,00=off) ^OJ 00 FF FF - +2 36F 1 VARIABLE TABS(FF=on,00=off) ^OV 00 FF FF - +3 370 1 SOFT HYPHEN(FF=on,00=off) ^OE 00 FF 00 - +4 371 1 HYPEN-HELP(FF=on,00=off) ^OH 00 FF FF - +5 372 1 CNTRL CHARS DISPLAY(FF=on,00=off) ^OD 00 FF FF - +6 373 1 RULER LINE DISPLAY(FF=on,00=off) ^OT 00 FF FF - +8 375 1 PAGE BREAK DISPLAY(FF=on,00=off) ^OP 00 FF FF - +9 376 1 LINE SPACING ^OS 01-09 01 - +A 377 1 MODE(FF=column,00=block) ^KN 00 FF 00 - - 81A END OF USER PATCHING ACCESSABLE AREA - \ No newline at end of file diff --git a/software/CPM/CPM31_WORDSTAR_v330/WSMSGS.OVR b/software/CPM/CPM31_WORDSTAR_v330/WSMSGS.OVR deleted file mode 100644 index b4fb5b5983de0ab2d000226ebb246a1594be6d0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30080 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 diff --git a/software/CPM/CPM31_WORDSTAR_v330/WSU.COM b/software/CPM/CPM31_WORDSTAR_v330/WSU.COM deleted file mode 100644 index 5f15311dd39008474784ec78cfd84b3ba219e47b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17664 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 pQWX+=e>XSN*r@25YG|{j0srA@q^6S diff --git a/software/CPM/CPM31_WORDSTAR_v330/WSbondwell.COM b/software/CPM/CPM31_WORDSTAR_v330/WSbondwell.COM deleted file mode 100644 index 677f7dae94682f1c0adf3f079d2f7431f5e03131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17664 zcmdse3s_snmGJ0_w~&M+3`pW}uLKw*UY6ksUkUjI#xEWV*u<@q7#nQk2RIl9aBSJ_ zwn>xJ%{xugq;=Y?o2Rk!uo5Sxa4)#J3X?TX$T}oVSHCN^sZ!T+EH@8F{AaF+<8-&% z?!W(j-|k+}+?g|H=A1cm=FFLyJHpi>;bM`1X(6##iPXr5XnJWwi|D$}O+DR>J>B$*uHKHGuD0IJ?yj~S^wRF0UEMuWs)SZU*=u;M-97Eiy=^@- z-PEz8qiuHwJ-=jr8Qt8`(+TCwbZhehcy73Xjy|O9wP#6pS9@Q_jvaKFjRtBvI|(UT zs(%&-YVK-p>uIMOdpZe2*NR5#sqdyYb?@A{r>k?5#M^FqS5J3u_oi-Aja1Ll#?m@^ zb?5G0x?xZ6u06eUdr#-BP*1_?<`%Ay;26-?9uu1Btl7DzeC{NTcN|aKvRO$8KDA@TO`OM5r!jcp!L7ssUs1%ft zuqgUQ$w>)l5y?jIo0*XzG*eQtWKC^->yqkaE1K1g+9DGwU6P+)+VHU4BX_#c7cM9I z!dZo`RyomCR~7oa%7s36qR(9D(<<~y$>RFz5~!o0sRTtN8N|FLe^b8hn>XIJe{s!< zhBXq5vzF93R~9$YE1oZ2vI;)JQ9fMX9nh^k|t5sXz$VJ(?LUQp}_w^-MNOnlYiIgcz9)O>IhmUkp04 zNrvR@acDt%270tT7QNK2(QRqh#H?u7WXL--v7fYSmV9HoX4N;hYZ}*Y*Q~v9yQb{s z?V5QTwrgx{+conyZr7A=+ODZ+->zXhwrlL0w`(f5Y}YK^AhDXch zpkI_IG7zPRp(uqehEizaD1|nGQluwQilii&BJN0(mi4C!->GZaNBlfEoYDZh-7H)!1d(*xT1SDxaVB|Ae*jYqs$6^mox zjqKukv1nR$L1rKJh;PLpDM?+R?8EQHkbL+D>trVpydxf8q=ilKB(f%JbVpWezfF$z zdWP*{DVb)4st^z2WUoP6$H*giY6e^Rv8flWrUD2u7lq< zAlbCEx}|09THDg4EiFr0Y|Sm#o~27jbnTioYv8wbZFBS5HJjJ21>6=$ZCSf^O$#K} zMA4yGQ&UURW|C@dhLjW|`9LCS8Ke+W|K{VQ>d_K-ZARPB z4m5yXLLT%RWRh8Bm9oXM6|z>@O|ov8TXvW1C$i^dFUd~I1Q{=TRyHhIgLU=vB6w&- zcXjvC|9JW|#G=tRX$0Cpuc&XSX{ukmnyzVTYG^{s7Pl;3jSe3^jOhBdogH-dW_k|Y z+fAd*ojW>EU0dglx{jVL9W-ief|7I_P2e<*4!?Ezj~5T0IV-;T_F+g0f4p${!wca+ z6oPc{05yxnLQ4b)F?yM;f}`sjTIibkhBdXz>AIS_hNgAOq+Fz;myufaz-TYMxqDAn zdkOdf9bJ2N)A_WD-r2ExciWbZ-E?0k%;@c%yLatq8=%{EM_bz6wPT=!Rv}=cb@7T8 z8lurTef_SsJ-a*F>FZmui%j;NU0c?JRMrEv^&Rb<(ey?CrOO}sKcdlZKfDw;fBBD> zKBfOSP5<`8kAp;lA55M4`23|me)JLj+duy40-`_or!Ujti-YnqoXZmgkK zbqvr*MZl7@o7Ob8)Ko_SDRhk#(a zkxyX!NRM1D`_{J*`WBLZRT$DR`A-Hc>l|FO1BwJJZH}O2jRUu*@AF)GBZ)z10v}GF zdMhbt+U4+1hyj3@`W&VKhuO5p;dj3yJ7?>0m~S$#HJcxvLJC{I!wmqd+jgtNY!2f? z>7gKYr<-<1tNa8C1|cDiH2}fzWFQVfh0ZFUU6Cl1DuVu7%)8A!6XsCgh}dVwj+8!; z+3Ik6%)T`Wvs=W&nZp4~9=osfADE2zBYrPls=KsX;hM4Kv%+v@7`G}y*CPSKJqpMe zn+$|4E=Le(Eil3R(~xl9z~!ud#4Ws znA_w>nHS1W_ROdcTW?f0F6~k_HgqT(7yrF-Y2$unWBm`54UOMZF0VPNT-NZE5;4sV7xdN~RUdvn zDbyugPGPzot}G!}$+S2Cj2VUSd=hhmLvSjY4N|yX3foDDS1DX`2<~=*D^x3(oh0%O zb#||E5RwFVR^>_-Tq+O@=MeEw-qe%Iu}S=0wW->HJJontGchtK+@-X<>ky7BE&t?j zoep%LC;Dc_@_gTWN+L7;@(NZJ zB%uF{a*?Pj?o#1)RVX}t;6gG{0sfmR98w7z0EA04M1P@=&q4bf4iOZ=?HOig@NpFY zrw*yO7t0xk;|Pmf^3j!A?uByCFbEUBn{2U}Eseo}`?b!R` z=;8D;Qvdr@E@Zpi0Ti4L(Io>TvCNT%ZiZnC!*yDv7d}u0ExTX{98UL7oRMe%-%+*! zjt`_j&jHD)EH#h-LU`^hMOQMkz&|l!7eV}Hx7EY*YL0VwhOtruUBqp5grO(Gq*uFA zfT?{R{u}E3kt7%Weu)M@qYmMMl#p#J=}6JE#4*7%Ib=_%LqkcUB^s+D$;t0lPg<5Z zqIs(vvM1E;u!m%t<&b%gS~#elp<;9yDXD4tnX$<@q=9PP851L7*rf#4TuDNyhVbPb z3jj<0k?WXp18uY0m(WqcbiI{m=N&uJz{`|tP)e!}6O5v&c9!v>Jru-9OJSA%3p}Wpu zkD6NvR!lgULa^%1V5a$Br6enT4`^m3KA|xB3)N+U5(ngZ_GaBsDTACgCh{!~5 zS{9w&KnRfB_p%qdmY^?lK-ZbUI1JiW61{>Fu1si~MKVj5QzFTHtd=_t?YpFj79@g$ ziIP8%0@4)TCyEPty;3XX`c7$t=QI(8HzM;bPl>2}t5Wd3BwxPv_e->4!nMbjr>zKS zRymj_)U`vw@nh*ho!RZ|=Zm$VamPVu$Kef_<$=j?gt_{LmJIAZtt8@9CvZ~AyjXsM zsdAiPXI#nScWc2cKrrDK$+Tr3hUNq<^Bpk1gmI?stf<95(uRb)K}@=4HnE7tK;@LBEwUcwVLA&T%%`T5`++hoXeW>S-8ok<>s;;yKkY+5&&`7 z`GvY&Ab|00I#a+g2!4w=CSmlCc%{kvVNRO7LtzudJ{{=?^C1p8h1ELChYqvI#W-rY z*SH4man8wqM~6?O3XkhJg`>*%sLshlG!w?cItl#z;$HhZG zp5lD3=`4dB=i#=PVjaFw-N5qNFVm+u?scv^AKhkqozo9^e81CaF3;$>IN~n_2c~ak zVjV{;rHl?S{+3i2Eb)AQstYEqsi#r{%%kzZ8}}jy7UTZZ9C)hGbi5Nep^9SP5h!!^$yDcb z1nf(kh`*6~hb9^61$R0ghk9=w-=8&FJ7>UiF>=@o)I}~0m_&1+P34TvQQjXpY|%LQ z3#lM1pkmU%{Q7JvyqHu+IXB38yykL|NtO`#^f`cKQ4>*_)G$#g9r#bF{Sn%0QG$ME z!hpOP=$a$Pfl%a-lbD> z@Vj%WsxBRy(;ta_`&|fQARMseI6Rl$nFFJRb_gHL(JPg)B3BBU^@ln8;?+4@_UCki zr>saLt;t9F0MP{KYp}W|v%@d^VGhvcUXAyRK9PnGrCo;bcp82rO%(^J&laTN&a|^l zY50jWC2vj>q}VLzk=Z=p*;ELg|1I_nWBC8uSl}U|(c%1ak-u+FUHA4~`1viCv$>Gazk>K_q@F1p3AyRjg)vJMc#?s&A^6?$T!bK7B3VdZRaAlotgfP2v&Cz)(p5b!!U7vtlkX1Q!FwqssPJ& zUhMODPcP~-vz(blq5&_;7@Jfj;I0gvfjFkV&J4E1tdisI3>JYQoP`c#^g-*oGNkzw ze=kEgRW>=Mfo;(%Gl{yXdozL~x1HuDCd09pewGol@8x5G(eGvWL*gWkGu+I*LV5Vt zGq5>BdE3Nfz_zU7W&l@ZF)?U}pUBt^87lvT@K)g%_bSx@S+%eF{*+;OmA{a&ytZG9 zjrw$(T0bx{ti>AraJnr;Kd9x@`kZrIiarNcpnxzOG#z4L)nm?3JAIY<027(fgI8ci zdKOuwf0(?04KKI2!sGp=T{IdE9v9N;bY3Wv;v9w<`GNd^<+rS9n)Pck?J%uCh7P|~ zXv8ZGI$@=O`7!0)9&X9N3CLAr=thPO|_B6HMm zZV+EIKv^atTX@DesMXoUz{c%XtJ^bvTJOi-H4KLX3^X4cZ{J=6XS91J$G@SU2+ig! zwHt=~<9+%NzCda*MP%oGDUJmuWe1T)$4vqY{t0}<08=b}$uJzD__KQOT%d7{hVbYq zLr5Hh^`+o7jLBwZCId#-jFvHhVFMpAao;~Ueg9$z`eBXkk!E16-481f*UVUL5J(w< zBSO#I^O!Q87bnTc3j|@2XAHr<0j!3HvC$}$8Yl6c#)&f|+p3@Nfc8NWrpQ(W_Gg>1 zpP+DC?Ve%V9{Z%G(~hSyCcFVKzgz9hUG{QjGzy(>m|&_a2l22G{wFP?_Mk;21Bv*) zZDdZ{O-1Yksl+d81R|$}=QNrH@IHrKM&Cu~$@IMa(+9$ZLGCVl6?6ZBlfGXYt4{i+ zjC*Z&*+YzWL0BR^-!OH-2%NhPLXW~q9#RvK84~)^CpB6QDx4S|6iyi@Ld=o`fidEd z5{xo^SBzqS`?($eoU;7XZarZ(pRnT9nao4fkxSK}!kNC>OvrNstQ3DizO>r>PJax$k89wr7UHDuQRxk;w=ZrjZKaK$f4&V@o~b)mi*q znRuT9*aZ@NQ>JJcsc^&2X=0YgcUL9|I$*J|LD)PoSy zW3vcyRtkY_c*|JNbtug0*)ighx3Mj1;%$@`oM>#V70=*Mqlar3F< zS7CaPgAtcU5{JVI#lV&L204t6dh@af{rNp2=2L2PScyc>=`Z;kRZRhWLfqW?hVuFU|G~ z8?z_J;tb28}gu;&Y`m}WW$m%gBE^95M0*r47w;E z3BNKyhgDZN85=b;Wn)}PfCBl&B*UeKaSGB>`R>e~#9w6lu4GSyFB}BTAQST(V{k%@ z7 z@oH8kaQWoD8i4rOTztidSIot#JmJNhfaMS?v`H@(R&!6<1Gp|@!f){SUd+K4vUS4t zoJg#1KTwvPgPlje@g`zULTe*3Z-nwaofDD!j^;#SeA{yj9!)(EZUh=Zy%k&uuuRs8 z2~dm%Zh6HMwF5B8X8YdAfu-l!9PVG_PYJK&z-si}9G4rvnDzdn*|7S&oCA{6(jdm^ zc>cFJf|`aEYBC*3@m6+y{MZ#+3|cGm9)w*oF19wVY_y(A3>D z=vf$GAYIcF_7IFOhyg-{y>zyQFw1P8aeg6vt1j+tO#I}s8s_pxE_0rtDy5Us8V@5dtyM4?;Qhru7Y zhYI5>OvqUU+Z)71`W*uj8$?z7KQkd=f|*Q1*)p&&hbBmhbndVlaLr*i=}X}Y$q)p| z-UjKV2gvY;ZsJX*s{6g?8o-17(gt*y+_2%e$Yf4c^7Bn%U;sKVS!o5JZ<)yt^FRgL=6XJK87K8p_I+kxY1wn8i4weS*uh#@}Abl2Kx&WEK-{cQLd<%uW42TCt z|1Tv76oJ+X{|81oe#FGMNj|8^U8KuF5H_kfAB6*x0Tal+&WtOVASji8g7hN)kO}w! z|s0s2~LJ6NU_;ZF^N!5C8 z^I#5w$p=AeE= z3|R81^Y}LN`S5-wpBfsyw-5#fC=7TDr&ws7=`8CHsK7p6F~T_N&4m#Kfe`{QD$Ebe z0oa~7VFp75fu0{TTh6ipu#$eFI>Mc1=DxTg-+SiB0TSepAc6nfjCbUE!8%+ZAPDI9 zFPMQ;9`P&(7#fKYEuWNY@OZH+_nd%onfv30_;dmgT)B~AK0lYqh5_%(&vj)p4+4Q7 z6q<*8CrL0;$UG1?G=9a{J>Yz0;kf{`_Z>Nyf`|R*g6`dB55F$AFPOX^jL+6wFfJFe zT`N4oh3o;3SLrkw#O^^YG<(0_dW#v>1Yk3{s)`784iql}j?ag=PTQ|o+iBJ|#-65Z z0!uK6!3M5XDD096ujS%9vtbCI%Y|V?d^q9NTs${ViV`Fha!~=My5e>iA^tGt%R<5* zK(Be05!j(i;as;L+@9)+({ap0?2!Kx>7;0kHT{b94+1$G&w{gI8)otM8DPdX!a`|? z2;XP8K}uMj#~qWx<5Kv76uwA})i#h_sm*z0cJOV;gE@FQete%o(eJsmDsKdic3^ja z9Fq*e@RsL$r+;JHmKTjo-pp;wYX!&Usl1bB-;eUlX0vc-p8GZafjn|t6@>HRXY#Jh zObF5zJlRY+ng_eHNAo-)>@&dD{nRIUzR&XBDT8+;>Fg(YlPxzE7U~OcPD8LffKB_4 z^L$~F{V`-uy`3jF?(@KozFp!&xSB_nuw-H8v3n!Q@JoW9!R|e?P~2Mi<=>*pC6(2c z%PN;wuB=>LSzo!nGG#$yWm9EK<=V;{X0bNI`zH8psN7iDeyt>_;RyVmseG>TXyviW z7b;(>JOSyGm9Nj@3|I1%qf(sNmmm!0FeGNXmXLPpARl|1@TI$FuO6+(FQ; z*Fxy_3v%n_>eC8MI2^M+D0&KK$E^~WAfZ3Z65Ip(V zUCZo)^%#Qj^Y`<#YH9b8y9W;H^5=$#EhyAv!{!9C>I-?sHDC#aTVdl9rj~Jb-^)^=lXJme<4=_h z+6q|kElg*?6zB?wGva%DELf7P+%H&<<#Bd&Pl4r87VjzG9%J#|0$04Srht2fwLQv8{9L0v z(I6-bz#E-UMH>63S_)35j7$cAXqdQ^mNP6^$Iz*>tp%{Q3d2mWw;&|$hj1U+bU1rg z0r5Tnc6!ldfLUGvXB9sxaM8j~3P8<&T5!~S#B#)LwUT=JU@n|`xxfq!CRGJUi}|;p zZPawcccy?_S;732Ju<$tz#qc31?Qz@T@X(f1Sigm;5NC<&{KO0gbxeG0vtnu89u>W zVvq2Ng*G26)D$v4ww^^ee%>vN$S&(^xOa4UA@>H5s3`<=ILsJrF8mgto|Y4nL&2w zs;`iHk@bxKqL3S8Te)NG{SoT3!-Y2kka>Z9*!kL}H!R#sAip;(*lbnJq-LY!WUmsp zTDjNQQs>{_JOF4zXTN8OiS_NU+%mwt2vR+1aoS#F@ehmkI-%Xb6Z0y2gvjlP@1zA< z`r6r(mejq_dckW+jfvgMdo9c{D7V7`=+VIdSPek8w)8l&D`9k+D0xo;Yy%NZT$BOI z148L9#YQXBOR@(b=2KZ+srZ$GTN6NuVH}VK2|p}iPO;?`7d>R29<;s0+FoNVN9`sL z%e@M%YOxO5PO_R*7EkN(T}Al!R_-JVa`%k>qzJkd%8)@7rzGA#_&Zg6yVY;T-?3_x zNZ)^2S^MhLPAfQygi}HwXz{StW!Cy6r|*~*Xb^Ar4QmwA3N^nl{(CDN3BGIvkKrX2 z2*^pc)mmK#fY(@8iB=a0Fr7s(cO(t@Ua`V)AODZmr0E0NB)QIW>DN|2EUSrLM4J$_ zJO^ye1g$;R-N69t_au^q_EbR;kn->aMU%LwC}4G8IoOB4T?D&npIb*@%mpkjv$8~3 z?=c-klM(-fDkf10)7FNf$$;Ug&OCj9=ZchkZIK(cT>K*wI^E=$=nq1npzwDY&FkLU zv%KcqtxYxKeM=i~f5Y0d1G%|R?nRSCh=0&em|iBW9)|XuWW~TX{6&^u1a5_Ai$?r@ zGpt=9H!2WsK=1<4ympuMrdyV*k`mUn)|&!j(BN)EWXAVo(e!~+Q?C~Br;Cz2pPeo; zcs_fzNUjs!ESgtZj@8Ak8LV^8MB{@H6<{7!7YixQFo&FxNBOv7O)BDK&etGjNpQL& zKZXdnjxe_~@;Rfo%)`%^ET!e2ik4M!(=og01-t1byX7Uj>4e?%irsY5ZhGBr8nT;) z?UsA&Cf*Lm3`ldo4EDL>knFRWM4>&MK?$b!SoG7l67n89*)6@Rk058pUXn~YQDO70_*&$>&kN32H}r5ZSsjQ?bv`|0Ul0v0H7w5-{8s6=?M z1l)O1@`NTP_IZXiqjr6ec`{eTic$e(N{g;m#rO+lczG#UjLGqLOD2S@Qq5@=7Th0| zR1r7ss^NPHusunfU6^4P%pT86dO-8h5Sz8 z&QiaywGig7A(lDHo)~?h3^;ip6Dq0&7rMbxM0|wTS>Lagq6dPg>`?AW2=X=%gkzJ@L>n}YXkxx~W;cu6D zF4@ZP3C46EI9u8H)m-4%Hp&7KkFTi==(s(wL;jI{e2!7#A`CSXB`#uTad|cb)Ir3r zvrM7nH~B~43n19lgKw)O-(l*WGMx@~P4(c!`C+-s%`1oQBH}gSN(38u1RFdw;(ZX& zjeb@?yV4#3VZBk-Ckg+(GVX_L)zGE)%KF?@M4Fd^9r(VBNMmS+nVGHslu`oEP2?kbM9Nod*zse2HZSAi+8x zfF^QxuvHPAEBEc^^6~Jz(SMrPxuH;Vw~Y)=%bl#AOe3((a9*_B!4?)4YT&c{de~oM z_Oppla)|7rv*@cLe%MtZBgl-m*xcs8=I+AkI)*{|TgDqeVa`jF}&ik0Km`(J9>m4L*&P<0)he5^?=_8#veQ& zgDe02L;2+7h#XM#+lE~#NHe)e?}j~mI5N@cU?X-a!)qiv_c|T<`p=1$qFdo>*!cMg z3G~*sTRY%mPO6NpL?tmuUdAS%SojRQj8)FQ=fDT&Bt3sNZJbS;;e&Jn*CM$L$;#Mn z6dz08x1xBkzh$fp#Z%OyD41DBH-kr1cyGi{> zu9j;l6pLczRGbQ_6+*CuiEU%#(*0eOPX`z8g%bI4ov7xDj zUb3R4nO@e=M6YXD(?m;Og4Z-Hya#{(8}G|^Og*;l?bTb(KDO@t!JEz|tOE$w9}n}+ z<4U#qFOdA(z<jk>osVHtXPVCzC*@I zk;o32lSH_=@sam@p>JwpHp}M6(3bz4J+P>uF*K1ueM9T@oYT?v zk=$sjtLd7>O{;6baQ-Xt|Azp7src7M;iIYG0>NWkD1k*`ty4&I+UAvm_rAaci{+=B zSm)w)AX`xacO!ybxkXN9J>%a=EMofYmu+Nt%H0!aVpVJ~}?^;$A9`JjP!w z;)W`ucZjTU!}w>;5PvA&;{znJo`nrm-%p&Osy+Y^Di7K<_t}{}2tGLx@|_{53ooe> zfP>ZY)2U268k*vr%*F)F7|C}Wi7{sqTgrXSmbrpN8U^8vgm-Si{-1i>=>&<^K<&I*}5 z(St<+&Jgu6nt3eLItF!)FnKYW8(6|{3(J-;x3O#~mm;%$n-zboqFc6h?xuHlZ|?0Q z?#@=Yw6(FLql;XozO}O*e4Jf-dUo$=>*^&gP#avQ-qg_r7rmp8ie9{>r=w$M2V`&R z?&@vp1m|cA4L7ZNdpb9f`{TRm?k>8scQ*|ey}tgyXjlocI;`}2sg}n zd)nForDIc12NZ$};Diyl6V?IO%m?VsuFc&&JEiO1aO(_i!d<(H{ui&TOLagC$>s2l zO})^djRU~Eir(DO-q8bh&Np@M8tCcVvbC4q(bfknuIQzA!sRt`(QRV~$?b$P-96-1 z8#HR;9#Vx0IDv`>;3{0tPLjD3ZmI3rSwxUF?dT?V+CW;pTRY+Q`mVN~-p-EQMFdT{ z?emrjA{`aM!MPE0pVm0)0K5y}i(B zZF_pRcK3AdjY?>9PxsDi5`vbI2M!J~hRcM9qalg?t4GSh(nInvR{c#yuB-9uMZT;F z5Fi?@l0>g(g5dmF4nPRu=)Z(MTV}Rkv;tC!6qZUyv93pxaG@IMEd>((b)=<|v&Fvz zN0ZlbzSf-UpoC#~2;@r!{&fwrv{is4Axj0K=ut8f6r!`$T&pRXOOnwXsrXZ8pH?L$ zNzuO=VAWqmkr04{MC4ldzrNhxEJ2XZY`pet?5<0LPZy zY@0Mm-MrH@kJf3kZeBHZ9#-PS6m-GWRhX=CLe?Q^y82zQO_jQqW4U=a;y-gm5~sV_ zcK`kN`*!z&=FXfsGv~~iGiS~`E`PO%zgWa$nolg2BPG%!nqJ=6w63|XrnZ$XSYAjk zSX8mFh_3J2)Z5e4+e6oN_jUGmxA%4Rbhq!Im-qDU>gg3zCA1RCeu>xC)7#O~*WOFh z&7C_s+jn=;3riN3(Jh_5T~N+QuUl4TwOX2%)6oaY)^@h{ZKZ1$EGnw4SX6plXLlDQ zuY=@u6^le9Qa?Q1J@l^LF2V*q*x5(#hUz!(0M(nRf&L@`&AD!%?31v|ehot>RcSe8O1NHb6Zm4XrymPFquIVk}xA=wCi zv$GO}W=l$zt*L2fTUNEAu0?6DDKenaW%>D~jSorPQil_L?sTBf9hK;6r2}1cR-(@; zo#-B&nef=%_msZy`t`T9Jxuo8)vbc$^ z`(^Pm(l2ETEDOu6tgT{ERBpgeTT4_AmN(WzyuPId(v54IA>O!l^|}ROynboj>iXuI zY6Ac2Nr*v6qCk`+0mVo%P;qezij&Auf<%jwBys3qp$?raOh==I$tX>tM#&N-QcGe{ zsw53PQl>!)5W+Q&YF3S8vuQ{$a;_eS5pAY5jK9+UvKg%5L1QTCice%F@1FwQ%Eh zRr#jvDr?7f72CO8W!t=6Rk3BeYSGs1D)qzLRnnhqSH-C*l_ZT)C8tuVbSI_KEumBg zswhY)=uAZ6t#UNDB?W!ZDND$pWXm4gCR_FRHd)yd+hhxVwoPXF`8L_YC%4JU|6!ZV zdSsi7{lzw!?Wt|Dil?{97Co~~mX=J(qzX!=O`&883nkM%QZ^6$qC}Q~C|L|e$uu#P zOch7T)CrUaS~Z_nnb2lOJuRB5@m8WrBu_DGSNUO6}gl$j-{08 z`IIuLfKsNJC}m6$rA#fMlqqGDGPZ(JCUBH8zLrvEWKv3LIi=L-sHB*qC`oe+CB;3D zl2TqoNz}_INq!O~C61t^wAWCQ`UG@+V8b=t`pwZ4RIvOD4IvtV95Hvq?2XgJq{Qjc z=jmrDijpUNQJj*05hHKVxc{dIwDYe##W&7bB81$+jfz+t3vXl--i<{wk_!^sh+B9w z28l`P0%aR{H-_ZHKUgOliQpaa_#(}3iYJjZSz|l0+6F9AwAVdi6WTZ_s+qZZMZ$N) zqXU#an;1X}nuA;r$pO})F)M+ykfI5Qv{ga`LFpkRwwKah2g&B;RjsXS*IJe@Z*5)H zYH4Zx@>#x&MAxoavj%=^*S55*U9)-ZTEK0E)Rwht*R(=nO%xr9H8;05Zzidh7D$OP zk`E-JmO%_5^>027ssTNW4x^u<=g=#t4*eZkhdR)=&}Os^?LdR*MdU`mMFxpkQXyF? zsgtxxZjkgyT#`E_Kau=W@}lIVgqL_E&q_u_Yp||?UIGt|V3O;n|MB!`h()7s&gW_ljo*F&StT{}8aeS6oA`p(`h zoiu7{hLUtUP2e<*4!?Q%PZtlLIV-&J)?rBUf4Xq_gA3t66oNGH05y}zM2iFnF?xl? z%Fzvtt#oxmaUy1u%;v3Z?5DHkc|6{J=zFxp3N?%C7bQ38HIXZN1nbUv-1cXsaH z-M*!BH{IX0V+Y;QwR_i&_CdORceJHF-8%+LXaxc`+LqR}(h#Ma$n3s;SNopbFsonN z3US)+>fW**q_Q5Ut?%sU>J!r!{g*C(;Qx?Dzx&`);QZx3UHXLn(+vH)4?YSK3BEsl z>Z9|Q{`BF8^zZ)k=L?8_|DV1{hc6=1%%)yolCEx9zO<>DUe!5BBLxAA(r#YU)LLB? z1*Fi`VnjvPMFDC$gyuPj|To{G%Vk_z@qeRPvqgAoLw1 z{i-meVe+2}nAX|37CRIPnA+_@(;7SONZ;qa^m-D5&?G*bKK*7=(6GzypA-TBG4$IF zgLb1~kKONjTXN3QYd79tTx&EwG>v4I0lNzTW|!q=yU`fNhtfkq>`FK6j#l|G6bwQ_ z7;glE;i*6zf(jj#KAS9&FO>!THyL*udnb*d{!yXdi0vu;0<+cbavObXWJZ^OM>0nO zraX3E=|3x6CVWDX(gsbxwS&0MrX>f@123w(?0BKhKdnm!9R8Bb4|Ox| z+VLIfcxQT0fH!|QJsa^{a`r3)LDM38unnJ4+~W4NB=4O$5MXYR9%Y^{KjHU1MA8wR zr#;!3+$NEr8!sdWn3eVu{=H*Pg%Jd>$bL&C*&9jn4nZ`4Z&CZt;Mdi_y4M8->2pT@ z`^iC>D1asQ@hRr*WZaiGJ(292NWMCpj87%we1&O={S!@4_<%?T;Cj7O${UuG)L7nf z{)Ob#wK?*Z<^}RKD}O6r*7UKwY4sv`eQUM6e%UH{ZT;WLSJb!3m$zLnZ(80hZ))t6 zH!b~p`SPay@}`C#${U-$FR!gWDqqp~lpHZFb|>`KJVihLWm2e{znsGK*qvE?uAFJL z0~j+h{+CJ2x9q$_&TJ6F^KA^uLe=^ZB+m5Od4O19+*jH6zA$z;{fyZEK7|umZnFag zhh1<=z(}mHr=c5R*urp~QE2)16+zQ37y^gW{gY=z8o+myZGhtgDbRC3aym;1B!Cc} zKS$A-3@z|aj@kqeztLrOdpt^xv%5#ITm@akZMBD?C&HvxyHkLveQwWn%KecfC;eWD z3O}O^;ewQqWh?1O!LZCe$u!#~PbovgNn<4{vn{To1!k5YHNPh%2z|vB+1|CpahiCTE*u5;L}hqrh<%NRvSEfF{R}FE%y?seE&2JeAX~^b{9KKw0K|y2JH>NDd}M7UDA~ULKqZ> zIaL;@nK{__6my$&*i)r)(vbt6RVt?|lH+MsIg2Co*=6d;Ja0rd-L4uEB8i>>6;o?> zIcDOWv~QUjFIV%MRS~)8HWitoYVEvJ9ZB+>QDLXr)MC#^L?&9pisVODT4HnE7tKs(9 zBO}w7)vDumT&-nb5`++hoXZ;WS-;@$R>Hul;pVe$n{Tnk6aaD9Jc~8EKmZflG=_kE z2>cddT*Md{^@@}CL!3Byhr$MkeKI-#=0g~A@T)bZ59~&Pi?P>muX2st!c3mpivH{Dh92XD$c#8AAsxb|5oSWNX zh_(C1G=sG@U!+fQ+-qDd6mQE_F934HYji}$GbgGr4Gy-@Pa{kDm4=4xhWL}OT1?w z)d`c<^i!z;=8<^djeCIui*a9S4m_1;Cf0+4|*PqYC%xD0z?P=SCycTP=i-lbFX@H_J=D=!_JHxP+^ z>m3MVARM&h*xi@jo(H3aw)5}L)5_(s0#^!}^~ZVp;*~jD_UH6~rz}e&t;t8)0MP{K zYp}WoqutN{aURg+UWs>)J&}eFrCo;bcp82)Z6-vt~XG>Ip`k} zz`jVN2<8w^FfB2dD1imKlXCnYX?jdD|7n^_ZPds;SJGnPCk!6*{_&VVP_xsA?rn6U zhiiteDZ-K>#p!0fOD*>lrpLmM6fx`n__9$WfZHl#k&$1L9*1)CF2?5NUJMUC*yBWx zZ3ziM+ydTna7uh@VNC)ISJnFmjtk%G+4lz8A_TVVf56|f?|q1pg^A0!xkpe)bw_6o zjA)E<&jaaTT=qWTc{=@;2M0!l;fpRI>?-XK2`>Cb`iPM~kxo46A9(qxxd?tg-5WXN zjmU|A9l2A0ff2a_hMzZ*D1f8Lc_Ss>NRc;U_eK_bBa9F!TYM(M32s0+b7hHuV>7TW zBl7Jtk)?};Nc*|SEoWwaD}dFVf;9s!&CpGrA8#;%?-Yv+ORQko&I|o+@98D|MwT`kl!*n6|k(Z z-U#5zEG7mGdnPk>Lx#dX$-h}R&b>l4LRQTyzCUN^Uh!PWsI3`LW4$)rqSOwKj;OIp zJCbfm(GICOr8egrm!i#q6(}H#1PzB+SoIh)ln!5oHo!z?wcr&Pk(Nbf@gF8HV8hET zwYt5(vI%;<&h12Mjm8UQQXC^NBj2ANF#V1-%&>k{rVXYQ$k5<73-x%VPQ$O%aUZen zktx-38!$2H6(iN!$pHSS%v5C!FcO3xX7E+rC7T~2e(nk={-o2Kux={mQHW{%mQ6 z)5t+z(DiC@%HW2aeAA3YT`QWWN0pDxlK3hpXk?y@C8zf zAtE{VD`7k^B{_&x8g2?$@K53+I+$Ydi@K2rd0~o- zyg(2ZdHN9S8^CIK1nc#DseTIIp`ScMvd!8_H)tOuVTx>%VSly}`w0rS)#e_t?6FO$ zx@>qlW6~P{^Sjl?+-WOk#-h-Lx=E(0VhE4u;eX0BW(%4W5|D`RRy}jtW+-AONhN+k z#S=L#KBrPGg7-P>)cY<%Pp0SXpE(dN403ncDw+Eho%H=iUwP6ut>0_8(-vaXi^3x5 zg}Uhrdf?o75PB3=@{pQ@%n;w7KBZD~P~qgr5PwQP8Df?t@QfahmSB|WyP_8Y+|Oj$En&70&e4WI~<`V5RtT8W-nb6*C7Q>4kaN&iHhhxH%JF zq5a^1Jxztc$bC1{w>>iqRuMdl&P;~48b+=Bfh<3l$CkP$s8VunllB{ zsMQ5Kr-@l^-<_Et=zz(@24VBWU}AxD|D^A^%puEbtiTmOdDvE|vf?M_lW_sM8^Bdr zzM0Iq@M0!((62L{3_g+LjK`RU0Y$Jx3Vv{@1k#Vjm4&c|bxP?^mD=PiU{!uj!Kel`0mb3%*#V~7dYgk;NDceX zg#%=ZVI-UMZlZxdnGJxEY{-LVI)=|apAAdK44VHLL2#NUGU%dw#Q)j=9ad#^FcxZf z+QK-K00r`kNrqDi;}oQ&@ZFI;g+I^sUCEvdUpNSwK_=#T`rxDx(fL|)&O|bN)j4Os zofAp(8FS8-*ixc9{)m4z;uY^+r<|PtGOp_0bHLk>DRe^FXZ40*&2R(P9)a1A1F)C!Oo*! ze*-Zmp|uf-H$wTI&WT8UM{^=EzU?_Wx2gdMHvx^H)(ox$SSIu2Bq&BBS8IKuW)LRX zY~SlSu=G5e!~Ki&DgNagSdG4u<8|p{Ltwo5EAvGr!(kdVX?y((V=jJp14`|*5`D9xt}VxdaU%!0Y40j5Gb#T zfer)~l6>1pRU7H@s3{4B`=O7GxPk#~W|8R$8^4}5mlMqzp1z9)JqrU2q-%J>7J~5w zF+i}I9<+rb0T>7>29|_WJ_=}q0n?*4*n{*3iFSOcJ^Qo#kZ{s!O|fT~23nJ&e%=ns z+{hh<(e!(IDlizvtT9Bi=`aQUg)fur9afX2v>K&4q*g7Y@!Gw1ByNnu0pc6YTTYq(2XX#eZJlM%e(Y-SC497yuZT z;NVtS$)45NxB(WnlOe%$FB|6WXTR42(JE_rKOSWu3f;m!1pdg~R2W}jLXJw<-XJd0 z?-`KT5UTY2GZW$`nW;3CEddL2Xp*Ez=Z?4l*BEw@zT`g_4MC9XZIE8NpA3KKCXc~T zd7t-OBY3c1*nn<>3pN~=7>ucM&q9L`7=+GCmYV_STVe3SJP-uS%rsFhcX-UpggiS9 zOF{oI9qZ{Z1VL~h4weS*ug?H-Abl2Kx&hg9pTQr3_!bI#84wSQ{$Gg@C<3kJ{|}6G z{IG#>k$g~*J4u&=AS_gIJ_-k>0tS$My%AfPASji8lJuhIK?Cpu$d?R&%>9tUXBgNW zSOwB4GX_nyly*H=1BrNJFu;^kSZ`!1sY&u$M)999_%nuEN!7S-@nJd*1yyiI#FYU` z#jm0QpsGQl!aLK6`oenJFF@ywuUQWnaflewRQ?8I;ylmw#-Mgo2$=Gz^Y|9y`S5-w zpBf&!rw|4PC=7TDr&ws7;VkP9D8N2m(Ze|E%Y_jIfgS=dD$Ea!0oa~7VFW`3fz~r_ zG@WGwU?u%Tb@)4s%)N2LzITn010={HL4xNqBi@ng1?zBufFPjXyI=%TdBn3EWN0Kr z)SjeVo!g6@x#xJ4%iI??>`5m8-kBRI_T=X>*)ZUJ`MJ()<^dq^!$RY*?<5IE3z_@l zh9|D*dj=gZFFqH5_P#9zQ}B@gT+p@K==QA3?GGmJ2jjCf7mUk=Y-gRDzmPrX_R1Z4 zozOF+hGy^gn{P70ngDDjS80t<=Roly;P`xy>#+QqwVY-xY#3(^hASV@Is;sxc2=Rxpr!2((5%k)_GCVtcDV*!_ zgWFSOJsrn9$PW8I7Eg-CS;Mbc{}7O~cvx^YEF&!b0RzlfMp-Bg5&j1ZH$?HZdE7BE zJT8XMi{T5@cugbOmD-#~W(VJfJeY%L;wSdWWCQL?tMW$SXa{x&$T7(<3~y<^cjmX2 zZF$ki)Q#M>yf$!Lp2|CE^!+%`Xf*P7MB%S>@Z>shB!a{A~jcEv$2e4`XQJybMvOj|C>9_Kv z`h9NL(YJ|w@K^K55|%8?+%|6{8GcFd)7iXd77JS|zW7^Gv8`UN>^6}dFQ!w~p`ExJmK3d@FYk8^$-w zU|@n8CX%svRkt~TtolOk2^CmE{$|+tgsEkM-S?7M=;VCx*F2}nhAagv_!fpUU5Pm#CN8ETWMu} z${v~6S>O-hnu7Dy)%U2gN zKDL2HIDWxRjKHqwZ@g!$wvc-rNK_XBIvi$9D;;JU`s8pv#>%9 z55YSmSTB~t5tM)zF5nuiuw*YUA3nRe5DX6V*@(D|hrYyHH*!7}|FMjmjlEgO!6h7J zdU`2;PoXmc9)CWyqW>@)X}t#Zjtp6jv%IemzgK7(Vw1TCS)?M~ z2rsv{((*hjnz0vP+ZtGTg$+R=;!y+5#?qO@8XyvhfREw1QrKhM&y2BS&!ziczBnL2 zhTC_zknl%X%QSJv*~&TI-YWz|{9Jks(7h)o2aa7Vrkok&L1u^@zUnLFUSQo5zbNE} z*f#DMdtZe5^l;&g0A!wLA9B2U>2(wLBFOJ`6E>O^v#HrAIoT`6ZD#IOw$$L z5c4U_&Q$zz!OaPv#4rv>gZLj6F{jva>qR%2r-v*rvX)m_(@~qj&2q0mt6I%NmXoY1 zmBlk!d}k5KPiH4g)(GN#mR~H5B^T2r^DLjVged#x5KP;<>UPPM^G(87w%?8cA=H0;n z?Dr&+h4yqo5s-3w3W}z1QBlC`x^l1|-&zE_X`h)#Vax?gFR_wDSnn~NMN<*~q#`C! z4%60#qN#xHsKz*Rz{3^EJvBux*mCiYPHHq$0*i@|-S8a({ZdNaz0al_IHzf1_wY zX*pIFJ7=-RF&m8!L6nDiR9VcYIKmuqL>}?P6{}JaCvm(AF;jxW6?qgQ;5x$G&PeBt z-LwEdV=$GLe9fu^J&L;95=?qFRyvG{eXNN5BvI41W$np!YCeN`jt$`snOt1#gDS<%?!;!ha zIKT{*yDB{=i~I5Q3)IOtWxnV>GWo2l)O^Hzgpn(OGtu}@)tl~$Q^g^iQvy3l3&H_h zE=~uYKNp)sUST#I0w2sjwXafTU+7boRI03-Jeegy@EM5D0ef^eEtm{_Fa+k_@+fP0 zjE&BaB1QZ{DSoxYms0|nQ-K;dnjjO-w@L=UcYU%1c93Tl*QjC;sK%2eFZ;HZX!&oK zkn`uKO2|ld5U0j$p6F>H9FU5-N`M3uYjiz5^DDptC61Og`VN)w50rpAFNmJd*wj2NPZDYVlEq>@0a!QSXBj{yP4lfNWlC=amR6MF>O9Yi zQkWj=3aLA^7Ccl=It2Z!j=`-*Z?=iGGN-C zOYae-c3Uaf)*k5NQVE zjOcI1?*qbdo9u*VcNr)Gak%r@ z!%r|5Y-98ETp{}eb5V>9vxj|IWyJHns{7E!TgwJYk4L1_)-rr+nfsEZ44+^O_ky#P zjbF(HjxA#>5OMpO%Ycr{4Ljr?+9u}dMJ~cnGg0Cqb`ICWhJZSV_%)U(6#XXuDBJ*o zT|Ky4CHfB2cb922uxqLXC(aMcU2Z`+bQck?0aqZ{$RpU`p%L$ch;HoDhPjpYC??!`efV;1A#~CwW&G9+B<$Z17SW{(LPBWaLRb%s zveCIN+Bx72Ko`L};mbh{^D1!v9L({Yo+=H1uWVaBLE53`2aMLyPd6!Xq>rk zJ(rJ17L5JVg02mPs=F*?aGLI5wPYHBZHDuL>2|iTuu%1gMcV-TYs`K&5lRk|U33ueRWCk$<@-+2VIa9&yeeJCtuE zwKdow8ya0V{9lXur#{Vq~Jk}9QY3dN#WDHW$c z3aKKFN~DshYi=!)ON;*tp9*qO8Krzv@L%5I$NtMH{7)h97;ojR|G$}?MT@_BNac)L zg70UU1`^`CSfz4Z&mOwH7Y1kVAlyDC7p{BvbkptK^q%gn?%jRuJ9fau<+jG=s+QKJ z%_T}@Q}hEUf>hT4u+^*KB6jcYKFC6RTrt!Mce}w_;)lTc3HZA#Y`S_Q%8Bo?V;5;7 z{}2n8k-yUh zGcDc(uWnv^H~ztO?@4z|Keq0z)mzR!w(h;58_p)I0|++|5A)9Ba;5ScNd9f$zhtbg z;ji=c@AM>v;6s7`(GOe_{~z(FKHn}e$79`k71|*w79*eSkZ@uovP0q^5pI5bDwIy5h6?{L4-(0CqdLj z5tG6*7s)-S(`6CvQ}g=M@o-;mMk%HiK}w?z3135L_!`RkD2nuJC^vl#<-lAmqK4Dr z^A`#YA3!c$(^}WqK+}JbV=^g~WRR_BT)n!nt*)U4MpNVR>Z&y`_}c1VRFm%`VBD{w zp)eWcwM(0;+Q`s^&()OmOVZL8!kX7FZm}JB%tLj=-!2oVK0NXU^T5?x?CLi^+0mZQ%AtHE&o zEAjt_0N+&nYoqXyRB(ad(JvOk0>9S5r#UPO%E5bIWPru;Qx2?gayyWvD1o~k!LHmA z2eTfjG7}^Q1ZTNiRsz849k3)#KzMN;{1YD?A9ivtmPa1*TrJ{;t>QaG*0^E(Ge^jC zDBtY^B(k1`4OHJx9HGj701zq<*i`r0m^}!tobdUM5Y&a2Rr0{WYU$}zCLRq>dmPNh z1kC8kJ&r_}J(vPGJ{rq~oe2r^QaN6dF6ojmxv<%j4hM6V8Y|vViC=Q!KqVvIs$rB% z;n0n63J{9ivmq0kNlzv@2s0Ox@Ju8@^a+c+O@vJo6R&DVyPt z&2TqdqcPn}i6^ixSHcn3YPb}hy7G@z-V~T21k$qa{dL!UWP|)LBr#= z;Q0XFly3O3ZIWOaeq@7lL2}XuSoodnV$bg@g}}bIQ<&A#haw4QXDgivWTP4$XUuEx z9m1BLpdWT7$njzJ>{w|=G5*Mj>z#OUu~TBXpM~?8wlz@Oh4+344#Ex z@mmi#$?|UrfqX_F-#f>2R{*L2d-wO}<1NLcRz0~lAh}PXDlX^WPlL^0XcioXQXawS z_FyNs1vWAN(dj&BskL4>V5zf)e10eQ0A*Qhh2y{5;jEC^6Fpeu;S5n5qgud1t>aMV zD3ceX`W8zVZe`gL<`$MML%}Yd5{SXLDaaad)=DM_U^^JGz5)-wWoLYp7!oO;sUkPtGhOJcEg9>(MLfq-O}6Hxw8|pH}!P)wReGYw1tK*t@?Vq zHj(egchf!HbXVVQ8b0&_)7QGS^DA14FUstuZ*JeQr+p)QVb<5%-T^3`n|eE;Pc zz3`d(rk-7cy!}K6)p7yhc8B+t^8RyFds%z2vJlXw=3%yZ~_$% z!l!V(J4xnF_)2Zh&LV=eX-5zFrVXUkx3#Mm_;2s+>+0NHM9{>q-M%Wlv%R|;zHld` zz7#jqNGjjm-qrD?u)h+r$a&|$rp{e`@U0zuI}f6P0{y*ReSOer?R)yR_Vjk`jY?>9 zZ_myzB?K)a4;&m~3?CC7j)o-muO2ZAix0`eSn)R%xu(Xi7x|(lK!9kpN)o-634-$% zIRGJqqyHlMT$#Co(F#Z@Qdle<#kv+v#D!|aw-|`{*N_%V&K3Ux98G?i^R?z&10@W@ zLm*!;@ULr_qpbiW5m_t{MURpZp%9&`=F6I*xg;6Q5sN={_Gv{@k{JD~0apA~6cGVP zh(x{&|JRrMnD{BPB&5hFF*G-s{jB1 diff --git a/software/CPM/CPM31_WORDSTAR_v330/WSkayproii.COM b/software/CPM/CPM31_WORDSTAR_v330/WSkayproii.COM deleted file mode 100644 index e0d1757a91e5dd7ed45d797c01cadf50a2cd7ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17664 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 z 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 Xr>ha02BqiU(P|(;R22PBx{2~{EX+3X diff --git a/software/CPM/CPM31_WORDSTAR_v330/WSosborne1.COM b/software/CPM/CPM31_WORDSTAR_v330/WSosborne1.COM deleted file mode 100644 index a3956a97e240916e27ca9c012e1116878b05cc22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17664 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 diff --git a/software/CPM/CPM31_WORDSTAR_v330/WStelevideo950.COM b/software/CPM/CPM31_WORDSTAR_v330/WStelevideo950.COM deleted file mode 100644 index 6ab5c9f2012c77ea5714758aeb30b2465cdd9cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17664 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�R+e>u9*GlmD^HU{wCOffFW3f#1 z)ME;8MO`J(1QcskzycwTmNoefmk1A*fH^NpmeAzne$NOsX4eIoCv!!lC>4lI zY17rFn0T%Xtu6(PF+K5i$)u1~N}XY0!~H=?B{t)(>c5=;?n!Ly!V0@2k54GoYc+=X zyx-Y}G{TdZn?GlfR8Ii*4d@vLka5?1t4f*DZvaWFN>Ozlzp510iT+J!@r@V-5Wy2A zBAFR|SRi3@ok5Cw%W?irW+?`8{PI2-x7xXOBF=T(FNVFmQ$J6U;>^ zHq0LJWtCye_p1H_yI?CDC_NF8&)CY)H_AMhtYzpVW4sTHt!(siE>LV8W1$g`uc-{$ zaeKf+{(*gBfkC1o3^ijRE@J0#c{T*C1B+i}nL^2K@{hs|An@wJ-73j;n7OA+s|ByA z4vaWIYCs1i;3~iv(7F!r`$74G1*CW7zk4_zpB&)>iUI40O9g2rm(aPvhYv?4 zS}izYXEMA7?77!!@$Ek+v68qIZo|eePDr4)x8K?cmpREYwt^^$A>?Ij0uc+>z{^BWFr z#xBI=W6Id#`S(^_9^edIa>wtk`TE_senPI6Ye*uNh?SFZDncb!#gU0*GI`ytMSN-T z|KL-BFDer$e<}EH@9|^*?JfLoY2Y!zCfNRe6FWyN{o=uuGa4CsfMx1&i0)?9>J2@6 z>GocjoV|l^`xsxi?%mr>w|CQfySuvg^tJEW1s9jw8k(w_Tb4JKsMU?p51=qoZ9Tx& zt%Hl$y?go~ixA?9p-#Bl4cZbt4BAgb-(W!!;zR8YVq)o!ZEL=wZ3y)f@Zd<*) zgO4R5a7HuczscZY7AO4tApZXh1koyV1G^5L zz$Nkj6%X~bm6{0IgKV*H<^=8Ud?u-SU;v#IJ)U*KMHNR#(^4Ee-3cAShAagYq}wo5#m) z6#wfJ+WcSB2WB;NhQ>UoZ)m%oayr^SoEz+LR!e4gXGauw(h>N^X@+7|wtV zKlRC+4t=lEc+`&FOYU@w#R$&RV|H}0()g_1V*J?`@Tcs?!*=66aE-=%A1R%{zElZE zTCE5*S6w^EpO@`ob{Q*)KB1nj7W#})G`e21{DC+G*y1U^2@o*OI8 zC`KQ;P@M}cEq2MQ53q1P^Onr|5L;<|1b*LRQLl?TVLy{;=IyV#bZv6$F7QV;D5==(|>;{FU#rT*fW#$L2$lw$NOW%CZg|~mpFyvDV`PMn6 zy8=)}@ZCRt8Et! zT5D|~pWnqjNLrWL;P~$jI4flKMh_MRI78IMP>WcobsXv(W%6REudtZl7M3kxZe!U} zE=6Yj1}pwRMYnA4+C%T@+1l5S&7JM=(bne9&Tjbpy60B-Lc4>$d2jEYz3tt7*aT{) z*L7{_?1m4$qmPPSzOA>jb9X0XZ|UjoYwrT%Xd4Y*TJ`mIZNcA<@1c9T>8`##G<@g< zs;^~x=NE0MJ}rx%iL#U=N`VIN!K_Fg5Z|&^p?1j(NxAfdR*xR*jdmp{4 zy&p)d?W1?Y$7}dQx6Pe6w+ooi(~G}qgHCPUi$6nG0VPoJAbbkfyBlZjhOgB2?k>Ve zTXyx}Z`y!cecQWwf&TX1zOK$aMHo%`+U<+dyW6|F;R|=%)HQZPjkxkX?Oh$$nEeHl zCCWPowshXy2jANDZHIDQP@uoJtFI3Rt$lCb_MYCZeNhf=?d{opjYH5g{J_B>Lhv!+ zk!XlxfA&aONP2J{LaM*1$aOV-xya`=0Rlv$RpRLNL|~jh$pHv%IQlQ4&zG4m7_9)8 z!iA;MQLO9HBwVOQdP{+Xe_hj3$@$`+gQLl7IbZ6|bx=$&JQ(sh0e@b@eA_BOl8~hW zQS@jt5)`8I)m*D7nv0Xs9I5zIQ%|dslBDQg4Up=uqDTnPgw)8j@c(?dznO!;pZRgS z#!AerznMXJ=L1OC=(a0%%zN{tkks*uS0o2iLnLq*qBgS!<4{HLptx(21^ R-_dFyfkl+~pL7%D-vAC7Gr9l( diff --git a/software/CPM/CPM31_WORDSTAR_v330/ws3.hex b/software/CPM/CPM31_WORDSTAR_v330/ws3.hex deleted file mode 100644 index 6eccd6716a585fa85fdb0f8c09bb18d61575ac47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmc&yOK#;b4C}f;FEFQ&M1PX*Y}va1k%mh0fX*xmbX6|`>qClS{3#F>9*0P2fsgl3 zbupNT9yKdJIF32R{2&SOcEO>u&N3gCJ6iul{$)bVZWN$p52GayS}NhV6JPrj>&sWL2^-UwG|}#_OgWy+ zn%z_;x@u~6+c`G*)0ssw%Yw2@v(4HN+taMG%};E7sIlv$5)Oe&i&#yDlx5N8%jQUP zEowi!MBz=nVcejowPPUFuIZ*+%+T1ct#b2GHYIe@xy9<1}- z`}w^j0q}Cj%S{E8o9)Nz)5GHqGdaiY-Fls+NfI|=)#0yuHiW%ZpRLc*cz*OV-_Ma_ z*Afo-TX3Fw9F0Y}T~_(3SS_F&q#44bobVI#LR&y|9j38^B}ev5O%Z>H&|jBF)schH z4gBTtop)~>DxpWwp%($#c+`}omIiB@QBni;(kSPxsz=YQ(o6}_VqXCF=#(VwcrY?7 sGP1N6CqgacX&jcq%2u73&Jh$lh|yY36ffR4Upfk5bQjq2_0|9C8>TsD-2eap diff --git a/software/CPM/CPM32_ZCPR3/!NZ-COM b/software/CPM/CPM32_ZCPR3/!NZ-COM deleted file mode 100755 index e69de29..0000000 diff --git a/software/CPM/CPM32_ZCPR3/!VERS--1.2H b/software/CPM/CPM32_ZCPR3/!VERS--1.2H deleted file mode 100755 index e69de29..0000000 diff --git a/software/CPM/CPM32_ZCPR3/ALIAS.CMD b/software/CPM/CPM32_ZCPR3/ALIAS.CMD deleted file mode 100755 index 936006c3ceac0f42cdcad046847b0f88fa8651c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 zcmb7GQE%He5ZG_;479)B;UY^nH zN1yP zR>99&+$en&lHQb(g!9rWckKv?SL~|JB3_)lZu0P1x82mfOkU@sKZL( zG5-R7(#l#8@RBmCZscp6Zjt_S-9RQ&12Vn22Ac@Zl#HFo`=nN=1nIE#fRtzO@+Jrr zMu~84jm==8Tbbtp5RN!rjF$W#$xL~jS!z9mhFU%PN%$eO4g4|ZB7b>Sqd8M>wS_AaYC(r4{3h?CW(h9qIiR1&g zN~d{+5;?f{U#EU4sjNKC1mVG>2Y*0)ELd!F{ zG{zIR5@(`xrqFgMFG30-vHOFi6{wkjadNT5G^!3@F}$L4q(39kKIoF4sMV!>zn^oY z+nM{DHrDsy>ak&^zCs7;+}zT}RNM#hP847Qpfcih`*2!y`>?G>2APDcm&st8ndXA8 z*Ug6sl~P`RVdjfxuRND5s6QEGBBB_IuYV^%awUe^kDetH@Y zlW9EqFkVKY`y-Q77Ehf&&|0@P7D=ESxGXv9;rwDYJlld5;vdcrV2h&ERvPN}KtIt7 zh8g1uFNLzuvRcm(XCs4r2T2Ep4oU#RZcHPUSnEttQ)h5ARHIS(9IV&G08!p?&6VtE zJ{n%k@zQ~$PY1J;$#^yj0m6R36A>uU73#4s)3pf~+WVQv?Y#|xcZ8=_hteYB-lpG6 zVet>0b$>QHawq#uw6cdx`&_BbvAt-e`Y_=T2!Y*uTWR=v*6Kc^y|>~@DE$lGY4HEQ z0b<;(EM<_-#|Vi~id$epy?JpRKy^SJEg9fXpFP8r=0 zlpG+4XiHG<+XzBxUCuAW`j{aG>j6QWVlN5=b)omn(O+B%Z;V_ALB*SEm)}4om6cZ;{iczlw{>fThJsqJicaST-U@M#gTQlK8ir)BJd5geFuf`}oer;q zl*SnKgoR;oHi>Z=O(rqlhP#l1!!Fn9{KUIHoDPrUa6!<=2>LiIxx HzViDU;U_LZ diff --git a/software/CPM/CPM32_ZCPR3/ARUNZ.COM b/software/CPM/CPM32_ZCPR3/ARUNZ.COM deleted file mode 100755 index 041b87c48c2a6db0dda07772f9e59ca21ede3f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6272 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 Q+6agcKQ{@(|Ci@~0QC0YJ^%m! diff --git a/software/CPM/CPM32_ZCPR3/BGZRDS19.LBR b/software/CPM/CPM32_ZCPR3/BGZRDS19.LBR deleted file mode 100755 index 5849efa9e13c050120bb23713fdccb82c10f0474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcma))&u*JQ5XOmGsWK8$&+TO%AVRatALB?pz%IC|np#SHsCuLJI;O#30gmMd$h8lU zmrZ8@n{sMLLhLfX`SzP-3>d;Nu8iN$#yFz+k2`tKW}oBlSH>IT<=r@Kobz%a-ctVK z`*HqtkcV-m+gaufLrnYx(F;B9x^Ch*9394EXNIHTK@U#}{#W?ChXW1!=maiGAw7<= zEoJDSKu^dxz-biq@a(Ki=}@90B!)wQMyVj|;gI0O$IhkJBb0~S>#fljk58Q*j;h}B;k&(83NCXAzVM(wC7(JYt(+0FtZAZ7u1syyi zcsS_8@F$if?9xXCPpYc3vH)f?2g(gZ^DKj7Sv|rrYqmf$u%IEhhIGHrPta@??9*no zC9WF}o94qZ4|P^NwAoFW=jBoFR^@J&7VG-PGA&b2!(IFhzAi!;&CwQ%+fUtEFDH{a zeNs^7>x-XXhq{5RfK^(nuKZT>y+B{v>Rg|#OxlJDb-ajBKf@u~#`5AntI6P@YE*sF yZHsiLD!K+yHdU7AHo$UA$R^9F;Y#h(O0D7N3BIH!xKAIHZJB>v=5Ve5z4`-1#JRr! diff --git a/software/CPM/CPM32_ZCPR3/CLEDINST.COM b/software/CPM/CPM32_ZCPR3/CLEDINST.COM deleted file mode 100755 index c26a3cf02c007453704ae76535470281de8a2ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4992 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 diff --git a/software/CPM/CPM32_ZCPR3/CONFIG.LBR b/software/CPM/CPM32_ZCPR3/CONFIG.LBR deleted file mode 100755 index 40d87ae7858ed9a02824c399830d1f8dbadadd9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21760 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 Z%86;CF_+8xK;7yGVvZl6uz$>t|2MR37UTc` diff --git a/software/CPM/CPM32_ZCPR3/COPY.COM b/software/CPM/CPM32_ZCPR3/COPY.COM deleted file mode 100755 index 734953d942cb00667b9d67907c1e57ae3e61ffe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6784 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 CyZn;? diff --git a/software/CPM/CPM32_ZCPR3/CPSET.COM b/software/CPM/CPM32_ZCPR3/CPSET.COM deleted file mode 100755 index 54462ce07c7142ebede288da11afb2f64f616813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2304 zcmcIkO>7&-6&{MzE{7FmQ?gUahMh;P5iJ=-q%6SQDuI$pqT~XOC|QEz`p{raE)^!^ zu1ZohSvhM2Na{l`Mv+6&AZdd*ITer#6kvfKT2+v%budAQf^G~qMp=VAl+l4mm>7vM z%FI#{5~n|>F2UKIneV;#&3oS){{eJvBsz1(i4by3%+5y_hDQJe5HdeLVg2R8T7i4^-eTnkdqu0M-MuVzm8Xr zzk$ia&e5y5bb~rWZ)1~&*$17FkJH&3Qyuga8v-vo*1Mcu4?rjsf^jtgliH6{aSi5| zw0J6+(h___M5HG8euZllhZ7aIu9Yj~F=w@0W3#Pmqp#!X(Kqm~dF+1C>zP>2W;Hzz zaYN4;X$=x;ULEBTE~FCq=Z3!epzWE=e6vA=J)T}Evbvz|Kj#F;z=W$Nop*S%Q-F4wk*k* z9r_2+dF1D(hnW~6anavhBQ95!$fDpXkb}b3%57}UTDOuM7s>!G+SMWJ)!LqY>pHIvVL=vZ#>z zBE$Clqyz_6%00c+{kN^aFP%&Yfi>s)&zym~eB4#Vf?>eZs$PUMYI>QK=mBZ$!nk;B z1VjrV*+sN>xx4Yy;*PFdE?zxbH(dLJa7N48mcv6M0BF?h2p|Vp7I>Oq zUdx9kQ@N$IT7-$Vyu!0PWt?O(a3CSo)2%=af3PQt0^ z%rtu~M9(gK)$jp@>=~Y#U-+gWOvO$=Jr#{kau2ho7a+q(p4aTELrTx(HI^SE3EY@T z0(P8pbWBedA(_hN@{rc@T$2o!X!oJ6W;96U+HT~5iGe{FI5hyw!NBZ5kXz63Nq7#_ z9Hdp|B9+%Nyp7^UCZp;JyRRT`EH0*5?GiiLV*%pNsrn*YiXnDilw>YM9r<}?l1XG& z1YpL{_2rC~O~rW-^?Z&uHg9NlB2XD;EuFAWqZ>Q^+WC{Up~ay==-*8>&qvt)4flh* z*Aa#u3Agv2~Z-2zRZGRyQ)G5;&V{7RB=6F0v$2ulz6SkueqJPU?n#c)g#8ME|W~ zxGp|1JqC>|{PkG%2q;B*QV!6w@(~)7!*ou5v_QvYg}mfej@Xuy@LkD&g8asPEdYLruF|B-Zn9o>+H!0ri^?zKy vMAZ-I%KPyK$5AQDl_X#9? diff --git a/software/CPM/CPM32_ZCPR3/CRUNCH.COM b/software/CPM/CPM32_ZCPR3/CRUNCH.COM deleted file mode 100755 index ac17854a43b5f18fd31cb46fe24d91aa08a24ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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

    VkVn3dKs%*a^AGIqucgT}rM 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 Ud)sXt%!<6D?Q`|&|6<}l0UO7S3IG5A diff --git a/software/CPM/CPM32_ZCPR3/FCP.LBR b/software/CPM/CPM32_ZCPR3/FCP.LBR deleted file mode 100755 index 8eb74a421d95b0bbf69d34932a36dbfa5a6df82d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10496 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 E7w(yGB>(^b diff --git a/software/CPM/CPM32_ZCPR3/FF.COM b/software/CPM/CPM32_ZCPR3/FF.COM deleted file mode 100755 index b68b2add4bfb0acd7a13a03599b9b9b1732c97d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 zcma(UZERcB^}VF=x1aAzD6(BB*M78mwj0;Dp?FV;)08GwzmhCzOV>0l&R6T=+QrT% zq;8qUm?lj^6Qk3H1_gd>lcvx?U1d`St9cb?u$ISVm#kjt*}VLw_dt`^#m9q5mKFo#0Qi*PdscT9#}v zOrI8ak`4pm4TZQDeM#P8$zTonOARS5BY&bMsKcFIxFZxEj^mE# zSY(Ki%&emGZ~^B=G@bO9F?*D3&=(%}BAI`g<+Ss4j8WG!{ODLH1}u9X?Cx22@9hYm z=U!f9l7$|76SA#G`~!#;ne|NJ70y8F7{%jfd|Iw?r2@c>vUeXMFPrS^5$V(mi5Bk` zMk+g#KZbN?7yOk*HtBB_Yy8-|9XUr3zlO2!dr+eA zLg5AC(YowA5RtTn-X27{wf1gAhPXl>;D$JRCz2~xcZ4EC6|=F}(c!@3ZtQh8VJr?t z4<8ARh6cjJcp@}<5bs&ny=`YNUX3?JB9733NmjorptC3G8gI*f7eRAe+bDPi2vf%`T|lycMN9;rV#66sq5kAAls z_YJw-{e5er@C2r=Bcq{cB#y-)2Obz6iN=O;JRFQ4l#DvSSw=+c@ zI5;vo9Q%%kk+vhH)%L1MthHS-k!eoahLW~BAX>IM1R#xHW5p@jUfhTosSUOTx{WK_ zh)ji8*B*<3EhFLJ0URG5#i0=#i7vTw=Xd^W$GCZ{8avY2eOPGP`*wL>-4qq+$YFVCZ zyU={$ZvTD{I|aN3RIIXBt$q6h3t-z)e3!xqQg9HYL$E`G5YQ=nI0$x4gu+8uw70o8 z+Hs>F+uNM(jZV7*RAJ^%u+FFHGs z)Q_4)T}v}{wSrnNUuYMv0}qrbS)~&HNw%oO_nbatmynHN?9FJ#y9u?(0dhqp-bLQk zrxM9j%NbF{*E1IL^&GEbEPniK7XSN3S(f&pB#6gcmy>1OD^@Zjp_)FO0@VHt$3go^ zH>bFJU=`q(@NP!H^D)1d@we6kvN_daJIe`ibO^k0Y-D6O7N;2tQo)aQ5z)Y` zrqbF==dl7=8{c1|dqy!Ib8MP8h@YH2e`Nn0Rex1uwbK~>z>+uaflMTYUd z2U~&z(by=|_>P@Doh?U#2ZsBhj0xA}H$sy7u?oY2zM3Loje@ZXM6{UM8Ms#b#`*Q8 z(&9ZzEmVwIR4H)96y^D!vXUPq--1(D(lGU-^KIVeG;kF320(LYkvK(e>MrM0H8eIxc=uTZbR7W9XUUYl%Rt`Io%P%g z#?8oCb0diSZAIj}dJ*RZYf`i}G~_^a>p8p(Qu>Q@R@CQN1e%&Zf?8T(1x|Pj0Q&;V z@CndRvMnF;YAz|yJs@B5Tvl|g&}sI68(RNGMe@`s z_~MNGraV(my_RRO{!syaJu@MI{~r}pwG#m4!R!(_q~}%4{4M>`yN9vt2B?&w)6sp5 zC0zt6-p$Nk0}2?IV9oG$26inponK4S?Zyh)K7^pNipycF;mJw;QgbbK2%WAQWlARq zg}xyK9w1Mds!k|@&oh+i3NU?e1_GFHofXrSu3X6Q%b9rwx&l?j!B`+Gt?6u11`sAy z){4^(94&1&fL z{5Ky{TkRuAh91S&!hNu(a1yI?6g#f6xVb4Czc6Z*+h__M725XzBSF58lxlV^ayd{a}>8z%xfk?8)jSKWZY#=9$g{=`}Hqz?( z)R=cUv}_GyExh2G5U%~oD1-QX#w)P;7;x&TA%9|!x#;aUqL_|)+I1Bmjl{!3iUTgcyxo)5_*M)S2&CdXMw zk}It&a~RgHVjv6IQ9Alkbo#{u^ySs)^k3oSDvYUD<%JT*Bm`(x#W`8giYpAzuoa_t z4JufxsKq)(gRdBkw-TKBy{WZ}>ZK-bK)1|tW&vh~IY`%1_2$t5Yf)bC*OFhGpu+t% z3-o2}A}cRsO0;zDGc}+u{cc!QwM$SDGGakh&XraVk>#eozy;XJj)H|1hdUOc7*FDs8C3TI8ZnJqZ;S zy-LgPl!-4hmP6po$B?!iruz2D;NU10VM3=9aAoEl4914wlg9ybZiQrLygDA=zWD=l pF(vN?iJej09XtR6s^HRl`y{hDQuzWlF!SpF`9b^x-^l+T>c8B@oI?Nr diff --git a/software/CPM/CPM32_ZCPR3/HELP.COM b/software/CPM/CPM32_ZCPR3/HELP.COM deleted file mode 100755 index 58b4d6fc2a58117b55d94fa93f60be9b8aaec037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4736 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 HzhL}dYo%lM diff --git a/software/CPM/CPM32_ZCPR3/HLPFILES.LBR b/software/CPM/CPM32_ZCPR3/HLPFILES.LBR deleted file mode 100755 index 32200cdd4f4b5cfe8d52426f551523d29cc4f828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 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 A)c^nh diff --git a/software/CPM/CPM32_ZCPR3/IF.COM b/software/CPM/CPM32_ZCPR3/IF.COM deleted file mode 100755 index c51cd0bd70c2d5cb0d95eac09ad1f0934fa9ceb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 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 MV%YdJ`u}PEUz*&-NdN!< diff --git a/software/CPM/CPM32_ZCPR3/JETLDR.COM b/software/CPM/CPM32_ZCPR3/JETLDR.COM deleted file mode 100755 index c33c0738f7b6621c96c3337f82d2ea39ccffd573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9088 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 diff --git a/software/CPM/CPM32_ZCPR3/LBREXT.COM b/software/CPM/CPM32_ZCPR3/LBREXT.COM deleted file mode 100755 index 591922b79a58a0cc1088635accc216c5a539fc98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 diff --git a/software/CPM/CPM32_ZCPR3/LBRHELP.COM b/software/CPM/CPM32_ZCPR3/LBRHELP.COM deleted file mode 100755 index eb1ef6ee7e2f706fdf8dc9f75cb6865155714b1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 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 diff --git a/software/CPM/CPM32_ZCPR3/LPUT.COM b/software/CPM/CPM32_ZCPR3/LPUT.COM deleted file mode 100755 index 72716963647c51f1ec85376d12398d32f4cfa919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 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
    >GT>WQ>uvYFZV2oJ}Y5FdGxM zi@5^uTihv0G{_-YC@;H{)A!^a^aYH84fq zbl|m|FJ~Vl;PT}c$NV_tB~Qz zC)IMdR6zu%v`XF_02I&!QaV=z+6v-wO5Qkx>I`oW!(oA+@oBnmo1>sTo>x?RA56B- zpSz^wQuZoP>7fL^;cyYRt||IkO~uc(3Y^#bOWy9MOK`BexLI<&DDS{_-!FMNV32Px z$Tu2fW(bHNb!6@q?+|kbUNA6>^d;d(4}nGh%J6c93YsNJ2R67U7Rn`~k<*ZDsDlFG z-yC-rSG`8pu6d6xR!HUViEZ5b=)ElY3+L|6!(n)Iu>%Y&`Y)oxFiK}9#W8@ksy(hf z9#*>a`q?uI z8*ftrS)RPk+N;TieKpL_on+Y$N-I?Yoi5UBw=hHZIsSOx zBKPlx4_L^q7H~x2*F4y=07Ur&w%Y|DOkjb0mwlG2rl-t9chc^q(*<&p%>zAN)uzN1 zIBTw)fuZTX_}4_ovH~n%PRCJe^;7~^9(Vy)6v$g_zDPu z<94~H-&zPRcskFXF6*3D7(ozj-?Hu2HJdly&ip?=)pw2a(2MgbVVFZNDyugGFv^*t z7ndIb>(h@Cs`nZv_g{(ml!+-@G<*hMm`W-s)1|UStN-F@Yu6Oj@t2d-`AE#E@8?rVGvv3#G=N|8HXkTLl9g*^3Xa=1p?t8EQ=!Y-<&K9b=UH@2EP%k<%O0<(%vJIVT**1zmJ zeB{Vik9;}ex*op|pLg(QxA{Vzgw`Q7k-w|?Nvn_iu;!)Kdf$-e(2Ei+qtHT3V%a8m zg@r0cW*=#9z{~!!IB4zMC3+-Rfb-)uQeGA55YYacV!dSOgrninQ)Hq961v&Eplyok@nm7gkcCsmzlz?FLev~ehH zzE`(bG#Mvhq{5}CkysNmm#N8RSa>5#)nwRuX6_grHkF26rgRUJF8m3qDt0YhA~Q85 z*j4y10_rksEi?Cvni8=A#nRb?0t1wvq=mGu3NxZXDW)cX37`TX05>&smJ2p0OyQL; zPvcer(53a5m;*=s1{Ew*$iU_m9a`C&8OlTDDtrcp{p7bOomad=9tC`aH8M!P3*Nvg za%699R$A>dF>?90y5vibcEbE~;4Hr$sfEH57L!<0!JiCe4Et~`uRSsAdVjK(J%0(Q zf(MNBud`z8Wrco<1fM9_uLGYGMRwRjqn!3QobS@QBObBT+3U%JgD5E=)Sc7szsc@_ z9jY(lf#93rSDW3f2ICj$OS<{MwfLj7i+evE-W?qFEE=Vi`|Jps zUG`?$H41w?CSzh@b)(~=4S(bdd$>1q-u)gsqe8x%PMOTl3^n-8vg4T{S@==J@%yA2 ztslQ$titbtBLazc!ULU5s-X2ucudUGUB3MuOYC31Sbw+HJ>kjg?>G}4C8d9hnexCj zw5?MfFa?B+OfGe&9YePHlHCq%G7GwfNs#YtcVYDr;1=}(I&lL zv`UsDq{gBd|H@{&@UWZv+4Q=lindM}14WhN0;k9ZDpDmhnZho4703iI&ZNMg^qOFe zF6ipzK|!{`CfN!NRbs(pCbgX03`3I>_3deB zWgA-UsI{`8)of`kSFX~fI@h=|`WQy|9QR>i z=|0I(yiclvPu=FCxwWEb_Z#y+Rq_c1#P5Bpc<}7fE(IJCKDDi47VBO)JEZ)1#`|Bn C+h3^w diff --git a/software/CPM/CPM32_ZCPR3/LSH-HELP.COM b/software/CPM/CPM32_ZCPR3/LSH-HELP.COM deleted file mode 100755 index 0103795b124a765959549fafd5e8ec58330fa40e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 zcmZuze{3699ltyO=-ID!;~9msLDOr!mcw0|UlT)FmMwLhEQ({NcDkxfr|O#AoLlU> za6UIl7rYkA=q6Nw5dRHv{f9rMvM`A%h#yt5G$C$t8m*KG5E(PYnOHDd%G?DyE`0B7 zhi=-*dhdO{zrWx2eeZdpjy%yCjy_A0L?p3{aNBc)-gsloTFQthIEp;&gzw)$2dUZ6 zJ_mWD-Kq^awLj8Y*%`>`U;NWei+09x<3o$*U)#QYFQB65hlDRz&|iNGNDYKL<9sq$Jdh1TC=pVH5b zwSXvS<;#!`O?QP?Hml2UVxhJi?0l=b4Bf6Q-mOd*E0emJFB;V#3CN;nZ@q1nrE`JV zyXUF8E$xa$dz&ugi;HdFrI)B=sqbal{^gnTb^l$mN!mk>`9dC)+}pd~@iyIG^7fQM zFVlJLI<>IhdWbqu4-&x_kmn)72M*%=uq2NN;``cwMN3%%K9{|DSbYjw|>==(b#VOp! zPvM3JN?rJ|Q4g21W*&O}G;Y8lDV^rT5mT&7$c(4BDg3-78^_{N{46hL1W7c{hs%i* zQ=-C6w&7Zc;3^_XW0{%)9f3nEVQX-S?sDb)w1P=6#+KQOja3%G{X+o^ZAA|PB56GMN0ehx=SR84@35AoD ziay|~!3s86CPf8TiD8+C?XO_d)&D7Kw;)5S>=4w5(N#MTt6hAGS9olu1r}`>YHIdpsz?c3|Hcge63ql^E4~a>D72ExG{EymnURFDIOKagj5QfW}$=B zqvD8!P3sV%m@I}QQIVyT*>;A%5S$Yko9?;|e4G=wpJ5ct6s!J^-~-rD zy}N^}@l@;`sURc%?08BT=AcAo5Na$nQdw0lA9YYlCZT1!1eu5Kl>P}97zeJR{G?*~ z>&!wNrmD&LM^(OZ`+)r;SpoKAlm{K-tJ&+9M$C>=k8yGuAC{zAzg0vBxNN4vAFMj! zGmUsqNEhS$I1jhSpfm<85x{DKSMWf}=-+-$9>Z#n1iVUk2BBI%V+ltV{KH0#n;jA5 z(%?ZgPCaJhSrLcQBVWbpQMiop0H?scYsO0uM0x!shAbCX7f-qEnvIyhRe;B0bdk-ik0Re1WCr#Kkfr8U$L8ptWrJ)>R?8bZ!EiOzt%GzIO!$N83TZq|R)=E`$ z!Q>W$lc+6=R*%6&ZPV(V_qGk|!B-LUcW_!7I*a_XEYi+9+Rh;DE5NRL*B)~)ckO!) z5bL{QrJ+k`<)p)V)A#33k8KLNnVe(X=IqB-^%u#!n$*7Gm@6=|rupv~=C5eqb}&EL z-{AMcwZ5N4`bkXrz1k(3DZ%s{(!1D*-ol3TR`v<~5PMKR$OiQec%9?y9=(^{rAP7Y z8RqRr9%X*}%~X>4rQiFTCX4?<(#!m8nz8u37r+$HTy~Spu4x!(H!*D=(LQn5oiHpl zG4HL`H-7&MO`n|WIjc8e>&;H6#3kBIPTtBxRdxrAcya+Fo)6E?E|(XJvEb`y`l{W^ zqE*j9!gmX#$eu;5-#PEXTZQ?}yq0jnx#Pn3q4wo{h5~E#oP+;D<7g4qT{(U4 z*PkkST=15($S9C&$ryuzJT}7T$s*E1lzwh^Ykvbvg*F+*93|CmH6iH&*8C=Hl-=Ta z*SR-~zD5M6%Xn8&djb{MhvA9tu>C03vHe;P(BJeB#9tprizag(mo}!a=1D8z yIgb3L%X8ijI+15<+qbdzOOV#D=K{H3<&8g;>o4itAM_W0zkVuz1woI0&i6lM#oaCd diff --git a/software/CPM/CPM32_ZCPR3/LSH.COM b/software/CPM/CPM32_ZCPR3/LSH.COM deleted file mode 100755 index 6ec314f7d58150cf89d52576f33c489a57366988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 zcmb7pdwdhumH!=SB+uBAJR`~WNMJG2C}nE%Fiz_@0xPz0F%Be7A&+K(5V|}hRc4AGVY3_SfxiOWV!1&1P3*3l*d(!3cxK<~C7VQ%FM-l@$pnN}>i4LlSwv zS0??n{qHy6(Y@!Kd+xdCp4Yu|O0E67n?HBwz5Ip18>DV0$&AMfmW*6RJgKmGY{6J< zi+ar?KS4a<=rcX}RA#)O@-oMHvfBr@eW$^6*Zp-?l2=W0$T?^l&O83&hjJr!(hLRp-w82|0i3``6}+KCbt9 z-BmGG(O|k)8#6Un&ZRw>b2lrO&R_e`Q18C~uFov(Sf<{)Zi_l^PQza_{r~8ldXX!w z->lY>mZi&+73$>VB*vHiCMQD@vGSz6df^=%A#TyM3R$uXF5aS8x$+agahhwqWi#9< z&$-_@s;kClzwpEV`1wzdm@2QBUf{Prw$erRsX96Ut4(I)K; zp{2_g&tCkwrFW5AZ=I(uo1-q;vT@z|b(_~dd(ZM^;lI_>-!5qZh@jwz7T24LbJY(b z#fAD@db1TwXECKb3a!jj?d9t7zArzvrZ=Plp|056vtj+l&FfaFE9NddZ!|vS%RRc% zH*ck{PUPtNn#PSjx~BG~z=OWr3ZF0Lbmf+B(sIiJ>wWZB(<5ihjbHR>k;cFGoiY0Z z+|dSZE4^uYA+~_do1Q;$*rZ!S5BcJH8{NRuH_bDeZ=cb8+l=OWXT0_=mKm@8jQ4L2 zM2hqE>bUNr4@_6xbdGi5QnmZuMN9Y7cP!`;CCM15&M*PT-1e0|1JJt{w%zp-{nu&A zC3LWa<#)F&98+F9MJsE!pHZ7H=T>ae#_7wR-ji)kS08m-!y%`O{&Bj-2_$zQ=1kMk zY3d38D#BHe@NK#0RXfd3ZxX_e#-~k*pYr~dB+~eRub@SWs%|RIJx$H|xGK=MJbZ8C zN+Pc#-lBT?59ZKD(zx13e`HbH>FbuzYG30<5_$mAR$y-WOEbgh^nhj5X~C}0L~X_z zZSrc;hv|^Ybvmj>=zmy-ft0S&7cDfvXE8BngM?t^q%OW`Qfr!|^Z48fm3x%_$V^X6 zKSo>d_kqWtwR|YRZH@UA&RRBRt*Mu;7wAkrztw;!y$c{_AEbeJ23xmPkXMn&#V4Ga zOPcV{~IKYvIh5wJDDw z+lg{TmWcAMJcB5gVi(RF{gAro?FI@A-8<3FSqPfvqj5z=%0A- zOpCb{U-D&v#|jmho1CnNeju7=hHO_1$Q-U>qCv1x?9Lo(N7wQt>Y{s=p2lqSRtwxp z-A@~;*~H=5x+z?r;H)qa`s#GOa)kba4Y&U(W2Au87AKS8V(>k^7%YEvSb$#mW+573K8n}c}V1y^JA1eu6 zTa)i+5kB(7f_PNgqC!9azJPpo#B0L%kqR1^Q)@)w&cWERKR;Jgn=QpBUVTJ3cX7tgfoUTC*&KHZfu~pd zg)+t$b3Nn=Hx2IT7Vp#+jhr*WQKdY*U$KUdDW>onjUiWF`Nzw zbeot+meH4lV~HLy5+Cgm=?i7L1pwtLUMwt47=3a5cXV4>lJ!2Q2Z5%(XJkeYKqCIN zT<&@7Z0`}>hY-8?3)RHaH$-n0n{B=4a!bDG8$5R(O$muV*kV9;zd+x$B|o2-CDO}M z?8xXP5p2=yJu=!*PGtdzCek~Yv?N=S3t$;{uhP1$h#$-@=rjM15+bHBBgGKqPZ-Z4 z`?0wGOV)o6eL7y**4wx#Kvz^G4%LKQ+}uVNXJGFx&Hz>bAg+3Qiyt@hgQHh$!q(FE z-{HoBdyl-r8^FBMJE*@&4+uAK_qgdSkx#rNjEqAd@$Oaixx=Yp&4|R4h0=0=n-cPx zEn&BZzUbR^#&=(48GSFm=>9s6(Xgjq~HRzW*NruKV9`a!u$6F;`G=FAH9IE5o@*Yp>ZL-e0Z z_%=~F%XIkfBK~LS@rty;_YNiw2z_z&HTrWg(ZA_ z<bPr~uE<%M~4Wq!LC2gPO}nJH!IrA;O*V-6K%saN@URC9;W%Y#Pp+oIN`e+7x)Q z*qItfx9lBm~v8yC13#}1K6dZ-4Csc@4RwT+B}tds?GPj1P4S6_=R zAJ!dwZsB|v2J2-QaxgV)SQsFt6iW1=1+KV$xdm*oXUchSkT(aoNtSJ4EFwg;K{YQidl2+aBP85Vv*EXI*!DRk#Uy5OO(2^zCM;=L&_LUxtc$yVd0aBq~-bq)_+BVsnUCFshBbH=jvzJ2t<&Qqgrm^ zF3pJ5p|b*=CA+jFbD1^F3lf)Xr7alf#B%8OY>8jl=pSpDKIkPIHH&HKJ%jCuf<3_& zbjC+ccx}UcjHYai8nyt}N|wd2FF+SEbGVb{4fO4rblxar`i6RD0jj(WUqmP>gzbvC z5H3UJ${Sd$+F&}_T3mCsxc!xjtBnHseEwu>A&>Zg1R5@PI?9n3{X5A6)dU5_mNYB4 ztIjkuR~E|~D!RArxo^*&oxAQ+-l`_sjF5)HWTZ2^mU15H+Ay>Dd|jW$tZ&p-GV~u? zTSk9uEwFWZZ6ge^+cumZ(1lKzyDmuA*ixRg!a0-zv+(Ea@C^(G<&;0um+h*Jc?W)Z zw)^!F?cx))q9WE}#OlW)$BwGkpfD)|Gm6CZ^06Wa$BOid4ZaER)bKG-fne3?n`N`Q>&KvZ4PzUJ>Y zoku00*iaKNz@n{N)}BXQkXBlmaXjOoGb)uf6kc;1ok$=%Y<@RK4?C24M!a<6m)EJw z*FB=X9GSZ{j+k<@_0Cnu>-b%?=sffIrFQzNgKiWLCcbQAGTdyvdtL8iDjWD{Xg~GZ zJ45U^bGVuBMT+f4Egb7Cg@9BIDiNsM&vCFM-3(@pmPpw`pW-@08+~J|bs^SG->QbmVLa?OJew7N9~$&x%`q^8NuD&b$p?~WJDIf~ zs*xsO_~-qbeF{&1TA4f_A@St-41Gj6pFXc4tG;6?&T9@7Lk+$&4d*(cb^1S*@@AjT zvjm-OB5de60}=X)4H-OhF5OL!R>q7}Jn10yrSr}8OhmKMk1N#)=~CKmAfb)ml;r=) zR0YBGqe)D!pH~-dUbkk;s{M&K9P}yJ5g~z1GhjSxY_Y~(jTz=b>DO;K;-g!{#2HlA zn`YE)3Ve!ankU13Y(f}HH)t5)e|Ux`3)?G29$i3;VDT)UMVturYPYazvdoUz7X8EK z&8zm`avQVGgUbJ9{J$^#8lHd@wrR%WhmwG^R3v5*9}zicFp~uH+yU@_$g?D>N}*}& zRPdSaJP{7wg9D~VoCyxvZRplx46bG`VA7eEMYCFn%LMWr71j#+BDSSDvV&- z;ZTq}{M*-9?(!p;+{CR8&3FBxSpac<>~%$4u$9G}uTh(dXU*659rg(p1;GfN{1OE)(EEP&240*Z@Y`x+j{#r%Fo>L19FN{ zTb!pSoCP>t9z_!UZ#nU>jZTzh5V?C;p`A*fRo?|&-NQKa(LczcN3^lduzEZzA5Dhm z(5!4VN9c9AsGi8mnsf!bEr1t=Ue?%9%^>=?ZK5vOVz z`=lTE47({>t zZu-6(A^nr{#iptX_Ze5(wcGu;`)${C*Gl(;?)B~$s}{=NbpOolc2~G>atGWmyF1;t zxc}A7&KK{wHw!PgFIIhAb-v16{YI6o`VIH)s^{GQr)r>TXH^U%H&q>~V&{v0a=&X2 zRAl_!x*N4I zD~UI|k=OHy)h^aT7Px|6lom+V=s#yy{s$FtUjZH5$&4$VtdY2n5$6*tU0}s3O;92o z-Y&w~6Dz?_qL>9mFyOC=imQ~@*e-x#wgb5V*xSX-2z}5^XI5cQ-*9>`S)jjnSqB$B3DZ>dpNJW9_EyHLS7bOz}H+3KOf!YF5K|-_aPrxq`^YDIz`2*WKfoh zWaU?Mi#u_rJQZcOxc?kwP?3CAW>M%ZCRLBaXH}{}imaCiy8z1gt5~v2`y3FjR=v(P z1Dv+WAq8PW;aDf^LMMKrp_<)OoUKBp>Er8tji3 zJC6D9ug;A7cWZ`Yqr3+(S4|A(5@ zM1NYNo5qIg{vF{74a5KZpMfd=5zT6+KVSss`f%!wm+o1l>x#%in>U`6K0xrwgr3ss zzEhe6$>6)1Vr5C;d)i21nUbk{S_=(oOa@82}r>xw6fH|Z6{m8!|>f*zF|eu}nYhrYDfs4pzutj|Yi ztuNN=b;Yo*6qn)H-KCcm?^J&sQ(g|vQhvE(^9JRx*Y#q9+1tOtrTpjPirMSx2dj0; z4;-9Q_BdXGgFJ3sOV23Qa=cD9C~u5c&mC|#d=%~6R%}rDu{LNTU+ds{QIy7Yo5tjc zXiT2>w!w2pGTn8f+T(|;yk0Rb*W=R%sJPA%I@2?3S0~cLd4taOzy=(y3m5DNXZQ*d zU;}iX-LeI~u8pAG5h?ncZ_D7$)Dvm^riPpHZ?V^aCR>O{9@I(~u~r8?3Qp{gn_0W&}ijI)@JsKrr|?y7Fw2m{-eFp;k3pVoWvH4r{6y zIfCSFftih(-3GsJ?(_yE%ZA38k5?%i|(G50%^XGMad~(F^3KpH zEpEgbPobj0n1`n6KCM`%n(M>2Ig7Wcxbr)ueI_ksN~j7=nJ9!+r%Sq?Pq7u@+V%6f zB}r|g%ZsgOhoPNmYZf~BQg?=*m>Aee*Gy}!>)x?v&y#z0_PB0RFXM(^_1saHEY$!u zdTILM=5k7Ek2Lc!?8wzg#uAzxho1C&7Khg)v+*}sCD94ite|j>WX7$6_b66`TlZ9Y zSU-{FB&<_OooP5*EWgc&6jvvUbCShb$zu2w6!Dg#`bx}r$-q|@s3yy)6_04rN3pF; zua9U}^H%h-CBLkx?GAJL^hi8x(yMX3m-V37x9jC2-mRGI`mmCZ#c%j<2G{m!5Z{hM zKdzV6suN+evH(DAZ5fWFVUscky^&s&P9BRgF}$Qc>*+0Wy3GP^_0#O?wPEF5cK6SC z$JJ|@^b~6t3odCR=^{5}Na*CZ!iq|6qgRj10a%%~zUQDWvX6Q2pR|!m--26)OqTv^ zy1uA0n}G~gO}ds=Zq1J4^9Cy)${|*GzSCvV#R$GvziNf&6gj>?Fh3AxXD)7H*QN{;%*;IKGU=3Nr=;P!8om{fBWI_lRj5!n1Vwc zt^K>CoqW4UgaMOeYU5;hxGIyKL?VKdC#_MFDDuwsHX;R_Bwz}3bo7%pA`=o_9OaxH z(N=KUD@m1Nub2k^QRUS3;9#JYI3)tzg1$}KI}jY` zcS7B&C_p5#crWQ6>f*$};=Myy>rfjB1_h~|3=vLh?;^Zv5=g(=y4ch@B()L_oQYuK z1&-Ol5DbHm#VQE@ax3n+n?#2oG(Y6*5`|Wwi<8t{i-$S}1_t^~L8z`Ph|LK`TU$w# z4-R6weg0q|7#)Cqc6B*HiS-4$c+d^Pmi#<{pEJ{mwqivPfbgv{@AR9<0IZ6T4rhlH z?H72po%MzUVIKiy7gR9N#z&(j*eT)vY*SGpv=Zz+%$EQ~RBRL$D7C7@$;RWs1`0&# zV9mYizyR-b@&Q6xTiZt z2S9|mM_GHB?8fM-WhUQN00WK;6f<+`5A^Fdp33}eA_jhE@Lc!`;}4cMCN#;I-XX#K zkpT?rb>nzT0#H-q1zceOe6>;rA z?Ns?}f*S;In`!F0RhbF?TBdx|NSl2gQdQzT=*77T zs_SdikAXVMt%=o{IX9f8R4Lpmd&sFPdE>EagH`C+lqi2B|!tRF6 z&xhb#E1U8x>U@lZz{9)I;}#F-^h>-uIUIT`INVzsgKF${(^s z*1`=qbvA;e;R8pDSFjcOJ%0YH-xK4pL%}1oTNx~QUMR0&a0psoFWuXJu|ulGV{#1A zC<M!#xyJ^pLB=<~vcm#K{xsEkwAWcD+D@8XU3OdJ0k-xyZ!(++K!{aC~-gl}p z)DLRDlFN6K_l_QXfW%*aNwhZ99WxP3)rRZB?pn4pc9Y%JKBTJ9GlknK@u=&QDPqxj zd=v7Lt>zoKu38x}0cd_io>=stj;O!a5O2fFfZ^!sdB0YL+e(+&mgBt&_AzSi`QyiD zGM_hIxJbvs%Jd=5T=4 z$wa)vsR6l&0Ou5iPZO&<~_qWI7Y z3N{Wn25FNS`ZY_3(;BUO8y$V~t_NlHuhKXTYOCY!v%nwDaRn=$jp8c}?h@P4l@Vty zly2h|agF`9-TnQSi$Z0&BY*hW@7`BAVOozP&3bl9O=}u`^H(w0TTB&ER~7w*`iWN{ zz-uuLD?duSBe!p0YkYI>t)3gsi!~6Hj*wwjzCL5ul;j$!(w8tIB(LUI1!~bCwEs?I z=5=*`{#Hn~d0+EqG)_Bm|LnRyqBitSgSA@2xqDd)kd#s`S2#X}!YHp46~(fBbc-A^ zXCH{5b0>scbFEzlCUXVEW*#Ldz^Fq|p-0{$8mejDPn3a?*eFOJSRR-nFBpvQG0cvwHMvTYOW^N>ZRYlSbU4}hn;O@vsBSY z03_;<-`07a8hHh_m`o5N(-`u0zc90M;i6338bsOUXzfxp3*9ebC6jotW7nh*8E4RU zsL0C{0z2F5D3U@bHU+p^pY{s(O2L;vpS!P;4TaJ9wtE<-k3K?@#tIdhn-ZrY(TZH= zuS{Q;FeTM=2#G~~KkKP)4)NoG$9M4?l6&@*Yb)8wbZ9bDLAg)vS^lr`_ zI*0tG^evxXrxPz;fDFQGSO9EXQ0F?s(o3%8~91mCPG=a4{mqqyYgs z>nVr=>#>2JTdp7H-;CZk-P`Tbtx$r?E>LFM)p;h3er z(7jX{Nd;#6yp{{4R!SeeuFs@WSo+~L#Rant4$nb=aVy}|F2yCQ>lbaaZLYm%DMmY* zM@@REsS)%5ck25!i$OXk5Rl>qs_@jv&Z0^Swq^E`xq$Yv0cMk&uq+Yt^8jW^HGP|9gm0!cepIr;)$d;*@@jVtu4s*4x*Nky9$f^Hoceyg7K8yt>Tt0;ZZNeT zK4?gOp7udt39iY!urB~X>q`OdE|f5wUBPaz$lk`SW#7LAymFg92U)JFxLR~eK0*L( zHUBv`2}e{zb-ono7v!E`(&xp# zitXZrl{Kj;N*-ub1wdoFlL*Q;_5({dtd9`L{eEptaURSRV^O5*)l})7uqjF%ybzxz zBB$LfMAQVOtVS~f>1L3I0`hjtS^nzc?a(jHTp-%gzmmkq1oeL$z-cn$NsV1UNRE#keG>#vmo>Y?mH# z+j;UmIg|+qIC}p?b;g00yHBcG>5w~6ZZq-*dvwq{vU!KQX-mJi6gCplm78RjZgtC)?Q{C;?a?jw{=~EHu}yy}fHNagyTVx$ zo=vI0W*G;%tJ~npzeXgqIVFlc-+NYR8^cAt``{<)U;_mQ^SmP!V__mcaYf9yJg*>4 zFj!NUi@_6Euo^gwkhkRuM5+YF`zh($3Pj{UHa=eoZp0d3bY?w(^WZBb@wyYv?D^rq zWobS)9hl-F)HY4n0HTWzgL=Bf%d#d!iqLy>!H4Xg=@LL@sl?sqNhnVGh+<->cTzrU zq9=1e%9Q}Qu=tNkihY|-#aR4L$@3N*P`DTBJ4bAoGN_rzg|~K%w4>sk*==_ToE(@w zM$aN!>P;2wJ$BI4g$R8X{iy;jxCyTe1%AiF1T8TrdC2l?9J$`APd|-roDomA zH0Q{$`A6Dcg6=kY?F#_s)H%`Xoks!cp`Ur@HDA3 zGQ36;GbJQ#JCV|2MDN9-k$bo_6)uZIFx8r#`r6-XUM%PluX%(l)d&?Il$a*zsbtPZ z2!|*hx~wlcbr?p{j$DcY&VSI4tYpot^vvzkfigZ~>Z#ziiL0fYia#YG2v}N8hp3(m z)bLcGh-BUhIfKrK2)B%)8nIpD$jldm!NZ``FxnIX(I+ZjfGKE@2LkHRct8B%Jh-z3 z$RYu6P$=|KiO&C)O*YQk(Jn$u15(X-KWYfbmEjJd!cb}+?+2m$HEl7NB2P{rRTnI4 z2u7&q3ePFKmH4+pz&n0WP5kLTR}T4CFu_Srz$+EaK!f(%gcY3qMdv*CcZq3&ks%8y zy<~`Lj6JRL8WrRfF;WV^$7y@COitz$a6pB(ZG-4gN=pP+J(Rjz z=);z7$4&dAg?NiLNKvWx|#wV+k+ssV*FI#s#w<}mXr>uFqo>X@f2K4Q>MZZhA2 z^BR}P6Z9OUykYE?)>Yu#k`k;N2#`ThZe&uW6c4)rmA3qxaWS)xSpeYj+am}|_p(Qv zrTD!ouB_ziI}nHldSNWUJRCw?OH9;}BBjV%Hlr976-7%G&8!L?1|h)-NYydtDt)NA z7^~c$3O5XjJKHPq0Bq?{x$FSZ^wFB_SEKvmMh2klAC{^NC$-Z&2{t{ zJ6?vwq56#oNnbAM%R%Ol+g4zB08a4-bY?#s>3#zc>g{8tag^dK;+mfjn?i3PlCBD~ zro$^kGCzB!#G78NGyw0I&=YB;v}XR1P7&|4R_2TVK;`8Izt?ozH=vo(VUflM;WAWhxY= zkb$dHfQbz0T@|LHeBSnJ2&!&LyOydX)jf2x;NTeO4eDi zEnT!S3`%&7;at=t8?`8%57RWX_K}3?I<}BC_}hx`)mEh|nZV_S+yuqq>%PScd;S-K z{BPh}guTJ)Lb`)M(DQh~ld0qc=|!K3KgyxKfq*)-PS%<04U6ar6Y!1>J*`ftz#+3W zPc*5bQrnqO>%f(nAE5XdX`iCLvFE5?$1`E)d|TNF{}u>!Py8?-^@s&lRq@CjY+3&S zB5}>gK@kshb>J$;G)hTe^XjM|uF0_LT@?^n3dHvY^wTG(?|6WmdbdQe)-O8=v?8Ll zAzk7fQZ>H&sN8D83_Mt*cj1Es`j($uTA9e3N0(nkG|qCDjmB<$1SpRn?cp$SKHp~i zV^`;xq;GEfM=tGuOdf$ne?K+qF+tNM-A?_)hL$G?es!2E5dfQM=6ARAO1Di8z=R$O z&{|MYiV;&-hII{nFjFcs+j<3d$y`86C#R}au~bY@{5(njk*wR+*p1(c0RU0@Kn8ie zqI2$R^--;v{1@p&do*H6YC;T7Z-L5f2@5Jj+a{aNcF8l?puyv4q@*Jv1fcGV@ zrX?iEkW7i~NR)jso{vm}Z2MN}Z9Iq4XoW3@bG9jRP#q zQKULXWQ!__@#HL#laN~zZm+j)`vx=L!9DD|cWOiH3!A`t1uGyBDsnf(B2sWg08>Xt z(;k^_Kujfkgly__gxpC5SkmJI0j5U#lz3WJknV&b{Fgr1-moqoh9Wa?#RV>dCJmQL zqaAef5+-0kdnj)Wpz0VUx8bX;Tld0LNWUi30TG+O1-YgMWaC56hj11My7{Q9%LclA z&p|YY5qi8VnZ`;kx806#Y&W=o)|5uNxe<{wIaK;YxQy#627hS+d)XaM*D=-5FXtQ0 zlce^_&G)uf_a+))3H=fjm_X8-^OsmfEjVno6+&b^r4xnJNM=_Y!T?PVwah~<><~xl zJKfeKZL}(##W=%mCkW9pv2<^H*Gi06mrd3?iA`4@4?)f2Z14xsk-cH$>+*9+9O05* z^)32u#@w?bM`HR9_!D|bGfD$T3u<#up`#x0JO+gC1VlrIJrrlJPQA3t*30y^&!>Tm zxS-q?e z-mwDj*g*>KMP8_l^s0RoY34pyC67Yq`boy3S1u=SExbrgz7e z%bh-DE$;VU-gt1fOq&=@HHxRf^5@W($}Z*i!k4A+%~DYJOF|eWA-yc?ME|b+X_1v3 zm;$E+A;DIBlEHoL(VG%@)m9;*1sD7rA6jurQ|grCqQ)fF&D9&rCJ)VUto>7uUXasK zU=df~GV};186Rj&X;t0}TWqw@Sp1&Ol%?TdJUi1PWFm$bj#cxchCD>+t%$wSPgBfK z%UEqiJjE-__zAZ(I?GjK^lDMO?jd33#NA?8hAGSk zFS;FPR^20Me{Fd4yZ*RQ`2M2f1XOgMnyzA5*{%rowsa0lJOz6!GS-GTtw!zL>fV^m zku*p1g6?=qAg|`#4OWK$C=jY8*y+{qahzaNqHJtwuXLi`-S3NkJWA`%DXG8EmDEAM zHJ3Q!Q#w@pysybL;Cf_`ci?1&EkU66r{u-{JNJk;?NcC9Z_RNR?d|B1!qW+1#BvT3`E|SwDZ@$)Q*n2ai`bqN87S{d4YT?H%3HV=< zy!Fu1cHYJGZfR62`VxDsii>$YaoOPBqA;q~}4tfaC=e}dR^I+k#(i)j0r^2z+` z{`o<+d$=w2?T7D4|EM*;5ibYLCNE3k1GO7|w5ojuyNCVKQzliidCgqk{~jy>cTLgYvq*0WrT;Wp<9n5&I(BS?I3sCVIwm=-;Se>@1l2Xt-fa z76c2bOBj2PQdb2f4;4k5y84D{uYh;-!2Z|?#?=X(nVP+BCrGhg{xsJbh)ZUE>A2Xd5n-LNcxmx8$fKA5Z0b*m| z9U$)Ep*pw8GiyWu&}2T|x2)O2fj06r#RN;Tgj&oa8oShg((b?XsC7Jont=dTa8?L? z-d*|pcsc#cSN$`*=XXoUt41Pxnm)M&XCm5Wg!z!`bzv*H@GdirwF$U~vcWcDhR6FH zNEaW7wz-K2`=|T+#rJ82yB4)I=m}Hs{^yFrM(M9F=<${^LDn)8+Fc@%e@9pDlVnB& zApd$-P%k6iG7?G$l~4*XpT#A3V1>Rv>mHir?z(DyA)Xn$`oZ?CddL-T`sA$jbIS$m z0VBn$#TPO{Vj@K+53Ih6La(GBL_b2s#y)@1G};`Py9GCNt9kdfB`@i`(pfiw2u$#B z8ioh;E=>rsY`hg5{+~~V^!OdVd}8gw$_(%F2qU*-H{49&zeS^oR#R1jamtIyJMQ#< zJ5n>oG4(m4Cx6;4dF1@FU(RP6n)}9gS>7qs*c*q=Q!>o_lmGe!qAu5zt23Xz($;eVCa7N)q8IP3CGiU-oTBG z=}8rU4tzSl_G8j#+P~Pt zrpWi{c!Kn#kdd4%p~aSt$f$L&TO9+#wdpCP&OH|I4$>f1FwczN`SAuuJrw@xv*;QV zznsYNH|+eJ&-Uy{JB8y~=XiybT<1O0(f&n;33Iv{Y1e`RtPGw0{;ZQ8j=ZBhX+74+ zIOXwAt~Vrj%QI~U8Wh+vCn3VzA=~!$zm#4Yd**xVOwdJ9gpeW8DlP%0sNoMg{l|r) z;+=rIobE$UM65lB4oW~-b;&U8SChNZ!|5H+Lc)7TeMwHYX#)4Tw;yPY0=kh2YYv<> zp$ELb27^T3ZQcQR2pisJh(h#kezc`?X?UTMxa18ETb+G5Zqj8EJT>{!WLEM z2I<{9Q-LS1gd*nFTO+3;zcm>j1|Q$38$eWsocN^lRj3URvvJv2PRS&ac13;3`IWSy zVZz)?MIriR7Lh7yFyUOvCfA{*)45nnnrsnV4hejS6!fi<)-+H3$4HkGLydgeo38h> zTP3xr!l=?0Ruuj1PJzdcKYu@Jxse304NyFc4uJi-lER!5@k4#urQ)C7xVL0$9_#vV z{VZ~)f#7c#iOp#;2ZejAnBPZ0r1|buyjqM}O&)3mSU@}+{Iq9KaISwYSuAAJ)vCve|CFJs8#qwarR|$UE1s;wM;Q;t)+(M+VuBvX0>!HT zLhxo>&D!7uzg${)qK#UzS1I2%+twf7tj^38BoZ4{1=GzIThw}HViQ7#R&R6J}O4Gfz=s&CI-b^v50u5WUiTqFor20-PaDAtyvp z#G-t`5WsJRl-8scuvc5_hAX-3V1v6Y<|!)z3$164(~6nLb!AiZmDSsmFMn6TI+>lt zdVobvalLl?$DZ<43sJJbX=eNr#a$P+#^XbI{LHhD$onirT@}zY4Brt12^+nBudCDQ z-ZQinYg3(>Y0d*Qd3$S0=TfU=<1szs@Pe#P{^Z#vS=|=DyZnhB*u@4Y=QH>(fZf8A zn{Wz5S#*Wbj-}Tm;X<)z-j&eeN>`2U0F@BM+MSP#ay$0Yt zB?Jj^Ck}rzp$4gY7?AO#HGs+fjK!kHsW0Cn(@d5~9i4i_Jhj`xk-U)lSk zNZU(x87)o5-S?}r_gj_SzETbt73s66t!wInim^YQE>s_J2Cl&@2;W3S?acZZ^K(fQ z{VINYAHwLXlg2cq{bP)V@jXTmJ+meIA~eRCiK)`IAz2=+lKQ2w`lS#0AkEUn!lsUi z7KIPxoqQemrUSW@VJz@bO0vTYU81b(P96;t8hlul|If~;+rX;@GQsOO@tL!$2D zYx|(UxOnNv(vjRkn7O*8Q0W%%!&Rf6Fy~23C&>v>`fj-GOWGRDhvz$%^O8K!2wPLZm5x(iJ(fN&i%K@Wu4T6S}dI*pvR00KIQFVufv4HLTL7hOg;gR zX_Aybjz%0u>Qxg)?>^cmWL=r!vLA-9FP2xHHyZWQtzuuE3)v69 z=|}7;Et~qL7w9av1rW|`!DP7YP7~mCoPg}($uu-)FQCSS>i1)ekErqC%EBZB*WQWJ z^)zg&Xa*Q`a391lVP5#%EC016T(ndB;(A$oy7m+K4eQPrEjE}_r3-;jhbi&*ilD%&? zUk?0bmXY>za(A|HzV+GNy1ij=_FvPL3P`2igJoSF?hxpaAj$Nk_CIA{<>&*&(lTy{ zO@#;4Jf^EY#gC)FuDW2j6~y8|mPv&v3B<${DH}@rSLg_};ISd#PR8@5=&QO4s(f7y z@IjHYlj%^M7A^GCy5C=#F5$I447VUuTM^~-fkS<2fu3i z;Cb=VNX@SkgEzSxN+E8=+`bHmVTke59Q=&qQ$rPdItMB^6B=9s&5Pciva+ke-gplx z3Np$=gqHBr-l}N$n(gXPZAkn z4Ii6{zt=Z*qv+mr#07_QAEAT?rpT@JB4RCO<)P~8{LAr+SxZO6OAjI`Z)6T07|XX} z=#4Kt>FDZbxMtDVK^r(-UEb_$hw|D&fr-do#6o@xEcmf+fq*=v3zM*x-0JSwPak?i zFPeR!JwsnJ?@P1yJ@;rXk*v>m)?|FKfPa_uW(-+gmmz*``BEwio=Zw3b69K@YAeII znt5<3jJYX)N6vhOni4_Vk5-baa&Q#|9~p=wubi+l<-0!x4LthWno5$*G+q@bmVZR^ zT<-a@I_?XDN#`03v$pyn@{=b7ifT?;a~18s7hhh9b7kr{|8!a7pM@GWXs*=N)V7gg zJLk><#Nf0}st^|MY{G6!>mHj)zzQ?z*+(u!MmAjk>XQFyW7^#l zCDCJug7~Qb*Oh`+Ir4YoU`+SPUtUTjbfyssVN7cwp|wT4mWRPN)TT`Ej{CC?WQQ;Q z&^!;jccsEgziBf}gpRs#tLnveW>QNXzf~!o)dT5D5kV&3PsnwRu>~|rzbSNIkcptC z#4ge z!i>yitawLDmvf?`w?m~{@W03k-EKrMsy1=)IO*@M?!&fL86)o~8F?701Ea7;6=n(+ z9Qpt`;ZAa~ka)YoWqVL=HCQMZ+-wa2{z$yeMAGF#p4Fvak8c<~E9N}{7RPfZ4$D%3 z5KS}Zeg_#>>Kfc?@r_>|@{Me;;C`PzEW{lsm1DCqcY?bY@DR(|?763ZcH8Tka@wn- zrHKcC&eDE9SJCTS$}v*}6_qp8wBX2#XPOJ$lL5xS3JnlkEI@hvh+27@>y-pEdC&8) z=o<@L6#@e<74!D}7QKk_+_J zUF?pEOctNz5ig7=OUkWp7wF9*F%Mi6JvI?j&rm#!6G~YM4V6hUjA$`BVQ5fGHr_h%iv;l?f8cU7C|(xymGA#c`X9lEt4xKJfeu<5&+N6biF?zI=a=lg0&SuvB(N?b@f6j`v@feM zdp0t!t^bpDt@%Y95J@twR-d0!^4p|ek}rSSAf0NJ+MTLoJ?T4#uMAuih+`s#1rQ)h8w*fiMko&e7Ahv*hu}(fYFHMQ(s0K zOiFVYiv%Yq*omIGdb-_=l1ctw>c7dD}C<> zCJ#A~OCXdjZh-pLk|-d^8{QZ}3H=7I`uSrO!zCIXRFw;49u!j8e6{jdSV@&Z@(k>N zC&@RSw0rGwS)o@?-26F5&2ym>(pdasZkT$oW+)&(ydf_P=_(7=R082upc%QyJK+%U zl@rTR(z1>>4p{*F)+i}~9)FzjslOpleV?3$HxszTWTEkDLwLWE;1DQW5}2kw9was- z8V;tnL?+~R0o;ueRG65kG=T;_4!@7vH9AyBF$ zC|Cv18LoW9S#mc7Dk}*RS4nf#4x35*=?*@T(SU&VE|y7d0E=3^70{%x)b%1T4-X9r zJ;@>vfefq)xn5}o-tPeC=>s`h0CHqNNr+mNJD2@I2Hpa^YcA7c*-h2=3jW{6nqV4p z^)Yxd4!mOnrm3?sg|UJe*cOwXaaK!I0UrOd z8ZRT>S08|Riey~1xh6zULf~9g1+|DnAP^va^lnJ2+V-8G%he?#MA1^lN&9f&&cP#P zN?W<{9<<;5Vm9p_;*izxen}cV>1Ze5i%wY?@5bl+u{9xB#ZAi0E^JuZ#jfbzR&vXQ-I_d zAMAu27!iy8*zw~Xufhf=u9I0mIBSX#r>8CL!?f$*9e@>af*LkOa=jrv9Vc=Ik|w2- zcvTE$`XaULlu|~a%hDItor-G*NZ)M&PJ=k}4^EH{UN&=Xd@MY9>@p;rmK^ZQJ0Z_rO(X zbj{qohi!5^%Aj^NQaj_eoYOF5k}35aBwn|x$Bf(6CIfF-f(T@)0Reg=Wy5X>ob*c1 zlb^oWEPb2}RzCPo=AX#F=$VZAuuHgt&WwZqVm(7Fg^m>pRn3(?uNcu=w)FoXloy0k z@PIzMPijr!zwP8?bobXL3$d>|eji@icx>hk&@QMfAXB>PwDLABPo$G;Jm}8)6F-=(x5}HB=Oh+C$8aGw+MT+3g*OIjC^lXK=P>LD#q2X$V@P`wj zN>#&ZUpA*IOxng1B&O=huEh`smwfotk$>#9s0JbZDc2I_?L24>t7lOH-~XRR!Qbp9 zXCI6A=YM#yPaliWc$rTAa&PuA8F~Cf&I<)^^bfzg3{6#Vf@9uO&3NDjZ^bV{2!YKA zIv{$Cxz>pd!6BzAmi_R5kf++eH;18Q-vB2p_keNm>ID3rB9!v!TJk_s{*q9`I|u0; zyGCz~KAqz$h=G}GRP5XNmKtwPBdpNexr3WCo|naC?UyCwg}j(g@{P3r@H*$zh;I6S z_rG)1w_^E2vm=HU(Qsp(?>Z3L)_OZ)XT%E zdXhaR7xO)McX%Dn`*BxNel_DEEC_Irg%&N)wwDh0HD*>zBN4F%j>K?=3 zls4y@)QA&7V8UUGdJ!_Y6%-q*{a6iAl~6i5GShLxZTAp`to!dNyJ3MzA~3W2U?-Dn zSwIsyMzMTFnVaFKGd{dh8= zZ{h2`81owLZ$`TnPO|>)n$l7PCFbe^ro=J`-~t412o5rEZVXYTYR3|y$~zz<+)w+n zo`iIsM{SIrUY6`3uAJEM@=+5{j6(qn0Kp?LK-7t135?h7(3At^shrA(U6WM>F-dXm z$ZeMejjgb9=INpOn=$E)+&y?OS4HT~#pgp^g66D5tjm>eoluHy(d_b%sv>wz!=*%a z**Iw5KfPYP@89~em6A*Zy_P919Hu>V7aAENdHA{ z649PLuNE_m_7!r^MR<^Q_%eP(Rs{rC;KGZ7@NyvaP>`lPNK*U}G$c`+M=Rgw z``Z;3IrrMkVUKoyyT9M}_kF*98#5aYH@LbF8H7})=gd0hEHJ29RqDg`<%nN$dL&D& zP+Ad?KCs*?Y)S2SQQekeEWg}kH{=V;&sh{aq;Z$skd3kW?>6o9U5l9?!PA$*g*DbHmp*3bEf9bn0%WKjv}u zvQ}4Hb6;mK>p9rl(bMf={LTOML&Rz{wFP7!>&YMnv~*95DPjN6n#Z7}Wke3kLs1Zv zIe#Z(z5X$UwfZCD0eSlRJK6v=b;r#Rf0@zt(&`7I0m|edszaehk`A^3Frwlbu z8B9+Z1o4tiSvCE!w$A4ERg(ClKmYSBY?4bdW30A@Sk2tZP$=vrk@f^hEOpvr$V&-F znPW0i!$Olvcq;6VDpfS0UYpQ75e>13^4SR`IHa&@=4o-eT-|Ie%diV|d@AX9?T@H7KOAH!jMGL(X;{iXG(z2n@*ceT&W?=;?0&Wib z!;vVk83l42XnW5cgnV-b1fBK78ed3>5biBpt&-y7AhSH@n*o!K#^2JLFt7@M@OF{R#)F4zCVlysYE@lW~# ztggO#Bs3A$w2%v8%pdSW$ER8SPW~#>jNkwnoNCY;nuxMVzgG!y^I%YP4T4wm8yPm` z$<%SKhGcXZIZg&VOt2XVjI-OsAB{ ztA8u6A(^-H!@T~!d5~2y)Dlo3gR2Kd`p=iE^3l76>@LJy8F6Z?v9pEB%KT|N20lN za5}142ttgP4Z|6*K*$F(3vg>7kLJ-_0q0~iZAU!vkSFU>A`#iA=n_%Lk2~si)YaM} zT$aS}7Tt=uKmtn82VVf2g!qQwutF~Tpsn%4tItL^T_P9nk7XAT$Na=@#DG7nVt8vKPFeebQ+Ld?)#K zKb8VsG-N8|BBoUV89sE^Xc`+5w!S!x*cim<3nO44Rz&>wE6kw@Y?KYj*& zc$lEjb{yjn5Doiu)WEz5b_;mfpu)l-=qdSuUDb8FMr%xkUx-x{-H7pR{$q-lbwZ=l zILLu1d0OK*xQy7s!#58SvL=tvu&HpEuOn1IiCaOyN6rOWiS6(aqY;XX)8xyb#iJaR zVK7wzU*(}8m;{!!aU0^~=$LzzaRob0jAJpavq#uqAT%_}X@;8AZLi7I>jM5I3ZX_eg%ZXOY<$K#fg|5r{hQf!qK=_&DG+b6ecK%n<-PSwj`1 zY%1&}|I^7gchu2p%&2N)v$01j6Y6&=7u9=Au}2DOsx?zry>@t5A{sWYPTJ!ZD<}1D zOtw6oREln`uFmEGkb3tBl8Q(OsR7V~5<@)06Tu;#ty2z;{d~TF0!x)id^~5>4LYby znFPq(|_gx|3yyaAcxUlnpRJJ+I}yg)a^H zps=lafdbS}Vni6_kkio-;Eb2e5ZDyAzck1QUIch0l8&0`bd75VCyYdu#!2%abU=JmD$jWEvvS7#?X*xcuFLH)WqdUf@?fp(ng3U z;7GTw3AW5ZnNmd8&o$X%%YkNhb4xGqO&64(sPLkcgq$@+Bu2r5f3Xhn4;(WR9og+Ep|#7jM-|*28@kX%P~GS zYvVkt#mUD8ZJcklNIb<*%Qj|afwyj`_ibo+xn$?MjhR`XEnh6O<%vk{MI`z)){i+S zf;nlAow3Zok*`!*%~#`u4swi|4e)8k?ATQcys~MPG3f~3J8%$|)Rd#%Z=YI1vI!$2cT&>>YxXuK8Pfy1JUXDL+|t7vYH@%w#;QRQt7t2BK#s z&nfJMsj`hkN#REzgfuo#c-ZejfYQ_vdOn_3(zLni=?a#1L^Hzq>Rwt-0Sri>VFl>` zFQFqLcDUuByP<(=>@cDW^XvPs#f}mTIe_U})ZzY(lLV>)ei>0a4B+quu%PR?lYdlU zhubyF9vz9Dp5KuX{cwEK4tXK zAl??L2N4N*oF>(nqM%Q%JOjN^WtyTi%pelsVI0^((Xdk6%T$P_2w4JNJN$j@0Bbe+_6mHPo&=9(DK_n%VdsDWo6&FF=QlW(~x2Cc7qfHt8 zv@76x-g?VZg3+x0mPC-h9@!KI%bVgDZK6im0p%FmPxWKtY?F+sgryZur`xMaPwTM*1k?_K+t&beAUdVAcgqubNl z+}YVoJ<30?cNse8LQj=)E=W}Cl~ORd8(qEY;o^GPug##MwwL#pRwK%qDWuLF6oyyX zNCD?h_bcDoTL1Z*8@_T&hahI~H{GwKr8oT3oin@BHL!+!9=ostz85Nq-drd^)UiQ$ zMNkTbfNlp+UqU;P9my<82?=QGMEZ$3j0!O5HS_|;&;!Nk>7+e8)aT@cBCEDT;z%wF98m{I<0Vl1QF+>T)rCbh^|!v zP@WN%;0>H4X%|F&^ghxzfq95P|Z{X!KJqQ*1>2w-y9b0ox3q7G~ zi-fDI(x8G42{A+K=nN}p<7{VtJprYIRVpANU43HF7$&x&a~*=AqOwHKg!j9lwrIeR zK_A)I;%*{lL`MDN>F~$>`n`~Si_TQWs+(q;)+Lh2BS0FAUQhT#^kN0x_?(`_6kkIY zxjbwBAZ{7wJjqkPb<1DQ6Rjt|>N8RP=$g%6Q1|J7_4RMeHxlO!*oNZ&ld+AO#~KQ3Am);B5SLB~$4F!&bPk7XGU!J>%+=}!PBv35Nl#ql5)d%fxR?E| zwjQ@jvloh1q%!2wAzO0mbv)WaS#w2A1rJjm(zR-~FEZZ5$46bPZ+tsD+REHf zT>4pS5El>YL|toR&0*>x-ic^Xl_kX0XKq!WXLP7ijYE|_$=N5(siv~nMwZ(1^ZL6b zm6fTnvc|imeK8YV)FP(-SJ{j;RsG`U%958b{mN^OhSbB3;!D=ltRo-4CmmVH9cF~n zpHjb9hX1J}ELZ(fnP^m>EkiA}a^=4FJ|*77FE|#x@AG9xzEsxnm9nmXD-)=L|KqYa zY$89u)pb^Uo8P%SG4Tz4*W3KO_#3)wIWJyJ;^sFiak_k7yUeb{6Bx|`&-U_fmd`u# zXRPyYpD#1N&lC23?sMq9VO8<9qKhT9ADu2~ zkE^M&<(7Ua4(@9P%_fx?4!q?X{jSic4S{E`~DQk1AkDx*$YsYbKqkt=lo`td?0o6*=KImHEM;F$zKlrA)=pVGpXv6 zn3>$yt^vKzxCb+5uDtdmcFRK3o+oKK*R|{54R>S-r>y2*6R3En9_XRS%=+y$qyJbl z`p%lscU`=nglya&OzfwwF+6ty{x^(dZ1`P%1OS{D)0xeiZ9JdR?mMaHuic`{sGu&w{%`BIw1a-D z?Y(BynI2)cggy=a$klT;4T&G{{I*+};-n&cB2e$>LAa*odZI5lO07sf*&lkd56xk% zIm1IyqD9YQ?^Hg}&Yn5!(*tsFRGWtJIX<$nI|&e>q3yx$Vm3yL-qy$GGzjNf^+RNh z_dPf@&^U#@*w7ojyp4;`4ybkmLT+V<%F1rNx17LxZ90GP-}-cv*$M6vse_k(*cI|7 z?v}%2Y=0>9uGZQ+h+bpjdY^g+!(n5>t%Y~3u6UZh206%&v%BQ*sPc9@QkamozxF_* zg5QVVX~97b7Z@EV1m&>=wON?MjpDUs%=^r0-TH<)u#G-^Hjuvz5Uvd*mFN%D zF~l*?G|JUuT0@FMJAx3^c<+%wWTXZ#?iFIsZnK#1(at)9F?Y*}lO?uj>G?-Nf{jLQdy271ef{u z#bum6Ae!KG_i~ddsg_DBgskZc@mDVA&*h)6I@VdO`6pP?nt%C~_)+VjCGjdg1DHu! z9aX%EC!9&KGuBk?-tko9-ojM#-jP&$t@mQy#oDDR{5=+05`SUUR$K7JCnk? z+P(WyjkS9()>;#Tqg7RZ&c6O7EjHev^*@7iWD$Oi6H=5yx)23bTc?LO{X(ose0j7 z`ts^OOJbjO;yPzUKuxh1Rw~gCO|e=W-%Q{A@uQMhlvKa0j~?f5 z6VCgk#wqE--3VQ|>Q5Z+T|2iJPdNWh5`UMtfR8thOIzk0>r{uM@tCCk6t7Rw`wI)| zukGU7#`QMgN?y0b=@9>=vU*Di^r{kibq~whQlf5^#ARF%6I&gfsd`6Cs=@JBsTzlrk{r%dlS53o z9qUsaj=WSiJ3lA>Y}@6ja0+b?twb&r$9mh|8 zv2fhzRiAdC7JAxox>kJc!loThZmj*o!|nH{YFW-p&EUjVsn~GrTpU~}vJyTsR>J44 z`{&Oj7ZN?rZ%W6%XUuV|yMUHv={d|Yv@fXdI!>9``-`Wb{2w}?J;f!LFPqp$U{|t& z7C3T9IV!@^0`6O9QssN^NRW}w)JG-jO#KA?OiK9frPMMd@z4E?#p>TynLk==j7mKP z%d^HDJ~Wu{fzGKF2*Q|cd912@O4=+2&tC-ADe^%z|%4)T)OfANf7eKeA z4g{~nFW@khbHQOOrIXh0o{OvRSDjff3ON_^YCk%53NvmJV%Ms)N%^I)dh5*6Jaly- z34_Ri+zsuy*7sDq57)ju3&%1jSuY7g2O*mRTHKcj}ECS_!> zG||@Dx+=D~b;XMMmL-+T8`>N#MkVd)mG`zSUhzFGOoOGh?NwpnCqk5?$nQAP$3;Hl zP*5mg1?HfCLW9z#*AMWkw?O%@{>Dj!wqkH3quFmdFV6Lv-wh2cTL~zfR z?T*hKk8kS6k38Pd+1=Uw7=E<3XEUyETix;?-ni+}jwiad5�IMy zlQZ4cQC)LvV-&L8ClC9`Sr$N16vc#-vt&hhZv1ZRn1U%KHYB9g5YVA%^nN^_yv<;C zbS(CgK$bIop&0;;!y+^K2A_mNxTC-2lK~}o2w#I0SD4|yu{B6x{BcZfxKlfntqMc$ zP{f;B39w+lO^xNHbx3tfT_`_^9|5ikP8A*!YLFzL@YWm*DGAWbY0(!1=_n5K1oE}*x9uSBk34VUUhhlTY9$R#-1m- zH=-*O8hOtr9pXuw4`($P$QuOmDR=U`2UD1Qqe0N!xXLjmM@>wmXX%S7cCtLQfh?11KyOq~A=0Ta-pm-@DjNLQM2I z;gHn;{-K`oN{<0mqk(YGqsTrXvR8->3b2eC00gY|y+YZ5btDhvEMvJETCv(WYMaul zht@$3;35?Kj|v3Ec4Ie`)mphvfPEhRC1)DZ&v>YCuC@-OJlGs^glQ1Ml?kh%b`~UR zHJDDGEB88SmbNv&i~od^Kq+v;1b#V-rm@ZN>D5eX_%Z{d6AmXwN*!us zc+hVYiJL3z(6wSVPx=_M+?H#3xtF0BWW5{2-`r~EG6ikkJ$Ki|H-L#jjxxX&hm`qX zK)jhF2N-gK(H$d$JkP=T<1T7O9)@rnl4nBL3$IJxoT{~QJh_j}74n4f<}zCKCl1qTYw@^1HhS$? z9N}3?>=QU}EIH^sbIwc7e^qW{ z99|I}7t&UP%99)H(OMq~aK~!t6aWY80+*p8_%G+wf~h!Sd0PF#u288aa1F24VAjYp zZ257>C@5ad=^6EuNr{kWD0il6%=RtPlJvSU>q8-JA2-q%tA2O5*Y z{;kknpwj@Z&}`gJvoSSb$Z4Oo_^e7$zvnY1YoFB9&IXe_02bz>7X&GU!cIF) zrcDP@sS*v>!)dEP!(I-=d6QxUfoa(J!u+9RHGfh)9SygDG3UI%Saq~U$?Kew*YX_f z2rGBKr&8hMe+BR4mSzs(0j>eD0AH%fBSRByf!qoi2(AdUw%Qr=k3Y%~N z^Qo>Y6B*}(TNn4#gb zBi<unb83sP?m*3D9)THO|=%99CcjI8?p>ZL337WkeM6a z>5offr@u~%PlMOhlotOH=!)@j6GRg_NWN$S487r*(|eT}_(lQ1yh!HzFGAxeLrEo# z-Gz*1bLy=;i88jJer5Yq&i1Mvo5i0C!u19I(0KoXOWwLB_}oSrUc4THdT)rkz&}(P zu=k*hLymm56^3c2TE(~krg0xU3R*T_WLR?8AFl+FfjbH;%V_17p0V+%C=(QmT9%nG zinBHn;-BS%2hsfnJ)>1lyfUxq=I+OyPGk1S&Z}{((y0%sn!w3Ut+0?#G?Ho63;ksWT+?)Cf1}lGG!%uj@o80Ykn^Y#`8f!;^uuKi4tZZ1{~Z)1 z10bAUOb#hK3edZqFoSUEy9xkZzSWUNY&>FfBf-$OkU+YOn8mm`f-#!_8M&I9DYUeL-Y>C3h#o>5-d~R! zIJ^rrG%Q7kqxYfx2#gVhP&11XSX_dZqJ{(#cMntyAXLGk=PR0bivt+Exe~4frV$cF zk#!{kXb=w#(SZORK`4=^cR5c)i(mk8iekb=!*J?HBN0U^C>ICQF0>DcU@c;tK#5)O zWq~YUjmRQrK?#!t98Fe)sK5>qM+hT&SIHN<3%elD1Q;d;92JJNVIihqOk=hI6uSo? RSh`+zf*pVj6X^f^`!~&m8&3cL diff --git a/software/CPM/CPM32_ZCPR3/MKZCM.COM b/software/CPM/CPM32_ZCPR3/MKZCM.COM deleted file mode 100755 index ad0ce7b0df0a2a984257ce5d77ed6d0ee462c100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6016 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 gU!1gV*+`HZ-12o7Y&P#c~0zdeQoB#j- diff --git a/software/CPM/CPM32_ZCPR3/NAME.COM b/software/CPM/CPM32_ZCPR3/NAME.COM deleted file mode 100755 index d3a8cdf5d03e76574847a8315de222eea6e9b53a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmY*ZU2NM_6uz$Q+caCcIAzGrr0FK!kJnahSp|%2grBV|d!R)F4Y8^WFLAbLXMmAOp6MavTbXE7`~Qo^!r) z&gah-*P+9sV-ts1gb))!$o%CI`_tm?-PL=-My9lKPoX*!8$`{{ldM)GS#?GO&%T4?Xd#u-43dR8(=)RfZAQ!HwIn)_J*j5W zNpg7aa|cIB(nz1wh6_2(K;44@e===oiM(#idu6i6G?G%&87(=4=vjW^sb|Lq$ss75 z*0bcHp`8T9d_XfpUt+->@IODF&8u^PB)p;NRP+lOy@#nisZK-HRi7$~z7CbF*3^ol0xT4wRNs3z__Xu|om>*qoLqHKlMkSEc#T2UBD%V>G+?*fT}VE_vqk_JgS<*^3&$X+_j$4(&2uDSFTUY2EZStQ+H z>bI9ioT^=;F;;nDepZ9Y>O5?SnkT4QqaudQGdob#j=aN~)+M(=7g@z8uf2H31|@b@ ztwk4DC4hY(0|nE^upDeP0oZNP3M*i=bbxn-EojMRT_KA4i&!${lz!2%D{gIP7Dsj5 zh`x$FZLS*^Lddj~9x3=o$*MYKyV0*>(*mJ_0_Q?~ZbyV>)d}^<)Zkp~i<3}a@O~-e z#Io2@a6bSU9AGuVR(w_YBoaar-N$)G{ITW&_SW#?u1&-*_k|ZX4eSz>4K){sCc?$} zklYvi&8adW)FXZc#K1gsAMTvOER|@k(_(O~MISxODMSkXS`r@wuPm=j{-L3F#AGr|-+6zyv)`49BzDvi`#i4a;+t(va3a*Pw)0;U+co4gJ70JE_@$YY1{?|beT z2h!a>w3YxfA9v2Z=iD={Gtrf#RjG5jE$c+mSeI*A+_;YG(7!zCtuQhSzc+MoanX$z zw=~T}B6C?(yv=nMMJh{r^rtg=mZed;Fx2n%Nfar5uRBz2B$;}dtBMkx=RCernS6<- z49UM_Qdcr{9bIJm24Sj7nN+&mlh?Z;RhUYOl=P~Z<)BGjmViOE0RT}-fmM{2>RFQ4 zCD)m61dbG#HY8|U>SZQ#+No;u0wmc8Rj6W3wawy?Y=?Fmm25b$ah*1A25o4iOH!4g zc4wDpC`(DmLLklcTAB(q__E53=t0*2RFKgbKynT(Doe`Yc$~|Sc)A_QMY2%^Qr4+- z9aU7aT!95zO5kZCo&T{2=QNM#S3Ku{HOKyy&N98@Xc=!e8(n89r5Y)`Vm+GOTmF0A zb+0!(s$u+RXvh6d|3^Xstw`GOpwq+9as0Pwv*IWFa~uyQgLbQ3e;{Wk_Ae>!RF+XC z^Q|sLsi1VW5x7mJ@1$ zo*Id;4p})Jut6frT*t1*snPETIXw3JSC9Sc?(6=z{Lc^X_tI3cFhpj>2PDuEcj8DD zsX-lvLYYkNEiGedj9ANG&c5qk_grTnDtU8u*1Nvy_pW~a!FBGi5d))eGKjqg8hT+o z3La2YjZtqja-Fzden$J;oJ}76XiS$hxb@<=a)DiE+nNJ+Dl7Q3dm8c@bz5aK9@~%BK3dn{KduAsup&ld zod8Hgj;0aG6Uvh|dj)_e>;t9DK(^$Qo2)^x>l`*4pn)AQBlRRmwFRpagN3k&qcFFnLUHh)MacDO0=&d)`}5p&4mODNno1`cMwV32 z{8mHjhIGwH0k=8DR{PiiENg3PuG5@>Lv1^JS#ZpV-c9RgC?(nle(|c@C^Q;PKeKrT$o$R{bc zy#MkNJCm$VZ7^k?4$i<6uwfxl#1(L=Q0DiGJlb*8h(4+e`_(BbODcwr9?K21lVAI?V)<7smg}1DUeh75-DV0+0FIX$ zvn*POFlQ-S<-buYyzJkSktle|S)OvQ{o9{{HpXe;D2Ia`^i4X7o+GH+tKl$IAj&AH93`)^)!9=Kno^1HAB} A2><{9 diff --git a/software/CPM/CPM32_ZCPR3/NZBLITZ.COM b/software/CPM/CPM32_ZCPR3/NZBLITZ.COM deleted file mode 100755 index 035527923c19afe959d0b2c27af156fd2ab4f4af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmcIkQEU`N7@paiUTI6$u4kLQ8q3`6A$Tc=6k_V4R4kGZr6p|x=ITL~ySaA5-R@?0 z%Tdx4Uwq<)#Q5fm4+dXM>jNSBfYNe?mh3|fNF-bgn#17b5{Xg3n5+NnwRotn-oxzN z%>RG?_s@LaEOz7M&Nqe*V}w@mQ1bP+#*#aBA^wZE;OL8F=ECw>p)6e&yfB&TixEXp zf=yBYcVALM3ulFn2eZxJoE732?K$$EDHVlau=^6Mhm?*7(g4Bjs5-BvP>n917HR{0 z*ballP~@s02CDOr80{nRAd2oHC8$_BI#4?NT4{D~b@V0D*H6lG)sZ{5&Ipz0Zc>SN z;pnSG-G~#YlodAhZ+ISU>JP+aTpfwNO!gftR;0*=>inKnuZQ$0MAZ>Yq<7E_G2}I& z6|oD(JNOK0d12=34a3sMfm5Gt?TWmM!sUwhFaUwxMzXS?2yOCRPa>}@D}r=4AcuZm zg}z|{0(>B;7=Xiwq)@PJ_U;+4i9oMvjGUKl2CjsOst{iFM;-$W&0M%D$tXOlWX-us zf`luMVk=5PDJ)49L4Hnc!{--1!O};99FV>e>ZLvuyp$k)7Z6((n^5zhW^8e(qn%{5 zpu3ZFWc2MV4$YZbhGinL<{{IiL&0V=+rpb0-;14jvkz z`Kg?%TRFBKNprfvIp%Vdonq-Jmq9Ai(v#HH^UTk)Y;(fa@>I`j6O8KXZ6w-TTSuo2 zS39Lb${Kw-p3!YJ1x*=Ro{cAfPilO(Yil~xnb^HfF9n@7@6(+Vv|#Hlqs+EVo6>D` z?{U+1Au{5(?jMbRiW%N)tSENhD04lmTt2^46onhdlR|SUv|1p>66>RNKFN6EB_<)NTw>(zCcx#VcwE4+l|$em~_Q-WAZVNNQ0eo2G48{|Iv7F@O79amAC;hCIHP;s67QyNwmE)q01K!93Yd!sNw)?0 z-nvYDC)o5PXnjrS|CR&D)|Y!?aPSaFLu-`A*d*w1U6^STRHz#c)zAQU@J<0zUYq81_$H_9oX{=b*PN3N#BUHv#F_`|&r|);G2!;J zK%IO2AI=WT_lu$^cXD(8ROGVikiX~Vz6It!CSRX@`r=h36p$a(^`9CGg}OtbCH`P9 KHJbQ;n*RlMQBSV` diff --git a/software/CPM/CPM32_ZCPR3/NZBLTZ14.CFG b/software/CPM/CPM32_ZCPR3/NZBLTZ14.CFG deleted file mode 100755 index 5ffb87515d630ac11bee5ad62dcf2cd9c8dda5bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmb_cO>fgc5M8GdO%3JIEf^gQB)cRi{9ETjEV@)%Hf-b*tPs@Uyt{ z1NbEzxHGfTDVG@O~oJyht>7(+{wY z6Or*$z>DeZ%%6|W{h`}FFd9OA5V|-8EkW@+0UQ#^LlMGd@VSj>o?&dDhzfQ}ixlFN zZv@=ONdjMlNfJV_#e@w6AHdreEDJk!-N61gpbk_!ZJmfnpc7GDikjbei*wiWE`X~V zLQ}tQSH-%1)$KzN&sR}=hm$^l!PJ0|bgND3v?BEc+4eIna?p{0P^dV^EaAWCNA)OX zE%OuxwG{61`eNV$ToFm|&aqb!&-n@yDoFW`SS*wXT^!Xy6%;IPsbnBD#pC)wyoOj0 z6v*2~x4mi#Q&+LLW*EAY1%xsiXt?K@cI;Lt!E4b>y-L%W(ex8(Iu=0Oh1Bj+QX|VK zRv=+_4AB D`PzF( diff --git a/software/CPM/CPM32_ZCPR3/NZBLTZ14.HZP b/software/CPM/CPM32_ZCPR3/NZBLTZ14.HZP deleted file mode 100755 index 86d8590c52609744835780b8b4836cf1b7b5f449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 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 bp&B!zp;gOobPiKAdsQxgWpmpX`+xCY>qOpN diff --git a/software/CPM/CPM32_ZCPR3/NZCOM.COM b/software/CPM/CPM32_ZCPR3/NZCOM.COM deleted file mode 100755 index b80c4d3a2aced8065813f4f56d79ebdecfe1fc0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10624 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 diff --git a/software/CPM/CPM32_ZCPR3/NZCPR.LBR b/software/CPM/CPM32_ZCPR3/NZCPR.LBR deleted file mode 100755 index 1f51b0f6268bcfc853364749fe325d045ddab8b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37760 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 Uab|HsPaEPB?or$~{lESG2e4GOMF0Q* diff --git a/software/CPM/CPM13_MTPUG_01/PAGE.DOC b/software/CPM/CPM13_MTPUG_01/PAGE.DOC deleted file mode 100644 index ecec855..0000000 --- a/software/CPM/CPM13_MTPUG_01/PAGE.DOC +++ /dev/null @@ -1,14 +0,0 @@ - - The command 'PAGE ' causes a file to be displayed a-page-at- - a-time on the console. At the end of every 23 rd line, PAGE will print - the prompt 'MORE...' at the bottom corner of the screen, any response - except ESC, ^Q, ^C, ^X, ^Z, 'Q', 'q', 's', 'S', 'N', or 'n' will - abort the program. - - WARNING: PAGE uses character 1A hex to clear the screen, and assumes - an 80-by-24 screen. - - PAGE was written in PASCAL/MT by T. W. Lougeed and is in the public - domain. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/PAGE.PAS b/software/CPM/CPM13_MTPUG_01/PAGE.PAS deleted file mode 100644 index a46a5f0..0000000 --- a/software/CPM/CPM13_MTPUG_01/PAGE.PAS +++ /dev/null @@ -1,172 +0,0 @@ -PROGRAM PAGE10; - -{ This program is a CP/M utility for use with an 80 by 24 CRT. -It types out a page at a time to the screen. - -First version 1 August 1980 - -By T. W. Lougheed - Dept. of T. & A. Mechanics - Thurston Hall, Cornell U. - Ithaca, NY 14853 - - home phone 272-4993 - -Last version 10 February 1981 } - - -CONST HEIGHT = 24; { Dimensions of the screen in real characters. } - WIDTH = 80; - - { ASCII controll-codes. } - - EOF = $1A; { CP/M End-of-file marker: ^Z. } - BRK = $10; { Data-link escape: break: ^P. } - ESC = $1B; { Escape. } - NAK = $15; { Negative acknowledge: ^U. } - CAN = $18; { Cancel: ^X. } - BS = $08; { Backspace: ^H. } - TAB = $09; { Horizontal tab: ^I. } - CR = $0D; { Caraige-return: ^M. } - LF = $0A; { Linefeed: ^J. } - VT = $0B; { Vertical tab: ^K. } - FF = $0C; { Formfeed: ^L. } - DEL = $7F; { Rubout. } - -VAR C, D : CHAR; - K, L : INTEGER; - { Count of characters and lines for paging. } - { K = last character written on current line, L = current line. } - CANCELED : BOOLEAN; - { Flag used to stop looping. } - FNAME : STRING[127]; - { The name of the source file. } - SOURCE : FILE OF PACKED ARRAY [1..4096] OF CHAR; - { Note: NOT A TEXT-FILE! This means no meddling by PASCAL with - the data from the file. We will read from the file using the - procedure GNB (Get Next Byte) supplied with PASCAL/MT. - Given the array-limits 1..4096 it reads 32 records at a time, - which causes less rattle on the drives than one record at a time. } - COMMANDS, - POSITIVE, - NEGATIVE : SET OF CHAR; - { Types of responses to the "... more " prompt. } - - - - -{ Inserts into FNAME the data in the CP/M command buffer at $0080. } - -PROCEDURE CPM_COMMAND_LINE; - VAR BUFFER : ABSOLUTE[ $0080 ] PACKED ARRAY[0..127] OF CHAR; - BEGIN - MOVE( BUFFER, FNAME, 127 ); - END; - -{ Erases the screen for an IMSAI VIO board. } - -PROCEDURE CLEAR; - BEGIN WRITE( CHR(EOF) ); END; - - - -BEGIN { PAGE } - -POSITIVE := [ ' ', 'y', 'Y', 'g', 'G', 'c', 'C', CHR(CR), CHR(LF) ]; -NEGATIVE := [ 'q', 'Q', 'n', 'N', 'e', 'E', 'x', 'X', - CHR(CAN), CHR(NAK), CHR(EOF), CHR(ESC), CHR(BRK) ]; -COMMANDS := POSITIVE + NEGATIVE; - -{ Get the file name from the buffer. } -CPM_COMMAND_LINE; - -REPEAT - { If none available, then ask for one. } - IF (LENGTH( FNAME ) = 0) OR (FNAME = ' ') THEN - REPEAT WRITE( 'File ? ' ); READ( FNAME ) UNTIL LENGTH( FNAME ) > 0; - { Open the source file. K <> 255 if everything's okay. } - OPEN( SOURCE, FNAME, K ); - IF K >= 249 THEN BEGIN - WRITE( 'Unable to open file "', FNAME, - '", BDOS error ', K:3, '. Quit ? ' ); - READ( D ); WRITELN; - IF D IN [ 'q', 'Q', 'y', 'Y', 'e', 'E' ] THEN EXIT; - FNAME := ''; - END; - UNTIL K < 249; - - -{ Cosmetics. } -CLEAR; -WRITELN( '------------------------------------------------------------------', - '-------------' ); - - - -{ Preparation for paging loop. } - -C := GNB( SOURCE ); K := 0; { Character last printed (LF). } -CANCELED := FALSE; L := 2; { Line currently on. } - - -{ Central loop. } - -REPEAT - - { Choose what to do with the character. } - - CASE ORD(C) OF - LF : BEGIN K := 0; L := L + 1 END; - TAB : BEGIN - IF K < 71 { If it will fit on this line. } - THEN REPEAT - WRITE( ' ' ); K := K + 1; - UNTIL (K > 1) AND ((K-1) MOD 8 = 0) - ELSE BEGIN WRITELN; L := L + 1; K := 0 END; - END; - FF, VT : - WHILE L < HEIGHT - 1 DO BEGIN WRITELN; L := L + 1 END; - ELSE IF K < WIDTH THEN BEGIN WRITE( C ); K := K + 1 END - ELSE WRITE( CHR(BS), C ); { No scroll-over. } - END; - - - { When the following is indeed true, one presumably is at the beginning - of the last line on the screen. } - - IF L + 1 >= HEIGHT THEN BEGIN - - WRITE( CHR(CR), ' ':69, '... more ' ); READ( D ); - - WHILE NOT (D IN COMMANDS) OR (D = '?') DO BEGIN - WRITELN; - WRITELN( 'To continue paging, type a blank or .' ); - WRITELN( 'To stop paging type "N", "Q", "X", ^X, ^U,', - ' , or .' ); - WRITE( ' ':70, '... more ' ); READ( D ); - END; - - CANCELED := D IN NEGATIVE; - - IF NOT CANCELED THEN BEGIN - CLEAR; - L := 1; { Which puts the cursor back at the top. } - END; - - END; - - - C := GNB( SOURCE ); - UNTIL (C = CHR(EOF)) OR CANCELED; - -{ Cosmetic sign-off. } -WRITELN( '-----------------------------------------------------------------', - '--------------' ); -WRITELN( 'PAGE version 10 file "', - FNAME, '"' ); -WRITELN; - -END { PAGE } -. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/PLOT.BAK b/software/CPM/CPM13_MTPUG_01/PLOT.BAK deleted file mode 100644 index d5aa4f2..0000000 --- a/software/CPM/CPM13_MTPUG_01/PLOT.BAK +++ /dev/null @@ -1,315 +0,0 @@ -{ The following program plots dots on the screen, putting an X -and Y axis on the screen and scaling automaticly, when not well -instructed, to fit all the points on the screen with the given -constraint of the number of rows and columns allowed. } - -MODULE PLOT15; - -CONST ROWS = 23; { Previously passed as paramiters. } - COLS = 80; - -TYPE POINT = RECORD X, Y :REAL END; - - -{ This procedure plots an X,Y graph of the given DATA on the whole -screen, plotting its own axis grid. All management of the screen takes -place here. } - -PROCEDURE PLOT ( - L : INTEGER; { Number of points to plot. } - VAR DATA : ARRAY[ M..N :INTEGER ] OF POINT; { Stuff to plot; conformant - array; "VAR" simply to avoid passing excessive paramiters. } - ORIGIN : POINT; { Location of origin -- if out-of-bounds it is - set to lie at the upper corner of the screen. } - X_MIN, - X_MAX, { Bounds for X & Y values. If MAX <= MIN then .. } - Y_MIN, { .. scaling is done automaticly for that axis. } - Y_MAX : REAL - ); - - -VAR C : CHAR; { Dummy input. } - I, J, K : INTEGER; { Dummy indicies. } - ORIGINAL : BYTE; { Remember the VIO mode on entry. } - QUIT : BOOLEAN; { "Bad input" flag. } - SCREEN : ABSOLUTE[ $F000 ] ARRAY[ 1..24, 1..80 ] OF BYTE; - { Direct access to screen image. } - SX, { Scaling ration for X values. } - SY : REAL; { Scaling constant for Y values. } - VIO_CONTROLL : ABSOLUTE[ $F7FF ] BYTE; - { VIO board controll byte. } - - -{ This procedure checks for the paramiters. } - -PROCEDURE CHECKOUT; - VAR K : INTEGER; - BEGIN - - QUIT := FALSE; { Assume all is Okay until told otherwise. } - - { Do not allow more than the maximum number of points. } - IF M >= N THEN BEGIN - WRITELN; - WRITELN( 'Problem in procedure PLOT: indexes are backwards: ', - N:4, ' - ', M:4, ' is not positive.' ); - WRITELN( 'Be advised to check the paramiters in the procedure call.' ); - QUIT := TRUE; - END; - - { Be sure not to over-run the end of DATA. } - IF L > N - M THEN BEGIN - WRITELN; - WRITELN( 'Problem in procedure PLOT: the number of points ', L:5, - ' is larger than the allowed number ', N:5, '-', M:5, '.' ); - WRITELN( 'Be advised to check the paramiters in the procedure call.' ); - QUIT := TRUE; - END; - - IF QUIT THEN BEGIN WRITELN( 'Quitting PLOT.' ); EXIT END; - - - { The preceding errors were "fatal" the following are recoverable. } - - - { If a propper X_MAX, X_MIN pair is not provided, get one. } - - IF X_MIN >= X_MAX THEN BEGIN - DATA[M].X := X_MAX; X_MIN := X_MAX; - FOR K := M + 1 TO M + L - 1 DO WITH DATA[ K ] DO - IF X > X_MAX THEN X_MAX := X - ELSE IF X < X_MIN THEN X_MIN := X; - END; - - IF X_MIN = X_MAX THEN BEGIN { If correction fails. } - WRITELN; - WRITELN( 'Note well: upper and lower bounds for X are identical (', - X_MIN, ' ).' ); - X_MIN := X_MIN - 1; X_MAX := X_MAX + 1; - END; - - - { Make sure origin is correctly defined on the X axis. } - - IF NOT( (X_MIN <= ORIGIN.X) AND (ORIGIN.X <= X_MAX) ) - THEN IF (X_MIN <= 0) AND (0 <= X_MAX) THEN ORIGIN.X := 0 - ELSE ORIGIN.X := X_MIN; { Defaults to upper corner. } - - - { If a propper Y_MIN, Y_MAX pair is not provided, get one. } - - IF Y_MIN >= Y_MAX THEN BEGIN - DATA[M].Y := Y_MAX; Y_MIN := Y_MAX; - FOR K := M + 1 TO M + L - 1 DO WITH DATA[ K ] DO - IF Y > Y_MAX THEN Y_MAX := Y - ELSE IF Y < Y_MIN THEN Y_MIN := Y; - END; - - IF Y_MIN = Y_MAX THEN BEGIN { If correction fails. } - WRITELN; - WRITELN( 'Note well: upper and lower limits for Y are identical (', - Y_MIN, ').' ); - Y_MIN := Y_MIN - 1; Y_MAX := Y_MAX + 1; - END; - - - { Likewise make sure the origin's Y-co-ordinate is sensible. } - - IF NOT( (Y_MIN <= ORIGIN.Y) AND (ORIGIN.Y <= Y_MAX) ) - THEN IF (Y_MIN <= 0) AND (0 <= Y_MAX) THEN ORIGIN.Y := 0 - ELSE ORIGIN.Y := Y_MIN; { Defaults to upper corner. } - - - END; { of CHECKOUT } - - - -{ This procedure erases the screen. } - -PROCEDURE CLEAR; - { Writing a controll-Z causes the VIO firmware to clear the screen, - as long as the VIO board is in the TEXT or EXTENDED text mode. } - BEGIN WRITE( CHR($1A) ) END; - - -{ This procedure sets the screen to full graphics mode (graphics and text, -but no reverse-video characters. } - -PROCEDURE GRAPHICS_MODE; - CONST ESC = $1B; { The ASCII character code. } - BEGIN - CLEAR; { Start with a clean slate. } - { Prepare for restoration made at exit of the enclosing procedure. } - ORIGINAL := VIO_CONTROLL; { Memorize the original VIO mode setting. } - { The VIO firmware will put the screen into the mode upon recieving - the " 'G' " sequence. The primary benefit of not going directly - to the VIO-port is to get the fuzzy cursor turned on. } - WRITE( CHR(ESC), 'G' ); - END; - - - -{ The following procedure returns the screen to the mode it was in -when the program entered. Note that this procedure requires the -procedure GRAPHICS_MODE to have been called previously to work -propperly, though it will, probably, default to good options anyway. } - -PROCEDURE RESTORE_MODE; - CONST ESC = $1B; { The ASCII character code. } - BEGIN - { On entry, one is in POSITIVE video mode, MODE III set on, - and a 24 lines by 80 column screen. To what extent this was - not the case in the original it is reset. } - - { Restore number of columns if needed. } - IF (ORIGINAL & $01) <> 0 THEN WRITE( CHR(ESC), 'C' ); - { Restore number of rows if needed. } - IF (ORIGINAL & $02) <> 0 THEN WRITE( CHR(ESC), 'L' ); - { Restore mode if not set propperly. } - CASE ORIGINAL & $0C OF - $00, { Null mode, which is undesirable, defaults to TEXT. } - $08 : WRITE( CHR(ESC), 'T' ); { TEXT mode -- chrs $20..$7F } - $04 : WRITE( CHR(ESC), 'E' ); { EXTENDED mode -- chrs $A0..$FF } - $0C :; { For completeness -- GRAPHICS mode with full text. } - END; { of CASE } - { Turn on reverse video if thats the way it was. } - IF (ORIGINAL & $10) <> 0 THEN WRITE( CHR(ESC), 'V' ); - CLEAR; { Be neat and leave a blank screen. } - - END; - - - -{ The following uses an "Escape Sequence" to position the cursor. -An escape sequence is part of the VIO firmware, and an explanation -can be found in the "IMSAI VDP-80 Referance Manual" section III, -page 43 ("the addressable cursor"). } - -PROCEDURE CURSOR( ROW, COLUMN :INTEGER); - CONST OFFSET = $1F; { The VIO software offsets all addresses. } - ESC = $1B; { The ASCII character code. } - VAR A, B : CHAR; - BEGIN - A := CHR( OFFSET + ROW ); - B := CHR( OFFSET + COLUMN ); - { The '=' character signals a relocation of the cursor. } - WRITE( CHR(ESC), '=', A, B ); - END; - - - -{ This procedure draws a pair of axes with origin at row I column J. } - -PROCEDURE AXES( I, J :INTEGER ); - VAR K, L :INTEGER; { Dummy index. } - BEGIN - - { Idiot proofing upon idiot proofing. } - IF I > ROWS THEN I := ROWS ELSE IF I < 1 THEN I := 1; - IF J > COLS THEN J := COLS ELSE IF J < 1 THEN J := 1; - - { Prepare the screen. } - CURSOR( 24, 1 ); { Get the cursor out of the way. } - { For some reason, a stray dot occasionally remains on the screen on - the top row. We expurgate it by directly putting blanks on the - whole screen. } - FOR K := 1 TO COLS DO FOR L := 1 TO ROWS DO SCREEN[ L, K ] := ' '; - - { Make ordinate (Y axis). } - { Note that it runs horizontally, contrary to custom. } - FOR K := 1 TO COLS-1 DO IF (K - J) MOD 6 = 0 { One tick every 12 dots. } - THEN SCREEN[ I, K ] := CHR( $CB ) { Ticked bar 'T'. } - ELSE SCREEN[ I, K ] := CHR( $CA ); { Plain dash '-' . } - SCREEN[ I, COLS ] := 'y'; { Label axis. } - - { Make abscissa (X-axis). } - { Note that it runs vertically, also uncustomary. } - FOR K := 1 TO ROWS-1 DO IF (K - I) MOD 3 = 0 { One tick every 9 dots. } - THEN SCREEN[ K, J ] := CHR( $CD ) { Ticked line 'L'. } - ELSE SCREEN[ K, J ] := CHR( $C5 ); { Plain, vertical line '|'. } - SCREEN[ ROWS, J ] := 'x'; { Label axis. } - - { Put in origin. } - SCREEN[ I, J ] := CHR( $CF ); { A '+' sign. } - - END; { AXES } - - - -{ This procedure places a dot in the appropriate position on the -screen, using the character-block plotting set. The co-ordinates -of the dot are expected to be 1 <= I <= 72, 1 <= J <= 160. } - -PROCEDURE PLACE_DOT ( I, J :INTEGER ); - - VAR BIT, { Block in cell to be plotted. } - K, L, { Character cell to be plotted in. } - CELL : INTEGER; { Order of character on the screen. } - - BEGIN - - { If the dot is off screen, then plot it on the margin. } - IF I < 1 THEN I := 1 ELSE IF I > 3*ROWS THEN I := 3*ROWS; - IF J < 1 THEN J := 1 ELSE IF J > 2*COLS THEN J := 2*COLS; - - { Co-ordinates of the dot's cell on the screen. } - K := (I - 1) DIV 3 + 1; L := (J - 1) DIV 2 + 1; - - { Cell now becomes the contents of the memory. } - CELL := ORD( SCREEN[ K, L ] ); - - { If not a block character, set to a blank block. } - IF (CELL < $80) OR ($BF < CELL) THEN CELL := $80; - - { Add the bit of the desired dot to the existing block pattern. } - BIT := 5 - (I - 1) MOD 3 - 3*((J - 1) MOD 2); - SETBIT( CELL, BIT ); - - { Install the revised pattern on the screen. } - SCREEN[ K, L ] := CHR( CELL ); - - END; { of POINT } - - -BEGIN - - { Make sure all the paramiters make sense. } -CHECKOUT; IF QUIT THEN EXIT; - - { Turn on VIO board's full-set mode (includes both graphics & letters). } -GRAPHICS_MODE; - - -{ Make the axes. } - -I := 1 + ROUND( (ROWS - 1)*(ORIGIN.X - X_MIN)/(X_MAX - X_MIN) ); -J := 1 + ROUND( (COLS - 1)*(ORIGIN.Y - Y_MIN)/(Y_MAX - Y_MIN) ); -AXES( I, J ); { Plot co-ordinate lines. } - - -{ Plotting. } - - { Scale factors. } -SX := (3*ROWS - 1)/(X_MAX - X_MIN); -SY := (2*COLS - 1)/(Y_MAX - Y_MIN); - - { Note that if a point is out-of-bounds, it will be -placed on the appropriate margin without comment. } -FOR K := M TO L+M-1 DO WITH DATA[ K ] DO - PLACE_DOT( ROUND( SX*(X - X_MIN) ) + 1, ROUND( SY*(Y - Y_MIN) ) + 1 ); - - -{ Postlude. } - -CURSOR( 24, 1 ); -WRITE( 'dx =', 9/SX, ' dy =', 12/SY, - ' Hit any key when done looking. ' ); - { When input is recieved, return VIO to mode when entered. } -READ( C ); -RESTORE_MODE; - -END; { of PLOT } - -MODEND. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/PLOT.MOD b/software/CPM/CPM13_MTPUG_01/PLOT.MOD deleted file mode 100644 index f8dca6d..0000000 --- a/software/CPM/CPM13_MTPUG_01/PLOT.MOD +++ /dev/null @@ -1,331 +0,0 @@ -{ Copyright (c) by T. W. Lougheed 24 April 1981 } - -{ The following program plots dots on the screen, putting an X -and Y axis on the screen and scaling automaticly, when not well -instructed, to fit all the points on the screen with the given -constraint of the number of rows and columns allowed. } - - -{ First version 15 September 1981 - - By T. W. Lougheed - Dept. T. & A. Mechanics - Thurston Hall, Cornell U. - Ithaca, NY 14853 - - Last version 24 April 1981 } - -{ This program is in the public domain and may not be sold by any -person or corperation without express permission of the author. } - - -MODULE PLOT15; - -CONST ROWS = 23; { Dimensions of the screen. } - COLS = 80; - -TYPE POINT = RECORD X, Y :REAL END; - - -{ This procedure plots an X,Y graph of the given DATA on the whole -screen, plotting its own axis grid. All management of the screen takes -place here. } - -PROCEDURE PLOT ( - L : INTEGER; { Number of points to plot. } - VAR DATA : ARRAY[ M..N :INTEGER ] OF POINT; { Stuff to plot; conformant - array; "VAR" simply to avoid passing excessive paramiters. } - ORIGIN : POINT; { Location of origin -- if out-of-bounds it is - set to lie at the upper corner of the screen. } - X_MIN, - X_MAX, { Bounds for X & Y values. If MAX <= MIN then .. } - Y_MIN, { .. scaling is done automaticly for that axis. } - Y_MAX : REAL - ); - - -VAR C : CHAR; { Dummy input. } - I, J, K : INTEGER; { Dummy indicies. } - ORIGINAL : BYTE; { Remember the VIO mode on entry. } - QUIT : BOOLEAN; { "Bad input" flag. } - SCREEN : ABSOLUTE[ $F000 ] ARRAY[ 1..24, 1..80 ] OF BYTE; - { Direct access to screen image. } - SX, { Scaling ration for X values. } - SY : REAL; { Scaling constant for Y values. } - VIO_CONTROLL : ABSOLUTE[ $F7FF ] BYTE; - { VIO board controll byte. } - - -{ This procedure checks for the paramiters. } - -PROCEDURE CHECKOUT; - VAR K : INTEGER; - BEGIN - - QUIT := FALSE; { Assume all is Okay until told otherwise. } - - { Do not allow more than the maximum number of points. } - IF M >= N THEN BEGIN - WRITELN; - WRITELN( 'Problem in procedure PLOT: indexes are backwards: ', - N:4, ' - ', M:4, ' is not positive.' ); - WRITELN( 'Be advised to check the paramiters in the procedure call.' ); - QUIT := TRUE; - END; - - { Be sure not to over-run the end of DATA. } - IF L - 1 > N - M THEN BEGIN - WRITELN; - WRITELN( 'Problem in procedure PLOT: the number of points ', L:5, - ' is larger than the allowed number ', N:5, '-', M:5, '+1.' ); - WRITELN( 'Be advised to check the paramiters in the procedure call.' ); - QUIT := TRUE; - END; - - IF QUIT THEN BEGIN WRITELN( 'Quitting PLOT.' ); EXIT END; - - - { The preceding errors were "fatal" the following are recoverable. } - - - { If a propper X_MAX, X_MIN pair is not provided, get one. } - - IF X_MIN >= X_MAX THEN BEGIN - DATA[M].X := X_MAX; X_MIN := X_MAX; - FOR K := M + 1 TO M + L - 1 DO WITH DATA[ K ] DO - IF X > X_MAX THEN X_MAX := X - ELSE IF X < X_MIN THEN X_MIN := X; - END; - - IF X_MIN = X_MAX THEN BEGIN { If correction fails. } - WRITELN; - WRITELN( 'Note well: upper and lower bounds for X are identical (', - X_MIN, ' ).' ); - X_MIN := X_MIN - 1; X_MAX := X_MAX + 1; - END; - - - { Make sure origin is correctly defined on the X axis. } - - IF NOT( (X_MIN <= ORIGIN.X) AND (ORIGIN.X <= X_MAX) ) - THEN IF (X_MIN <= 0) AND (0 <= X_MAX) THEN ORIGIN.X := 0 - ELSE ORIGIN.X := X_MIN; { Defaults to upper corner. } - - - { If a propper Y_MIN, Y_MAX pair is not provided, get one. } - - IF Y_MIN >= Y_MAX THEN BEGIN - DATA[M].Y := Y_MAX; Y_MIN := Y_MAX; - FOR K := M + 1 TO M + L - 1 DO WITH DATA[ K ] DO - IF Y > Y_MAX THEN Y_MAX := Y - ELSE IF Y < Y_MIN THEN Y_MIN := Y; - END; - - IF Y_MIN = Y_MAX THEN BEGIN { If correction fails. } - WRITELN; - WRITELN( 'Note well: upper and lower limits for Y are identical (', - Y_MIN, ').' ); - Y_MIN := Y_MIN - 1; Y_MAX := Y_MAX + 1; - END; - - - { Likewise make sure the origin's Y-co-ordinate is sensible. } - - IF NOT( (Y_MIN <= ORIGIN.Y) AND (ORIGIN.Y <= Y_MAX) ) - THEN IF (Y_MIN <= 0) AND (0 <= Y_MAX) THEN ORIGIN.Y := 0 - ELSE ORIGIN.Y := Y_MIN; { Defaults to upper corner. } - - - END; { of CHECKOUT } - - - -{ This procedure erases the screen. } - -PROCEDURE CLEAR; - { Writing a controll-Z causes the VIO firmware to clear the screen, - as long as the VIO board is in the TEXT or EXTENDED text mode. } - BEGIN WRITE( CHR($1A) ) END; - - -{ This procedure sets the screen to full graphics mode (graphics and text, -but no reverse-video characters. } - -PROCEDURE GRAPHICS_MODE; - CONST ESC = $1B; { The ASCII character code. } - BEGIN - CLEAR; { Start with a clean slate. } - { Prepare for restoration made at exit of the enclosing procedure. } - ORIGINAL := VIO_CONTROLL; { Memorize the original VIO mode setting. } - { The VIO firmware will put the screen into the mode upon recieving - the " 'G' " sequence. The primary benefit of not going directly - to the VIO-port is to get the fuzzy cursor turned on. } - WRITE( CHR(ESC), 'G' ); - END; - - - -{ The following procedure returns the screen to the mode it was in -when the program entered. Note that this procedure requires the -procedure GRAPHICS_MODE to have been called previously to work -propperly, though it will, probably, default to good options anyway. } - -PROCEDURE RESTORE_MODE; - CONST ESC = $1B; { The ASCII character code. } - BEGIN - { On entry, one is in POSITIVE video mode, MODE III set on, - and a 24 lines by 80 column screen. To what extent this was - not the case in the original it is reset. } - - { Restore number of columns if needed. } - IF (ORIGINAL & $01) <> 0 THEN WRITE( CHR(ESC), 'C' ); - { Restore number of rows if needed. } - IF (ORIGINAL & $02) <> 0 THEN WRITE( CHR(ESC), 'L' ); - { Restore mode if not set propperly. } - CASE ORIGINAL & $0C OF - $00, { Null mode, which is undesirable, defaults to TEXT. } - $08 : WRITE( CHR(ESC), 'T' ); { TEXT mode -- chrs $20..$7F } - $04 : WRITE( CHR(ESC), 'E' ); { EXTENDED mode -- chrs $A0..$FF } - $0C :; { For completeness -- GRAPHICS mode with full text. } - END; { of CASE } - { Turn on reverse video if that's the way it was. } - IF (ORIGINAL & $10) <> 0 THEN WRITE( CHR(ESC), 'V' ); - CLEAR; { Be neat and leave a blank screen. } - - END; - - - -{ The following uses an "Escape Sequence" to position the cursor. -An escape sequence is part of the VIO firmware, and an explanation -can be found in the "IMSAI VDP-80 Referance Manual" section III, -page 43 ("the addressable cursor"). } - -PROCEDURE CURSOR( ROW, COLUMN :INTEGER); - CONST OFFSET = $1F; { The VIO software offsets all addresses. } - ESC = $1B; { The ASCII character code. } - VAR A, B : CHAR; - BEGIN - A := CHR( OFFSET + ROW ); - B := CHR( OFFSET + COLUMN ); - { The '=' character signals a relocation of the cursor. } - WRITE( CHR(ESC), '=', A, B ); - END; - - - -{ This procedure draws a pair of axes with origin at row I column J. } - -PROCEDURE AXES( I, J :INTEGER ); - VAR K, L :INTEGER; { Dummy index. } - BEGIN - - { Idiot proofing upon idiot proofing. } - IF I > ROWS THEN I := ROWS ELSE IF I < 1 THEN I := 1; - IF J > COLS THEN J := COLS ELSE IF J < 1 THEN J := 1; - - { Prepare the screen. } - CURSOR( 24, 1 ); { Get the cursor out of the way. } - { For some reason, a stray dot occasionally remains on the screen on - the top row. We expurgate it by directly putting blanks on the - whole screen. } - FOR K := 1 TO COLS DO FOR L := 1 TO ROWS DO SCREEN[ L, K ] := ' '; - - { Make ordinate (Y axis). } - { Note that it runs horizontally, contrary to custom. } - FOR K := 1 TO COLS-1 DO IF (K - J) MOD 6 = 0 { One tick every 12 dots. } - THEN SCREEN[ I, K ] := CHR( $CB ) { Ticked bar 'T'. } - ELSE SCREEN[ I, K ] := CHR( $CA ); { Plain dash '-' . } - SCREEN[ I, COLS ] := 'y'; { Label axis. } - - { Make abscissa (X-axis). } - { Note that it runs vertically, also uncustomary. } - FOR K := 1 TO ROWS-1 DO IF (K - I) MOD 3 = 0 { One tick every 9 dots. } - THEN SCREEN[ K, J ] := CHR( $CD ) { Ticked line 'L'. } - ELSE SCREEN[ K, J ] := CHR( $C5 ); { Plain, vertical line '|'. } - SCREEN[ ROWS, J ] := 'x'; { Label axis. } - - { Put in origin. } - SCREEN[ I, J ] := CHR( $CF ); { A '+' sign. } - - END; { AXES } - - - -{ This procedure places a dot in the appropriate position on the -screen, using the character-block plotting set. The co-ordinates -of the dot are expected to be 1 <= I <= 72, 1 <= J <= 160. } - -PROCEDURE PLACE_DOT ( I, J :INTEGER ); - - VAR BIT, { Block in cell to be plotted. } - K, L, { Character cell to be plotted in. } - CELL : INTEGER; { Order of character on the screen. } - - BEGIN - - { If the dot is off screen, then plot it on the margin. } - IF I < 1 THEN I := 1 ELSE IF I > 3*ROWS THEN I := 3*ROWS; - IF J < 1 THEN J := 1 ELSE IF J > 2*COLS THEN J := 2*COLS; - - { Co-ordinates of the dot's cell on the screen. } - K := (I - 1) DIV 3 + 1; L := (J - 1) DIV 2 + 1; - - { Cell now becomes the contents of the memory. } - CELL := ORD( SCREEN[ K, L ] ); - - { If not a block character, set to a blank block. } - IF (CELL < $80) OR ($BF < CELL) THEN CELL := $80; - - { Add the bit of the desired dot to the existing block pattern. } - BIT := 5 - (I - 1) MOD 3 - 3*((J - 1) MOD 2); - SETBIT( CELL, BIT ); - - { Install the revised pattern on the screen. } - SCREEN[ K, L ] := CHR( CELL ); - - END; { of POINT } - - -BEGIN - -{ Make sure all the paramiters make sense. } -CHECKOUT; IF QUIT THEN EXIT; - -{ Turn on VIO board's full-set mode (includes both graphics & letters). } -GRAPHICS_MODE; - - -{ Make the axes. } - -I := 1 + ROUND( (ROWS - 1)*(ORIGIN.X - X_MIN)/(X_MAX - X_MIN) ); -J := 1 + ROUND( (COLS - 1)*(ORIGIN.Y - Y_MIN)/(Y_MAX - Y_MIN) ); -AXES( I, J ); { Plot co-ordinate lines. } - - -{ Plotting. } - -{ Scale factors. } -SX := (3*ROWS - 1)/(X_MAX - X_MIN); -SY := (2*COLS - 1)/(Y_MAX - Y_MIN); - -{ Note that if a point is out-of-bounds, it will be -placed on the appropriate margin without comment. } -FOR K := M TO L+M-1 DO WITH DATA[ K ] DO - PLACE_DOT( ROUND( SX*(X - X_MIN) ) + 1, ROUND( SY*(Y - Y_MIN) ) + 1 ); - - -{ Postlude. } - -CURSOR( 24, 1 ); -WRITE( 'dx =', 9/SX, ' dy =', 12/SY, - ' Hit any key when done looking...' ); -{ When input is recieved, return VIO to mode when entered. } -READ( C ); -RESTORE_MODE; - -END; { of PLOT } - -MODEND. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/RANDOM.REL b/software/CPM/CPM13_MTPUG_01/RANDOM.REL deleted file mode 100644 index 671a62b85beebff8d3cb7138653ef0c94af64984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmZpjG9h@P@a2S56_F<{Uv5bHii!$)vRTCN;9zf zU)=n+<*&4T$NGz#zr-oBFi0dYFi5ZnR`0*LMS}5HUj2Tb0}LG;3}+b_q#YQTOJ4lS zn;Wlxx%lg^w0af?2ew=ThTLESwwD(_+_lbT;UyMO-j>TllcM&8Q?s;3kc7`&c-*A8vE zSg%>@R=MGq5p+*%i=ZNk8i%fP@S{`2qb0tQK-8?u%#a5y9|o?g4_X~C`o3J%O$ z3mz8i_dS38<;*`%1@_B7o(`7kI-0bBLxACJgh7;^*lN+)B?qMR#JGD`Jx$u27r>nL ztO0IFgX01Q?=?&;4A$X%;v6j^42c&HaGdbqa}En}^9kvB(~#maH6>J4$ct6xY^ zuyfB0hAW{hQ(ZF7ZD4hC@eFh6>1?=?ay8_r$0-d~Pq4s-29qfz5hphA`TB&o1_jMw LU|^UhMH~PCZ}HL< diff --git a/software/CPM/CPM13_MTPUG_01/RANDOM.SRC b/software/CPM/CPM13_MTPUG_01/RANDOM.SRC deleted file mode 100644 index cd4a9aa..0000000 --- a/software/CPM/CPM13_MTPUG_01/RANDOM.SRC +++ /dev/null @@ -1,181 +0,0 @@ -;================================================== -; PROGRAM TITLE: Random Number Generator -; -; WRITTEN BY: Raymond E. Penley -; DATE WRITTEN: 27 June 1980 -; -; WRITTEN FOR: Pascal/Z Users Group -; -; SUMMARY: -; Implements a Fibonacci series Random number generator. -; RANDOM will return numbers from 0 to x -; -; Call as Returns -; ------- ------------ -; real := RANDOM(10); 0.0 to 10.0 -; real := RANDOM(112); 0.0 to 112.0 -; I := TRUNC(RANDOM(10)); 0 to 10 -; -; ** -; Add these lines to your PASCAL source program: -; -; Procedure SEEDRAND; EXTERNAL; -; Functin RANDOM(X: Integer): REAL; external; -; -; Also within the body of the main program -; but BEFORE calling RANDOM(X); -; -; SEEDRAND; -; -;*** What would happen if you did not call SEEDRAND ? *** -; -;=============================================== -; -; PROCEDURE SEEDRAND; -; (* INITIAL VALUES FOR SEED1 AND SEED2 ARE HERE *) -; - NAME RANDOM - ENTRY SEEDRAND,RANDOM -; -SEEDRAND: - ENTR D,2,0 -; SEED1 := 10946; - MVI 0(IY),42 - MVI -1(IY),194 -; SEED2 := 17711 -; END; - MVI -2(IY),69 - MVI -3(IY),47 - EXIT D,0 -; -; -; -; Function Random(x: integer): real; -; (* -; GLOBAL -; SEED1, SEED2 : INTEGER *) -; CONST -; factor = Maxint; -; HALFINT = 16383; (* 1/2 OF MAXINT *) -; VAR -; x1 : real; -; temp1, temp2, HALF_ADDER : INTEGER; - -RANDOM: - ENTR D,2,10 -; (* Take 1/2 of the seeds for the comparison test *) -; temp1 := SEED1 DIV 2; - MOV L,-1(IY) - MOV H,0(IY) - LXI D,2 - DIVD D,0 - MOV -6(IX),H - MOV -7(IX),L -; temp2 := SEED2 DIV 2; - MOV L,-3(IY) - MOV H,-2(IY) - LXI D,2 - DIVD D,0 - MOV -8(IX),H - MOV -9(IX),L -; IF (temp1+temp2) >= HALFINT then{the number is too big -} - MOV L,-7(IX) - MOV H,-6(IX) - MOV E,-9(IX) - MOV D,-8(IX) - DADD D,0 - LXI D,16383 - GE D,0 -; { scale it down } -; HALF_ADDER := temp1 + temp2 - HALFINT - JNC L177 - MOV L,-7(IX) - MOV H,-6(IX) - MOV E,-9(IX) - MOV D,-8(IX) - DADD D,0 -; ELSE - LXI D,-16383 - DADD D,0 - MOV -4(IX),H - MOV -5(IX),L -; HALF_ADDER := temp1 + temp2; - JMP L197 -L177 - MOV L,-7(IX) - MOV H,-6(IX) - MOV E,-9(IX) - MOV D,-8(IX) - DADD D,0 - MOV -4(IX),H - MOV -5(IX),L -L197 -; SEED1 := SEED2; - MOV L,-3(IY) - MOV H,-2(IY) - MOV 0(IY),H - MOV -1(IY),L -; (* Restore from previous DIVision *) -; SEED2 := HALF_ADDER * 2; - MOV L,-5(IX) - MOV H,-4(IX) - DADD C - MOV -2(IY),H - MOV -3(IY),L -; (*---Convert X to real and divide by factor---*) -; x1 := ((X*1.0)/factor); - MOV L,8(IX) - MOV H,9(IX) - PUSH H - LXI H,320 - MOV D,A - MOV E,A - PUSH H - PUSH D - CVTF C - MULT D,-4 - CVTF A,32767 - FDVD D,-4 - LXI H,3 - DADD S - XCHG - PUSH IX - POP H - XCHG - LXI B,4 - LDDR - POP H - POP H -; (*---Return random number scaled by factor---*) -; RANDOM := ( SEED2 * x1 ); - MOV L,-3(IY) - MOV H,-2(IY) - PUSH H - LXI H,-4 - DADD S - SPHL - XCHG - PUSH IX - POP H - DCX H - DCX H - DCX H - LXI B,4 - LDIR - CVTF C - MULT D,-4 - LXI H,3 - DADD S - XCHG - PUSH IX - POP H - LXI B,13 - DADD B - XCHG - LXI B,4 - LDDR - POP H - POP H -; End{ of RANDOM(X) }; - EXIT D,2 - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/RNB.ERL b/software/CPM/CPM13_MTPUG_01/RNB.ERL deleted file mode 100644 index 1d114ad556e28c2c620af14e5bea50a723090c7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcma)(T}YE*7>4h6zpvBj_nEED%)ZTpp_D&Fqz5&|0`nl)$xwpYB7c$)Gdh*`VAk9` z(A+3ZWeAGD@rj8B25T9_z+qu^p#6BDh;<-zvIB|UeJXX>bMzeCT+e;qPv=@+Pk>Td zOdQ9YF}p~vRvAc%k0GlZs%jk(^7?wlB&HI8rJ~a6c+n~v64n^9-IQXhkwKN8jT>TQ z$S1~7X~Kzt5kVq}6`=5JX$?vgr3PC9L$;?G*nF^f?bbAKpls&KF)7CsX@$TTXWBV) z&7r3ug7Tkxm;$s+yFKm~&_359tKW_`F^wdt!%hiR_48p8x5XSPK_CgM1_jgWx!4rF zlI~Qg%J;=VjD;wpiKHC(4ofC7SKKs@<3C6Bq1s&-WN?fQRj#rvwi3eGKLtURiX z`7eYIqMi|Od;j#En?1z%@es5JOMAc}>96~@-;8>l0_BI7qS{SM{U@=2sf+nC`Mxc< zG2=FA(7fns^-P@yM6Z{4G!O%_gef%)%XMa?<{R8?R^x94JZqvj?qvw<9~w1)8(nAI z=vNk$9dLCZ>!nMAdM189E$q@L!sOh}(xndzQJb(z5+$!eas^awHEzgCfz$!L-ET*` zLa=c{{d`Ir|Is$M++;O&65b83Bz=j2zu*-)A|FLmh!m9_IWL~el>b8Mid*n~^NJoE zg8dwPrA~tFGIY+E>etLjy6ofv? 0 THEN NOSECTRS:=TRUE - END; - END; - IF NOSECTRS THEN - DSTPTR^ := CHR($FF) - ELSE - DSTPTR^ := FSECTOR[FSECINX]; - FSECINX := FSECINX + 1 - END; (* WITH *) - DSTPTR := DSTPTR + 1 - END; - @LFB^.BUFIDX := 0 (* SO GNB WORKS *) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/SBGETCH.SRC b/software/CPM/CPM13_MTPUG_01/SBGETCH.SRC deleted file mode 100644 index 68c3245..0000000 --- a/software/CPM/CPM13_MTPUG_01/SBGETCH.SRC +++ /dev/null @@ -1,31 +0,0 @@ -FUNCTION SB_GETCH:CHAR; -(* CONVERT MOST WORDSTAR COMMANDS TO SPP EQUIV. FRG-14JUL81 *) -VAR - CH : CHAR; - CHI, CHO : INTEGER; -BEGIN - SB_BIOS_CALL(CONIN,0); - INLINE("STA / CH); - CHI := ORD(CH); - CASE CHI OF {NEW COMMAND OLD FUNCTION} - $04 : CHO := $0C; { D L } - $05 : CHO := $0B; { E K } - $06 : CHO := $04; { F D } - $0A : CHO := $15; { J U } - $0B : CHO := $16; { K V } - $0C : CHO := $18; { L X } - $0F : CHO := $13; { O S } - $10 : CHO := $14; { P T } - $13 : CHO := $08; { S H } - $14 : CHO := $0F; { T O } - $15 : CHO := $17; { U W } - $16 : CHO := $06; { V F } - $17 : CHO := $05; { W E } - $18 : CHO := $0A; { X J } - $1F : CHO := $10; { - P } - ELSE CHO := CHI; - END ; (* CASE *) - SB_GETCH := CHR(CHO) -END; - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/SD.COM b/software/CPM/CPM13_MTPUG_01/SD.COM deleted file mode 100644 index cb3c3e5bd6a1cf1ce469efffa558fe990ff36889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmcIjUr1YL6#wp@^UXwav)jPBI5ao+hSA(XYEu~Ow%!glmBAJZjuwWk3ohDV&Fx~u zX`8egv}11@qw~c*>|tZDhq2NU*h4pORGP5+pj02EFQI4|w~Q((ok-mIqON=D+wQ}6 z&+mNaJLmWP&iTTGyrCxOu>>`SNxYFx#+zuo22zs)MD^2rv6AFkcO?ZO?iepp=8%u_ zk_SCT6RmldyE*fiBLjjZ?_3*N@>_e`CWo2Ay`)gIvz!#f11ICXWbV!QeKCBF6l#k7 z1xFiSKc#{F8E2k~Um!*=Y44LHjGV+s!;jVOaZ(7erWN8FfXgOm+Ij7at8Rh2XFP?{ zBTlCzcH;a?Wbr?72w7NFeF|DsK23w_E~p%JG4}G!iK&I3cuAIf3FBq=@N$S}*RyBA znSn&N()rH29g)uT#gvk{@;n)xUec{`m=_2;bYI6AV*=twH7L=2xdA|2XKRQZi> zUll%QU-(mUea>SUjkMNNxx^P%ui0IEe#vX0Qg_kRT%Dt|sd@G4Sb#~u2LjDwTAiRk zHC3Qt9|<0iUGCzMR`+O5u?Cdk)G$(rVO?FI`P&sQzoPGg8$L}r9~sfIn(J{NzLvlJ z&|cuH7@`72RQW*AfflcX2J<0{q5KwSsq3JrkHOW~;qpyuVro$Rs}6$d6EK^cA7Q;i z(3$HAIA25EI*8ov5bjhugp$nCy82_#n5yfdfVoO*JhH*NNMe`}bsN+jKq8FAEn!yY zNQ^qa2*t`bf^!6FLgfL}0`@b2!kCTD6_~bf2^y1xokc}TL&Bf9hyAbXL>rt|Fk?7! zR6q;+trgrTer|XZZutHF)sXcn2^yPFw~u~rx%xH)k&eED*WLlw35n(qp5Nz|60wMH zbLItD`{OuZwaK_l<(GGy6QVq|%hoNnnr+uhShH;l8iKTY2`bn+L?h_4}7R@#r zA43Bz-YfY5k7MM|@doM~2l>8Oe>TVg>&n%Av{Ofq_K@@nj-#t@fyNQC*xcH1c=-oW zILm}9iW4pNcjA1Y^sSiw(Aa<_p)w~%+wEzQrQ6s`P_cBtCc3$Fg{Fk;Jmkd!#3qO%J7%WM*6$N{uTyOX;^V zxpZbU6^*R0J|?tIx6gZ56YQ^`#l8X6GMAuHj~n$Qn%$2NX@UChU#H9B+55*cg7$lh p{VSB`_gFj=nCV^mQj{9;8byhl0iq}9-(~WgZ}-}BHvh-1e*kK+1#+|aewG>2p z5fM*bJP0Cq^^lYFoDDtf!eB#)2Xjdd%_S!(g?fp8ljP8wA3WyqzW2TPhKVDT)*Dh% zm$eazep~xwoBfmnd1tPO2Ob~vhdt;gGgkNz7hu^XGS@exj z5xs{EBBr-dWV<(AeuIs3Ac_1P64&J$uqODlpWP{0w0uFQ8q%L2J|V-p#gs1B_!8;- z4KI+E^i~wRh_r2Vz6}p+cc0Y;Bg9>=)c6x{`Ukkun+{%&@ibBV2@)7FU`Di@Ci}JB z=YxbRs8nf!VR%IG=ScwSpw<@!AMW!(w7&}}s-*a9r1${{KO&t-_=$AR`tM1pST2<>xa9CGca(F`eT~&fdcNXX9%TyvsFVlIeU{cRnw%r$&>srjF8=h6LyscRD zHe26vtX$rs$@I+>UD#T6Sk|KtmsebR&t6T$qERYpfn}_$WoGELBwbqVyD7b&m`%_J z%*+=|2dv}brc3T5wV6k=Y{SmPdKz`iil4Rp15b#BPv=m?Xsz5?) z5c`-i9kh&0t+u1I&Oku}RU5UwvX?j}c&VEj|4?h^nprwA*l|;1fuTvi?>pygvOsOe zoyneae&;*i`}@w>SX#NIX#tjSeKKoz);pKHbBV^f|9ouwvF(qSX@zr3k7Om-QT8$W zkR4~^>;yCPf3qyTQupg#eJ@+=y2`cCxXV^I45_Usy z&DiqzV{D*r=~(p~RyK5)jh*_=#!>zT3ia-*9>_lI-HOz25Aqe{J4&EgQX6b@pY^16TzyVm*HC2}~YawpbHQA4) zr->xjw51g#tbYu&3noFWrKr|u!fBqRfj}5ZaH7w-8&>d*QhMyW-IK=PeD`Evz}lfN zzL42B>zlr&jf}$78R=^1v3}u(>8x+r&$wGaL=yHV1A~w1lM4p->ysD959$j>0DJG! z(+PdjGoH}b_q12lHC64Z+LgVlY*+lK{`~lUoqw)df75#&jDM)7KD^Qx8Rf@ya8;kR zQx8O%TUNIP!m(I1mgfnyMy?5~1?kYUeByWG#m20Q?T2*xN`rYc`>#gLr8_3Jy$~-p zQYY;lx^_X}@;($+eo=aJ|yA8B~6`|uk~)0X*J z?_2#z{sxB2=^LmIf_0Og_(o&E>9ZS+{!yoI#M%X0BU|9e*1?AjK(`#sj?UYE@XR_; zf0nx{Yv{K|nJfNlJd;Rn0WrNt9yhkykHa<`1SP@BV+Kfot+wk20(Fr!k-Bi8c4fGB zRi0?KdqtWxw#F;CNF(9ictQxBt8#-eIli5Q#rvI|bmd8IgtU}YlajY-3 z4+uM+d#k7Wv!31Sf3>@P0ED9`XL!`hG?;h26u-gT_9A>C1g3w(gbl03^lA*Yx4k&H z!JKz+-|3so8g^j4Q=$!zcD?leO(q<;6~m54fS57(2D>^AwRav~KMV#XI-YFrdAU~0W@Zh*f{ zBct};%`EtAg7HTKB707olb)0BWu1nx@TABN$FbfqDF?RM1+K0Q1@N&;UE7Wqy!mkD zv2Rz3gmoSW_8!@x_r@z-qZPF-r(!O15`C#;^;|Y$yR?zv{t3`|xbvm>I#PY|K!Sb`bQzSBcs7kb6o&Gp;#=m z4#pMXhDbAvwV~E9;CsC`e;my ztD9?a5)s=_Vr}7ua4gUi74n;-f?ggE$YX()Sd`Ae*boaf1!Cb49f*Zn!XY>k3%7>x zWQ@K8f!39cB(HU)klVI0jOGMTR~px~kX@^r+agH0CM4+ES4J9fqdgXB!!cjF zgeufE({l7mKCwyL4(zJaD6!*f(kYmKjOw) zYC%Ogt1f3hSzn@+;d;OsiNbY|1hV2H#~GM_jK{_1GRGMiO%5-+kWChz-suK-0`a;z zj?;z-FW?$tRs>~+xNOSAz`ua$1B;4E< zsK@kaZ3)+E*0b5nAi5?=*Vq_t2sO%Er7pZCQX3{J;0fIB5LCnftDru*y19<_U9|r* zv5$oXp@m*8HW_U`n<+x(fRvFET5}y78ZuKu!yeLm(IO2ENibdr8x64WuWYnZ*q30= zf~u;jq}^$-lW4j%*TeILE2d9vH~1kqyw3nKCzuqJ_zg_Jui!A6^DH0&iewVe1hbn! z+D4C9ICnz8K%*{Qu7MAowJ!IhW@w0Kln6T}Ttc4nhkZWNj>M+jwGXnKPL79;g_vcFOmXym$IvG~w zlCKLH`1;Gz(7smZKm;YrFA@?k5?BI|!wU^-xfhgyh#qB>cpwHACooY3NLfq}x`3Jk z8y9=15~Q?TabcRXAeouh%kre^OEfu2+fa~~0*K^r3@5sNZ62)s`fIt?6?y1i;VLBr zi%N7JQAn8ZSgOzD$x8L-(RBLSJz# zHS|Qj(v6Eu7mAQGc?g(oH)K`{OO*Ib{qM;C%K8h1(|XO&_Og8IkLPIjiO@go7dQw( z#Ez61w$n-@*oO`U-D*hyX`vCOB}~2w)%mCT>F{`kdD3j8z^L z2}upU5NY5hfRp4=p|D6+#8vK6?xX{hPF$sNBhD zL8dUMHhU-JbfQq;D2KRN-GzdOiX};#Ap?!MU(%dql6@cS&Gk}Nz_kc1W*PPuw2o|t zY9OvJ8`ux21Mz>LyQ!6yi7P^N?9b3PY^5-Pw8IX~J|W9x#}gswR!zdLgtj4aR9M1s zEA5Ejk^nDa=nfP{n$9kwGo&u40X`)H(ZT?bSF;z%MsuZCGMNSirweCuNI6Dlcmc5Q zG~l*++nq{Hz}aI3>;$s!cecGS7?~|HK=xzYNiYbvb>gfI!K{#&VLFJsp*xV=1!5#8 zut(l<=kXbz0uI<(Us3$0Z?&|@Dw5(Xk=aS@xYOWMQ*=ct$=AW{OLKbWK$oQm2&*xF z$cNUDm&yooZZDem+uA1wlxsRx({m6aB$JR~1hl0`r$g6h%BF-J2s@2Y-p$6h}n{!4-+hiNy5k;8eU?!5nlKnK08`87>mpoqnNuiX|W(E^>ig6^a`# ztS{zJZd3W=Or;4mD=aOlN>N&b^^2E*z&X6mD0BX)LZSS^tgK=Va)d;g>DIgwX>CRv z^A#!&3okVkpW}XcSj1BFt(h^NemaT!2>D2Dg^y(tP`iO_OeX-xrxg}Jj?zSmfES54 znGwIK;&f=viQmj%qK4;2a$X5H&-ROYIQ`dRpeIa;3?Ke3S%l9IXbZ?o#8R#yWyLx* z^jOJsY-Q#{ghd~~7pV375`55RhG=c6$|rK|StU2CRQ5Poa^zz1lj>AS=GGG3@?F3* z{JHgh&IKqRezXBX-sh@hHTm4;)9+wGFf+*D)buYS8D#Qvx}v8eDML)#GQ=Vz7-DQG zhO|HyUxqLUw^+}pV~Nac4j2r@M)tvT&WX4aH;{xC430(bmw>~Ckc?PJOj<`ZK5f)= z@6A+~esoY5#e&DAR2NiIUNQK@5w1ep?=721XD)Qxbep}g?5vn)r2CC!Qn?v1=OPDF zLriT>#|v(-$qXl3;qwv&C7KZl;pcPQiM2}ZLp#ssJ{54`1Z!)l`tgImYi9Hn(GSw? z6eil+?);qVa*pS8g@rnUze-XKpPoTbr8F3N`po zg?32pYfMpP17(h8XgF$Fh_Yf>7#i=ly(j$e{}b_J6)dTE)vocvuVkmSorm5+xN@;ySX_wjm#Y#?Nlk2fgf`-E)w@s$eMNXTvZ`#m_qI)q`}Wy6>=XT>-@Y;AwMAGHa}mjkoyVg^7Azc*-XeTKW|sa w7DAr#^R)`uO2~75zD^+>gv9;)8bnfGl4vPwZh1{1{6DZ ' reads the pascal source in - file2 and shifts everything not between quotes '' or curly - brackets {} to upper-case. This means that file1 afterwards - contains the program with everything but strings and comments - (curly bracket comments only) in upper case. - - SHIFT was written by T. W. Lougheed in TINY PASCAL (r). - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/SINCOS.ERL b/software/CPM/CPM13_MTPUG_01/SINCOS.ERL deleted file mode 100644 index 4fab15a2f71eb0d883a4291e4200946472f57648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmY+BUr19?9LK-sZoAC7$VG>4A##lw7AD$c+1r`_1u0PxR}mU@(d?#FMAXaiPk)F# z7-5Vq*aUS7Jw)n^9^!@y%XZClM(!4^u(yH;GKh%oRxh2GFTZp6@;l$p_gZ|dWq3Uv zE#zr-W#1krumCtaU=e`eAoEc0U4XCvVHHHJPQ4MemLirK>ogMVBWeTV4qxgnJE2c7 z2o=!BJA_0RvJRHy7N*R4IF!B)Qz0>otSjY&d6gQ-8zT5T$nhkv97jg}ZTpbN`+#|R zieSlvr$@ASAH#Zod7^ntJw{z~TOc>!ntOvvfqbc{7;~_cVl<0}EkRZ2V4}6C(G|oJrE=9P-!f z{gKA0e1rT-6RW(xnCI-2#e0_xmNr?uDq|@bWkalZ`08o(0`m9od&}ul9R*UhJ3k?B zNFu)j@_UU}coSYolz~p8DMyk2uIV+`_@(U^-aBmOO#9BI2^s#mxYf+*nspMjQ}YE) zf(rFVsMXD#8Z;V>16(R?qKnf*nvnR(ne3#PSy%*;S-&393QUAbEkv0A887VV8i{r Nb*n)GMtA*p{s5|61$Y1e diff --git a/software/CPM/CPM13_MTPUG_01/SINCOS.SRC b/software/CPM/CPM13_MTPUG_01/SINCOS.SRC deleted file mode 100644 index 3ad0529..0000000 --- a/software/CPM/CPM13_MTPUG_01/SINCOS.SRC +++ /dev/null @@ -1,81 +0,0 @@ -MODULE SINCOS; { Copyright (c) by T. W. Lougheed 24 April 1981 } - -{ This procedure provides a replacement for the SINE function currently -available to the pascal system. It is faster and more accurate. } - -{ First version 5 February 1981 - - By T. W. Lougheed - Dept. T. & A. Mechanics - Thurston Hall, Cornell U. - Ithaca, NY 14853 - - Last version 23 February 1981 - - This software is in the public domain, and may not be sold by any - person or corperation without permission of the author. } - - - -FUNCTION SIN( Z :REAL) :REAL; - -CONST TWO_PI = 6.283185307179586; - PI = 3.141592653589793; - HALF_PI = 1.570796326794897; - -{ The following is from the HANDBOOK OF MATHEMATICAL FUNCTIONS, by -Abramowicz and Stegun, tenth printing. Formula 4.3.97; its error -is less than |X| 10^8 for |X| < PI/2. } - -FUNCTION TCHEBYSHEV( X :REAL) :REAL; - - CONST A2 = -0.1666666664; - A4 = 0.0083333315; - A6 = -0.0001984090; - A8 = 0.0000027526; - A10 = -0.0000000239; - - VAR S :REAL; - BEGIN - S := SQR( X ); - TCHEBYSHEV := (((((A10*S + A8)*S + A6)*S + A4)*S + A2)*S + 1)*X; - END; - - -BEGIN - -{ Map the argument Z onto the interval -PI..PI, rounding -towards the smallest absolute value. } - -IF Z > 0 THEN Z := Z - TWO_PI*ROUND( Z/TWO_PI ) - ELSE Z := Z + TWO_PI*ROUND( -Z/TWO_PI ); - -{ Always ask for TCHEBYSHEV of a number in the interval -PI/2..PI/2. } - -IF Z > HALF_PI THEN SIN := TCHEBYSHEV( PI - Z ) -ELSE IF Z > -HALF_PI THEN SIN := TCHEBYSHEV( Z ) -ELSE SIN := -TCHEBYSHEV( PI + Z ); - -END; - - - -{ Lazy cosine function based on the identity - - cos x = ( 1 - (sin x/2)^2 )/2 - -note that this has been re-arranged somewhat to -improve accuracy. } - -FUNCTION COS( Z :REAL) :REAL; - CONST SQRT_2 = 1.4142135623730950; - VAR S :REAL; - BEGIN - S := SQRT_2*SIN( Z/2 ); - COS := (1 - S)*(1 + S); - END; - - -MODEND -. - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/TRANCEND.DOC b/software/CPM/CPM13_MTPUG_01/TRANCEND.DOC deleted file mode 100644 index 5f9096d..0000000 --- a/software/CPM/CPM13_MTPUG_01/TRANCEND.DOC +++ /dev/null @@ -1,21 +0,0 @@ - - The files - - ARCTAN.TWL EXP.TWL LN.TWL SINCOS.TWL - - provide complete and correct pascal source for all the trancendental - functions vended with PASCAL/MT 5.1. They are in all cases more - or just as accurate and more efficient. The arctangent, as noted in - the source, fixes a bug in the MT 5.1 function, which returns - incorrect answers for large arguments. The logarithm is stable for - large numbers, which the MT 5.1 logarithm is not (starts giving - wild answers). The function EXP is vastly more efficient for - large numbers than the MT 5.1 logarithm. The sine and cosine - are probably just about the same. - - The user may compile and link these modules separately and link - them before linking TRANCEND, or may combine the RELocatable - modules using the MT-Librarian to make a new library to replace - TRANCEND. - - \ No newline at end of file diff --git a/software/CPM/CPM13_MTPUG_01/TRANCEND.TWL b/software/CPM/CPM13_MTPUG_01/TRANCEND.TWL deleted file mode 100644 index 12c14d92bcf32dbe304b2f992476a1ab33675883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 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 diff --git a/software/CPM/CPM14_MTPUG_02/CALCULAT.DOC b/software/CPM/CPM14_MTPUG_02/CALCULAT.DOC deleted file mode 100644 index a822b07..0000000 --- a/software/CPM/CPM14_MTPUG_02/CALCULAT.DOC +++ /dev/null @@ -1,40 +0,0 @@ -Scientific Calculator Program by: Warren A. Smith - - This program is only marginally intended to replace a -scientific calculator. Because of the limited accuracy available -from a 32 bit representation of real numbers (as all numbers are -treated in this program) this program has only limited use as a -true calculator. However, it does perform most trigonometric functions -as well as a few others and you may find these useful at times. - The input is an equation where functions are expressed by name -(or more appropriately by mnemonic) and whose arguements follow within -parenthesis. An expample would be - 4.4 * 3.6/sqrt(4.6) -Blanks do not matter (except of course in the middle of a name) and -upper and lower case alpha is interchangeable. - Normal algebraic precedence is followed with unary minus having -the highest, followed by parenthesis, followed by exponentiation '^', -and then multiplication and division '*', '/' having equal precedence. -Addition and subtraction also have equal precedence below multiplication -and division. - Typing in a question mark in response to a request for an -expression will give you a list of the currently implemented functions -along with their appropriate mnemonics. - Typing in an exclamation point will cause the program to -print out intermediate results on its way to the answer. A second -exclamation point will turn this feature off. - The main reason for writting this program was as an exercise -in recursion and parsing of input strings. I took as a flow chart -the Pascal syntax diagrams for a simple expression and extended the -idea to include exponentiation. If you investigate the source code -which I hope everyone will, you will see that it is relatively easy -to add functions to the acceptable input. You can add functions -with one arguement and with no arguements (the way Pi is treated) -simply. If you need a function with two or more arguements, you -are going to have to rethink the section within Factor that is res- -ponsible for functions. It should not take any major rewritting, only -additions. - Good luck and let me know if you come up with any improvements -or functional additions. You can reach me at: - 6150 First Ave. - Sacramento, CA 95817 - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/CALCULAT.ERL b/software/CPM/CPM14_MTPUG_02/CALCULAT.ERL deleted file mode 100644 index 70f56f1207b6e0f407c5e0f765e2727017015dad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11136 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 m= 'a') AND (In_Char <= 'z') then - Upper := chr(ord(In_Char) + (ord('A') - ord('a'))) - else - Upper := In_Char - end; { Upper } - -Procedure Help; - - Var - Response : char; - - begin { Help } - ScreenClr; - Writeln (' The currently available functions are :'); - Writeln; - Writeln (' ArcCosine - ArcCos ArcCotangent - ArcCot'); - Writeln (' ArcCosecant - ArcCsc ArcSecant - ArcSec'); - Writeln (' ArcSine - ArcSin ArcTangent - ArcTan'); - Writeln (' Cosine - Cos CoTangent - Cot '); - Writeln (' CoSecant - Csc Natural Exponent - Exp '); - Writeln (' Natural Log - Ln Secant - Sec '); - Writeln (' Sine - Sin Square - Sqr '); - Writeln (' Square Root - Sqrt Tangent - Tan '); - Writeln (' Log base 10 - Log Factorial - Factor'); - Writeln (' Value of Pi - Pi '); - Writeln; - Writeln (' Allowable operators are:'); - Writeln (' ''+'', ''-'', ''*'', ''/'', and ''^'' (exponentiation)'); - Writeln; - Writeln (' Upper case and lower case are irrelevant in function names'); - Writeln (' A ''$'' will end the program, a ''!'' turns on debug mode '); - Writeln; - Writeln ('Hit the carriage return to proceed.'); - Read (Response); - end; { Help } - -Function Eoln : boolean; - - begin { Eoln } - Eoln := Z > Length(Buf) - end; { Eoln } - -Procedure Slough_Blanks; - - begin { Slough_Blanks } - While (Buf[Z] = ' ') AND (not Eoln) do - Z := Z + 1 - end; { Slough_Blanks } - -Procedure Get_Expr; - - begin { Get_Expr } - Repeat - Writeln; - Writeln ('Type in an expression to be solved.'); - Readln (Buf); - Z := 1; - Slough_Blanks - Until not Eoln - end; { Get_Expr } - -Function Expr : real; - - Var - Unary, - Answer : real; - - Function Term : real; - - Var - Answer : real; - - Function Expon : real; - - Var - Answer : real; - - Function XtoY (X, Y : real) : real; - - begin { XtoY } - If X >= 0.0 then - XtoY := exp(Y * Ln(X)) - else - XtoY := 0.0 - end; { XtoY } - - Function Factor : real; - - Var - Answer, - X : real; - Func : Functions; - - Procedure Read (Var Answer : real); - - Var - Fact_Power : real; - - begin { Read } - Answer := 0.0; - Slough_Blanks; - While Digit (Buf[Z]) AND not Eoln do - begin - Answer := Answer * 10.0 + (Ord(Buf[Z])-Ord('0')); - Z := Z + 1 - end; - If (Buf[Z] = '.') AND not Eoln then - begin - Z := Z + 1; - Fact_Power := 1.0; - While Digit (Buf[Z]) AND not Eoln do - begin - Fact_Power := Fact_Power / 10.0; - Answer := Answer+(Ord(Buf[Z])-Ord('0'))*Fact_Power; - Z := Z + 1 - end - end - end; { Read } - - Function Digit (In_Char : char) : boolean ; - - begin { Digit } - Digit := In_Char in ['0','1','2','3','4','5','6','7', - '8','9'] - end; { Digit } - - Function Letter (Var In_Char : char) : boolean; - - begin { Letter } - In_Char := Upper (In_Char); - Letter := In_Char in ['A','B','C','D','E','F','G','H', - 'I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X', - 'Y','Z'] - end; { Letter } - - Function Get_Func_Type : Functions; - - Var - ID : Func_Name; - Index : integer; - - Function Search_Funcs (ID : Func_Name) : Functions; - - Var - I, J, K : integer; - - begin { Search_Funcs } - I := 1; - J := Num_Funcs; - Repeat - K := (I+J) DIV 2; { Binary search } - With F_Names[K] do - begin - If Name <= ID then - I := K+1; - - If Name >= ID then - J := K-1 - end - - Until I > J; - If F_Names[K].Name <> ID then - Search_Funcs := Non_Function - else - Search_Funcs := F_Names[K].Func_Type - end; { Search_Funcs } - - begin { Get_Func_Type } - Index := 1; - Repeat - ID [Index] := Buf[Z]; - Z := Z + 1; - Index := Index + 1 - Until Not Letter(Buf[Z]) OR Eoln OR (Index > Func_Len); - While Index <= Func_Len do - begin - ID [Index] := ' '; - Index := Index + 1 - end; - - Get_Func_Type := Search_Funcs (ID) - end; { Get_Func_Type } - - Function Tan (X : real) : real; - - begin { Tan } - Tan := Sin(X) / Cos(X) - end; { Tan } - - Function Cot (X : real) : real; - - begin { Cot } - Cot := Cos(X) / Sin(X) - end; { Cot } - - Function Sec (X : real) : real; - - begin { Sec } - Sec := 1.0 / Cos(X) - end; { Sec } - - Function Csc (X : real) : real; - - begin { Csc } - Csc := 1.0 / Sin(X) - end; { Csc } - - Function ArcSin (X : real) : real; - - begin { ArcSin } - ArcSin := ArcTan(X / Sqrt(1.0 - Sqr(X))) - end; { ArcSin } - - Function ArcCos (X : real) : real; - - begin { ArcCos } - ArcCos := Pi / 2.0 - ArcTan (X / Sqrt(1.0 - Sqr(X))) - end; { ArcCos } - - Function ArcCot (X : real) : real; - - begin { ArcCot } - ArcCot := Pi / 2.0 - ArcTan (X) - end; { ArcCot } - - Function ArcSec (X : real) : real; - - begin { ArcSec } - ArcSec := ArcTan (Sqrt(Sqr(X) - 1.0)) - end; { ArcSec } - - Function ArcCsc (X : real) : real; - - begin { ArcCsc } - ArcCsc := ArcTan (1.0 / Sqrt(Sqr(X) - 1.0)) - end; { ArcCsc } - - Function Radian (X : real) : real; - - begin { Radian } - Radian := X * (Pi / 180.0) - end; { Radian } - - Function Log10 (X : real) : real; - - begin { Log10 } - Log10 := Ln(X) / Ln(10.0) - end; { Log10 } - - Function Factorl (X : real) : real; - - Var - Int_X, I : integer; - Product : real; - - begin { Factorl } - Int_X := Round(X); - If Int_X = 0 then - Factorl := 1.0 - else - begin - Product := 1.0; - For I := 2 to Int_X do - Product := Product * I; - Factorl := Product - end - end; { Factorl } - - begin { Factor } - Slough_Blanks; - If Digit (Buf[Z]) OR (Buf[Z] = '.') then - Read (Answer) - else - If Buf[Z] = '(' then - begin - Z := Z + 1; - Answer := Expr; - If Buf[Z] <> ')' then - begin - Write (Tab(Z-1),'^ '); - Writeln ('*** '')'' expected') - end - else - Z := Z + 1 - end - else - If Letter (Buf[Z]) then - begin - Func := Get_Func_Type; - Slough_Blanks; - If not (Func in Non_Parm_Funcs) then - begin - If Buf[Z] = '(' then - begin - Z := Z + 1; - Answer := Expr - end - else - begin - Write (Tab(Z-1), '^ '); - Write ('*** ''('' expected, answer '); - Writeln ('may be in error') - end; - Slough_Blanks; - If Buf[Z] = ')' then - Z := Z + 1 - else - begin - Write (Tab(Z-1), '^ '); - Write ('*** '')'' expected, answer '); - Writeln ('may be in error') - end - end; - Case Func of - Logrithm : Answer := Ln (Answer); - Exponent : Answer := Exp (Answer); - Log : Answer := Log10 (Answer); - Square : Answer := Sqr (Answer); - Square_Root : Answer := Sqrt (Answer); - Factorial : Answer := Factorl (Answer); - Cosine : Answer := - Cos (Radian(Answer)); - Sine : Answer := - Sin (Radian(Answer)); - ArcTangent : Answer := - ArcTan (Radian(Answer)); - Tangent : Answer := - Tan (Radian(Answer)); - CoTangent : Answer := - Cot (Radian(Answer)); - Secant : Answer := - Sec (Radian(Answer)); - CoSecant : Answer := - Cos (Radian(Answer)); - ArcSine : Answer := - ArcSin (Radian(Answer)); - ArcCosine : Answer := - ArcCos (Radian(Answer)); - ArcCoTangent: Answer := - ArcCot (Radian(Answer)); - ArcSecant : Answer := - ArcSec (Radian(Answer)); - ArcCoSecant : Answer := - ArcCsc (Answer); - Pie : Answer := Pi; - Radians : Answer := Radian (Answer); - Non_Function: begin - Write (Tab(Z-1), '^ '); - Writeln - ('*** Uninown function name') - end - end; { CASE } - Slough_Blanks - end - else - begin - Write (Tab(Z-1), '^ '); - Write ('*** Unknown Syntax, answer may '); - Writeln ('be in error') - end; - If Debug_Mode then - Writeln ('Result from FACTOR = ', Answer:20:8); - Factor := Answer - end; { Factor } - - begin { Expon } - Answer := Factor; - Slough_Blanks; - While Buf[Z] = '^' do - begin - Z := Z + 1; - Answer := XtoY (Answer, Factor); - Slough_Blanks - end; - If Debug_Mode then - Writeln ('Result from EXPON = ', Answer:20:8); - Expon := Answer - end; { Expon } - - begin { Term } - Answer := Expon; - Slough_Blanks; - While Buf[Z] in ['*', '/'] do - begin - If Buf[Z] = '*' then - begin - Z := Z + 1; - Answer := Answer * Expon - end - else - begin - Z := Z + 1; - Answer := Answer / Expon; - end; - Slough_Blanks - end; - If Debug_Mode then - Writeln ('Result from TERM = ', Answer:20:8); - Term := Answer - end; { Term } - - begin { Expr } - Slough_Blanks; - Unary := 1.0; - If Buf[Z] in ['+','-'] then - begin - If Buf[Z] = '-' then - Unary := -1.0; - Z := Z + 1 - end; - Answer := Unary * Term; - Slough_Blanks; - While Buf[Z] in ['+', '-'] do - begin - If Buf[Z] = '+' then - begin - Z := Z + 1; - Answer := Answer + Term - end - else - begin - Z := Z + 1; - Answer := Answer - Term - end; - Slough_Blanks - end; - If Debug_Mode then - Writeln ('Result from EXPR =', Answer:20:8); - Expr := Answer - end; { Expr } - -begin { Main } -Initialize; -Get_Expr; -While Buf[Z] <> '$' do - begin - If Buf[Z] = '?' then - Help - else - If Buf[Z] = '!' then - Debug_Mode := not Debug_Mode - else - If Buf[Z] <> '$' then - begin - Answer := Expr; - Writeln; - Writeln ('The answer is :', Answer:9:6) - end; - Get_Expr - end; -Writeln; -Writeln ('Program ended'); -Writeln -end. - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/CP#M-DEC.DOC b/software/CPM/CPM14_MTPUG_02/CP#M-DEC.DOC deleted file mode 100644 index a25dbbd..0000000 --- a/software/CPM/CPM14_MTPUG_02/CP#M-DEC.DOC +++ /dev/null @@ -1,113 +0,0 @@ - - -************************************************************************* - - -COVERING: CPMTODEC,DECTOCPM,LISTDEC - -WRITTEN BY: BRIAN T. CHASE CODE 8131 8/26/78 - AT NAVAL OCEAN SYSTEM CENTER - SAN DIEGO, CALIF. 92152 - -FOR: CEASAR CASTRO CODE 8143 - NAVANL OCEAN SYSTEM CENTER - SAN DIEGO, CALIF. 92152 - - - THESE PROGRAMS ENABLE THE CP/M USER TO TRANSFER FILES BETWEEN -CP/M AND DEC FORMAT DISKETTES, AS WELL AS LISTING THE DEC DISK'S -DIRECTORY. - AT PRESENT THE PROGRAM ONLY TRANSFERS ASCII FILES. THERE IS A -BUG WHICH IS PREVENTING OBJECT FILES FROM BEING TRANSFERED. - -________________________________________________________________________ - - -1. LISTDEC: THE PROGRAM IS STARTED BY TYPING "LISTDEC ", AS - IS ANY CP/M TRANSIENT PROGRAM. THE PROGRAM WILL THEN ASK - WHETHER OR NOT THE DEC DISK IS INTERLEAVED (SEE NOTE C.) - AS SOON AS THIS QUESTION IS ANSWERED THE DIRECTORY IS READ IN, - INTERPRETED, AND PRINTED AT THE CONSOLE. THE PROGRAM THEN - IMMEDIATELY RETURNS CONTROL TO CP/M (NO REBOOT). - -2. CPMTODEC: TYPE "CPMTODEC " TO EXECUTE. THE PROGRAM WILL - FIRST ASK IF USER WANTS TO ZERO (INITIALIZE) THE DEC DISK. - IF "Y" IS TYPED, IT WILL ASK "ARE YOU SURE?". IF EITHER OF - THESE QUESTIONS IS ANSWERED BY ANYTHING BUT A "Y", THIS OP- - TION WILL BE SKIPPED. IF DEC DISK IS TO BE ZEROED, THE MES- - SAGE "PLACE DEC DISK ON DRIVE B" WILL BE PRINTED (SEE NOTE - A), FOLLOWED BY THE QUESTION "IS DEC DISK INTERLEAVED?" (SEE - NOTE C). AFTER THIS QUESTION HAS BEEN ANSWERED, THE DISK ON - DRIVE B WILL BE ZEROED. - THE PROGRAM WILL THEN ASK FOR CP/M FILENAME (SOURCE - FILE ON CP/M DISK). ALL KEYBOARD EDITING COMMANDS ARE - AVAILABLE. IT THEN REQUESTS THE DEC FILENAME (DESTINATION - FILE). ALL FILE NAMING CONVENTIONS SHOULD BE OBSERVED. IF - A SYNTAX ERROR OCCURS, THE PROGRAM ASKS FOR BOTH FILENAMES - AGAIN (CHECK CHARACTER COUNT IN NAME). THE "PLACE DEC DISK - ON DRIVE B" MESSAGE IS THEN PRINTED (SEE NOTE A). ANSWER - THE READY(Y/N)? QUESTION WITH A "Y" WHEN READY-"N" WILL ASK - FOR NEW FILENAMES. - WHEN TRANSFER IS COMPLETE, THE MESSAGE "ANOTHER - TRANSFER(Y/N)?" WILL BE PRINTED. "Y" WILL ASK FOR NEW FILE- - NAMES, "N" WILL REBOOT SYSTEM (ZERO FIRST TIME ONLY). - -3. DECTOCPM: TYPE "DECTOCPM " TO EXECUTE. THIS IS SIMILAR - TO #2 ABOVE EXCEPT THAT THE PROGRAM ASKS IF THE DEC FILE - IS ASCII. THIS MEANS: IS THE FILE TO BE TRANSFERRED AN - ASCII SOURCE, LISTING, OR OTHER ASCII-TYPE FILE, OR IS - IT A DATA FILE OR MACHINE CODE,ETC. FILE. NON-ASCII FILES - ARE TRANSFERRED ENTIRELY (ALL BLOCKS TRANSFERRED). FOR - ASCII FILES, THE LAST BLOCK IS CHECKED FOR EOF CHARACTER - (DIFFERENT IN DEC & CP/M FILE FORMATS). (NO ZERO OPTION). - -_________________________________________________________________________ - -NOTES: - - A. THE CP/M STRUCTURE INCLUDES PROVISIONS FOR AT LEAST TWO - DISK DRIVES. IN ALL THREE OF THESE PROGRAMS, THE DEC DISK - IS TO BE PLACED ON DRIVE B. FOR THOSE USERS WITH A SINGLE - DRIVE ON THEIR SYSTEM, CBIOS SHOULD PRINT OUT AN APPROPRIATE - MESSAGE AT THE CONSOLE WHEN ANY PROGRAM SELECTS A DRIVE NOT - CURRENTLY BEING ACCESSED. IN THESE PROGRAMS, THE MESSAGE - "PLACE DEC DISK ON DRIVE B" SHOULD BE IGNORED BY SINGLE - DRIVE USERS-THEY SHOULD WAIT UNTIL THEIR CBIOS NOTIFIES - THEM OF THE SWITCH. - - B. IT SHOULD BE NOTED THAT TO SIMPLIFY THESE PROGRAMS - CONSIDERABLY, THE DEC DISK'S DIRECTORY IS ASSUMED TO BE - EFFECTIVELY ONLY ONE SEGMENT (8 SECTORS) LONG (THEY ARE - NORMALLY INITIALIZED TO 4 SEGMENTS). THIS IS A REASONABLE - ASSUMPTION, SINCE UP TO APPROXIMATELY 72 ENTRIES CAN BE - CONTAINED IN ONE SEGMENT. HOWEVER, IF A FILE CANNOT BE - FOUND ON THE DEC DISK BY THE DECTOCPM PROGRAM AND A SUB- - SEQUENT DIRECTORY LISTING ON A DEC COMPUTER SHOWS THE FILE - PRESENT, THE SOLUTION WOULD BE TO PIP THE DESIRED FILE TO - ANOTHER DEC DISK WITH FEWER OR NO FILES ON IT (EG A FRESH- - LY ZEROED DISK). - - C. THESE PROGRAMS WERE ALSO WRITTEN TO HANDLE TWO DIFFERENT - DEC DISK FORMATS: - - 1. STANDARD DEC FORMAT- LOGICAL SECTORS BEGIN ON TRACK 1 - WITH PHYSICAL SECTORS 1,3,5,7...23,25,2,4,6...24,26 (EVERY - OTHER SECTOR). THIS SEQUENCE IS ALSO SHIFTED BY ADDING AN - AMOUNT B=6*(TRACK#-1) TO THE TRACK 1 VALUES (IN MOD 26). - - 2. CONSECUTIVE- LOGICAL SECTORS ARE PHYSICAL SECTORS. - - EACH PROGRAM ASKS IF THE DEC DISK IS INTERLEAVED. THIS IS - ASKING WHETHER THE DISK IS STANDARD DEC FORMAT OR IF IT IS - CONSECUTIVE (IE LOGICAL SECTORS=PHYSICAL SECTORS). A FLAG IS - SET OR RESET FOR THE DISK B HANDLING ROUTINE. THE USER MAY - WISH TO ALTER THIS FUNCTION IF HE HAS ONLY ONE TYPE OF DEC - DISK. - - D. THE CP/M PROGRAM BEING TRANSFERRED MUST BE ON THE SAME - DISK THAT THE TRANSFERRING PROGRAM (CPMTODEC OR DECTOCPM) IS - ON (DUE TO THE AUTOMATIC READ-ONLY STATUS THAT SWITCHING - DISKS CAUSES IN VERSION 1.4). - -***************************************************************************** - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/CPMTODEC.ASM b/software/CPM/CPM14_MTPUG_02/CPMTODEC.ASM deleted file mode 100644 index 61f69e8..0000000 --- a/software/CPM/CPM14_MTPUG_02/CPMTODEC.ASM +++ /dev/null @@ -1,1198 +0,0 @@ -*THIS PROGRAM TRANSFERS A FILE FROM A CP/M FORMAT DISK TO A -* DEC FORMAT DISK -* -* -*CP/M DEFINITIONS FOR PRIMITIVES -* -RDCON EQU 1 ;GET CHAR FROM CONSOLE -WRTCON EQU 2 ;TYPE CHAR ON CONSOLE -RDRDR EQU 3 ;GETCHAR FROM PAPER TAPE READER -WRTPCH EQU 4 ;SEND CHAR TO PUNCH -WRTLST EQU 5 ;SEND CHAR TO LIST DEVICE -IOSTAT EQU 7 ;INTERROGATE I/O STATUS (NOT USED HERE) -ALTIO EQU 8 ;ALTER I/O STATUS (NOT USED HERE) -PCONBF EQU 9 ;PRINT CONSOLE BUFFER -RCONBF EQU 10 ;READ CONSOLE BUFFER -CONST EQU 11 ;CHECK CONSOLE STATUS (BIT0 SET IF READY) -LIFTHD EQU 12 ;LIFT DISK HEAD (NOT USED HERE) -RSTDSK EQU 13 ;DMA ADDR TO 80H,SELECT DISK A -SELDSK EQU 14 ;SELECT DISK -OPENF EQU 15 ;OPEN FILE -CLOSEF EQU 16 ;CLOSE FILE -SRCH1 EQU 17 ;SEARCH FOR FIRST FILE OCCURRENCE -SCHNXT EQU 18 ;SEARCH FOR NEXT FILE OCCURRENCE -DELETF EQU 19 ;DELETE FILE -READF EQU 20 ;READ TO BUFFER -WRITEF EQU 21 ;WRITE TO BUFFER -MAKEF EQU 22 ;CREATE A FILE ENTRY -RENAMF EQU 23 ;RENAME A FILE -INTLOG EQU 24 ;INTERROGATE LOGIN VECTOR -INTDSK EQU 25 ;INTERROGATE DISK (RETURNS SELECTED DISK #) -SETDMA EQU 26 ;SET DMA ADDR -INTALL EQU 27 ;INTERROGATE ALLOCATION VECTOR -* -BDOS EQU 0005H ;DOS ENTRY POINT -FCB EQU 5CH ;DEFAULT FILE CONTROL BLOCK ADDRESS -BUFF EQU 80H ;DEFAULT DMA ADDRESS -* - ORG 0100H -* -*SET UP STACK - LXI SP,STKTOP - JMP EXEC -*STACK AREA -STACK: DS 64 -STKTOP EQU $ -* -*VARIABLES -CONBUF: DS 80 -* -EXEC: MVI A,79 - STA CONBUF ;SET FIRST BYTE TO BUFFER LENGTH - JMP MAIN ;JUMP TO MAIN PROGRAM -*SUBROUTINES -PCHAR: ;PRINT CHAR IN REG A - PUSH H! PUSH D! PUSH B ;ENVIRONMENT SAVED - MVI C,WRTCON - MOV E,A - CALL BDOS - POP B! POP D! POP H ;ENVIRONMENT RESTORED - RET -* -CRLF: ;PRINT A CARRIAGE RETURN & LINE FEED - MVI A,0DH - CALL PCHAR - MVI A,0AH - CALL PCHAR - RET -* -PNIB: ;PRINT NIBBLE IN REG A - ANI 0FH ;LOWER 4 BITS - CPI 10 - JNC P10 - ;LESS THAN OR EQUAL TO 9 - ADI '0' - JMP PRN - ;GREATER THAN OR EQUAL TO 10 -P10: ADI 'A'-10 -PRN: CALL PCHAR - RET -* -PHEX: ;PRINT HEX CHAR IN REG A - PUSH PSW - RRC - RRC - RRC - RRC - CALL PNIB ;PRINT NIBBLE - POP PSW - CALL PNIB - RET -* -CHIN: ;GET A CHAR FROM CONSOLE - PUSH H! PUSH D! PUSH B - MVI C,RDCON - CALL BDOS - POP B! POP D! POP H - RET -* -MSG: ;PRINT A MESSAGE POINTED TO BY HL (END OF MESSAGE=0FFH) - MOV A,M - CPI 0FFH - RZ ;RETURN IF END OF MESSAGE - CALL PCHAR - INX H - JMP MSG -* -SETTRK: ;SET TRACK IN C - LHLD 1 - LXI D,27 - DAD D - PCHL -* -SETSEC: LHLD 1 - LXI D,30 - DAD D - PCHL -* -RDSEC: LHLD 1 - LXI D,36 - DAD D - PCHL -* -WRTSEC: LHLD 1 - LXI D,39 - DAD D - PCHL -* -RDWRT: ;READ/WRITE TO DISK B-LOG.TRACK IN "TRACK",LOG.SECTOR IN "SECTOR" - PUSH B - PUSH D - LDA TRACK - STA BTRACK - LDA SECTOR - STA BSECT - LDA INTLEV ;GET INTERLEAVE FLAG - ORA A - JZ CONSEC ;0 > CONSECUTIVE SECTORS -* -*INTERLEAVE ALGORITHM FOR STANDARD DEC DISKS -* - MVI H,0 - LDA BTRACK - MOV L,A - DCX H ;HL=TRACK-1;NOW MULTIPLY BY 6 - MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - SHLD X2 ;HL*2 -INTLV3: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - XCHG - LHLD X2 - DAD D ;HL*6 IN HL -* 6*(TRACK-1) IN HL -* -INTLV0: MOV A,H - ORA A - JNZ INTLV5 - MOV A,L - CPI 26 - JC INTLV4 -INTLV5: LXI D,0-26 - DAD D - JMP INTLV0 -INTLV4: LDA BSECT - DCR A ;SHIFT SECTOR DOWN (0-25) - PUSH PSW - ADD A - MOV E,A ;SAVE S2 - POP PSW - CPI 13 - MOV A,E ;GET S2 BACK TO ACC. - JM INTLV2 - INR A -INTLV2: ADD L ;ADD BIAS -INTLV1: SUI 26 - JP INTLV1 - ADI 27 - STA BSECT ;NEW PHYSICAL SECTOR TO BSECT -* -*END OF INTERLEAVE ALGORITHM -* -CONSEC: LDA BSECT - MOV C,A - CALL SETSEC - LDA BTRACK - MOV C,A - CALL SETTRK - LDA OPFLAG - CPI 0 - JNZ CONSC1 - CALL RDSEC - POP D - POP B - RET -CONSC1: CALL WRTSEC - POP D - POP B - RET -* -DIRECT: ;IF READ:GET SEG.1 OF DIRECT.TO DRBUFF - ;IF WRITE:WRITE SEG.1 OF DIRECT.ONTO DIRECTORY AREA OF DEC DISK - ;IN BOTH CASES,ASSUME FILE WILL BE IN OR FIT IN SEG.1 - MVI A,2 - STA COUNT - MVI A,01H - STA TRACK - MVI A,19H - STA SECTOR - LXI H,DRBUFF - SHLD BUFFPT ;INIT. BUFFPT - MVI C,SELDSK - MVI E,1 ;B - CALL BDOS - LXI D,0 -GTDIR1: LHLD BUFFPT - DAD D - SHLD BUFFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL RDWRT ;READ/WRITE SECTOR FROM/TO DISK - LXI D,128 - MVI A,1AH - STA SECTOR - LDA COUNT - DCR A - STA COUNT - JNZ GTDIR1 ;READ IN FIRST 2 SECTORS - MVI A,6 - STA COUNT - MVI A,02 - STA TRACK - DCR A - STA SECTOR -GTDIR2: LXI D,128 ;LENGTH OF A SECTOR - LHLD BUFFPT - DAD D - SHLD BUFFPT - XCHG ;DMA ADDR > DE - MVI C,SETDMA - CALL BDOS - CALL RDWRT - LDA SECTOR - INR A - STA SECTOR - LDA COUNT - DCR A - STA COUNT - JNZ GTDIR2 - RET -* -* -TRSEC: ;CALCULATES TR#,SEC# FROM # OF BLOCKS TO FILE - LHLD BLOCKS ;#OF BLOCKS > HL (4 SECTORS/BLOCK) - MVI B,2 -TRSC1: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ TRSC1 ;BLOCKS*4 IN HL -* - MVI A,1 - STA TRACK ;INIT. TRACK -TRSC4: LXI D,0FFE6H ;-26 - DAD D - MOV A,H - RAL - JNC TRSC2 - LXI D,1BH - DAD D - JMP TRSC3 -TRSC2: LDA TRACK - INR A - STA TRACK - JMP TRSC4 -TRSC3: MOV A,L - STA SECTOR - RET ;TR# IS IN TRACK,SEC# IS IN SECTOR -* -NAMCOM: ;COMPARES PERM. FILE NAME WITH NEW FILE NAME AND SETS FLAG - ; "MATCH" IF SAME - PUSH H - PUSH B - MVI C,6 - LXI H,FILE - SHLD FLNMPT - LXI H,FILELO - SHLD FLBFPT -NMCOM1: LHLD FLNMPT - MOV B,M - INX H - SHLD FLNMPT - LHLD FLBFPT - MOV A,M - INX H - SHLD FLBFPT - CMP B - JNZ NOMACH - DCR C - JNZ NMCOM1 - MVI A,1 - STA MATCH - POP B! POP H - RET -NOMACH: XRA A - STA MATCH - POP B! POP H - RET -* -* -* -CHR3: ;TAKES 3 ASCII CHARS FROM A,B,C (SEQ.) & CONVERTS THEM - ; TO A RADIX50 WORD IN R50NUM - PUSH H - PUSH D - CALL ASCR50 ;CONVERT TO RAD50 CHAR - MOV L,A - MVI H,0 - CALL X50 - CALL X50 ;MULTIPLY HL BY 50**2 (OCTAL) - SHLD R50NUM ;C1*50**2 - MOV A,B - CALL ASCR50 - MOV L,A - MVI H,0 - CALL X50 ;C2*50Q - XCHG - LHLD R50NUM - DAD D - SHLD R50NUM ;C1*50**2+C2*50 - MOV A,C - CALL ASCR50 - MOV L,A - MVI H,0 - XCHG - LHLD R50NUM - DAD D - SHLD R50NUM ;C1*50**2+C2*50+C3 - POP D - POP H - RET -* -ASCR50: ;CONVERTS AN ASCII CHAR TO A BASIC RADIX50 CHAR(RET IN A) - CPI 20H - JNZ ASC1 - XRA A - RET -ASC1: CPI '$' - JNZ ASC2 - MVI A,1BH - RET -ASC2: CPI '.' - JNZ ASC3 - MVI A,1CH - RET -ASC3: CPI 'A' - JM ASC4 - CPI 5BH - JP ILLCHR - SUI 40H - RET -ASC4: CPI '0' - JM ILLCHR - CPI 3AH - JP ILLCHR - SUI 12H - RET -ILLCHR: LXI H,M5 ;NON-RAD50 CHAR-TRY AGAIN - CALL MSG - JMP AGAIN -* -X50: ;MULTIPLY HL BY 50Q & RETURN IN HL - PUSH B - PUSH D - MVI B,3 -X50A: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ X50A - SHLD X8 - MVI B,2 -X50B: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ X50B - XCHG - LHLD X8 - DAD D - POP D - POP B - RET -GETNAM: JMP BEGIN -* -*BUFFER:* -NAMBUF: DS 25 -* -* -BEGIN: MVI A,24 - STA CONBUF - MVI C,RCONBF - LXI D,CONBUF - CALL BDOS - LXI H,CONBUF+1 - LDA CNTMSK - MOV D,A - MOV A,M - STA COUNT - CMP D - JP SYNERR - INX H - LXI B,NAMBUF - LDA COUNT2 - MOV D,A - MVI E,0 -MOVCHR: MOV A,M - CPI '.' - JZ DOT - DCR D - JZ SYNERR - STAX B - INX B - INX H - INR E - JMP MOVCHR -DOT: DCR D - JZ GETEXT - MVI A,20H -DOT1: STAX B - INX B - DCR D - JNZ DOT1 -GETEXT: MVI A,'.' - STAX B - INR E - LDA COUNT - SUB E - CPI 4 - JP SYNERR - MOV D,A - MVI A,3 - SUB D - INR A - MOV E,A - CPI 4 - JZ GTEXT2 -GTEXT1: INX H - INX B - MOV A,M - STAX B - DCR D - JNZ GTEXT1 -GTEXT2: DCR E - JZ PUT$ - MVI A,20H - INX B - STAX B - JMP GTEXT2 -PUT$ INX B - MVI A,'$' - STAX B - RET -SYNERR: CALL CRLF - LXI H,M7 ;SYNTAX ERROR - CALL MSG - JMP AGAIN -* -* -* -MAIN: LXI H,SIGNON ;THIS PROGRAM... - CALL MSG - LXI H,M18 ;ZERO DEC DISK(Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ AGAIN - LXI H,M19 ;ARE YOU SURE(Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ AGAIN - LXI H,M0 ;PLACE DESTINATION... - CALL MSG -STDIR1: LXI H,M14 ;IS DEC DISK INTERLEAVED? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ STDIR2 - MVI A,1 - STA INTLEV - JMP SETDIR -STDIR2: CPI 'N' - JNZ STDIR1 - XRA A - STA INTLEV -SETDIR: LXI H,4 - SHLD HDWD1 ;SEGMENTS AVAILABLE=4 - LXI H,0 - SHLD HDWD2 ;NEXT SEGMENT=0 - SHLD HDWD4 ;EXTRA WORDS/ENTRY=0 - INX H - SHLD HDWD3 ;HIGHEST OPEN SEG.=1 - LXI H,000EH - SHLD HDWD5 ;FILES START AT BLOCK 000E - LXI H,0200H - SHLD ENTRYS ;SET SW1 TO EMPTY FILE - LXI H,479 - SHLD ENTRYS+8 ;SET EMPTY LENGTH TO ENTIRE DISK (479 BL) - LXI H,0800H - SHLD ENTRYS+14 ;SET SW2 TO END-OF-SEGMENT - MVI A,0FFH - STA OPFLAG - CALL DIRECT ;WRITE OUT NEW DIRECTORY - JMP FINIS -* -* -AGAIN: CALL CRLF - LXI H,M10 ;CP/M FILENAME.TYP= - CALL MSG - MVI A,9 - STA COUNT2 ;COUNT FOR CP/M'S 8 CHARS +1 - MVI A,13 - STA CNTMSK ;MASK FOR TOO MANY CHARS - CALL GETNAM ;GET NAME FROM OPERATOR INTO NAMBUF & PAD - CALL CRLF - LXI H,NAMBUF ;1ST 3 CHARS - LXI D,FCB+1 ;STORE FILENAME.TYP - MVI C,8 -LOOP1: MOV A,M - STAX D - INX H - INX D - DCR C - JNZ LOOP1 - INX H ;GO PAST '.' - MVI C,3 -LOOP2: MOV A,M - STAX D - INX H - INX D - DCR C - JNZ LOOP2 ;FILENAME.TYPE STORED - MVI C,4 - XRA A -LOOP3: STAX D ;ZERO EX,2 UNUSED BYTES,& RC - INX D - DCR C - JNZ LOOP3 - CALL CRLF - LXI H,M6 ;DEC FILNAM.EXT= - CALL MSG - MVI A,7 - STA COUNT2 ;COUNT FOR DEC'S 6 CHARS +1 - MVI A,11 - STA CNTMSK ;MASK FOR TOO MANY CHARS - CALL GETNAM - CALL CRLF - LXI H,NAMBUF - MOV A,M - INX H - MOV B,M - INX H - MOV C,M - CALL CHR3 - LHLD R50NUM - SHLD FILE ;CONVERT 1ST 3 ASCII CHARS - LXI H,NAMBUF+3 - MOV A,M - INX H - MOV B,M - INX H - MOV C,M - CALL CHR3 - LHLD R50NUM - SHLD NAME ;CONVERT 2ND 3 ASCII CHARS - LXI H,NAMBUF+7 - MOV A,M - INX H - MOV B,M - INX H - MOV C,M - CALL CHR3 - LHLD R50NUM - SHLD EXT -GOON: LXI H,M14 ;IS DEC DISK INTERLEAVED (Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ NO2 - MVI A,1 - STA INTLEV ;SET INTERLEAVE FLAG - JMP GOON2 -NO2: CPI 'N' - JNZ GOON - XRA A - STA INTLEV -* -GOON2: CALL CRLF - LXI H,M0 ;PLACE DESTINATION (DEC) DISK ON DRIVE B - CALL MSG - LXI H,M0A ;READY (Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ AGAIN -*GET DIRECTORY INTO DRBUFF -* - XRA A - STA OPFLAG ;SET FLAG FOR READ - CALL DIRECT ;READ IN DIRECT. -*DIRECTORY READY-SEARCH FOR END - XRA A - STA ENTCNT ;INIT. ENTRY COUNT - LHLD HDWD5 - SHLD BLKCNT ; " BLOCK COUNT - LHLD ENTRYS - SHLD ENTRY ; " ENTRY POINTER - LXI H,ENTRYS - SHLD BUFFPT ; " BUFFER PT. -DRLOOP: LHLD ENTRY - MVI A,08 - CMP H - CNZ FILBLK ;UPDATE BLKCNT,ETC. - JNZ DRLOOP - LDA ENTCNT - CPI 70 - JNZ DIROK - LXI H,M9 ;?DIR FULL? - CALL MSG - JMP FINIS -DIROK: LHLD BUFFPT - LXI D,0-6 - DAD D ;GO BACK TO LAST FILE LENGTH - MOV E,M - INX H - MOV D,M - XCHG - SHLD LENGTH - XCHG - CALL NEGDE - PUSH H - LHLD BLKCNT - DAD D - SHLD BLKCNT ;SUBTRACT EMPTY FILE LENGTH FROM BLKCNT - POP H - LXI D,0-8 - DAD D - MOV A,M - CPI 02 - JZ DIROK2 - LXI H,M9 - CALL MSG - JMP FINIS -DIROK2: DCX H - SHLD BUFFPT ;LEAVE POINT. IN POS. FOR LATER -* -*DEC DIRECTORY HAS BEEN SET UP-NOW OPEN CP/M FILE FOR INPUT -* - MVI C,SELDSK - MVI E,0 - CALL BDOS - MVI C,OPENF - LXI D,FCB - CALL BDOS - CPI 0FFH - JNZ OPENOK - LXI H,M4 ;FIL NOT FND - CALL MSG - JMP AGAIN -OPENOK: XRA A - STA FCB+32 ;ZERO NEXT RECORD - LHLD BLKCNT - SHLD BLOCKS - CALL TRSEC ;LOAD STARTING LOG. TR & SEC TO VARIABLES - CALL CRLF -* - MVI A,0FFH - STA OPFLAG ;SET TO WRITE ON DISK B -* -* -*CALCULATE BUFFER SIZE -* - LXI H,PRGEND - XCHG - CALL NEGDE - LHLD 6 ;GET BDOS ADDR - DAD D - MVI C,7 -DIV128: MOV A,H - RAR - MOV H,A - MOV A,L - RAR - MOV L,A - DCR C - JNZ DIV128 - MOV A,H - ANI 01 - MOV H,A ;DIFFERENCE/128 IN HL -* -* - DCX H - DCX H - SHLD TOPCNT ;SAVE # OF BUFFERS - LXI H,0 - SHLD RCRDS -* -*BEGIN TRANSFER-SET UP BUFFER POINTER -* -XFER0: LXI H,PRGEND - SHLD XFBFPT - LXI H,0 - SHLD PASSCT - LHLD TOPCNT - SHLD COUNT3 - MVI C,SELDSK - MVI E,0 - CALL BDOS ;SELECT DISK A - LXI D,BUFF - MVI C,SETDMA - CALL BDOS ;SET DMA TO DEFAULT BUFFER - LXI D,0 -* -* -XFER: LHLD XFBFPT - DAD D - SHLD XFBFPT - MVI C,READF - LXI D,FCB - CALL BDOS - CPI 255 - JZ CPMERR - CPI 1 - JZ EOFFND - MVI C,80H - LHLD XFBFPT - LXI D,BUFF -XFER3: LDAX D - CPI 1AH - JZ EOF - MOV M,A - INX D - INX H - DCR C - JNZ XFER3 - LHLD PASSCT - INX H - SHLD PASSCT - LHLD RCRDS - INX H - SHLD RCRDS - LXI D,128 - LHLD COUNT3 - CALL DCR16 - SHLD COUNT3 - JC XFER -* -*OUT OF BUFFER ROOM-WRITE OUT BUFFER -* - LHLD TOPCNT - SHLD COUNT4 ;DO ALL SECTORS IN BUFFER - LXI H,PRGEND - SHLD XFBFPT - MVI C,SELDSK - MVI E,1 - CALL BDOS - LXI D,0 -* -XFER1: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL RDWRT - CALL REGMOD - LXI D,128 - LHLD COUNT4 - CALL DCR16 - SHLD COUNT4 - JC XFER1 -* - JMP XFER0 -* -*EOF CHAR FOUND-CHANGE IT & REST OF BUFFER TO 00'S -* -EOF: XRA A - MOV M,A - INX H - DCR C - JNZ EOF+1 - LHLD RCRDS - INX H - SHLD RCRDS - LHLD PASSCT - INX H - SHLD PASSCT -* -*WRITE OUT BUFFER -* -EOFFND: LXI H,PRGEND - SHLD XFBFPT - LHLD PASSCT - DCX H - SHLD COUNT4 - MVI C,SELDSK - MVI E,1 - CALL BDOS - LXI D,0 -* -XFER2: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL RDWRT - CALL REGMOD - LXI D,128 - LHLD COUNT4 - CALL DCR16 - SHLD COUNT4 - JC XFER2 -* -*FILE WRITTEN OUT-NOW CALC. # OF BLOCKS,ETC. -* -* - LHLD RCRDS - CALL DIV4 ;DIVIDE RCRDS BY 4 TO GET BLOCKS - CPI 0 - JZ NOXTRA - CPI 4 - JM XTRA - LXI H,M16 ;DIV4 ERROR - CALL MSG - JMP FINIS -XTRA: INX H -NOXTRA: SHLD BLKNUM - STA EXTRA -* -*NOW WRITE "EXTRA" SECTORS OF 00'S (TO FILL PHYSICAL BLOCK) -* - MVI C,SELDSK - MVI E,1 - CALL BDOS - LDA EXTRA - CPI 0 - JZ NEXTRA - MOV B,A - MVI A,4 - SUB B - MOV B,A ;#OF SECT. TO B - XRA A - LXI H,BUFF - MVI C,80H -BFLOOP: MOV M,A - INX H - DCR C - JNZ BFLOOP ;FILL BUFFER W/00 - PUSH B ;SAVE EXTRA COUNT IN B - LXI D,BUFF - MVI C,SETDMA - CALL BDOS ;SET DMA TO BUFF - POP B -BFLOP1: CALL RDWRT - CALL REGMOD - DCR B - JNZ BFLOP1 ;DO B TIMES -* -NEXTRA: LHLD BLKNUM - XCHG - CALL NEGDE - LHLD LENGTH - DAD D - JC LNTHOK - LXI H,M17 ;FILE WON'T FIT - CALL MSG - JMP FINIS -LNTHOK: SHLD LENGTH ;SAVE NEW EMPTY LENGTH -* -* -*CAN CLOSE DEC FILE NOW -* -CLOSE: LHLD BUFFPT ;HL PT. @ NEW FILE SW - INX H - MVI A,04 - MOV M,A ;CHANGE SW TO PERM. FILE - INX H - LDA FILE ;PUT NEW FILNAM.EXT IN ENTRY - MOV M,A - INX H - LDA FILE+1 - MOV M,A - INX H - LDA NAME - MOV M,A - INX H - LDA NAME+1 - MOV M,A - INX H - LDA EXT - MOV M,A - INX H - LDA EXT+1 - MOV M,A - INX H - LDA BLKNUM ;PUT NEW FILE LENGTH IN ENTRY - MOV M,A - INX H - LDA BLKNUM+1 - MOV M,A - INX H - INX H - INX H ;HL PT.@ DATE - XRA A - MOV M,A - INX H - MOV M,A ;ZERO DATE - INX H - MOV M,A ;SET UP NEXT ENTRY (EMPTY) - INX H - MVI A,02 - MOV M,A - LXI D,7 - DAD D ;PT.@ NEW EMPTY FILE LENGTH - LDA LENGTH - MOV M,A - INX H - LDA LENGTH+1 - MOV M,A - LXI D,5 - DAD D ;HL PT.@ NEW EOS SW - XRA A - MOV M,A - INX H - MVI A,08 - MOV M,A ;WRITE END OF SEGMENT CODE -* -*DIRECTORY IS MODIFIED-NOW WRITE IT ON DEC DISK - MVI A,0FFH - STA OPFLAG ;TO BE SURE - CALL DIRECT - JMP FINIS -* -* -* -*SUBROUTINES -* -REGMOD: ;MODIFY DRIVE B REGISTERS AFTER SECTOR READ - LDA SECTOR - CPI 26 - JZ RM1 - INR A - STA SECTOR - RET -RM1: MVI A,1 - STA SECTOR - LDA TRACK - INR A - STA TRACK - CPI 75 - RM ;RET IF LESS THAN 75 - LXI H,M17 - CALL MSG - JMP FINIS -* -DCR16: ;DECREMENT HL BY 1 & SET FLAG C IF RESULT NOT ZERO - ; NC IF RESULT 0 - PUSH D - LXI D,0FFFFH ;-1 - DAD D - POP D - RET -* -DIV4: ;DIVIDES HL BY 4-RESULT IN HL W/ REM. IN A - PUSH B - MVI C,0 - MVI B,2 -DIV4A: MOV A,H - RAR - MOV H,A - MOV A,L - RAR - MOV L,A - MOV A,C - RAR - MOV C,A - DCR B - JNZ DIV4A - MOV A,H - ANI 3FH ;STRIP EXTRA BITS - MOV H,A - MOV A,C - RAR - RAR - RAR - RAR - RAR - RAR - ANI 3 ;STRIP EXTRA BITS - POP B - RET -* -NEGDE: ;NEGATE (2'S COMP.) DE REGISTER - PUSH PSW - MOV A,D - CMA - MOV D,A - MOV A,E - CMA - MOV E,A - INX D - POP PSW - RET -FILBLK: ;UPDATE BLOCK COUNT & SET UP ENTRIES - ; CHANGE PERM SW TO EMPTY SW IF NAMES MATCH - PUSH PSW - MVI A,4 - CMP H - JNZ FLBLK1 - LHLD BUFFPT - INX H - INX H - MOV A,M - STA FILELO - INX H - MOV A,M - STA FILEHI - INX H - MOV A,M - STA NAMELO - INX H - MOV A,M - STA NAMEHI - INX H - MOV A,M - STA EXTLO - INX H - MOV A,M - STA EXTHI - CALL NAMCOM - LDA MATCH - RAR - JC MTCHES - LXI D,0-7 - DAD D - SHLD BUFFPT - JMP FLBLK1 -MTCHES: LXI D,0-6 - DAD D ;PTER @ SW LO BYTE - MVI A,2 - MOV M,A ;CHANGE SW TO EMPTY FILE - DCX H - SHLD BUFFPT -FLBLK1: LHLD BUFFPT - LXI D,8 - DAD D ;PT.@ LENGTH BYTE1 - MOV E,M - INX H - MOV D,M - PUSH H - LHLD BLKCNT - DAD D - SHLD BLKCNT - POP H - LXI D,5 - DAD D ;PT.@NEXT ENTRY BYTE1 - SHLD BUFFPT - MOV A,M - STA ENTRY - INX H - MOV A,M - STA ENTRY+1 - LDA ENTCNT - INR A - STA ENTCNT ;INR ENTRY COUNT - POP PSW - RET -* -CMP16: ;COMPARES HL &DE & SETS USUAL FLAGS - MOV A,H - CMP D - RNZ - MOV A,L - CMP E - RET -* -* -CPMERR: LXI H,M12 ;CP/M WRITE ERROR - CALL MSG - JMP FINIS -* -* -FINIS: LXI H,M15 ;ANOTHER TRANSFER? - CALL MSG - CALL CHIN - CPI 'Y' - JZ AGAIN - JMP 0 ;REBOOT CP/M AND GO TO IT -* -* -*VARIABLES -INTLEV: DS 1 ;INTERLEAVE FLAG -OPFLAG: DS 1 ;OPERATION FLAG- 0>READ,FF>WRITE -EXTRA: DS 1 ;# OF EXTRA SECTORS TO XFER -BLKNUM: DS 2 ;LENGTH OF NEW FILE -ENTCNT: DS 1 ;# OF ENTRIES IN DEC DIRECTORY -X2: DS 2 ;HL*2 -TOPCNT: DS 2 ;# OF BUFFERS IN MEMORY SPACE -XFBFPT: DS 2 ;TRANSFER BUFFER POINTER -PASSCT: DS 2 ;PASS COUNT IN BUFFER -COUNT3: DS 2 ;COUNTER -COUNT4: DS 2 ; " -RCRDS: DS 2 ;#OF FULL SECTORS TO TRANSFER -BSECT: DS 1 ;NEW PHYSICAL SECTOR -CNTMSK: DS 1 ;COUNT MASK (IN GETNAM) -COUNT2: DS 1 ;SECOND UTILITY COUNTER -R50NUM: DS 2 ;RADIX 50 CONVERSION OF 3 ASCII CHARS -X8: DS 2 ;HL*8 -ENTRY: DS 2 ;ENTRY STATUS WORD POINTER -BLKCNT: DS 2 ;BLOCK COUNT (UPDATED EVERY ENTRY) -BLOCKS: DS 2 ;# OF BLOCKS TO FILE (VALID ONLY IF FOUND) -LENGTH: DS 2 ;LENGTH OF FILE FOUND (IN BLOCKS) -TRACK: DS 1 ;TRACK OF FOUND FILE -SECTOR: DS 1 ;SECTOR OF FOUND FILE -FLBFPT: DS 2 ;FILE BUFFER POINTER -FLNMPT: DS 2 ;FILE NAME POINTER -MATCH: DS 1 ;MATCH FLAG -FILELO: DS 1 ;PERM FILE NAME STORAGE -FILEHI: DS 1 -NAMELO: DS 1 -NAMEHI: DS 1 -EXTLO: DS 1 -EXTHI: DS 1 -FILE: DS 2 ;FILE NAME -NAME: DS 2 ; & EXT. OF -EXT: DS 2 ; REQUESTED FILE (DEC) -BTRACK: DS 1 ;PHYSICAL TRACK -COUNT: DS 1 ;UTILITY COUNTER LOCATION -BUFFPT: DS 2 ;DIRECTORY BUFFER POINTER -DRBUFF: ;DIRECTORY BUFFER -HDWD1: DS 2 ;SEGMENTS AVAILABLE -HDWD2: DS 2 ;NEXT SEGMENT -HDWD3: DS 2 ;HIGHEST OPEN SEGMENT -HDWD4: DS 2 ;EXTRA WORDS/ENTRY -HDWD5: DS 2 ;FILE STARTING BLOCK -ENTRYS: DS 1014 ;ENTRIES -ENDBUF: DS 1 -* -* -*MESSAGES -* -SIGNON: DB 0DH,0AH,'THIS PROGRAM TRANSFERS A FILE TO A DEC STANDARD (INTERLEAVED)' - DB 0DH,0AH,'OR A "CONSECUTIVE" FORMATTED DISK FROM THE CP/M SYSTEM DISK',0FFH -M0: DB 0DH,0AH,'PLACE DESTINATION (DEC) DISK ON DRIVE B',0DH,0AH,0FFH -M0A: DB 0DH,0AH,'READY (Y/N)?',0FFH -M1: DB 0DH,0AH,'SEEK ERROR-DISK B',0DH,0AH,0FFH -M2: DB 0DH,0AH,'I/O ERROR ON B',0DH,0AH,0FFH -M3: DB 0DH,0AH,'DIRECTORY ERROR',0DH,0AH,0FFH -M4: DB 0DH,0AH,'?FIL NOT FND?',0DH,0AH,0FFH -M5: DB 0DH,0AH,'NON-RAD50 CHAR-TRY AGAIN',0DH,0AH,0FFH -M6: DB 0DH,0AH,'DEC:FILNAM.EXT=',0FFH -M7: DB 'SYNTAX ERROR',0FFH -M8: DB 0DH,0AH,'?NO EOF?',0FFH -M9: DB 0DH,0AH,'?DIR FULL?',0FFH -M10: DB 0DH,0AH,'CP/M:FILENAME.TYP=',0FFH -M12: DB 0DH,0AH,'CP/M WRITE ERROR',0FFH -M14: DB 'IS DEC DISK INTERLEAVED (Y/N)?',0FFH -M15: DB 0DH,0AH,'ANOTHER TRANSFER (Y/N)?',0FFH -M16: DB 0DH,0AH,'DIV4 ERROR',0FFH -M17: DB 0DH,0AH,'NO ROOM FOR FILE',0FFH -M18: DB 0DH,0AH,0DH,0AH,'ZERO DEC DISK (Y/N)?',0FFH -M19: DB ' ARE YOU SURE (Y/N)?',0FFH -* -BYTBUF: DS 4 ;ISOLATE PROGRAM FROM XFER BUFFER -* -PRGEND EQU $ -* - END - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/DECTOCPM.ASM b/software/CPM/CPM14_MTPUG_02/DECTOCPM.ASM deleted file mode 100644 index dc3986c..0000000 --- a/software/CPM/CPM14_MTPUG_02/DECTOCPM.ASM +++ /dev/null @@ -1,1099 +0,0 @@ -*THIS PROGRAM TRANSFERS A FILE FROM A DEC FORMAT DISK TO A -* CP/M FORMAT DISK -* -* -*CP/M DEFINITIONS FOR PRIMITIVES -* -RDCON EQU 1 ;GET CHAR FROM CONSOLE -WRTCON EQU 2 ;TYPE CHAR ON CONSOLE -RDRDR EQU 3 ;GETCHAR FROM PAPER TAPE READER -WRTPCH EQU 4 ;SEND CHAR TO PUNCH -WRTLST EQU 5 ;SEND CHAR TO LIST DEVICE -IOSTAT EQU 7 ;INTERROGATE I/O STATUS (NOT USED HERE) -ALTIO EQU 8 ;ALTER I/O STATUS (NOT USED HERE) -PCONBF EQU 9 ;PRINT CONSOLE BUFFER -RCONBF EQU 10 ;READ CONSOLE BUFFER -CONST EQU 11 ;CHECK CONSOLE STATUS (BIT0 SET IF READY) -LIFTHD EQU 12 ;LIFT DISK HEAD (NOT USED HERE) -RSTDSK EQU 13 ;DMA ADDR TO 80H,SELECT DISK A -SELDSK EQU 14 ;SELECT DISK -OPENF EQU 15 ;OPEN FILE -CLOSEF EQU 16 ;CLOSE FILE -SRCH1 EQU 17 ;SEARCH FOR FIRST FILE OCCURRENCE -SCHNXT EQU 18 ;SEARCH FOR NEXT FILE OCCURRENCE -DELETF EQU 19 ;DELETE FILE -READF EQU 20 ;READ TO BUFFER -WRITEF EQU 21 ;WRITE TO BUFFER -MAKEF EQU 22 ;CREATE A FILE ENTRY -RENAMF EQU 23 ;RENAME A FILE -INTLOG EQU 24 ;INTERROGATE LOGIN VECTOR -INTDSK EQU 25 ;INTERROGATE DISK (RETURNS SELECTED DISK #) -SETDMA EQU 26 ;SET DMA ADDR -INTALL EQU 27 ;INTERROGATE ALLOCATION VECTOR -* -BDOS EQU 0005H ;DOS ENTRY POINT -FCB EQU 5CH ;DEFAULT FILE CONTROL BLOCK ADDRESS -BUFF EQU 80H ;DEFAULT DMA ADDRESS -* - ORG 0100H -* -*SET UP STACK - LXI SP,STKTOP - JMP EXEC -*STACK AREA -STACK: DS 64 -STKTOP EQU $ -* -*VARIABLES -CONBUF: DS 80 -* -EXEC: MVI A,79 - STA CONBUF ;SET FIRST BYTE TO BUFFER LENGTH - JMP MAIN ;JUMP TO MAIN PROGRAM -*SUBROUTINES -PCHAR: ;PRINT CHAR IN REG A - PUSH H! PUSH D! PUSH B ;ENVIRONMENT SAVED - MVI C,WRTCON - MOV E,A - CALL BDOS - POP B! POP D! POP H ;ENVIRONMENT RESTORED - RET -* -CRLF: ;PRINT A CARRIAGE RETURN & LINE FEED - MVI A,0DH - CALL PCHAR - MVI A,0AH - CALL PCHAR - RET -* -PNIB: ;PRINT NIBBLE IN REG A - ANI 0FH ;LOWER 4 BITS - CPI 10 - JNC P10 - ;LESS THAN OR EQUAL TO 9 - ADI '0' - JMP PRN - ;GREATER THAN OR EQUAL TO 10 -P10: ADI 'A'-10 -PRN: CALL PCHAR - RET -* -PHEX: ;PRINT HEX CHAR IN REG A - PUSH PSW - RRC - RRC - RRC - RRC - CALL PNIB ;PRINT NIBBLE - POP PSW - CALL PNIB - RET -* -CHIN: ;GET A CHAR FROM CONSOLE - PUSH H! PUSH D! PUSH B - MVI C,RDCON - CALL BDOS - POP B! POP D! POP H - RET -* -MSG: ;PRINT A MESSAGE POINTED TO BY HL (END OF MESSAGE=0FFH) - MOV A,M - CPI 0FFH - RZ ;RETURN IF END OF MESSAGE - CALL PCHAR - INX H - JMP MSG -* -SETTRK: ;SET TRACK IN C - LHLD 1 - LXI D,27 - DAD D - PCHL -* -SETSEC: LHLD 1 - LXI D,30 - DAD D - PCHL -* -RDSEC: LHLD 1 - LXI D,36 - DAD D - PCHL -* -DISKRD: ;READ FROM DISK B-TRACK IN "TRACK",SECTOR IN "SECTOR" - PUSH B ;SAVE LOGICAL TRACK & SECTOR - LDA TRACK - STA BTRACK - LDA SECTOR - STA BSECT - LDA INTLEV ;GET INTERLEAVE FLAG - ORA A - JZ CONSEC ;0 > CONSECUTIVE SECTORS -* -*INTERLEAVE ALGORITHM FOR STANDARD DEC DISKS -* - PUSH D ;SAVE DMA ADDR - MVI H,0 - LDA BTRACK - MOV L,A - DCX H ;HL=TRACK-1;NOW MULTIPLY BY 6 - MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - SHLD X2 ;HL*2 -INTLV3: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - XCHG - LHLD X2 - DAD D ;HL*6 IN HL -* 6*(TRACK-1) IN HL -* -INTLV0: MOV A,H - ORA A - JNZ INTLV5 - MOV A,L - CPI 26 - JC INTLV4 -INTLV5: LXI D,0-26 - DAD D - JMP INTLV0 -INTLV4: LDA BSECT - DCR A ;SHIFT SECTOR DOWN (0-25) - PUSH PSW - ADD A - MOV E,A ;SAVE S2 - POP PSW - CPI 13 - MOV A,E ;GET S2 BACK TO ACC. - JM INTLV2 - INR A -INTLV2: ADD L ;ADD BIAS -INTLV1: SUI 26 - JP INTLV1 - ADI 27 - STA BSECT ;NEW PHYSICAL SECTOR TO BSECT - POP D ;RESTORE DMA ADDR -CONSEC: LDA BSECT - MOV C,A - CALL SETSEC - LDA BTRACK - MOV C,A - CALL SETTRK - CALL RDSEC - POP B - RET -* -GETDIR: ;GET DIRECTORY SEGMENT 1 INTO THE DIRECTORY BUFFER - ; ASSUME FILE WILL BE IN SEGMENT 1 - MVI C,SELDSK - MVI E,1 - CALL BDOS ;SEL DISK B - MVI A,2 - STA COUNT - LXI D,0 - MVI A,01H - STA TRACK - MVI A,19H - STA SECTOR - LXI H,DRBUFF - SHLD BUFFPT ;INIT. BUFFPT -GTDIR1: LHLD BUFFPT - DAD D - SHLD BUFFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL DISKRD ;READ SECTOR FROM DISK - LXI D,128 - MVI A,1AH - STA SECTOR - LDA COUNT - DCR A - STA COUNT - JNZ GTDIR1 ;READ IN FIRST 2 SECTORS - MVI A,6 - STA COUNT - MVI A,02 - STA TRACK - DCR A - STA SECTOR -GTDIR2: LXI D,128 ;LENGTH OF A SECTOR - LHLD BUFFPT - DAD D - SHLD BUFFPT - XCHG ;DMA ADDR > DE - MVI C,SETDMA - CALL BDOS - CALL DISKRD - LDA SECTOR - INR A - STA SECTOR - LDA COUNT - DCR A - STA COUNT - JNZ GTDIR2 - RET -* -* -TRSEC: ;CALCULATES TR#,SEC# FROM # OF BLOCKS TO FILE - LHLD BLOCKS ;#OF BLOCKS > HL (4 SECTORS/BLOCK) - MVI B,2 -TRSC1: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ TRSC1 ;BLOCKS*4 IN HL -* - MVI A,1 - STA TRACK ;INIT. TRACK -TRSC4: LXI D,0FFE6H ;-26 - DAD D - MOV A,H - RAL - JNC TRSC2 - LXI D,1BH - DAD D - JMP TRSC3 -TRSC2: LDA TRACK - INR A - STA TRACK - JMP TRSC4 -TRSC3: MOV A,L - STA SECTOR - RET ;TR# IS IN TRACK,SEC# IS IN SECTOR -* -NAMCOM: ;COMPARES PERM. FILE NAME & EXT. W/ DESIRED FILE NAME - ; & EXT. & SETS FLAG "MATCH" IF SAME - PUSH H - PUSH B - MVI C,6 - LXI H,FILE - SHLD FLNMPT - LXI H,FILELO - SHLD FLBFPT -NMCOM1: LHLD FLNMPT - MOV B,M - INX H - SHLD FLNMPT - LHLD FLBFPT - MOV A,M - INX H - SHLD FLBFPT - CMP B - JNZ NOMACH - DCR C - JNZ NMCOM1 - MVI A,1 - STA MATCH - POP B - POP H - RET -NOMACH: XRA A - STA MATCH - POP B - POP H - RET -* -* -DIRSCH: ;SEARCH DEC DIRECT. FOR FILE ENTRY MATCHING FILNAM.EXT - ; FROM COMMAND -* - CALL GETDIR ;GET DIRECTORY INTO DRBUFF - LHLD HDWD5 ;FILE STARTING BLOCK - SHLD BLKCNT - LHLD ENTRYS - SHLD ENTRY - LXI H,ENTRYS - SHLD BUFFPT -* -DRLOOP: LHLD ENTRY - MVI A,2 - CMP H - JZ EMPTY ;THIS ENTRY AN EMPTY FILE - MVI A,4 - CMP H - JZ PERM ;THIS ENTRY IS A PERMANENT FILE - MVI A,8 - CMP H - JZ ENDDIR ;END OF DIRECTORY - LXI H,M3 ;DIRECTORY ERROR - CALL MSG - JMP FINIS -* -EMPTY: LHLD BUFFPT - LXI D,8 - DAD D - MOV E,M - INX H - MOV D,M ;FILE LENGTH IN DE - PUSH H ;SAVE POINTER - LHLD BLKCNT - DAD D - SHLD BLKCNT ;UPDATE BLOCK COUNT - POP H - LXI D,5 - DAD D ;IGNORE REST OF ENTRY INFO - SHLD BUFFPT - MOV A,M - STA ENTRY - INX H - MOV A,M - STA ENTRY+1 - JMP DRLOOP ;CHECK NEXT ENTRY -* -PERM: LHLD BUFFPT - INX H - INX H - MOV A,M - STA FILELO ;GET FILNAM.EXT FOR COMPARISON - INX H - MOV A,M - STA FILEHI - INX H - MOV A,M - STA NAMELO - INX H - MOV A,M - STA NAMEHI - INX H - MOV A,M - STA EXTLO - INX H - MOV A,M - STA EXTHI ;FILNAM.EXT STORED - CALL NAMCOM ;CHECK THIS ENTRY FOR MATCH - INX H - MOV E,M - INX H - MOV D,M ;FILE LENGTH IN DE - XCHG - SHLD LENGTH ;SAVE FILE LENGTH - XCHG - PUSH H ;SAVE POINTER - LHLD BLKCNT - SHLD BLOCKS ;# OF BLOCKS TO THIS FILE - DAD D - SHLD BLKCNT ;UPDATE BLOCK COUNT - POP H - LDA MATCH - RAR - JC FOUND ;JUMP IF MATCH TO FOUND - LXI D,5 - DAD D ;IGNORE REST OF ENTRY INFO. - SHLD BUFFPT - MOV A,M - STA ENTRY - INX H - MOV A,M - STA ENTRY+1 ;SET UP FOR NEXT ENTRY - JMP DRLOOP ; & GO TO IT -* -ENDDIR: LXI H,M4 ;?FIL NOT FND? - CALL MSG - MVI A,1 - RET -* -FOUND: CALL TRSEC ;CALCULATE TR#,SEC# WHERE FILE BEGINS - CALL CRLF - XRA A - RET -* -CHR3: ;TAKES 3 ASCII CHARS FROM A,B,C (SEQ.) & CONVERTS THEM - ; TO A RADIX50 WORD IN R50NUM - PUSH H - PUSH D - CALL ASCR50 ;CONVERT TO RAD50 CHAR - MOV L,A - MVI H,0 - CALL X50 - CALL X50 ;MULTIPLY HL BY 50**2 (OCTAL) - SHLD R50NUM ;C1*50**2 - MOV A,B - CALL ASCR50 - MOV L,A - MVI H,0 - CALL X50 ;C2*50Q - XCHG - LHLD R50NUM - DAD D - SHLD R50NUM ;C1*50**2+C2*50 - MOV A,C - CALL ASCR50 - MOV L,A - MVI H,0 - XCHG - LHLD R50NUM - DAD D - SHLD R50NUM ;C1*50**2+C2*50+C3 - POP D - POP H - RET -* -ASCR50: ;CONVERTS AN ASCII CHAR TO A BASIC RADIX50 CHAR(RET IN A) - CPI 20H - JNZ ASC1 - XRA A - RET -ASC1: CPI '$' - JNZ ASC2 - MVI A,1BH - RET -ASC2: CPI '.' - JNZ ASC3 - MVI A,1CH - RET -ASC3: CPI 'A' - JM ASC4 - CPI 5BH - JP ILLCHR - SUI 40H - RET -ASC4: CPI '0' - JM ILLCHR - CPI 3AH - JP ILLCHR - SUI 12H - RET -ILLCHR: LXI H,M5 ;NON-RAD50 CHAR-TRY AGAIN - CALL MSG - JMP MAIN -* -X50: ;MULTIPLY HL BY 50Q & RETURN IN HL - PUSH B - PUSH D - MVI B,3 -X50A: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ X50A - SHLD X8 - MVI B,2 -X50B: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ X50B - XCHG - LHLD X8 - DAD D - POP D - POP B - RET -GETNAM: JMP BEGIN -* -*BUFFER:* -NAMBUF: DS 25 -* -* -BEGIN: MVI A,24 - STA CONBUF - MVI C,RCONBF - LXI D,CONBUF - CALL BDOS - LXI H,CONBUF+1 - LDA CNTMSK - MOV D,A - MOV A,M - STA COUNT - CMP D - JP SYNERR - INX H - LXI B,NAMBUF - LDA COUNT2 - MOV D,A - MVI E,0 -MOVCHR: MOV A,M - CPI '.' - JZ DOT - DCR D - JZ SYNERR - STAX B - INX B - INX H - INR E - JMP MOVCHR -DOT: DCR D - JZ GETEXT - MVI A,20H -DOT1: STAX B - INX B - DCR D - JNZ DOT1 -GETEXT: MVI A,'.' - STAX B - INR E - LDA COUNT - SUB E - CPI 4 - JP SYNERR - MOV D,A - MVI A,3 - SUB D - INR A - MOV E,A - CPI 4 - JZ GTEXT2 -GTEXT1: INX H - INX B - MOV A,M - STAX B - DCR D - JNZ GTEXT1 -GTEXT2: DCR E - JZ PUT$ - MVI A,20H - INX B - STAX B - JMP GTEXT2 -PUT$ INX B - MVI A,'$' - STAX B - RET -SYNERR: CALL CRLF - LXI H,M7 ;SYNTAX ERROR - CALL MSG - JMP AGAIN -* -* -* -MAIN: LXI H,SIGNON ;THIS PROGRAM... - CALL MSG -AGAIN: CALL CRLF - MVI C,SELDSK - MVI E,0 ;SEL. DK A - CALL BDOS - LXI H,M6 ;DEC FILE NAME&EXT= - CALL MSG - MVI A,7 - STA COUNT2 ;COUNT FOR DEC'S 6 CHARS +1 - MVI A,11 - STA CNTMSK ;MASK FOR TOO MANY CHARS - CALL GETNAM ;GET NAME FROM OPERATOR INTO NAMBUF & PAD - CALL CRLF - LXI H,NAMBUF ;1ST 3 CHARS - MOV A,M - INX H - MOV B,M - INX H - MOV C,M - CALL CHR3 - LHLD R50NUM - SHLD FILE - LXI H,NAMBUF+3 ;NEXT 3 CHARS - MOV A,M - INX H - MOV B,M - INX H - MOV C,M - CALL CHR3 - LHLD R50NUM - SHLD NAME - LXI H,NAMBUF+7 ;EXT. (ACCOUNT FOR '.') - MOV A,M - INX H - MOV B,M - INX H - MOV C,M - CALL CHR3 - LHLD R50NUM - SHLD EXT -ASCII: LXI H,M13 ;ASCII(Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ NO - XRA A - STA ASCFLG - JMP GOON - CPI 'N' - JNZ ASCII ;WANT EITHER Y OR N -NO: MVI A,1 - STA ASCFLG -GOON: LXI H,M14 ;IS DEC DISK INTERLEAVED (Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ NO2 - MVI A,1 - STA INTLEV ;SET INTERLEAVE FLAG - JMP GOON2 -NO2: CPI 'N' - JNZ GOON - XRA A - STA INTLEV -GOON2: MVI A,9 - STA COUNT2 ;COUNT FOR FILENAME+1 - MVI A,13 - STA CNTMSK ;TOTAL CHAR MASK - CALL CRLF - LXI H,M10 ;CP/M FILENAME.TYP= - CALL MSG - CALL GETNAM ;GET CP/M FILENAME.TYP - CALL CRLF - LXI H,NAMBUF - LXI D,FCB+1 ;STORE FILENAME.TYP - MVI C,8 -LOOP1: MOV A,M - STAX D - INX H - INX D - DCR C - JNZ LOOP1 - INX H ;GO PAST '.' - MVI C,3 -LOOP2: MOV A,M - STAX D - INX H - INX D - DCR C - JNZ LOOP2 ;FILENAME.TYP STORED - MVI C,4 - XRA A -LOOP3: STAX D - INX D - DCR C - JNZ LOOP3 ;ZERO EX,2 UNUSED BYTES,RC -* - LXI H,M0 ;PLACE SOURCE (DEC) DISK ON DRIVE B - CALL MSG -NRDY: LXI H,M0A ;READY (Y/N)? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ AGAIN -* -*DELETE OLD FILE BY SAME NAME IF IT EXISTS - MVI C,DELETF - LXI D,FCB - CALL BDOS -*CREATE A FILE FILENAME.TYP REQUESTED - MVI C,MAKEF - LXI D,FCB - CALL BDOS - CPI 0FFH - JNZ MAKEOK - LXI H,M11 ;CP/M DIRECTORY FULL - CALL MSG - JMP FINIS -MAKEOK: XRA A - STA FCB+32 ;ZERO RECORD COUNT -* - CALL DIRSCH - CPI 0 - JZ OPENOK - MVI C,SELDSK - MVI E,0 - CALL BDOS ;SEL DISK A - LXI D,FCB - MVI C,DELETF - CALL BDOS ;IF FILE NOT FOUND, DELETE OPENED FILE - JMP AGAIN ; AND START AGAIN -* -*READY FOR DATA TRANSFER FROM DEC DISK TO CP/M DISK -*IF FILE TO BE TRANSFERRED IS AN ASCII FILE,THE LAST BLOCK -*WILL BE SEARCHED FOR A DEC EOF CHAR AND 1AH (^Z=CP/M EOF) -*WILL BE INSERTED. OTHERWISE ALL BLOCKS WILL BE -*TRANSFERRED AS IS. -* -*CALCULATE BUFFER SIZE -* -OPENOK: LXI H,PRGEND - XCHG - CALL NEGDE - LHLD 6 ;GET BDOS ADDR - DAD D - MVI C,7 -DIV128: MOV A,H - RAR - MOV H,A - MOV A,L - RAR - MOV L,A - DCR C - JNZ DIV128 - MOV A,H - ANI 1 - MOV H,A ;DIFFERENCE/128 IN HL -* - LXI D,0-5 - DAD D - SHLD TOPCNT ;SAVE # OF BUFFERS (+ MARGIN) -* -*CALCULATE NUMBER OF SECTORS FROM NUMBER 0F BLOCKS -* - LHLD LENGTH - LXI D,1 - CALL CMP16 - JNZ SECTS - LXI D,0-128 - LXI H,PRGEND - DAD D - SHLD XFBFPT - LXI H,0 - SHLD PASSCT - LDA ASCFLG - ORA A - JZ LSTBLK - LXI H,3 - SHLD SECTRS - JMP DATFIL -* -* -SECTS: MVI B,2 -LNTHX4: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ LNTHX4 - DCX H - SHLD SECTRS ;SAVE TOTAL # OF SECTORS -* - LDA ASCFLG - ORA A - JNZ DATFIL - LXI D,0-4 - DAD D - SHLD SECTRS ;SUB 4 FROM SECTRS IF ASCII (FOR MONITORING) -* -DATFIL: LXI H,PRGEND - SHLD XFBFPT - LXI H,0 - SHLD PASSCT - LHLD TOPCNT - SHLD COUNT3 - MVI C,SELDSK - MVI E,1 - CALL BDOS - LXI D,0 -* -XFER1: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL DISKRD ;READ A SECTOR,STORE IN LARGE BUFFER - CALL REGMOD - LHLD PASSCT - INX H - SHLD PASSCT - LHLD SECTRS - CALL DCR16 - SHLD SECTRS - JNC LSTBLK ;JUMP OUT IF DONE WITH ALL BUT LAST BLOCK - LXI D,128 - LHLD COUNT3 - CALL DCR16 - SHLD COUNT3 - JC XFER1 -* -*BUFFER FULL-WRITE IT OUT -* - LXI H,PRGEND - SHLD XFBFPT - LHLD TOPCNT - SHLD COUNT3 - MVI C,SELDSK - MVI E,0 - CALL BDOS ;SELECT DISK A - LXI D,0 -* -XFER2: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS ;SET DMA ADDR - MVI C,WRITEF - LXI D,FCB - CALL BDOS ;WRITE OUT SECTOR - CPI 0 - JNZ CPMERR - LXI D,128 - LHLD COUNT3 - CALL DCR16 - SHLD COUNT3 - JC XFER2 -* -*BUFFER WRITTEN OUT-GO BACK & GET MORE DATA -* - JMP DATFIL -* -*ALL BUT LAST BLOCK HAS BEEN WRITTEN-CHECK LAST 4 SECTORS FOR EOF -* -LSTBLK: MVI A,4 - STA COUNT3 - LDA ASCFLG - ORA A - JZ LSTBL1 - LHLD LENGTH - LXI D,1 - CALL CMP16 - JNZ CLOSE ;IF NON-ASCII FILE >1 BLOCK, CLOSE IT - LXI H,PRGEND - SHLD XFBFPT - MVI C,SELDSK - MVI E,0 - CALL BDOS ;SEL DISK A - LXI D,0 -* -XFER5: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS - MVI C,WRITEF - LXI D,FCB - CALL BDOS ;WRITE SECTOR - CPI 0 - JNZ CPMERR - LXI D,128 - LDA COUNT3 - DCR A - STA COUNT3 - JNZ XFER5 - JMP CLOSE ;GO CLOSE 1 BLOCK DATA FILE -* -* -LSTBL1: MVI C,SELDSK - MVI E,1 - CALL BDOS ;SEL DISK B - LXI D,128 -* -* -XFER3: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL DISKRD - CALL REGMOD - MVI D,80H - LHLD XFBFPT -CONT: MOV A,M - CPI 0 ;DEC EOF 1 - JZ EOF - CPI 10H ;DEC EOF 2 - JZ EOF - INX H - DCR D - JNZ CONT -*NO EOF IN THIS BUFFER- INC. PASS COUNT & REPEAT - LHLD PASSCT - INX H - SHLD PASSCT - LXI D,128 - LDA COUNT3 - DCR A - STA COUNT3 - JNZ XFER3 -*ASSUME FILE ENDS ON PHYSICAL BOUNDARY-WRITE OUT BUFFER - JMP EOFFND -* -*EOF CHAR FOUND-CHANGE REST OF BUFFER TO 1AH -* -EOF: MVI A,1AH - MOV M,A - INX H - DCR D - JNZ EOF+2 - LHLD PASSCT - INX H - SHLD PASSCT ;INC PASS COUNT -* -*WRITE OUT LAST BUFFER -* -EOFFND: LXI H,PRGEND - SHLD XFBFPT - LHLD PASSCT - DCX H - SHLD COUNT3 - MVI C,SELDSK - MVI E,0 - CALL BDOS ;SEL DISK A - LXI D,0 -* -XFER4: LHLD XFBFPT - DAD D - SHLD XFBFPT - XCHG - MVI C,SETDMA - CALL BDOS ;SET DMA ADDR - MVI C,WRITEF - LXI D,FCB - CALL BDOS ;WRITE OUT SECTOR - CPI 0 - JNZ CPMERR - LXI D,128 - LHLD COUNT3 - CALL DCR16 - SHLD COUNT3 - JC XFER4 -* -*CAN CLOSE CP/M FILE NOW -CLOSE: MVI C,SELDSK - MVI E,0 - CALL BDOS ;SEL DISK A - MVI C,CLOSEF - LXI D,FCB - CALL BDOS - CPI 0FFH - JNZ FINIS - LXI H,M9 ;CLOSE ERROR - CALL MSG - JMP FINIS -* -*SUBROUTINES -* -REGMOD: ;MODIFY DRIVE B REGISTERS AFTER SECTOR READ - LDA SECTOR - CPI 26 - JZ RM1 - INR A - STA SECTOR - RET -RM1: MVI A,1 - STA SECTOR - LDA TRACK - INR A - STA TRACK - RET -* -CMP16: ;COMPARES HL & DE & SETS USUAL FLAGS - MOV A,H - CMP D - RNZ - MOV A,L - CMP E - RET -* -NEGDE: ;NEGATE DE REGISTER (2'S COMP) - PUSH PSW - MOV A,D - CMA - MOV D,A - MOV A,E - CMA - MOV E,A - INX D - POP PSW - RET -* -DCR16: ;DECREMENT HL BY 1 & SET FLAG C IF RESULT >= 0 - ; NC IF RESULT < 0 - PUSH D - LXI D,0FFFFH ;-1 - DAD D - POP D - RET -* -CPMERR: LXI H,M12 ;CP/M WRITE ERROR - CALL MSG - JMP FINIS -* -* -FINIS: LXI H,M15 ;ANOTHER TRANSFER? - CALL MSG - CALL CHIN - CPI 'Y' - JZ AGAIN - JMP 0 ;REBOOT CP/M & GO TO IT -* -* -*VARIABLES -TOPCNT: DS 2 ;TOTAL # OF BUFFERS IN MEMORY SPACE -XFBFPT: DS 2 ;TRANSFER BUFFER POINTER -PASSCT: DS 2 ;PASS COUNT -COUNT3: DS 2 ;COUNTER -INTLEV: DS 1 ;INTERLEAVE FLAG -X2: DS 2 ;HL*2 -SECTRS: DS 2 ;#OF FULL SECTORS TO TRANSFER -BSECT: DS 1 -ASCFLG: DS 1 ;ASCII FLAG -CNTMSK: DS 1 ;COUNT MASK (IN GETNAM) -COUNT2: DS 1 ;SECOND UTILITY COUNTER -R50NUM: DS 2 ;RADIX 50 CONVERSION OF 3 ASCII CHARS -X8: DS 2 ;HL*8 -FILELO: DS 1 ;PERMANENT FILE NAME & EXT. STORAGE -FILEHI: DS 1 -NAMELO DS 1 -NAMEHI DS 1 -EXTLO DS 1 -EXTHI DS 1 ;END OF PERM. NAME STORAGE -ENTRY: DS 2 ;ENTRY STATUS WORD POINTER -BLKCNT: DS 2 ;BLOCK COUNT (UPDATED EVERY ENTRY) -BLOCKS: DS 2 ;# OF BLOCKS TO FILE (VALID ONLY IF FOUND) -LENGTH: DS 2 ;LENGTH OF FILE FOUND (IN BLOCKS) -MATCH: DS 1 ;FILE FOUND FLAG (SET IF FOUND) -TRACK: DS 1 ;TRACK OF FOUND FILE -SECTOR: DS 1 ;SECTOR OF FOUND FILE -FILE: DS 2 ;FILE NAME -NAME: DS 2 ; & EXT. OF -EXT: DS 2 ; REQUESTED FILE (DEC) -FLNMPT: DS 2 ;FILE NAME POINTER -FLBFPT: DS 2 ;PERM. FILE NAME POINTER -BTRACK: DS 1 ;PHYSICAL TRACK -ERRCNT: DS 1 ;ERROR COUNT -COUNT: DS 1 ;UTILITY COUNTER LOCATION -BUFFPT: DS 2 ;DIRECTORY BUFFER POINTER -DRBUFF: ;DIRECTORY BUFFER -HDWD1: DS 2 ;SEGMENTS AVAILABLE -HDWD2: DS 2 ;NEXT SEGMENT -HDWD3: DS 2 ;HIGHEST OPEN SEGMENT -HDWD4: DS 2 ;EXTRA WORDS/ENTRY -HDWD5: DS 2 ;FILE STARTING BLOCK -ENTRYS: DS 1014 ;ENTRIES -ENDBUF: DS 1 -* -* -*MESSAGES -* -SIGNON: DB 0DH,0AH,'THIS PROGRAM TRANSFERS A FILE FROM A DEC STANDARD (INTERLEAVED)' - DB 0DH,0AH,'OR A "CONSECUTIVE" FORMATTED DISK TO THE CP/M SYSTEM DISK',0FFH -M0: DB 0DH,0AH,'PLACE SOURCE (DEC) DISK ON DRIVE B',0DH,0AH,0FFH -M0A: DB 0DH,0AH,'READY (Y/N)?',0FFH -M3: DB 0DH,0AH,'DIRECTORY ERROR',0DH,0AH,0FFH -M4: DB 0DH,0AH,'?FIL NOT FND?',0DH,0AH,0FFH -M5: DB 0DH,0AH,'NON-RAD50 CHAR-TRY AGAIN',0DH,0AH,0FFH -M6: DB 0DH,0AH,'DEC:FILNAM.EXT=',0FFH -M7: DB 'SYNTAX ERROR',0FFH -M8: DB 0DH,0AH,'?NO EOF?',0FFH -M9: DB 0DH,0AH,'CLOSE ERROR',0FFH -M10: DB 0DH,0AH,'CP/M:FILENAME.TYP=',0FFH -M11: DB 0DH,0AH,'CP/M DIRECTORY FULL',0FFH -M12: DB 0DH,0AH,'CP/M WRITE ERROR',0FFH -M13: DB 'ASCII(Y/N)?',0FFH -M14: DB 0DH,0AH,'IS DEC DISK INTERLEAVED (Y/N)?',0FFH -M15: DB 0DH,0AH,'ANOTHER TRANSFER (Y/N)?',0FFH -* -* -PAD: DS 4 -* -PRGEND EQU $ -* -* -* - END - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/HEATH.DOC b/software/CPM/CPM14_MTPUG_02/HEATH.DOC deleted file mode 100644 index 4731e43..0000000 --- a/software/CPM/CPM14_MTPUG_02/HEATH.DOC +++ /dev/null @@ -1,72 +0,0 @@ -Program Name: Heath.Pas -Author: Jerome F. Jankura - -Description: - Heath.Paó  provideó aî interfacå betweeî thå Heath/Zenitè 1¹ -terminaì anä Pascaì programs® Procedureó provideä include: - - REVERSEº Thió procedurå ió invokeä tï puô thå H-1¹ intï itó -        reverså  (Blacë  characters¬  whitå  background©  displaù -        mode. - -     NORMALº  Thió  procedurå ió invokeä tï puô thå H-1¹ iî  thå -        normal (Black background, white characters) display mode. - - PUT25º  Thió procedurå enableó thå twenty-fiftè linå oî thå -        H-1¹  terminaì anä positionó thå cursoò aô thå  beginninç -        of the twenty-fifth line. - - SAVECURSORº  Thió procedurå instructó thå H-1¹ tï storå thå -        currenô  cursoò positioî iî itó  internaì  memory®  Thió -        commanä ió useä bù thå procedurå whicè enableó writinç tï -        the twenty-fifth line on the terminal. - - RESTORECURSORº  Thió  procedurå restoreó thå cursoò tï  thå -        positioî  whicè  waó storeä bù thå SAVECURSOÒ  procedure® -        Thió procedurå musô bå invokeä bù thå useò prograí  afteò -        writinç  thå twenty-fiftè linå beforå normaì CRÔ  displaù -        will occur. - - PUTCURSORº  Thió procedurå allowó positionihç thå cursoò aô -        anù  locatioî oî thå CRÔ screen®  Thå procedurå  acceptó -        twï  parameteró  (integer)®  Thå firsô ió  thå  verticaì -        positioî  oæ thå cursor®  Acceptablå valueó rangå froí ± -        tï 25®  Thå seconä parameteò ió thå horizontaì  positioî -        oæ thå cursor® Acceptablå valueó rangå froí ± tï 80® Nï -        range checking is performed in the interests of speed. - - GETCURSORº  Thió  procedurå returnó thå coordinateó oæ  thå -        currenô positioî oæ thå cursor®  GETCURSOÒ mighô bå useä -        bù  menõ  driveî  softwarå tï returî thå  selectioî  codå -        requested by an operator. - - CLEARLINEº  Thió procedurå eraseó thå currenô linå froí thå -        screeî  anä positionó thå cursoò aô thå beginninç oæ  thå -        current line. - - CLEARSCREENº  Thió  procedurå eraseó thå entirå screeî  anä -        puts the cursor in the home position. - - CLEARTOPº  Thió  procedurå erases thå uppeò portioî oæ  thå -        screen from the current position of the cursor. - - CLEARBOTTOMº Thió procedurå eraseó thå loweò portioî oæ thå -        screen from the current position of the cursor. - Š EOLº  Thió  procedurå  performó thå eraså tï  enä  oæ  linå -        function¬  clearinç thå linå froí thå currenô positioî oæ -        thå  cursoò tï thå enä oæ line®  Cursoò positioî remainó -        the same. - - EBLº  Thió  procedurå  eraseó  thå currenô  linå  froí  thå -        currenô  cursoò  positioî tï thå beginninç oæ  thå  line® -        Cursoò  positioî  ió  thå samå  afteò  thå  operatioî  aó -        before. - - FUNCTKEYº  Thió functioî scanó thå incominç datá streaí foò -        aî  escapå  keù  ($1B© anä returnó  thå  characteò  whicè -        immediatelù followó it® Thå functioî keys¬ cursoò posit -        ioninç  keys¬  anä otheò keyó oæ thå numeriã keyboarä caî -        bå seô tï generatå escapå sequences®  Thió functioî  re -        turnó  thå  uniquå  keystrokå  generateä  bù  thå  escapå -        sequence. - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/HEATH.ERL b/software/CPM/CPM14_MTPUG_02/HEATH.ERL deleted file mode 100644 index a8cb0787fae80e31671ebd9a476453e82241e844..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmb`_UrbVA6aesZxd=Bx5=i74W-{iK)I@Po^8o>y8C#NQlxu@cO`SGow3R+|3ng4? zin@`hk(mqhP3x(LOR-YZ<#KIWJy6+Z^}<$bwYApApNH#P58ao$-E)5TobQ~k=asO! zRwNcR;*?l#&z1r_1&~?+=L6U%;1>es0w|<`^DiN`gOB^=vvPm#)Ji#Ev^CN`mIOEz z{ODBkpy7ErRn*bxY2`J9WFX`0;cWVxa@a_r z8XsPu8eFVfL%`!z7OHL&030fgwN;7Vn@aqdCLeBKPvkTu5K1`Ew2=aKY1zJ}t6B&b zUV4Wh`#=glqGQA1GX=u>(SSTiC8rVn%deYI)jTyQgA_|8;X|s;hgohUL#AXdpk`$S zL13ywUl;TRCIa9S%I2>DcD;*EvPiMzSe)R)!Dg3^W__EJzrW%-dtU7A+ft%VOacNr z+*%5&Hxx-AZNiqe`*+b-`*`SFw$Wi`p{bDRD-{&EpkPj|44p07yb3kXN?AljfRfF< z*$+ztec(`s%&CgdE%#z{JIQFk(bP7S%J*(>aP`KD@{=`s?*O39hTp~}=M2>~??w1# z0xN#Ge=>1Z41Xr#*nGk}#Kh0CW7q>~^Y^9R940&-hZ?*>XY`KjKtEz=6daA_trEk+ z>0S$5{v*KA$+(gBo(r`8WyDUR`i_@% diff --git a/software/CPM/CPM14_MTPUG_02/HEATH.PAS b/software/CPM/CPM14_MTPUG_02/HEATH.PAS deleted file mode 100644 index 4a1f8ca..0000000 --- a/software/CPM/CPM14_MTPUG_02/HEATH.PAS +++ /dev/null @@ -1,285 +0,0 @@ -MODULE HEATHLIB; - -(* This module is a library for the special functions available to the - H-19 terminal *) - -const - cpm = 5; - -procedure reverse; - -(* this procedure sets the H-19 for reverse video *) - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'p' / - "CALL / cpm ) -end; - -procedure normal; - -(* this procedure sets the H-19 for normal viedo *) - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'q' / - "CALL / cpm ) -end; - -procedure save_cursor; - -(* this procedure saves the location of the cursor. It is - used before attempting to write to the 25th line *) - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'j' / - "CALL / cpm ) -end; - -procedure restore_cursor; - -(* this procedure restores the cursor to the position which - was previously saved *) - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'k' / - "CALL / cpm ) -end; - -procedure put_cursor (x,y:integer); - -(* this procedure positions the cursor to the location x,y where - allowable values of x are 1 to 25, and y are 1 to 80 inclusive *) - -begin - x := x+31; - y := y+31; - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'Y' / - "CALL / cpm / - "MVI C / 6 / - "LXI H / x / - "MOV E,M / - "CALL / cpm / - "MVI C / 6 / - "LXI H / y / - "MOV E,M / - "CALL / cpm ) -end; - -procedure get_cursor (var x,y: integer); - -(* this procedure fetches the location of the cursor *) -var - str: array [1..4] of char; - i: integer; - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'n' / - "CALL / CPM ); - for i := 1 to 4 do read (str[i]); - x := ord (str[3])-31; - y := ord (str[4])-31 -end; - - - procedure put25; - -(* this procedure enables the 25th line and positions the cursor. - there *) - -begin - save_cursor; - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'x' / - "CALL / cpm / - "MVI C / 6 / - "MVI E / '1' / - "CALL / cpm ); - put_cursor (25,1) -end; - -procedure clear_line; - -(* This procedure is used to clear a line. Usually, it will be used - before the twenty-fifth line is rewritten. *) - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'l' / - "CALL / cpm ) -end; - -procedure clear_screen; - -(* this procedure clears the screen of the H-19 and - homes the cursor to the upper left position *) - -begin - inline ("MVI C / 6 / - "MVI E / $1b / - "CALL / cpm / - "MVI C / 6 / - "MVI E / 'E' / - "CALL / cpm ) -end; - -procedure clear_bottom; - -(* this procedure clears the bottom part of the H-19 screen - including the cursor position *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'J' / - "CALL / CPM ) -end; - -procedure clear_top; - -(* this procedure clears the upper part of the H-19 screen - including the cursor position *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'b' / - "CALL / CPM ) -end; - -procedure eol; - -(* this procedure erases to the end of line *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'K' / - "CALL / CPM ) -end; - -procedure ebl; - -(* this procedure erases to the start of the line *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'o' / - "CALL / CPM ) -end; - -function funct_key: char; - -(* this function tests the input stream until it finds - the start of an escape sequence. it then returns - the second character in the sequence *) - -var - ch: char; - -begin - inline ("MVI E / $FF / - "MVI C / 6 / - "CALL / CPM / - "CPI / $1B / - "JNZ / *-9 ); (* THIS FETCHES THE ESCAPE KEY *) - inline ("MVI E / $FF / - "MVI C / 6 / - "CALL / CPM / - "ORA A / - "JZ / *-8 / - "STA / CH ); (* THIS GETS THE ESCAPE CHARACTER *) - funct_key := ch -end; - -procedure cursor_up; - -(* this procedure moves the cursor up one line *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'A' / - "CALL / CPM ) -end; - -procedure cursor_down; - -(* this procedure moves the cursor down one line *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'B' / - "CALL / CPM ) -end; - -procedure cursor_left; - -(* this procedure moves the cursor to the left one character *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'D' / - "CALL / CPM ) -end; - -procedure cursor_right; - -(* this procedure moves the cursor to the right one character *) - -begin - inline ("MVI C / 6 / - "MVI E / $1B / - "CALL / CPM / - "MVI C / 6 / - "MVI E / 'C' / - "CALL / CPM ) -end; - -modend. - diff --git a/software/CPM/CPM14_MTPUG_02/LISTDEC.ASM b/software/CPM/CPM14_MTPUG_02/LISTDEC.ASM deleted file mode 100644 index fd67be5..0000000 --- a/software/CPM/CPM14_MTPUG_02/LISTDEC.ASM +++ /dev/null @@ -1,625 +0,0 @@ -*THIS PROGRAM TRANSFERS A FILE FROM A DEC FORMAT DISK TO A -* CP/M FORMAT DISK -* -* -*CP/M DEFINITIONS FOR PRIMITIVES -* -RDCON EQU 1 ;GET CHAR FROM CONSOLE -WRTCON EQU 2 ;TYPE CHAR ON CONSOLE -RDRDR EQU 3 ;GETCHAR FROM PAPER TAPE READER -WRTPCH EQU 4 ;SEND CHAR TO PUNCH -WRTLST EQU 5 ;SEND CHAR TO LIST DEVICE -IOSTAT EQU 7 ;INTERROGATE I/O STATUS (NOT USED HERE) -ALTIO EQU 8 ;ALTER I/O STATUS (NOT USED HERE) -PCONBF EQU 9 ;PRINT CONSOLE BUFFER -RCONBF EQU 10 ;READ CONSOLE BUFFER -CONST EQU 11 ;CHECK CONSOLE STATUS (BIT0 SET IF READY) -LIFTHD EQU 12 ;LIFT DISK HEAD (NOT USED HERE) -RSTDSK EQU 13 ;DMA ADDR TO 80H,SELECT DISK A -SELDSK EQU 14 ;SELECT DISK -OPENF EQU 15 ;OPEN FILE -CLOSEF EQU 16 ;CLOSE FILE -SRCH1 EQU 17 ;SEARCH FOR FIRST FILE OCCURRENCE -SCHNXT EQU 18 ;SEARCH FOR NEXT FILE OCCURRENCE -DELETF EQU 19 ;DELETE FILE -READF EQU 20 ;READ TO BUFFER -WRITEF EQU 21 ;WRITE TO BUFFER -MAKEF EQU 22 ;CREATE A FILE ENTRY -RENAMF EQU 23 ;RENAME A FILE -INTLOG EQU 24 ;INTERROGATE LOGIN VECTOR -INTDSK EQU 25 ;INTERROGATE DISK (RETURNS SELECTED DISK #) -SETDMA EQU 26 ;SET DMA ADDR -INTALL EQU 27 ;INTERROGATE ALLOCATION VECTOR -* -BDOS EQU 0005H ;DOS ENTRY POINT -FCB EQU 5CH ;DEFAULT FILE CONTROL BLOCK ADDRESS -BUFF EQU 80H ;DEFAULT DMA ADDRESS -* - ORG 0100H -* -*SET UP STACK - LXI H,0 - DAD SP - SHLD OLDSP - LXI SP,STKTOP - JMP MAIN -* -*STACK AREA -OLDSP: DS 2 -STACK: DS 64 -STKTOP EQU $ -* -* -*SUBROUTINES -PCHAR: ;PRINT CHAR IN REG A - PUSH H! PUSH D! PUSH B ;ENVIRONMENT SAVED - MVI C,WRTCON - MOV E,A - CALL BDOS - POP B! POP D! POP H ;ENVIRONMENT RESTORED - RET -* -CRLF: ;PRINT A CARRIAGE RETURN & LINE FEED - MVI A,0DH - CALL PCHAR - MVI A,0AH - CALL PCHAR - RET -* -PNIB: ;PRINT NIBBLE IN REG A - ANI 0FH ;LOWER 4 BITS - CPI 10 - JNC P10 - ;LESS THAN OR EQUAL TO 9 - ADI '0' - JMP PRN - ;GREATER THAN OR EQUAL TO 10 -P10: ADI 'A'-10 -PRN: CALL PCHAR - RET -* -PHEX: ;PRINT HEX CHAR IN REG A - PUSH PSW - RRC - RRC - RRC - RRC - CALL PNIB ;PRINT NIBBLE - POP PSW - CALL PNIB - RET -* -CHIN: ;GET A CHAR FROM CONSOLE - PUSH H! PUSH D! PUSH B - MVI C,RDCON - CALL BDOS - POP B! POP D! POP H - RET -* -MSG: ;PRINT A MESSAGE POINTED TO BY HL (END OF MESSAGE=0FFH) - MOV A,M - CPI 0FFH - RZ ;RETURN IF END OF MESSAGE - CALL PCHAR - INX H - JMP MSG -* -SETTRK: ;SET TRACK IN C - LHLD 1 - LXI D,27 - DAD D - PCHL -* -SETSEC: LHLD 1 - LXI D,30 - DAD D - PCHL -* -RDSEC: LHLD 1 - LXI D,36 - DAD D - PCHL -* -DISKRD: ;READ FROM DISK B-TRACK IN "TRACK",SECTOR IN "SECTOR" - PUSH B ;SAVE LOGICAL TRACK & SECTOR - LDA TRACK - STA BTRACK - LDA SECTOR - STA BSECT - LDA INTLEV ;GET INTERLEAVE FLAG - ORA A - JZ CONSEC ;0 > CONSECUTIVE SECTORS -* -*INTERLEAVE ALGORITHM FOR STANDARD DEC DISKS -* - PUSH D ;SAVE DMA ADDR - MVI H,0 - LDA BTRACK - MOV L,A - DCX H ;HL=TRACK-1;NOW MULTIPLY BY 6 - MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - SHLD X2 ;HL*2 -INTLV3: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - XCHG - LHLD X2 - DAD D ;HL*6 IN HL -* 6*(TRACK-1) IN HL -* -INTLV0: MOV A,H - ORA A - JNZ INTLV5 - MOV A,L - CPI 26 - JM INTLV4 -INTLV5: LXI D,0-26 - DAD D - JMP INTLV0 -INTLV4: LDA BSECT - DCR A ;SHIFT SECTOR DOWN (0-25) - PUSH PSW - ADD A - MOV E,A ;SAVE S2 - POP PSW - CPI 13 - MOV A,E ;GET S2 BACK TO ACC. - JM INTLV2 - INR A -INTLV2: ADD L ;ADD BIAS -INTLV1: SUI 26 - JP INTLV1 - ADI 27 - STA BSECT ;NEW PHYSICAL SECTOR TO BSECT - POP D ;RESTORE DMA ADDR -CONSEC: LDA BSECT - MOV C,A - CALL SETSEC - LDA BTRACK - MOV C,A - CALL SETTRK - CALL RDSEC - POP B - RET -* -GETDIR: ;GET DIRECTORY SEGMENT 1 INTO THE DIRECTORY BUFFER - ; ASSUME FILE WILL BE IN SEGMENT 1 - MVI C,SELDSK - MVI E,1 - CALL BDOS ;SEL DISK B - MVI A,2 - STA COUNT - LXI D,0 - MVI A,01H - STA TRACK - MVI A,19H - STA SECTOR - LXI H,DRBUFF - SHLD BUFFPT ;INIT. BUFFPT -GTDIR1: LHLD BUFFPT - DAD D - SHLD BUFFPT - XCHG - MVI C,SETDMA - CALL BDOS - CALL DISKRD ;READ SECTOR FROM DISK - LXI D,128 - MVI A,1AH - STA SECTOR - LDA COUNT - DCR A - STA COUNT - JNZ GTDIR1 ;READ IN FIRST 2 SECTORS - MVI A,6 - STA COUNT - MVI A,02 - STA TRACK - DCR A - STA SECTOR -GTDIR2: LXI D,128 ;LENGTH OF A SECTOR - LHLD BUFFPT - DAD D - SHLD BUFFPT - XCHG ;DMA ADDR > DE - MVI C,SETDMA - CALL BDOS - CALL DISKRD - LDA SECTOR - INR A - STA SECTOR - LDA COUNT - DCR A - STA COUNT - JNZ GTDIR2 - RET -* -X50: ;MULTIPLY HL BY 50Q & RETURN IN HL - PUSH B - PUSH D - MVI B,3 -X50A: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ X50A - SHLD X8 - MVI B,2 -X50B: MOV A,L - ADD A - MOV L,A - MOV A,H - RAL - MOV H,A - DCR B - JNZ X50B - XCHG - LHLD X8 - DAD D - POP D - POP B - RET -REGMOD: ;MODIFY DRIVE B REGISTERS AFTER SECTOR READ - LDA SECTOR - CPI 26 - JZ RM1 - INR A - STA SECTOR - RET -RM1: MVI A,1 - STA SECTOR - LDA TRACK - INR A - STA TRACK - RET -* -CMP16: ;COMPARES HL & DE & SETS USUAL FLAGS - MOV A,H - CMP D - RNZ - MOV A,L - CMP E - RET -* -NEGDE: ;NEGATE DE REGISTER (2'S COMP) - PUSH PSW - MOV A,D - CMA - MOV D,A - MOV A,E - CMA - MOV E,A - INX D - POP PSW - RET -* -DCR16: ;DECREMENT HL BY 1 & SET FLAG C IF RESULT >= 0 - ; NC IF RESULT < 0 - PUSH D - LXI D,0FFFFH ;-1 - DAD D - POP D - RET -* -* -* -FINIS: CALL CRLF - LHLD OLDSP - SPHL - RET -* -SPACE: ;PRINTS A SPACE ON CRT - PUSH PSW - MVI A,20H - CALL PCHAR - POP PSW - RET -* -R50ASC: ;CONVERTS A BASIC RADIX 50 CHAR TO ASCII - CPI 0 - JNZ RASC1 - MVI A,20H - RET -RASC1: CPI 1BH - JP RASC2 - ADI 40H - RET -RASC2: CPI 1BH - JNZ RASC3 - MVI A,24H - RET -RASC3: CPI 1CH - JNZ RASC4 - MVI A,2EH - RET -RASC4: ADI 12H - RET -* -RAD50: ;DECODES RADIX 50 WORD TO 3 ASCII CHARS & PRINTS THEM - SHLD R50 - LXI D,0-1600 - MVI C,0 -RAD1: DAD D - JNC RAD2 - INR C - JMP RAD1 -RAD2: MOV A,C - STA CHAR1 - MOV L,A - MVI H,0 - CALL X50 - CALL X50 - XCHG - CALL NEGDE - LHLD R50 - DAD D - SHLD R50 - LXI D,0-40 - MVI C,0 -RAD3: DAD D - JNC RAD4 - INR C - JMP RAD3 -RAD4: MOV A,C - STA CHAR2 - MOV L,A - MVI H,0 - CALL X50 - XCHG - CALL NEGDE - LHLD R50 - DAD D - MOV A,L - STA CHAR3 - LDA CHAR1 - CALL R50ASC - CALL PCHAR - LDA CHAR2 - CALL R50ASC - CALL PCHAR - LDA CHAR3 - CALL R50ASC - CALL PCHAR - RET -* -LDECWD: ;PRINTS DECIMAL EQUIV. OF HL - PUSH B! PUSH PSW! PUSH H! PUSH D! - XRA A - STA BLANK0 - MVI B,30H - LXI D,10000 - CALL LDEC0 - LXI D,1000 - CALL LDEC0 -LDECB1: LXI D,100 - CALL LDEC0 - MVI E,10 - CALL LDEC0 - MVI E,1 - CALL LDEC0 - POP D! POP H! POP PSW! POP B - RET -* -LDEC0: MVI C,30H -LDEC1: MOV A,L - SUB E - MOV L,A - MOV A,H - SBB D - MOV H,A - JC LDEC2 - INR C - JMP LDEC1 -LDEC2: DAD D - MOV A,C - CPI 30H - JNZ LDEC3 - MOV A,B - JMP CO -LDEC3: MVI B,30H - JMP CO -CO: CPI 30H - JNZ CO1 - PUSH PSW - LDA BLANK0 - RAR - JNC CO2 - POP PSW - JMP PCHAR -CO2: POP PSW - MVI A,20H - JMP PCHAR -CO1: PUSH PSW - MVI A,1 - STA BLANK0 - POP PSW - JMP PCHAR -* -* -* -* -* -MAIN: ;MAIN BODY OF PROGRAM-LISTS DEC DIRECTORY - CALL CRLF -* -DECINT: LXI H,M0 ;IS DEC DISK INTERLEAVED? - CALL MSG - CALL CHIN - CPI 'Y' - JNZ NO1 - MVI A,1 - STA INTLEV ;SET INTERLEAVE FLAG - JMP REDY -NO1: CPI 'N' - JNZ DECINT - XRA A - STA INTLEV - CALL CRLF -* -REDY: MVI C,SELDSK - MVI E,1 - CALL BDOS ;SEL DISK B - CALL GETDIR ;GET DIRECTORY INTO DRBUFF - LHLD ENTRYS - SHLD ENTNUM - LXI H,ENTRYS - SHLD DRBFPT -* -DRLOOP: LHLD ENTNUM - MVI A,2 - CMP H - JZ EMPTFL ;THIS ENTRY AN EMPTY FILE - MVI A,4 - CMP H - JZ PERMFL ;THIS ENTRY IS A PERMANENT FILE - MVI A,8 - CMP H - JZ FINIS ;END OF DIRECTORY - LXI H,M2 ;ILLEGAL STATUS WORD - CALL MSG - JMP DECINT -* -EMPTFL: CALL CRLF - LXI H,M3 ;< UNUSED > - CALL MSG - LHLD DRBFPT - LXI D,8 - DAD D - MOV E,M - INX H - MOV D,M ;FILE LENGTH IN DE - XCHG - CALL SPACE - CALL SPACE - CALL LDECWD - XCHG - LXI D,5 - DAD D ;IGNORE REST OF ENTRY INFO - SHLD DRBFPT - MOV A,M - STA ENTNUM - INX H - MOV A,M - STA ENTNUM+1 - JMP DRLOOP ;DO NEXT ENTRY -* -PERMFL: CALL CRLF - LHLD DRBFPT - INX H - INX H - MOV A,M - STA FILELO ;GET FILNAM.EXT FOR LISTING - INX H - MOV A,M - STA FILEHI - INX H - MOV A,M - STA NAMELO - INX H - MOV A,M - STA NAMEHI - INX H - MOV A,M - STA EXTLO - INX H - MOV A,M - STA EXTHI ;FILNAM.EXT STORED - PUSH H - LHLD FILELO - CALL RAD50 ;PRINT OUT FIL - LHLD NAMELO - CALL RAD50 ;PRINT OUT NAM - MVI A,'.' - CALL PCHAR ;PRINT OUT '.' - LHLD EXTLO - CALL RAD50 ;PRINT OUT EXT - CALL SPACE - CALL SPACE - POP H ;RESTORE BUFFER POINTER - INX H - MOV E,M - INX H - MOV D,M ;FILE LENGTH IN DE - XCHG - CALL LDECWD ;PRINT LENGTH IN DECIMAL - XCHG - LXI D,5 - DAD D ;IGNORE REST OF ENTRY INFO. - SHLD DRBFPT - MOV A,M - STA ENTNUM - INX H - MOV A,M - STA ENTNUM+1 ;SET UP FOR NEXT ENTRY - JMP DRLOOP ; & GO TO IT -* -* -*VARIABLES -ENTNUM: DS 2 ;ENTRY POINTER -BUFFPT: DS 2 ;XFER BUFFER POINTER -INTLEV: DS 1 ;INTERLEAVE FLAG -BLANK0: DS 1 ;SUPRESS LEADING 0 FLAG -CHAR1: DS 1 ;1ST RAD50 CHAR -CHAR2: DS 1 ;2ND " -CHAR3: DS 1 ;3RD " -R50: DS 2 ;TEMP RADIX 50 STORAGE -X2: DS 2 ;HL*2 -BSECT: DS 1 -COUNT2: DS 1 ;SECOND UTILITY COUNTER -R50NUM: DS 2 ;RADIX 50 CONVERSION OF 3 ASCII CHARS -X8: DS 2 ;HL*8 -FILELO: DS 1 ;PERMANENT FILE NAME & EXT. STORAGE -FILEHI: DS 1 -NAMELO DS 1 -NAMEHI DS 1 -EXTLO DS 1 -EXTHI DS 1 ;END OF PERM. NAME STORAGE -ENTRY: DS 2 ;ENTRY STATUS WORD POINTER -BLKCNT: DS 2 ;BLOCK COUNT (UPDATED EVERY ENTRY) -BLOCKS: DS 2 ;# OF BLOCKS TO FILE (VALID ONLY IF FOUND) -LENGTH: DS 2 ;LENGTH OF FILE FOUND (IN BLOCKS) -TRACK: DS 1 ;TRACK OF FOUND FILE -SECTOR: DS 1 ;SECTOR OF FOUND FILE -FILE: DS 2 ;FILE NAME -NAME: DS 2 ; & EXT. OF -EXT: DS 2 ; REQUESTED FILE (DEC) -FLNMPT: DS 2 ;FILE NAME POINTER -FLBFPT: DS 2 ;PERM. FILE NAME POINTER -BTRACK: DS 1 ;PHYSICAL TRACK -COUNT: DS 1 ;UTILITY COUNTER LOCATION -DRBFPT: DS 2 ;DIRECTORY BUFFER POINTER -DRBUFF: ;DIRECTORY BUFFER -HDWD1: DS 2 ;SEGMENTS AVAILABLE -HDWD2: DS 2 ;NEXT SEGMENT -HDWD3: DS 2 ;HIGHEST OPEN SEGMENT -HDWD4: DS 2 ;EXTRA WORDS/ENTRY -HDWD5: DS 2 ;FILE STARTING BLOCK -ENTRYS: DS 1014 ;ENTRIES -ENDBUF: DS 1 -* -* -*MESSAGES -* -M0: DB 0DH,0AH,'IS DEC DISK INTERLEAVED (Y/N)?',0FFH -M2: DB 0DH,0AH,'ILLEGAL STATUS WORD ENCOUNTERED',0FFH -M3: DB '< UNUSED >',0FFH -* -* -PAD: DS 4 -* -PRGEND EQU $ -* -* -* - END - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/MTPUG.002 b/software/CPM/CPM14_MTPUG_02/MTPUG.002 deleted file mode 100644 index c5dd622..0000000 --- a/software/CPM/CPM14_MTPUG_02/MTPUG.002 +++ /dev/null @@ -1,35 +0,0 @@ -CALCULAT/CMD/COM/DOC/ERL/PAS Intended to replace a Scientific - Calculator, but because of the limited - accuracy should be used with caution. - Excellent example of statement parsing, - and recursion. Written by Warren Smith. - -XREF/CMD/COM/DOC/ERL/PAS A comprehensive cross reference program - with a graphical listing in which the - block structure is delimited by - lines connected between each begin and - end statement. Written by Warren Smith. - - - -CP/M-DEC/DOC The source code for the programs to -CPMTODEC/ASM read and write DEC files from CP/M. -DECTOCPM/ASM Written by Brian Chase under the -LISTDEC/ASM direction of Ceasar Castro. - He reports that there is one bug in - the program as it will not transfer - DEC object files.(Normally not needed). - - -HEATH/DOC/PAS/ERL A module which implements all the - functions available to the Heath H-19 - terminal. (Includes cursor and screen - controls). Written by Jerome Jankura. - -SPEAKER/DOC/PAS/ERL This program is a software driver for - the Votrax SC-01 voice synthesis chip. - You can enter a word, say a word, modify - the word, or disassemble the word into its - phonemes. WRitten by Jerome Jankura. - - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/MTPUG.BAK b/software/CPM/CPM14_MTPUG_02/MTPUG.BAK deleted file mode 100644 index 280ae57..0000000 --- a/software/CPM/CPM14_MTPUG_02/MTPUG.BAK +++ /dev/null @@ -1,35 +0,0 @@ -CALCULAT/CMD/COM/DOC/ERL/PAS Intended to replace a Scientific - Calculator, but because of the limited - accuracy should be used with caution. - Excellent example of statement parsing, - and recursion. Written by Warren Smith. - -XREF/CMD/COM/DOC/ERL/PAS A comprehensive cross reference program - with a graphical listing in which the - block structure is delimited by - lines connected between each begin and - end statement. Written by Warren Smith. - - - -CP/M-DEC/DOC The source code for the programs to -CPMTODEC/ASM read and write DEC files from CP/M. -DECTOCPM/ASM Written by Brian Chase under the -LISTDEC/ASM direction of Ceasar Castro. - He reports that there is one bug in - the program as it will not transfer - DEC object files.(Normally not needed). - - -HEATH/DOC/PAS/ERL A module which implements all the - functions available to the Heath H-19 - terminal. (Includes cursor and screen - controls). Written by Jerome Jankura. - -SPEAKER/DOC/PAS/ERL This program is a software driver for - the Votrax SC-01 voice synthesis chip. - You can enter a word, say a word, modify - the word, or dissamble the word into its - phonemes. WRitten by Jerome Jankura. - - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/SEND.COM b/software/CPM/CPM14_MTPUG_02/SEND.COM deleted file mode 100644 index 0b530082025f0708e8afea39102807aefe36c7d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 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 diff --git a/software/CPM/CPM14_MTPUG_02/SPEAKER.PAS b/software/CPM/CPM14_MTPUG_02/SPEAKER.PAS deleted file mode 100644 index 96aed22..0000000 --- a/software/CPM/CPM14_MTPUG_02/SPEAKER.PAS +++ /dev/null @@ -1,958 +0,0 @@ -Program speaker; - -(* this program is a software driver for the votrax - SC-01 voice synthesis chip. Using this software - package, one can enter a word, say the word, modify - the word, or disassemble the word into its phonemes. - The system will be expanded to write a vocabulary - file onto a disk and to read a file from a disk. *) - -const - (* these values are particular to the hardware - configuration of the SC-01 chip. Port assignments, - control words, and masks will have to be changed - to adapt this software to a different system. - This can be done by changing the equates in this - constant block. *) - - voice = $8c; (* i/o port for voice data *) - status = $8e; (* sc-01 status port *) - parctl = $8f; (* 8255 control port *) - strobe = $0f; (* sets sc-01 strobe hi *) - nostrb = $0e; (* sets sc-01 strobe low *) - ready = $01; (* mask bit for ready bit *) - ctrpar = $83; (* control word for 8255 *) - -type - word_def = record - spelling: string[14]; - phonemes: string[20]; - filled: boolean - end; - - nmen = array [0..63] of string[4]; - -var - token: byte; (* built by parsing routines *) - i,j,k: integer; (* general purpose *) - command: char; (* the command interpreter *) - ch:char; - data_valid: boolean; (* to eliminate extraneous spaces *) - utterance: word_def; - dictionary: array [1..100] of word_def; - accept: boolean; - entry: integer; (* number of entries in dictionary *) - in_file: file of word_def; (* name of file from which dict comes *) - out_file: file of word_def; (* name of file written by this program *) - word_spelling: string [14]; (* used to locate one word in dictionary *) - sentenct: string; - nmptr : ^nmen; - - external PROCEDURE reverse; - external PROCEDURE normal; - external PROCEDURE save_cursor; - external PROCEDURE restore_cursor; - external PROCEDURE put_cursor (x,y: integer); - external PROCEDURE get_cursor (var x,y: integer); - external PROCEDURE put25; - external PROCEDURE clear_line; - external PROCEDURE clear_screen; - external PROCEDURE cursor_up; - external PROCEDURE cursor_down; - external PROCEDURE cursor_left; - external PROCEDURE cursor_right; - external PROCEDURE clear_bottom; - external PROCEDURE clear_top; - external PROCEDURE eol; - external PROCEDURE ebl; - external FUNCTION funct_key: char; - - PROCEDURE say (what: char); - (* this PROCEDURE waits until the status bit - returns ready. It then writes a phoneme code - passed to it to the SC-01 *) - -BEGIN - while (inp[status] & ready) = 0 do; - out[voice] := what; - out[parctl] := strobe; - out[parctl] := nostrb - end; - - PROCEDURE sayit (var str: string); - (* this PROCEDURE enunciates an utterance whose - address is passed to it *) - - var - i: integer; - - BEGIN - for i := 1 to length (str) do - say (str[i]) - end; - - PROCEDURE nmentable; - - BEGIN - INLINE ( 3 / 'EH3 ' / - 3 / 'EH2 ' / - 3 / 'EH1 ' / - 3 / 'PA0 ' / - 2 / 'DT ' / - 2 / 'A2 ' / - 2 / 'A1 ' / - 2 / 'ZH ' / - 3 / 'AH2 ' / - 2 / 'I3 ' / - 2 / 'I2 ' / - 2 / 'I1 ' / - 1 / 'M ' / - 1 / 'N ' / - 1 / 'B ' / - 1 / 'V ' / - 2 / 'CH ' / - 2 / 'SH ' / - 1 / 'Z ' / - 3 / 'AW1 ' / - 2 / 'NG ' / - 3 / 'AH1 ' / - 3 / 'OO1 ' / - 2 / 'OO ' / - 1 / 'L ' / - 1 / 'K ' / - 1 / 'J ' / - 1 / 'H ' / - 1 / 'G ' / - 1 / 'F ' / - 1 / 'D ' / - 1 / 'S ' / - 1 / 'A ' / - 2 / 'AY ' / - 2 / 'Y1 ' / - 3 / 'UH3 ' / - 2 / 'AH ' / - 1 / 'P ' / - 1 / 'O ' / - 1 / 'I ' / - 1 / 'U ' / - 1 / 'Y ' / - 1 / 'T ' / - 1 / 'R ' / - 1 / 'E ' / - 1 / 'W ' / - 2 / 'AE ' / - 3 / 'AE1 ' / - 3 / 'AW2 ' / - 3 / 'UH2 ' / - 3 / 'UH1 ' / - 2 / 'UH ' / - 2 / 'O2 ' / - 2 / 'O1 ' / - 2 / 'IU ' / - 2 / 'U1 ' / - 3 / 'THV ' / - 2 / 'TH ' / - 2 / 'ER ' / - 2 / 'EH ' / - 2 / 'E1 ' / - 2 / 'AW ' / - 3 / 'PA1 ' / - 4 / 'STOP' ) - END; - - PROCEDURE disasm (ch: char; var str: string); - (* this PROCEDURE disassembles a phoneme code into its - nmemonic *) - - BEGIN - nmptr := addr (nmentable); - str := nmptr^[ord(ch)] - END; - - PROCEDURE parse_a; - (* this PROCEDURE is used to encode the phonemes which - BEGIN with the letter A *) - - BEGIN - read (ch); - case ch of - ' ': token := $20; - '1': token := $6; - '2': token := $5; - 'Y': token := $21; - 'E': BEGIN - read (ch); - case ch of - ' ': token := $2e; - '1': BEGIN - read(ch); - if ch = ' ' then token := $2f - end - end (* case *) - end; (* AE sequence *) - 'H': BEGIN - read (ch); - case ch of - ' ': token := $24; - '1': token := $15; - '2': token := $8 - end (* case *) - end; (* AH sequence *) - 'W': BEGIN - read (ch); - case ch of - ' ': token := $3d; - '1': token := $13; - '2': token := $30 - end (* case *) - end (* AW sequence *) - end (* A-something sequence *) - end; (* Case A *) - - PROCEDURE parse_e; - (* this PROCEDURE is used to parse out the phonemes - which start with the letter E *) - - BEGIN - read (ch); - case ch of - ' ': token := $2c; - '1': token := $3c; - 'H': BEGIN - read (ch); - case ch of - ' ': token := $3b; - '1': token := $2; - '2': token := $1; - '3': token := 0 - end (* case *) - end; (* EH phoneme sequence *) - 'R': token := $3a - end (* case *) - end; (* E phoneme sequence *) - - PROCEDURE parse_i; - (* this PROCEDURE parses the phonemes which start with - the letter I *) - - BEGIN - read (ch); - case ch of - ' ': token := $27; - '1': token := $b; - '2': token := $a; - '3': token := $9; - 'U': token := $36 - end (* case *) - end; (* I phoneme sequence *) - - PROCEDURE parse_o; - (* this PROCEDURE parses the phonemes which start with - the letter O *) - - BEGIN - read (ch); - case ch of - ' ': token := $26; - '1': token := $35; - '2': token := $34; - 'O': BEGIN - read (ch); - case ch of - ' ': token := $17; - '1': token := $16; - end (* case OO *) - end (* OO phoneme sequence *) - end (* case *) - end; (* O sequence *) - - PROCEDURE parse_u; - (* this PROCEDURE parses the phonemes that start with - the letter U *) - - BEGIN - read (ch); - case ch of - ' ': token := $28; - '1': token := $37; - 'H': BEGIN - read (ch); - case ch of - ' ': token := $33; - '1': token := $32; - '2': token := $31; - '3': token := $23 - end - end (* UH Sequence *) - end (* case *) - end; (* U phoneme sequence *) - - PROCEDURE parse_p; - (* this PROCEDURE parses the phoneme codes which - BEGIN with the letter P *) - - BEGIN - read (ch); - case ch of - ' ': token := $25; - 'A': BEGIN - read (ch); - case ch of - '0': token := $3; - '1': token := $3e - end (* case *) - end - end (* case *) - end; (* P phoneme sequence *) - - PROCEDURE parse_t; - (* this PROCEDURE parses the phonemes which start - with the letter T *) - - BEGIN - read (ch); - case ch of - ' ': token := $2a; - 'H': BEGIN - read (ch); - case ch of - ' ': token := $39; - 'V': token := $38 - end (* case *) - end (* TH sequence *) - end (* case *) - end; (* T phoneme sequence *) - - FUNCTION getphoneme: char; - (* this PROCEDURE fetches characters from the keyboard input - and returns a phoneme code which corresponds to the - input character string *) - - BEGIN - data_valid := true; - read (ch); (* get a character *) - case ch of - 'A': parse_a; - 'B': token := $0e; - 'C': BEGIN - read (ch); - if ch = 'H' then token := $10 - end; (* CH phoneme *) - 'D': BEGIN - read (ch); - case ch of - ' ': token := $1e; - 'T': token := $4 - end (* case *) - end; (* D sequence *) - 'E': parse_e; - 'F': token := $1d; - 'G': token := $1c; - 'H': token := $1b; - 'I': parse_i; - 'J': token := $1a; - 'K': token := $19; - 'L': token := $18; - 'M': token := $c; - 'N': BEGIN - read (ch); - case ch of - ' ': token := $d; - 'G': token := $14 - end (* case *) - end; (* N phoneme sequence *) - 'O': parse_o; - 'P': parse_p; - 'R': token := $2b; - 'S': BEGIN - read (ch); - case ch of - ' ': token := $1f; - 'H': token := $11; - 'T': token := $3f - end (* case *) - end; (* S phoneme sequence *) - 'T': parse_t; - 'U': parse_u; - 'V': token := $f; - 'W': token := $2d; - 'Y': BEGIN - read (ch); - case ch of - ' ': token := $29; - '1': token := $22 - end - end; (* Y phoneme sequence *) - 'Z': BEGIN - read (ch); - case ch of - ' ': token := $12; - 'H': token := $7 - end - end (* Z phoneme sequence *) - else data_valid := false - end; - getphoneme := token - end; (* phoneme fetching & decoding *) - - PROCEDURE get_entry; - (* this PROCEDURE fetches an entry from the user and stores - in a temporary location called utterance *) - - var - phoneme: char; - - BEGIN - clear_screen; - list_phonemes; - put_cursor (16,1); - write ('Enter the ENGLISH spelling of a word: '); - readln (utterance.spelling); - put_cursor (17,1); - writeln ('And its PHONETIC spelling'); - writeln ('(Insert a space between each phoneme)'); - utterance.phonemes := ''; (* reset utterance *) - - repeat - phoneme := getphoneme; - if data_valid then - utterance.phonemes := concat (utterance.phonemes,phoneme) - until eoln - end; - - PROCEDURE put_in_dictionary; - (* this PROCEDURE loads the utterance into the next available - dictionary position *) - VAR - I: integer; - - BEGIN - put_cursor (15,20); - write ('Save Word Information in Dictionary'); - i := 0; - repeat - i := i + 1 - until (i>100) or not dictionary[i].filled; - if entry < i then entry := i; - if entry >100 - then - BEGIN - writeln; - write ('Dictionary FULL, Save it on Disk and try again') - end - else - BEGIN - dictionary[i] := utterance; - dictionary[i].filled := true; - put_cursor (17,20); - write (utterance.spelling,' saved as entry ',i) - end; - for i := 1 to 30000 do - end; - - PROCEDURE save_on_disk; - (* this PROCEDURE writes a dictionary disk file *) - - var - file_name: string[17]; - i,j: integer; - - BEGIN - put_cursor (15,20); - write ('Save Dictionary on Disk FUNCTION'); - put_cursor (17,1); - write ('Enter Dictionary Name: '); - readln (file_name); - assign (out_file,filename); - rewrite (out_file); - if ioresult = 255 - then - BEGIN - put_cursor (18,1); - write ('Disk directory full'); - for i := 1 to 30000 do - end - else - BEGIN - j := 0; - for i := 1 to entry do - BEGIN - if dictionary[i].filled then - BEGIN - j := j + 1; - out_file^ := dictionary[i]; - put (out_file) - end - end; (* for *) - close (outfile,i) - end; (* if *) - put_cursor (17,1); - clear_line; - write (j,' Words written to File ',file_name); - for i := 1 to 30000 do - end; - - PROCEDURE get_from_disk; - (* this PROCEDURE loads a dictionary disk file into - the workspace dictionary *) - - var - file_name: string[17]; - i,j: integer; - - BEGIN - put_cursor (15,20); - write ('Get Dictionary From Disk File'); - put_cursor (17,1); - write ('Enter File Name: '); - readln (file_name); - assign (in_file,file_name); - reset (in_file); - if ioresult = 255 - then writeln ('file does not exist') - else - BEGIN - for i := 1 to 100 do dictionary[1].filled := false; - i := 0; - repeat - i := i+1; - dictionary[i] := in_file^; - get (infile) - until eof(in_file); - entry := i; - put_cursor (19,1); - write (entry,' Words Written into Workspace') - end; (* if *) - for i := 1 to 30000 do - end; - - PROCEDURE rpt_word; - (* this PROCEDURE repeats the utterance *) - - BEGIN - sayit (utterance.phonemes); - say (chr($3f)) - end; - - - PROCEDURE LIST_PHONEMES; - - (* This procedure lists the phonemes which are available *) - - BEGIN - put_cursor (4,30); - write ('Phonemes available:'); - put_cursor (6,1); - writeln ('E EH AE UH OO1 Z B T S M PA0'); - writeln ('E1 EH1 AE1 UH1 R ZH D DT SH N PA1'); - writeln ('Y EH2 AH UH2 ER J G K CH NG ST'); - writeln ('Y1 EH3 AH1 UH3 L V P TH'); - writeln ('I A AH2 O IU THV F'); - writeln ('I1 A1 AW O1 U H'); - writeln ('I2 A2 AW1 O2 U1'); - writeln ('I3 AY AW2 OO W') - END; - - - PROCEDURE encode; - (* this PROCEDURE encodes a word into the string - passed to it *) - - var - i: integer; - phoneme: char; - nmemonic: string [4]; - continue: boolean; - - PROCEDURE help; - (* this PROCEDURE writes the meaning of the FUNCTION keys - onto the screen. By convention, the grey (white) FUNCTION - key toggles in and out of this mode *) - - var - i: integer; - - BEGIN - put_cursor (15,20); - write ('Command Summary'); - for i := 1 to 9 do - BEGIN - put_cursor (i+15,5); - case i of - 1: write ('GET (f1): Encode a user utterance'); - 2: write ('WRT (f2): Write current utterance into dictionary'); - 3: write ('SOD (f3): Save current dictionary on disk file'); - 4: write ('GFD (f4): Load disk file into dictionary'); - 5: write ('XIT (f5): Exit to main menu'); - 6: write ('DLE (ERASE) : Delete selected dictionary entry'); - 7: write ('RPT (blue): repeat current utterance'); - 8: write ('MOD (red): Modify a word'); - 9: write ('HLP (white): display help messages') - end (* case *) - end; (* for *) - while funct_key <> 'R' do - end; - - PROCEDURE KILL_WORD; - (* This procedure is used to delete a word from the dictionary *) - - var - i: integer; - - BEGIN - clear_screen; - list_words; - put_cursor (24,1); - write ('Delete Which? '); - read (word_spelling); - i := 0; - repeat - i := i+1 - until (i>100) or (word_spelling = dictionary[i].spelling); - if i > 100 then write ('Word not in dictionary') - else - BEGIN - dictionary[i].spelling := ''; - dictionary[i].filled := false - end; - clear_screen - END; - - PROCEDURE MODIFY_PHONEMES; - (* This prodecure is used to modify the phonemes in a word *) - (* which has already been encoded. *) - - var - i,j,k: integer; - test_phoneme: string[20]; - - PROCEDURE INS_PHONEME; - - var - index: integer; - phoneme: char; - - BEGIN - put_cursor (15,1); - clear_bottom; - write (dictionary[i].spelling,' = '); - display (test_phoneme); - put_cursor (23,1); - write ('Insert where? '); - readln (index); - put_cursor (23,30); - write ('Insert what? '); - phoneme := get_phoneme; - insert (phoneme,test_phoneme,index); - put_cursor (15,1); - clear_line; - write (dictionary[i].spelling,' = '); - display (test_phoneme); - sayit (test_phoneme); - say (chr($3f)) - END; - - PROCEDURE KILL_PHONEME; - - var - index: integer; - - BEGIN - put_cursor (15,1); - clear_bottom; - write (dictionary[i].spelling,' = '); - display (test_phoneme); - put_cursor (23,1); - write ('Delete where? '); - readln (index); - delete (test_phoneme,index,1); - put_cursor (15,1); - eol; - write(dictionary[i].spelling,' = '); - display (test_phoneme); - sayit (test_phoneme); - say (chr($3f)) - END; - - - BEGIN - clear_screen; - list_words; - put_cursor (24,1); - write ('Modify which word? '); - read (word_spelling); - i := 0; - repeat - i := i + 1 - until (i>100) or (word_spelling = dictionary[i].spelling); - if i > 100 then - begin - put_cursor (24,1); - clear_line; - write ('cannot find ',word_spelling,' in the dictionary'); - for i := 1 to 30000 do; - clear_screen; - exit - end; - clear_screen; - list_phonemes; - put_cursor (15,1); - write (dictionary[i].spelling,' = '); - display (dictionary[i].phonemes); - put_25; - clear_line; - write (' INS DLE SAY ACC XIT NEW'); - restore_cursor; - test_phoneme := dictionary[i].phonemes; - repeat - put_cursor (16,1); - clear_bottom; - case funct_key of - 'S': ins_phoneme; - 'T': kill_phoneme; - 'U': begin - sayit (test_phoneme); - say (chr($3f)) - end; - 'V': dictionary[i].phonemes := test_phoneme; - 'W': exit; - 'J': test_phoneme := dictionary[i].phonemes - end - until false - end; - - BEGIN - clear_screen; - put_cursor (3,30); - write ('Encode Word FUNCTION'); - continue := true; - while continue do - BEGIN - put_25; - clear_line; - write (' GET WRT SOD GFD XIT DLE RPT MOD HLP'); - restore_cursor; - put_cursor (15,1); - clear_bottom; - case funct_key of - 'S': get_entry; - 'T': put_in_dictionary; - 'U': save_on_disk; - 'V': get_from_disk; - 'W': continue := false; - 'P': rpt_word; - 'J': kill_word; - 'R': help; - 'Q': modify_phonemes - end (* case *) - end; (* while *) - put_25; - clear_line; - restore_cursor - end; - - Procedure help; - - (* this PROCEDURE displays the summary of the commands - allowed in the main menu *) - - var - i: integer; - - BEGIN - clear_screen; - put_cursor (3,30); - write ('Summary of Commands'); - for i := 1 to 8 do - BEGIN - put_cursor (i+4,20); - case i of - 1: write ('ENC (f1): Encode a word'); - 2: write ('DIS (f2): Disassemble a word into its phonemes'); - 3: write ('CHA (f3): Modify the phonemes within a word'); - 4: write ('SAY (f4): Say a word'); - 5: write ('CPM (f5): Return to CP/M operating system'); - 6: write ('LST (blue): List the current dictionary'); - 7: write ('SEN (red): Enunciate a sentence'); - 8: write ('HLP (grey): Display summary of commands') - end (* case *) - end; (* for *) - for i := 1 to 30000 do - end; - - PROCEDURE display (var str: string); - (* this PROCEDURE displays the phoneme codes for - an utterance passed to it *) - - var - i: integer; - nmemonic: string[4]; - - BEGIN - for i := 1 to length(str) do - BEGIN - disasm (str[i],nmemonic); - write (nmemonic,' ') - end - end; - - PROCEDURE LIST_WORDS; - - var - i,j,k: integer; - - BEGIN - clear_screen; - put_cursor (1,20); - write ('Dictionary Contents (',entry,' entries)'); - k := 1; - for i := 0 to (entry div 20) do - BEGIN - for j := 1 to 20 do - BEGIN - put_cursor(j+1,1+15*i); - if dictionary[k].filled then - write (k:3,' ',dictionary[k].spelling); - k := k + 1; - if (k > entry) or (k > 100) then exit - end (* for j *) - end (* for i *) - end; - -procedure say_sentence; -(* this procedure implements the function which will enunciate - a sentence entered on the console keyboard *) - -var - sentence: string; - phon_string: string [40]; - word_list: array [1..40] of integer; - test_spell: string [14]; - dummy_spell: string [14]; - dummy_ch: char; - i,j,k: integer; - -BEGIN - list_words; - put_cursor (22,1); - write ('Enter a SENTENCE in all CAPITAL letters'); - put_cursor (23,1); - clear_line; - read (sentence); - i := 1; - j := 1; - repeat - test_spell := ''; (* clear out the test string *) - repeat - test_spell := concat(test_spell,sentence[j]); - j := j + 1 - until (sentence[j] = ' ') or (j = length(sentence)); - j := j + 1; (* skip over the space *) - k := 0; - repeat - k := k + 1 - until (test_spell = dictionary[k].spelling) or (k > entry); - if k <= entry then - sayit (dictionary[k].phonemes); - i := i + 1 - until (i > 40) or (j >= length(sentence)); - say (chr ($3f)) - -(* put_cursor (23,1); - clear_line; - for i := 1 to 20 do - begin - k := word_list[i]; - write (dictionary[k].spelling,' '); - phon_string := dictionary[k].phonemes; - sayit (phon_string); - say (chr($3f)) - end *) -end; - -BEGIN (* MAIN PROGRAM STARTS HERE *) - - out [parctl] := ctrpar; - say (chr($3f)); (* turn off SC-01 chip *) - for i := 1 to 100 do dictionary[1].spelling := ''; - repeat - clear_screen; - put_cursor (3,10); - write ('Voice Synthesis Development Software Package 10-25-81'); - - put_25; - clear_line; - write ( -' ENC DIS SAY CPM LST SEN HLP'); - restore_cursor; - - put_cursor (23,10); - write ('Select a FUNCTION:'); - - case funct_key of - 'S': encode; - 'T': BEGIN - put_cursor (11,5); - clear_bottom; - write ('Which word? '); - read (word_spelling); - i := 0; - repeat - i := i + 1; - until (i>100) or (word_spelling = dictionary[i].spelling); - if i > 100 then - begin - put_cursor (13,5); - write (word_spelling,' not found'); - exit - end; - put_cursor (13,5); - write (dictionary[i].spelling,' = '); - display (dictionary[i].phonemes); - while funct_key <> 'T' do - end; - 'V': BEGIN - put_cursor (11,5); - clear_bottom; - write ('Which word? '); - word_spelling := ''; - read (word_spelling); - i := 0; - repeat - i := i+1; - until (word_spelling = dictionary[i].spelling) or - (i > entry); - if i <= entry then - begin - sayit (dictionary[i].phonemes); - say (chr($3f)) - end - else - begin - put_cursor (11,5); - clear_bottom; - write (word_spelling,' is not in this dictionary'); - while funct_key <> 'V' do - end - end; - 'W': BEGIN - put_25; - clear_line; - restore_cursor; - clear_screen; - exit - end; - 'P': begin - list_words; - while funct_key <> 'P' do - end; - 'Q': say_sentence; - 'R': help - end (* case *) - until false -end. - -end. -se -end. -e * \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/XREF.CMD b/software/CPM/CPM14_MTPUG_02/XREF.CMD deleted file mode 100644 index 4c02e56..0000000 --- a/software/CPM/CPM14_MTPUG_02/XREF.CMD +++ /dev/null @@ -1,3 +0,0 @@ -xref -paslib/s - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/XREF.COM b/software/CPM/CPM14_MTPUG_02/XREF.COM deleted file mode 100644 index 22be477e7ffc6a87f72f121e246c89d157ecbb41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 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 C2YHbI diff --git a/software/CPM/CPM14_MTPUG_02/XREF.DOC b/software/CPM/CPM14_MTPUG_02/XREF.DOC deleted file mode 100644 index 10d90bf..0000000 --- a/software/CPM/CPM14_MTPUG_02/XREF.DOC +++ /dev/null @@ -1,38 +0,0 @@ - - - - Cross Reference Program by: Warren A. Smith - - Thió prograí camå mainlù froí Nikolauó Wirtè aó yoõ wilì - seå iæ yoõ reaä thå sourcå code® However¬ É havå addeä onå majoò - iteí whicè É likå verù much¬ anä thaô ió á graphicaì listinç oæ - the block structuring of your program. - Alì compounä statementó arå delimiteä bù lineó whicè arå - connecteä anä nesteä (iæ thå statementó arå nested)® Aî examplå - might be: - - B-------------begin - ! If True then - ! B-------------begin - ! ! statement; - ! ! statement - ! E-------------end - ! else - ! statement; - ! statement - E-------------end; - - This can be very helpful in a large, complex program. - - Onå oæ thå sidå benefitó ió iî findinç missinç ENÄ - statements® Iæ yoõ dï noô havå matchinç BEGIÎ anä END'ó yoõ wilì - noticå thaô thå verticaì baró traiì ofæ aô thå enä oæ youò - program® Bù followinç thoså lineó tï theiò matchinç BEGIÎ yoõ - will have found the culprit. - Onå probleí - therå ió nï waù thå outpuô oæ thió prograí caî - takå aî inpuô sourcå filå whicè maù bå 8° columnó widå anä puô - thå outpuô (witè thå graphó aó above© oî youò terminaì withouô iô - lookinç verù bad® Sï É recommenä á 13² columî printeò oò á disë - filå thaô yoõ caî scaî aô leisure¬ preferablù witè somethinç thaô - will not wrap the excess lines around your screen. - \ No newline at end of file diff --git a/software/CPM/CPM14_MTPUG_02/XREF.ERL b/software/CPM/CPM14_MTPUG_02/XREF.ERL deleted file mode 100644 index fd45ee8c6d3315c6d0b77cb9dcd971c1f1f69bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10496 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 diff --git a/software/CPM/CPM14_MTPUG_02/XREF.PAS b/software/CPM/CPM14_MTPUG_02/XREF.PAS deleted file mode 100644 index 8c58f3c..0000000 --- a/software/CPM/CPM14_MTPUG_02/XREF.PAS +++ /dev/null @@ -1,717 +0,0 @@ -(*====================================================================*) -(* PROGRAM TITLE: PASCAL CROSS-REFERENCING PROGRAM *) -(* *) -(* PROGRAM NAME: XREF *) -(* *) -(* LAST UPDATE: 14-JUL-81 by Warren A. Smith *) -(* *) -(* NOTE: THIS PROGRAM WAS ORIGINALLY WRITTEN BY N. WIRTH AND *) -(* ADAPTED FOR UCSD PASCAL (I.4 - THE PUBLIC DOMAIN VERSION) *) -(* BY SHAWN FANNING (IN 1978) AND SUBSEQUENTLY ADAPTED FOR *) -(* PASCAL/MT+ BY MIKE LEHMAN (IN 1981). THIS VERSION WAS THEN *) -(* MODIFIED BE WARREN A. SMITH TO TRY TO GET BACK TO ISO STAN- *) -(* DARD PASCAL AND TO ADD THE ADDITIONAL FEATURE OF MAPPING *) -(* OUT THE COMPOUND STATEMENTS. THIS IS A PUBLIC DOMAIN PROGRAM. *) -(* IF YOU MAKE REVISIONS, ETC. PLEASE LEAVE THE AUTHOR *) -(* AND ALL MODIFIERS NAMES IN THE SOURCE FILE. THANK YOU. *) -(* *) -(* PROGRAM SUMMARY: *) -(* *) -(* THIS PROGRAM PRODUCES A CROSS-REFERENCE LISTING FOR ANY *) -(* PASCAL PROGRAM. OCCURENCES ONLY ARE LISTED. NO DISTINCTION IS *) -(* MADE BETWEEN DEFINITIONS AND REFERENCES. IT WILL ALSO GIVE A *) -(* GRAPHICAL REPRESENTATION OF THE BLOCK STRUCTURE OF THE PROGRAM. *) -(* THIS FEATURE WAS ADDED BY WARREN A. SMITH (IN JULY 1981) *) -(*====================================================================*) - - -PROGRAM XREF; - -(*CROSS REFERENCE GENERATOR FOR PASCAL PROGRAMS. N.WIRTH, 7.5.74*) -(*'QUADRATIC QUOTIENT' HASH METHOD*) - -CONST - P = 749; (*SIZE OF HASHTABLE*) - NK = 45; (*NO. OF KEYWORDS*) - PAGESIZE = 60; (*LINES PER PAGE*) - ALFALEN = 8; (*SIZE OF IDENTIFIERS*) - REFSPERLINE = 15; - REFSPERITEM = 5; - NESTMAX = 10 ; - -TYPE - ALFA = PACKED ARRAY[1..ALFALEN] OF CHAR; - INDEX = 0..P; - ITEMPTR = ^ITEM; - WORD = RECORD - KEY: ALFA; - FIRST, LAST: ITEMPTR; - FOL: INDEX - END ; - NUMREFS = 1..REFSPERITEM; - REFTYPE = (COUNT, PTR); - ITEM = RECORD - REF : ARRAY[NUMREFS] OF INTEGER; - CASE REFTYPE OF - COUNT: (REFNUM: NUMREFS); - PTR: (NEXT: ITEMPTR) - END ; - BUFFER = PACKED ARRAY[0..131] OF CHAR; - -VAR - TOP: INDEX; (*TOP OF CHAIN LINKING ALL ENTRIES IN T*) - I,LINECOUNT,BUFCURSOR: INTEGER; (*CURRENT LINE NUMBER*) - FF,CH: CHAR; (*CURRENT CHAR SCANNED *) - BUF : BUFFER; - T: ARRAY [INDEX] OF WORD; (*HASH TABLE*) - KEY: ARRAY [1..NK] OF ALFA; (* RESERVED KEYWORD TABLE *) - ERROR, (* ERROR FLAG *) - LISTING: BOOLEAN; (* LISTING OPTION *) - INFILE: TEXT; - LST : TEXT; - LSTFILENAME : STRING; - INPUT_LINE : STRING; - PAGE_NUM, - NESTLVL, - LAST_KEY : INTEGER ; - ABORT, - LITERAL, - ACOMMENT, - BCOMMENT, - EOL, - NESTUP, - NESTDN : BOOLEAN ; - BAR : CHAR ; - -FUNCTION UPPER (CH : CHAR) : CHAR ; - - BEGIN (* UPPER *) - IF (CH >= 'a') AND (CH <= 'z') THEN - UPPER := CHR(ORD(CH) + (ORD('A') - ORD('a'))) - ELSE - UPPER := CH - END ; (* UPPER *) - -PROCEDURE INITIALIZE; -VAR - I : INTEGER; - -PROCEDURE FIRSTHALF; -BEGIN - KEY[ 1] := 'AND '; - KEY[ 2] := 'ARRAY '; - KEY[ 3] := 'BEGIN '; - KEY[ 4] := 'BOOLEAN '; - KEY[ 5] := 'CASE '; - KEY[ 6] := 'CHAR '; - KEY[ 7] := 'CONST '; - KEY[ 8] := 'DIV '; - KEY[ 9] := 'DOWNTO '; - KEY[10] := 'DO '; - KEY[11] := 'ELSE '; - KEY[12] := 'END '; - KEY[13] := 'EXIT '; - KEY[14] := 'FILE '; - KEY[15] := 'FOR '; - KEY[16] := 'FUNCTION'; -END; - -PROCEDURE SECONDHALF; -BEGIN - KEY[17] := 'GOTO '; - KEY[18] := 'IF '; - KEY[19] := 'IN '; - KEY[20] := 'INPUT '; - KEY[21] := 'INTEGER '; - KEY[22] := 'MOD '; - KEY[23] := 'NIL '; - KEY[24] := 'NOT '; - KEY[25] := 'OF '; - KEY[26] := 'OR '; - KEY[27] := 'OUTPUT '; - KEY[28] := 'PACKED '; - KEY[29] := 'PROCEDUR'; - KEY[30] := 'PROGRAM '; - KEY[31] := 'REAL '; - KEY[32] := 'RECORD '; - KEY[33] := 'REPEAT '; - KEY[34] := 'SET '; - KEY[35] := 'STRING '; - KEY[36] := 'TEXT '; - KEY[37] := 'THEN '; - KEY[38] := 'TO '; - KEY[39] := 'TYPE '; - KEY[40] := 'UNTIL '; - KEY[41] := 'VAR '; - KEY[42] := 'WHILE '; - KEY[43] := 'WITH '; - KEY[44] := 'WRITE '; - KEY[45] := 'WRITELN '; -END; - -BEGIN (* INITIALIZE *) - FOR I := 1 TO 25 DO { clear the screen } - WRITELN ; - WRITELN('Pascal Program Xref Utility'); - WRITELN('This program is public domain'); - WRITELN('Contributed by Warren A. Smith -- July 14, 1981'); - FOR I := 1 TO 13 DO - WRITELN ; - FF:=CHR(12); - ERROR := FALSE; - FOR I := 0 TO P DO - T[I].KEY := ' '; - FIRSTHALF; - SECONDHALF; - LINECOUNT:= 1; - TOP := P; - PAGE_NUM := 1 ; - LITERAL := FALSE ; - ACOMMENT := FALSE ; - BCOMMENT := FALSE ; - NESTLVL := 0 ; - LAST_KEY := 0 ; - BAR := '|' ; - CH := ' ' -END; (* INITIALIZE *) - -PROCEDURE OPENFILES; -VAR - I : INTEGER ; - NUMBLOCKS: INTEGER; - OPENOK: BOOLEAN; - OPENERRNUM : INTEGER; - LISTOPTION: CHAR; - FILENAME: STRING; - -BEGIN (* OPEN *) - WRITELN ; - WRITELN ('An answer of a $ character to any question') ; - WRITELN (' will cause the program to abort.') ; - ABORT := FALSE ; - REPEAT - WRITELN; - WRITELN('Type in the name of the file you want cross-referenced.' ); - WRITELN(' The file will also have the compound statements displayed'); - WRITELN(' if you select the list option. '); - READLN( FILENAME ); - IF LENGTH(FILENAME) > 0 THEN - BEGIN - FOR I := 1 TO LENGTH(FILENAME) DO - FILENAME[I] := UPPER(FILENAME[I]) ; - ABORT := FILENAME[1] = '$' ; - IF NOT ABORT THEN - BEGIN - -{---------------------------------------------------------------} -{ This section is implementation dependent. It will work } -{ for UCSD Pascal or Pascal/MT+ but not for Pascal/Z. } -{ For Pascal/Z, use } -{ RESET (FILENAME,INFILE); } -{---------------------------------------------------------------} -{} ASSIGN(INFILE,FILENAME); {} -{} RESET(INFILE); {} -{---------------------------------------------------------------} - - OPENERRNUM := IORESULT; - OPENOK := ( OPENERRNUM <> 255 ); - ABORT := EOF (INFILE) ; - IF NOT OPENOK THEN - WRITELN( '*** INPUT OPEN ERROR #', OPENERRNUM ) - ELSE - IF ABORT THEN - WRITELN ('*** FILE ', FILENAME,' IS EMPTY, PROGRAM ABORTING') - END - END; - UNTIL OPENOK OR ABORT; - - IF NOT ABORT THEN - BEGIN - WRITELN; - WRITELN('Destination file or device name?'); - WRITE (' The default is LST: - '); - READLN(LSTFILENAME); - WRITELN; - IF LENGTH (LSTFILENAME) <= 0 THEN - LSTFILENAME := 'LST:' ; - ABORT := LSTFILENAME [1] = '$' ; - IF NOT ABORT THEN - BEGIN - FOR I := 1 TO LENGTH(LSTFILENAME) DO - LSTFILENAME[I] := UPPER(LSTFILENAME[I]) ; - -{---------------------------------------------------------------} -{ This section is implementation dependent. It will work } -{ for UCSD Pascal or Pascal/MT+ but not for Pascal/Z. } -{ For Pascal/Z, use } -{ REWRITE (LSTFILENAME, LST); } -{---------------------------------------------------------------} -{} ASSIGN(LST,LSTFILENAME); {} -{} REWRITE(LST) {} -{---------------------------------------------------------------} - END - END ; - - IF NOT ABORT THEN - BEGIN - REPEAT - WRITE( 'Do you want a listing (y or n)? ' ); - READ( LISTOPTION ); - WRITELN ; - ABORT := LISTOPTION = '$' - UNTIL ABORT OR (LISTOPTION IN ['Y','y','N','n']); - IF NOT ABORT THEN - BEGIN - LISTING := NOT(LISTOPTION in ['N','n']) ; - WRITELN ; - IF LISTING THEN - WRITELN ('LIST OPTION ON') - ELSE - WRITELN - END - END -END; (* OPEN *) - -FUNCTION TAB (NUM : INTEGER) : CHAR ; - - VAR - I : INTEGER ; - - BEGIN - FOR I := 1 TO NUM DO - WRITE (LST, ' ') ; - TAB := CHR(0) - END ; (* TAB *) - -PROCEDURE LPWRITELN; -VAR - I : INTEGER; -BEGIN - BUF[BUFCURSOR]:=CHR(13); - BUFCURSOR:=BUFCURSOR+1; - FOR I := 0 TO BUFCURSOR-1 DO - WRITE(LST,BUF[I]); - BUFCURSOR:=0; - LINECOUNT:=LINECOUNT+1; - IF (LINECOUNT MOD PAGESIZE) = 0 THEN - PAGE(LST); -END; - -PROCEDURE PUTALFA(S:ALFA); -BEGIN - MOVELEFT(S[1],BUF[BUFCURSOR],8); - BUFCURSOR:=BUFCURSOR+8; -END; - -PROCEDURE PUTNUMBER(NUM: INTEGER); -VAR I,IPOT:INTEGER; - A: ALFA; - CH: CHAR; - ZAP:BOOLEAN; - -BEGIN - ZAP:=TRUE; - IPOT:=10000; - A[1]:=' '; - FOR I:= 2 TO 6 DO - BEGIN - CH:=CHR(NUM DIV IPOT + ORD('0')); - IF I <> 6 THEN - IF ZAP THEN - IF CH = '0' THEN - CH:=' ' - ELSE ZAP:=FALSE; - A[I]:=CH; - NUM:=NUM MOD IPOT; - IPOT:=IPOT DIV 10; - END; - A[7]:=' '; - MOVELEFT(A,BUF[BUFCURSOR],7); - BUFCURSOR:=BUFCURSOR+7; -END; - -PROCEDURE SEARCH( ID: ALFA ); (*MODULO P HASH SEARCH*) -(*GLOBAL: T, TOP*) -VAR - I,J,H,D : INTEGER; - X : ITEMPTR; - F : BOOLEAN; - -BEGIN - J:=0; - FOR I:= 1 TO ALFALEN DO - J:= J*10+ORD(ID[I]); - H := ABS(J) MOD P; - F := FALSE; - D := 1; - REPEAT - IF T[H].KEY = ID - THEN - BEGIN (*FOUND*) - F := TRUE; - IF T[H].LAST^.REFNUM = REFSPERITEM - THEN - BEGIN - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].LAST^.NEXT:= X; - T[H].LAST := X; - END - ELSE - WITH T[H].LAST^ DO - BEGIN - REFNUM := REFNUM + 1; - REF[REFNUM] := LINECOUNT - END - END - ELSE - IF T[H].KEY = ' ' - THEN - BEGIN (*NEW ENTRY*) - F := TRUE; - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].KEY := ID; - T[H].FIRST := X; - T[H].LAST := X; - T[H].FOL := TOP; - TOP := H - END - ELSE - BEGIN (*COLLISION*) - H := H+D; - D := D+2; - IF H >= P - THEN - H := H - P; - IF D = P - THEN - BEGIN - WRITELN(OUTPUT,'TBLE OVFLW'); - ERROR := TRUE - END ; - END - UNTIL F OR ERROR -END (*SEARCH*) ; - - - -PROCEDURE PRINTWORD(W: WORD); -VAR - L: INTEGER; - X: ITEMPTR; - NEXTREF : INTEGER; - THISREF: NUMREFS; -BEGIN - PUTALFA(W.KEY); - X := W.FIRST; - L := 0; - REPEAT - IF L = REFSPERLINE - THEN - BEGIN - L := 0; - LPWRITELN; - PUTALFA(' '); - END ; - L := L+1; - THISREF := (L-1) MOD REFSPERITEM + 1; - NEXTREF := X^.REF[ THISREF ]; - IF THISREF = X^.REFNUM - THEN - X := NIL - ELSE - IF THISREF = REFSPERITEM - THEN - X := X^.NEXT; - PUTNUMBER(NEXTREF); - UNTIL X = NIL; - LPWRITELN; -END (*PRINTWORD*) ; - -PROCEDURE PRINTTABLE; - -VAR - I,J,M: INDEX; - -BEGIN - I := TOP; - WHILE I <> P DO - BEGIN (*FIND MINIMAL WORD*) - M := I; - J := T[I].FOL; - WHILE J <> P DO - BEGIN - IF T[J].KEY < T[M].KEY - THEN - M := J; - J := T[J].FOL - END ; - PRINTWORD(T[M]); - IF M <> I THEN - BEGIN - T[M].KEY:=T[I].KEY; - T[M].FIRST:=T[I].FIRST; - T[M].LAST:=T[I].LAST; - END; - I := T[I].FOL - END -END (*PRINTTABLE*) ; - -PROCEDURE OUTPUT_LINE (BUF : BUFFER) ; - - VAR - I : INTEGER ; - - PROCEDURE FILL_LINE (VAR LINE : BUFFER) ; - - VAR I : INTEGER ; - - BEGIN (* FILL_LINE *) - I := 1 ; - WHILE (LINE[I] = ' ') DO - BEGIN - LINE[I] := '-' ; - I := I + 1 - END - END ; (* FILL_LINE *) - - - - PROCEDURE PRTNEST (VAR LINE : BUFFER) ; - - VAR COL : INTEGER ; - - - BEGIN (* PRTNEST *) - FOR COL := 1 TO NESTLVL - 1 DO - WRITE (LST, BAR, ' ') ; - IF NESTLVL > 0 THEN - IF NESTUP OR NESTDN THEN - BEGIN - IF NESTDN THEN - BEGIN - WRITE (LST, BAR, ' ') ; - WRITE (LST, 'E--') ; - FOR COL := NESTLVL+2 TO NESTMAX DO - WRITE (LST, '---') - END - ELSE - BEGIN - WRITE (LST, 'B--') ; - FOR COL := NESTLVL+1 TO NESTMAX DO - WRITE (LST, '---') - END ; - FILL_LINE (LINE) - END - ELSE - BEGIN - WRITE (LST, BAR, ' ') ; - FOR COL := NESTLVL+1 TO NESTMAX DO - WRITE (LST, ' ') - END - ELSE - IF NESTDN THEN - BEGIN - WRITE (LST, 'E--') ; - FOR COL := 2 TO NESTMAX DO - WRITE (LST, '---') ; - FILL_LINE (LINE) - END - ELSE - FOR COL := 1 TO NESTMAX DO - WRITE (LST, ' ') - END ; (* PRTNEST *) - - BEGIN (* OUTPUT_LINE *) - IF ((LINECOUNT MOD PAGESIZE) = 0) OR (PAGE_NUM = 1) THEN - BEGIN - IF LISTING THEN - BEGIN - PAGE (LST) ; - WRITELN (LST, TAB(70), 'PAGE ', PAGE_NUM:1) ; - WRITELN (LST) ; - PAGE_NUM := PAGE_NUM + 1 - END ; - IF (LSTFILENAME <> 'CON:') AND ((LINECOUNT MOD PAGESIZE) = 0) THEN - WRITELN (OUTPUT, '< ', LINECOUNT:4, ',', MEMAVAIL:5, ' >') - END ; - WRITE (LST, LINECOUNT:4, ' ') ; - PRTNEST (BUF) ; - FOR I := 1 TO BUFCURSOR DO - WRITE (LST, BUF[I]) ; - WRITELN (LST) ; - IF LSTFILENAME <> 'CON:' THEN - WRITE (OUTPUT, '.') - END ; (* OUTPUT_LINE *) - - -PROCEDURE GETNEXTCHAR; -VAR I : INTEGER; - -BEGIN (* GETNEXTCHAR *) -IF BUFCURSOR >= LENGTH (INPUT_LINE) THEN - BEGIN - EOL := TRUE ; - CH := ' ' ; - ERROR := EOF(INFILE) - END -ELSE - BEGIN - BUFCURSOR := BUFCURSOR + 1 ; - CH := INPUT_LINE [BUFCURSOR] ; - BUF [BUFCURSOR] := CH ; - CH := UPPER(CH) - END -END; (* GETNEXTCHAR *) - - -PROCEDURE GETIDENTIFIER; -VAR - J,K,I: INTEGER; - ID: ALFA; - -BEGIN (* GETIDENTIFIER *) - I := 0; - ID := ' '; - REPEAT - IF I < ALFALEN - THEN - BEGIN - I := I+1; - ID[I] := CH - END; - GETNEXTCHAR - UNTIL ( NOT(((CH>='A') AND (CH<='Z')) OR (CH='_') - OR ((CH>='0') AND (CH<='9')))) OR (ERROR); - I := 1; - J := NK; - REPEAT - K := (I+J) DIV 2; (*BINARY SEARCH*) - IF KEY[K] <= ID - THEN - I := K+1; - - IF KEY[K] >= ID - THEN - J := K-1; - - UNTIL I > J; - IF KEY[K] <> ID THEN - SEARCH(ID) - ELSE - BEGIN - IF (K=3) OR ((K=5) AND (LAST_KEY<>32)) OR { BEGIN or CASE } - (K=32) OR (K=33) THEN { RECORD or REPEAT } - BEGIN - LAST_KEY := K ; - IF NESTLVL = NESTMAX THEN - WRITE (LST, '----Too many levels') - ELSE - BEGIN - NESTLVL := NESTLVL + 1 ; - NESTUP := TRUE - END - END ; - IF (K=12) OR (K=40) THEN { END or UNTIL } - IF NESTLVL = 0 THEN - WRITE (LST, '----Nesting error ') - ELSE - BEGIN - NESTLVL := NESTLVL - 1 ; - NESTDN := TRUE - END - END - -END; (* GETIDENTIFIER *) - -BEGIN (* CROSSREF *) - - INITIALIZE; - - OPENFILES; - - WHILE NOT EOF(INFILE) AND (NOT ABORT) DO - BEGIN - BUFCURSOR:= 0; - NESTUP := FALSE ; - NESTDN := FALSE ; - READLN (INFILE, INPUT_LINE) ; - IF LENGTH (INPUT_LINE) > 0 THEN - BEGIN - EOL := FALSE ; - BUFCURSOR := BUFCURSOR + 1 ; - CH := INPUT_LINE [BUFCURSOR] ; - BUF [BUFCURSOR] := CH ; - CH := UPPER (CH) - END - ELSE - BEGIN - EOL := TRUE ; - CH := ' ' - END ; - WHILE NOT EOL DO - BEGIN - IF ((CH >= 'A') AND (CH <= 'Z')) AND (NOT LITERAL) AND - (NOT ACOMMENT) AND (NOT BCOMMENT) THEN - GETIDENTIFIER - ELSE - IF (CH = '''') OR LITERAL THEN - BEGIN - REPEAT - GETNEXTCHAR; - UNTIL (CH = '''') OR (ERROR) OR EOL; - LITERAL := EOL ; - GETNEXTCHAR - END - ELSE - IF (CH = '{') OR ACOMMENT THEN - BEGIN - WHILE (CH <> '}') AND (NOT ERROR) AND (NOT EOL) DO - GETNEXTCHAR ; - ACOMMENT := EOL ; - GETNEXTCHAR - END - ELSE - IF (CH = '(') OR BCOMMENT THEN - BEGIN - IF NOT BCOMMENT THEN - GETNEXTCHAR; - IF (CH = '*') OR BCOMMENT THEN - BEGIN - IF NOT BCOMMENT THEN - GETNEXTCHAR; - REPEAT - WHILE (CH <> '*') AND (NOT ERROR) AND (NOT EOL) DO - GETNEXTCHAR ; - BCOMMENT := EOL ; - IF NOT EOL THEN - GETNEXTCHAR - UNTIL (CH = ')') OR ERROR OR EOL ; - IF NOT EOL THEN - GETNEXTCHAR - END - END - ELSE - GETNEXTCHAR; - - END; (* WHILE *) - EOL := FALSE ; - OUTPUT_LINE (BUF) ; - LINECOUNT := LINECOUNT + 1 - END ; - IF NOT ABORT THEN - BEGIN - PAGE(LST); - LINECOUNT := 0; - BUFCURSOR := 0; - PRINTTABLE; - PAGE(LST); - CLOSE(LST,I); - IF I = 255 THEN - WRITELN('Error closing output file') - END -END. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/-MTPUG.003 b/software/CPM/CPM15_MTPUG_03/-MTPUG.003 deleted file mode 100644 index e69de29..0000000 diff --git a/software/CPM/CPM15_MTPUG_03/ACOUSTIC.PAS b/software/CPM/CPM15_MTPUG_03/ACOUSTIC.PAS deleted file mode 100644 index e962c3d..0000000 --- a/software/CPM/CPM15_MTPUG_03/ACOUSTIC.PAS +++ /dev/null @@ -1,214 +0,0 @@ -Module Acoustic_Coupler; - -{ Written by Warren A. Smith } -{ intended for the public domain } -{ 01/30/82 } - -{ This set of routines is meant to be compatible with those found in } -{ DCMODEM (for the D.C. Hayes modem). It is intended that with these } -{ routines you will be able to write programs that can utilize either } -{ the D.C. Hayes modem (or the PMMI modem when I get around to it) or } -{ an acoustic coupler and use them interchangeably by re-linking with } -{ the appropriate library. } - -{ Port assignments for serial port of acoustic coupler } -Const - Status_Reg_Modem= $03; - Modem_Rcv_Reg = $02; - Modem_Xmit_Reg = $02; - - -Procedure Init_Modem; - - Const Char_Length = 3; { 8 data bits } - Stop_bits = 0; { 1 stop bits } - Parity_Inhibit = 1; { no parity } - Parity_Type = 1; { even parity } - Baud = 300; { 300 baud } - - begin { Init_Modem } - { This routine is intended for use as an initializing routine } - { if your serial port needs it. You should set up your port } - { to match the comments above. } - end; { Init_Modem } - -Procedure Set_Modem (Modebyte : byte); - - begin { Set_Modem } - { This routine lets you change the various modes of the modem, } - { most acoustic couplers can't do anything. } - end; { Set_Modem } - -Procedure Go_Onhook (Var Modem_Mode : byte); - - begin { Go_Onhook } - Clrbit (Modem_Mode, 7); - Set_Modem (Modem_Mode) - end; { Go_Onhook } - -Procedure Go_Offhook (Var Modem_Mode : byte); - - begin { Go_Offhook } - SetBit (Modem_Mode, 7); - Set_Modem (Modem_Mode) - end; { Go_Offhook } - -Procedure Set_Ans_Mode (Var Modem_Mode : byte); - - begin { Set_Ans_Mode } - Clrbit (Modem_Mode, 2); - Set_Modem (Modem_Mode) - end; { Set_Modem_Mode } - -Procedure Set_Org_Mode (Var Modem_Mode : byte); - - begin { Set_Org_Mode } - Setbit (Modem_Mode, 2); - Set_Modem (Modem_Mode) - end; { Set_Org_Mode } - -Procedure Set_Baud (Baud : integer; Var Modem_Mode : byte); - - begin { Set_Baud } - Case Baud of - 110 : Clrbit (Modem_Mode, 0); - 300 : Setbit (Modem_Mode, 0); - else Setbit (Modem_Mode, 0); - end; - Set_Modem (Modem_Mode) - end; { Set_Baud } - -Procedure Enable_Xmit (Var Modem_Mode : byte); - - begin { Enable_Xmit } - Setbit (Modem_Mode, 1); - Set_Modem (Modem_mode) - end; { Enable_Xmit } - -Procedure Disable_Xmit (Var Modem_Mode : byte); - - begin { Disable_Xmit } - Clrbit (Modem_Mode, 1); - Set_Modem (Modem_Mode) - end; { Disable_Xmit } - -Function Carrier_Present : boolean; - - begin { Carrier_Present } - { If you have your serial port wired up to recieve a carrier } - { detect signal then you should test for that bit, otherwise } - { just return TRUE. } - Carrier_Present := TRUE -{ Carrier_Present := Tstbit (Inp[Status_Reg_Modem], 6) } - end; { Carrier_Present } - -Function Ringing : boolean; - - begin { Ringing } - { Most ports can't detect ringing so just return FALSE. } - Ringing := FALSE -{ Ringing := not Tstbit (Inp[Status_Reg_Modem]), 7) } - end; { Ringing } - -Function Modem_Char_Rdy : boolean; - - begin { Modem_Char_Rdy } - { Returns TRUE if data is available in the input port } - { (does NOT read the data) } - Modem_Char_Rdy := Tstbit (Inp[Status_Reg_Modem], 1) - end; { Modem_Char_Rdy } - -Function Modem_In : char; - - begin { Modem_In } - { Reads the data port of the acoustic coupler. May have to } - { mask off bit 7 of the data if the sender is not treating it } - { as part of the data byte sent. } - Modem_In := chr(Inp[Modem_Rcv_Reg] & $7F) - end; { Modem_In } - -Function Modem_Out (OutChar : char) : boolean; - - Function Modem_Busy : boolean; - - begin { Modem_Busy } - { Returns TRUE if the transmit buffer empty bit of status port } - { indicates that the UART is still transmitting. } - Modem_Busy := not Tstbit (Inp[Status_Reg_Modem], 0) - end; { Modem_Busy } - - begin { Modem_Out } - While Modem_Busy do; - If Carrier_Present then - begin - Out [Modem_Xmit_Reg] := ord(OutChar); - Modem_Out := TRUE - end - else - Modem_Out := FALSE - end; { Modem_Out } - -Procedure Delay; { delay's for 10 millisecond } - - Const - Count = 477; - Var - I : integer; - - begin { Delay } - { Very machine dependent. I am using a 5 MHz 8085, running } - { Pascal MT+ 5.5 if that helps. } - For I := 1 to Count do - end; { Delay } - -Procedure Dial_a_Number (Var Modem_Mode : byte; Number : string); - - Var - I, J, Pulse_Count : integer; - - Procedure Pulse_Line; - - Var - I : integer; - begin { Pulse_Line } - Go_Onhook (Modem_Mode); - For I := 1 to 5 do - Delay; { leave on for 50 ms } - Go_Offhook (Modem_Mode); - For I := 1 to 5 do - Delay { leave off for 50 ms } - end; { Pulse_Line } - - begin { Dial_a_Number } - { Included as an example of how to do it. } - Go_Offhook (Modem_Mode); - For I := 1 to 100 do - Delay; - For I := 1 to Length(Number) do - If (Number[I] < '0') OR (Number[I] > '9') then - begin - Write (Number[I]); - For J := 1 to 300 do { wait 3 seconds for non_digit } - Delay - end - else - begin - Pulse_Count := ord(Number[I]) - $30; - If Pulse_Count = 0 then - Pulse_Count := 10; - Write (Number[I]); - For J := 1 to Pulse_Count do - Pulse_Line; - For J := 1 to 60 do - Delay { 600 ms delay between digits } - end; - Writeln; - Writeln('All right dummy, now that you''ve watched me, let''s see if'); - Writeln('you know how to dial a phone. Make the connection, and hit'); - Writeln('RETURN when you get a carrier.'); - Readln - end; { Dial_a_Number } - - -Modend. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/CALCAL.SRC b/software/CPM/CPM15_MTPUG_03/CALCAL.SRC deleted file mode 100644 index 735589f0838100485799c154d2a9042986c241e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6912 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 diff --git a/software/CPM/CPM15_MTPUG_03/CIRCQUE.PAS b/software/CPM/CPM15_MTPUG_03/CIRCQUE.PAS deleted file mode 100644 index 6a727b9..0000000 --- a/software/CPM/CPM15_MTPUG_03/CIRCQUE.PAS +++ /dev/null @@ -1,72 +0,0 @@ -Module Circular_Queue ; - -{ Written by Warren A. Smith } -{ Intended for use in the public domain } -{ 01/30/82 } - -{ These routines are meant to give you a way to handle circular queues. } -{ Or FIFO buffers, whatever you want to call them. They are very handy } -{ for buffering between asynchronous events and I got tired of having } -{ to rewrite them so I put them into this library. I hope you find } -{ them useful (or instructive, whatever). } - -Type - Q_range = Min_Q..Max_Q ; - Q_Type = byte ; { Could be any type } - Queue = record - Q_not_empty, - Q_not_full : boolean ; - Q_head, - Q_tail : Q_Range ; - Q : array [Q_Range] of Q_Type ; - end ; - -Function Put_Q (Var Cur_Q : Queue ; Var Cur_Entry : Q_Type) : boolean ; - - begin { Put_Q } - With Cur_Q do - If Q_not_full then - begin - Q[Q_head] := Cur_Entry ; - If Q_head = Max_Q then - Q_head := Min_Q - else - Q_head := Q_head + 1 ; - Q_not_full := Q_head <> Q_tail ; - Q_not_empty := TRUE ; - Put_Q := TRUE - end - else - Put_Q := FALSE - end ; { Put_Q } - -Function Get_Q (Var Cur_Q : Queue ; Var Cur_Entry : Q_Type) : boolean ; - - begin { Get_Q } - With Cur_Q do - If Q_not_empty then - begin - Cur_Entry := Q[Q_tail] ; - If Q_tail = Max_Q then - Q_tail := Min_Q - else - Q_tail := Q_tail + 1 ; - Q_not_full := TRUE ; - Q_not_empty := Q_head <> Q_tail ; - Get_Q := TRUE - end - else - Get_Q := FALSE - end ; { Get_Q } - -Procedure Init_Q (Var Cur_Q : Queue); - - begin { Init_Q } - Q_not_Empty := FALSE; - Q_not_Full := TRUE; - Q_head := Min_Q; - Q_tail := Q_head - end; { Init_Q } - -ModEnd. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/CMPXLIB.DOC b/software/CPM/CPM15_MTPUG_03/CMPXLIB.DOC deleted file mode 100644 index 2294073..0000000 --- a/software/CPM/CPM15_MTPUG_03/CMPXLIB.DOC +++ /dev/null @@ -1,39 +0,0 @@ -CMPXLIB: Complex math library for Pascal; by Ficomp, Inc., Fairfax, Va. -This library uses pointer variables so that functions rather than procedures -can be used. Reference: "Information Hiding in Pascal", Michael B. Feldman, -BYTE, November 1981, pp. 493-498. - -As pointed out in the reference, the problem with pointer variables is that -a new record is created every time a complex function is called. Temporary -record space is not reused unless it is specifically released with the -built-in function DISPOSE( ). These library functions create temporary -records that will automatically be erased when used in a subsequent complex -operation. The CPERM( ) procedure will mark a complex number so that it will -not be erased until DISPOSE( ) is used. The program segment below illustrates -the use of the functions: - -1 T1:=CMPLX(SQR(COS(RPSI)),0.0); -2 T1:=CSQRT(CMPXO(N2,'-',T1)); -3 CPERM(T1); -4 T2:=CMPLX(SIN(RPSI),0.0); -5 IF POL = 'V' THEN -6 T2:=CMPXO(T2,'*',N2); -7 CPERM(T2); -8 GAMA:=POLAR(CMPXO(CMPXO(T2,'-',T1),'/',CMPXO(T2,'+',T1))); -9 DISPOSE(T1); -10 DISPOSE(T2); -11 LAG:=-ANG(GAMA); -12 IF LAG < 0 THEN -13 LAG:=LAG+PI_2; -14 WRITELN(MAG(GAMA),LAG); -15 DISPOSE(GAMA); - -In line 1, complex variable T1 is created. In line 2 T1 is replaced by a new -T1. The old T1 was erased by CMPXO function call. That intermediate variable -was also erased by the CSQRT function. In line 3, T1 is made permanent because -it will be used twice in line number 8. T2 is treated in the same manner in -lines 4 to 7. Lines 9 and 10 erase T1 & T2 since they are no longer needed. -All of the intermediate complex numbers created in line 8 are automatically -erased as they are used. In line 15, GAMA is specifically erased, since it -is no longer needed. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/CMPXLIB.SRC b/software/CPM/CPM15_MTPUG_03/CMPXLIB.SRC deleted file mode 100644 index 9375b8b..0000000 --- a/software/CPM/CPM15_MTPUG_03/CMPXLIB.SRC +++ /dev/null @@ -1,234 +0,0 @@ -{CMPXLIB: Complex math library for Pascal; by Ficomp, Inc., Fairfax, Va. -This library uses pointer variables so that functions rather than procedures -can be used. Reference: "Information Hiding in Pascal", Michael B. Feldman, -BYTE, November 1981, pp. 493-498. - -As pointed out in the reference, the problem with pointer variables is that -a new record is created every time a complex function is called. Temporary -record space is not reused unless it is specifically released with the -built-in function DISPOSE( ). These library functions create temporary -records that will automatically be erased when used in a subsequent complex -operation. The CPERM( ) procedure will mark a complex number so that it will -not be erased until DISPOSE( ) is used. The program segment below illustrates -the use of the functions: - -1 T1:=CMPLX(SQR(COS(RPSI)),0.0); -2 T1:=CSQRT(CMPXO(N2,'-',T1)); -3 CPERM(T1); -4 T2:=CMPLX(SIN(RPSI),0.0); -5 IF POL = 'V' THEN -6 T2:=CMPXO(T2,'*',N2); -7 CPERM(T2); -8 GAMA:=POLAR(CMPXO(CMPXO(T2,'-',T1),'/',CMPXO(T2,'+',T1))); -9 DISPOSE(T1); -10 DISPOSE(T2); -11 LAG:=-ANG(GAMA); -12 IF LAG < 0 THEN -13 LAG:=LAG+PI_2; -14 WRITELN(MAG(GAMA),LAG); -15 DISPOSE(GAMA); - -In line 1, complex variable T1 is created. In line 2 T1 is replaced by a new -T1. The old T1 was erased by CMPXO function call. That intermediate variable -was also erased by the CSQRT function. In line 3, T1 is made permanent because -it will be used twice in line number 8. T2 is treated in the same manner in -lines 4 to 7. Lines 9 and 10 erase T1 & T2 since they are no longer needed. -All of the intermediate complex numbers created in line 8 are automatically -erased as they are used. In line 15, GAMA is specifically erased, since it -is no longer needed. -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} - -MODULE CMPXLIB; -{$M CMPLX} -{$M RE} -{$M IM} -{$M PHASOR} -{$M MAG} -{$M ANG} -{$M CMPXO} -{$M POLAR} -{$M CART} -{$M CSQR} -{$M CSQRT} -{$M CRECP} -{$M CONJG} -{$M CABS} -{$M CPERM} -{$M *} - -TYPE - CMPXNUM = RECORD - RE_PART,IM_PART: REAL - TEMPSTO: BOOLEAN - END; - COMPLEX = ^CMPXNUM; - -VAR - P:COMPLEX; - NR,NI,NRE,NIM,T:REAL; - -EXTERNAL PROCEDURE @ERR(AN_ERROR:BOOLEAN;ERRNUM:INTEGER); -EXTERNAL FUNCTION ATAN2(X,Y:REAL): REAL; - -FUNCTION CMPLX(R,I:REAL): COMPLEX; -{to create complex number with cartesian coordinates} -BEGIN - NEW(P); - P^.RE_PART := R; - P^.IM_PART := I; - P^.TEMPSTO := TRUE; - CMPLX := P -END; - -FUNCTION RE(N:COMPLEX): REAL; -{returns real part of complex number} -BEGIN - RE := N^.RE_PART -END; - -FUNCTION IM(N:COMPLEX): REAL; -{returns imaginary part of complex number} -BEGIN - IM := N^.IM_PART -END; - -FUNCTION PHASOR(M,A:REAL): COMPLEX; -{to create phasor from magnitude and angle} -BEGIN - NEW(P); - P^.RE_PART := M; - P^.IM_PART := A; - P^.TEMPSTO := TRUE; - PHASOR := P -END; - -FUNCTION MAG(N:COMPLEX): REAL; -{returns magnitude part of phasor} -BEGIN - MAG := N^.RE_PART -END; - -FUNCTION ANG(N:COMPLEX): REAL; -{returns angle part of phasor} -BEGIN - ANG := N^.IM_PART -END; - -FUNCTION CMPXO(N1:COMPLEX;OP:CHAR;N2:COMPLEX): COMPLEX; -{to add, subtract, miltiply, or divide complex numbers} -BEGIN - NR := RE(N1); - NI := IM(N1); - NRE := RE(N2); - NIM := IM(N2); - CASE OP OF - '+': {complex sum of 2 complex numbers, N1+N2} - CMPXO := CMPLX(NR+NRE,NI+NIM); - '-': {complex difference of 2 complex numbers, N1-N2} - CMPXO := CMPLX(NR-NRE,NI-NIM); - '*': {complex product of 2 complex numbers, N1*N2} - CMPXO := CMPLX(NR*NRE-NI*NIM,NR*NIM+NI*NRE); - '/': {complex quotient of 2 complex numbers, N1/N2} - BEGIN - T := SQR(NRE)+SQR(NIM); - CMPXO := CMPLX((NR*NRE+NI*NIM)/T,(NRE*NI-NR*NIM)/T) - END; - ELSE - BEGIN - @ERR(TRUE,4); - WRITELN(OP,' is an illegal complex operator'); - CMPXO := CMPLX(0.0,0.0) - END; - END; - CERASE(N1); - CERASE(N2) -END; - -FUNCTION POLAR(N:COMPLEX): COMPLEX; -{to convert complex number from cartesian to polar coordinates} -BEGIN - NR := RE(N); - NI := IM(N); - POLAR := PHASOR(SQRT(SQR(NR)+SQR(NI)),ATAN2(NR,NI)); - CERASE(N) -END; - -FUNCTION CART(N:COMPLEX): COMPLEX; -{to convert complex number from polar to cartesian coordinates} -BEGIN - NR := MAG(N); - NI := ANG(N); - CART := CMPLX(NR*COS(NI),NR*SIN(NI)); - CERASE(N) -END; - -FUNCTION CSQR(N:COMPLEX): COMPLEX; -{square of complex number, SQR(N)} -BEGIN - NR := RE(N); - NI := IM(N); - CSQR := CMPLX(SQR(NR)-SQR(NI),2*NR*NI); - CERASE(N) -END; - -FUNCTION CSQRT(N:COMPLEX): COMPLEX; -{square root of complex number, SQRT(N)} -BEGIN - NR := RE(N); - NI := IM(N); - T := SQRT((NR+SQRT(SQR(NR)+SQR(NI)))/2); - CSQRT := CMPLX(T,NI/(2*T)); - CERASE(N) -END; - -FUNCTION CRECP(N:COMPLEX): COMPLEX; -{recripical of complex number, 1/N} -BEGIN - NR := RE(N); - NI := IM(N); - T := SQR(NR)+SQR(NI); - CRECP := CMPLX(NR/T,-NI/T); - CERASE(N) -END; - -FUNCTION CONJG(N:COMPLEX): COMPLEX; -{conjugate of a complex number} -BEGIN - CONJG := CMPLX(RE(N),-IM(N)); - CERASE(N) -END; - -FUNCTION CABS(N:COMPLEX): REAL; -{absolute value of complex number, ABS(N)} -BEGIN - CABS := SQRT(SQR(RE(N))+SQR(IM(N))); - CERASE(N) -END; - -PROCEDURE CPERM(N:COMPLEX); -{to make complex number permanent} -BEGIN - N^.TEMPSTO := FALSE -END; - -PROCEDURE CERASE(N:COMPLEX); -{to release temporary complex variables} -BEGIN - IF N^.TEMPSTO THEN - DISPOSE(N) -END; - -MODEND. - - - -ASE(N:COMPLEX); -{to release temporary complex variables} -BEGIN - IF N^.TEMPSTO THEN - DISPOSE(N) -END; - -MODEND. - - diff --git a/software/CPM/CPM15_MTPUG_03/CRT.PAS b/software/CPM/CPM15_MTPUG_03/CRT.PAS deleted file mode 100644 index 9edacae..0000000 --- a/software/CPM/CPM15_MTPUG_03/CRT.PAS +++ /dev/null @@ -1,136 +0,0 @@ -Module CRT_Televideo; - -{ Written by Warren A. Smith } -{ Intended for use in the Public Domain } -{ 01/30/82 } - -{ This set of routines is designed to support a Televideo 912/920 type } -{ of terminal using direct I/O in CP/M (mainly for full screen type } -{ applications). } - -{$E-} { These constants are not to be used by external routines. } -Const - Direct_IO = 6 ; { CP/M direct I/O function } - -{ Constants used by GOTOXY routine, may have to be changed for your } -{ terminal. It is assumed the upper left corner is 0,0. } -{ The following constants are set up for a Televideo 912/920. } - Load_Cursor_Char = '='; - X_PLAC = 4 ; { Byte position of the X coordinate of escape seq. } - Y_PLAC = 3 ; { Byte position of the Y coordinate of escape seq. } - MAX_X = 79 ; { how many characters wide your screen is -1 } - MAX_Y = 23 ; { how many rows your screen has - 1 } - X_OFF = 32 ; { offset added to X coordinate before sending to crt } - Y_OFF = 32 ; { offset added to Y coordinate before sending to crt } -{$E+} - -External Function @BDOS(Func,Parm:integer):integer; - -Function Con_In : char ; { non-echoed input from the console } - - Const - Parm = 255; - - Begin { Con_In } - Con_In := chr(@BDOS(Direct_IO, Parm)) - end ; { Con_In } - -Procedure Con_Out (Out_Char : char) ; - - Var - Dummy : integer ; - - Begin { Con_Out } - Dummy := @BDOS(Direct_IO, ord(Out_Char)) - end ; { Con_Out } - -Function KeyPressed (Var In_Char : char) : Boolean ; - - Begin { KeyPressed } - In_Char := chr (@BDOS(Direct_IO, -1)); - KeyPressed := In_Char <> chr(0) - end ; { KeyPressed } - -Function Get_Console : char ; { waits for a single character from the } - { console. Does not echo it. } - - Var - In_Char : char; - - Begin { Get_Console } - While not KeyPressed (In_Char) do; - Get_Console := In_Char - end ; { Get_Console } - -Procedure GoToXY (X, Y : integer) ; - - Var - BUFFER : array [1..4] of char ; - - Begin { GoToXY } - BUFFER [1] := chr(27); { Escape character } - BUFFER [2] := Load_Cursor_Char; - If X < 0 Then - BUFFER [X_PLAC] := chr(X_OFF) - else - If X > MAX_X then - BUFFER [X_PLAC] := chr(MAX_X + X_OFF) - else - BUFFER [X_PLAC] := chr(X + X_OFF) ; - - If Y < 0 then - BUFFER [Y_PLAC] := chr(Y_OFF) - else - If Y > MAX_Y then - BUFFER [Y_PLAC] := chr(MAX_Y + Y_OFF) - else - BUFFER [Y_PLAC] := chr(Y + Y_OFF) ; - - Con_Out(Buffer[1]) ; - Con_Out(Buffer[2]) ; - Con_Out(Buffer[3]) ; - Con_Out(Buffer[4]) - - end ; { GoToXY } - -Procedure Home ; - - Begin { Home } - Con_Out (chr($1E)) - end ; { Home } - -Procedure ScreenClr ; - - Begin { ScreenClr } - Con_Out (chr(26)) - end ; { ScreenClr } - -Procedure LineClr; - - Begin { LineClr } - Con_Out (chr(27)); - Con_Out ('t') - end; { LineClr } - -Procedure Read_Cursor (Var X, Y : integer); - - Var - In_Char : char; - - begin { Read_Cursor } - { Request cursor coordinates from TeleVideo 912 or 920. A 2 MHz} - { 8080 may have trouble getting this from a 9600 baud line. } - { If this routine doesn't work, try slowing your terminals baud } - { rate down to 4800 or 2400. } - ConOut (chr(27)); - ConOut ('?'); - While not KeyPressed (In_Char) do; - Y := ord(In_Char) - Y_OFF; - While not KeyPressed (In_Char) do; - X := ord(In_Char) - X_OFF; - While not KeyPressed (In_Char) do; - { this last character is supposed to be a CR, it can be ignored. } - end; { Read_Cursor } - -ModEnd. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/CUBE.COM b/software/CPM/CPM15_MTPUG_03/CUBE.COM deleted file mode 100644 index 5daf3b81dabd9fc39892cef399500073163421e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15488 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 F{{x-@;L-p9 diff --git a/software/CPM/CPM15_MTPUG_03/CUBE.SRC b/software/CPM/CPM15_MTPUG_03/CUBE.SRC deleted file mode 100644 index 41f6e16..0000000 --- a/software/CPM/CPM15_MTPUG_03/CUBE.SRC +++ /dev/null @@ -1,285 +0,0 @@ -PROGRAM CUBE; - -{By Ed Reed - Tailored Computer Solutions - 1919 S. Newport - Kennewick, WA 99336 - - This program allows the user to manipulate Rubik's Cube without the hazards - of Cuber's Thumb, but somehow I can't imagine going blind at one's screen - being any better. There is a companion program, CUBESOLV, which can be - chained to or started independently which solves any mess a person can - create here which still represents a legitimate cube.} - -LABEL 1, 2; - -TYPE - - ROW = STRING[7]; {Length of seven is chosen for ease of output, which} - FACE = {is unfolded so that all faces are visible. Positions} - RECORD {1, 4, and 7 are the colors and the rest are blank.} - A : ROW; - B : ROW; - C : ROW - END; - -VAR - - U : ABSOLUTE [$7000] FACE; {Up (top)} {Faces are left in core where} - D : ABSOLUTE [$7020] FACE; {Down (bottom)} {CUBESOLV can access them.} - F : ABSOLUTE [$7040] FACE; {Front} - B : ABSOLUTE [$7060] FACE; {Back} - L : ABSOLUTE [$7080] FACE; {Left} - R : ABSOLUTE [$70A0] FACE; {Right} - S : FACE; {Spare} - ESC, OPTN, HOME, COLOR : CHAR; - MOVES, XPOS, YPOS : INTEGER; - CHAINFIL : FILE; - MSTORE : ARRAY [-80 .. 400] OF CHAR; -{ -\NP -} -{The repertoire of legal moves is as follows. Anything else is ignored. - R -- Rotate right face clockwise. - r -- Rotate right face counterclockwise. - L -- Rotate left face clockwise. - l -- Rotate left face counterclockwise. - U -- Rotate up face clockwise. - u -- Rotate up face counterclockwise. - D -- Rotate down face clockwise. - d -- Rotate down face counterclockwise. - F -- Rotate front face clockwise. - f -- Rotate front face counterclockwise. - B -- Rotate back face clockwise. - b -- Rotate back face counterclockwise. - V -- Rotate vertical slice up. - v -- Rotate vertical slice down. - H -- Rotate horizontal slice right. - h -- Rotate horizontal slice left. - I -- Rotate invisible slice clockwise - i -- Rotate invisible slice counterclockwise. - X -- Rotate whole cube on X axis, front face to top. - x -- Rotate whole cube on X axis, front face to bottom. - Y -- Rotate whole cube on Y axis, top face to right. - y -- Rotate whole cube on Y axis, top face to left. - Z -- Rotate whole cube on Z axis, front face to right. - z -- Rotate whole cube on Z axis, front face to left. - Backspace -- Reverse the last move. - / -- Start over. - ? -- Quit. - > -- Proceed to CUBESOLV, which solves the mess you made. - Ctrl/E -- Enter your own pattern, any 6 characters for colors, except - do not use upper and lower case of the same letter. - Crtl/Z -- Loop forever (sorry about that). - - Note: A slice is a plane through the center of the cube containing four - face-center cubelets. Horizontal, vertical, and invisible are - as viewed from the front. - -\NP -} -PROCEDURE ENTER; - - LABEL 3; - - VAR NF, I, J : INTEGER; - - BEGIN - 3: - - FOR NF := 1 TO 6 DO - BEGIN - CASE NF OF - 1 : FIL_FACE (U, 12, 1); - 2 : FIL_FACE (L, 1, 8); - 3 : FIL_FACE (F, 12, 8); - 4 : FIL_FACE (R, 23, 8); - 5 : FIL_FACE (B, 34, 8); - 6 : FIL_FACE (D, 12, 15); - END; - END; - GOTOXY (1, 21); - WRITE (ESC, 'YHit return or blank if all O.K., ', - 'otherwise any other character.'); - READ (OPTN); - IF OPTN <> ' ' THEN GOTO 3; - WRITE (HOME, ESC, 'Y'); - FOR I := 1 TO 6 DO - BEGIN - CASE I OF - 1 : BEGIN COLOR := U.B[4]; OPTN := 'U' END; - 2 : BEGIN COLOR := L.B[4]; OPTN := 'L' END; - 3 : BEGIN COLOR := F.B[4]; OPTN := 'F' END; - 4 : BEGIN COLOR := R.B[4]; OPTN := 'R' END; - 5 : BEGIN COLOR := B.B[4]; OPTN := 'P' END; - 6 : BEGIN COLOR := D.B[4]; OPTN := 'D' END; - END; - FOR J := 1 TO 6 DO - BEGIN - CASE J OF - 1 : REPAINT (U); - 2 : REPAINT (L); - 3 : REPAINT (F); - 4 : REPAINT (R); - 5 : REPAINT (B); - 6 : REPAINT (D); - END - END - END - - END; -{ -\NP -} -PROCEDURE FIL_FACE (VAR X : FACE; XX, YY : INTEGER); - - VAR I, ROW : INTEGER; - - BEGIN - - WITH X DO - FOR ROW := 0 TO 2 DO - FOR I := 0 TO 2 DO - BEGIN - GOTOXY ((3 * I) + XX, (2 * ROW) + YY); - READ (OPTN); - CASE ROW OF - 0 : IF OPTN <> ' ' THEN A[(3 * I) + 1] := LCASE (OPTN); - 1 : IF OPTN <> ' ' THEN B[(3 * I) + 1] := LCASE (OPTN); - 2 : IF OPTN <> ' ' THEN C[(3 * I) + 1] := LCASE (OPTN) - END - END - - END; - -PROCEDURE REPAINT (VAR X : FACE); - - BEGIN - - WITH X DO - BEGIN - IF A[1] = COLOR THEN A[1] := OPTN; - IF A[4] = COLOR THEN A[4] := OPTN; - IF A[7] = COLOR THEN A[7] := OPTN; - IF B[1] = COLOR THEN B[1] := OPTN; - IF B[4] = COLOR THEN B[4] := OPTN; - IF B[7] = COLOR THEN B[7] := OPTN; - IF C[1] = COLOR THEN C[1] := OPTN; - IF C[4] = COLOR THEN C[4] := OPTN; - IF C[7] = COLOR THEN C[7] := OPTN; - END; - - END; - -FUNCTION LCASE (CC : CHAR) : CHAR; - - BEGIN - - IF CC IN ['A' .. 'Z'] THEN - LCASE := CHR (ORD (CC) + 32) - ELSE - LCASE := CC - - END; - -{$I B:CUBEUTIL} {Include the text of file CUBEUTIL.} -{ -\NP -} -BEGIN {CUBE} - - HOME := CHR ($1E); - ESC := CHR ($1B); -1: - WRITE (HOME, CHR ($1B), 'Y'); -{Initialize the cube.} - U.A := 'U U U'; U.B := 'U U U'; U.C := 'U U U'; - D.A := 'D D D'; D.B := 'D D D'; D.C := 'D D D'; - L.A := 'L L L'; L.B := 'L L L'; L.C := 'L L L'; - R.A := 'R R R'; R.B := 'R R R'; R.C := 'R R R'; - F.A := 'F F F'; F.B := 'F F F'; F.C := 'F F F'; - B.A := 'B B B'; B.B := 'B B B'; B.C := 'B B B'; -2: - OPTN := ' '; - FOR MOVES := -80 TO 400 DO - MSTORE[MOVES] := ' '; - MOVES := -1; -{Run it.} - WHILE OPTN <> '?' DO - BEGIN - DISPLAY; - MOVES := MOVES + 1; - XPOS := (MOVES MOD 80) + 1; - YPOS := (MOVES DIV 80) + 21; - GOTOXY (XPOS, YPOS); - READ (OPTN); - IF ORD (OPTN) = 8 THEN - BEGIN - OPTN := MSTORE[MOVES - 1]; - IF OPTN IN ['A' .. 'Z'] THEN - OPTN := CHR (ORD (OPTN) + 32) - ELSE - OPTN := CHR (ORD (OPTN) - 32); - MOVES := MOVES - 2 - END - ELSE IF ORD (OPTN) = 5 THEN - BEGIN - ENTER; - GOTO 2; - END - ELSE - MSTORE[MOVES] := OPTN; -{ -\NP -} - CASE OPTN OF - -'R' : BEGIN CW (R); VUP (7) END; -'r' : BEGIN CCW (R); VDOWN (7) END; -'L' : BEGIN CW (L); VDOWN (1) END; -'l' : BEGIN CCW (L); VUP (1) END; -'U' : BEGIN CW (U); HLEFT (1) END; -'u' : BEGIN CCW (U); HRIGHT (1) END; -'D' : BEGIN CW (D); HRIGHT (3) END; -'d' : BEGIN CCW (D); HLEFT (3) END; -'F' : BEGIN CW (F); ICW (1) END; -'f' : BEGIN CCW (F); ICCW (1) END; -'B' : BEGIN CW (B); ICCW (3) END; -'b' : BEGIN CCW (B); ICW (3) END; -'V' : BEGIN VUP (4) END; -'v' : BEGIN VDOWN (4) END; -'H' : BEGIN HRIGHT (2) END; -'h' : BEGIN HLEFT (2) END; -'I' : BEGIN ICW (2) END; -'i' : BEGIN ICCW (2) END; -'X' : BEGIN CW (R); VUP (1); VUP (4); VUP (7); CCW (L) END; -'x' : BEGIN CCW (R); VDOWN (1); VDOWN (4); VDOWN (7); CW (L) END; -'Y' : BEGIN CW (F); ICW (1); ICW (2); ICW (3); CCW (B) END; -'y' : BEGIN CCW (F); ICCW (1); ICCW (2); ICCW (3); CW (B) END; -'Z' : BEGIN CCW (U); HRIGHT (1); HRIGHT (2); HRIGHT (3); CW (D) END; -'z' : BEGIN CW (U); HLEFT (1); HLEFT (2); HLEFT (3); CCW (D) END; -'/' : GOTO 1; -'>' : BEGIN - ASSIGN (CHAINFIL, 'A:CUBESOLV.COM'); - RESET (CHAINFIL); - IF IORESULT = 255 THEN - BEGIN - ASSIGN (CHAINFIL, 'B:CUBESOLV.COM'); - RESET (CHAINFIL); - IF IORESULT = 255 THEN - BEGIN - WRITELN ('Error opening solution program file.'); - EXIT - END; - END; - CHAIN (CHAINFIL); - END; - - ELSE - MOVES := MOVES - 1 - END - END; - -END. - -EEªƒEAM CUBEnÿNŠ$…Hÿþ$J \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/CUBESOLV.COM b/software/CPM/CPM15_MTPUG_03/CUBESOLV.COM deleted file mode 100644 index 13ccbbd6c983a76854d3134be128745e6baf26ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18688 zcmeHP4|G)3nSTQT38D}}0tqph_lEH2B_S{&lgSLpB$N4*X|Y&c1nN?fk`S{<0tqMy zgpNmB+iqL8>#;{!x6P?m+da0?qRVk>(d3EiL?1S(u?4F*rcawrtA@4z*j?D~yZ7Dq z?t3%*>DjY;PEQMxx%d0N`@7%w-S7MEeRp0I1nVE=@k%A)P`>O?zB*Gml%@RLEamKM zrGJj{&1~g`xyr2hN+ee~o2&dHU-@>Ca#&RED^)g>tG@^)rOnkzX=}CmtDv}4(8TZ8 zXsSD^dZX%1F|kh2XiMH)ol_zdu-;a_m+-w(wOr`74Hfn>nr=w~t%qD=A zuqS5@VCs}hi7mJSF(EZtp}kt_r0dYh)}iB~>(GJgfXZ~5 zI<)BK=sc>Bg`bick0`|PbSSzG7Pt{aobByQ($i-fTj_E#@kyfLo$uw`nlD*o>Q9 zY+?dYVdWb*9QD$$?vqaghISjQWY&#a$*lWBJ2aR@pvk8RO}c=^lUWzAcrxoMJhXaC zlS7yx9GP=!&bsVxWK$>Y&g7)s;H0PK5+~W*fS%Dc!seja#U|$@1&32_fHJ(3ShvAS zX5B$6nRPiQQD|arJhRz=#e0Kw0gETIF6Sg=uI{Agvd?F4ovX~HPU<$CB!HFruGtMv z`t7x>bkPkoPG;b@34>3z7T{xT<+c%nPs)0HkAE2R$vg4V}}Eo0^U@^;5FuqdVB_n1j?7 zZaCu;Re?{0Gw=;}a=bV*(P>V?OyQu=ZE3i`CvGM4GQO$0F$BEEa+lxr4L%t^n2ygu z;&{tgy=y;*8Ez(+ct+!Fg(*yZk!R{k-K?)pJUtQw<|g2=wP0>Sp5a<9LgGLtrh^@1 zUJK8FA+BY5F-%SclW(evu49mBx7C;AvX z6AxUg7m#1ft(te_nymS>fb7jwK=wib@#Go>K#v^aN9GzqpUPqy=UT=msxZAcKAJ~x zop!S=OOi2ijBy+u!Vr4giidQfW8Cx`vq7KQ%x2SFkl=baS9H>n`$uKMaZ+b7CKBt9VTM| z;Gj%Crz-Hxgmmg1t82{y5(gzR@Q4fIy3QH+7T0oo9gY?d&K?em@;H5gXX;~p0tDCU z1*CNTz6EdOgmbZghy&G=n)pe2R(;iM<9*Pp)#yUW<&j+;4FsV#p$T;*H2@Kf*mdaL1fX>v;51kc$wfb@IKNtd+3WAxu_PUhqZ1yZR;Ug6Q? zQjezQI>cAucxv8dJsl_3D07H(HexFD&7uQV=7przE^2l2uxwc|*xr)S}tkcw&n~YN~EeaEANr>HwV4Wr@ToO`WY$86{ z64i&0qG9s!lEo&D@M|5@<6m7&Qs?f)f_MRZza^^7TZ$l9WjO%BQln7~oRfh}P>`1w z&*<4{g%PYUEtW11QMiQYv0zEork?#akho=(;SyR~?Ygv5pv_BWY=~HOX-KmH4`}QN zz`2r{^)CcU+=+M1R^J$B4t>%gzx>r|yz3T8xXP9Mw!V|O19 zB^46umK4rx+i8mfXF66(8i~j1rdaKTS)q_!F#xkIJvz!}G7t7c3if2-Oea2h{aVTinTRJ0FPX>% zrp*TmcwRpq>?q39{oU)_+1b_Eduw}}v$M-dU5)1kY~37I4;NkK+}(Y9d#}C<_6Z&- z5-sauE8uI*0)C4}UJC_$tw+8E3ivHpz|T3wSO0_pZWJQ62z*V4jYF#R!1+n4@W>T# zbfbqXxe}VQ!1l#ax*|6g1IdM=Kc!Q{%940C6CXB1_E3v;0H-AqX0^bG$L$raIst_k zf!jn~v6zkX+ec)G%<1uWuOlh^^XsyD+HN!=!&i)P$}5y{u&bC1E-225gm&_S@q|}Z zJf|mgV0Ik|M~x9o;=$?LAjm?Uauo zQ($GYofs@3y^P=y4&$4il`70s+lCq7!bI2xskRMMt%U->nFVo9HHn+RnKXa&UAxSQ zHPsgD8Qn8TvA#}}F@g_NypqU$lMeog(-OJ5eZO(qBNyZJ`67GOnJ=P~v8*isGt9EK zUR-Rr_A-TSvv}#kHXvTIu+^B}-tLiWz}qz*c{_M}J9_)-Qg$*0mvFZtten_L)^dUe zOE!!vO0Y7vt(Y4IhcS|vScUGE?8A*dE1Z}`pONg5d?%r({n7#`AE8Lw&XE3TtnsW; zaz2MVrZHD-dZE=LSA!R-J#s5}p%uNb++~{q1I(buTHv}$*H6y} zjFoTNt-?8BQ>ad>_skbi;M0$6T&1G3CI>3JHL#F8oEV$Qq)RuN7;34moS~#nUcq$A zUYC(Vx_E|_&Ny?|u1f z2|6};d?63MVCHMW4=6t5QN^{Aq;1|+2a-`+=%`Pu zoOfk|*lb^+<37*E(b>#mOXC@T`aNP8p3Gq5!X@CGU|kUmOPd1>61R-;bSXySq#Dwt z7>Sb_OqXILPO2qcijhnyT&sDIzP$=u zlL9im0fs$-9Jb#y$Z!QOz}sQUBdf$SkWzC1`Wg^=D3%<9uRg)8Y*O%Z9q}{D$#uXm z<;ab0xeQbn2q{_EVvj)6;~|+YmGU)8hdIbW`c^r;&VY6gpw8`fAE+pyqGQM5JfN@Q+%0jJkxHm=h0OK)5sFVC=X-Q*#GY}~ePG6T6CzG{Hw z-{g_oA&}cKkXKY(;!Nwjf*RSNCmB0NT8~hc}dC*k8gW9fnIfz$G2%lGiJYUFhQH zwdwI;WN%1c~}QhV3|5t zZV>lJ1V!w}oB?6z3Jiwk1M8nWc7t1=&#lm0Uru)d~s=o2hm*H`9& zSljJw@DIG!k7KN1K%OIWVFI(_++DfYF!C~)_svRc<|W`2b7e(^JX`pq+UXIC;rqQ; zsxrPU4sV`gIfGZuw;C;|0=SDJ3)16n$OrB_SP)^~fe77HjVpv3P#(}sm9Jk@5$l4B zQ#eht8`RZK=M6pWy}i!Xu0H3k_CDvnZm4oy`#QV!x9cm#y+i$lH7iz9@z31W+O-RX z_q6WsZFjcr+y@sG?X5d*b@uLS-?MrZEyC7W+n9tW|_?_KY$nHPdTPW=zt?@$u$ z^^ z!%IE`k~l5?2S0d8xQpZ^ClQk&S}|u^C9iP4n5%2ivB1(BYPt-UXR1&5$J#70ooIviMd?TGchrKp;kH?lfD;|hGO+I z-21)anl;kxUifm(@p%V~y86JABj3ierL?R@Dyfm)tC8NRsn2q|YTWPE)H~c|HSYIo z>YeWI)rjA#kyh4-d%RMrMr`&=d%fZxy;83?@#o;Bzc3vYK~V1YlHYpz(3_Ob!oQEa z_!}}Gc{Ta0Hzj}QEr2Ih=%%1c8u-0GW8t*`{r#CS`k|>=F%*W=fGPZ;SLebLu^t3C z?|+eb2i$eF_=;9-@YAlFQ#m8}S~d>$)z!is35=ke2_~>kC;-6;HB?8S5a?vB(p*by zsPiYKfFI%T6|7o6sHgeX`SH#L9_yt>zy4BJlV655^yMahnbhQmWB+rtV!)5cVjX^@ z#vBeo&1;$-f3#M4u~rWF$rT8o%XNCQ&ad223p3zEzFM4Qa*Am2rcXTMGu}mG+SK@g z%I;B81Manc`Ar`<6Pi`1=zzN#B`9T`-&al4_EnJ&_1dVf23zbJXUOMUOE>_cQQ0y2 zPRvk5AEQ(0!jOrXFVq+HZ^{4J#}C(-f|?qxh5M=+T?sN4)l-)Eh!!Q|Cw&whS^6(f zo$@KK`M~eeDW81GH#znHnMoK0ANR8m@zS@0^c#xl@dtHIS`58m3}InMz5kkD8NDd$ zBJuc!-}f3W2s0d2ddpAZ;Wz7((g*7?t3FttvLE1L6Og@Ie;G8tH;bDHg&31+MV{FpY&rV_*%q19iSY9p(dy016rm zcRD5G57_4A#F#(vd4+vV@GR4cVoV?$m}bCHHJMxW>#+Zm9RM92ts{8Ls1)6GEJo^Z8BPZ14S!aQk(sG@(}2h5YwBeb!Y3AdcK1{7o(vFwQ>RXk z|FjMt<;1yEK>Be&xeA978FnjoRXve$8ZxAdT)@O3YCzdoZ&w4~aX>XTQZ?}50Z;Q* zHBd49s((d2fG~tc5-j@+L<|@(13ZF4XpdfSYiT{Dx1Qqx7Bn$+$Ow5sJhhD5Kjg)&wI4?Qc+Nrf@P8vgorxcDCY-Be7KhceM?YJ znnxJ)C5_7bAOf|gVgj1^^E|-d#^D8YG&FvF`CMQ za!pY32W5YdZ8Cz8ly-rKwF!7x9j^LLw?K#P$1ay9?+Q*Pl4E3DunE$W(wU(0Y*5`D z9Jz}w*qPuIq=#~t&<+NbyRdQkuHfihLFFK6b3}tON{Gp^$&zycG*w}Y$ z^iW{?^NOOk*ua%*VTPbjGRRsCa3zY4}lJo zT1)4~*+RYJSVEnKoO$1Y2de2{-xH(dO@+r#yPJ|IHI*b|7z5ydqm(xRVH6rGSfin7 zEGfOvl!A0=npB|#!<4q|bL198a5*qdo-oL&7q0RF1 zO$B)DOijthn_R0>*e6}KR-!vJIVDzwBzJho?GCvgjwX_lCp=boY;=Ce?G11AxkGoJ z&JE2La%Fc|n>YdgO93E7eco^!geR(pqsseDW5a#!>M-=y zg~fF+P&w7a=KKr)OiIzP`rYVoa<3c>PYJ@c*PKv46}xsW{)DI>ZXDCpsc`?h@v{fQ z6U7zkSa|GU<@Wx{&AI)@&OH&HEu3&HSfSq9JgmMDPMvW4a;DjC6U_EpqdnUJk_qv- zFn#wBZh7B|CaT;u9B^I4-xM7cVuUKbr6OAg#O z@@(YLkovrCdVdD96Ent^moyL`??Pu={WbhsM;0-!%iIh!AldL&@fz+W3HvJV_Q2P=4?WP~N(|lCT`wHzfN?|j zL+hcA1ep#N2TVwS^EF7NB&-u{O-_vsCnrEUWwc-~1LmZ%Ach~Q15b{Y#11cX<>G}? zUMz(elPRTwaDmwv%Pvc0mmOYMwiG35bO~_gUf0rtKN$H~ECEhG0X|L+YbUmvmMTcCnld8@X9pQHM;OZQW+;x^-Q*eb2o&d6H1~`T7s|Jm)$0 z-1GB&&b{m!x{_9taryG>0MqJcV#6OG-s*i~6uR~M2Lr;C=bla4=Y!PWxvB3xm~eac zxvZqs`y|M`;JeU!-ym_4dRfxGX{cYF`E<%RO7EmqtM>(_He!85#M3XUGmljz?$USC(<9vz5g=2!Eg(9Ju{m1>WiHJ@Xsv|XDbP*^b?(o11Ay>>`&z_5iC%A|r?)qj88lhZZC zGn6QW3!`|0mNQ6fJ&R;0gb#wRAC#SyO0u+f5Tj!y>E8eT&mGN;Hh1kk#QY%&g!mU5 zTNo~?(4n53jwm-nqDdVt*jbyXX4kZgNAfN0dE#*)UnUI+F*4bpiC>?)-ZGxSm!-Kp zDCNtdTpm>OEk~vD8A|>g&4@BUo6BSBB|JunVqoh-fpZmYZ2QJIZ$&e!PqA-lX`V;; zuK)ZOG&vyJr7RJZBi_5=x&TzF|HWVbF;{T`=~I6~TKv7Y;v=Nrw9Wf~VT~!LYgDLW zP3?rR)-vwn`ZGL`h4 zGSd1cU)H0XpQZhrrx`{vpXvP4_QLMzinn!gQo% z{3W5~M7_!vRukdXX0XCLno*@pl!ERs=l<}QENuc`Gg>0^Sp`gs+NLW$!c37~iA}vJ zZu$X3u1Uw4x>M(Ac!50>JzOoU_%M0~f-gNpRT-$gs2Wuw6rYq^?=~nC6PHDqP3Xk} zMuZiA3wdPg_(;5qb^Fr`t-Y`K7qNlaIuSUlI!?;FDnqP5mdD$E_3M%&{lMa?Ou!1} zr%MoeRj-tyfo$~Bt7opyiOy=|5!(=6@Tn3$`r~;y-M?dMkc+XPS45N{9^= z!l192G83=54W0e^)$WxAtr>js;N9>_5lS#iOVGMV^i;x)&C~0eGm&m7cwUQ&M?OXP zQ{?iguMi1f)ey2O3#-B+POFO4QY1cOmNGbKO-MrI^G4pEpMF7i7X+3uEQ%paVR<25 zo^f3sJ3iS8NG^rtStYl8aoxS|1zDMCb=4?#)4j)aNzEvyixFowBXzDxsDjP(!_U7T zSoq%likAaU^03{)b*7S1eIkM^@mU#(K5Vz$oh2fW4~5JuXwBmX+vUSiBW1yE5m!ty z2wX%XIJ-F;RoM3kJUp_SpGOrCa5VB>bmd`ZS_)|aD4jpGr9N1m#mhrD)77pb8D||A zrkDo_A@T`lCLLR1=fO$v_UKcjZq@Uf<#U=(q^6jHJ6n8v--!JcrtI9>#y=zr@aq(&y3pHc?d107* z)2DJ+o&i7a&mF_dS97c7al4FmVTyU!C5BHpO)BHSX9*8>>K2@t!WNKS=gwPjVS0yQ zK@J>V{+pcTKojJFEl;%;I{7=4SDOc7f5-7i6v~MQi;{TEghgo@-Q8Kw8QKt*u!8rF z-#h6e{$ZgevGuOkE#FOSfc6KsDUr8tr&p)R`#|N|UNGFwT2(z*Qd%Ow=s=VKg$Mk( z6cQxF=;fU_YQlFR`va>$p9T+b?jxTVUS2x(+BPXT193sj%l3;0K#$XDA&v)1mp9!Z zD((U6{HDWCiVH4w=-R|`1Q;O>@W;_I@uJ0yql~86>#2YZfm+A_c(4^%t|*f??=X%k zt+bPnHzr2LJ?KS}bV#9hG+&fd%zRG-7!5H<#M6}hW#H!vMD6FrbzdsoQc{zWGwN#D z*iB=LbV(=KoGwvFA`1de=bfju(JGfjd;#@*W``$uyd>QVP27Q04@haZ2*8RY-IIH8 zNd#UB6s(=XDqc104{Us;`(j`SLU;_FJ)Tq+-Edxr&1J?OXVOF5!YcGpjR58u+5sxT#OYc(;l5#w|^CRoN%oZ$9e7^1=iq)b-UDAh8LXJp@ zS{Y8Q#Z1H(EU5K6A1;-Cl-zy_GXmdacZw^<5xl7dc$+F-j*<%GaZ@;PYT`4!7?wxbbeEN>3C6E@RmpaivFvAioKpGDFLV@KPHK$zfO5@bb5gOX$y3&9>xn>A=_)@MBhT08o z?<5A-e$eeWqWFS#wPu9X^!xGkrULZ9YjG!AAsXh>_1Y3O#OPPvIw6yR}^;JBX8jt=b=ACENtkK{Zx zEA}-SQ?2)B@DO7CY7@?Q+&Ja6JM^=?b!^6{zk0!2Z&eEvJ3U0NrFp+SC<_M!ZhdK* ztdCu}FkEMZ%vMylUr|vhDw$yLfJfiXGR<+kc=e)iAq+O2&Z$R&{$tzBIw`~Z+xj-7 zmNJ6c%p>SXYoMrg@QSZyBCJZ6e5a@##-afYe1FY^EU0QB&#P0)v?P6i_ElwNPE2EN zndW3SFXR!|&q(|TMvFrTK@J7bdT;sU$nT6Q2B9Bf#!%#<(a^pQRVw_DA@tbMc`QF+ z49W9&A7A)#?_s1~XFlNhRwHUoM?LDVn97!iZ7j{B%zxbOkJuF!~G>?7KlK z%i78>-Q8Xd^E0(c7*_)0%MYb1v$SvUH8+?5t)A~+Bn=F&lpr@e5mU#=N0suBIN&i_ z6D3%H(6){bgBsyASj&dbet$G_0RrVg2O@;g9jlaN6@oSUlzb3zu&>2vgmM54kd#jw zp$YLKQv{xswv5LiNa65Pjrz{=jgWXLnF#u&1|=a=+Q<+lTSCY%tR~zr*)c@OkTcl| zLIxS0k_BOI^@NPEk?}CMG(tAbPDZ%p5i%I;64}V2YX})`k;tN$+c6U%gXu0IBiyp6 zY*KiAbb`F*BX~`B#xM>Uc=$10n>;>7*CdbWTAaGDNJl653}tFpAD`-pC5zbANJLd5 z2obWVU9AAC;Quj?+9}_*I-en1%Hz{5QnphxAhSs)BU@dA@L=1{mYRd*GsJ53lx+k2 zq_DU?W{QC+Jk>vCn}#S`_-V5bI77?$=1>)qAiq7U9(djOW|3*GGU+MQn&a1M ze3#97;C1a3Jlf{A1+`B2pXGPnUirZ5ChvvU=cHq*GQS>U?K+@>M^027L%{0~Jor$( z3#iumotz}R#?L$R>I$d4j?7uz4^$`oJ}IdE5qPzIC4%|HW?p87Z@TZ@If!f+>)RIf z8}e*XUwp5+YBkTRy^YzE^c!|pZk;GgK5AOl-yBi%w*F=0O{Ns~$(UeD=#36^14!4Yt5&kalw8_%mdujZp6T6d*l-=pbY+-4v z=ob?(XE9er-OIbI__PWi+t~ZbyUmKRDiNM<+J@cm;M=NLZGBrMgO66syvdQHs!5Vw zhIu8jjN7l;*xmCc?7sFE!LY{Z>mR&b01qxUMeQ5Yey8|Xl?bcWkg9xQUPSMFoQ|@z z&j<3Ri+TgUhcGf4?lIpuK;1m#thjD|+BIv5s}cd~6+S)_iV$Y)86HmNW862Wq4Z59}Z)%5tWBG6Wwj zU1mJ0RvZ;W@q)?bbMC02H$SK@l{tr}I1dB!ht40@{xgu9Fxq?5E1KbN%Dg!LgOUvm zE%;waD#%YsM^?ix9;&&JttAHvW;170Y$40J}k~@hAvsC;zf0 zM_En^_zpS0w#oU5J5m=!?fMVY-r}@ANrg{rF>7*ZAOYfl_goW`Ga!l(DK08%-;&m+ z7~kV$e{~GCe^4;*koZEr_m5D%ZunNr6wlDyc)830Ot>ifcMuuyvQEwM70u=RgIW~K zOd>d%t78}EW}aP_Sc%i?V2n`iD>75Q!@~zL-;wAV%$J^JzzGV~-tu542v0HO70p=m zL2arN->mzTueBgXAotZ%e{D^S#A-E~_`XVf){28R49WV@{B)n$)4>=i2E{?o_Kn*N ziXX)lyHD_VwF4Vs^b+@nhZ^o}TxfVZ?2mEmU}^m0pR4X_uLNsul+{Rr@MI2wyL~AJ zXyUG2fLta`cqDLzJaHZpT+v(~mO*0Th9FlQzGItNfU0;WywyJ(eXOH7dx!+d?0Q>} zbd9aAT$b$A+ffkyG#OvhcFp!Ar*m;3OyoGc|Fjx6gsvoAQ5$=Qmo)bMd2ZbTYU17* z{6o8s_kB=EL$Yootahy<8>zzae2{?i^I0k%|}^C>gCU*0}8_)1{xrV^{7 z{cYFf-hKOQZdP@1Vg&@@jBo{Dv$8Jj*g(x@1s*QgFa{%fBbr z82O`cxI}-wHB0-0zi$yM%X*XVt8ah6G-vR<%(?ZV?>pE3;{9(VArR-A*a4TWkw)G{ zvHetg+G9YF{@16ycwj*1jzLvXt4yTJrK5t9F2scQL~5FjFg zTvYwI{|3{XaGe*Bfmc%hX{x^0yo4t*=R6Q4zJ<@K+Z6WkH`nbqS&XyFo!kE=OG{t5 z?bP~3`xFSW&sT94n8QK8dZG6P;4@nm1 zK3`Wt;@{dGCyWpFN_wBSCcvGBpylH(HmS*=P9R(1ts9zpJd`M;Q@iPq@mZ|N-7u>988a8?4bVZh^1h^80Z^hOE`R(=RuX}g5 zPcT(K=SBV1cF znxp(NNXOD`G#&3)?1`1NwuaHKnn%&dKlirXZ+rlj<=WOF{ZA3s#<++5$MP$6xCyd+ zxYM-1rg~u2tYEQS??pimC4>8LA+1&A+V!5dtnQaXJ2Ky6j~E#Q-?be5eZYZ#KcN}U zakVkX(Z@Cu_3TteBQHT>ejwJwp?u)T8UuGK7iVN3kudrruBrkk%U_>E84 z!YeK{$~ok zt4f!3r%2yEG(D+zR%vHW*Ztz8CKjAPl#Ju9HA6Vpx2S&B+RPLuYtGL){ zTY~*)5vxe(L!{-DG2ryp@+IGFO#9Yd8-N(S33^l92Mz_q0W#pLz>7VI}fFzg*|FH zwB3fKdVrokD5>ebfmI6sDNy|QSj^fJ^}#vI)BSy)DA++-A0uw)hD&x|Z%q%-@e8}v zo3ok~`ybPH<}uAGNPfAD2(BRPDwvlo+>!fHV~&)dAFR5jq>nCP!M-a-7nbgD@K)$#S?nU}l+&`pL(PPNG)TFniX;`r3a9(2?Bs zd`k9KziL{+U=Or{%@f)ySgq8zXhN1%4i&6}VVa-E6|5UquvG;zNeFOoDQ{)q_(afbu_hc(7L9ELhIxd z_D^zIiat3em`eR-3dzVD2GnG#GS7~XkD60)AR#2o71^rVJ1R$2Q^mFx1|4XNWpYU&1Q>b{eqs-GZyqobLkqjspewJI0P55ph( zxf@3!O14RxGK>1cZ+**CD{acGQjyg5J9BD+SIST2boeW$r-pR}E|TMqrevtr(9HpF zeV6>Rjk%N2*hSj4vY_yRb&%{YB-StuxwJh>oRvScDj8>t-2nPXMS_eW3FnpS3$H;e zy(9|m%qufw4FsPy?@?yO9NAm3KUg%nB26ShhL5Iy<0;^S%pA}>`- zTtKAR_iSzkTf>1!UmJ)lNx9xKj#4a5p=BSPs=d8+LEWXW^91f6F}tr_-aYclg5cD0 z!SZgU`iho@@q&evS&P1a_H&dg_dN`7T@UMu8v*Nd?C-$E}6}+xTj8$gQ+abg2Z>edKSPnT0dL&3O zcw$uY+vHre2y6=g{J{!*G&@Df#~OO4|1_+7Q}NBODWoTLm&Wr_X%gF^AJ=4gvK zC6ATndqM|2#U9OJaG}6)7D4S{oz!S|hf(#{gt@4{_l@9Gz%#<8J#T2zju4xlfHV4IUCe+iaGa9Z@a%S?(38?PuBh6y|Xv(%mhIo&fW+# zjL*3e^v1EZ%PH<^Gf(sl4*=4nptV6wlh5ion#)QaZj**tJo-;EB3(j?=b)us*h|uz z9e`QRgwhALL&hdcmv9pMJRQE+XF}FDS7LKe@WzpzQIqk}6w<+!j`Mep^qg?gk?`$Y z#{<$FIhi9p+RuMP|5cFYK#v@0<1QF9PnC82WSaeElvA76nk2S1rpnwgnhRKoXCOu< zk3&v-?a0Z(=sV$nW*J6KaU!@v2*@c9Bc~5}%F5+DxPcZY!pFdeNusheul+FKz>RR` zODUYcEaSPaG5W&U(yjQmKg*Pr0dR&QWdZN|K*EAne3udKv23k|3 z#sJ@VbzGabIq~8s?9Xw zl#FNfoxA2kO4j^rV@~hO9HHW7?d}dG>>u}er zqZu1X)(Rqo)B4N#X>H19XU1;YI7`tz&8s7geopT18=n8nEjJ2a3!Eg-8|TJ;RV#ys z0szv~4a6KBIj*e^{pk>ksbRqg1L4~`T5qMf z8lfxd7%@Ur`$O6zl6|{du@$9J$XJ*` zll`u_j*7|+497n@MJg)y;QF^++LLo>O7EPDhptW))tFS?s)ULP+sLYi(@PNkfZ?^b zpxp}1?gL!yinl*@D+avX*Lth~KB9ZpdPah(%JN7H-5J!zye9Y8>k>~fEwtTTl8teT zgM8s!AkWXnsOSGsU1xnuQY&((t`MtEiBnWX&zHrIHokZi7FafkFZxvv-W$7A{| zxvvC%$sVBS>4nRB`rg5Y!#{9O#9DFGh?+JoTcGzfyD{_Pv1Ur^K@Xx9c87SkYD zEjuzO1^f&V+NRtZ|Ag9odc1CAGmJa`xk+(8Kwn}K)F!6w2H^XBuH}Q-#Zib?nNkH4 zDA&6jpj51tXD_}qZ|-QW44*-J7J}5|uw%tMTu||u8pRa0X@9yW1Ih4)941Y5fwYxN zxmf;bfh=2(y`r)}#dy;hq|Oa`=h((<&XCE=*!kh_8&}DE8UcNf;;&3 zbD~Lb@1mHMv<=Yl^rqlfV5|%uu|0+j@TXC2psvzq4xNtbR^?#prS=$Jt1m@wnnySGYMWm#x-SzFvj7ukKctba((FV(>iOajcS|1p@`O8-n z!|%oxXEPO5fp8>P__3kD+dNrbHZb@~yk4B#=h=N#n((;UL*O}jcRdr7`f1{m1IqPL zbr!zh(9mE>pjS?3+{cEDXUuT`4P>4DC$qFKJf*R&8onBg2nO_d{wX+A>iLzz{BHXe zUWrbDyT6=YDZU8QKO==sX8hfD?fGrA@*`X2@5q2c2Y;`2`pDTJHJtU7^AM|)G9n=# z0}#u(JG~*u)v!a zug_yH!VvcoPq!3UtAVv}Dcq(cU}rosPu363zDNx2vr`G~GdrrJBXNF~c72pP$N<9V zrHrposFLd7OsBnw$5Qc2Y~pt=K2OB&T5Jl!QUf8ZA-9X)n#?ESLp7k{f3Y9N?*Lt_ z`%xZ|8ic_cwuwI&BqHLw;S&Wce&MAMBL22ZymB6o!NO1#QLMJZCVr4ze2YzdpJ;cH z$i89x1rdMCQk(d8+;#do6~E)UnTU@!?4*5Tviv7w2P2tap1T9kZc{X#DTM3V@E^%d zfcD=DYWuRR+U4dLKGJB^HDTQys_H+c*#qql*!3fKsr-DN?IfwcGF7Z|oZ;Hft!Afz z0`kO=aP}6^gfn4JI0vHhFAHRjLsTx|WI)0he;8P`;)ftTnI=Q%(J6k(p6sor0mlf6 zOT?KtI7|8`M;gLZG!cWZkr~>}hXFIAV(8qY_7I|&ZvR{SVNJ)A-!vQfMX!fyQqD-{Hk?QMC{5PEOM|NQs=0A>W;g8%>k diff --git a/software/CPM/CPM15_MTPUG_03/CUBESOLV.SRC b/software/CPM/CPM15_MTPUG_03/CUBESOLV.SRC deleted file mode 100644 index 9256bfd..0000000 --- a/software/CPM/CPM15_MTPUG_03/CUBESOLV.SRC +++ /dev/null @@ -1,583 +0,0 @@ -PROGRAM CUBESOLV; - -{Adapted from the book - The Simple Solution to Rubik's Cube, by James G. Nourse.} - -TYPE - - ROW = STRING[7]; - FACE = - RECORD - A : ROW; - B : ROW; - C : ROW - END; - -VAR - - U : ABSOLUTE [$7000] FACE; - D : ABSOLUTE [$7020] FACE; - F : ABSOLUTE [$7040] FACE; - B : ABSOLUTE [$7060] FACE; - L : ABSOLUTE [$7080] FACE; - R : ABSOLUTE [$70A0] FACE; - S : FACE; - OPTN, HOME, GO : CHAR; - MOVES : STRING[255]; - TEST, EDGE, CORN : STRING[3]; - ERS : STRING[2]; - DOWNERS : ARRAY [0 .. 8] OF STRING[12]; - COUNT : INTEGER; - -{$I B:CUBEUTIL} {Include the text of file CUBEUTIL.} - -FUNCTION MATCH (S1, S2 : STRING) : BOOLEAN; - -{True if S1 and S2 contain the same elements in any order.} - -VAR L1, I : INTEGER; - -BEGIN - - L1 := LENGTH (S1); - IF L1 = LENGTH (S2) THEN - BEGIN - MATCH := TRUE; - FOR I := 1 TO L1 DO - IF POS (S1[I], S2) = 0 THEN - BEGIN - MATCH := FALSE; - EXIT - END - END - ELSE - MATCH := FALSE - -END; -{ -\NP -} -PROCEDURE FLIP; - -VAR XPOS, YPOS : INTEGER; - -{Make a quarter-turn move for each character in the MOVES string. - See Program Cube for list of legitimate moves.} - -BEGIN - - XPOS := (COUNT MOD 80) + 1; - YPOS := (COUNT DIV 80) + 21; - GOTOXY (XPOS, YPOS); - WRITE (MOVES); - COUNT := COUNT + LENGTH (MOVES); - WHILE MOVES <> '' DO - BEGIN - OPTN := MOVES[1]; - DELETE (MOVES, 1, 1); - CASE OPTN OF - -'R' : BEGIN CW (R); VUP (7) END; -'r' : BEGIN CCW (R); VDOWN (7) END; -'L' : BEGIN CW (L); VDOWN (1) END; -'l' : BEGIN CCW (L); VUP (1) END; -'U' : BEGIN CW (U); HLEFT (1) END; -'u' : BEGIN CCW (U); HRIGHT (1) END; -'D' : BEGIN CW (D); HRIGHT (3) END; -'d' : BEGIN CCW (D); HLEFT (3) END; -'F' : BEGIN CW (F); ICW (1) END; -'f' : BEGIN CCW (F); ICCW (1) END; -'B' : BEGIN CW (B); ICCW (3) END; -'b' : BEGIN CCW (B); ICW (3) END; -'V' : BEGIN VUP (4) END; -'v' : BEGIN VDOWN (4) END; -'H' : BEGIN HRIGHT (2) END; -'h' : BEGIN HLEFT (2) END; -'I' : BEGIN ICW (2) END; -'i' : BEGIN ICCW (2) END; -'X' : BEGIN CW (R); VUP (1); VUP (4); VUP (7); CCW (L) END; -'x' : BEGIN CCW (R); VDOWN (1); VDOWN (4); VDOWN (7); CW (L) END; -'Y' : BEGIN CW (F); ICW (1); ICW (2); ICW (3); CCW (B) END; -'y' : BEGIN CCW (F); ICCW (1); ICCW (2); ICCW (3); CW (B) END; -'Z' : BEGIN CCW (U); HRIGHT (1); HRIGHT (2); HRIGHT (3); CW (D) END; -'z' : BEGIN CW (U); HLEFT (1); HLEFT (2); HLEFT (3); CCW (D) END; - - END - END - -END; -{ -\NP -} -PROCEDURE UP_EDG; - -VAR - - K, I : INTEGER; - -BEGIN - - FOR I := 1 TO 4 DO - BEGIN - -{Move up edges up to correct positions.} - - EDGE := CONCAT (U.B[4], F.B[4]); -{FU} IF MATCH (CONCAT (U.C[4], F.A[4]), EDGE) THEN - MOVES := '' - ELSE -{RU} IF MATCH (CONCAT (R.A[4], U.B[7]), EDGE) THEN - MOVES := 'rf' - ELSE -{BU} IF MATCH (CONCAT (U.A[4], B.A[4]), EDGE) THEN - MOVES := 'Uruf' - ELSE -{LU} IF MATCH (CONCAT (L.A[4], U.B[1]), EDGE) THEN - MOVES := 'LF' - ELSE -{FR} IF MATCH (CONCAT (F.B[7], R.B[1]), EDGE) THEN - MOVES := 'f' - ELSE -{BR} IF MATCH (CONCAT (R.B[7], B.B[1]), EDGE) THEN - MOVES := 'rrfrr' - ELSE -{BL} IF MATCH (CONCAT (B.B[7], L.B[1]), EDGE) THEN - MOVES := 'LLFLL' - ELSE -{FL} IF MATCH (CONCAT (F.B[1], L.B[7]), EDGE) THEN - MOVES := 'F' - ELSE -{DF} IF MATCH (CONCAT (F.C[4], D.A[4]), EDGE) THEN - MOVES := 'FF' - ELSE -{DR} IF MATCH (CONCAT (R.C[4], D.B[7]), EDGE) THEN - MOVES := 'dff' - ELSE -{DB} IF MATCH (CONCAT (D.C[4], B.C[4]), EDGE) THEN - MOVES := 'DDFF' - ELSE -{DL} IF MATCH (CONCAT (D.B[1], L.C[4]), EDGE) THEN - MOVES := 'DFF' - ELSE - BEGIN - DISPLAY; GOTOXY (40, 1); - WRITE (ERS, 'Up edge positioning error.'); - READ (GO) - END; - FLIP; - -{Orient up edges properly and rotate cube to next position.} - - IF ((U.C[4] = U.B[4]) AND (F.A[4] = F.B[4])) THEN - MOVES := 'Z' - ELSE IF ((U.C[4] = F.B[4]) AND (F.A[4] = U.B[4])) THEN - MOVES := 'fUluZ' - ELSE - BEGIN - DISPLAY; GOTOXY (40, 1); - WRITE (ERS, 'Up edge orientation error.'); READ (GO) - END; - FLIP - END; - IF GO = ' ' THEN DISPLAY; GOTOXY (35, 15); - WRITE ('Up edges finished in ', COUNT, ' moves.'); - IF GO = ' ' THEN READ (GO); - -END; -{ -\NP -} -PROCEDURE UP_CRN; - -VAR - - I, J, K : INTEGER; - -BEGIN - - FOR I := 1 TO 4 DO - BEGIN - -{Position up corners.} - - CORN := CONCAT (U.B[4], F.B[4], R.B[4]); - {Look on the down face first for desired cublet.} - J := 1; K := 0; - WHILE (K = 0) AND (J < 5) DO - BEGIN - J := J + 1; - TEST := CONCAT (F.C[7], D.A[7], R.C[1]); - IF MATCH (TEST, CORN) THEN - BEGIN - K := 9; - {Move it up, orienting it at the same time.} - IF R.C[1] = U.B[4] THEN - MOVES := 'rdRZ' - ELSE IF F.C[7] = U.B[4] THEN - MOVES := 'FDfZ' - ELSE - MOVES := 'rDRFDDfZ' - END - ELSE - MOVES := 'D'; - FLIP - END; - {If it wasn't on the down face, look on the up face.} - IF K <> 9 THEN - BEGIN - J := 1; - WHILE (K = 0) AND (J < 5) DO - BEGIN - TEST := CONCAT (U.C[7], F.A[7], R.A[1]); - IF MATCH (TEST, CORN) THEN - K := J - ELSE - BEGIN - J := J + 1; - MOVES := 'u'; FLIP - END - END; - {If positioned correctly, orient it correctly.} - IF K = 1 THEN - BEGIN - IF F.A[7] = U.B[4] THEN - MOVES := 'FDDfrDDRZ' - ELSE IF R.A[1] = U.B[4] THEN - MOVES := 'rddRFddfZ' - ELSE - MOVES := 'Z'; - END - ELSE IF K = 0 THEN - BEGIN - DISPLAY; GOTOXY (40, 1); - WRITE (ERS, 'Up corner positioning error.'); READ (GO) - END - {Wrong up corner. Move it down, then under desired position, then up.} - ELSE - BEGIN - MOVES := 'rdRD'; - FOR K := 2 TO J DO - MOVES := CONCAT (MOVES, 'U'); - FLIP; - IF R.C[1] = U.B[4] THEN - MOVES := 'rdRZ' - ELSE IF F.C[7] = U.B[4] THEN - MOVES := 'FDfZ' - ELSE - MOVES := 'rDRFDDfZ'; - END; - FLIP - END - END; - IF GO = ' ' THEN DISPLAY; GOTOXY (35, 16); - WRITE ('Up corners finished in ', COUNT, ' moves.'); - IF GO = ' ' THEN READ (GO); - -END; -{ -\NP -} -PROCEDURE VRT_EDG; - -{Position and orient vertical edges.} - -VAR - - I, J, K : INTEGER; - -BEGIN - - FOR I := 1 TO 4 DO - BEGIN - EDGE := CONCAT (F.B[4], R.B[4]); - TEST := CONCAT (F.B[7], R.B[1]); - IF MATCH (EDGE, TEST) THEN - {Right position.} - BEGIN - IF F.B[7] = F.B[4] THEN - MOVES := 'Z' {Correct} - ELSE - MOVES := 'rDRDFdfDrDRDFdfZ' {Backward} - END - ELSE - {Move it to the bottom if necessary.} - BEGIN - FOR J := 1 TO 3 DO - BEGIN - MOVES := 'Z'; FLIP; - TEST := CONCAT (F.B[7], R.B[1]); - IF MATCH (TEST, EDGE) THEN - BEGIN - MOVES := 'rDRDFdf'; FLIP - END - END; - MOVES := 'Z'; FLIP; - {Move it to the front.} - J := 0; - TEST := CONCAT (F.C[4], D.A[4]); - WHILE (NOT MATCH (TEST, EDGE)) AND (J < 4) DO - BEGIN - J := J + 1; - MOVES := 'D'; FLIP; - TEST := CONCAT (F.C[4], D.A[4]); - END; - {Move it into position, oriented correctly.} - IF (F.C[4] = F.B[4]) AND (D.A[4] = R.B[4]) THEN - MOVES := 'drDRDFdfZ' - ELSE IF (F.C[4] = R.B[4]) AND (D.A[4] = F.B[4]) THEN - MOVES := 'ddFdfdrDRZ' - ELSE - BEGIN - DISPLAY; GOTOXY (40, 1); - WRITE (ERS, 'Vertical edge positioning error.'); READ (GO) - END; - END; - FLIP - END; - IF GO = ' ' THEN DISPLAY; GOTOXY (35, 17); - WRITE ('Vertical edges finished in ', COUNT, ' moves.'); - IF GO = ' ' THEN READ (GO); - -END; -{ -\NP -} -PROCEDURE DOWN_CRN; - -{Position down corners.} - -VAR - - I, J, K, M, RIGHT : INTEGER; - DFR, DBL : BOOLEAN; - DTEST : STRING[12]; - -BEGIN - - RIGHT := 0; - {Twist and turn until two cubelets are found properly positioned.} - WHILE RIGHT < 2 DO - BEGIN - MOVES := 'D'; FLIP; - RIGHT := 0; - J := 0; - WHILE (RIGHT < 2) AND (J < 4) DO - BEGIN - J := J + 1; - MOVES := 'Z'; FLIP; - CORN := CONCAT (L.B[4], F.B[4], D.B[4]); - TEST := CONCAT (L.C[7], F.C[1], D.A[1]); - IF MATCH (CORN, TEST) THEN - RIGHT := RIGHT + 1 - END - END; - CORN := CONCAT (R.B[4], F.B[4], D.B[4]); - TEST := CONCAT (R.C[1], F.C[7], D.A[7]); - DFR := MATCH (CORN, TEST); - CORN := CONCAT (L.B[4], B.B[4], D.B[4]); - TEST := CONCAT (L.C[1], B.C[7], D.C[1]); - DBL := MATCH (CORN, TEST); - IF DFR AND (NOT DBL) THEN {Two incorrect cubelets at back.} - MOVES := 'zzrdRFDfrDRDD' - ELSE IF (NOT DFR) AND DBL THEN {Two incorrect cubelets at right.} - MOVES := 'zrdRFDfrDRDD' - ELSE IF (NOT DFR) AND (NOT DBL) THEN {Two incorrect cubelets diagonally.} - MOVES := 'zrdRFDDfrDRD'; - FLIP; - -{Orient down corners.} - - J := 0; - M := 0; - REPEAT - {Generate a string of everywhere a down - color on a down corner cubelet could be.} - DTEST := CONCAT (D.A[1], D.A[7], D.C[1], D.C[7], L.C[1], L.C[7], - F.C[1], F.C[7], R.C[1], R.C[7], B.C[1], B.C[7]); - FOR I := 1 TO 12 DO - IF DTEST[I] <> 'D' THEN DTEST[I] := ' '; - DOWNERS[8] := DTEST; - K := 0; - {Check it out against the "pictures" from the book.} - WHILE DTEST <> DOWNERS[K] DO - K := K + 1; - IF K = 0 THEN - {It is now correct.} - J := 0 - ELSE IF K = 8 THEN - {Not this orientation. Rotate cube and try again.} - BEGIN - MOVES := 'Z'; FLIP - END - ELSE - {Found it! Run the orientation sequence and iterate.} - BEGIN - J := 0; - M := M + 1; - MOVES := 'rdRdrddRdd'; FLIP - END; - J := J + 1; - UNTIL (K = 0) OR (J > 8) OR (M > 3); - IF (J > 8) OR (M > 3) THEN - BEGIN -GOTOXY (40, 2); WRITE ('K, J, M:', K:3, J:3, M:3); - DISPLAY; GOTOXY (40, 1); - WRITE (ERS, 'Down corner orientation errror.'); READ (GO); - END; - {Put front face in front, just for a little class.} - WHILE F.B[4] <> 'F' DO - BEGIN - MOVES := 'Z'; FLIP - END; - IF GO = ' ' THEN DISPLAY; GOTOXY (35, 18); - WRITE (ERS, 'Down corners finished in ', COUNT, ' moves.'); - IF GO = ' ' THEN READ (GO); - -END; -{ -\NP -} -PROCEDURE DOWN_EDG; - -LABEL 100, 110; - -VAR I, J : INTEGER; - -BEGIN - -100: - REPEAT - J := 0; - {Find number of properly positioned edges.} - FOR I := 1 TO 4 DO - BEGIN - EDGE := CONCAT (F.B[4], D.B[4]); - TEST := CONCAT (F.C[4], D.A[4]); - IF MATCH (EDGE, TEST) THEN - BEGIN - J := J + 1; - IF J < I THEN GOTO 110 {There's only one, and this is it.} - END; - MOVES := 'Z'; FLIP - END; -110: - IF J < 4 THEN - {If there is one, it's in front. If not, it doesn't matter which is front.} - BEGIN - MOVES := 'vDVDDvDV'; FLIP; - END; - UNTIL J = 4; - {All in position, now orient them.} - J := 0; - FOR I := 1 TO 4 DO - BEGIN - IF F.C[4] = F.B[4] THEN J := J + 1; - MOVES := 'Z'; FLIP - END; - IF J = 4 THEN - {Done! How lucky can you get?} - BEGIN END - ELSE IF J = 0 THEN - {Seldom happens, but worth considering.} - BEGIN - MOVES := 'vDDVDDvDVDDvDDVd'; FLIP {Done!} - END - ELSE - {OK, where are they?} - BEGIN - J := 0; - WHILE D.C[4] = 'D' DO - {Put a bad one at the back.} - BEGIN - MOVES := 'z'; FLIP; - J := J + 1; - IF J > 4 THEN - BEGIN - DISPLAY; GOTOXY (40, 1); - WRITE (ERS, 'Down edge error, try again.'); READ (GO); - GOTO 100 - END - END; - {Make sure there's a good one on the right.} - IF R.C[4] = 'D' THEN - BEGIN - MOVES := 'Z'; FLIP - END; - IF F.C[4] = 'D' THEN - {Bad ones front and back, whip out the longest sequence used.} - BEGIN - MOVES := 'vDVDvDVDvDDVDvDVDvDVDD'; FLIP {Done (whew).} - END - ELSE - {Bad ones back and left. Make some progress, rotate, and re-position.} - BEGIN - MOVES := 'vDVdvdVdvDDVzvDVDDvDV'; FLIP; - END - END; - GOTOXY (35, 19); - WRITE ('Down edges finished in ', COUNT, ' moves.'); - -END; -{ -\NP -} -BEGIN {CUBESOLV} - - HOME := CHR ($1E); {Top left corner.} - WRITE (HOME, CHR ($1B), 'Y'); {Go to home and clear screen.} - ERS := CONCAT (CHR ($1B), 'T'); {Erase to end of line.} - COUNT := 0; - DISPLAY; - GOTOXY (1, 21); - WRITELN ('Initial position. Press any key to continue.'); - WRITE ('(Press blank to pause after each step.)'); - READ (GO); - WRITE (HOME, CHR ($1B), 'Y'); - -{Test strings for orienting the down corners. One through seven - correspond to the numbered pictures in the book.} - DOWNERS[0] := 'DDDD '; {Correct} - - DOWNERS[1] := 'D D D D'; {One down color on down face; that one at} - DOWNERS[2] := 'D D D D '; {front left.} - - DOWNERS[3] := ' D D DD'; {No down colors on down face; down colors} - DOWNERS[7] := ' DD DD '; {on left and right at front.} - - DOWNERS[4] := ' D D D D'; {Two down colors on down face; down color} - DOWNERS[5] := ' DD DD '; {on front at left} - DOWNERS[6] := ' DD D D '; - - DOWNERS[8] := ' '; {This is a trick to make sure there is alway -s} - {one that matches. It gets filled in later.} - -{Put 'U' on up face and 'F' on front face, just to add a little class.} - IF F.B[4] = 'U' THEN MOVES := 'X' - ELSE IF D.B[4] = 'U' THEN MOVES := 'XX' - ELSE IF B.B[4] = 'U' THEN MOVES := 'x' - ELSE IF L.B[4] = 'U' THEN MOVES := 'Y' - ELSE IF R.B[4] = 'U' THEN MOVES := 'y' - ELSE MOVES := ''; FLIP; - WHILE F.B[4] <> 'F' DO - BEGIN - MOVES := 'Z'; FLIP - END; - - UP_EDG; {Do the up edges first.} - UP_CRN; {Then the up corners.} - VRT_EDG; {Then the vertical edges.} - DOWN_CRN; {Penultimately, the bottom corners.} - DOWN_EDG; {Last but not least, the bottom edges.} - -{Last class.} - WHILE F.B[4] <> 'F' DO - BEGIN - MOVES := 'Z'; FLIP - END; - - DISPLAY; - GOTOXY (1, 1); - -END. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/CUBEUTIL.SRC b/software/CPM/CPM15_MTPUG_03/CUBEUTIL.SRC deleted file mode 100644 index 11304ec3c4ac24aa96bacd6c5d248580cb5eaaff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5888 zcmcgwO;0075OowK2NaI0NPDW=8sS*-E)pvc2hVuGgS@t7V=y8)5Y{Y{5D&5qNI^M8 z`7`;E+0^UmFMHZ+D`D3MyQil6b@hAIuN%6(PMkCby@ZZBC!OIrm4_8Nr#(vBC&^LL z+uGmU*xVrfiIStV&F!a?{Elu%*E71xC*#qC@@tx2O-7?JWmCG#r`asa$5g9O?GJxE z(OEA&NvIq*dsKeCyH%lA2d^rm9?xl;-qbjxo`&+Ybdd+P9%)-J zSWZlhmETA`uQ4{pSk6|BmETA``(syR-&l{l269@>aRbwHH($b{^6?p!PwPDza;+ZL zW2LK8))cBy`l*-CE@vaUr0dJ85nbKpSHC`H(~%otdfMN|Y<831&*-=OAsc_7%lE(J z*%&P#Osibiwk!2%?|_DLB{QtnFKRy_-mk{o;>tp3M~5O8+SMWSUw}X_1F-{$z-L&E zE*u2+@)H}XxedgwWD$E=*pP$Z&>N^MYWjA)Jz zc9)A|wNm!nixiZyS=mrzLUkL85%TAjftZagQ~D1WB2}pDgeHW6(yIU=1M!m0OZv+| z326v+Mh(HHgkF9YG7$Z-!;i5Lb~xR?ua=}j2BOasaW9|7qOF}aI%j+weSSsX=a1vh zps8ikX)2^BnT@8OWYcQu*tD9;z?GWX%5s`Yfp8X1(?L;FS6Nn5S6Nn587RuHp=q<1 z9yL#>+;63E;`ZVE3Abz`-sF?)_k29FTXB+oxS1^~7uaWUy`PXw**Wyi8f z8cL=yps zVrrbTR)lP!nkrecz{QgAj@;0^&ctN5D;5iOfnJVSP9+2-0K%d^Rh(Uj2Wetu&uFU) zLCGsXi8JyzXJX(*v4N0eCC(VkN&sXR>8u36ge240k)&ctN5E3Qp# zXj3W9i&`|D;6b)xW$D($oLz`h1=(;W240l&2!L>{tra0h>`H5eiP?&kO@ojn)`fyl zi^MK7v6o-)L#5#7Ya9KhB<-Y>*qCYj{ipuVwF=< '9') then - begin - Write (Number[I]); - For J := 1 to 300 do { wait 3 seconds for non_digit } - Delay - end - else - begin - Pulse_Count := ord(Number[I]) - $30; - If Pulse_Count = 0 then - Pulse_Count := 10; - Write (Number[I]); - For J := 1 to Pulse_Count do - Pulse_Line; - For J := 1 to 60 do - Delay { 600 ms delay between digits } - end; - Writeln - end; { Dial_a_Number } - -Modend. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/DIRFILE.ERL b/software/CPM/CPM15_MTPUG_03/DIRFILE.ERL deleted file mode 100644 index 1544fa7017852579a339489ce0b67912ee3d2389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 zcmcIleNYo;8h>^Z!V*JnLBNnkXS3um;KxAau%LIdkj)l3P|y%l%G`vQAW%U}>*@4k z+=Kubpocmz2V(ke}4O!-G{_Xl6w;P6J@b(!7FyblD(}0r%=pDS60%*g5XfQ)t6c7v*t#tuu zcb7o)I#j>R|Zg^DOTzupBmJf5Zzl>laf& zQD>P0WtmTf^l1i50Cif0Qnf?uv!pxdF~~;eI@X2V6N&`5K9_YCYlE@ z1sX*c;WyH%#K8`Qv)AWM_w_(uMWD=U|u0Bg|hY? zVAgC{7Zj)a0nbcAG(2~GIJ8lKUX1~|ezjBg9=qCt@O*KRbb{Pi4WORp(QHykJkQcX zzDmAg0}9NSf^=T}p0-6oAldHDgXmXX->9dZ%Lj}(d_aQA zqq;yX3dF}HNg&Z|7RW;QF%aEWc+5fAA2cG|c$J4Nz`jH3G{x){XXX{=#Fx3N?% zLsCKQ2~r_L(;(I7wo2;-M1Yz^fZ6>08^|l|TuNNH`<9LFobVJC;c+pc@R|CCl|tP{q235y zc_S1T9)|~65J2}9^pD;SiDy4#_Ru|B2My#3y$3%qWuoZ!<;}YeT)VM<^9r%#pGW!j zn(Sm&^4FM&0F|(^$%$)y%>EpLxOnV|qZeQka*TXPiN-{Z$o>z8-X)0O+&NLibr}fm zl|dva#N7ahE}g7^&&mg?i(s>>;wKM3e`Fhxv_#&|vzm~o3#B9q22iR`Fu{y53WUJd z8QFEsqN+Ln=C;De4*4V#?1uezcYz;;UBtGQ@4hb+1RnfaeE|J4;MNi+kNgyd`9Q^+s>@U59(p7xapOm@!dMHrCu^*|0C`?eg&3k+WR% zl0Zu0&^}>Ak%WKf4<`&KN=LizY$UFpNNMsQ$AuHz!iflG5LI7Fu!xqwl)SuxMV=Ov zDflcB_vD#E`yoZniL+IE6PuFskyVInRi+ zg7&gVeiSG6`&M@Kl`yx?UL$lmNB`)&MmBrW>_1+a;AH8}mIX|d-Qze@<5RR8ap$mE zk75I}AMh9B`G}_`RWcoip<8drX1!*==R|>XTWVaP?mKYw{Sxb$m{RDxE|o{QPqtWf z(^nb8AmVP4RduX{{D+_iL9F{s8Jc$CmSv&G;6hFnZxOclkw4x+Kg{sI#8o zGu8?rYkd{|+3}6;Lx{${a))cn)4af}m%ldui7W!HbXg<+7Qj7*$V@?7>hPxQzln&0 z4QTbgh4q}BO77F=b^qG0(49ldCkbSQ>4@9ZL!mE>byp-+bIgIy3j(j__Q_i^G1q+? zsVu&TXKK3jX>F~xog{y^o?IO(DaG3VZqG?B{!CYSpV_y$=h`>BDE>x0nH;-zlj(fl zJC2^S_mlgMU_ApMu3~YD)_A$Yc^wLp)LMG*a$z2g=X#2&MwL{G<`j3tVZm$1tyaStD(wR`SC+Sc z(-$Jx+9ZpQ+iZyB`BD54 zr+Y6*T~!q?q|x4C%?QWlegEc&$2l@+^~DUW9lrcJSZd!KUvKMH4xZAck8nm9r_(Lz gp7qw3)|~io?Xc(a9&B9N+gq6XMhM`2<^TKnFJZlnfB*mh diff --git a/software/CPM/CPM15_MTPUG_03/DIRFILE.SRC b/software/CPM/CPM15_MTPUG_03/DIRFILE.SRC deleted file mode 100644 index 68269003ea6b1a520153e00471cb0b4f0c613bfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4992 zcmbVQ-%smS63#v@E1vqWQlCcEN(pU92~<_#mR64A5QAe!wz(7`bY;K+i^OJar(7EC z(`u#tTlSCK?l*I6CnmXf+4VzmJf4{|Kfg2f*mX`^ZA5+39hjCuEz=&K`)zX0ef;md z+uqvVTHL&laYt?#-feFYEyRBjKP73d zh-YCOhtJXNW1B8CIy^i$_@0&V^*6*J9#HeAg&9oEs(9jo7S9Ax`Kb4O|=fzm+2!nEZNrO+nJ z^!&EUl6YMFjL&U(?Dk#e9y%kVO`c)(y)*vzeOLV>WOCmhX&bbF+cmU)o3OZWP2b?U zTiu4&OyR`2hEB)oF_wfpN4!BWcy-Tm^3VfPE3?XCBktAb>< z>9kF-+G^9NO(+}3g|KP+#);ty|Hv3Q?j?v?&vUGE-=M3%?BTj5&2_a)y4s^ohj8l* zsCVfbB7_D**|3n}=`v4Qi*1tIGQlFL4>h%&h0qvon@}|cVPFSNl4CEG!{Ec>mR@QlGZ3YI86WtaY)ZWMz_gRgpTAorjg&w z5Yt}Ab9D%8Z;f3?H~Qx=+v|PknU42C*DR|wIJfnq)p~tLW7OzTkp`|0$ru5+ys_r% z!w;6D!c-SKVv+hP(@HToU%LcXmK(p{B%uov#meXqOHoHl}Tv zw$b{^8d`n&R;;0K%hE%6el>F5lis%0iM{r)PApW^?5e36>qCoOR0WEdzBvgcqr`T5 ztB3(KxOGqw$W(Yr!R>9BWpp#2Ou|$IiB9S082zhoZkM_ef-@#o_*GIZrtYa2@lxye zU23UvSA9G{2aWhqmwX4|F9G;#DhnPtde3OQLw!fZw8|d0zF2dL)F?ZcWDY=Gn&=M= z$u&PBstGee6et_{mM?MUtfrI6t5ry?62Z<^0ci;v8`uTtPM7R!`WOMp{1iilgpz+Y z2(EJIOtuuqm5NSP7$;%AdRC$9_$>HLVhcPgGsdYA{gRq0GaIv@a){|V1g zRUa%I9Crauza&Oo<Y%(*C368n<>VJNs>|+WG_5(a2w$1(o9y5w#HPX%9$Oe z{p$jO0U&MqVVOzhUSsd>fr*h?xar^(yFmFBjtZn$AEIww>l0BtuNXu_&98+qjb>5I zQNNi6@gqAmohHxhXcd>bQ&Rk6$D>x0nuR;BEJK5x(T_i^=ZL-R8r9=Yy-lcUZ8 zt0m5?3q6T%5pW6m(vgG*(JJICe(?xMu3PJWSFow4TK$jy@1vws)L(v3d>R;z!mWOxnh7E9y zv7uqcW-%G!EDl?Bhf?z#*QecGvJ>o7wrHD>@IlqSEhGoC4byghre>L89uF-WM>8gr zl7_g+z+&2T)eM?EPc?sQUe_>1O*BPs33Q1DKGpY?o^#tbtrbN!!q7DMXV6rGV!6*T zlM3z1u|<#jjTm*SBFKO-@@|xcPXR+=g?n|ZRX|(({;7Gp#$Vof3ag)>Y!wcQx$Oxz5eE^0EA+ux_<`0Y* z^9-{ZrnYI6=a9t;^o*XP>6C85qH=2otehWWPE|PdKjtiT}%o3=G9uHvJs4 zFf0Z3u2u1@szr0XCUP6Ed0O985bA&QbTxK@A+Lfbw9Pu%;7>-7AF6=7A&N`pQ#twm zYa~|$-VjaZ-Vo6Z#3j73Of_nujF#!BG?mOtaAT&0@iCY^p;It-p?4S;)1`I2v+fF zl!n=Snr8)eYo2GG0A7oCLI%I``$=VI;X%Qotp6OO6=7OYTE57tbOY+R*sAwhrBSyW z)cw+sVp6V@HC<&m1w1aq%kMlqamq0}Pg7vu^o6F${XMWuzTaez9dSh7sX83wFXf`f z#_Nw2^-m484jW-bD;NLzd#Jvg34x#gK~{0&_r|DUH~#s>KZd_I{{2Ox(UK>BE(KTq F{{v%lfC&Hq diff --git a/software/CPM/CPM15_MTPUG_03/EPSON.DOC b/software/CPM/CPM15_MTPUG_03/EPSON.DOC deleted file mode 100644 index 358b38f1930fcad07ad0bce7991ebde02b691c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2816 zcmZuzO>f&q5cSnWdF`R60dkNGC{CR;X&RttY^@bd&o0Ba&y04-NA!#_(sXo7XDP^BX}^0_9oT7OBD2{&fwTiJi~{aE_~CN)VnHt zsS(#xqZ=O%=R{L*5&#IIc>KzVL?@MJ1741;KPRe;)j-QJOH)-kXqPCqs=%8Cl5;68 zNT&jkmWfJ_=+5&$d8XW9n!T?ipmE+q)H`mJz z?Q2uiOmo>4oFapZok?m7fB@a|2ULt?V2YC%Ym;YNT_}#aq`d;yLNB-$7tEPQiig3Z zFGd;6BUsid8hbd;vn5I!J<^jbYxM|gq`6lx^Hg~EsGR{t_8=9cS!seU623Hza%G%J zMm?xL!iXuTpkc=Vm7`;=5T7pJu9sJco@c$_=tfj#T;W6OgGwMoeG$-rnK|J=?|le< z4;>iyfK)dAFpGKizO%_ZU9M>BRVYO#CQ<}e1O1{_tR%?9T9Pc09hee^42War9^L~e z8GJ-0zM_NgP`*PCgmV6GWI`o0=<4MyRUhh`XZ_F+g+N~_ zK~O*eLAF+Zra>%>Md}%eiLVS}19EG-h-BDks=p0@RGkyCV3pb zw@dZ-;RQZK^QS%vBKcMdy7ejf1|)_ZaF6GIzY;|=vLH80)*GSUp1x8ZGlMqKzFevSDNYk9w7mMfo;l;%C6-@gI&?n4YlQ6J& z0nuNmw|M~Fd+t{0I$u?w{O>86cLL_!6wHtC7)R4F_1E|?kj_+M$|MzJA*v+PQwZ)) zOk>=Cc*3af?-o!P>-!1)Jlal-CTabISigDhbe1C*WoTF@%M81i=9|fR6q{C<@D`$f ziha^bfy7uWSRzzuR18x;)c`CLieFElLan}cf`i+BgNV6@^_*68hUPgvY7ip4suk2e zpuA&fL+6gPB4zgQsB*}(AI*Fo zwc#T0-#jZ6mN;aNCCK+ByvAh27VAKAY<2MwmoOgi^q_SM6Rc+T(X|4apRsO05?`YP z-JrUZkneHGa^9$n=!h>3nAg0PciL&5*zm_%8M-_!@(dT$7NdH+uu<(>%^Um6z=xlz evlepw?&RbfxtLzBuFf}qY)<%hd?C;OeETnlK%P_p diff --git a/software/CPM/CPM15_MTPUG_03/EPSON.ERL b/software/CPM/CPM15_MTPUG_03/EPSON.ERL deleted file mode 100644 index 1302c1a4204043163b6d52311980e12c483d34db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9728 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 diff --git a/software/CPM/CPM15_MTPUG_03/EPSON.SRC b/software/CPM/CPM15_MTPUG_03/EPSON.SRC deleted file mode 100644 index 7cb62ac..0000000 --- a/software/CPM/CPM15_MTPUG_03/EPSON.SRC +++ /dev/null @@ -1,504 +0,0 @@ -{$K0} {$K2} {$K12} {$K13} {$K14} {$K15} -program epson; - -{ A print 'formatter' program to facilitate use of the epson } -{ Written by Harry Eckerson on 9/18/81 and last revised 12/7/81 } -{ This program requires erl files epson2, utilmod and paslib } -{ IT USES } -{ ******** NO cpm LST device IO ******* } -{ location of ioport's base = 80H } - -const - signon = ' Initializing EPSON (80H) - Procedure of H. Eckerson 12/7/81'; - maxthings = 10; - blank = ' '; - spec_c = '?'; {spec character in col 1 to detect spec action } - base = $80; - base7 = $87; - bell = 7; - c_ret = 13; { carriage return } - cr_lf = 10; { line feed } - -type - big_string = string[255]; -var - in_fil, - p_fil : text; - f_name, - str : string; - ok : char; - no_c, - code : boolean; - long_s : big_string; - count, i , - copies, last_copy, - ten_top, ten_bot, ten_page, - top, bottom, lines_per , spaces, - num, l_count, page_l, p_number : integer; - l_feed, d_strike, number, comp, emph : boolean; - -external function keypressed : boolean; -external procedure @HLT; -external procedure p_error (ok : char); -external procedure clr_line; -external procedure p_out(let_val : integer); -external procedure set_page(page_l : integer); -external procedure d_blanks( var d_line : string); -external function yes_1 - (var str : string; var zero_ch : boolean) : boolean; -external procedure init_io; -external function convert( var line : string; tenths : boolean): integer; -external procedure set_epson; - -procedure forms( prompt_n : integer); -const - width = 4; - mov_rt = 8; -begin -case prompt_n of -1 : writeln(chr(13),chr(13),chr(13),chr(13) , - ' The following format is selected:'); -2 : write(' Number of lines/inch (6,8 or 10): ', - lines_per div 10:width, blank:mov_rt); -3 : write(' Page length (inches): ', - ten_page div 10:2,'.',ten_page mod 10, blank:mov_rt); -4 : write(' Top margin (inches): ', - ten_top div 10:2,'.',ten_top mod 10, blank:mov_rt); -5 : write(' Bottom margin (inches): ', - ten_bot div 10:2,'.',ten_bot mod 10, blank:mov_rt); -6 : begin - write(' Characters/line (80 or 132): '); - if comp then write('132':width, blank:mov_rt) - else write( '80':width, blank:mov_rt) - end; -7 : write(' Spacing (1, 2 or 3): ' - ,spaces:width, blank:mov_rt); -8 : begin - write(' Letter quality print: '); - if emph then write('YES':width, blank:mov_rt) - else write('NO':width, blank:mov_rt) - end; -9 : write(' Strikes/letter (1 or 2): ', - ord(d_strike) mod 2 + 1:width, blank:mov_rt); -10 : begin - write(' Number pages: '); - if number then write( 'YES':width, blank:mov_rt) - else write( 'NO':width, blank:mov_rt) - end; -11 : write(' Starting page number: ', - p_number:width, blank:mov_rt); -12 : begin - writeln; - write(' Are these values correct? (Y/N) ') - end - end { cases } -end; { forms } - -function format_ok : boolean; -var i : integer; -begin - for i := 1 to 10 do - begin - forms(i); - writeln - end; - if number then forms(11); - writeln; - forms(12); - format_ok := yes_1(str, no_c) -end; {format_ok } - -procedure parameters; -var - str : string; - old_page, old_lines : integer; - done : boolean; -begin -old_lines := lines_per; -old_page := page_l; -repeat - page(output); - writeln - ('Enter file format parameters - selects the current value.'); - writeln; - - repeat - forms(2); - read(str); - num := convert(str,false) * 10; - if num in [60,80] then lines_per := num - else if num = 100 then lines_per := 103 - else if num <> 0 then clr_line - until num in [0,60,80,100]; - - forms(3); - read(str); - num := convert(str,true); - if num > 0 then ten_page := num; - - repeat - forms(4); - read(str); - if length(str) > 0 then num := convert(str,true) - else num := ten_top; - done := num < ten_page; - if done then begin - ten_top := num - end - else clr_line - until done; - - repeat - forms(5); - read(str); - if length(str) > 0 then num := convert(str,true) - else num := ten_bot; - done := num < ten_page -ten_top; - if done then begin - ten_bot := num - end - else clr_line - until done; - - - repeat - forms(6); - read(str); - if comp then num := 132 - else num := 80; - if length(str) > 0 then num := convert(str,false); - if not (num in [132,80]) then clr_line - until num in [80,132]; - comp := num = 132; - - repeat - forms(7); - read(str); - if length(str) > 0 then num := convert(str,false) - else num := spaces; - done := num in [1..3]; - if done - then begin - spaces := num - end - else clr_line - until done; - - if comp - then begin - emph := false; - forms(8); - writeln('Compressed ON'); - end - else begin - forms(8); - done := yes_1(str, no_c); - if not no_c then emph := done - end; - - repeat - forms(9); - read(str); - num := ord(d_strike) mod 2 + 1; - num := convert(str,false); - done := num in [0,1,2]; - if done then begin - if num > 0 then d_strike := num = 2 - end - else clr_line - until done; - - forms(10); - done := yes_1(str, no_c); - if not no_c then number := done; - - if number - then begin - forms(11); - read(str); - if length(str) >0 then p_number := convert(str,false) - end; - - page(output); - done := format_ok - - until done; { end of overall repeat loop } - - l_count := (l_count * lines_per) div old_lines; - page_l := ten_page * lines_per div 100; - top := ten_top * lines_per div 100; - bottom := ten_bot * lines_per div 100; - - { actually sends codes to epson } - if page_l <> old_page - then begin - init_io; {note 1st time old_page=-66} - set_page(page_l) - end; - set_epson -end; { parameters } - - -procedure end_page; -var - on : boolean; - m, divid, mov_d, i : integer; -begin - mov_d := 0; - for i := l_count downto 1 - do begin - p_out(cr_lf); - l_count := l_count - 1 - end; - if number and (p_number > 1) then begin - mov_d := (bottom - 1 ) div 2; - for i := 1 to mov_d do p_out(cr_lf); {move to line to be numbered } - if comp then m := 64 { number of char to center of page } - else m := 38; - for i := 1 to m do p_out(ord(blank)); - p_out(ord('-')); - divid := 1000; - i := p_number; - m := i; - on := false; - repeat - i := i div divid; - m := m mod divid; - if ( i > 0) or on - then begin - p_out(i + 48); - on := true - end; - i := m; - divid := divid div 10; - until divid = 0; - p_out(ord('-')); - mov_d := mov_d + 1; { for line feed here } - p_out(cr_lf) - end; { when a page to be numbered } - for i := bottom - mov_d downto 1 do p_out(cr_lf); - if number then p_number := p_number + 1 -end; { end_page } - -procedure print_f; -var - copy_active, - i : integer; - let : char; - -procedure spec_act; -var - i : integer; -begin -while long_s[1] = spec_c - do begin - long_s[1] := blank; - case long_s[2] of - '#' : - begin - num := convert(long_s,false) * 10; - if num = 100 then num := 103; - if num in [60,80,103] then begin - bottom := (bottom * num ) div lines_per; - l_count := (l_count * num) div lines_per; - top := (top * num) div lines_per; - page_l :=(ten_page * num) div 100; - page_l := page_l - top - bottom; - lines_per := num - end { if when in 6,8,10 } - end; - - 'C','c' : - begin - comp := (pos('Y',long_s) =3) or (pos('y',long_s) =3); - if comp then emph := false - end; - - 'D','d' : - d_strike := (pos('Y',long_s) =3) or (pos('y',long_s) =3); - - - 'L','l' : - emph := (pos('Y',long_s) =3) or (pos('y',long_s) =3) - and not comp; - - 'N','n' : - begin - str := copy(long_s,3,length(long_s) - 2); - d_blanks(str); - writeln('Closing ',f_name,' & opening ',str); - f_name := str; - close(p_fil,count); - open(p_fil,f_name,count); - if count = 255 - then begin - writeln('IOERR on ',f_name,' ABORTING.'); - @HLT - end - end; - - 'O','o' : l_feed := false; - - 'P','p' : - begin - if length(long_s) > 3 - then begin - number := true; - p_number := convert(long_s,false) - end - else number := false - end; - - 'S','s' : - begin - num := convert(long_s,false); - if num in [1..3] then spaces := num - { this way if S7 given its ignored } - end; - - 'T','t' : begin - end_page; - for i := 1 to top do p_out(cr_lf); - l_count := page_l-top-bottom - end - end; { case } - num := pos(spec_c, long_s); - if num > 0 then delete(long_s,1, num - 1) - else if eof(p_fil) - then begin - l_feed := false; - long_s :='' - end - else readln(p_fil,long_s) - end; { while } - set_epson -end; - -begin { body of print_f } - l_feed := true; - page(output); - writeln; writeln; writeln; writeln; - write('How many copies? '); - read(str); - copies := convert(str,false); - if copies < 1 then copies := 1; - copy_active := 1; - - writeln('Press to start printing.'); - read(str); - if l_count < 1 - then begin - l_count := page_l - top - bottom; - for i := 1 to top do p_out(cr_lf) - end; - while not eof(p_fil) - do begin - readln(p_fil, long_s); - if long_s[1] = spec_c then spec_act; - for i := 1 to length(long_s) do p_out(ord(long_s[i]) ); - i := 0; - if l_feed - then repeat - p_out(cr_lf); - i := i + 1; - l_count := l_count - 1 - until (i = spaces) or (l_count = 0) - else begin - l_feed := true; - p_out(c_ret) - end; - if keypressed - then begin - read(let); - if let = chr(19) - then read(let) - else begin - writeln(' ABORT? (Y/N) '); - if yes_1(str, no_c) then exit - end - end; { when keypressed } - if l_count <= 0 then end_page; - if eof(p_fil) and (copies > 1) - then begin - copies := copies -1; - reset(p_fil); - if l_count > 0 then end_page; - p_number := 1 - end; { if eof & copies > 0 } - - if l_count <= 0 - then begin - for i := 1 to top do p_out(cr_lf); - l_count := page_l -top - bottom - end - end; { while } -{ put things back to default if changed } -last_copy := 0 -end; { print_f } - -begin -page(output); -writeln; -writeln; -writeln; -writeln(signon); - -{ set default format } - top := 3; bottom := 3; lines_per := 60; page_l := -66; p_number := 1; - number := false; comp := false; emph := false; d_strike := false; - spaces := 1; ten_page := 110; ten_top := 5; ten_bot := 5; - l_count := 0; last_copy := 0; - -if not format_ok then parameters - else begin - page_l := 66; - init_io; - set_page(page_l); - set_epson - end; -writeln; -write('Do you want to print a file now? (Y/N) '); -code := yes_1(str, no_c); -while code - do begin - write('File name? '); - read(f_name); - open(p_fil,f_name,count); - if (count = 255) or (eof(p_fil) and code) - then begin - writeln('IOERR or File ',f_name,' is not on line.'); - writeln; - write(' Exit? (Y/N) '); - code := not yes_1(str, no_c) - end - else begin - if code then begin - print_f; - close(p_fil, count); - p_out(bell); - writeln; - write('Printing done -'); - if number then end_page - else begin - write(' Move to top of next form? (Y/N) '); - if yes_1(str, no_c) then begin - for i := 1 to l_count + bottom - do p_out(cr_lf); - l_count := 0 - end {then when moved to TOF } - end; { when not numbered } - end; { when code true } - writeln; - write(' Print another? (Y/N) '); - code := yes_1(str, no_c); - page(output); - if code - then if not format_ok then parameters - end { when no ioerr } - end { while when code = Y } -end. - -(* -?T ?N epson2.src -*) - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/EPSON2.ERL b/software/CPM/CPM15_MTPUG_03/EPSON2.ERL deleted file mode 100644 index 51fd030f8ecfbae6b71f4fc7ba1642fdecc0f6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2304 zcma)-e^gWF8ONV{ZxSvL!lj5Nisb@A5pjzJVqiU-OUT8*_z?)ChVGBlDn%rfad3yN z(_Jt?CRYz#!_IurjIQnQpd!Y=3O;O>pPzY&~24 zx#xZFeV+IGeBST#r2Tf)x=%jgZ7DInSe>#~4sabnZU#aM@Hz)lC14!@N*_oepZZWUy=<6K&QyoA6Ktuy!*8t?0yj9rPVTGB-NPxrp`^Pf?`||x( z$_Zhgo)l>?$kEbHqGwHcauCMp4%Jp1K@YLGkXZ?Aku&6K}HMu?M&)MwePnf0@T>H|=m9)ql!h9@2YNco(4{c zA}wi=J-zje>BF)}*PB8m&;*UQ_1fB_8;WFlr;OUbfGg=n0T4bL2Rh*!r zwbJ=Jc;KoziBgBiB9Ojx(%%w9 zG$9cS;@-EJ-Ob-23(A;2*W3?80T<0I!IPU!31rlRM69KQPOvF1L3r;GPOFx$UFzIP zQDR!iwFu<%>^24v(2wD2jZquk%lH&Krn_YwjzPyy`nq;R0A=;bDx!+;CeHybR&@c( zWB?;eV7d0Q#Z*f_PPKEW|2z~K?&?UU1(~AL+^peN4y=f{$-l{x3zaReC&3f>-yvL2ubdwV9;y+fYV2~Mg?ar z3V1`-C+i{N}s=rb^MsiJV0$ic{s(TL8)ew;6Wv5 z3PR6n2N&;}lfy?Rj&ZELI#XeD6Doh}sMa)!P);F7sU_)C=!mEWbQuk^lyv}g&w`vCXhf2|6Rl1r;mV~-m9ZkT*XX#XPq!UX0QqK%ejBB;;ufS^t>vI=7( z%5rc;ZpG2Fj!teLIBe=gojU=!w}RMjesO|_=B#JSd#h85Y!ifPu64Bh%yxjKm^xZw z@ey%#G`QjFU5Z2LQQ7I!jO+s9pooOXKn3YTKu&~!ByK?Nn;XXiE@#HvG`^JA6?h!` zkk6ZOFSd=WfeR9>on2IIR*O(Zd^;&5#LU?Dhl7)8&PIOC0hZT9wV!gkBDH@z6Yc$= zg+8xY8<@!K5nhULp$RI{AVMPp3euaf^v-%KAnjpkLg_Y!MqThBu3W97A2ATlVPEx} z5K~dRY<~1mxl9b zT4|Bf?80Aw$=eXu`9>>SLm>fTfu}11-2{Uftq}9388dzlzWb{;&X_ls##O}Sm*(wJ zLt<3OS%_cc*vp>k&L&KoOe5nKfV_E7u2BXJh;nF%c23<@C zkOjirM^6TbCx?fOA6mEQLs}2neqox|g0%zAT1-e)H9$YIHXX`$4Z(;N$TK-|{xG4LOZUTMGRuu8}wsFxR ztz$};!R#*9^QY07pn|anxZOxvUTs5)vUN$H$iUGmmB!cTkqJH(Q.'); - ok_init := yes_1(str,no_c); - -(* end; put the end here for disks with functional LST: dev *) - out[base7] := 0; { select daisy port } - out[base1] := 192; { set bits 6&7 high of base1;6=strobe high;7=auto_L_off } - - out[base1] := 128; {leave 7 high take 6 low } - { this should initialize printer line #31 } - for i := 1 to 10 do ; - { delay cycle } - out[base1] := 192 { this goes back to 6 & 7 high } -end; {init } - -procedure p_error (ok : char); -{ This procedure is not needed if LST: is used } -var - lets : string; - i : integer; -begin - i := ord(ok); - if i = 0 - then begin { delay to see if really off } - for i := 1 to maxint do ; - ok := inp[base]; - i := ord(ok) - end; - if i = 0 then write('TURN ON PRINTER') - else if i in [3,67] then write('PRINTER NOT ON LINE') - else if i = 65 then write ('OUT OF PAPER') - else begin - write('Printer error # ',i,' = '); - for i := 7 downto 0 do write(ord(tstbit(ok,i))) - end; - write(' or ^C ? '); - readln(lets); - if ord(ok) = 0 then init_io -end; { p_error } - -procedure clr_line; -{ CLR_LINE should move back to the last printed line and delete it. } -begin - write(chr(19),chr(19),chr(22)) -end; - -procedure p_out(let_val : integer); -var ok : char; - i : integer; -begin -(* i := @BDOS(5,let_val) { output char to printer } - bdos call for disks with modified bios where LST: works - if @BDOS is used the rest of this procedure can be deleted. *) - - out[base7] := 0; { select daisy port } - i := -32000; - repeat { input busy line; test it to see when it clears } - ok := inp[base]; - if (ord(ok) = 0) or tstbit(ok,0) then p_error(ok); - until tstbit(ok, 7); - out[base] := wrd(let_val); { set data to be sent on the line } - out[base7] := 32; - out[base7] := 48; {enable printer output & strobe daisy port low } - for i := 1 to 1 do; { delay a moment } - out[base7] := 32; { strobe printer high and leave printer on } -end; { p_out } - -procedure d_blanks( var d_line : string); -begin - while pos( blank,d_line) = 1 do delete(d_line,1,1) -end; { d_blanks } - -procedure set_page(page_l : integer); -begin - p_out(27); { 'C' } - p_out(67); - p_out(page_l) -end; - -function yes_1( var str : string;var zero_ch : boolean) : boolean; -var - let : char; - i : integer; -begin - readln(str); - zero_ch := length(str) = 0; - d_blanks(str); - yes_1 := (pos('Y',str) = 1) or (pos('y',str) = 1) -end; { yes_1 } - - -function convert( var line : string; tenths : boolean): integer; -var - val : integer; -begin - while (length(line) > 0 ) and not (line[1] in ['0'..'9','.']) - do delete(line, 1, 1); { eliminate non numbers } - val := 0; - while (length(line) > 0) and (line[1] in ['0'..'9']) - do begin - val := val * 10 + ord(line[1]) - 48; - delete(line,1,1) - end; { conversion } - if tenths - then begin - if pos('.',line) = 1 then delete(line,1,1); - if (length(line) > 0) and ( line[1] in ['0'..'9']) - then begin - val := val * 10 + ord(line[1]) -48 ; - delete(line, 1, 1) - end - else val := val * 10 { when trailing '.' } - end; - convert := val -end; { convert } - -procedure set_epson; -begin - { set up printer } - p_out(27); { 1st line spacing } - case lines_per of - 60 : p_out(ord('2')); - 80 : p_out(ord('0')); - 103: p_out(ord('1')) - end; { case } - - if comp then p_out(15) - else p_out(146); - - p_out(27); - if emph then p_out(69) {'E'} - else p_out(70); { 'F' } - - p_out(27); - if d_strike then p_out(71) {'G'} - else p_out(72) {'H'} -end; { set_epson } - -modend. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/FNC9511.SRC b/software/CPM/CPM15_MTPUG_03/FNC9511.SRC deleted file mode 100644 index 6585e5d..0000000 --- a/software/CPM/CPM15_MTPUG_03/FNC9511.SRC +++ /dev/null @@ -1,140 +0,0 @@ -MODULE FNC9511; -{$M SIN} -{$M COS} -{$M EXP} -{$M LN} -{$M ARCTAN} -{$M TAN} -{$M ASIN} -{$M ACOS} -{$M LOG10} -{$M PI} -{$M *} - -EXTERNAL PROCEDURE @ERR(AN_ERROR:BOOLEAN; ERRNUM:INTEGER); - -EXTERNAL PROCEDURE @AMD(FUNC:INTEGER;VAR ARG:REAL;VAR STATUS:INTEGER); - -{THE PROCEDURE @AMD,INTERFACES TO THE AMD9511 ARITHMETIC PROCESSING UNIT (APU). -THE FIRST ARGUMENT IS THE FUNCTION CODE (AND IS STRAIGHT FROM THE AM9511 -LITERATURE). THE SECOND IS THE ADDRESS OF ARG, A REAL VARIABLE, THE FUNTION -ARGUMENT IS IN ARG, AND THE RESULT IS RETURNED IN ARG. THE THIRD ARGUMENT IS -THE ADDRESS WHERE THE APU STATUS IS RETURNED.} - -{TAN, ASIN, ACOS, LOG10, AND PI FUNCTIONS ADDED BY FICOMP, INC. 9/13/81} - -FUNCTION SIN(ARG:REAL):REAL; {SINE FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($02,ARG,STATUS); - SIN:=ARG; -END; - -FUNCTION COS(ARG:REAL):REAL; {COSINE FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($03,ARG,STATUS); - COS:=ARG; -END; - -FUNCTION EXP(ARG:REAL):REAL; {E TO THE X FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($0A,ARG,STATUS); - IF (STATUS & $1E) = $18 THEN - BEGIN - WRITE('EXP outside range'); - @ERR(TRUE,4); { -32< ARGUMENT >+32 } - EXP := 0.0; - END - ELSE - EXP := ARG; -END; - -FUNCTION LN(ARG:REAL): REAL; {NATURAL LOGARITHM FUNCTION} -VAR STATUS: INTEGER; -BEGIN - @AMD($09,ARG,STATUS); - IF (STATUS & $1E) = $8 THEN - BEGIN - WRITE('LN negative argument'); - @ERR(TRUE,4); { NEGATIVE ARGUMENT } - LN := 0.0; - END - ELSE - LN := ARG; -END; - -FUNCTION ARCTAN(ARG:REAL): REAL; {INVERSE TANGENT FUNCTION} -VAR STATUS: INTEGER; -BEGIN - @AMD($07,ARG,STATUS); - ARCTAN := ARG; -END; - -FUNCTION TAN(ARG:REAL):REAL; {TANGENT FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($04,ARG,STATUS); - TAN := ARG; -END; - -FUNCTION ASIN(ARG:REAL):REAL; {ARCSINE FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($05,ARG,STATUS); - IF (STATUS & $1E) = $18 THEN - BEGIN - WRITE('ASIN outside range'); - @ERR(TRUE,4); { -1< ARGUMENT >+1 } - ASIN := 0.0; - END - ELSE - ASIN := ARG; -END; - -FUNCTION ACOS(ARG:REAL):REAL; {ARCCOSINE FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($06,ARG,STATUS); - IF (STATUS & $1E) = $18 THEN - BEGIN - WRITE('ACOS outside range'); - @ERR(TRUE,4); { -1< ARGUMENT >+1 } - ACOS := 0.0; - END - ELSE - ACOS := ARG; -END; - -FUNCTION LOG10(ARG:REAL):REAL; {COMMON LOG FUNCTION} -VAR STATUS:INTEGER; -BEGIN - @AMD($08,ARG,STATUS); - IF (STATUS & $1E) = $8 THEN - BEGIN - WRITE('LOG10 negative argument'); - @ERR(TRUE,4); { NEGATIVE ARGUMENT } - LOG10 := 0.0; - END - ELSE - LOG10 := ARG; -END; - -FUNCTION PI(ARG:REAL):REAL; {RETURNS PI*ARG; PI(1)=3.14159} -VAR STATUS:INTEGER; - MULT:REAL; -BEGIN - MULT := ARG; - @AMD($1A,ARG,STATUS); - PI := ARG*MULT; -END; - -MODEND. -.14159} -VAR STATUS:INTEGER; - MULT:REAL; -BEGIN - MULT := ARG; - @AMD($1A,ARG,STATUS); - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/MATHLIBS.DOC b/software/CPM/CPM15_MTPUG_03/MATHLIBS.DOC deleted file mode 100644 index 886e2b6..0000000 --- a/software/CPM/CPM15_MTPUG_03/MATHLIBS.DOC +++ /dev/null @@ -1,29 +0,0 @@ -The earlier MATHLIB math function library has been split into POWRLIB and -TRIGLIB. The functions now include range checking, and a new trig function, -ATAN2 has been added. This is the arctangent function with quadrant -recognition. It works like the FORTRAN function of the same name. - -The new CMPXLIB library uses the pointer variable technique, now so that -functions instead of procedures may be used. - -The STATLIB library uses the conformant array schema for passing arrays of -different upper and lower bounds. The procedures find the minimum, maximum, -mean (average), and standard deviation (sigma) of the conformant arrays passed. - -The FNC9511 library is the MT+ TRAN9511 library with additional range checking. -The 9511 chip functions, TAN, ASIN, ACOS, LOG10, AND PI functions have been -added. - -Ron Finger -Ficomp, Inc. -3017 Talking Rock Drive -Fairfax, Virginia 22031 -(703) 280-1394 - PI functions have been -added. - -Ron Finger -Ficomp, Inc. -3017 Talking Rock Drive -Fairfax, Virginia 22031 -(703 \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/MTPUG.003 b/software/CPM/CPM15_MTPUG_03/MTPUG.003 deleted file mode 100644 index 2d1c85b..0000000 --- a/software/CPM/CPM15_MTPUG_03/MTPUG.003 +++ /dev/null @@ -1,90 +0,0 @@ -VOLUME #3 JANUARY 1982 - -CALCAL/SRC Convert dates from the MMDDYY year format to - an integer which increases by one for each - day. Corrects for leap year and includes - an example. By Ed. Reed. - -VARIO/SRC A self modifying program which can be used - to read/write multiple random files with - differing record sizes. By Ed. Reed. - -DIRFILE/SRC/ERL This program reads the disk directory and - writes it to a file. Useful for backup - purposes and with modification within - a program. By Ed. Reed. - -EPSON/DOC This program allows the formatting characters -EPSON/SRC/ERL used by the EPSON printer to be passed to it -EPSON2/SRC/ERL without requiring the user to commit the codes - to memory. The program interacts with the user - to print a formatted text file using different - spacing, fonts, etc. By Harry Eckerson. - -CMPXLIB/DOC/SRC Complex math library for Pascal. This library - uses pointer variables so that functions rather - than functions may be used. By Ron Finger. - -MATHLIB/DOC The Mathlib function library has been split -POWRLIB/SRC and now includes range checking, a new trig -TRIGLIB/SRC function ATAN2 has been added. This is the -STATLIB/SRC arctangent function with quadrant recognition -FNC9511/SRC (like Fortran). The Statlib uses the - conformant array schema for passing arrays of - differing upper and lower bounds. The procedures - find the MIN, MAX, MEAN(average) and standard - deviation(Sigma) of the array passed. - The FNC9511 library is the MT+ TRAN9511 library - with additional range checking. The functions - TAN, ASIN, ACOS, ALOG10, AND PI have been - added. - By Ron Finger, Ficomp, Inc. - -NSB/DOC/SRC Modified for use with Zenith Z-19/Heath H-19 - terminals. SB_GETCH has been modified to - intercept the Escape sequence commands so that - the 18 keypad & special function keys can be - used. By Ron Finger. - -NSBCUR19/DOC/SRC Modified for use with Zenith Z-19/Heath H-19 - terminals. Both the function and cursor keys - on the terminal are used. This version works - with 4 MHz systems and instructions are - included for converting the code on a 2 MHz - system. By Jerry Jankura. - -ACOUSTIC/PAS A set of routines designed to emulate a - D.C.Hayes modem with an acoustic coupler) - (Can be used by TERMINAL instead of DCMODEM - By Warren Smith - -CIRQUE/PAS A set of routines to mainuplate a circular que - By Warren Smith - -CRT/PAS A set of routines for manipulating a cursor - addressable CRT (Used by TERMINAL and RINGING) - - By Warren Smith - -DCMODEM/PAS A set of routines to access the features of a - D.C.Hayes S-100 modem (Used by TERMINAL and - RINGING) By Warren Smith - -RINGING/PAS/CMD A program to let your computer tell you that - your phone is ringing. By Warren Smith - -TERMINAL/PAS/CMD A program to act as a dumb terminal, can also - display control characters coming in on the line. - By Warren Smith - -UTILITY/PAS Only has one routine, a lower to upper case - translating. By Warren Smith - -CUBE/SRC/ERL/COM A program to play with Rubic's Cubes on your - terminal rather than in hand. List SRC for - instructions. Written by Ed Reed - -CUBESOLV/SRC/ERL/COM When all fails, use to recover from your last - attempts. List .src for instructions. - Written by Ed. Reed - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/MTPUG.BAK b/software/CPM/CPM15_MTPUG_03/MTPUG.BAK deleted file mode 100644 index 7a8a08f..0000000 --- a/software/CPM/CPM15_MTPUG_03/MTPUG.BAK +++ /dev/null @@ -1,82 +0,0 @@ -VOLUME #3 JANUARY 1982 - -CALCAL/SRC Convert dates from the MMDDYY year format to - an integer which increases by one for each - day. Corrects for leap year and includes - an example. By Ed. Reed. - -VARIO/SRC A self modifying program which can be used - to read/write multiple random files with - differing record sizes. By Ed. Reed. - -DIRFILE/SRC/ERL This program reads the disk directory and - writes it to a file. Useful for backup - purposes and with modification within - a program. By Ed. Reed. - -EPSON/DOC This program allows the formatting characters -EPSON/SRC/ERL used by the EPSON printer to be passed to it -EPSON2/SRC/ERL without requiring the user to commit the codes - to memory. The program interacts with the user - to print a formatted text file using different - spacing, fonts, etc. By Harry Eckerson. - -CMPXLIB/DOC/SRC Complex math library for Pascal. This library - uses pointer variables so that functions rather - than functions may be used. By Ron Finger. - -MATHLIB/DOC The Mathlib function library has been split -POWRLIB/SRC and now includes range checking, a new trig -TRIGLIB/SRC function ATAN2 has been added. This is the -STATLIB/SRC arctangent function with quadrant recognition -FNC9511/SRC (like Fortran). The Statlib uses the - conformant array schema for passing arrays of - differing upper and lower bounds. The procedures - find the MIN, MAX, MEAN(average) and standard - deviation(Sigma) of the array passed. - The FNC9511 library is the MT+ TRAN9511 library - with additional range checking. The functions - TAN, ASIN, ACOS, ALOG10, AND PI have been - added. - By Ron Finger, Ficomp, Inc. - -NSB/DOC/SRC Modified for use with Zenith Z-19/Heath H-19 - terminals. SB_GETCH has been modified to - intercept the Escape sequence commands so that - the 18 keypad & special function keys can be - used. By Ron Finger. - -NSBCUR19/DOC/SRC Modified for use with Zenith Z-19/Heath H-19 - terminals. Both the function and cursor keys - on the terminal are used. This version works - with 4 MHz systems and instructions are - included for converting the code on a 2 MHz - system. By Jerry Jankura. - -ACOUSTIC/PAS A set of routines designed to emulate a - D.C.Hayes modem with an acoustic coupler) - (Can be used by TERMINAL instead of DCMODEM - By Warren Smith - -CIRQUE/PAS A set of routines to mainuplate a circular que - By Warren Smith - -CRT/PAS A set of routines for manipulating a cursor - addressable CRT (Used by TERMINAL and RINGING) - - By Warren Smith - -DCMODEM/PAS A set of routines to access the features of a - D.C.Hayes S-100 modem (Used by TERMINAL and - RINGING) By Warren Smith - -RINGING/PAS/CMD A program to let your computer tell you that - your phone is ringing. By Warren Smith - -TERMINAL/PAS/CMD A program to act as a dumb terminal, can also - display control characters coming in on the line. - By Warren Smith - -UTILITY/PAS Only has one routine, a lower to upper case - translating. By Warren Smith - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/NSB.DOC b/software/CPM/CPM15_MTPUG_03/NSB.DOC deleted file mode 100644 index 088fcf2..0000000 --- a/software/CPM/CPM15_MTPUG_03/NSB.DOC +++ /dev/null @@ -1,13 +0,0 @@ -This version of NSB is for use with the Zenith Z-19/Heath H-19 terminals. -The SB_GETCH function has been modified to intercept the Escape sequence -commands so that the 18 keypad & special function keys can be used. All -original commands still function as before, except that the ERASE key is -now the escape (ESC) key. The ESC key still functions but must be pushed -twice in succession to obtain an escape. - - Ron Finger - Ficomp, Inc. - 3017 Talking Rock Dr. - Fairfax, VA 22031 - (703)280-1394 - in succe \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/NSB.SRC b/software/CPM/CPM15_MTPUG_03/NSB.SRC deleted file mode 100644 index 2bbd16a..0000000 --- a/software/CPM/CPM15_MTPUG_03/NSB.SRC +++ /dev/null @@ -1,387 +0,0 @@ -{This version of NSB is for use with the Zenith Z-19/Heath H-19 terminals. -The SB_GETCH function has been modified to intercept the Escape sequence -commands so that the 18 keypad & special function keys can be used. All -original commands still function as before, except that the ERASE key is -now the escape (ESC) key. The ESC key still functions but must be pushed -twice in succession to obtain an escape. - - Ron Finger - Ficomp, Inc. - 3017 Talking Rock Dr. - Fairfax, VA 22031 - (703)280-1394 } - -{ VERSION 0058 } -{$K0} -{$K1} -{$K2} -{$K5} -{$K6} -{$K7} -{$K8} -{$K12} -{$K13} -{$K14} -{$K15} -PROGRAM PASCAL_SPP; - -{$I EDTYPES} -{$I EDGLBLS} - -TYPE -CPMOPERATION = (COLDBOOT,WARMBOOT,CONSTAT,CONIN,CONOUT,LIST, - PUNOUT,RDRIN,HOME,SELDSK,SETTRK,SETSEC,SETDMA, - DSKREAD,DSKWRITE); - -FNAME = ARRAY [1..8] OF CHAR; { CP/M FILE NAME } - -EXTENSION = ARRAY [1..3] OF CHAR; { EXTENSION TO NAME } - -FCB = RECORD - DSK : BYTE; - FN : FNAME; - EXT : EXTENSION; - OTHER: ARRAY [12..36] OF BYTE - END; - -DIRENT = RECORD - ET : BYTE; - FN : FNAME; - EXT : EXTENSION; - OTHR : ARRAY [12..31] OF BYTE - END; - -{$I SBIFDEF.LIB} - - - -VAR - - DIRFILE: FCB; { FOR DISPLAYING DIRECTORIES } - DIRBUF: ARRAY [0..3] OF DIRENT; - - FSTRING: STRING; - MEMORY: ABSOLUTE [$0000] ARRAY[0..0] OF BYTE; - CMDCH: CHAR; - @SFP: EXTERNAL INTEGER; - BUFSTAT: STATREC; - INTRFACE: SB_INTERFACE; { USED TO COMMUNICATE BETWEEN PROGRAMS } - SB_LAST_X, - SB_LAST_Y: INTEGER; { FOR SOFTWARE CLR TO EOL/ CLR TO EOS ROUTINES } - - -EXTERNAL FUNCTION @BDOS(PARM,FUNC:INTEGER):INTEGER; - -EXTERNAL [1] PROCEDURE LOGWRITER; { LOG WRITER OVERLAY } -EXTERNAL [2] PROCEDURE SPEED; { EDITOR OVERLAY } -EXTERNAL [3] PROCEDURE SYNCHECK; { SYNTAX CHECKER OVERLAY } -EXTERNAL [4] PROCEDURE VARCHECK; { UNDEF VAR CHECKER OVERLAY } -EXTERNAL [6] PROCEDURE MTRUN; { RUN PROGRAM OVERLAY } -EXTERNAL [7] PROCEDURE DISP_DIR; { DIRECTORY DISPLAY OVERLAY } -EXTERNAL [8] FUNCTION GETFILE:BOOLEAN; { GET EDITOR FILE NAME, ETC. } -EXTERNAL [8] PROCEDURE INIT; { EDITOR INIT } -EXTERNAL [9] PROCEDURE EDITWRITE; { EDITOR WRITE BUFFER OVERLAY } -EXTERNAL[10] PROCEDURE PRETTY; { PROGRAM REFORMATER } - - -{--------------------------------------------------------------} -{ H-19/Z-19 terminal area BEGINS here: } -{--------------------------------------------------------------} - - -FUNCTION LINESZ : INTEGER; { SO USER CAN SET SIZE OF A LINE } -BEGIN - LINESZ := 79 { 80 - 1 } -END; - -FUNCTION SCREENSZ : INTEGER; -BEGIN - SCREENSZ := 22 { NUMBER OF LINES ON PHYSICAL SCREEN - 2 } -END; - -FUNCTION STATUSROW : INTEGER; -BEGIN - STATUSROW := SCREENSZ + 1 -END; - -PROCEDURE SB_OUT_CH(CH:CHAR); -BEGIN - SB_BIOS_CALL(CONOUT,ORD(CH)) -END; - -FUNCTION SB_GETCH:CHAR; -{CONVERT H/Z-19 ESC SEQUENCE COMMANDS TO SPP EQUIV. -Control character commands will function as before; -For Escape - hit ESC twice in succession} -VAR - CH : CHAR; - CHO : INTEGER; -BEGIN - SB_BIOS_CALL(CONIN,0); - INLINE("STA / CH); - IF ORD(CH)=$1B THEN {if ESC then get next char in sequence} - BEGIN - SB_BIOS_CALL(CONIN,0); - INLINE("STA / CH); - CASE CH OF {19 KEY CONTROL CHAR} - 'V' : CHO := $03; { f4 ^C } - 'P' : CHO := $06; { blue ^F } - 'N' : CHO := $07; { DC ^G } - 'D' : CHO := $08; { arrow left ^H } - 'B' : CHO := $0A; { arrow down ^J } - 'A' : CHO := $0B; { arrow up ^K } - 'C' : CHO := $0C; { arrow right ^L } - 'L' : CHO := $0E; { IL ^N } - 'R' : CHO := $11; { white ^Q } - 'W' : CHO := $12; { f5 ^R } - 'T' : CHO := $13; { f2 ^S } - 'H' : CHO := $14; { HOME ^T } - 'U' : CHO := $15; { f3 ^U } - 'Q' : CHO := $16; { red ^V } - 'S' : CHO := $17; { f1 ^W } - 'M' : CHO := $19; { DL ^Y } - '@' : CHO := $1A; { IC ^Z } - 'J' : CHO := $1B; { ERASE ESC } - ELSE - CHO := ORD(CH) - END; {CASE} - SB_GETCH :=CHR(CHO) - END - ELSE - SB_GETCH := CH -END; - -PROCEDURE XYGOTO(X,Y:INTEGER); -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('Y'); - SB_OUT_CH(CHR(Y+32)); - SB_OUT_CH(CHR(X+32)); - SB_LAST_X := X; - SB_LAST_Y := Y; { THESE ARE USED ONLY BY USER SOFTWARE } - { ROUTINES WHICH PERFORM CLR TO EOS AND } - { CLR TO EOL } -END; - -PROCEDURE SB_CLR_SCRN; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('E') -END; - -PROCEDURE SB_CLR_EOS; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('J'); - SB_OUT_CH(CHR(0)); { GIVE IT TIME TO WORK } - SB_OUT_CH(CHR(0)); { GIVE IT TIME TO WORK } - SB_OUT_CH(CHR(0)); { GIVE IT TIME TO WORK } - SB_OUT_CH(CHR(0)); { GIVE IT TIME TO WORK } -END; - - -PROCEDURE SB_CLR_LINE; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('K'); -END; - - -{--------------------------------------------------------------} -{ User modification area ENDS WITH SB_CLR_LINE } -{--------------------------------------------------------------} - - -PROCEDURE SB_FLUSH_BUF; -VAR - CH : CHAR; -BEGIN - IF NOT BUFSTAT.OCCUPIED THEN - EXIT; - - REPEAT - PRNT_AT(20,1,'Buffer occupied'); - PRNT_AT(21,1,'F)lush, U)pdate, W)rite & Flush, L)eave:'); - CH := SB_UP_CASE(SB_GETCH); - SB_OUT_CH(CH); - IF CH = 'L' THEN - EXIT; - - IF CH = 'F' THEN - BEGIN - IF NEWFILE THEN - PURGE(F); - BUFSTAT.OCCUPIED := FALSE; - EXIT - END; - - IF CH = 'W' THEN - BEGIN - EDITWRITE; - LOGWRITER; - BUFSTAT.OCCUPIED := FALSE - END; - - IF CH = 'U' THEN - BEGIN - EDITWRITE; { BUT LEAVE IT OCCUPIED } - LOGWRITER - END - UNTIL (CH='U') or (CH='F') OR (CH='W'); - NEWFILE:=FALSE; -END; - - -PROCEDURE SB_BIOS_CALL(FUNC:CPMOPERATION; PARM:INTEGER); -VAR - DISPATCH_LOC : INTEGER; -BEGIN - DISPATCH_LOC := (MEMORY[1] + SWAP(MEMORY[2])) + (ORD(FUNC)*3) - 3; - INLINE("LHLD / PARM / - "MOV C,L / - "MOV B,H / - "LHLD / DISPATCH_LOC / - "PCHL); -END; - -PROCEDURE PRNT_AT(ROW,COL:INTEGER; S:STRING); -BEGIN - XYGOTO(COL,ROW); - WRITE([ADDR(SB_OUT_CH)],S) -END; - -PROCEDURE MENU; -BEGIN - SB_CLR_SCRN; - PRNT_AT(1,1,'SpeedProgramming Package V5.2'); - PRNT_AT(3,1,'Options: E)dit'); - prnt_at(4,20, 'R)eformat'); - prnt_at(5,20, 'S)yntax check'); - prnt_at(6,20, 'V)ar check'); - prnt_at(7,20, 'X)eq'); - prnt_at(8,20, 'D)ir'); - prnt_at( 9,20, 'L)ink'); - prnt_at(10,20, 'F)ast compile'); - prnt_at(11,20, 'Q)uit'); - prnt_at(22,1,'Command? ') -END; - -FUNCTION SB_UP_CASE(CH:CHAR):CHAR; -BEGIN - IF (CH >= 'a') AND (CH <= 'z') THEN - SB_UP_CASE := CHR(CH & $DF) - ELSE - SB_UP_CASE := CH -END; - - -{$E-} -FUNCTION GET_FILE_INTO_BUF:BOOLEAN; -BEGIN - IF NOT BUFSTAT.OCCUPIED THEN - IF GETFILE THEN { GET FILE INTO BUFFER } - INIT; - GET_FILE_INTO_BUF := BUFSTAT.OCCUPIED -END; -{$E+} - -BEGIN - SB_OUT_CH(CHR(ESC)); {set up block cursor} - SB_OUT_CH('x'); - SB_OUT_CH('4'); - - BUFSZ := (@SFP - ADDR(BUF))-$100; { SET UP EDITOR BUFFER SIZE } - BUFSTAT.OCCUPIED := FALSE; - NEWFILE := FALSE; - REPEAT - MENU; - INTRFACE.NEXT_CMD := ' '; { DEFAULT NO NEXT PROGRAM } - INTRFACE.END_STAT := OK; - CMDCH := SB_UP_CASE(SB_GETCH); - SB_OUT_CH(CMDCH); { ECHO IT } - REPEAT - FSTRING := ''; { DEFAULT IS NO PROGRAM } - CASE CMDCH OF - 'D' : DISP_DIR; - 'E' : BEGIN - IF (BUFSTAT.OCCUPIED) AND ((INTRFACE.PREV_CMD = 'S') - OR (INTRFACE.PREV_CMD = 'R'))THEN - { DO NOTHING } - ELSE - SB_FLUSH_BUF; { MAKE SURE USER WANTS TO DO THIS } - - IF NOT BUFSTAT.OCCUPIED THEN { BUFFER IS EMPTY } - BEGIN - IF GETFILE THEN { SEE IF HE WANTS A FILE } - BEGIN - INIT; { CALL EDITOR } - IF BUFSTAT.OCCUPIED THEN - SPEED - END - END - ELSE - SPEED; { BUFFER OCCUPIED, EDIT OLD } - INTRFACE.PREV_CMD := ' '; - IF INTRFACE.NEXT_CMD = 'E' THEN - INTRFACE.NEXT_CMD := ' '; - END; - 'S' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - INTRFACE.PREV_CMD := ' '; - SYNCHECK; - IF INTRFACE.END_STAT = SYNERR THEN - INTRFACE.NEXT_CMD := 'E' - END - END; - 'V' : IF GET_FILE_INTO_BUF THEN - VARCHECK; - 'R' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - INTRFACE.PREV_CMD := 'R'; - PRETTY; - INTRFACE.NEXT_CMD := 'E'; - SB_CLR_SCRN - END - END; - 'X' : BEGIN - SB_FLUSH_BUF; - FSTRING := ''; - MTRUN - END; - 'Q' : BEGIN - INTRFACE.PREV_CMD := ' '; - SB_FLUSH_BUF; - IF BUFSTAT.OCCUPIED THEN - CMDCH := '@' - ELSE - BEGIN - SB_CLR_SCRN; - EXIT - END - END; - 'L' : BEGIN - SB_FLUSH_BUF; - FSTRING := 'L'; {new linker is just 'L' } - MTRUN - END; - 'F' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - SB_FLUSH_BUF; - FSTRING := 'FASTCOMP'; - MOVE(ENDFILE,MEMORY[ADDR(BUF)-2],2);{ SET UP INTEGER } - MOVE(NAME,MEMORY[ADDR(BUF)-83],81); - MTRUN - END - END - END; - CMDCH := INTRFACE.NEXT_CMD; - UNTIL (CMDCH = ' ') OR (CMDCH = INTRFACE.PREV_CMD); - UNTIL FALSE -END. - - END; - CMDCH := INTRFACE.NEXT_CMD; - UNTIL (CMDCH = ' ') \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/NSBCUR19.DOC b/software/CPM/CPM15_MTPUG_03/NSBCUR19.DOC deleted file mode 100644 index e6830ee..0000000 --- a/software/CPM/CPM15_MTPUG_03/NSBCUR19.DOC +++ /dev/null @@ -1,262 +0,0 @@ - - - - - Unlikå  thå versioî oæ NSBH19.SRà whicè ió iî vol- - umå  ± oæ thå MTPUÇ library¬  thió  versioî  implementó - botè  thå  "FUNCTION¢  anä "CURSOR¢ keyó oî  thå  Heatè - terminal® Thå keypaä anä "FUNCTION¢ keyó acô similarlù - tï Compuvie÷ Product'ó "VEDIT¢ program®  Thå  softwarå - listing¬ NSBCUR19.SRà giveó thå actuaì assignments. - - NSBCUR19.SRà runó properlù oî á ´ MHú Z-8° systeí - (ie® iô ió uð anä running© anä shoulä ruî properlù witè - á  µ MHú 808µ systeí sucè aó Godbout'ó  duaì  processoò - boarä (ie®  thió processoò waó noô yeô tried¬ buô sincå - alì  thå codå generateä bù NS ió 808° code¬  thå µ MHú - 808µ shoulä executå fasteò thaî thå ´ MHú Z-80). - - Iæ  thió softwarå ió ruî oî á ² MHú  808°  system¬ - somå interestinç thingó begiî tï happeî (ie® iô doesn'ô - worë  welì aô all)®  Thå FUNCTIOÎ keyó seeí tï generatå - alphanumeriã characteró whicè arå inserteä iî thå text® - Theù  dï noô perforí accordinç tï thå  CASÅ  statement» - however¬ thå standarä controì keyó defineä bù MÔ Micro- - systemó worë correctly. - - Tï understanä whù thió is¬ wå musô looë aô ho÷ thå - FUNCTIOΠ keyó (includinç outpuô oæ thå shifteä numeriã - keypad© arå implementeä oî thå H-19® Thå standarä keyó - transmiô  onå ascié characteò tï thå computeò foò  eacè - keù stroke® Thå FUNCTIOÎ anä CURSOÒ keys¬ oî thå otheò - hand¬  transmiô  twï ascié characteró iî rapiä  succes- - sion®  Thå  firsô oæ theså characteró ió  aî  - 63B LHLD 1 - 63E INX H - 63F INX H - 640 INX H - 641 LXI D,1C46 THIS IS THE RETURN ADDR OF THE BIOS CALL - 644 PUSH D PUSH IT ONTO THE STACK - 645 PCHL - 646 STA 8D31 DON'T KNOW WHY, BUT HIS ROUTINE DOES - 649 MOV L,A - 64A MVI H,0 - 64C . - - That'ó  thå  patch®  Thå twï  instructionó  whicè - follo÷ arå XTHÌ anä PCHL® Fortunately¬ iô takeó SPÐ aó - manù  byteó tï seô uð itó calì tï CP/Í anä transfeò thå - informatioî aó iô takeó uó tï tï thå BIOÓ calì  direct- - ly®  Iæ  SPР tooë lesó spacå tï makå itó  call¬  thió - techniquå woulä noô worë toï well. - - Now¬  typå ^à tï exiô DDÔ oò SID®  Theî typå SAVÅ - 10¸ SPP.002®  Iæ you'vå donå everythinç correctly¬ yoõ - caî invokå SPP¬ brinç uð thå editor¬ anä uså thå cursoò - keyó  tï youò heart'ó content®  Iæ everythinç  doesn'ô - worë out¬  it'ó nicå tï kno÷ thaô thió ió noô thå  onlù - disë  witè SPÐ oî iô thaô yoõ have®  Thå probleí  mosô - likelù  waó  aî erroò iî determininç thå  addresseó  aô - whicè yoõ shoulä enteò thå information¬ oò thå valuå tï - loaä  intï  registeò  DÅ anä pusè oî thå stacë  aó  thå - returî address. - - Mù thankó tï Mikå Lehmaî whï tolä må whicè  symboì - tï  looë  foò anä whï outlineä thå generaì approacè  tï - solvå  thå  problem®  Yoõ mighô wondeò whù  MÔ  Micro- - systemó didn'ô jusô implemenô á direcô calì tï thå BIOÓ - sucè aó É havå described®  Thå answeò ió simpleº theù - wanteä theiò softwarå tï worë witè anù versioî oæ  CP/Í - whicè mighô comå dowî thå pike® Theù haä nï choicå buô - tï  worë througè CP/Í operatinç systeí calló tï  assurå - compatability. - - Therå  arå otheò wayó tï implemenô thå CURSOÒ  anä - FUNCTIOΠ keys®  Onå waù ió tï makå thå consolå  inpuô - BIOÓ  routinå  interrupô driveî sï thaô alì  characteró - transmitteä  bù  thå terminaì woulä bå  loadeä  intï  á Š - - 3 - - - - - - - - - buffer®  Consolå statuó woulä returî truå iæ anù char- - acteró  werå iî thå buffeò anä falså iæ thå buffeò werå - empty® Thió modå oæ operatioî woulä requirå nï modifi- - catioî oæ thå SPÐ software®  However¬ manù oæ thå CP/Í - implementationó todaù havå nï interrupô capability. - - Onå otheò thing¬  bå surå tï modifù thå  initiali- - zatioî  switcheó oî youò H-1¹ tï automaticallù senä thå - shifteä characteò set®  Otherwise¬  you'lì havå tï de- - presó  thå  shifô  keù anù timå yoõ wisè  tï  movå  thå - cursor. - - - Jerry Jankura - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/NSBCUR19.SRC b/software/CPM/CPM15_MTPUG_03/NSBCUR19.SRC deleted file mode 100644 index bae6821..0000000 --- a/software/CPM/CPM15_MTPUG_03/NSBCUR19.SRC +++ /dev/null @@ -1,427 +0,0 @@ -(* VERSION 0060 *) - -(****************************************************************) -(* *) -(* This version of NSB.SRC contains a driver for the Heath H-19 *) -(* or Zenith Z-19 terminal. The driver makes use of the cursor *) -(* positioning and special function keys which are implemented *) -(* by sequences. The auxiliary keypad has been defined*) -(* to function the same as Compuview Products "VEDIT" video *) -(* editor. *) -(* *) -(* Functions provided: *) -(* *) -(* F1 Enter Insert Character Mode (^F) *) -(* F2 Accept Previous Command (^V) *) -(* F3 Search for string (^S) *) -(* F4 Insert Line (^N) *) -(* F5 Search & Replace (^X) *) -(* ERASE Enter Delete Line Mode (^Y) *) -(* BLUE Delete Word Right (^O) *) -(* RED (ESC) *) -(* GREY Super Command (^Q) *) -(* IC Cursor Backward Page (^R) *) -(* IL Cursor Forward Page (^C) *) -(* DC Delete Character Right (^G) *) -(* DL Erase To End Of Line (^P) *) -(* *) -(* These function keys are additional ways of calling some of *) -(* the services offered by SpeedProgramming. MT Microsystems *) -(* original control keystroke definitions are still spplicable *) -(* *) -(* Note that it was necessary to compress the code generated by *) -(* NSB.SRC to allow these definitions to work. This was done *) -(* by shortening the signon message and removing characters *) -(* in some of the messages written by the software. *) -(* *) -(* This code functions properly for a Z-80 processor running at *) -(* 4 Mhz. The method employed by MT Microsystems to check for *) -(* the availability of a character from the console precludes *) -(* proper operation with a 2 Mhz clock. Overlay SPP.002 must *) -(* be modified to perform a direct bios call to check for the *) -(* console input status. Please see the documentation file *) -(* which accompanies this software for a description of the *) -(* patch which must be made, and the method to find where in *) -(* SPP.002 this patch should be located. *) -(* *) -(* Last Modified: 25 November 1981 *) -(* Modified by: J. F. Jankura *) -(* *) -(****************************************************************) - -(*$K0*) -(*$K1*) -(*$K2*) -(*$K5*) -(*$K6*) -(*$K7*) -(*$K8*) -(*$K12*) -(*$K13*) -(*$K14*) -(*$K15*) - -PROGRAM PASCAL_SPP; - -(*$I EDTYPES*) -(*$I EDGLBLS*) - -TYPE - CPMOPERATION = (COLDBOOT,WARMBOOT,CONSTAT,CONIN,CONOUT,LIST, - PUNOUT,RDRIN,HOME,SELDSK,SETTRK,SETSEC,SETDMA, - DSKREAD,DSKWRITE); - - FNAME = ARRAY [1..8] OF CHAR; (* CP/M FILE NAME *) - - EXTENSION = ARRAY [1..3] OF CHAR; (* EXTENSION TO NAME *) - - FCB = RECORD - DSK : BYTE; - FN : FNAME; - EXT : EXTENSION; - OTHER: ARRAY [12..36] OF BYTE - END; - - DIRENT = RECORD - ET : BYTE; - FN : FNAME; - EXT : EXTENSION; - OTHR : ARRAY [12..31] OF BYTE - END; - - (*$I SBIFDEF.LIB*) - - - -VAR - - DIRFILE: FCB; (* FOR DISPLAYING DIRECTORIES *) - DIRBUF: ARRAY [0..3] OF DIRENT; - - FSTRING: STRING; - MEMORY: ABSOLUTE [$0000] ARRAY[0..0] OF BYTE; - CMDCH: CHAR; - @SFP: EXTERNAL INTEGER; - BUFSTAT: STATREC; - INTRFACE: SB_INTERFACE; - (* USED TO COMMUNICATE BETWEEN PROGRAMS *) - SB_LAST_X, - SB_LAST_Y: INTEGER; - (* FOR SOFTWARE CLR TO EOL/ CLR TO EOS ROUTINES *) - - - EXTERNAL FUNCTION @BDOS(PARM,FUNC:INTEGER): INTEGER; - - EXTERNAL [1] PROCEDURE LOGWRITER; (* LOG WRITER OVERLAY *) - - EXTERNAL [2] PROCEDURE SPEED; (* EDITOR OVERLAY *) - - EXTERNAL [3] PROCEDURE SYNCHECK; (* SYNTAX CHECKER OVERLAY *) - - EXTERNAL [4] PROCEDURE VARCHECK; (* UNDEF VAR CHECKER OVERLAY *) - - EXTERNAL [6] PROCEDURE MTRUN; (* RUN PROGRAM OVERLAY *) - - EXTERNAL [7] PROCEDURE DISP_DIR; (* DIRECTORY DISPLAY OVERLAY *) - - EXTERNAL [8] FUNCTION GETFILE: BOOLEAN; - (* GET EDITOR FILE NAME, ETC. *) - - EXTERNAL [8] PROCEDURE INIT; (* EDITOR INIT *) - - EXTERNAL [9] PROCEDURE EDITWRITE; (* EDITOR WRITE BUFFER OVERLAY *) - - EXTERNAL [10] PROCEDURE PRETTY; (* PROGRAM REFORMATER *) - - - (*--------------------------------------------------------------*) - (* User modification area BEGINS here: *) - (*--------------------------------------------------------------*) - - - FUNCTION LINESZ : INTEGER; (* SO USER CAN SET SIZE OF A LINE *) -BEGIN - LINESZ := 79 (* 80 - 1 *) -END; - -FUNCTION SCREENSZ : INTEGER; -BEGIN - SCREENSZ := 22 (* NUMBER OF LINES ON PHYSICAL SCREEN - 2 *) -END; - -FUNCTION STATUSROW : INTEGER; -BEGIN - STATUSROW := SCREENSZ + 1 -END; - -PROCEDURE SB_OUT_CH(CH:CHAR); -BEGIN - SB_BIOS_CALL(CONOUT,ORD(CH)) -END; - -FUNCTION SB_GETCH: CHAR; -VAR - CH : BYTE; -BEGIN - SB_BIOS_CALL(CONIN,0); - INLINE("STA / CH); - IF CH = $1B THEN (* TEST FOR ESCAPE SEQUENCE *) - BEGIN - SB_BIOS_CALL (CONIN,0); - INLINE ("STA / CH); - CASE CH OF - $1B : CH := $1B; (* ESCAPE - ESCAPE = ESCAPE *) - '@' : CH := $12; (* PAGE BACK *) - 'A' : CH := $B; (* CURSOR UP *) - 'B' : CH := $A; (* CURSOR DOWN *) - 'C' : CH := $C; (* SURSOR RIGHT *) - 'D' : CH := $8; (* CURSOR LEFT *) - 'H' : CH := $2; (* TOGGLE BEGINNING/END *) - 'J' : CH := $19; (* ERASE= ENTER DELETE LINE MODE *) - 'L' : CH := $3; (* PAGE UP *) - 'M' : CH := $10; (* DELETE TO END OF LINE *) - 'N' : CH := $7; (* DELETE CHAR *) - 'P' : CH := $F; (* BLUE = DELETE WORD RIGHT *) - 'Q' : CH := $1B; (* RED = ESCAPE KEY *) - 'R' : CH := $11; (* GREY = SUPER COMMAND *) - 'S' : CH := $6; (* F1 = ENTER INSERT CHAR MODE *) - 'T' : CH := $16; (* F2 = ACCEPT LAST CHANGE *) - 'U' : CH := $13; (* F3 = SEARCH MODE *) - 'V' : CH := $E; (* F4 = INSERT LINE *) - 'W' : CH := $18; (* F5 = FIND AND REPLACE *) - END (* CASE STATEMENT *) - END; (* IF STATEMENT *) - SB_GETCH := CH -END; - -PROCEDURE XYGOTO(X,Y:INTEGER); -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('Y'); - SB_OUT_CH(CHR(Y+32)); - SB_OUT_CH(CHR(X+32)); - SB_LAST_X := X; - SB_LAST_Y := Y; (* THESE ARE USED ONLY BY USER SOFTWARE *) - (* ROUTINES WHICH PERFORM CLR TO EOS AND *) - (* CLR TO EOL *) -END; - -PROCEDURE SB_CLR_SCRN; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('E') -END; - -PROCEDURE SB_CLR_EOS; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('J'); -END; - - -PROCEDURE SB_CLR_LINE; -BEGIN - SB_OUT_CH(CHR(ESC)); - SB_OUT_CH('K'); -END; - - -(*--------------------------------------------------------------*) -(* User modification area ENDS WITH SB_CLR_LINE *) -(*--------------------------------------------------------------*) - - -PROCEDURE SB_FLUSH_BUF; -VAR - CH : CHAR; -BEGIN - IF NOT BUFSTAT.OCCUPIED THEN - EXIT; - - REPEAT - PRNT_AT(20,1,'Buffer occupied'); - PRNT_AT(21,1,'Flush, Update, Write & Flush, Leave:'); - CH := SB_UP_CASE(SB_GETCH); - SB_OUT_CH(CH); - IF CH = 'L' THEN - EXIT; - - IF CH = 'F' THEN - BEGIN - IF NEWFILE THEN - PURGE(F); - BUFSTAT.OCCUPIED := FALSE; - EXIT - END; - - IF CH = 'W' THEN - BEGIN - EDITWRITE; - LOGWRITER; - BUFSTAT.OCCUPIED := FALSE - END; - - IF CH = 'U' THEN - BEGIN - EDITWRITE; (* BUT LEAVE IT OCCUPIED *) - LOGWRITER - END - UNTIL (CH='U') or (CH='F') OR (CH='W'); - NEWFILE := FALSE; -END; - - -PROCEDURE SB_BIOS_CALL(FUNC:CPMOPERATION; PARM:INTEGER); -VAR - DISPATCH_LOC : INTEGER; -BEGIN - DISPATCH_LOC := (MEMORY[1] + SWAP(MEMORY[2])) + (ORD(FUNC)*3) - 3; - INLINE("LHLD / PARM / - "MOV C,L / - "MOV B,H / - "LHLD / DISPATCH_LOC / - "PCHL); -END; - -PROCEDURE PRNT_AT(ROW,COL:INTEGER; S:STRING); -BEGIN - XYGOTO(COL,ROW); - WRITE([ADDR(SB_OUT_CH)],S) -END; - -PROCEDURE MENU; -BEGIN - SB_CLR_SCRN; - PRNT_AT(1,1,'H-19 SpeedEdit V5.5'); - PRNT_AT(3,1,'Options: Edit'); - prnt_at(4,20, 'Reformat'); - prnt_at(5,20, 'Syntax check'); - prnt_at(6,20, 'Variable check'); - prnt_at(7,20, 'Xeq'); - prnt_at(8,20, 'Dir'); - prnt_at(9,20, 'Fast compile'); - prnt_at(10,20, 'Quit'); - prnt_at(22,1,'Select ') -END; - -FUNCTION SB_UP_CASE(CH:CHAR): CHAR; -BEGIN - IF (CH >= 'a') AND (CH <= 'z') THEN - SB_UP_CASE := CHR(CH & $DF) - ELSE - SB_UP_CASE := CH -END; - - -(*$E-*) - -FUNCTION GET_FILE_INTO_BUF: BOOLEAN; -BEGIN - IF NOT BUFSTAT.OCCUPIED THEN - IF GETFILE THEN (* GET FILE INTO BUFFER *) - INIT; - GET_FILE_INTO_BUF := BUFSTAT.OCCUPIED -END; -(*$E+*) - - - -BEGIN - BUFSZ := (@SFP - ADDR(BUF))-$100; (* SET UP EDITOR BUFFER SIZE *) - BUFSTAT.OCCUPIED := FALSE; - NEWFILE := FALSE; - REPEAT - MENU; - INTRFACE.NEXT_CMD := ' '; (* DEFAULT NO NEXT PROGRAM *) - INTRFACE.END_STAT := OK; - CMDCH := SB_UP_CASE(SB_GETCH); - SB_OUT_CH(CMDCH); (* ECHO IT *) - REPEAT - FSTRING := ''; (* DEFAULT IS NO PROGRAM *) - CASE CMDCH OF - 'D' : DISP_DIR; - 'E' : BEGIN - IF (BUFSTAT.OCCUPIED) AND ((INTRFACE.PREV_CMD = 'S') - OR (INTERFACE.PREV_CMD = 'R')) THEN - (* DO NOTHING *) - ELSE SB_FLUSH_BUF; - - (* MAKE SURE USER WANTS TO DO THIS *) - - IF NOT BUFSTAT.OCCUPIED THEN (* BUFFER IS EMPTY *) - BEGIN - IF GETFILE THEN - (* SEE IF HE WANTS A FILE *) - BEGIN - INIT; (* CALL EDITOR *) - IF BUFSTAT.OCCUPIED THEN - SPEED - END - END - ELSE - SPEED; - (* BUFFER OCCUPIED, EDIT OLD *) - INTRFACE.PREV_CMD := ' '; - IF INTRFACE.NEXT_CMD = 'E' THEN - INTRFACE.NEXT_CMD := ' '; - END; - 'S' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - INTRFACE.PREV_CMD := ' '; - SYNCHECK; - IF INTRFACE.END_STAT = SYNERR THEN - INTRFACE.NEXT_CMD := 'E' - END - END; - 'V' : IF GET_FILE_INTO_BUF THEN - VARCHECK; - 'R' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - INTRFACE.PREV_CMD := 'R'; - PRETTY; - INTRFACE.NEXT_CMD := 'E'; - SB_CLR_SCRN - END - END; - 'X' : BEGIN - SB_FLUSH_BUF; - FSTRING := ''; - MTRUN - END; - 'Q' : BEGIN - INTRFACE.PREV_CMD := ' '; - SB_FLUSH_BUF; - IF BUFSTAT.OCCUPIED THEN - CMDCH := '@' - ELSE - BEGIN - SB_CLR_SCRN; - EXIT - END - END; - 'L' : BEGIN - SB_FLUSH_BUF; - FSTRING := 'LINKMT'; - MTRUN - END; - 'F' : BEGIN - IF GET_FILE_INTO_BUF THEN - BEGIN - SB_FLUSH_BUF; - FSTRING := 'FASTCOMP'; - MOVE(ENDFILE,MEMORY[ADDR(BUF)-2],2); - (* SET UP INTEGER *) - MOVE(NAME,MEMORY[ADDR(BUF)-83],81); - MTRUN - END - END - END; - CMDCH := INTRFACE.NEXT_CMD; - UNTIL (CMDCH = ' ') OR (CMDCH = INTRFACE. - PREV_CMD); - UNTIL FALSE -END. - - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/POWRLIB.SRC b/software/CPM/CPM15_MTPUG_03/POWRLIB.SRC deleted file mode 100644 index 1174cb8f2ca18f85043c87d39e34a773d897d2d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmcgtTWb?R6rLhV2*ej3M4!%ske#?qv#o_DX^NZdq%Le`!t8FlK1muV1lm-hf+hGU z_yhehK3UJq>?PSWUS1psnajC;-#KTOV{y(T3_s1MA7?jnxSCxoCW~9Ryjj3_@?ko; z>Vh?;;Ixk%xVVMkY>H6 z2*jz=!e_O2R}b2C`XGgfvhC`9L)#q)9!AO#ZlDMI&4bqd;n88MeSkh{RhC3dayNjn z6a(hPlEG^xrRDN>_$OqiFGRpx-UU4Jc+~NE#7>!{T6;MVqY>Ig^DvD0Ao9_hcAK3{ z3RcpQ%nfJ<)SpUDX;^(XWZ<-Du8XRDcIxw56~G@ta@=b*TM)fr`UW6>1YA1KNXE>5 zrJ_++0O!(=Sir5iM$4+(iCw2qF9h^Gbb5f6jS}OY+OQyG<{}qCI|<#xBVvb8aZe|m zr)C)0%+2MIk4k^Y&uFViSTeSfhH;|;%^WS$0=pkr{g^uM@|>3fV&rBVM=aEsLjuzE zL*_vwAmvaM8x}A}fk7-o|BMB1%M6qVFd7AV1!zbY@2zqLsd*H34Akqw$6JKcylno` zp?k?XGr9X*XxE_)6v`mWxlv8=SKwq=CVV-oQD7EGmNGy(4 zh38qEQgFEkR&u^Z&aT`R%HZ%8v(H zf|2_~)t8gZcka|;_%pjX?w%1&zE!?+1#+|aewG>2p z5fM*bJP0Cq^^lYFoDDtf!eB#)2Xjdd%_S!(g?fp8ljP8wA3WyqzW2TPhKVDT)*Dh% zm$eazep~xwoBfmnd1tPO2Ob~vhdt;gGgkNz7hu^XGS@exj z5xs{EBBr-dWV<(AeuIs3Ac_1P64&J$uqODlpWP{0w0uFQ8q%L2J|V-p#gs1B_!8;- z4KI+E^i~wRh_r2Vz6}p+cc0Y;Bg9>=)c6x{`Ukkun+{%&@ibBV2@)7FU`Di@Ci}JB z=YxbRs8nf!VR%IG=ScwSpw<@!AMW!(w7&}}s-*a9r1${{KO&t-_=$AR`tM1pST2<>xa9CGca(F`eT~&fdcNXX9%TyvsFVlIeU{cRnw%r$&>srjF8=h6LyscRD zHe26vtX$rs$@I+>UD#T6Sk|KtmsebR&t6T$qERYpfn}_$WoGELBwbqVyD7b&m`%_J z%*+=|2dv}brc3T5wV6k=Y{SmPdKz`i MAX THEN - MAX:=X[I]; - I:=I+1 - UNTIL I > N -END; - -PROCEDURE MEAN_I - (VAR X:ARRAY[LOW..HIGH:NATURAL]OF INTEGER;N:INTEGER;VAR MEAN:REAL); -VAR - J:NATURAL; - SUM:REAL; -BEGIN - J:=LOW; - SUM:=0.0; - REPEAT - SUM:=SUM+X[J]; - J:=J+1 - UNTIL J > N; - MEAN:=SUM/N -END; - -PROCEDURE SIGMA_I - (VAR X:ARRAY[LOW..HIGH:NATURAL]OF INTEGER;N:INTEGER;VAR SIGMA:REAL); -VAR - K:NATURAL; - SUM,AVE:REAL; -BEGIN - MEAN_I(X,N,AVE); - K:=LOW; - SUM:=0.0; - REPEAT - SUM:=SUM+SQR(X[K]-AVE); - K:=K+1 - UNTIL K > N; - SIGMA:=SQRT(SUM/N) -END; - -PROCEDURE MINMAX_R - (VAR X:ARRAY[LOW..HIGH:NATURAL]OF REAL;N:INTEGER;VAR MIN,MAX:REAL); -VAR - L:NATURAL; -BEGIN - L:=LOW; {starting point of array} - MIN:=10.0E+17; - MAX:=10.0E-17; {limit values} - REPEAT - IF X[L] < MIN THEN - MIN:=X[L] - ELSE - IF X[L] > MAX THEN - MAX:=X[L]; - L:=L+1 - UNTIL L > N -END; - -PROCEDURE MEAN_R - (VAR X:ARRAY[LOW..HIGH:NATURAL]OF REAL;N:INTEGER;VAR MEAN:REAL); -VAR - M:NATURAL; - SUM:REAL; -BEGIN - M:=LOW; - SUM:=0.0; - REPEAT - SUM:=SUM+X[M]; - M:=M+1 - UNTIL M > N; - MEAN:=SUM/N -END; - -PROCEDURE SIGMA_R - (VAR X:ARRAY[LOW..HIGH:NATURAL]OF REAL;N:INTEGER;VAR SIGMA:REAL); -VAR - Q:NATURAL; - SUM,AVE:REAL; -BEGIN - MEAN_R(X,N,AVE); - Q:=LOW; - SUM:=0.0; - REPEAT - SUM:=SUM+SQR(X[Q]-AVE); - Q:=Q+1 - UNTIL Q > N; - SIGMA:=SQRT(SUM/N) -END; - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/TERMINAL.CMD b/software/CPM/CPM15_MTPUG_03/TERMINAL.CMD deleted file mode 100644 index a539a8c..0000000 --- a/software/CPM/CPM15_MTPUG_03/TERMINAL.CMD +++ /dev/null @@ -1,2 +0,0 @@ -terminal,utility,dcmodem,crt,paslib/s - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/TERMINAL.PAS b/software/CPM/CPM15_MTPUG_03/TERMINAL.PAS deleted file mode 100644 index adccd82..0000000 --- a/software/CPM/CPM15_MTPUG_03/TERMINAL.PAS +++ /dev/null @@ -1,261 +0,0 @@ -Program Terminal; - -{ Written by Warren A. Smith } -{ Intended for use in the Public Domain } -{ 01/30/82 } - -{ This program is intended to give you the capability to use your } -{ computer as a dumb terminal connected to another computer. It can } -{ operate in full or half duplex and can be in a test mode where it } -{ will display all the characters coming in in hex form (unless they } -{ are printable. This latter is handy if you are trying to talk to an } -{ unknown device and you want to find out what it is sending to cause } -{ your screen to behave so funny. } -{ The program can also convert carriage returns to CNTL-S (or DC3) } -{ which is useful in a TWX network or when talking to some IBM systems } -{ which only accept teletypes that are configured for TWX (my case, and } -{ the reason the feature is in here. } - -Var - Modem_Mode : byte; { must be used to hold modem's mode } - I : integer; - Number : string; - Quit, - Half_Duplex, - Test_Line, - Xoff : boolean; - ESC_Chr, - Control_Code, - In_Char, - Answer : char; - -{ *********** Found in CRT.ERL ************ } -External Procedure ScreenClr; - -External Procedure GotoXY (X, Y : integer); - -External Procedure ConOut (OutChar : char); - -External Function KeyPressed (Var In_Char : char) : boolean; - -External Function Get_Console : char; - -{ ************ Found in UTILITY.ERL ************ } -External Function Upper (In_Char : char) : char; - -{ ************ Found in DCMODEM.ERL ************ } -External Procedure Init_Modem; - -External Procedure Set_Modem (Modebyte : byte); - -External Procedure Go_Onhook (Var Modem_Mode : byte); - -External Procedure Go_Offhook (Var Modem_Mode : byte); - -External Procedure Set_Ans_Mode (Var Modem_Mode : byte); - -External Procedure Set_Org_Mode (Var Modem_Mode : byte); - -External Procedure Set_Baud (Baud : integer; Var Modem_Mode : byte); - -External Procedure Enable_Xmit (Var Modem_Mode : byte); - -External Procedure Disable_Xmit (Var Modem_Mode : byte); - -External Function Carrier_Present : boolean; - -External Function Ringing : boolean; - -External Function Modem_Char_Rdy : boolean; - -External Function Modem_In : char; - -External Function Modem_Out (OutChar : char) : boolean; - -External Procedure Delay; { delay's for 10 millisecond } - -External Procedure Dial_a_Number (Var Modem_Mode : byte; Number : string); - - - -Function Perform_Function (Control_Char : char) : boolean; - - Var - Dummy_Boolean : boolean; - - begin { Perform_Function } - Case Control_Char of - '@' : begin - Half_Duplex := not Half_Duplex; - If Half_Duplex then - Writeln ('Half_Duplex') - else - Writeln ('Full Duplex'); - Perform_Function := TRUE - end; - 'A' : Perform_Function := FALSE; - 'B' : begin - Test_Line := not Test_Line; - Perform_Function := TRUE - end; - else - end - end; { Perform_Function } - -Procedure Dumb; - - Var - Terminator, In_Char, In_Mod, - Control_Char, Dummy_Char : char; - Quit : boolean; - - begin { Dumb } - In_Char := chr(0); - Terminator := chr(26); { CNTL-Z } - Quit := FALSE; - - While (In_Char <> Terminator) AND not Quit do - begin - If KeyPressed (In_Char) then - begin - If In_Char = chr(13) then { carriage return } - In_Char := chr(19); { control-S } - If In_Char = ESC_Chr then - begin - Control_Char := Get_Console; - Dummy_Char := Get_Console; { should be a carriage return } - Quit := not Perform_Function (Control_Char) - end - else - If Modem_Out (In_Char) then - begin - If Half_Duplex then - ConOut (In_Char) - end - else - begin - Writeln ('Carrier Lost'); - Quit := TRUE - end - end; - - If Modem_Char_Rdy then - begin - In_Mod := Modem_In; - If Test_Line then - If (In_Mod >= ' ') AND (In_Mod <= '~') then - ConOut (In_Mod) - else - begin - WriteHex (Output, In_Mod, 1); - Writeln - end - else - ConOut (In_Mod) - end; - - If not Carrier_Present then - begin - Writeln ('Carrier Lost'); - Quit := TRUE - end - end - end; { Dumb } - -Procedure Title_Page; - - begin { Title_Page } - Writeln; - Writeln(' *****************************************'); - Writeln(' * *'); - Writeln(' * Written by Warren A. Smith *'); - Writeln(' * *'); - Writeln(' * For the Public Domain *'); - Writeln(' * *'); - Writeln(' *****************************************'); - Writeln; - Writeln('The function keys of the Televideo 920 are used as follows:'); - Writeln(' F1 - Toggle between Half and Full Duplex'); - Writeln(' F2 - Terminate connection and hang up'); - Writeln(' F3 - Toggle test mode'); - Writeln; - Writeln(' If you do not have a Televideo 912/920 you may duplicate the'); - Writeln(' function keys by hitting a CNTL-A followed by'); - Writeln(' @ (for F1)'); - Writeln(' A (for F2)'); - Writeln(' B (for F3)'); - Writeln(' followed by a carriage return.'); - Writeln; - Write ('Hit any key to continue. '); - While not KeyPressed (In_Char) do; - ScreenClr; - end; { Title_Page } - -begin { Main } - -ESC_Chr := chr(01); - -Half_Duplex := TRUE; -Test_Line := FALSE; - -ScreenClr; - -Title_Page; - -Writeln('Answer N to the following question if you don''t understand it.'); -Writeln('It is giving you the option to convert carriage returns to CNTL-S.'); -Writeln('This is useful for TWX networks and some IBM systems. Use N if'); -Writeln('you are unsure.'); -Write('Will you be using X-Off (carriage return = cntl-S) (Y or N)? '); -Read (Answer); -Writeln; -Xoff := Upper(Answer)='Y'; - -Modem_Mode := 0; - -Init_Modem; - -Write ('Number Please - '); -Readln (Number); - -Writeln ('Dialing'); - -Dial_a_Number (Modem_Mode, Number); - -Set_Baud (300, Modem_Mode); - -Set_Org_Mode (Modem_Mode); - -Enable_Xmit (Modem_Mode); - -I := 0; { Set up for 20 second timeout } -While (I < 2000) AND (not Carrier_Present) do - begin - If KeyPressed (In_Char) then - If In_Char = ESC_Chr then - begin - Control_Code := Get_Console; - In_Char := Get_Console; { supposed to be CR } - Quit := not Perform_Function (Control_Code) - end; - Delay; - I := I + 1 - end; - -If Carrier_Present then - begin - Writeln ('Connection made'); - If not Quit then - Dumb - end -else - Writeln ('No carrier found, check number - ', Number); - -Go_Onhook (Modem_Mode); - -Writeln ('Hanging Up'); - -Writeln ('Program terminated') - -end. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/TRIGLIB.SRC b/software/CPM/CPM15_MTPUG_03/TRIGLIB.SRC deleted file mode 100644 index d1c1d7d..0000000 --- a/software/CPM/CPM15_MTPUG_03/TRIGLIB.SRC +++ /dev/null @@ -1,136 +0,0 @@ -{TRIG Function library for Pascal; (c) 1981 by Ficomp, Inc. Fairfax, Va.} - -MODULE TRIGLIB; -{$M RAD} -{$M DEG} -{$M PI} -{$M TAN} -{$M COTAN} -{$M ASIN} -{$M ACOS} -{$M ATAN2} -{$M *} - -CONST - DRCON = 0.0174532925; - HALF_PI = 1.570796327; - FULL_PI = 3.141592654; - MAXREAL = 10.0E+17; -VAR - A:REAL; -EXTERNAL PROCEDURE @ERR(AN_ERROR:BOOLEAN; ERRNUM:INTEGER); - -FUNCTION RAD(X:REAL): REAL; -{CONVERTS DEGREES TO RADIANS} -BEGIN - RAD := X*DRCON -END; - -FUNCTION DEG(X:REAL): REAL; -{CONVERTS RADIANS TO DEGREES} -BEGIN - DEG := X/DRCON -END; - -FUNCTION PI(X:REAL): REAL; -{Returns PI*X} -BEGIN - PI := FULL_PI*X -END; - -FUNCTION TAN(X:REAL): REAL; -{TANGENT FUNCTION} -BEGIN - A := COS(X); - IF A=0.0 THEN - TAN := MAXREAL - ELSE - TAN := SIN(X)/A -END; - -FUNCTION COTAN(X:REAL): REAL; -{COTANGENT FUNCTION} -BEGIN - A := SIN(X); - IF A = 0.0 THEN - COTAN := MAXREAL - ELSE - COTAN := COS(X)/A -END; - -FUNCTION ASIN(X:REAL): REAL; -{ARCSIN FUNCTION} -BEGIN - IF X=0.0 THEN - ASIN:=0.0 - ELSE - IF X=1.0 THEN - ASIN:=HALF_PI - ELSE - IF X=-1.0 THEN - ASIN:=-HALF_PI - ELSE - IF (X<-1.0) OR (X>1.0) THEN - BEGIN - @ERR(TRUE,4); - WRITELN('ASIN(',X,') '); - ASIN :=0.0 - END - ELSE - ASIN := ARCTAN(X/SQRT(-X*X+1.0)) -END; - -FUNCTION ACOS(X:REAL): REAL; -{ARCOSINE FUNCTION} -BEGIN - IF X=0.0 THEN - ACOS:=HALF_PI - ELSE - IF X=1.0 THEN - ACOS:=0.0 - ELSE - IF X=-1.0 THEN - ACOS:=FULL_PI - ELSE - IF (X<-1.0) OR (X>1.0) THEN - BEGIN - @ERR(TRUE,4); - WRITELN('ACOS(',X,') '); - ACOS :=0.0 - END - ELSE - ACOS := -ARCTAN(X/SQRT(-X*X+1.0))+HALF_PI -END; - -FUNCTION ATAN2(X,Y:REAL):REAL; -{arctangent function with quadrant recognition} -BEGIN - IF X=0.0 THEN - IF Y=0.0 THEN - ATAN2:=0.0 - ELSE - IF Y>0.0 THEN - ATAN2:=HALF_PI - ELSE - ATAN2:=3*HALF_PI - ELSE - IF Y=0.0 THEN - IF X>0.0 THEN - ATAN2:=0.0 - ELSE - ATAN2:=FULL_PI - ELSE - BEGIN - A:=ARCTAN(Y/X); - IF X>0.0 THEN - ATAN2:=A - ELSE - ATAN2:=A+FULL_PI - END -END; - -MODEND. -SE - BEGIN - A:=ARCTAN(Y/X); - IF X>0.0 THEN \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/UTILITY.PAS b/software/CPM/CPM15_MTPUG_03/UTILITY.PAS deleted file mode 100644 index ea121fe..0000000 --- a/software/CPM/CPM15_MTPUG_03/UTILITY.PAS +++ /dev/null @@ -1,22 +0,0 @@ -Module Utility ; - -{ Written by Warren A. Smith } -{ Intended for use in the Public Domain } -{ 01/30/82 } - -{ This only has one routine so far but what the heck. } - -Function Upper (In_Char : char) : char ; - -{ I don't like having to redo this in all my interactive programs, } -{ I thought you may not like to either. } - - Begin { Upper } - If (In_Char >= 'a') and (In_Char <= 'z') then - Upper := chr( ord(In_Char) - 32) - else - Upper := In_Char - end ; { Upper } - -ModEnd. - \ No newline at end of file diff --git a/software/CPM/CPM15_MTPUG_03/VARIO.SRC b/software/CPM/CPM15_MTPUG_03/VARIO.SRC deleted file mode 100644 index e5f2eb166f191c57bb2875062b58fa8d58866c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4352 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 diff --git a/software/CPM/CPM16_MTPUG_04/COMPARE.ERL b/software/CPM/CPM16_MTPUG_04/COMPARE.ERL deleted file mode 100644 index 3475c29250643a48fe517997deb3c4f62c0802dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 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 H|M&SHjDLZ~ diff --git a/software/CPM/CPM16_MTPUG_04/COMPARE.SRC b/software/CPM/CPM16_MTPUG_04/COMPARE.SRC deleted file mode 100644 index 377e15f..0000000 --- a/software/CPM/CPM16_MTPUG_04/COMPARE.SRC +++ /dev/null @@ -1,346 +0,0 @@ - PROGRAM SRCCOM; (* SOURCE COMPARE *) -{ I GOT THIS PROGRAM FROM THE PASCAL/Z USERS PROGRAM DISKS } -{ THEY GOT IT FROM THE UCSD PASCAL USERS GROUP } -{ Revised 5/3/82 by Henry Lucas } - -{Program to compare two sourcecode files and output the differences, - if any. Useful to compare two similar textfiles to find out whether and - where they have been changed. Part of original UCSD I.4 release--author - is unknown.} - -CONST - VERSION = 'v203 5-3-82'; - MINLINESFORMATCH = 6; - MAXTRY = 150; (*<<<10/27/77 GLH. LIMIT ON SEARCH AHEAD FOR MATCH*) - LINELENGTH = 132; - - TYPE - - LINEPOINTER = ^LINE; - LINE = - RECORD (*<<<10/26/77 GLH*) - NEXTLINE : LINEPOINTER; - IMAGE : STRING[LINELENGTH] - END; - - STREAM = - RECORD - CURSOR, HEAD, TAIL : LINEPOINTER; - CURSORLINENO, HEADLINENO, TAILLINENO : INTEGER; - ENDFILE : BOOLEAN - END; - - VAR - - TITLEA, TITLEB: STRING; (*<<<10/27/77 GLH*) - FILEA, FILEB : TEXT; - A, B : STREAM; - MATCH : BOOLEAN; - ENDFILE : BOOLEAN; - TEMPLINE : STRING[LINELENGTH]; (*<<<10/26/77 GLH*) - FREELINES : LINEPOINTER; - SAME : BOOLEAN; - STR : STRING; - MAXPTR : WORD; - - @sfp : external word; - EXTERNAL PROCEDURE @HLT; - - PROCEDURE COMPARE; - - FUNCTION ENDSTREAM(VAR X : STREAM) : BOOLEAN; - BEGIN (* ENDSTREAM *) - ENDSTREAM := (X.CURSOR = NIL) AND X.ENDFILE - END; (* ENDSTREAM *) - - PROCEDURE MARK(VAR X : STREAM); - - (* CAUSES BEGINNING OF STREAM TO BE POSITIONED BEFORE *) - (* CURRENT STREAM CURSOR. BUFFERS GET RECLAIMED, LINE *) - (* COUNTERS RESET, ETC. *) - - PROCEDURE COLLECT(FWA, LWAPLUS1 : LINEPOINTER); - VAR P : LINEPOINTER; - BEGIN (* COLLECT *) - WHILE FWA <> LWAPLUS1 DO - BEGIN P := FWA^.NEXTLINE; - FWA^.NEXTLINE := FREELINES; FREELINES := FWA; - FWA := P - END - END; (* COLLECT *) - - BEGIN (* MARK *) - IF X.HEAD <> NIL THEN - BEGIN - COLLECT(X.HEAD, X.CURSOR); - X.HEAD := X.CURSOR; X.HEADLINENO := X.CURSORLINENO; - IF X.CURSOR = NIL THEN - BEGIN X.TAIL := NIL; X.TAILLINENO := X.CURSORLINENO END - END - END; (* MARK *) - - PROCEDURE MOVECURSOR(VAR X : STREAM; VAR FILEX : TEXT); - - (* FILEX IS THE INPUT FILE ASSOCIATED WITH STREAM X. THE *) - (* CURSOR FOR X IS MOVED FORWARD ONE LINE, READING FROM X *) - (* IF NECESSARY, AND INCREMENTING THE LINE COUNT. ENDFILE *) - (* IS SET IF EOF ENCOUNTERED ON EITHER STREAM. *) - - PROCEDURE READLINE; - VAR - NEWLINE : LINEPOINTER; - BEGIN (* READLINE *) - IF NOT X.ENDFILE THEN - BEGIN - (*<<<10/26/77 GLH. CHANGED WAY CHARS GET INTO TEMPLINE*) - READLN(FILEX, TEMPLINE); - NEWLINE := FREELINES; - IF NEWLINE <> NIL THEN FREELINES := FREELINES^.NEXTLINE - ELSE BEGIN - NEW(NEWLINE); - MAXPTR:=WRD(NEWLINE) + WRD(SIZEOF(LINE)); - IF MAXPTR > @SFP THEN - BEGIN - WRITELN(' NOT ENOUGH SPACE: STOPPING'); - @HLT - END - END; - - NEWLINE^.IMAGE := TEMPLINE; (*<<<10/26/77 GLH*) - NEWLINE^.NEXTLINE := NIL; - IF X.TAIL = NIL THEN - BEGIN X.HEAD := NEWLINE; - X.TAILLINENO := 1; X.HEADLINENO := 1 - END - ELSE - BEGIN X.TAIL^.NEXTLINE := NEWLINE; - X.TAILLINENO := X.TAILLINENO + 1 - END; - X.TAIL := NEWLINE; - X.ENDFILE := EOF(FILEX); - END - END; (* READLINE *) - - BEGIN (* MOVECURSOR *) - IF X.CURSOR <> NIL THEN - BEGIN - IF X.CURSOR = X.TAIL THEN READLINE; - X.CURSOR := X.CURSOR^.NEXTLINE; - IF X.CURSOR = NIL THEN ENDFILE := TRUE; - X.CURSORLINENO := X.CURSORLINENO + 1 - END - ELSE - IF NOT X.ENDFILE THEN (* BEGINNING OF STREAM *) - BEGIN - READLINE; X.CURSOR := X.HEAD; - X.CURSORLINENO := X.HEADLINENO - END - ELSE (* END OF STREAM *) - ENDFILE := TRUE; - END; (* MOVECURSOR *) - - PROCEDURE BACKTRACK(VAR X : STREAM; VAR XLINES : INTEGER); - - (* CAUSES THE CURRENT POSITION OF STREAM THE NEW CURRENT *) - (* THE LINE COUNTER IS RETURNED IN XLINES. IT IS THE NUMBER *) - (* OF THE CURRENT LINE (BEFORE BACKTRACK) RELATIVE TO BEGINNING *) - (* OF STREAM. *) - - BEGIN (* BACKTRACK *) - XLINES := X.CURSORLINENO + 1 - X.HEADLINENO; - X.CURSOR := X.HEAD; X.CURSORLINENO := X.HEADLINENO; - ENDFILE := ENDSTREAM(A) OR ENDSTREAM(B) - END; (* BACKTRACK *) - - PROCEDURE COMPARELINES(VAR MATCH : BOOLEAN); - (* COMPARE THE CURRENT LINES OF STREAMS A AND B, RETURNING *) - (* MATCH TO SIGNAL THEIR (NON-) EQUIVALENCE. EOF ON BOTH STREAMS *) - (* IS CONSIDERED A MATCH, BUT EOF ON ONLY ONE STREAM IS A MISMATCH *) - - BEGIN (* COMPARELINES *) - IF (A.CURSOR = NIL) OR (B.CURSOR = NIL) THEN - MATCH := ENDSTREAM(A) AND ENDSTREAM(B) - ELSE - MATCH := (A.CURSOR^.IMAGE = B.CURSOR^.IMAGE) - END; (* COMPARELINES *) - - PROCEDURE FINDMISMATCH; - - BEGIN (* FINDMISMATCH *) - (* NOT ENDFILE AND MATCH *) - REPEAT (* COMPARENEXTLINES *) - MOVECURSOR(A, FILEA); MOVECURSOR(B,FILEB); - MARK(A); MARK(B); - COMPARELINES(MATCH) - UNTIL ENDFILE OR NOT MATCH; - END; (* FINDMISMATCH *) - - PROCEDURE FINDMATCH; - - VAR - TRYCOUNT : INTEGER; - - PROCEDURE SEARCH(VAR X : STREAM; (* STREAM TO SEARCH *) - VAR FILEX : TEXT; - VAR Y : STREAM; (* STREAM TO LOOKAHEAD *) - VAR FILEY : TEXT); - - (* LOOK AHEAD ONE LINE ON STREAM Y, AND SEARCH FOR THAT LINE *) - (* BACKTRACKING ON STREAM X. *) - - VAR - COUNT : INTEGER; (* NUMBER OF LINES BACKTRACKED ON X *) - - PROCEDURE CHECKFULLMATCH; - (* FROM THE CURRENT POSITIONS IN X AND Y, WHICH MATCH, *) - (* MAKE SURE THAT THE NEXT MINLINESFORMATCH-1 LINES ALSO *) - (* MATCH, OR ELSE SET MATCH := FALSE. *) - VAR - N : INTEGER; - SAVEXCUR, SAVEYCUR : LINEPOINTER; - SAVEXLINE, SAVEYLINE : INTEGER; - BEGIN (* CHECKFULLMATCH *) - SAVEXCUR := X.CURSOR; SAVEYCUR := Y.CURSOR; - SAVEXLINE := X.CURSORLINENO; SAVEYLINE := Y.CURSORLINENO; - COMPARELINES(MATCH); - N := MINLINESFORMATCH - 1; - WHILE MATCH AND (N <> 0) DO - BEGIN MOVECURSOR(X, FILEX); MOVECURSOR(Y, FILEY); - COMPARELINES(MATCH); N := N - 1 - END; - X.CURSOR := SAVEXCUR; X.CURSORLINENO := SAVEXLINE; - Y.CURSOR := SAVEYCUR; Y.CURSORLINENO := SAVEYLINE; - END; (* CHECKFULLMATCH *) - - BEGIN (* SEARCH *) - MOVECURSOR(Y, FILEY); BACKTRACK(X, COUNT); - CHECKFULLMATCH; COUNT := COUNT - 1; - WHILE (COUNT <> 0) AND NOT MATCH DO - BEGIN - MOVECURSOR(X, FILEX); COUNT := COUNT - 1; - CHECKFULLMATCH - END - END; (* SEARCH *) - - PROCEDURE PRINTMISMATCH; - VAR - EMPTYA, EMPTYB : BOOLEAN; - - PROCEDURE WRITETEXT(P, Q : LINEPOINTER); - BEGIN (* WRITETEXT *) - WRITELN; - WHILE (P <> NIL) AND (P <> Q) DO - BEGIN WRITE(' * '); - WRITELN (P^.IMAGE); - P := P^.NEXTLINE - END; - IF P = NIL THEN WRITELN(' *** EOF ***'); - WRITELN - END; (* WRITETEXT *) - - PROCEDURE WRITELINENO(VAR X : STREAM); - VAR - F, L : INTEGER; - BEGIN (* WRITELINENO *) - F := X.HEADLINENO; L := X.CURSORLINENO - 1; - WRITE('LINE'); - IF F = L THEN WRITE(' ', F) - ELSE WRITE('S ', F, ' TO ', L); - IF X.CURSOR = NIL THEN WRITE(' (BEFORE EOF)'); - END; (* WRITELINENO *) - - PROCEDURE PRINTEXTRATEXT(VAR X : STREAM; XNAME : STRING; - VAR Y : STREAM; YNAME : STRING); - BEGIN (* PRINTEXTRATEXT *) - WRITE(' EXTRA TEXT ON ', XNAME, ', '); - WRITELINENO(X); WRITELN; - IF Y.HEAD = NIL THEN - WRITELN(' BEFORE EOF ON ', YNAME) - ELSE - WRITELN(' BETWEEN LINES ', Y.HEADLINENO-1, ' AND ', - Y.HEADLINENO, ' OF ', YNAME); - WRITETEXT(X.HEAD, X.CURSOR) - END; (* PRINTEXTRATEXT *) - - BEGIN (* PRINTMISMATCH *) - WRITELN(' ***********************************'); - EMPTYA := (A.HEAD = A.CURSOR); - EMPTYB := (B.HEAD = B.CURSOR); - IF EMPTYA OR EMPTYB THEN - IF EMPTYA THEN PRINTEXTRATEXT(B, TITLEB, A, TITLEA) - ELSE PRINTEXTRATEXT(A, TITLEA, B, TITLEB) - ELSE - BEGIN - WRITELN(' MISMATCH:'); WRITELN; - WRITE(' ', TITLEA, ', '); WRITELINENO(A); WRITELN(':'); - WRITETEXT(A.HEAD, A.CURSOR); - WRITE(' ', TITLEB, ', '); WRITELINENO(B); WRITELN(':'); - WRITETEXT(B.HEAD, B.CURSOR) - END - END; (* PRINTMISMATCH *) - - BEGIN (* FINDMATCH *) - TRYCOUNT := 0; - WHILE (NOT MATCH) AND (TRYCOUNT <= MAXTRY) DO - BEGIN - SEARCH(A, FILEA, B, FILEB); - TRYCOUNT := TRYCOUNT+1; - END; - IF NOT MATCH THEN - BEGIN - TRYCOUNT:=0; - WHILE (NOT MATCH) AND (TRYCOUNT<=MAXTRY) DO - BEGIN - SEARCH(B, FILEB, A, FILEA); - TRYCOUNT:=TRYCOUNT+1; - END; - END; - PRINTMISMATCH; - IF (NOT MATCH) AND (TRYCOUNT>MAXTRY) THEN - BEGIN MARK(A); MARK(B) END; - END; (* FINDMATCH *) - - - - BEGIN (* COMPARE *) - ENDFILE := FALSE; MATCH := TRUE; (* I.E., BOI MATCHES BOI *) - REPEAT - IF MATCH THEN FINDMISMATCH ELSE BEGIN SAME := FALSE; FINDMATCH END - UNTIL ENDFILE AND MATCH; - MARK(A); MARK(B); (* MARK END OF FILES, THEREBY DISPOSING BUFFERS *) - END; (* COMPARE *) - - PROCEDURE INITSTREAM(VAR X : STREAM; VAR FILEX : TEXT); - BEGIN (* INITSTREAM *) - X.CURSOR := NIL; X.HEAD := NIL; X.TAIL := NIL; - X.CURSORLINENO := 0; X.HEADLINENO := 0; X.TAILLINENO := 0; - X.ENDFILE := EOF(FILEX); - END; (* INITSTREAM *) - - -BEGIN (* SRCCOM *) - WRITELN('INPUT FILE NAME:'); READLN(TITLEA); - ASSIGN(FILEA, TITLEA); - WRITELN('SECOND INPUT FILE NAME:'); READLN(TITLEB); - ASSIGN(FILEB, TITLEB); - RESET(FILEA); RESET(FILEB); - INITSTREAM(A, FILEA); INITSTREAM(B, FILEB); - FREELINES := NIL; - WRITELN('Source Compare [', VERSION, ']' ); - WRITELN; - IF EOF(FILEA) THEN - BEGIN WRITELN(TITLEA, ' IS EMPTY.'); - IF EOF(FILEB) THEN WRITELN(TITLEB, ' IS EMPTY.') - END - ELSE - IF EOF(FILEB) THEN WRITELN(TITLEB, ' IS EMPTY.') - ELSE - BEGIN SAME := TRUE; - COMPARE; - IF SAME THEN WRITELN('No differences encountered.'); - END; - WRITELN(' MAXIMUM POINTER = ',ord(maxptr)); -END. (* SRCCOM *) - - - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/CPMNAME.SRC b/software/CPM/CPM16_MTPUG_04/CPMNAME.SRC deleted file mode 100644 index 3079336..0000000 --- a/software/CPM/CPM16_MTPUG_04/CPMNAME.SRC +++ /dev/null @@ -1,80 +0,0 @@ -module tstcpmname; - {Test input string for valid CP/M file name or device} - {by Steve Clamage} - - - function cpmname(fname: string): boolean; - - const - numdevs = 6; {number of defined devices} - - type - devs = 1..numdevs; - devnames = array [devs] of string[4]; - - var - gotdot: boolean; - cname, cext, i, len: integer; - badset: set of char; - devtptr: ^devnames; - - - procedure devname; {table of device names} - - begin {[f-]} - inline( 4/ 'CON:'/ - 4/ 'KBD:'/ - 4/ 'TRM:'/ - 4/ 'LST:'/ - 4/ 'RDR:'/ - 4/ 'PUN:' - ); {[f+]} - end; - - begin {cpmname} - devtptr := addr(devname); - for i := 1 to numdevs do {check for device name} - if fname = devtptr^[i] then - begin - cpmname := true; - exit; {got one, so it's ok} - end; - cpmname := false; {assume the worst} - badset := [' ', '<', '>', ',', ':', '=', '*', '?', '[', ']']; - len := length(fname); - if len = 0 then {zero-length name} - exit; - i := 1; {start with 1st character} - if len > 1 then - if fname[2] = ':' then {if 2nd is colon...} - i := 3; {...start test with 3rd} - gotdot := false; - cname := 0; {# chars in name portion} - while (i <= len) and (not gotdot) do {scan name portion} - begin - if fname[i] = '.' then {period terminates name scan} - gotdot := true - else - begin - cname := cname + 1; - if fname[i] in badset then - exit; {illegal character} - end; - i := i + 1 - end; - cext := 0; {# chars in extent portion} - badset := badset + ['.']; - while (i <= len) do {scan extent portion} - begin - cext := cext + 1; - if fname[i] in badset then - exit; {illegal character} - i := i + 1; - end; - if (cname < 1) or (cname > 8) or (cext > 3) then - exit; {improper length} - cpmname := true; {it's ok!} - end; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/DIRFILE.SRC b/software/CPM/CPM16_MTPUG_04/DIRFILE.SRC deleted file mode 100644 index 5dae97f..0000000 --- a/software/CPM/CPM16_MTPUG_04/DIRFILE.SRC +++ /dev/null @@ -1,153 +0,0 @@ -PROGRAM dirfile(input,output); - -{by Steve Clamage} - -{reads disk directory, optionally sorts it, writes it to FILES.SUB} - -CONST - MAXNAMES = 200; {max file names in directory} - SRCHF = 17; {CP/M search for first} - SRCHN = 18; {CP/M search for next} - SETDMA = 26; {CP/M set dma address} - -TYPE - NAMEREC = - record - name : string[12]; - ext : string[3]; - end; - - SORTTYPE = (NOSORT, BYFILE, BYEXTN); - -VAR - i, loc, nfiles : INTEGER; - leader, trailer : STRING; - fname : STRING; - extn : STRING[3]; - store : array [0 .. MAXNAMES] of NAMEREC; - sentinel : NAMEREC; - fcb : array [0 .. 35] of CHAR; - buf : array [0 .. 127] of CHAR; - fileout : TEXT; - optn : CHAR; - howsort : SORTTYPE; - -{call BDOS} - EXTERNAL FUNCTION @bdos(func, parm : INTEGER) : INTEGER; -{validate file name} - EXTERNAL FUNCTION cpmname(filename : STRING) : BOOLEAN; - -PROCEDURE getfname; {get file name into fname, extn} - VAR - j : INTEGER; - BEGIN - fname[0] := chr(0); - extn[0] := chr(0); - for j := 1 to 8 do - if buf[loc+j] <> ' ' then - begin - fname[j] := buf[loc+j]; - fname[0] := chr(j); - end; - for j := 9 to 11 do - if buf[loc+j] <> ' ' then - begin - extn[j-8] := buf[loc+j]; - extn[0] := chr(j-8); - end; - END; - -PROCEDURE putfname; {insert file name into output buffer} - VAR {insertion sort algorithm} - pos, i : INTEGER; - BEGIN - if (howsort = NOSORT) or (nfiles = 0) then {don't sort} - pos := nfiles - else if howsort = BYFILE then {insert by file name} - begin - pos := 0; - while fname > store[pos].name do {start of this name} - pos := pos + 1; - while (fname = store[pos].name) - and (extn > store[pos].ext) do {ext within file name} - pos := pos + 1; - end - else if howsort = BYEXTN then {insert by extension} - begin - pos := 0; - while extn > store[pos].ext do {start of this extention} - pos := pos + 1; - while (extn = store[pos].ext) - and (fname > store[pos].name) do {file name within ext} - pos := pos + 1; - end; - for i := nfiles downto pos do {make space for new entry} - store[i+1] := store[i]; - store[pos].name := fname; - store[pos].ext := extn; - nfiles := nfiles + 1; - END; - -{main entry point} - -BEGIN - fcb[0] := chr(0); {initialize file control block} - for i := 1 to 11 do - fcb[i] := '?'; - for i := 12 to 35 do - fcb[i] := chr(0); - - sentinel.name := '~~~~~~~~'; {sentinel to terminate search} - sentinel.ext := '~~~'; - store[0] := sentinel; - - repeat {ask for sorting method} - writeln; - write ('SORT: No sort, by Extension, by Filename (N, E, F)? '); - readln(optn); - if optn > 'a' then {convert to uppercase} - optn := chr(ord(optn) - ord(' ')); - until optn in ['N', 'E', 'F']; - case optn of - 'N' : howsort := NOSORT; - 'E' : howsort := BYEXTN; - 'F' : howsort := BYFILE; - end; - - nfiles := 0; {number of file names} - i := @bdos(SETDMA, addr(buf)); {set dma address} - loc := 32 * @bdos(SRCHF, addr(fcb)); {get first file name} - while loc <= 32*3 do {sort all names into store[]} - begin - getfname; - putfname; - loc := 32 * @bdos(SRCHN, addr(fcb)); {get next file name} - end; - - writeln; - write ('Leader? '); {example: B:=A: } - readln(leader); - write ('Trailer? '); {example: [V] } - readln(trailer); - -{write out results} - - repeat - write ('Output file name? '); - readln(fname); - until cpmname(fname); - assign (fileout, fname); - rewrite(fileout); - for i := 0 to nfiles-1 do - begin - if length(store[i].ext) > 0 then - fname := concat(store[i].name, '.', store[i].ext) - else - fname := store[i].name; - writeln(fileout, leader, fname, trailer) - end; - close(fileout, i); - writeln(nfiles, ' file names written'); - -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/DIRFILE.SUB b/software/CPM/CPM16_MTPUG_04/DIRFILE.SUB deleted file mode 100644 index a4dbf2c..0000000 --- a/software/CPM/CPM16_MTPUG_04/DIRFILE.SUB +++ /dev/null @@ -1,4 +0,0 @@ -MTPLUS B:DIFRILE $$TB RB -MTPLUS B:CPMNAME $$TB RB -LINKMT B:DIFRILE,B:CPMNAME,PASLIB/S - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HEXDMP.COM b/software/CPM/CPM16_MTPUG_04/HEXDMP.COM deleted file mode 100644 index 58163c15cb930271d62698c65df315019b1361cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12416 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 B$1VT> diff --git a/software/CPM/CPM16_MTPUG_04/HEXDMP.DOC b/software/CPM/CPM16_MTPUG_04/HEXDMP.DOC deleted file mode 100644 index 0b90cdc..0000000 --- a/software/CPM/CPM16_MTPUG_04/HEXDMP.DOC +++ /dev/null @@ -1,5 +0,0 @@ -HEXDMP requests the name of the file to be dumped. It may -be on any drive. This program dumps every sector in -hex to a file HEXDMP.DAT. Type or print to discover -the problem with your files data. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HEXDMP.ERL b/software/CPM/CPM16_MTPUG_04/HEXDMP.ERL deleted file mode 100644 index 2ecab7915bcafe3c5964b450d39951c5b37bf2e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmbW0QA}H96vzMHYw{Giz-qxav>5`TVGci^% zJoxaDbfFp7u!lmH3<+aC)X^nuz}%vVH`_E=Kyi+R%*>&#i@vcr5))(My)YB?#l-XS zCFlF+{Lk+@-#K<&hzd_ATwOH{@8#XAU_(s@q`~b-)44^>~3!ii$;`nZhy7gA^9dtT2yL{RHe|Kz}`U2iz#h8Uno*nun=l z+-e8`c31CX1sA9z|D74;T45jS?-CCMoJ01R44V7t$avN7f2<3gz`%BJB8V-D%A~W* zoo0}l5>Ynr(&;`fwOEq%Q|y*HVt+Z8q@^r1b;v|F*r53FdJg{TJxq}=jv@09_7}Or zLYo;V>I@9e=}I1sb5&ek8V1`PozUroZqXHuLC9RtFp(nWYp$SCtjS3E+JlC48$7e0$K z_4Dj=b6|GbVyNtnyJ7=xlc#O@2@B)8s)gD(7DfJ-l`8kd^Dy6XotVU@OFR`V(KlWo zhnK|lCZ@Wya^D9uBO8yRAvJxd=Dc1_xco}~)+keR8~*$xo-r(=KQon?k454B>xEC^ zHI6-O(WupC86~OXI^Vf*dpXJ%)=fK?own-SBY-b3b+ngDU(o?t{|PW1uc^QBH-Ir6 zpvM3>`x^Tn05{3uJK6@on<)3)r^hc$LY0Q-mUrLVnEm=h=3t2$Kk-alhxRg^H(Q-e z>E)xmebc?4JiZY$bS;J$mE(mV33#)`pEP@V1zn0o4V&GlMEdB39O5HQs>%3rqH zUTzO6lB`~&k=lqiBF|?^+a)8X-lj>fqRiCB3MXv`BT8#TQSTs;UDG!)R&bkwAtRF` biuc-@H#Wbcv?&}8?hTFTn>YI8|BXKZALT;I diff --git a/software/CPM/CPM16_MTPUG_04/HEXDMP.SRC b/software/CPM/CPM16_MTPUG_04/HEXDMP.SRC deleted file mode 100644 index 69b82e5..0000000 --- a/software/CPM/CPM16_MTPUG_04/HEXDMP.SRC +++ /dev/null @@ -1,48 +0,0 @@ -program hexdmp; - -type - buffer = array[1..128] of char; - -var - name : string; - i,j,k,result : integer; - infil : file of buffer; - inbuf : buffer; - outfil : text; - -begin - writeln('enter name of file'); - readln(name); - - assign(infil,name); - reset(infil); - assign(outfil,'HEXDMP.DAT'); - rewrite(outfil); - - result := 0; - j:=0; - while result <> 1 do - begin - seekread(infil,j); - result := ioresult; - if result = 0 then begin - inbuf := infil^; - for i:=1 to 32 do - writehex(outfil,inbuf[i],1); - writeln(outfil); - for i:=33 to 64 do - writehex(outfil,inbuf[i],1); - writeln(outfil); - for i:=65 to 96 do - writehex(outfil,inbuf[i],1); - writeln(outfil); - for i:=97 to 128 do - writehex(outfil,inbuf[i],1); - writeln(outfil); - j:=j+1; - end; - end; - close(outfil,i); -writeln('all done') -end. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HL.CMD b/software/CPM/CPM16_MTPUG_04/HL.CMD deleted file mode 100644 index 129e2cd..0000000 --- a/software/CPM/CPM16_MTPUG_04/HL.CMD +++ /dev/null @@ -1,3 +0,0 @@ -hl,hl1,hl2,a:fpreals/s,a:paslib/s/d:9000 - -P \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HL.SRC b/software/CPM/CPM16_MTPUG_04/HL.SRC deleted file mode 100644 index 5fdaba7..0000000 --- a/software/CPM/CPM16_MTPUG_04/HL.SRC +++ /dev/null @@ -1,131 +0,0 @@ -(* VERSION 0009 *) - - -(*.......................................................................*) -(* HIDELINE *) -(* Hideline is a three-dimensional graphics program. The program *) -(* was written by Franklin C Crow and published as 'Three-Dimensional *) -(* Computer Graphics', BYTE, March/April 1981. The program was adapted *) -(* to run with a MicroAngelo graphics terminal by Ray Hopkins, 8 *) -(* Chestnut Hill CT., Cinnaminson N.J. (609) 829-4686. *) -(* Hl3.src builds the data files used by hl.src,the main display routine *) -(* Hl1.src and Hl2 are support modules. Note that Hl1.src must have *) -(* recursion turned on. Hl.cmd is the linker command file *) -(*.......................................................................*) - -(*Z*) -{$K1} -{$K2} -{$K3} -{$K5} -{$K6} -{$K7} -{$K12} -{$K13} -{$K14} -{$K15} - -PROGRAM HIDELINE; - -CONST Dotsacross = 511; - Dotsdown = 479; - Maxpts = 200; - Maxpols = 200; - Maxvtx = 800; - Maxsides =14; - -TYPE Counter = 0..Maxvtx; - Point = RECORD - X,Y,Z : REAL - END; - Vertex = 0..Maxpts; - Polygon = RECORD - Numvtx : Vertex; - START : Counter; - END; - Onepoly = ARRAY [1..Maxsides] OF Point; - Matrix = ARRAY [1..4,1..4] OF REAL; - -VAR Polygons : ARRAY [1..Maxpols] OF Polygon; - Vertices : ARRAY [1..Maxvtx] OF Vertex; - Points : ARRAY [1..Maxpts] OF Point; - Outpolys : ARRAY [1..Maxpols] OF Polygon; - Outvtces : ARRAY [1..Maxvtx] OF Point; - Eyespace : Matrix; - Window : Onepoly; - Eyept , Cntrint : Point; - Screenscale, Screenctr : Point; - ScreenX, SCREENY : REAL; - Numpols, Numvtces, Windowsize, I : Counter; - Numpts : Counter; - NUMDISPLAY, NumvtxOUT : Counter; - CMDCHAR : CHAR; - Filename : STRING; - DONE : BOOLEAN; - -external procedure @I95; - -EXTERNAL PROCEDURE OUTP(B:BYTE); - -EXTERNAL PROCEDURE MICRO2(COMMAND:BYTE;X,Y:INTEGER); - -EXTERNAL PROCEDURE GETPLANES(VAR Poly:Onepoly; Numpts:Counter); - -EXTERNAL PROCEDURE GETScreenscale; - -EXTERNAL PROCEDURE INITIALIZE; - -EXTERNAL PROCEDURE START; - -EXTERNAL PROCEDURE READOBJECT(Filename:STRING); - -EXTERNAL PROCEDURE MAKEPICTURE; - -BEGIN {MAIN} -{ @I95;} - INITIALIZE; - WHILE NOT DONE DO - BEGIN - WRITE('R)ead obj, E)yepoint, C)enter, S)tart, W)indow, Q)uit ? '); - READLN(CMDCHAR); - CASE CMDCHAR OF - 'R','r': BEGIN - WRITE('Enter name of object file ?'); - READLN(Filename); - READOBJECT(Filename); - END; - 'E','e': BEGIN - WRITE('Enter eyepoint, X,Y,Z ?'); - WITH Eyept DO - READLN(X,Y,Z); - END; - 'C','c': BEGIN - WRITE('Enter center of interest X,Y,Z ?'); - WITH Cntrint DO - READLN(X,Y,Z); - END; - 'S','s': BEGIN - Numpols := 0; - Numpts := 0; - END; - 'W','w': BEGIN - WRITE('Set display window : How many sides ?'); - READLN(Windowsize); - FOR I:=1 TO Windowsize DO - BEGIN - WRITE('Side number ',I,' X,Y,Z ?'); - WITH Window[I] DO - READLN(X,Y,Z); - END; - GETScreenscale; - GETPLANES(Window,Windowsize); - END; - 'P','p': MAKEPICTURE; - 'Q','q': DONE := TRUE; - END; - END; -outp($B8); -outp($28); -END. {MAIN} - - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HL1.SRC b/software/CPM/CPM16_MTPUG_04/HL1.SRC deleted file mode 100644 index cf45b7a..0000000 --- a/software/CPM/CPM16_MTPUG_04/HL1.SRC +++ /dev/null @@ -1,464 +0,0 @@ -(* VERSION 0028 *) - - -(*.......................................................................*) -(* HIDELINE *) -(* Hideline is a three-dimensional graphics program. The program *) -(* was written by Franklin C Crow and published as 'Three-Dimensional *) -(* Computer Graphics', BYTE, March/April 1981. The program was adapted *) -(* to run with a MicroAngelo graphics terminal by Ray Hopkins, 8 *) -(* Chestnut Hill CT., Cinnaminson N.J. (609) 829-4686. *) -(* Hl3.src builds the data files used by hl.src,the main display routine *) -(* Hl1.src and Hl2 are support modules. Note that Hl1.src must have *) -(* recursion turned on. Hl.cmd is the linker command file *) -(*.......................................................................*) - -(*Z*) -(*$S+*) -{$K1} -{$K2} -{$K6} -{$K7} -{$K12} -{$K13} -{$K14} -{$K15} -MODULE HIDELINE1; - -CONST Dotsacross = 511; - Dotsdown = 479; - Maxpts = 200; - Maxpols = 200; - Maxvtx = 800; - Maxsides =14; - Move = $84; - Plot = $91; - Split = $B8; - Clear = $88; - -TYPE Counter = 0..Maxvtx; - Point = RECORD - X,Y,Z : REAL - END; - Vertex = 0..Maxpts; - Polygon = RECORD - Numvtx : Vertex; - START : Counter; - END; - Onepoly = ARRAY [1..Maxsides] OF Point; - Matrix = ARRAY [1..4,1..4] OF REAL; - -VAR Polygons : EXTERNAL ARRAY [1..Maxpols] OF Polygon; - Vertices : EXTERNAL ARRAY [1..Maxvtx] OF Vertex; - Points : EXTERNAL ARRAY [1..Maxpts] OF Point; - Outpolys : EXTERNAL ARRAY [1..Maxpols] OF Polygon; - Outvtces : EXTERNAL ARRAY [1..Maxvtx] OF Point; - Eyespace : EXTERNAL Matrix; - Window : EXTERNAL Onepoly; - Eyept , Cntrint : EXTERNAL Point; - Screenscale, Screenctr : EXTERNAL Point; - ScreenX, SCREENY : EXTERNAL REAL; - Numpols, Numvtces, Windowsize, I : EXTERNAL Counter; - Numpts : EXTERNAL Counter; - NUMDISPLAY, NumvtxOUT : EXTERNAL Counter; - CMDCHAR : EXTERNAL CHAR; - Filename : EXTERNAL STRING; - DONE : EXTERNAL BOOLEAN; - - - EXTERNAL PROCEDURE GETPLANES(VAR Poly:Onepoly; Numpts:Counter); - - EXTERNAL PROCEDURE micro2(mode:byte;x,y:real); - - EXTERNAL PROCEDURE START; - -PROCEDURE MAKEPICTURE; - -VAR I,J,NUMCLP: Counter; - Tmpoly : Onepoly; - - FUNCTION DOTPROD(PT1,PT2:Point): REAL; - -BEGIN {dotprod} - DOTPROD := PT1.X*PT2.X+PT1.Y*PT2.Y+PT1.Z*PT2.Z; -END; {dotprod} - -PROCEDURE IDENT(VAR MTX:Matrix); - -VAR I,J: Counter; - -BEGIN {ident} - FOR I:=1 TO 4 DO - BEGIN - FOR J:=1 TO 4 DO - BEGIN - IF I=J THEN - MTX[I,J] := 1 - ELSE - MTX[I,J] := 0; - END; - END; -END; {ident} - -PROCEDURE MatrixMULT(MT1,MT2:Matrix; VAR RESULT: Matrix); - -VAR I,J,K: Counter; - -BEGIN {matrixmult} - FOR I:=1 TO 4 DO - BEGIN - FOR J:=1 TO 4 DO - BEGIN - RESULT[I,J] := 0; - FOR K:=1 TO 4 DO - BEGIN - RESULT[I,J] := RESULT[I,J]+MT1[K,J]*MT2[I,K]; - END; - END; - END; -END; {matrxmult} - -PROCEDURE TRANSFORM(PT:Point; MTX:Matrix; VAR NEWPT:Point); - -BEGIN - NEWPT.X := PT.X*MTX[1,1]+PT.Y*MTX[1,2]+PT.Z*MTX[1,3]+MTX[1,4]; - NEWPT.Y := PT.X*MTX[2,1]+PT.Y*MTX[2,2]+PT.Z*MTX[2,3]+MTX[2,4]; - NEWPT.Z := PT.X*MTX[3,1]+PT.Y*MTX[3,2]+PT.Z*MTX[3,3]+MTX[3,4]; -END; - -PROCEDURE GETEyespace(Eyept,Cntrint:Point); - -VAR MTX: Matrix; - C1,C2: Point; - HYPOTENUSE,COSA,SINA: REAL; - -BEGIN - IDENT(Eyespace); - WITH Eyept DO - BEGIN - Eyespace[1,4] := -X; - Eyespace[2,4] := -Y; - Eyespace[3,4] := -Z; - END; - TRANSFORM(Cntrint,Eyespace,C1); - IDENT(MTX); - WITH C1 DO - HYPOTENUSE := SQRT(X*X+Y*Y); - IF HYPOTENUSE > 0 THEN - BEGIN - COSA := C1.Y/HYPOTENUSE; - SINA := C1.X/HYPOTENUSE; - MTX[1,1] := COSA; - MTX[2,1] := SINA; - MTX[1,2] := -SINA; - MTX[2,2] := COSA; - MatrixMULT(Eyespace,MTX,Eyespace); - END; - TRANSFORM(Cntrint,Eyespace,C2); - IDENT(MTX); - WITH C2 DO - HYPOTENUSE := SQRT(Y*Y+Z*Z); - IF HYPOTENUSE > 0 THEN - BEGIN - COSA := C2.Y/HYPOTENUSE; - SINA := -C2.Z/HYPOTENUSE; - MTX[2,2] := COSA; - MTX[3,2] := SINA; - MTX[2,3] := -SINA; - MTX[3,3] := COSA; - MatrixMULT(Eyespace,MTX,Eyespace); - END; - IDENT(MTX); - MTX[2,2] := 0; - MTX[3,3] := 0; - MTX[2,3] := 1; - MTX[3,2] := 1; - MatrixMULT(Eyespace,MTX,Eyespace); -END; - -PROCEDURE MAKEDISPLAYABLE(VAR PT:Point); -BEGIN - PT.X := Screenscale.X*PT.X/PT.Z+Screenctr.X; - PT.Y := Screenscale.Y*PT.Y/PT.Z+Screenctr.Y; -END; - -FUNCTION FACESEYE(Poly:Onepoly): BOOLEAN; - -VAR TMPPT: Point; - Tmpoly: Onepoly; - -BEGIN - WITH Poly[2] DO - BEGIN - TMPPT.X := X; - TMPPT.Y := Y; - TMPPT.Z := Z; - END; - Tmpoly[1].X := Poly[1].X-Poly[2].X; - Tmpoly[1].Y := Poly[1].Y-Poly[2].Y; - Tmpoly[1].Z := Poly[1].Z-Poly[2].Z; - Tmpoly[2].X := Poly[3].X-Poly[2].X; - Tmpoly[2].Y := Poly[3].Y-Poly[2].Y; - Tmpoly[2].Z := Poly[3].Z-Poly[2].Z; - GETPLANES(Tmpoly,2); - IF DOTPROD(TMPPT,Tmpoly[1]) <=0 - THEN - FACESEYE := FALSE - ELSE - FACESEYE := TRUE; -END; - -PROCEDURE CLIPIN(VAR Poly:Onepoly; VAR Numpts:Counter); - -VAR I,J,LstJ,TMPPTS: Counter; - D1,D2,A: REAL; - Tmpoly: Onepoly; - -BEGIN - FOR I:=1 TO Windowsize DO - IF Numpts >0 THEN - BEGIN - D1 := DOTPROD(Poly[Numpts],Window[I]); - LstJ := Numpts; - TMPPTS := 0; - FOR J:=1 TO Numpts DO - BEGIN - IF D1 >0 THEN - BEGIN - TMPPTS := TMPPTS+1; - WITH Tmpoly[TMPPTS] DO - BEGIN - X := Poly[LstJ].X; - Y := Poly[LstJ].Y; - Z := Poly[LstJ].Z; - END; - END; - D2 := DOTPROD(Poly[J],Window[I]); - IF D1*D2<0 THEN - BEGIN - A := D1/(D1-D2); - TMPPTS := TMPPTS+1; - WITH Tmpoly[TMPPTS] DO - BEGIN - X := A*Poly[J].X+(1-A)*Poly[LstJ].X; - Y := A*Poly[J].Y+(1-A)*Poly[LstJ].Y; - Z := A*Poly[J].Z+(1-A)*Poly[LstJ].Z; - END; - END; - LstJ := J; - D1 := D2; - END; - FOR J:=1 TO TMPPTS DO - BEGIN - WITH Tmpoly[J] DO - BEGIN - Poly[J].X := X; - Poly[J].Y := Y; - Poly[J].Z := Z; - END; - END; - Numpts := TMPPTS; - END; -END; - -PROCEDURE INSERTSORT(Poly:Onepoly;Numpts:Counter); - -VAR I,J,K: Counter; - AVDEPTH,Nptsr : REAL; -BEGIN - AVDEPTH := 0; - Nptsr := 0; - FOR I:=1 TO Numpts DO - BEGIN - WITH Poly[I] DO - BEGIN - Outvtces[NumvtxOUT+I+1].X := X; - Outvtces[NumvtxOUT+I+1].Y := Y; - Outvtces[NumvtxOUT+I+1].Z := Z; - AVDEPTH := AVDEPTH+ Z; - Nptsr := Nptsr +1; - END; - END; - AVDEPTH := AVDEPTH /Nptsr; - Outvtces[NumvtxOUT+1].Z := AVDEPTH; - J := 0; - I := (NUMDISPLAY+1) DIV 2; - K := NUMDISPLAY; - WHILE (J<>I) DO - IF AVDEPTH0 THEN - INSERTSORT(Tmpoly,NUMCLP); - END; - END; - START; - FOR I:=1 TO NUMDISPLAY DO - WITH Outpolys[I] DO - BEGIN - FOR J:=1 TO Numvtx DO - WITH Outvtces[START+J] DO - BEGIN - Tmpoly[J].X := X; - Tmpoly[J].Y := Y; - Tmpoly[J].Z := Z; - END; - CLIPOUT(Tmpoly,Numvtx,I); - IF Numvtx>0 THEN - BEGIN - GETPLANES(Tmpoly,Numvtx); - FOR J:=1 TO Numvtx DO - WITH Outvtces[START+J] DO - BEGIN - X := Tmpoly[J].X; - Y := Tmpoly[J].Y; - Z := Tmpoly[J].Z; - END; - END; - END; -END; {MAKEPICTURE} -MODEND. -; \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HL2.SRC b/software/CPM/CPM16_MTPUG_04/HL2.SRC deleted file mode 100644 index b65d65a..0000000 --- a/software/CPM/CPM16_MTPUG_04/HL2.SRC +++ /dev/null @@ -1,270 +0,0 @@ -(* VERSION 0024 *) - -(*.......................................................................*) -(* HIDELINE *) -(* Hideline is a three-dimensional graphics program. The program *) -(* was written by Franklin C Crow and published as 'Three-Dimensional *) -(* Computer Graphics', BYTE, March/April 1981. The program was adapted *) -(* to run with a MicroAngelo graphics terminal by Ray Hopkins, 8 *) -(* Chestnut Hill CT., Cinnaminson N.J. (609) 829-4686. *) -(* Hl3.src builds the data files used by hl.src,the main display routine *) -(* Hl1.src and Hl2 are support modules. Note that Hl1.src must have *) -(* recursion turned on. Hl.cmd is the linker command file *) -(*.......................................................................*) - -(*Z*) -{$K1} -{$K2} -{$K3} -{$K6} -{$K7} -{$K12} -{$K13} -{$K14} -{$K15} - -MODULE HIDELINE2; - -CONST Dotsacross = 511; - Dotsdown = 479; - Maxpts = 200; - Maxpols = 200; - Maxvtx = 800; - Maxsides =14; - Move = $84; - Plot = $91; - Split = $B8; - Clear = $88; - -TYPE Counter = 0..Maxvtx; - Point = RECORD - X,Y,Z : REAL - END; - Vertex = 0..Maxpts; - Polygon = RECORD - Numvtx : Vertex; - START : Counter; - END; - Onepoly = ARRAY [1..Maxsides] OF Point; - Matrix = ARRAY [1..4,1..4] OF REAL; - -VAR Polygons : EXTERNAL ARRAY [1..Maxpols] OF Polygon; - Vertices : EXTERNAL ARRAY [1..Maxvtx] OF Vertex; - Points : EXTERNAL ARRAY [1..Maxpts] OF Point; - Outpolys : EXTERNAL ARRAY [1..Maxpols] OF Polygon; - Outvtces : EXTERNAL ARRAY [1..Maxvtx] OF Point; - Eyespace : EXTERNAL Matrix; - Window : EXTERNAL Onepoly; - Eyept , Cntrint : EXTERNAL Point; - Screenscale, Screenctr : EXTERNAL Point; - ScreenX, SCREENY : EXTERNAL REAL; - Numpols, Numvtces, Windowsize, I : EXTERNAL Counter; - Numpts : EXTERNAL Counter; - Nptsr : EXTERNAL REAL; - NUMDISPLAY, NumvtxOUT : EXTERNAL Counter; - CMDCHAR : EXTERNAL CHAR; - Filename : EXTERNAL STRING; - DONE : EXTERNAL BOOLEAN; - - -procedure outp(B:byte); - -begin - inline("IN/$E1/ - "ANI/1/ - "JNZ/*-4); - out[$E0]:=B; -end; - -procedure micro2(mode:byte;X,Y:real); - -var MX,MY:integer; - -begin -MX:=trunc(X); -MY:=trunc(Y); -outp(mode); -outp(HI(MX)); -outp(LO(MX)); -outp(HI(MY)); -outp(LO(MY)); -end; - -PROCEDURE GETPLANES(VAR Poly:Onepoly; Numpts:Counter); - -VAR I,LstI : Counter; - Tmpoly : Onepoly; - -BEGIN - LstI := Numpts; - FOR I:=1 TO Numpts DO - BEGIN - WITH Poly[I] DO - BEGIN - Tmpoly[I].X := Y*Poly[LstI].Z-Z*Poly[LstI].Y; - Tmpoly[I].Y := Z*Poly[LstI].X-X*Poly[LstI].Z; - Tmpoly[I].Z := X*Poly[LstI].Y-Y*Poly[LstI].X; - END; - LstI := I; - END; - FOR I:=1 TO Numpts DO - BEGIN - WITH Tmpoly[I] DO - BEGIN - Poly[I].X := X; - Poly[I].Y := Y; - Poly[I].Z := Z; - END; - END; -END; - -PROCEDURE GETScreenscale; - -VAR I : Counter; - MAXX,MAXY,MINX,MINY : REAL; - -BEGIN - MAXX := 0.0; - MAXY := 0.0; - MINX := 0.0; - MINY := 0.0; - FOR I:=1 TO Windowsize DO - BEGIN - WITH Window[I] DO - BEGIN - IF X/Z > MAXX THEN - MAXX := X/Z; - IF X/Z < MINX THEN - MINX := X/Z; - IF Y/Z > MAXY THEN - MAXY := Y/Z; - IF Y/Z < MINY THEN - MINY := Y/Z; - END; - END; - MAXX := MAXX-MINX; - MAXY := MAXY-MINY; - IF MAXY > (0.75*MAXX) - THEN - Screenscale.Z := MAXY*(4/3) - ELSE - Screenscale.Z := MAXX; - Screenscale.X := Dotsacross/Screenscale.Z; - Screenscale.Y := (Dotsdown*4/3)/Screenscale.Z -END; - -PROCEDURE INITIALIZE; - -BEGIN - DONE := FALSE; - Numpols := 0; - NUMDISPLAY := 0; - Numvtces := 0; - Numpts := 0; - WITH Eyept DO - BEGIN - X := -5; - Y := -5; - Z := 3; - END; - WITH Cntrint DO - BEGIN - X := 0; - Y := 0; --Ðp`ppv~:= 0; - END; - Windowsize := 4; - WITH Window[1] DO - BEGIN - X := -4; - Y := -3; - Z := 16; - END; - WITH Window[2] DO - BEGIN - X := -4; - Y := 3; - Z := 16; - END; - WITH Window[3] DO - BEGIN - X := 4; - Y := 3; - Z := 16; - END; - WITH Window[4] DO - BEGIN - X := 4; - Y := -3; - Z := 16; - END; - GETScreenscale; - GETPLANES(Window,Windowsize); - WITH SCREENCTR DO - BEGIN - X := Dotsacross/2; - Y := Dotsdown/2; - END; - OUTP(Clear); - OUTP(Split); - OUTP($01); -END; - -PROCEDURE START; - -VAR I,J : Counter; - -BEGIN - OUTP(Clear); -END; - - -PROCEDURE READOBJECT(Filename:STRING); - -VAR PTSOBJ,POLSOBJ,PTSPOL,I,J: Counter; - XPOS,YPOS,ZPOS: REAL; - OBJFILE: TEXT; - -BEGIN - WRITE('POSITION FOR ',Filename,' X,Y,Z: '); - READLN(XPOS,YPOS,ZPOS); - ASSIGN(OBJFILE,Filename); - RESET(OBJFILE); - IF IORESULT = 255 THEN - BEGIN - WRITELN(Filename,' not found'); - EXIT; - END; - READLN(OBJFILE,PTSOBJ,POLSOBJ); - FOR I:=1 TO PTSOBJ DO - BEGIN - WITH Points[I+Numpts] DO - BEGIN - READLN(OBJFILE,J,X,Y,Z); - X := X+XPOS; - Y := Y+YPOS; - Z := Z+ZPOS; - END; - END; - FOR I:=1 TO POLSOBJ DO - BEGIN - READ(OBJFILE,PTSPOL); - FOR J:=1 TO PTSPOL DO - BEGIN - READ(OBJFILE,Vertices[J+Numvtces]); - Vertices[J+Numvtces] := Vertices[J+Numvtces]+Numpts; - END; - WITH Polygons[I+Numpols] DO - BEGIN - START := Numvtces; - Numvtx := PTSPOL; - END; - Numvtces := Numvtces+PTSPOL; - END; - Numpts := Numpts+PTSOBJ; - Numpols := Numpols+POLSOBJ; -END; - -MODEND. - -D \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/HL3.SRC b/software/CPM/CPM16_MTPUG_04/HL3.SRC deleted file mode 100644 index c5e48d0..0000000 --- a/software/CPM/CPM16_MTPUG_04/HL3.SRC +++ /dev/null @@ -1,259 +0,0 @@ -(* VERSION 0016 *) - -(*.......................................................................*) -(* HIDELINE *) -(* Hideline is a three-dimensional graphics program. The program *) -(* was written by Franklin C Crow and published as 'Three-Dimensional *) -(* Computer Graphics', BYTE, March/April 1981. The program was adapted *) -(* to run with a MicroAngelo graphics terminal by Ray Hopkins, 8 *) -(* Chestnut Hill CT., Cinnaminson N.J. (609) 829-4686. *) -(* Hl3.src builds the data files used by hl.src,the main display routine *) -(* Hl1.src and Hl2 are support modules. Note that Hl1.src must have *) -(* recursion turned on. Hl.cmd is the linker command file *) -(*.......................................................................*) - -(*Z*) -{$K1} -{$K2} -{$K6} -{$K7} -{$K12} -{$K13} -{$K14} -{$K15} - -PROGRAM HIDELINE; - -CONST Dotsacross = 511; - Dotsdown = 479; - Maxpts = 200; - Maxpols = 200; - Maxvtx = 800; - Maxsides = 8; - -TYPE Counter = 0..Maxvtx; - Point = RECORD - X,Y,Z : REAL - END; - Vertex = 0..Maxpts; - Polygon = RECORD - Numvtx : Vertex; - START : Counter; - END; - Onepoly = ARRAY [1..Maxsides] OF Point; - Matrix = ARRAY [1..4,1..4] OF REAL; - CHFILE = FILE OF CHAR; - -VAR Polygons : ARRAY [1..Maxpols] OF Polygon; - Vertices : ARRAY [1..Maxvtx] OF Vertex; - Points : ARRAY [1..Maxpts] OF Point; - Outpolys : ARRAY [1..Maxpols] OF Polygon; - Outvtces : ARRAY [1..Maxvtx] OF Point; - Eyespace : Matrix; - Window : Onepoly; - Eyept , Cntrint : Point; - Screenscale, Screenctr : Point; - ScreenX, SCREENY : REAL; - Numpols, Numvtces, Windowsize, I : Counter; - Numpts : Counter; - Nptsr : REAL; - NUMDISPLAY, NumvtxOUT : Counter; - CMDCHAR : CHAR; - Filename : STRING; - DONE : BOOLEAN; - - - -PROCEDURE INITIALIZE; - -BEGIN - DONE := FALSE; - Numpols := 0; - Numvtces := 0; - Numpts := 0; -END; - -PROCEDURE MODIFY; - -VAR PTSOBJ,POLSOBJ,PTSPOL,I,J: Counter; - -BEGIN - {procedure modify to be built on this space} -END; -PROCEDURE DISPOBJ; - -VAR PTSOBJ,POLSOBJ,PTSPOL,I,J: Counter; - OBJFILE: TEXT; - -BEGIN - PTSOBJ:=Numpts; - POLSOBJ:=Numpols; - WRITELN('Points in object =',PTSOBJ,' Polygons in object =',POLSOBJ); - FOR I:=1 TO PTSOBJ DO - WITH Points[I] DO - BEGIN - WRITELN('Point ',I,X,Y,Z); - END; - FOR I:=1 TO POLSOBJ DO - BEGIN - PTSPOL:=Polygons[I].Numvtx; - WRITE('Points in polygon ',I,' ',PTSPOL,' Points '); - FOR J:=1 TO PTSPOL DO - BEGIN - WRITE(Vertices[J+Polygons[I].Start],' '); - END; - WRITELN; - END; -END; - -PROCEDURE WRTOBJECT(Filename:STRING); - -VAR PTSOBJ,POLSOBJ,PTSPOL,I,J: Counter; - Result : INTEGER; - OBJFILE: TEXT; - -BEGIN - PTSOBJ:=Numpts; - POLSOBJ:=Numpols; - ASSIGN(OBJFILE,Filename); - REWRITE(OBJFILE); - IF IORESULT = 255 THEN - BEGIN - WRITELN('Error in opening ',Filename); - EXIT; - END; - WRITELN(OBJFILE,PTSOBJ,POLSOBJ:5); - FOR I:=1 TO PTSOBJ DO - BEGIN - WITH Points[I] DO - BEGIN - WRITELN(OBJFILE,I,' ',X,' ',Y,' ',Z); - END; - END; - FOR I:=1 TO POLSOBJ DO - BEGIN - PTSPOL:=Polygons[I].Numvtx; - WRITE(OBJFILE,PTSPOL:5,' '); - FOR J:=1 TO PTSPOL DO - BEGIN - WRITE(OBJFILE,Vertices[J+Polygons[I].Start]:5); - END; - END; - CLOSE(OBJFILE,Result); - IF Result = 255 THEN - WRITELN('Error closing ',Filename) - ELSE - BEGIN - WRITELN(Filename,' closed successfully'); - END; -END; -PROCEDURE ENTER; - -VAR PTSOBJ,POLSOBJ,PTSPOL,I,J: Counter; - -BEGIN - WRITELN('Enter object '); - WRITE('Enter points in object ?'); - READLN(PTSOBJ); - WRITE('Enter polygons in object ?'); - READLN(POLSOBJ); -FOR I:=1 TO PTSOBJ DO - BEGIN - WITH Points[I] DO - BEGIN - WRITE('Enter X,Y,Z for point ',I,' '); - READLN(X,Y,Z); - END; - END; - FOR I:=1 TO POLSOBJ DO - BEGIN - WRITE('Enter points in polygon ',I,' '); - READ(PTSPOL); - FOR J:=1 TO PTSPOL DO - BEGIN - WRITE('Enter point ',J,' for polygon ',I,' '); - READ(Vertices[J+Numvtces]); - Vertices[J+Numvtces] := Vertices[J+Numvtces]+Numpts; - END; - WITH Polygons[I+Numpols] DO - BEGIN - START := Numvtces; - Numvtx := PTSPOL; - END; - Numvtces := Numvtces+PTSPOL; - END; - Numpts := Numpts+PTSOBJ; - Numpols := Numpols+POLSOBJ; -END; - -PROCEDURE READOBJECT(Filename:STRING); - -VAR PTSOBJ,POLSOBJ,PTSPOL,I,J: Counter; - XPOS,YPOS,ZPOS: REAL; - OBJFILE: TEXT; - -BEGIN - WRITE('POSITION FOR ',Filename,' X,Y,Z: '); - READLN(XPOS,YPOS,ZPOS); - ASSIGN(OBJFILE,Filename); - RESET(OBJFILE); - READLN(OBJFILE,PTSOBJ,POLSOBJ); - FOR I:=1 TO PTSOBJ DO - BEGIN - WITH Points[I+Numpts] DO - BEGIN - READLN(OBJFILE,J,X,Y,Z); - X := X+XPOS; - Y := Y+YPOS; - Z := Z+ZPOS; - END; - END; - FOR I:=1 TO POLSOBJ DO - BEGIN - READ(OBJFILE,PTSPOL); - FOR J:=1 TO PTSPOL DO - BEGIN - READ(OBJFILE,Vertices[J+Numvtces]); - Vertices[J+Numvtces] := Vertices[J+Numvtces]+Numpts; - END; - WITH Polygons[I+Numpols] DO - BEGIN - START := Numvtces; - Numvtx := PTSPOL; - END; - Numvtces := Numvtces+PTSPOL; - END; - Numpts := Numpts+PTSOBJ; - Numpols := Numpols+POLSOBJ; -END; - -BEGIN - INITIALIZE; - WHILE NOT DONE DO - BEGIN - WRITE('R)ead, D)isp, M)odify, E)nter, S)ave, Q)uit ? '); - READLN(CMDCHAR); - CASE CMDCHAR OF - 'R','r': BEGIN - WRITE('FILE NAME ?'); - READLN(Filename); - READOBJECT(Filename); - END; - 'M','m': BEGIN - Modify; - END; - 'E','e': BEGIN - ENTER; - END; - 'D','d':DISPOBJ; - 'S','s': BEGIN - WRITE('FILE NAME ?'); - READLN(Filename); - WRTOBJECT(Filename); - END; - 'Q','q': DONE := TRUE; - END; - END; -END. - -c \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/INDEXER.DOC b/software/CPM/CPM16_MTPUG_04/INDEXER.DOC deleted file mode 100644 index feebd54..0000000 --- a/software/CPM/CPM16_MTPUG_04/INDEXER.DOC +++ /dev/null @@ -1,15 +0,0 @@ -Indexer inputs a Pascal source file and outputs one of -two forms of index file. - -The first is the short form: Only the procedure and -function declarations are extracted from the source. - -The second is the long form: All global declarations, and -everything between the keyword 'procedure' or 'function' -and the keyword 'begin' is extracted. - -Invoke indexer with the following command line: - -INDEXER [SHORT | LONG] - -Short form is assumed unless LONG is specified. \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/INDEXER.SRC b/software/CPM/CPM16_MTPUG_04/INDEXER.SRC deleted file mode 100644 index a6e4aa1..0000000 --- a/software/CPM/CPM16_MTPUG_04/INDEXER.SRC +++ /dev/null @@ -1,300 +0,0 @@ -PROGRAM INDEXIT; -{-------------------------------------------------------} -{Purpose : Find procedure and function declarations and} -{ output them in alphabetical order to a file } -{Inputs : File to be indexed. } -{Outputs : File of procedures and functions } -{CREATED : Jan 31, 1981 NJL } -{MODIFIED : Jul 26, 1982 Steve Clamage } -{ Recognizes lower case, and outputs declar- } -{ ations extending over more than one line. } -{NOTE : Keywords must be all upper or all lower case} -{-------------------------------------------------------} - -TYPE - LSTRINGP = ^LSTRING; - FILENAME = STRING; - RWFILE = (RESETT,REWRITTE); - SUM_TYPE = (SHORT,LONG); - LSTRING = STRING[132]; - SSTRING = STRING[10]; - -VAR - FIN : TEXT; - FOUT : TEXT; - NAME : FILENAME; - STR : LSTRING; - STRP : LSTRINGP; - I : INTEGER; - LINES : INTEGER; - PROGFLG : BOOLEAN; - SUMMARY : SUM_TYPE; - LOC : INTEGER; - -EXTERNAL FUNCTION @BDOS(FUNC, PARM: INTEGER): INTEGER; -EXTERNAL FUNCTION @CMD: LSTRINGP; -EXTERNAL PROCEDURE @HLT; - - -FUNCTION KEYPRESSED: BOOLEAN; -BEGIN - KEYPRESSED := (@BDOS(11,0) <> 0) -END; - - -PROCEDURE ABORT; -BEGIN - WRITELN; - WRITELN('Pascal/MT+ Program Index utility aborted from console'); - @HLT -END; - - -FUNCTION DOFILE(VAR F: TEXT; RW: RWFILE; NAME: FILENAME): BOOLEAN; -{---------------------------------------------------------------} -{ Purpose: Attempt to reset or rewrite the given file. Check } -{ IORESULT. } -{ Inputs: File, whether to reset or rewrite, and name of file. } -{ Outputs: File open for reading or writing. True if successful,} -{ false if not successful. } -{ Last Mod: } -{---------------------------------------------------------------} -BEGIN - ASSIGN(F,NAME); - IF RW = RESETT THEN - RESET(F) - ELSE - REWRITE(F); - IF IORESULT = 255 THEN - DOFILE := FALSE - ELSE - DOFILE := TRUE; -END; - -PROCEDURE GETNAME(VAR OUTSTR : FILENAME); -{---------------------------------------------------------------} -{ Purpose: Read a name from the keyboard, return in STR. } -{ Inputs: CPMCMDBUF. } -{ Outputs: STR contains name of file if it was given to start. } -{ Last Mod: 11/23/80 } -{---------------------------------------------------------------} -BEGIN - WHILE (LENGTH(STR) <> 0) AND (STR[1] = ' ') DO - DELETE(STR,1,1); (* DELETE LEADING BLANKS *) - OUTSTR := ''; - WHILE (LENGTH(STR) <> 0) AND (STR[1] <> ' ') DO - BEGIN - OUTSTR := CONCAT(OUTSTR,STR[1]); - DELETE(STR,1,1) - END; -END; - - -FUNCTION STRIPBLNKS(S: LSTRING):INTEGER; -VAR - I : INTEGER; -BEGIN - STRIPBLNKS := 0; - I := 1; - WHILE (S[I] = ' ') AND (I <= LENGTH(S)) DO - I := I + 1; - IF I <= LENGTH(S) THEN - STRIPBLNKS := I; -END; - -FUNCTION PRESENT(KEYWORD: SSTRING; STR: LSTRING): BOOLEAN; -{---------------------------------------------------------------} -{ Purpose: Return true if the string KEYWORD } -{ the first string on the input line STR. If it is } -{ not first or is not present return false. } -{ Inputs: KEYWORD,STR. } -{ Outputs: Function return value of true or false. } -{ Last Mod: 26 July 82, accept lowercase } -{---------------------------------------------------------------} - PROCEDURE LOWER(VAR STR: SSTRING); - VAR - I: INTEGER; - BEGIN {convert uppercase alphabetic string to lowercase} - FOR I:=1 TO LENGTH(STR) DO - STR[I] := CHR( ORD(STR[I]) + (ORD('a') - ORD('A')) ) - END; - -BEGIN - PRESENT := FALSE; - LOC := STRIPBLNKS(STR); (* LOCATION OF KEYWORD *) - IF LOC <> 0 THEN - IF POS(KEYWORD,STR) = LOC THEN - PRESENT := TRUE - ELSE - BEGIN - LOWER(KEYWORD); (* NOTE: ALL UPPER OR ALL LOWERCASE ONLY! *) - IF POS(KEYWORD,STR) = LOC THEN - PRESENT := TRUE; - END -END; - - -PROCEDURE PROGRESS; -{ Mark progress every 16 lines on the screen } -BEGIN - LINES := LINES + 1; - IF (LINES & $0F) = 0 THEN WRITE('.') -END; - - -PROCEDURE BALPAR(STR: LSTRING); -{Copy procedure header through any balanced parens, } -{ including succeeding lines as necessary. } -VAR - I : INTEGER; - LEVEL: BYTE; - CH: CHAR; - - FUNCTION NEXTCHAR: CHAR; - {Return next char from string, get new line if needed} - BEGIN - I := I + 1; - IF I > LENGTH(STR) THEN - BEGIN - READLN(FIN,STR); - WRITELN(FOUT,STR); - PROGRESS; - I := 1 - END; - NEXTCHAR := STR[I] - END; - -BEGIN {BALPAR} - I := LOC; (* START AT KEYWORD *) - REPEAT - CH := NEXTCHAR; - UNTIL (CH = '(') OR (CH = ';'); - IF CH = '(' THEN (* NEED TO BALANCE OUT PARENS *) - BEGIN - LEVEL := 1; (* NESTING DEPTH *) - REPEAT - CH := NEXTCHAR; - CASE CH OF - '(' : LEVEL := LEVEL + 1; - ')' : LEVEL := LEVEL - 1; - END - UNTIL ((LEVEL = 0) AND (CH = ';')) OR EOF(FIN) - END -END; - - -PROCEDURE TRANSFER(VAR STR : LSTRING); -{---------------------------------------------------------------} -{ Purpose: Transfer lines from FIN to FOUT until the next proc/ } -{ func or begin is encountered. } -{ Inputs: STR contains the line with the PROC, FUNC or PROG def} -{ FIN provides the text. } -{ Outputs: STR contains the line containing a PROC, FUNC def or } -{ a begin. FOUT contains new text. } -{ Last Mod: 26 July 1982 -{---------------------------------------------------------------} -VAR - DONE : BOOLEAN; - TSTRING : LSTRING; - -BEGIN - DONE := FALSE; - WRITELN(FOUT,STR); - IF SUMMARY = LONG THEN - REPEAT - READLN(FIN,TSTRING); - PROGRESS; - IF KEYPRESSED THEN - ABORT; - IF (PRESENT('BEGIN',TSTRING)) THEN - DONE := TRUE - ELSE - BEGIN - IF PRESENT('FUNCTION',TSTRING) - OR PRESENT('PROCEDURE',TSTRING) THEN - BEGIN - WRITELN(FOUT); - WRITELN(FOUT); - END; - WRITELN(FOUT,TSTRING) - END - UNTIL EOF(FIN) OR DONE; - - IF SUMMARY = SHORT THEN - BEGIN - BALPAR(STR); (* COPY THRU BALANCED PARENS, IF ANY *) - READLN(FIN,TSTRING); - PROGRESS; - END; - -(*IF KEYPRESSED THEN - ABORT; *) - STR := TSTRING; - IF SUMMARY = LONG THEN - WRITELN(FOUT); - WRITELN(FOUT); -END; - - -PROCEDURE DOINDEX; -VAR - I : INTEGER; - STR : STRING; -BEGIN - WHILE NOT EOF(FIN) DO - BEGIN - IF PRESENT('PROCEDURE',STR) - OR PRESENT('FUNCTION',STR) THEN - TRANSFER(STR); - READLN(FIN,STR); - PROGRESS; - IF KEYPRESSED THEN - ABORT; - END; -END; - - - - -BEGIN - STRP := @CMD; (* COPY COMMAND TAIL *) - STR := STRP^; - - WRITELN('Pascal/MT+ Program Index Utility -- Release 5.2'); - WRITELN('Copyright (c) 1981 by MT MicroSYSTEMS'); - WRITELN; - - GETNAME(NAME); - WRITELN('Reading text from: ',NAME); - IF DOFILE(FIN,RESETT,NAME) THEN - BEGIN - GETNAME(NAME); - WRITELN('Output directed to: ',NAME); - IF DOFILE(FOUT,REWRITTE,NAME) THEN - BEGIN - GETNAME(NAME); - IF (LENGTH(NAME) > 0) AND (NAME[1] = 'L') THEN - BEGIN - SUMMARY := LONG; - NAME := 'LONG' - END - ELSE - BEGIN - SUMMARY := SHORT; - NAME := 'SHORT' - END; - WRITELN('Summary form: ', NAME); - READLN(FIN,STR); - LINES := 1; - DOINDEX; - CLOSE(FOUT,I); - WRITELN; - WRITELN('Pascal/MT+ Program Index utility processing complete'); - END - ELSE - WRITELN('Cannot create ',NAME) - END - ELSE - WRITELN('Cannot open ',NAME); -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/INDEXER.SUB b/software/CPM/CPM16_MTPUG_04/INDEXER.SUB deleted file mode 100644 index fe07c07..0000000 --- a/software/CPM/CPM16_MTPUG_04/INDEXER.SUB +++ /dev/null @@ -1,3 +0,0 @@ -MTPLUS B:INDEXER $$TB RB -LINKMT B:INDEXER,PASLIB/S - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/LONGLINE.PAS b/software/CPM/CPM16_MTPUG_04/LONGLINE.PAS deleted file mode 100644 index df4306f..0000000 --- a/software/CPM/CPM16_MTPUG_04/LONGLINE.PAS +++ /dev/null @@ -1,55 +0,0 @@ -(***************************************************** -* -* LONGLINE PROGRAM -* -* This program was taken out of the Pascal/Z -* manual, page 56. It is a demo on using Pascal/Z -* STRING functions. -* -* Typed/edited by Charlie Foster, Oct 1980 -* for the Pascal/Z Users Group -*****************************************************) - -PROGRAM longline; - -CONST - linesize = 80; -TYPE - $string0 = string 0; - $string255 = string 255; -VAR - line : STRING linesize; - word : STRING 80; - -FUNCTION length (X : $string255) : INTEGER; EXTERNAL; -FUNCTION index (X, Y : $string255) : INTEGER; EXTERNAL; -PROCEDURE setlength ( VAR X : $string0; Y : INTEGER); EXTERNAL; - -BEGIN - WRITELN (' STRING DEMO'); - WRITELN; - WRITELN ('Type one word at a time and this program', - ' will assemble the words into lines of ', - linesize:1,' words each.'); - WRITELN; - WRITELN ('Type, !"#$ ,to STOP'); - setlength (word, 0); (* initialize word to 0 *) - REPEAT - setlength (line, 0); (* initialize line to 0 *) - WHILE - ( length (line) + length (word) < linesize ) and - ( index (word, '!"#$') = 0 ) DO - BEGIN - APPEND (line, word); - IF length (line) < linesize THEN - APPEND (line, ' '); (* word space word *) - WRITE ('The word is: '); - READLN (word); - END; - WRITELN ('The line is: '); - WRITE (line); - UNTIL index (word, '!"#$') <> 0; - WRITELN; - WRITELN ('I am tired of this, I quit!'); -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/NADY.PAS b/software/CPM/CPM16_MTPUG_04/NADY.PAS deleted file mode 100644 index 47596a2..0000000 --- a/software/CPM/CPM16_MTPUG_04/NADY.PAS +++ /dev/null @@ -1,339 +0,0 @@ -PROGRAM NAD_ENTRY_V4; -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -{+ PROGRAM TITLE: Name and Address Entry +} -{+ version #4 +} -{+ +} -{+ WRITTEN BY: Raymond E. Penley +} -{+ DATE WRITTEN: Sept 25, 1980 +} -{+ +} -{+ WRITTEN FOR: A Name And Address (NAD) data entry +} -{+ program. The output is written +} -{+ specifically in the format that the +} -{+ word processor Magic Wand uses. +} -{+ +} -{+ SUMMARY +} -{+ I. EDITING ENTRIES. +} -{+ The program has a very limited editing capability. +} -{+ Before typing the return key if an entry is not +} -{+ correct then just type the ESCAPE key. This will +} -{+ erase the entire line just entered. You then have to +} -{+ reinput that entry. No other editing is available +} -{+ while in the program. Extensive editing must be +} -{+ done outside the data entry program such as with +} -{+ the word processor. +} -{+ +} -{+ II. TERMINATION. +} -{+ When at the FULL NAME data entry item simply entering +} -{+ a carriage return only will end the session, update +} -{+ and close the output file. +} -{+ +} -{+ III. RECORD FORMAT USED. +} -{+ LINE # +} -{+ 1 RECORD #nn < FILLED IN BY PROGRAM > +} -{+ 2 FULL NAME +} -{+ 3 ADDRESS LINE 1 < USED FOR A ONE LINE ADDRESS > +} -{+ 4 ADDRESS LINE 2 < LEAVE BLANK IF ONLY 1 LINE > +} -{+ 5 CITY +} -{+ 6 STATE < USE POST OFFICE 2 CHAR CODES >+} -{+ 7 ZIP CODE +} -{+ 8 SALUTATION +} -{+ 9 CODES < ANY TYPE OF CODES YOU REQUIRE>+} -{+ 10 BLANK LINE +} -{+ +} -{+ +} -{+ IV. INPUT/OUTPUT FILES +} -{+ INPUT is from a video terminal (must have cursor +} -{+ addressing) +} -{+ OUTPUT FILE is an ASCII text file with file name +} -{+ per your specifications. +} -{+ +} -{+ MODIFICATION RECORD +} -{+ SEPT 24, 80 -ADDED LIMITED EDITING CAPABILITY. +} -{+ ENTERING AN ESCAPE CHAR WILL ALLOW ONE TO +} -{+ REDO THAT LINE OVER AGAIN. +} -{+ NOV 22, 80 -ADDED TELEVIDEO TERMINAL FUNCTIONS. +} -{+ +} -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++} - -CONST - Default = 80; { Default length of all strings } - FileIdLength = 14; - ESC_CODE = 27; {ASCII Escape code} - NewLine = 13; {ASCII carriage return code} - -TYPE - TermType = (ADM, TVI, SOROC, H19, SOL); - BYTE = 0..255; - dflt_string = string default; - FID = string FileIdLength; - max_string = string 255; - sequence = packed array [1..2] of char; - S$0 = string 0; - S$255 = string 255; - -VAR - bell : char; - clear : char; - current_record: integer; - done : boolean; - esc : char; - filename : FID; - home : char; - Terminal : TermType; - - f1_line,f2_line, - f3_line,f4_line, - f5_line,f6_line, - f7_line,f8_line, - - f1_col,f2_col, - f3_col,f4_col, - f5_col,f6_col, - f7_col,f8_col: BYTE; - - LineDelete, { Delete line that cursor is on } - LineErase, { Erase from cursor to end of line } - HintOn, { Half Intensity On } - HintOff, { Half Intensity Off } - INVON, { Inverse Video On } - INVOFF : sequence; { Inverse Video Off } - - ADDR1, - ADDR2, - CITY, - CODES, - FULLNAME, - SALUTE, - STATE, - ZIP : DFLT_STRING; - - FOUT : TEXT; - -{$C- <<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>} -{$F- <<<<<<<<<<<<<>>>>>>>>>>>>>>>>} -{$M- <<<<<<<<<<<<<>>>>>>>>>>>>>>>>} - -FUNCTION LENGTH(X:S$255):INTEGER;EXTERNAL; - -PROCEDURE SETLENGTH(VAR X:S$0; Y:INTEGER);EXTERNAL; - -PROCEDURE KEYIN(VAR C:CHAR);EXTERNAL; - -PROCEDURE WRITEONE; -BEGIN - WRITELN(FOUT,'RECORD #',CURRENT_RECORD:1); - WRITELN(FOUT,FULLNAME); - WRITELN(FOUT,ADDR1); - IF ( LENGTH(ADDR2)>0 ) THEN - WRITELN(FOUT,ADDR2) - ELSE - WRITELN(FOUT); - WRITELN(FOUT,CITY); - WRITELN(FOUT,STATE); - WRITELN(FOUT,ZIP); - WRITELN(FOUT,SALUTE); - WRITELN(FOUT,CODES); - WRITELN(FOUT); -END; - - -PROCEDURE PLOT(row, column: BYTE); -{ Sequence - ESC + "=" + CHR( LINE+31 ) + CHR( COLUMN+31 ) -} -BEGIN - WRITE(CHR(27), CHR(61), CHR(31+row), CHR(31+column)); -END; - - -PROCEDURE EraseLine(VAR row,column: BYTE); -{ Erase current line from cursor to end of line } -BEGIN - CASE Terminal OF - ADM, SOROC: - BEGIN - PLOT(row,column); - WRITE( ' ':(80-column+1) ); - PLOT(row,column) - END; - - TVI: BEGIN - PLOT(row,column); - WRITE( LineErase ) - END - END {CASE} -END; - - -PROCEDURE CLEAR_ALL; -BEGIN - EraseLine(f1_line,f1_col); - EraseLine(f2_line,f2_col); - EraseLine(f3_line,f3_col); - EraseLine(f4_line,f4_col); - EraseLine(f5_line,f5_col); - EraseLine(f6_line,f6_col); - EraseLine(f7_line,f7_col); - EraseLine(f8_line,f8_col); -END; - -PROCEDURE QUIRY(VAR row, column: BYTE; - VAR ANSWER: DFLT_STRING); -VAR - CIX : CHAR; - DONE, - VALID : BOOLEAN; - -BEGIN - PLOT(row, column); - REPEAT - SETLENGTH(ANSWER,0); - DONE := FALSE; - WHILE NOT ( DONE ) DO - BEGIN - KEYIN(CIX); - VALID := ( ORD(CIX)<>ESC_CODE ); - IF NOT ( VALID ) THEN {REDO FROM START} - BEGIN - DONE := TRUE; - SETLENGTH(ANSWER,0); - EraseLine(row,column); - END - ELSE - IF ( ORD(cix)=NewLine ) THEN - DONE := TRUE - ELSE - BEGIN - WRITE(CIX); - APPEND(ANSWER,CIX); - END; - END {WHILE}; - UNTIL ( VALID ); -END {OF QUIRY}; - - -PROCEDURE FILLONE(VAR DONE: BOOLEAN); -BEGIN - PLOT(2,12);WRITELN( INVON, 'RECORD #', CURRENT_RECORD:1, ' ', INVOFF ); - QUIRY(f1_line,f1_col,FULLNAME); - IF ( LENGTH(FULLNAME) = 0 ) THEN - DONE := TRUE - {EXIT(FILLONE); } - ELSE - BEGIN - DONE := FALSE; - QUIRY(f2_line,f2_col,SALUTE); - QUIRY(f3_line,f3_col,ADDR1); - QUIRY(f4_line,f4_col,ADDR2); - QUIRY(f5_line,f5_col,CITY); - QUIRY(f6_line,f6_col,STATE); - QUIRY(f7_line,f7_col,ZIP); - QUIRY(f8_line,f8_col,CODES) - END -END {OF FILLONE}; - - -PROCEDURE WRITE_MASK; -BEGIN - WRITE( CLEAR, HOME ); - WRITELN; - WRITELN; - WRITELN; - WRITELN; - WRITELN('FULL NAME: .......');WRITELN; - WRITELN('SALUTATION: ......');WRITELN; - WRITELN('ADDRESS LINE 1: ..');WRITELN; - WRITELN('ADDRESS LINE 2: ..');WRITELN; - WRITELN('CITY: ............');WRITELN; - WRITELN('STATE: ...........');WRITELN; - WRITELN('ZIP: .............');WRITELN; - WRITELN('CODE(s): .........'); -END; - - -PROCEDURE INIT; -BEGIN - Terminal := ADM; { Select the correct terminal type } - BELL := CHR(7); - HOME := CHR(30); { Home the cursor but do not clear the screen } - CLEAR := CHR(26); { Completely clear the terminal screen } - ESC := CHR(27); - -{+++++++++++++++++++++++++++++++++++++++++++++++++++} -{+ These string sequences pertain to the Televideo +} -{+ terminal. +} -{+++++++++++++++++++++++++++++++++++++++++++++++++++} - { inverse video ON } - INVON[1] := ESC; - INVON[2] := 'j'; - { inverse video OFF } - INVOFF[1] := ESC; - INVOFF[2] := 'k'; - { delete the line the cursor is on } - LineDelete[1] := ESC; - LineDelete[2] := 'R'; - { erase from the cursor to the end of the line } - LineErase[1] := ESC; - LineErase[2] := 't'; - { half intensity ON } - HintOn[1] := ESC; - HintOn[2] := ')'; - { half intensity OFF } - HintOff[1] := ESC; - HintOff[2] := '('; - -{ f?_line = starting line for field n in the MASK } -{ f?_col = starting column for field n in the MASK } - f1_line := 5; f1_col := 20;{ FIELD #1 } - f2_line := 7; f2_col := 20;{ FIELD #2 } - f3_line := 9; f3_col := 20;{ FIELD #3 } - f4_line := 11; f4_col := 20;{ FIELD #4 } - f5_line := 13; f5_col := 20;{ FIELD #5 } - f6_line := 15; f6_col := 20;{ FIELD #6 } - f7_line := 17; f7_col := 20;{ FIELD #7 } - f8_line := 19; f8_col := 20;{ FIELD #8 } -END; - - -BEGIN{ Main program NAD entry } - INIT; - WRITE( CLEAR ); - { OPEN FILES } - SETLENGTH(FILENAME,0); - WRITELN; - WRITE(' FILE: '); - READLN(FILENAME); - APPEND(FILENAME,CHR(13)); - RESET(FILENAME,FOUT); - {++++++++++++++++++++++++++++++++++++++++++++++++++++++} - {+ IF FILE ALREADY EXISTS THEN INFORM OPERATOR THAT +} - {+ HE WILL DESTROY EXISTING FILE, AND TERMINATE. +} - {++++++++++++++++++++++++++++++++++++++++++++++++++++++} - IF NOT ( EOF(FOUT) ) THEN - BEGIN - WRITE( BELL ); - WRITELN - ( ' ':12,INVON,' FILE ALREADY EXISTS  ', INVOFF ); - WRITELN - ( ' ':12,INVON,' THIS PROGRAM WILL DESTROY YOUR FILE ', INVOFF ); - END - ELSE - BEGIN - REWRITE( FILENAME, FOUT); - WRITELN; - WRITE('Enter beginning Record No. '); - READLN(CURRENT_RECORD); - WRITE_MASK; - REPEAT - FILLONE(DONE); - IF NOT ( DONE ) THEN - BEGIN - CLEAR_ALL; - WRITEONE; - END; - CURRENT_RECORD := CURRENT_RECORD + 1 - UNTIL ( DONE ); - WRITE( CLEAR ); - END; -END.{ Program NAD Entry } - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P1.SRC b/software/CPM/CPM16_MTPUG_04/P1.SRC deleted file mode 100644 index e2eaf77..0000000 --- a/software/CPM/CPM16_MTPUG_04/P1.SRC +++ /dev/null @@ -1,108 +0,0 @@ -(* VERSION 0002 *) -{$M plotaxis } -{$M *} -module plot1; - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -const pi = 3.14159; - -var - xpos,ypos :external real; - -(*$ISTDLIB.DEF *) - - -external procedure plotline(penpos:integer;txpos,typos:real); - -external procedure plotstring(px,py,height,theta:real;line:string); - -procedure plotaxis(px,py,leng,theta,min,max,tic:real;name:string); - -var temp1,side:integer; - print :boolean; - amount:string; - thetal,temp,rxpos,rypos,len,per,step:real; - -procedure divsteps(theta:real); - -begin - theta:=theta+pi/2; - plotline(2,xpos+0.03*cos(theta),ypos+0.03*sin(theta)); - plotline(2,xpos-0.06*cos(theta),ypos-0.06*sin(theta)); - plotline(2,xpos+0.03*cos(theta),ypos+0.03*sin(theta)); -end; - -begin {plotaxis} - if tic<0 then - begin - tic:=-tic; - side:=-1; - end - else - side:=1; - thetal:=theta; - theta:=(pi/180)*theta; - if (px+leng*cos(theta)>511) or (py+leng*sin(theta)>479) then - begin - writeln('axis off screen'); - readln; - exit; - end; - if leng<0 then - begin - print:=false; - leng:=-leng; - end - else - print:=true; - len:=leng; - plotline(1,px,py); - per:=(leng-0.01)/(max-min); - while leng>0 do - begin - if leng>tic*per then step:=tic*per - else step:=leng; - divsteps(theta); - if print then - begin - rxpos:=xpos; - rypos:=ypos; - temp1:=trunc(min*100); - intstr(temp1,0,amount); - insert('.',amount,length(amount)-1); - if temp1=0 then amount:='0'; - temp:=length(amount)/2; - plotline(1,xpos-(0.086*temp*cos(theta)- - side*(0.14+(side-1)*0.05)*sin(theta)), - ypos-(0.086*temp*sin(theta)+ - side*(0.14+(side-1)*0.05)*cos(theta))); - plotstring(xpos,ypos,0.1,thetal,amount); - plotline(1,rxpos,rypos); - end; - plotline(2,xpos+step*cos(theta),ypos+step*sin(theta)); - leng:=leng-step; - min:=min+tic - end; - if print then - begin - plotline(1, - xpos-(len/2*cos(theta)+0.108*round(length(name)/2) - *cos(theta)-side*(0.35+(side-1)*0.075)*sin(theta)), - ypos-(len/2*sin(theta)+0.108*round(length(name)/2) - *sin(theta)+side*(0.35+(side-1)*0.075)*cos(theta))); - plotstring(xpos,ypos,0.125,thetal,name); - end; - end; {plotaxis} - - -modend. -. \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P2.SRC b/software/CPM/CPM16_MTPUG_04/P2.SRC deleted file mode 100644 index c4132b4..0000000 --- a/software/CPM/CPM16_MTPUG_04/P2.SRC +++ /dev/null @@ -1,182 +0,0 @@ -(* VERSION 0007 *) -{$M plotstring } -{$M *} -module plot2; - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -const pi = 3.14159; - -var - xpos,ypos :external real; - -(*$ISTDLIB.DEF *) - -external procedure plotline(penpos:integer;txpos,typos:real); - -procedure plotstring(px,py,height,theta:real;line:string); - -var step1,xstep,ystep,x2step,y2step,x3step,y3step: real; - step,xstep1,ystep1,x2step1,y2step1,x3step1,y3step1:real; - j,n:integer; - -procedure plotchar(ch:char); - -var rxpos,rypos:real; - plot:string[32]; - pchar:char; - i:integer; - -procedure arrow; - -begin {arrow} - step1:=0.04; - xstep1:=step1*cos(theta); - ystep1:=step1*sin(theta); - x2step1:=sqrt(2)*step1*cos(theta+pi/4); - y2step1:=sqrt(2)*step1*sin(theta+pi/4); - x3step1:=sqrt(2)*step1*cos(theta-pi/4); - y3step1:=sqrt(2)*step1*sin(theta-pi/4); - plotline(2,xpos-y2step1,ypos+x2step1); - plotline(2,xpos+ystep1,ypos-xstep1); - plotline(2,xpos+ystep1,ypos-xstep1); - plotline(2,xpos-y3step1,ypos+x3step1); -end; - -procedure getcode; - -begin - case ch of - 'A','a':plot:='d8888889oolkkkkkkaaaawwwwooooi'; - 'B','b':plot:='d8888888ooolkjuuuooolkkjuuui'; - 'C','c':plot:='dddddwjuu7888889ooli'; - 'D','d':plot:='d8888888ooolkkkkkjuuui'; - 'E','e':plot:='ddddduuuu8888oouu888ooooi'; - 'F','f':plot:='d8888oouu888ooooi'; - 'G','g':plot:='dddddwwwwww7uujkkkkkloo988uui'; - 'H','h':plot:='d8888888ddddkkkkkkkwwwwuuuui'; - 'I','i':plot:='doooouu8888888uuooooi'; - 'J','j':plot:='dwloo9888888i'; - 'K','k':plot:='d8888888dddjjjlllli'; - 'L','l':plot:='ddddduuuu8888888i'; - 'M','m':plot:='d8888888llkk8899kkkkkkki'; - 'N','n':plot:='d8888888llllwwwwkkkkkkki'; - 'O','o':plot:='dd7888889oolkkkkkjuui'; - 'P','p':plot:='d8888888ooolkkjuuui'; - 'Q','q':plot:='dd7888889oolkkkkkjuudwwlli'; - 'R','r':plot:='d8888888ooolkkjuuuooolkki'; - 'S','s':plot:='dwloo9887uu789ooli'; - 'T','t':plot:='ddd8888888aaooooi'; - 'U','u':plot:='dwwwwwwwkkkkkkloo9888888i'; - 'V','v':plot:='dwwwwwwwkkkkkll9988888i'; - 'W','w':plot:='dwwwwwwwkkkkkkk9988kkll8888888i'; - 'X','x':plot:='dwwwwwwwooookjjjjkkooooi'; - 'Y','y':plot:='dwwwwwwwkll998kjjkkkki'; - 'Z','z':plot:='dwwwwwwwooookjjjjkkooooi'; - '1':plot:='dwwwww99kkkkkkkuuooooi'; - '2':plot:='dwwwwww9oolkkjjjjooooi'; - '3':plot:='dwwwwww9ooojjjoolkkjuu7i'; - '4':plot:='dwwwwwwwkkkkooooawwwwkkkkkkki'; - '5':plot:='dddddwwwwwwwuuuukkkooolkkjuu7i'; - '6':plot:='dddddwwwwww7uujkkkkkloo9887uuji'; - '7':plot:='dwwwwww8ooookjjkkkki'; - '8':plot:='ddwwww789oolkjuujkkloo9887i'; - '9':plot:='dwloo9888887uujkkloo9i'; - '0':plot:='dd7888889oolkkkkkjuui'; - end; -end; - -procedure getcode1; - -begin - case ch of - '.':plot:='ddd8okui'; - '>':plot:='d999777i'; - '<':plot:='dddd777999i'; - '$':plot:='dwwooo97uu79ooowaakkkkkki'; - '^':plot:='ooooooo^i'; - '*':plot:='dww9999aakkkkdd7777xxooooi'; - '/':plot:='d8899998i'; - '"':plot:='dw9999aaaku8oxxxxd8ok8okuui'; - '?':plot:='ddd8w8997uujki'; - '#':plot:='ddddwwwww8okui'; - '&':plot:='dddwwwwkkuu88ooooxaooakki'; - ',':plot:='ddd8okuoji'; - '(':plot:='dddd7788899i'; - ')':plot:='dd9988877i'; - '%':plot:='dw9999aaauko8xxxxddo8uki'; - '+':plot:='dddww8888aaxxooooi'; - '-':plot:='dwwwwoooooi'; - ':':plot:='ddwwo8ukwwo8uki'; - '[':plot:='1i'; - ']':plot:='2i'; - '=':plot:='ddwwoooowwuuuui'; - end; -end; - -begin{plotchar} - rxpos:=xpos; - rypos:=ypos; - plot:='i'; - getcode; - getcode1; - i:=1; - pchar:='0'; - while pchar<>'i' do - begin - pchar:=plot[i]; - case pchar of - 'd':plotline(1,xpos+xstep,ypos+ystep); - 'w':plotline(1,xpos-ystep,ypos+xstep); - 'a':plotline(1,xpos-xstep,ypos-ystep); - '7':plotline(2,xpos-x3step,ypos-y3step); - '8':plotline(2,xpos-ystep,ypos+xstep); - '9':plotline(2,xpos+x2step,ypos+y2step); - 'o':plotline(2,xpos+xstep,ypos+ystep); - 'l':plotline(2,xpos+x3step,ypos+y3step); - 'k':plotline(2,xpos+ystep,ypos-xstep); - 'j':plotline(2,xpos-x2step,ypos-y2step); - 'u':plotline(2,xpos-xstep,ypos-ystep); - 'x':plotline(1,xpos+ystep,ypos-xstep); - '^':arrow; - '1':begin - rxpos:=rxpos-(height/2)*sin(theta)-6*xstep; - rypos:=rypos+(height/2)*cos(theta)-6*ystep; - end; - '2':begin - rxpos:=rxpos+(height/2)*sin(theta)-6*xstep; - rypos:=rypos-(height/2)*cos(theta)-6*ystep - end; - end; - i:=i+1; - end; - plotline(1,rxpos+6*xstep,rypos+6*ystep); -end; {plotchar} - -begin {plotstring} - theta:=(theta/180)*pi; - step:=height/7; - xstep:=step*cos(theta); - ystep:=step*sin(theta); - x2step:=sqrt(2)*step*cos(theta+pi/4); - y2step:=sqrt(2)*step*sin(theta+pi/4); - x3step:=sqrt(2)*step*cos(theta-pi/4); - y3step:=sqrt(2)*step*sin(theta-pi/4); - n:=length(line); - plotline(1,px,py); - for j:=1 to n do - begin - plotchar(line[j]); - end -end; {plotstring} - -modend. -. \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P3.SRC b/software/CPM/CPM16_MTPUG_04/P3.SRC deleted file mode 100644 index b38d327..0000000 --- a/software/CPM/CPM16_MTPUG_04/P3.SRC +++ /dev/null @@ -1,48 +0,0 @@ -(* VERSION 0004 *) -{$M plotline} -{$M *} -module plot3; - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -const pi = 3.14159; - -var - xpos,ypos :external real; - -(*$ISTDLIB.DEF *) - -external procedure outp(B:byte); - -external procedure micro2(comm:byte;x,y:integer); - -procedure plotline(penpos:integer;txpos,typos:real); -var ix,iy : integer; - -begin - xpos:=txpos; - ypos:=typos; - ix:=round(xpos*51.1); - iy:=round(ypos*479/7); - case penpos of - 0:{initplot} - begin - outp($88); - micro2($84,ix,iy); - end; - 1:micro2($84,ix,iy); - 2:micro2($91,ix,iy); - end; -end; - - -modend. -t \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P4.SRC b/software/CPM/CPM16_MTPUG_04/P4.SRC deleted file mode 100644 index 721e249..0000000 --- a/software/CPM/CPM16_MTPUG_04/P4.SRC +++ /dev/null @@ -1,42 +0,0 @@ -(* VERSION 0002 *) -{$M outp } -{$M micro2 } -{$M *} - -module plot4; - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -procedure outp(B:byte); - -{outputs a byte to MicroAngelo terminal E1=status port, E0=data port} - -begin -inline("IN/$E1/ - "ANI/1/ - "JNZ/*-4); - out[$E0]:=B; -end; - -procedure micro2(comm:byte;x,y:integer); - -{outputs command and 2 integer operands to terminal} - -begin -outp(comm); -outp(HI(x)); -outp(LO(x)); -outp(HI(y)); -outp(LO(y)); -end; - -modend. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P6.SRC b/software/CPM/CPM16_MTPUG_04/P6.SRC deleted file mode 100644 index a2731db..0000000 --- a/software/CPM/CPM16_MTPUG_04/P6.SRC +++ /dev/null @@ -1,67 +0,0 @@ -(* VERSION 0002 *) -module plot6; - - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -type -{$I PLOTLIB.TYP} - -const -{$I PLOTLIB.CON} - -var - xpos,ypos :external real; - -(*$IPLOTLIB.DEF*) -{$ISTDLIB.DEF} - -external procedure plotsymbol(sym:integer;height:real); - -procedure plotarray(nopoints,freq,sym:integer; - px,py,xmin,xmax,ymin,ymax,height,xlen,ylen:real; - x,y: coord); - -var pen,i:integer; - -begin - if nopoints>250 then - begin - outp($88); - write('too many points'); - readln; - outp($88); - exit; - end; - if (py+ylen>7) or (px+xlen>10) then - begin - outp($88); - write('data is off screen. Type ret'); - readln; - outp($88); - exit; - end; - xlen:=(xmax-xmin)/xlen; - ylen:=(ymax-ymin)/ylen; - if freq<0 then pen:=1 - else pen:=2; - freq:=abs(freq); - plotline(1,((x[1]-xmin)/xlen)+px,((y[1]-ymin)/ylen)+py); - for i:=2 to nopoints do - begin - plotline(pen,((x[i]-xmin)/xlen)+px,((y[i]-ymin)/ylen)+py); - if freq>0 then - if ((i+1)mod freq=0) then plotsymbol(sym,height); - end; - end; {plotarray} - -modend. -ü \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P7.SRC b/software/CPM/CPM16_MTPUG_04/P7.SRC deleted file mode 100644 index 8341052..0000000 --- a/software/CPM/CPM16_MTPUG_04/P7.SRC +++ /dev/null @@ -1,35 +0,0 @@ -(* VERSION 0002 *) -module plot7; - - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -type -{$I PLOTLIB.TYP} - -const -{$I PLOTLIB.CON} - -var - xpos,ypos :external real; - -(*$IPLOTLIB.DEF*) -{$ISTDLIB.DEF} - -procedure plotwhere(var px,py:real); - -begin - px:=xpos; - py:=ypos; -end; - -modend. -t \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/P8.SRC b/software/CPM/CPM16_MTPUG_04/P8.SRC deleted file mode 100644 index b4cae40..0000000 --- a/software/CPM/CPM16_MTPUG_04/P8.SRC +++ /dev/null @@ -1,79 +0,0 @@ -(* VERSION 0002 *) -module plot8; - - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -type -{$I PLOTLIB.TYP} - -const -{$I PLOTLIB.CON} - -var - xpos,ypos :external real; - -(*$IPLOTLIB.DEF*) -{$ISTDLIB.DEF} - -procedure plotsymbol(sym:integer;height:real); - -var rxpos,rypos:real; - -begin - rxpos:=xpos; - rypos:=ypos; - case sym of - 1:begin {triangle} - plotline(2,xpos,ypos+height/2); - plotline(2,xpos-height/2,ypos-height); - plotline(2,xpos+height,ypos); - plotline(2,xpos-height/2,ypos+height); - plotline(1,rxpos,rypos); - end; - - 2:begin { X } - plotline(1,xpos-height/2,ypos+height/2); - plotline(2,xpos+height,ypos-height); - plotline(1,xpos-height,ypos); - plotline(2,xpos+height,ypos+height); - plotline(1,rxpos,rypos); - end; - - 3:begin {square} - plotline(1,xpos,ypos+height/2); - plotline(2,xpos-height/2,ypos); - plotline(2,xpos,ypos-height); - plotline(2,xpos+height,ypos); - plotline(2,xpos,ypos+height); - plotline(2,xpos-height/2,ypos); - plotline(1,rxpos,rypos); - end; - - 4:begin { + } - plotline(2,xpos+height/2,ypos); - plotline(2,xpos-height,ypos); - plotline(2,xpos+height/2,ypos); - plotline(2,xpos,ypos+height/2); - plotline(2,xpos,ypos-height); - plotline(2,rxpos,rypos); - end; - - 5:begin { | } - plotline(2,xpos,ypos+height/2); - plotline(2,xpos,ypos-height); - plotline(2,xpos,ypos); - end; - end; -end; {plotsymbol} - -modend. -^ \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PLOTLIB.BLD b/software/CPM/CPM16_MTPUG_04/PLOTLIB.BLD deleted file mode 100644 index 9185ef7..0000000 --- a/software/CPM/CPM16_MTPUG_04/PLOTLIB.BLD +++ /dev/null @@ -1,9 +0,0 @@ -PLOTLIB.ERL -P1.ERL -P6.ERL -P8.ERL -P7.ERL -P2.ERL -P3.ERL -P4.ERL - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PLOTLIB.CON b/software/CPM/CPM16_MTPUG_04/PLOTLIB.CON deleted file mode 100644 index 9af16ef..0000000 --- a/software/CPM/CPM16_MTPUG_04/PLOTLIB.CON +++ /dev/null @@ -1,2 +0,0 @@ - pi = 3.14159; -5 \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PLOTLIB.DEF b/software/CPM/CPM16_MTPUG_04/PLOTLIB.DEF deleted file mode 100644 index ccfaeb2..0000000 --- a/software/CPM/CPM16_MTPUG_04/PLOTLIB.DEF +++ /dev/null @@ -1,21 +0,0 @@ - - -external procedure outp(B:byte); - -external procedure micro2(comm:byte;x,y:integer); - -external procedure plotwhere(var px,py:real); - -external procedure plotline(penpos:integer;txpos,typos:real); - -external procedure plotstring(px,py,height,theta:real;line:string); - -external procedure plotsymbol(sym:integer;height:real); - -external procedure plotarray(nopoints,freq,sym:integer; - px,py,xmin,xmax,ymin,ymax,height,xlen,ylen:real; - x,y:coord); - -external procedure plotaxis(px,py,leng,theta,min,max,tic:real;name:string); - - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PLOTLIB.DOC b/software/CPM/CPM16_MTPUG_04/PLOTLIB.DOC deleted file mode 100644 index 043f046..0000000 --- a/software/CPM/CPM16_MTPUG_04/PLOTLIB.DOC +++ /dev/null @@ -1,74 +0,0 @@ - Enclosed is my check for the user group dues. I received news - letters 1,2 and 4 but not 3. If you have any copies of number 3, - I would appreciate a copy. - - I have recently gotten BLAZE/pascal utilty libraries package. The -package consists of five libraries containing handy functions and -procedures. So far I have been very impressed with the package. In -addition to several handy items which are not in standard pascal, the -bulk of the routines support data conversions to and from strings, -string editing functions, etc which can greatly improve the data input -and output portions of a program. The package also includes all the -necessary include file needed to reference the routines in your application -programs. The package sells for $200 for the source and $75 for the object -files. I got the object file package for $50 at The Trenton State Computer -Convention which my club (ACGNJ) sponsers. Starside Engineering which sells -the package may go for a group purchase. - - - Also included this disk are two programs and assorted support files. -Both programs were copied from magazines as noted and modified to run -with a MicroAngelo display board and PascalMT. While not original, the -programs are usefull and can save a lot of typing. - - The modules p1 to pn are library modules which form 'plotlib'.Programs -tplot and tplot1 test the available functions. Also included are varios -include and command files for ease of use.None of the modules are commented -except for the credits, so you must refer to the source for detailed inormation. - - The hl series is a 3d drawing package. Hl,hl1,hl2, are the drawing -routines, and hl3 creates the input data base. I just got this program working -and it still has some not implemented functions which I left in as comments. - - - Both programs use hardware dependant functions as follows: - - outp(B:byte); {sends a byte to MicroAngelo display - if b7 of the byte is set the display - will interpret it as a command. Commands - may require additional data or cause a - response which must be read. In these - programs I used the following commands - a) $88- clear screen - b) $84- set graphics cursor - c) $91- draw line to x,y - d) $B8- set alpha screen to bottom n lines - e) $80- set alpha mode parameters} - - micro2(command:byte;arg1,arg2:integer); {sends a command - and two integer operands to the MicroAngelo. - usually the operands are integer x and y - locations. Allowable x values are 0-511, y - may be 0-479. With 0,0 being the lower left - hand corner of the display.} - - at(x,y) {position alpha cursor to x,y} - - intstr(num,len:integer;var result:string); - {converts num into a string result of length - len. This can be simulated by writing to a - file num and then reading it back as result.} - - I hope the programs are of use to others. Keep up the good work.If - you think it would be usefull I could give a more detailed review of - Blase/Pascal in a future news letter after I have had a chance to try - all of the features. If you are interested drop a note on the return disk. - - Regards - Ray Hopkins - 8 Chestnut Hill Ct. - Cinnaminson N.J. - 08077 - (609) 829-4686 - - at(o \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PLOTLIB.TYP b/software/CPM/CPM16_MTPUG_04/PLOTLIB.TYP deleted file mode 100644 index d92c627..0000000 --- a/software/CPM/CPM16_MTPUG_04/PLOTLIB.TYP +++ /dev/null @@ -1,3 +0,0 @@ - - coord = array[1..250] of real; -t \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PTABLE.PAS b/software/CPM/CPM16_MTPUG_04/PTABLE.PAS deleted file mode 100644 index 94cc1f2..0000000 --- a/software/CPM/CPM16_MTPUG_04/PTABLE.PAS +++ /dev/null @@ -1,36 +0,0 @@ -(****************************************************** -* -* POWER TABLE PROGRAM -* -* This program was extracted from the book PROGRAMMING -* IN PASCAL by Peter Grogono during a self-study effort. -* It is a simple enough program but it shows how to build -* tables very easily. I had to modify it of course, so that -* it would run with Pascal/Z. -* -* Adaptation by Charlie Foster, Oct 1980 -* Donated to the Pascal/Z Users Group -*******************************************************) - -PROGRAM powertable; - -VAR - tablesize, base, square, cube, quad : INTEGER; -BEGIN - WRITELN; - WRITE ('How many numbers do you want to tabulate?--> '); - READ (tablesize); - WRITELN; - WRITELN (' ':30,'TABLE'); - WRITELN; - FOR base := 1 TO tablesize DO - BEGIN - square := sqr (base); - cube := base * square; - quad := sqr (square); - WRITELN (base:2,' ',square:4,' ',cube:5,' ', - quad:6,' ',1/base:12,' ',1/square:12, - ' ',1/cube:12,' ',1/quad:12) - END (* for loop *) -END. (* MAIN *) - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PTEST.CMD b/software/CPM/CPM16_MTPUG_04/PTEST.CMD deleted file mode 100644 index 77c69ad..0000000 --- a/software/CPM/CPM16_MTPUG_04/PTEST.CMD +++ /dev/null @@ -1,3 +0,0 @@ -ptest,PLOTLIB,stdlib-f/s,a:trancend/s,a:fpreals/s,a:paslib/s - - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PTEST.SRC b/software/CPM/CPM16_MTPUG_04/PTEST.SRC deleted file mode 100644 index dbead02..0000000 --- a/software/CPM/CPM16_MTPUG_04/PTEST.SRC +++ /dev/null @@ -1,43 +0,0 @@ -(* VERSION 0009 *) -program plotter; - - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -type -{$I PLOTLIB.TYP} - -const -{$I PLOTLIB.CON} - -var clear : char; - aline: string[20]; - xpos,ypos : real; - -(*$IPLOTLIB.DEF*) -{$ISTDLIB.DEF} - - - -begin - xpos:=0; - ypos:=0; - plotline(0,xpos,ypos); - aline:='ABCDEFGHIJ'; - plotstring(1,6,0.5,0,aline); - aline:='KLMNOPQRST'; - plotstring(1,5,0.8,0,aline); - aline:='UVWXYZ.><$'; - plotstring(1,4,0.7,0,aline); - aline:='=^*%,&#"/()+-:'; - plotstring(1,3,0.8,0,aline); -end. -ÿ \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PTEST1.CMD b/software/CPM/CPM16_MTPUG_04/PTEST1.CMD deleted file mode 100644 index 6ffa976..0000000 --- a/software/CPM/CPM16_MTPUG_04/PTEST1.CMD +++ /dev/null @@ -1,3 +0,0 @@ -ptest1,a:trancend/s,a:fpreals/s,a:paslib/s - - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PTEST1.SRC b/software/CPM/CPM16_MTPUG_04/PTEST1.SRC deleted file mode 100644 index d140ca6..0000000 --- a/software/CPM/CPM16_MTPUG_04/PTEST1.SRC +++ /dev/null @@ -1,43 +0,0 @@ -(* VERSION 0008 *) -program plotter; - - -(*..................................................................*) -(* PLOTLIB *) -(* Plotlib is a collection of plot routines to aid in graphics *) -(* programs. The routines were originally published in BYTE as *) -(* 'Drawing with UCSD Pascal and the Hiplot Plotter' by Dr. James *) -(* Stork, Oct 1981. The routines have been modified to run with *) -(* a MicroAngelo graphics terminal by Ray Hopkins, 8 Chestnut Hill *) -(* Ct., Cinnaminson N.J. (609) 829-4686. *) -(*..................................................................*) - -type -{$I PLOTLIB.TYP} - -const -{$I PLOTLIB.CON} - -var clear : char; - aline: string[20]; - xpos,ypos : real; - -(*$IPLOTLIB.DEF*) -{$ISTDLIB.DEF} - - - -begin - xpos:=0; - ypos:=0; - plotline(0,xpos,ypos); - aline:='ABCDEFGHIJ'; - plotstring(1,6,0.5,0,aline); - aline:='KLMNOPQRST'; - plotstring(1,5,0.8,0,aline); - aline:='UVWXYZ.><$'; - plotstring(1,4,0.7,0,aline); - aline:='=^*%,&#"/()+-:'; - plotstring(1,3,0.8,0,aline); -end. -ÿ \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/PTRS2.PAS b/software/CPM/CPM16_MTPUG_04/PTRS2.PAS deleted file mode 100644 index fe3b8ac..0000000 --- a/software/CPM/CPM16_MTPUG_04/PTRS2.PAS +++ /dev/null @@ -1,155 +0,0 @@ -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -{+ +} -{+ PROGRAM TITLE: Copy With Prefixed Char Count +} -{+ +} -{+ WRITTEN BY: George W. Cherry [1] +} -{+ +} -{+ Modified by Raymond E. Penley, 7 Oct 1980 +} -{+ The program reads in whole lines instead +} -{+ of single characters then prints the whole +} -{+ linked list of "lines". +} -{+ +} -{+ [1] "Pascal Programming Structures", pgs 232-237 +} -{+ Reston Publishing Company, Inc. +} -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -PROGRAM CopyWithPrefixedCharCount; - -CONST - default = 80; - input = 0; {Pascal/Z needs this crutch} - -TYPE - items = string default; - P_pointer = ^queuecell; - queuecell = record - line : items; - next : P_pointer - end; - S$0 = string 0; - S$255 = string 255; - -VAR - charcount : integer; - currentline : items; {the current line} - FrntPtr, - RearPtr : P_pointer; - ch : char; - linecount : integer; - EndOfLine, - EndOfFile, - done : boolean; - ix : integer; - -Function length(x: S$255): integer; external; - -Procedure setlength(var x: S$0; y: integer); external; - -Procedure KEYIN(VAR cix: char); EXTERNAL; - -Procedure InitializeQueue; -begin - FrntPtr := NIL; - RearPtr := NIL; -end {of InitializeQueue}; - -Procedure Queue( currentline : items ); -VAR - new_ptr : P_pointer; -begin - NEW(new_ptr); {reserve a new queuecell } - new_ptr^.line := currentline; - new_ptr^.next := NIL; - If FrntPtr = NIL then - FrntPtr := new_ptr - Else - RearPtr^.next := new_ptr; - RearPtr := new_ptr; {complete the circular queue} -end {of Queue}; - -Function QueueIsEmpty : BOOLEAN; -begin - QueueIsEmpty := (FrntPtr = NIL); -end {of queueIsEmpty}; - -Procedure Serve(var current: items); -VAR - curitem : P_pointer; -begin - If QueueIsEmpty then - {nothing to do the queue is empty} - Else - begin - curitem := FrntPtr; - current := curitem^.line; - FrntPtr := FrntPtr^.next; - If FrntPtr = NIL then - RearPtr := NIL; - end; -end {of serve}; - -Procedure Read_a_chunck; -VAR - done_reading_lines : BOOLEAN; - - Procedure GetC(VAR ch: char); - { Recognizes "control-E" as End of File on the console. } - begin - KEYIN(ch);write(ch); - endofline := ( ord(ch)=13 ); - endoffile := ( ord(ch)=5 ); - If ( endofline ) OR ( endoffile ) then ch := ' '; - end; - - Procedure GetL(var LINE: items); - begin - setlength(LINE,0); - GetC(ch); - while not( EndOfLine OR EndOfFile ) DO - begin - charcount := charcount + 1; - append(line,ch); - GetC(ch); - end; - end; {GetLine} - -begin {of Read_a_chunck} - done_reading_lines := FALSE; - while not done_reading_lines do - begin - write('?'); - GetL(currentline);Writeln; - If (length(currentline)=0) OR ( EndOfFile ) then - done_reading_lines := TRUE - Else - Queue(currentline) - end; -end;{of Read_a_chunck} - -Procedure Process_chunck; -begin - linecount := 0; - while not QueueIsEmpty do - begin - linecount := linecount + 1; - write(linecount:3, ': '); - Serve(currentline); - Writeln(currentline); - end;{while not queueisempty} - Writeln; -end;{of Process_chunck} - -BEGIN {Main Program} - for ix:=1 to 25 Do writeln; { clear the crt } - InitializeQueue; - EndOfFile := FALSE; - while not EndOfFile do - begin - { INITIALIZE } - charcount := 0; - MARK(chunck); - Read_a_chunck; - Process_chunck; - RELEASE(chunck); - end;{while not EndOfFile} -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/QQSORT.PAS b/software/CPM/CPM16_MTPUG_04/QQSORT.PAS deleted file mode 100644 index 7d086bb..0000000 --- a/software/CPM/CPM16_MTPUG_04/QQSORT.PAS +++ /dev/null @@ -1,183 +0,0 @@ -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -{+ PROGRAM TITLE: Quick sort with minimal storage +} -{+ Test Program +} -{+ +} -{+ WRITTEN BY: Raymond E. Penley +} -{+ DATE WRITTEN: October 5, 1980 +} -{+ +} -{+ A program to show the speed of the quick sort +} -{+ with minimal storage algorithm. +} -{+ +} -{+ Average sorting times in seconds * +} -{+ No. of items Shellsort Quicksort QQuicksort +} -{+ 1000 15 8 7 +} -{+ 2000 34 20 14 +} -{+ 5000 112 50 37 +} -{+ 10,000 213 106 78 +} -{+ +} -{+ * Z80 CPU operating at 2 mcps +} -{+ +} -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -PROGRAM QuickerQuickSortTest; -CONST - Max_N = 10000; -TYPE - index = 0..Max_N; - Scalar = INTEGER; -VAR - cix : char; - N, - i, ix : Scalar; - A : ARRAY [index] OF Scalar; - - -Procedure Show; -var - i: index; -begin - for i:=1 to N do - begin - write(A[i]); - if i mod 8 = 0 then writeln; - end; - writeln; -end; - - - - -PROCEDURE QQSORT( left, right : INTEGER ); -{ -+ WRITTEN BY: Richard C. Singleton -+ DATE WRITTEN: Sept 17, 1968 -+ -+ This procedure sorts the elements of array A[1..n] into - ascending order. The method used is similar to QUICKERSORT - by R.S. Scowen, which in turn is similar to an algorithm given - by Hibbard and to Hoare's QUICKSORT. -+ -+ Modified 6 Oct 1980 for Pascal/Z. +} -{ -GLOBAL - TYPE - Index = 1..N; - Scalar = - VAR - A : array [Index] of Scalar; -} -VAR - t, tt: Scalar; - ii, ij, k, L, m : integer; - IL, IU : array [0..20] of integer;{Permit sorting up to 2**(K+1)-1 elements} - i, j, ix : integer; - alldone, d : BOOLEAN; -BEGIN {$C-,M-,F-} - i := left; - j := right; - m := 0; - ii := i; - alldone := FALSE; - REPEAT - If ((j-i) > 10) OR ( (i = ii) and (i < j) ) then - BEGIN - ij := (i+j) DIV 2; - t := A[ij]; - k := i; - L := j; - If (A[i] > t) then - begin - A[ij] := A[i]; A[i] := t; t := A[ij] - end; - If (A[j] < t) then - begin - A[ij] := A[j]; A[j] := t; t := A[ij]; - If (A[i] > t) then - begin - A[ij] := A[i]; A[i] := t; t := A[ij] - end; - end; - d := FALSE; - REPEAT - REPEAT - L := L - 1; - UNTIL A[L] <= t; - REPEAT - k := k + 1; - UNTIL A[k] >= t; - If (k <= L) then - begin - tt := A[L]; A[L] := A[k]; A[k] := tt; - end - Else - d := TRUE; - UNTIL d; - If (L-i) > (j-k) then - begin IL[m] := i; IU[m] := L; i := k end - Else - begin IL[m] := k; IU[m] := j; j := L end; - m := m + 1; - END - Else - BEGIN - For ix := (i+1) to j do - begin - t := A[ix]; - k := ix - 1; - If A[k] > t then - begin - REPEAT - A[k+1] := A[k]; - k := k - 1; - UNTIL A[k] <= t; - A[k+1] := t; - end; - end;{For ix} - m := m - 1; - If m >= 0 then - begin - i := IL[m]; - j := IU[m]; - end - Else - alldone := TRUE; - END; - UNTIL alldone; -END;{of QQSORT} {$C+,M+,F+} - -BEGIN (* MAIN *) - repeat - writeln; - writeln('Enter number of items to sort'); - writeln(' 10 <= n <= 10,000'); - write('?'); - readln(N); - until (N >= 10) and (N <= Max_N); - - writeln; - writeln('Please stand by while I set up.'); - {$C-,M-,F- [ctrl-c OFF]} - ix := 113; - FOR i := 1 TO N DO - BEGIN - ix := (131*ix+1) mod 221; - A[i] := ix; - if (i mod 1000 = 0) then write(i); - END; - writeln; - A[0] := -maxint; {$C+,M+,F+ [ctrl-c ON]} - - writeln('Ready'); - WRITE('Press return when ready to start'); - readln(cix); - writeln( CHR(7), 'START'); - {} - QQSORT( 1, N ); - {} - WRITELN( CHR(7), 'DONE!!!' ); - - writeln; - write('Print the array (Y/N)?'); - readln(cix); - If (cix='Y') or (cix='y') then Show; -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/QSORT.PAS b/software/CPM/CPM16_MTPUG_04/QSORT.PAS deleted file mode 100644 index 937faa4..0000000 --- a/software/CPM/CPM16_MTPUG_04/QSORT.PAS +++ /dev/null @@ -1,114 +0,0 @@ -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -{+ PROGRAM TITLE: Quicksort Test +} -{+ +} -{+ WRITTEN BY: Raymond E. Penley +} -{+ DATE WRITTEN: October 6, 1980 +} -{+ +} -{+ Show use of the quicksort algorithm in a Pascal +} -{+ program. +} -{+ +} -{+ Average sorting times in seconds * +} -{+ No. of items Shellsort Quicksort QQuicksort +} -{+ 1000 15 8 7 +} -{+ 2000 34 20 14 +} -{+ 5000 112 50 37 +} -{+ 10,000 213 106 78 +} -{+ +} -{+ * Z80 CPU operating at 2 mcps +} -{+ +} -{++++++++++++++++++++++++++++++++++++++++++++++++++++++++} -PROGRAM Qsorttest; -CONST - Max_N = 10000; {Upper limit of all numbers} -TYPE - index = 0..Max_N; - Scalar = INTEGER; -VAR - cix : char; {Global temp char variable} - N, {The number of numbers to be sorted} - i, ix : Scalar; {Global indexers} - A : ARRAY [index] OF Scalar; {THE array to be sorted} - -Procedure Show; -var - i: index; -begin - for i:=1 to N do - begin - write(A[i]); - if i mod 8 = 0 then writeln; - end; - writeln; -end; - - - - -PROCEDURE QSORT( left,right: INTEGER ); -{ The classic Quicksort method by C.A.R Hoare. - Presented here in Pascal. } -{ -GLOBAL - TYPE - Index = 1..N; - Scalar = - VAR - A : array [Index] of Scalar; -} -VAR - II, JJ : integer; - Pivot, temp : Scalar; -BEGIN {$C-,M-,F-} - II := left; - JJ := right; - Pivot := A[(II+JJ) DIV 2]; - REPEAT - WHILE A[II] < Pivot DO II := II + 1; - WHILE A[JJ] > Pivot DO JJ := JJ - 1; - IF II <= JJ THEN - BEGIN - temp := A[II]; A[II] := A[JJ]; A[JJ] := temp; - II := II + 1; - JJ := JJ - 1 - END - UNTIL II > JJ; - IF left < JJ THEN QSORT( left, JJ ); - IF II < right THEN QSORT( II, right ) -END;{of QSORT} {$C+,M+,F+} - -BEGIN (* MAIN *) - repeat - writeln; - writeln('Enter number of items to sort'); - writeln(' 10 <= n <= 10,000'); - write('?'); - readln(N); - until (N >= 10) and (N <= Max_N); - - writeln; - writeln('Please stand by while I set up.'); - ix := 113; {$C-,M-,F- [ctrl-c OFF]} - FOR i := 1 TO N DO - BEGIN - ix := (131*ix+1) mod 221; - A[i] := ix; - if (i mod 1000 = 0) then write(i); - END; - writeln; - A[0] := -maxint; {$C+,M+,F+ [ctrl-c ON]} - - writeln('Ready'); - WRITE('Press return when ready to start'); - readln(cix); - writeln( CHR(7), 'START'); - {} - QSORT( 1, N ); - {} - WRITELN( CHR(7), 'DONE!!!' ); - - writeln; - write('Print the array (Y/N)?'); - readln(cix); - If (cix='Y') or (cix='y') then Show; -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/SD.COM b/software/CPM/CPM16_MTPUG_04/SD.COM deleted file mode 100644 index cb3c3e5bd6a1cf1ce469efffa558fe990ff36889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmcIjUr1YL6#wp@^UXwav)jPBI5ao+hSA(XYEu~Ow%!glmBAJZjuwWk3ohDV&Fx~u zX`8egv}11@qw~c*>|tZDhq2NU*h4pORGP5+pj02EFQI4|w~Q((ok-mIqON=D+wQ}6 z&+mNaJLmWP&iTTGyrCxOu>>`SNxYFx#+zuo22zs)MD^2rv6AFkcO?ZO?iepp=8%u_ zk_SCT6RmldyE*fiBLjjZ?_3*N@>_e`CWo2Ay`)gIvz!#f11ICXWbV!QeKCBF6l#k7 z1xFiSKc#{F8E2k~Um!*=Y44LHjGV+s!;jVOaZ(7erWN8FfXgOm+Ij7at8Rh2XFP?{ zBTlCzcH;a?Wbr?72w7NFeF|DsK23w_E~p%JG4}G!iK&I3cuAIf3FBq=@N$S}*RyBA znSn&N()rH29g)uT#gvk{@;n)xUec{`m=_2;bYI6AV*=twH7L=2xdA|2XKRQZi> zUll%QU-(mUea>SUjkMNNxx^P%ui0IEe#vX0Qg_kRT%Dt|sd@G4Sb#~u2LjDwTAiRk zHC3Qt9|<0iUGCzMR`+O5u?Cdk)G$(rVO?FI`P&sQzoPGg8$L}r9~sfIn(J{NzLvlJ z&|cuH7@`72RQW*AfflcX2J<0{q5KwSsq3JrkHOW~;qpyuVro$Rs}6$d6EK^cA7Q;i z(3$HAIA25EI*8ov5bjhugp$nCy82_#n5yfdfVoO*JhH*NNMe`}bsN+jKq8FAEn!yY zNQ^qa2*t`bf^!6FLgfL}0`@b2!kCTD6_~bf2^y1xokc}TL&Bf9hyAbXL>rt|Fk?7! zR6q;+trgrTer|XZZutHF)sXcn2^yPFw~u~rx%xH)k&eED*WLlw35n(qp5Nz|60wMH zbLItD`{OuZwaK_l<(GGy6QVq|%hoNnnr+uhShH;l8iKTY2`bn+L?h_4}7R@#r zA43Bz-YfY5k7MM|@doM~2l>8Oe>TVg>&n%Av{Ofq_K@@nj-#t@fyNQC*xcH1c=-oW zILm}9iW4pNcjA1Y^sSiw(Aa<_p)w~%+wEzQrQ6s`P_cBtCc3$Fg{Fk;Jmkd!#3qO%J7%WM*6$N{uTyOX;^V zxpZbU6^*R0J|?tIx6gZ56YQ^`#l8X6GMAuHj~n$Qn%$2NX@UChU#H9B+55*cg7$lh p{VSB`_gFj=nCV^mQj{9;8byhl0iq}9-(~WgZ}-}BHvh-1e*kK+1#+|aewG>2p z5fM*bJP0Cq^^lYFoDDtf!eB#)2Xjdd%_S!(g?fp8ljP8wA3WyqzW2TPhKVDT)*Dh% zm$eazep~xwoBfmnd1tPO2Ob~vhdt;gGgkNz7hu^XGS@exj z5xs{EBBr-dWV<(AeuIs3Ac_1P64&J$uqODlpWP{0w0uFQ8q%L2J|V-p#gs1B_!8;- z4KI+E^i~wRh_r2Vz6}p+cc0Y;Bg9>=)c6x{`Ukkun+{%&@ibBV2@)7FU`Di@Ci}JB z=YxbRs8nf!VR%IG=ScwSpw<@!AMW!(w7&}}s-*a9r1${{KO&t-_=$AR`tM1pST2<>xa9CGca(F`eT~&fdcNXX9%TyvsFVlIeU{cRnw%r$&>srjF8=h6LyscRD zHe26vtX$rs$@I+>UD#T6Sk|KtmsebR&t6T$qERYpfn}_$WoGELBwbqVyD7b&m`%_J z%*+=|2dv}brc3T5wV6k=Y{SmPdKz`i 0 do - begin - m := m DIV 2; - k := n - m; - for j:=1 to k do - begin - i := j; - done := FALSE; - repeat - if A[i+m] >= A[i] then - done := TRUE - else - begin - temp := A[i]; A[i] := A[i+m]; A[i+m] := temp; - i := i - m; - end; - until (i<1) OR ( done ); - end{for j}; - end{While}; -end;{Shellsort}{$C+,M+,F+} - - - -BEGIN (* Main program SHELLSORT*) - Repeat - writeln; - writeln('Enter number of items to sort'); - writeln(' 10 <= n <= 10,000'); - write('?'); - readln(N); - Until (N >= 10) and (N <= Max_N); - writeln; - writeln('Please stand by while I set up.'); - ix := 113; {$C-,M-,F- [ctrl-c OFF]} - FOR i := 1 TO N DO - BEGIN - ix := (131*ix+1) mod 221; - A[i] := ix; - if (i mod 1000 = 0) then write(i); - END; - writeln; - A[0] := -maxint; {$C+,M+,F+ [ctrl-c ON]} - - writeln('Ready'); - WRITE('Press return when ready to start'); - readln(cix); - writeln( CHR(7), 'START'); - {} - Shellsort(A, N ); - {} - WRITELN( CHR(7), 'DONE!!!' ); - - writeln; - write('Print the array (Y/N)?'); - readln(cix); - If (cix='Y') or (cix='y') then Show; -END. - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/SWEEP.COM b/software/CPM/CPM16_MTPUG_04/SWEEP.COM deleted file mode 100644 index 3b8e3e643fa997f9cc9c55fa7e1cb50dff4ee478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26496 zcmdVC3w%`7xi`FXB?-yE7*G-*%$|u{_COLQ7s!xIfZQOE1QHTpkjq^545>gM0h2(8 zvDR`ttrn}&)_T8GvDT+-DUwx0E@wVt&mQCze=^ruI?l7QgYFg&36A*N>_gX7!yQRVl}E#6yS}ImIrDTF+R1J5(tI7bFuu@RQaGj6rD-u#|0`C1AJq$fiz!ily;@$K%ij++Nooel|HC3{ z^aMREhOj+M(DJDq^_N%Dd}yVf#>o%Y4Ww<;HTuICezesT6U1;TM?W6S6cxrSf0o04 zX@Tm0UCUpx$gfW2&j)i4Y*kZ|y6g0nM6ar`3@0zk_@It~Sqd13U|G5kL*@<}}bKNbOYzY`;WU!cOr#}$4Y z!v`$#q=i)e#JKXxSf;jEQrmIX2~Tb{#fIhQ6RhgvTTM~%9Qu=wwaRbKH6&Vj&MHsi z4gY1Kwq?{7opGv!It}QLk3)Y`tSn?u;j`lk_r=N^=TPA|9lF08EBjPb`15g)KaG{A zFQCHb#udI0E1yfH!l0f>&F;Qfc|#Hv{$d>D`B*;5DpxJ!ldVBLJwLAY%UE7zmH9=~ zs%KpJ)HpdQiwa*DS9oI_?3fCJUCD?d3$x}VYcza-w0RPlzxtM~LF*sRQ73X~>K9>W zY&0OB%%v5S07|V2Cc26ZX;%IQtGs(LhN5fq-nbq^s?~VbVz|yKJraj9%HnyQRlb;` zon__It@5eGJjZD-T8ybygW77m&T7c88Z)dkko`tAdt*RfE}q2CvC4tPpr_SYdEP4D zvDh%xYMg34d&OHYNw{dy0SVCRP~@Z53+OYD=I7^GNd|b28?ExwQ^sg0eL_R&Vt6Qx z#3zs=yU1kxT6+W9$Hx$YoG^mVuSO6PL;$5+g`kU3ymVEAHlhZ_T@(0=tAU{ihUFhu zR}hvd-+<-v*MOO8h={Fz1cQO~=3S&q>CbVz+L|Z*CQg2PvV7AdSxlg=@maKgw(!fW z@(z{OZ}CXhgrLiFO!DwioVM7i)0SAFP3;P+u)^vWO03jjTN1*GF1ChzmM>gZ5-uB1 zrV02RCL+`9RV`TA_!coCZ}dV$Es-{g#+j}njYf`v0vwGtK_HHcVR=D2h%~$wd;Z}l zI9zuP#3DJRTPC4BOwA*$Pl7SBDN(PjxAN<)@|?-qYAgTpR=J{Hc-NxSDV2J?++vXJ z)!H>yVU5)%R9gq&zzGuCtp(Onro9HM&;ad~GVQ&cNbIp5EDdXlq0?3}&Y6i^RmCix z$-u1bs@j1xZMoIB%IX@`ClcjKt56Q&<@BPKl&Z8wP2v(w32Xoj$Xva4HC6kC)z&mZ ztk+|1iQpY*)wQ6?53$lvu?B*1^~xIpPHd`7UlZGsjBHkm6w|Ec7iz6(&J6P|qx&sz-7ds|JD!Y%ll*nG0ZYTN>sx75oeR>8Aj}nTTSsnIX6a__H8vyS4w%aH6${BIV>P%F~T;J zVGB-c9_hD}NzGcjRj^yT3@uiEFZpcwlf~M1E%KSgT89m{A-l@0eH~ zsW?Ox+5?RH!&c#tRsBzLmWMGA2GR8)+pWTFsJPvlW{Qpsx?8P68yv*}t1?mD z8ukETXLLIn-NrP1CM67aTNuuV_5<-M@{)tsrvOq1dXhhR0@~Zd;33czDd0p8rX)0q zknp4k9pl)EkO{LB;xtkf;XXpPUr0LPGl(b9a#Z1EkSR z(kOM;_-2_8e=@eFYn^k*86 zkD1Y3R^fZ#?=IFUzf~dON5O<{{XxVWe-PHaPq-6Z#db=Ay(-}c5cMvr)K4kB_Ip;T zRRvQF;vM}+MZ*fD?!vHGF@=V9^b~T7=a`T9a;qsW;*joT4(T4N@g8zW)24WkP_}Z| zxv75$cR_Q%@gqxcU-n1ZWPMhvY;io&lT(6&hGVU{y}T}B&>Bpg;9TJ zqx;AdRAfv#B)?1BwVzml3H!UBveI}o9AAuT?AxTwbLVcDTGd3LWT4~EAS>u!C zrL}<20fn@iN`jnUR%pCu72acrKd=fPSfd_+g0qoO-H|xf+570||C&mr|9M5(gafpa zy5l{?`xEDFYO;%THQB`5<+`CHxOE{L!=({E|U6Y{NVo+Tjw!>kI{V6YZ3@Z8K>nRDQ^sv&nA~ zgXrF7QcZyPDgvQm5O-eB4fL0)&vND1fqmN7`L0!CqSg6hNZ1w z5F55%)o0leh-wBQZdbxSEa*U8vOWT_fkAX%jiWUJv4uh0bG0n@MW;>qo%851}? z%OIF(G%<)bwucrra7*DOj1t>HY-GY(#v{EkjadB$A>sG1_U`Sb>mn46B5X2EZZPq! zR4Lny{D;=~X%x-bw+Xn^AJRB^%b@+tiVC0bnN=6^0H0e;)5rsiTIGKt2Bfs&-`!44 zDB|SaJk2BhdK%vqM$-8T1xv88{?JM;<}C!)ls(2B)8zIW086YMn-=OB;vmH)XU^oO z*x&;Ygh{l?Z!(}?Gayn5fIQNH8`Lvxs@N{wb*U-tQ`4@w=9y!o-G?y8))uawX(P`U zS{3(fvZ+TRH8oBBLU4O1%(i7jsS@BIKd2$BYBiTu z3CwV6RF#B^ca@4XRuMxL0Go=q0Ea}zECdR!!bwcC9oj^Wv~z9zTpRZJ!S-6g#?QB5 zua8~+s_RLgmDh*#$+xrqe|NiSiqik%?B|=%FSLaWieG3OL$FW&Hig|FMriTRpWi;t z6?*tAo4jY1Yt+k#HxqIGPDb}{+s93|!c3bs$HwQ_f}y(~Gr*$^@Qdx^+zQ3u@@z^B z&S0Ynfe+@U?@&{c#bP|y^ZDrC#gg}W4>X}IwDC)9@=J?J0e@qt?`Np5-!aau5)aF4 z{IU=avu+?}A7p@Yc8uGqkZ#e1k=^dZJ_y!?GE~!wX;Mfm*JmmP`a1wco(hok6CK zOkm0wVd~#zc=(4IQ#*nqo_0$%ij_QS6CSl;w`8MO$$K;S$8GYabl0dngMZd0e=>uA zKG@)AL?##`7~G^DG46?PUQGsyB;cfB#e8?f*&Z``4*g;>;t1;Hjl zQ6Ow@Eye`zjxc<}CY-QE{f({jo=g*dW%D6V%Nynpu)uknItvRNc*3`X7VLc>4Jal6 zvO4k%Cm_rTn^c`ftEiJUq$Btzr(fM{9DW3m!}y~Vz>^V1!uU@D|4G8h$owKrxQa%} z*JvORh7lQIO`XmU*wk)xFZ?v7gx^sg($b2bslE`__15&Tu0Q@i()C2Bh^{}0==v`< z;V&UwXUr5XK!tyai0I=#v5ieA=^ao)_JEvN0kx6)R%)?ooHnz^15`TgUu@Fr>85Uv zbn`5>PQGLlF4_FB3^w4jU)uODZL~tZWhTmf!k0F75TmSQuhv%%P>Gtt0@Qf5&J%6Sith=_If z`I*$RI|$()2Kjeu5R`_QqPM<+IA7VMpD-Y{CRfn^6Q&wMzjhY*2&0dgh<@cP1-$|R z^f83~#jS|;M$msT6Bs5AAMg_zC}b5LMU#{5h{kHC+If{7QEg$eU3;CKzs^p9>J+;% z#g0wb1G9QOrd#RoY%COQPO*=VR*z7ixn}V6Eb5_tKzpQl8R}{F&|+X<7TH`dd>x5r z%&-gB+q;Ar_Q+yjntkG8V21r`i-E6$j9(1Qum=|dGwkCR1L2ur2KmvaW{3PJ{|a-%6KBn7cI_NHKgS-NHQy#^{#OjpwBxE-Q)gFZP2NtkW_mD( zS(B1%*1R&C&$QF58I{rF;pf`rAF>HEGlQ_c$*^u2KVg!NH_Rb6D;dZs24deaZvLm~ zdSQ^1zz9#@0X9Cb@!B&ybQY0q=NH-KGqYTm51`PS`f)+rz8Cab;n9 z2}fGy+jYPseVoB!41Nm*Q|g&Us^?J01t%GD)D-$x^Q5efa24-i8r#3abYpl0P8u@? zHMW##>?exGurxO0*^PO2*Jv*z(aZ3#UEbRa&jUNI+SLq(A!ruP5BiV-Ci*hFuneLX zkm%WC#(d^Xl6a*H3c~V7y1>ivjQC3$62hbj8|LpB@t1eNxrBD8d~wJmEdhW$tyFVxt(;E@*c zm=}|e{(wAh6fyIRMkY4_WyA#xF?v-T>d)ADtv^L3E%P6w#zSdkO< z!)dqJVW^pO_`>?-;iqh65tf-FCig*gcAG5P;upXNOsjjyCI{DD8Lb{I?a> zZ8~Cohc3+eU%!ddyZkJ6Ztmw9Th9?&{AI?`mGNrmVNv~Sbd~m~oj=Mt2&C?_^FOr92Nomz_((NI zl6*FYo#7_2>k#k)QGd9SXj&eLqJPUy%9xiKR>l=Z`UYI+2#X=CwQG;r`D3Bs-b~PZ z>{bd(%?ShYIg&uSmC^AE8}6m1-K;ahgS_7S`A2>hHQ=;!K~pVQqa?8N}tX~%Je_6a-x7+Z1d zw9^Pyh-sg;^H1632Ns{@ylFQQQ{BL!{gxe19I@D?-)06GYazydZs(5^WBhYhk$>JU zJU@>7dOMbEkB+DQlAV9yD(dL`SMB`EcKLCle(Xll1{Y$15wE&Yx;>MOlUWM(T=0))n(C<6>rHYwYd;Avj^@-yj2&o}4>=__&{(`wcqoqR~U6 z3l|Y^99%hOl2I}ETM=QrbXdxdzWkU z*7+ocY95I(g8?;JOq0W6(4JdAkM_H>sgm~G@7cq9?)?_^dv;|TT{O>h#X}o#6i`I# zuwlq<9J0H-j(KQ-)OJ-A_5z^|6W!|>2MLgjs5Q!7;je@Mo5D|MZWP{8=0-y0ev?pT zL@RN3cIbdD)~6QrevCJEHAjk{uMlHnS&t1!bTE`2f@Z9++VCc1#I8gL{+FF11fN>i zl@1=Fp$&@=%%9Ky(L&e9=#YbMp?qYKcFw189w4G9z-O9|J8DYlAL(itT8FQrb-v== zf@%*nVU_IO*+;)Fzby6=TmQJS#NX^+0g2OdgJx^)Eo1Hy%Ew6_2)Zw zKi`eZSl}8vAej)NOdBuq@!~jDq6~)*Q75k?Y6tDc_ZbI%VUXMeo_ZV=yfB)y0F7~R z4F!ii(wzd?h+zS7wUBW&@phC-qzh3=qA^K?&n{cw!4&BltzW>Wh*+R(VsDP0j0~*@ z6GU2oUMC9IiGCqLR90b=MYxB00iy=zrU_zb5gJ*9xebCbMRbjxUJxEx5wI>OpPweu z6}&$xSMd1jMY@|cSu{>YBg5AatGm&4bc!`$aUH=(TcB$!uCD>`XA4_Mtrln@l`JY- z4amwt3>}1(nidcbm)n>U+XPbLVy48~ET)u5*FwYpMwOwZvqzfE?(#jv3Td%ROIheI zo#}6uD9nQX(n)`pC+ii(rH@k_Spr*0Mlm#FVKn?wM*Z&aBt>{LL@W?_jfiVvz^MZf z={RF}mVN?HztOY3zg8rRc!TQrVumgffe-hORvf>P)Mkp|+m=oQ4^6e> zmKX%d0#sK)hVCy?06caf<8Q7g%w^PRqNjeu&DDP}J$y1=9ssd3dnsmN5MJkR(YJb} zN(Ie)QJBxr=+WM|5V(9Oprc?Cf62mes*x%dhF}#G8H*Svf~a(jFhLm+yY{}j@LB+L z*HyV;1)7e>r5Pt^5pV70}w_Sa|;uz!*|fAD=stP z)-&N=v4mEe|3l$~g`ze~xP5|2{93SNV)ghv zi%AUbSxjPv28&;kgH;r8sU)3&Ly}StNdab^F(etJ^|R zC=^Ya;BxmSgSJrQbK$S}JUD1$o;YUA6)C<}okQ!qC8BmQHPCCzM4=2GXK~PDD?q!l zg(A@>ED^DsTqW`qFpI^=MRj92xkTivL}ejq%_b7vXbft2>VQ<5nLUxfT2WX#jzAtw z2~~`Ve35^fjI+6he@A)C$7+(oH?R0miR%7ItLz_ zxy8|J5}1>|$mZ9H@>mXlb=rJU>dB7q&pi9`9P;ecj!xcwKMuvR@io$NoX?Qk4@%dW zEd{dpI&s_@mHKyA&ba>d$R;z5g>4>rZ;r0f<5MNeaon&+?#u~Hdq=uAhZ5R%)DP#V z5>X*>TuRbf%YLy%Q@Sp@TGQO3sit?M*wWh6yhl?f?mN)bBHA;Bq@5lip7Y~<=>Fz| z4>~<^e@>@sj`Q%GW)FW8=iztZ+s%1^Q57ZqGe;FIB`;PXc*zY@jPar>mhy4nN{Zw7 zjKw}7ic`mPX&04hl&_%@Z1OJh+mzZEq*apuj!IPmy>9{6!FLkgs>wj_>c_%Dl}y_R}SI4F_N5*WaqP^4TetFXMWG2`wu?& zzTYFSG59^5uFp;NWz~LpM!nxd(Gz)7z58~<@W4P6ciZ~SeM1+=So75cVc&!y=q zbOW`q$$fDq&buPF&o|WNPw_6vJ>kvC)k>1H-*KDUDtuM_0vjiN1k>OGAWUOl~XG z{=z&Eh;iSZ8|%I)cV(=38exs|9?G5WZOQG@$xDoqH5U=JCB`^+ORj%lE?0QTe=)$h zpUQ1FoHTbNyMLJ5W9T&xYd45;Q(jMze1E>MLA)4))B70K?ma#x&< zx%^gce0(5&@U7fRBWhkdXRB|IwB{vqML`tbW2RFIe{OrR;k3C22uw#p_37 z^Wqm}7vVPxON=A&+}Wga)AKMC@=hm>wV%$RLiS`VM7te%jL8TE`MrG5<$KM?4my$k(laGNWQlKChpr1%REGWM8Vc)^z5 z%O7#~^H^qIo4Gf-5YBNRYrBCvCx4A3dWyP{1(xDs35;9yLs*vUEw9;Tafz20#hNXym$-rexv|i z>9GQpVB8{-MeWlSyPqkLTuV)y;U=-juvIi{6T!J*vuNBZLPX%d_p)m#sHb%qHi^bf zVxZ7HZHe(F@j|yZmc4I9OZly(ZsfL!#kHuCD+}e4LgZ?Vn?uPj3oiV z-L!;YF5K!~w4~$j-Ds>JTfYRrP!-V3f+4Z6z(lc3FS(!xKwf~*q|Hd((w`mRaWZl zS{f)LBXQrO)F+evo@WS3-A^q=F4?mw!jCl7K2I{?gC`U;! zR`1YK+mCtM3Xznvi~x{r%L#0<`?rPg0&RtTQ0@|Auk@S3K(hNk3fp7d?-e3U!(am` z?vD$Dc&D61)hMc5XjD7~G$Ya|p;%~a=g*jr4Nf!m$qRw#N}=&TKz@$#wQ~!N#xv&E z`WXdjnh}1+F7j4Ul1nhVjxn%$BO0F=tT$qFzr~2_D_e{s_+n!97%U>cU6l4Mmm7;P z$F&m`!&4UUEb5iIC*{%JoKYRd1}$f4=a6U%-;ijGxZ(Cmq(0H z?L}icIpuRB#@N(?ob#FIrN0@|+fv+L8TAEO$i{UPkNzHjcz`r!;uv@PvVry@cf&HC zyHa>5>Ix^DiULVz@JR6%FAF5$(WZ+{fhX>fZd|r1+3(|{qY6{J>z3(frngDu%Ydf+ zVr|dSW)t^_v+&YTdrCi003HZzgun&_(vD?kV@1!4zJ6cufc^`0n-Thr5x z;uQDMWz8FzPDU<`4M88?zbspGHV5-Ngn4t>>6{DOPkZ2dZS_;eF5H^pesdX38*4@; zU5GlJ168HC&n$z2{<18npySJ!g2sXxLZ@>@GxgwiY#Ecg-PKQ!-nb%9FbQ!d1`|x#YJ6D<~`Yca}g*t7WDz7SK3|# z`#f9(BW!~i$gdPhu!@wE@^>i#xL+12X82RU|FWo8`fd@kub&mYcJ7x&%nTJgKSgUp ztH|#oGvxP+($ogOw6Iv-UA#?hFUIyFJ#d>ht~k)`K3^m+ESCC<{JIKXAZ9R7G_0%f z1)|-Q@C{)OOB-PEk6};hkPZ#?dIUq%v0Pf0tJm9Kl<)2@0@i#&yHB?lh*Hy2Yll#j z*A>tVRuykY1qDZR^xfy-*A;`8O~spw|86!Hb8$BnYbu&sc3bvqYHtx+9J`v^IN=NP zqPf^dY)SKAL2$pAMjwxwi;-Tybd_}Kye3P z)KT16tx>(jb@@$7O9>{#ftQ&s_ZP<;f?)3y$HWN#VMYk{Qt`Lua*0De^HS5HV$-}+rKXWynq{%%F%{!Ct)Qwi0i|i)89<^|QkgFG z1wjwFOjZL1%@RKKHnklTTUx#Pmi<%m%``~ZCL5hmOA{}a>tG)ZKZ=2 z#M;#keyKz1G^y`*sFIY+o41*S`yE|pqenku375Oi#Q(s-ev?|+m&+ejv9-U?=i}42 z$g5Z2seQu1Kjx5AN~KRHfYxP&K}#5D$rkO?4*n?y8eJm%$e}&%;Ez+5|G7inxkC7< zgEpl;e#p#z_3%(I`<{~h3CrRz?Twnw3nvAiIeyZZlCB&%>a8r{dmQq!C4vHW7_OWF zjVUPt`Bn-4B7qpEqu=fhLk7VvoFtgLOZZGaM9)_7RWyW;CDQp4DQ`J1Q|~FDc?#&eW<*JTN5#f>F(E9bQbZ6`%RLy-hBFRA zlkT=ICys_3Fdyv)4t{_*!j!-QjYJK)ho3$T1gg-g77aaV5 zIpq3PuFFp|RDWftMjiZL2$gH}$>q|j6(rK=suh6mI;%O?yBxNs)1EP-h83l_hn9zk z5;Rc^RwcXtv0Qiu(C?Trmn!kkU{#VEiMLVpHdWCtmM*8Q2mztOC;ZW@3x-oytspVK zV7&d)!GF$pyIi^g^C%BRb$he{2OC0K&dCQHeK4$EK8Y)Yn@LT()aOwrI74@ncCQc; zoYYkqsNY`UK}J2D&c>3QI2*$$Eq+6pW*r+IWsn z+~RTk*(nNiiu5Ez7WKK+^U%Y)`&XW&s@@y>KRQh-G=29+tOQ~jccCDs%)XC>L<>fH^@0aqq&VqF5fl|~Pa-C#RoH5r4Q$JoBG~ znK|+v?cAz?VeR}X|3zVL6&Tl{z|W-c$ZwU(zc1A;tfFU5Rp%=n`Tf%VPFH_du*%cn z>Q6sw38W7ul$~DTNe^iH1I26sjK%P>{yb6Bq=DGqU?!xj|Y%C1r?JiGgZH!_W5(ptrccQhJ;UP4P#EdwX3T zTvN)aQtP=ikNo>`*n~&^uv~ZOnC{@iR8YV{94hit%$gnD@J45auIuPILj_U=>-?%D z1THgDBJJ{i2E^sGN|P>C$YbTy%2R4qx#ZwxT{+;=KvzS4&QtJh<=4oi1c9)4Nxy{A&1S9$nI=M4tFN;`+30j15X zQZI&ge**`4-hx#+9Y%7&6+bXT7`dy={rKubFp9@lLtc<=!w`J8vLM=@dLhdFk4ho4 zN~^6>O~D3&8z^$8tRl{0(MAeX4yjV9RCPU`MLdK)6A?zB}v zjrCyknPIAxZ{KXX0%5>GPn)id#DYHFFZCi(Q~{0bn^5#tX^niKg5ZJVY;=E=mP^b# zsiXf)k*p!?!+qZ>*}F=vUqg64DTkGOuxdOafSf_`bQA-Ekin*US20$o;ifeT4L>hn z^zbl_RF5H#iF4&jr_1}-RceUEJp12D&-R#-H9AMNHk+;)z7(ze-lVrKkVS!`i z>xSAu$>8s*boet%zpLVLZ*DJ-3r!uz`um1dQ^|gNDZfuOg{;{9`>G<3Tw4VXsE}*Z zK@}dKTu~(#RCT!q++S4pKDwsZ{o6H61$e8jC#5i99$h2f z=ahcCMgSJ((g0ISwWJ{T8*4gFrzp>gPY>P`m!`1}|B+xf4_`ajL^KH(F%s^_KRKIor+feU|YZ;Ei(o1VQkD%&c zV9^;I`i%5qrGX=qzQdkc5H3{z^@<;h?f4{eUUBZTYkLtzD#+mzaUyZO#x)vOeSHG$ zK$n;vD0%oaHxHo__utoEzlh2*rgq6y)!vNit~vPVkakb5rWJgKx(iE)oN9eRj#N~Q zxNlK)fkrpmoms7KG0nP%I2hTwYf- zDXLidd3C3!*Po4pD+H;si=2V@!QWLcE0X%E`+Q?V{3NarmYe1)(CCZZf2bZ9F01Za zF!;CXo_k=bKd!{B8hKU?I>;SeW6HU1#5Jm}nMv76HKs+^^^Uyu&Tw3=PfD%vp?A_2 zq%9bj`R=Tm)L~!G{Y^md;EqaDPU2umO_8*urZ=&y`no{Q$(iY?SQeTz*Lf6N`N01p8{zl~TIy$l|>h<$qfa$*Ygd*3RTGmhfDekTsm+2>$e^3MKjq8_wP(vN! zr=?JQ!V*7qmjAo+SeHItla2)tb2e1=1Te9WV3~n#q#8rb{P%fXBvri)s)4 zdhnwf(t`fpqSps6*3@=**co9`ZH3NH=zX>ASec&pufXlGVZvGaLO%|fGU@m*r#AiA zNm!6Kt2V`bLv8w5%}JaYX4ZOA5DPtaQYU5A265bh0NMAQ=lvaWoq{Dj)i>5Prc=t> zdyiI*yf)~prK?xN-)-}N_OSK=rynP7xa9WjTHyibMPjD%j_ts+F*Uur)_SvE4;CJ; z?YeFzZ0G@??YP*bbM=Qiyf3?m@Oj2++gJGcSZIo{@0!aE&}rgpgJ)|i$9xcyh9f|z zvTX#0$*TQe!KZue+?TcOtb%FfwZWuym1DJWvEKA`Y~GJ^tJjSrr}V?nrCIA-{bbf< z)nhb+>b6hTC$-IX=dK$V0XaFku6*4PtlRLQv)$!xTxW`wZm&nj>$DHS|2^$Q*ykzd zFaU=9!b8q9l=2TcpKn9)BPh;UFXyh;KIRngSFD7mobnCpQS3*t_6eu(v=e{-hcaYG z!V}Ikzwnqdt@G*857w~~2G3GxgB|P0x&;enE;u)`Zl*M{E{M)gm=`P<{A68f>Vmos|cF`SL4X^?Jh+WT3;YWPx%H_Mx8C@mQ!1|m*0O5TR2Z+{U))c% z+V!c4(tKjK^J(Q~0g1j|zOcT0J(K^qQ~Ruwf6j?mpl)wa;AbK5v(5qjxbyi7-EDl2 zQfd5!v(osYQy#4I8J|b;1ts}hq?7=Hr3BCufo0A7!@Y@vzgeG(r-bME#6j=+X}z6d z7MD2q?)p^Pf2H}2$DP8n&a&!Zh@*YU$zNW7p8AiOh47No!%o&QB>CxekqVeonqR4+ zgLhOTERX3or>?Sg<927W=cDfJk8IR;{k^-g>q57_M(@bt{GKsVrn{kTB#PtI9Or>j z9d(LQ8|qS}hPuN?1`pL`x)0UO!gm_JF>0>6{rKg(>SDb=tc$}J;lfAi@pz!V<1`Lq zpZ#lhZT(H2L*+hb>AbIuJr9=Ci_$kiR0w~vj#O~EF10>bFi@B3$>LU(I~NT8p)PU3 z;4nQd(8EuU&*(8mkIVG9QkUpC_}p0Nh63}mxTZkP*W+)0(G=soy&e`|nu_k%*Qfe@ ziG#WIspp4_y+!p4q#JRcfd$BM-vo-K6%Kj0;0=_{SNc1%5syDv?BSabOK;d$-%{UN zf1n1ZvB0>!oYXV4xoTq;oXC?Cz`Q&k^jO>d)8zSN(;0ZW70R zT(7BU5k*b?UW-lCl(+A+9BADy+BqM#v|#6qUZU;qX13KgR3OOWwyeq|Z6`*oLMZA#{EnjijVG z?>FtB)gu`7L(sQ2?90>b)%%-vFkU=rd4sgstiDLkl%$Hf@^W@DNNh#i{lNZ3&5lKN zmOV}}6Lk>{P(;41rD?yISqXbxgYDb=hHC50()0A4MP_Z^==O&xa%5l-6s%t?m&Yd(ZWNRDGnYxDGVWy z_@3E^d#7xkA=tAC{T;6M(c2na{X@RKG5Ldr5n5}iH>R;jnVi!o|GvRAUmj}c?U0ij zanXLLVHkVBR~zL12Kk{zO1oJakSiM{li6ol2pF^)#_{5I37dCi2agmjM*_xkLk*`V zNka`|h@ef8&o_)n=No(k@9UID8io%`BMmrQn$@VXzy5AUBZ2^UM8$KjpIgv)PpqVA z#FT|bo*K*wa0vZ+ zG6Zatr|xVtP1cR!H1Fd^#8OOIr|zaVo+HKm z(g!TYr}KL>6-~QDqlVL@ByDKHxUeEpXXN;e^EWQtxN>9lM)OAJ#C#*U)~hEfr*L0pn8q;B5Af|MS@SrY+8SH@!e>h&kwUv1PKI^n*4lkVUN z@61hleV6prMvQF0=kxgcW^w(hxUTDT2;B*rq`8~Ejwgtwd=s3|tKOzfdSJ6NY)Ate zDyZ9f;0?dPy^?+(Laf922(r5RVfZrk|~i2Z02&RZywxInGmqDoxQ zNq^_#xlKa9xzly>a3JO#;d@(f3gBUQ1f}U5wt#UDZt|cK(UHMVHsKijvrTa1I_>wi z;OZX&KHANt&3ijqnw&fLYv$V)XciYP&C!%KIh*!dcENqLik24J&V`y=7H8#Z&`_JO zQyafio4m8f@U1Nf1q)MlCZ4lw9=N29-AS8A+W3((Zq_F4^uyy(^1>J70G*rF7BhOU zN8g5jh%n{(5jUYOQl-&8&!F1r@j=l-!cOw0!=NO@@6>^s2Z(l-Rr3iu+h6SO`n5aH ztb4V;OaCh*{62D}!+wwjj2^)0E^oFOXPgEzxG8q~HuDGoVi#S@cF~nQ{(z>b`<@H8 zwz1d<)@do`4xIIweTgWpEl9_nG1fdB8`tNfu;BS2Wy?7*q?%6K<>6kJ_w&tc$Bho` z@l2+PMz5Ei*v!Z8r2cL+gMWl7+$OWSjl@;oX^vdsT)n6DfWy&bYZCYD*HnwUn_D{I zjaTov#j>l(&VuA?n_Bm$B$e;6YnmOHokZIKGV{!b&Cy9qJ=`Tcm4q_w{onD7tKVF| zy5_&(B>_O|>Q>im_;27?brjdlr9{PCxs6_2>=l;6yE_^w6e{@`l!q!O13HvuwaCVy zp8kazq};&LDVfS^-uRc2p7H=~&2aE*r88nxokNl2`uhRsV zqMF>S9L*w4m1WNXOG}5Qa3MKHgSA6b*K8GA_Jd~YPO+s-TxU73OVh9iSg?ZK-%$!u z7H9K9&FWpdn)Wm|wU##T-fh`qZ#Av}krhtxlm)N4-{MpR)HraJyG2}dpjFIT35c~8 zEY?W$tWxC2Gb_0=b?o-DPJKjASyw6c9(S1iQ(yr=!i%p&$wMogIKmb%};yH%=;R)^s!<(6qsvh_qGI z>}_e@y%#%@AP9u0+0e09)T|&~DU}3iu{O8t&r)mv)ES}d6$_|pre~a zaPW;4v`HXKu;Z5mw*8ozG)&uMgkkxi05ZIm=9Vlh5@1-41G{!Xs*RQw8f->QYx98? z?5m1lPc2SyKNa8(} zQ}B*WivMV<*=n__Q>Lk>q$j4RGv>_BnA2j-%FbE1XzsiPf`0yuiw)P97@yht!yvtD zRC3(Q|EiL;IQuUlKEHOY-!jGa;kBy>sbHh$96a-EconiN75$Gsd#~NB#CGR5RdCz} z+b;Zj-nIkJ|CZRme-HAna7?vNsGWhV&d$xSQ(~c=^IO8zMuIG`udw4m33~pYe|Fms z0)Dr>8_(~s)W73-H@+NqAA9b$KgizP6L>w1@6YXk=eU>feHGtd;d=sKH@>IwZLy!h z^Iw1dYUf7&HPAC#lSPjE$dVu?;mvXBVmf>OE4(H^tiqSx9ETrYjc;KQIlIWgi;I6Z zH;Zuy#k7iCr+66IE|H7x7B!)DaPY3+YRpsrirW7bbxR!FN=K=q+)?RR?Fe&}QokSb z%OFf8?9Ya?#Y>aCM(n`Ey~1V_F&VGpib6OvnV1*3 z*ie?}khaj(&#+Wgp<1{GlT* zIsqG^kC8#II{t|FD8B#c7{>FTtd!%j?3VrUfcn}e*_q*<<`M3!_ zKD&SHA3M=x?m6do-t)e{^PcydoA@40rsOYqe6D=c4EYMPd>})9B1`U`DIcFH7v{+J zS@QHed3K@vQK39AM@YL?70jkmRj`;;<)uJms904R&6bL5H`Y`)xGN(z-m*BrkZA_w z?LfNLTItJxoMu2i3uJwLMbl(tx&b+2wp?3T<#bI(W*Cs?fUK#huB>nwN6$1Mm!?_P zRBWuALeJ?21^6K-Rc6x+m*7!+?A;&9c_Hi9{Op%rYQ{fUIFaBQo27 z{7*tQy4*k;n4f7tUNp^8Sv{rgIR<16kW;Lf!L`QitZ^AeFEk+6r(3FOh|NhB%{Cx+ zrCXd1!c9WXF(4lXlH7PQa;^axBBZ;rsJ3Q2fc!B-R@GN* zFv=7S$Y7?WzOsVNl0l};fczszR>PqT$VCR^-038fac@9gWI$d+$TcONw%z%8^V%fxZ86%%%2ITK8 zmd15FE*fMmHy~%turxZ|>!x7oYX;<%K-N3mWRgKnp$WJtJrovK{oS4>|0 zDLCVrTJMey@7A&n?ow-QcUPd>dy{o@x4+Zcuyf1SEjxQJvDW*y`n@~+*2|ZbUt-<0 z-RIru_gTwVSg+f)wby!Oxl-;|4kpU{^Nb7K|FC6;b-N~w9(T2G-O^$8b=~CMvMt`h zWa=;9w?;6TRNnfM=45uzX-Qv2@^#ss#RfD z{NPiYWg+(HD{ig4FiV+hR*KESe^shN1;)4@J#KFmym;Kr9+jdt;Tk+$(MnIP`jhgx z2l|NHiv%kayrpOg-d@kjack&I`nl2=Rw5sr8x|x8I;U}{6-rvhEsM)nM zX23S@P5zh>R?s!c2vjQ1XQ$)jWLNwiXmz$yxPC1+gW6yQ70HYjocbt#&%SVNm$kQR zm-SZfww+e5b?cTLJGX2LSeG=Fxt7KTTohwX`J~Ohh-_5_7c*ZkZR2DN_3!WMFTZz< z{oXZ;O(nyQnT*wo%tRrP-VN371e6nRGKt+qAX@yqQrF1j4UwLN?I~jXaM$fAib7Pe ziXYL)4yn7yhOYQfg;fw|3b1jW#_YW^Q#V^Fs|zV_dxSp6sD9Q~&QOsZ%yAy45%A3f z!vmr=s-xq2NkFeoYR|WriZM6|jfi(TNSGP^cb`MZyI8!-A>0#}Y$Yv)G`LWvNn1B} z$Jfof4(V>Jo4Xy-yI42x(z^L5N4nFYN_W90{?aKdHw_hoMuIU3@U!vZ7jx|Qf%+19 zxR=ktawtniAIf1X;a-RQVh)&KIzbzBFNIAUO|d!{c!uKjV-dhmSw*kj}uz&ybIA%ab0{Jnp3cq^Ur_)o9X&iXlt36QJ+tr+s;4 zf&Q{Cydq=Q!QzgHk2siHKSkq-4>{N#^9W?c_LwN-nJp&euD0>v!})BQ0j8}e2}VoU zW7`zX&tlFpLQJw1)S53GfV`O~7C5B?4gye|pjAT+c$HrYLNKYQv2}mBWEEY$1Qu(S z59Xg=kocZMdXMX&eX^BA3cUyFcoS76DJGvQm@E=ISAN0!6usg4-yonOs$T(ILGEPAIz4upNcGQYkSjErkhl!Fs)jg~B@E z*G1%z@OWE)`EiHzvO~2WCk1GZ$#2DD4ql<6O?P58!t;gD7=z1i6>5l>Z@*QjftiGt z9nvuqYqbbWg%1xk&@Vv4V&%uBJov+^eWIqFKtErb5Imd@C8N0-kK z9a1o%$HTMP)KXOptFo#SiB-%s6|CXgW}~}4LQ=1U5o9};nj}J1mYF5gkityamN}Eh z;X@~Bp5(wu5_v2jzfS5v)nsaXr6>17sF`9IJp#phB@5O0d(|OZX0r)-%^|!2Q|_CS z=r-DFlU@URbY#i*j}I@Ki=s^g9w%rXx>d#E*Phss+TxGkh*mN@F^6OV&dvus%A?nw z`@44kG!VsMoDMqjvblO+I(m~I&!-_uF$CHsONi`HmYDS}IMgcx103Q9bJ56*J3sDsz`aDcQa*-? zG5DFjVeXfRe+Jz?Vdf~M=8%+W`a=1gLn$;X3nm*gK3qIc`MOy)73p?ftWi@lFTr?T znGiKfsWqY360O(kiM=GP^3}x3rKlYDaZ%V5+4K$0(?_Q+#@1i5v3|sU_OhRGZTDzH z{5^4qepZ>F?QgYSWD!L^ILzFH1B>!Cb3#df6n5gk{!5pH5B6?E{&G{19&UX_#g*ON zUES7>tzA3l6{9QudJ_w}%8sskYXUkK#GAB11Sbl z45S!HF_2;)#XyRI6ay&+QVgURNHLINAjLq6ffNHN22u>97)UXYVj#spih&dZDF#vu zq!>sskYXUkK#GAB1Ctn#rkVSXguifP<{^{AcEO&*h2g(C4i;ntKXeG$&J||c3KRcV zn88cJ>443ak4#kYbU@g9Zl(BUKnw>~rUH8vKsv>~b;2JT#5AYS-XNws zLzC1^Rs3HwAe&6`1x|UFQ@+#5@_-+8M#TM2N&!0^fDet}gQv>WIO&nsMs4_F89&l~ zr(VZ1fMS>t=~3qprQO)Nd4};5ko+V`4he7SqAA~Kh-c}DPdlZjougxu86h2C;@XAR zN5nVQLxystPkLiL(gk_iEahhOUWXc0`P4b<8hdTUM)!u=<;#~XTC_;WLpn&kU&wT_ zoLUvAs4#<)nJ8HYxzW^+MrG|m&r3`wj|eM)rEK~euhXklq&34lRz$8Y@2(~75;>%e z6vj7c^Id}$iIdVJXbTk9yv07WdWNQUN659 zZ{=y@z^;m8QTj$w>B?A1Sn6SR(`?WPE2xFZ;N_JlLlHJx)P5C}@fl=^QylYk1Lo?O z3?NnItwxp@b@O`RVh<(EFj?~8de-=6BU0ejYbCN+dA5P!=9<_zAVyU#_eEGIG%(NO z7ZQvQ4|0*3x=B%lT;uKa%yAF9BH|I3<{C#_`7oZjhn^9*zgjxtQl-N#Rd~V05_|9w zOYGTStta-x@2c2PUDB}4+m8Ddc6M34yLRF-iJe<;bp>vrprjwaT~BU?TrK72#_Ac? zE!(X1mAKj@mIX9f@{g)>^{X$u?Oolt-y#M^$`JIN+Echy`ket}38hn$-~6o_hUuPi z*hLcJP9&#qh*faEK{NB4Sc&;fti;^Z8k=6`JV#vIInb3&{9cwyj1qF|bd6AAE|;da zF}FG#@5x*!q0HP2y<%>5#Fen5X}-8y@l4e>HYB;$-^eOeA=mo14f4}2`ER^E7cK>v zU+Pl-=whOn#qe&xzl@J0wTX6Gxs*404`VuMF+miVA1E3AjtjgoKV~1%d`O|9a@!{P z9+z@M6I6~3%ojWQ#uspspTo`Z@1RS5rItDSg1U&f5Z~51?(l4itaW^ftaX!|e{QXW zS~eZ{gu)bf8Cv;uGc{pO8S{IYWmE$zC=jw7;dg4NMl(Pl4CQA&$!cltKnR>*KAUy` zX&fHEkXcR%^|$MnMu>H>%T}a1NvyMpVx1(_m5Ndw66znXfj07YYvi|e$!g-b^Lf0~ z2e_Sw80u2U%uBR^76q@3>&N|D@6IT3QvWIFpYh_2EH=lueZK zv=7;-NU?snmU$cYAwncMrnI0=rAt`YT*%MXQaKiwxj3zi9gpv$i!kqt@x6rRURsho zBq{!3tz2A(231-N;aZ^8U42o4eBM`+Z}2zThRNs3>zKps!+`g*0rx?G9(Hc66E48? zY8mMKk_pP-`A`2PP!ke;1U$Nkbu=`6}T&g4NOBlQYZhFjn-ej-3{C9+ucYN zS1J1!N$`4!Zqm`yen;zgZB%&QgqvFW9t%)cUe{mV>9%*0gwZi(Lbp32?!@;kBs*#O zce`UzXWS=syY;&_Mg%JcW3z}HV^=+zScW`@P|MF4C?-f6ANIS2 zYj8nFk6YO7R+YQzr^t8~?m){=>Ze)xRYK%^ivy6ujwDQ&o#`+>{M&kAnn}FJ%^LYR zV?=qN4p-y!xaIfjp%gXV(%o)Ku_hgKv7`gs7cIB~h7_^c?{iPrhoSZK5f|Om5D}a4-O@nfTN+fUxgjbwH5Ai4w&1b3 zfjyA3=}oi(I2YRKoY@F4i}dKlz)cNWE2dvFna1@ukV*aJ2WUXP2}ao#&pO)=G!WUK zcSf&_x)u!_df1B12 z*O-&uvq|1|-lp@)viEFa0f zX+FnxvFq3<@dHW%OlOx~sPu5TP1ljj!0RA0RMP=BC@^vH-Puapd4d-`+sKFtfv8^* zQH+{jacZz>$L9ESqr7)BgI?N1FuE>kX_ItmldAl=QNKTIe7ImUs`wI3r;*^`gp+%y zUR4%uPOskRrmM!_8*ymn6j0~p^!3-SB`E8;d2_nEegnItjM2md@_{lEdfS&aF;8Hc zUKZ1|tVy_{i7uy7g#nOvdn@jOlP+swb4M48yyw$PwCAw+i~~h@vn({h0#$3oZAIec zP1-GXjZG4sQI;B;O2x(|9IWOy0T@L!-v=;a!c`XYnjlR6{bt5US(CktE2>A5ulh;O z-P*)gLX^Eg3dfsc@7UTISa%c(@N`7`dy_;USb}-e-vCj??B^~yKKyzUyLpW6p1~`k zc%oVUjJh!lMP(B78OP9m%`vPCwQ5~nX_l|PUe``nL%%KQ>g$;rxZ8}q5b_sMeF##F z4*T=2mtSetCE%?G3)2^q2q)K$yaXb9G>dV5q*Fh?Pb%0PJN~}fECriwVz60ywYgM$ zwHdQ?K$kAQ)-1i&oOC898<*&{+KG)Y(1TVKT}iT}nN~YhUJGS(8t7$wHm^=Pcp_f1 zmlNGOE*#=CGc@5a(%;O;VQ=(Q8#k3oi7!8h&#+$pHtV1(LZAF(j$5%vSBgHojw!3P zvEP^+2P4Ou<$GeZ8l-FCfn1W@ZKzq^aRV)={_->r4-xcUBhKKs8Eyrd9Ib9h4%OPU;=aIIflI!sdSX&%0z>EMKBvMQ9gHR*0aZ@xk%M%8`?Wmq5j zJIJ9Ht%I0Hm-DGoo`>G9;vO~A6Z5D7k2KR`6K8s)0#B(};DJZ|yhY0NF#jmGcuYi|!?63HXn|#UHk_$NfuD#Z7 zr=s_0IOMSv&Od%4BY47N|F!2OS`Sbi!@lncN$)egBVuXmknr#4R(_$5n60Lh^g2=6 zI!4uk)wB|>1ASJ?#jUIck5rRpS~;R>XhAfs{DQieOqo{v;y)u;)*6b4eQgnOpp6Mu zE^Usysgtx{jxn0=rvH#hf#lGeEOSj}% zui48b-3e)T#HHQArD1@mbSHoA|K*wb*6?d=gn>4j*0ksT-9HT;(uXBkWX;+QnrTtM zpjScL$$nj*NU+4-@z0ZXQ+vXoX^Lkr^P-79+M{j^Qw8(>Ps0icXnEo&VyC&L{{r}-yUQ92cOO0b6K|&Jq&e?mrK@vLIp~d^G=DfP{_Hcw zpR;1mnPwnE!ZTieUmSix@UA~}S@{(!u2feqf4+5Md06pgnj`AT5&G4Gin}c3uy-&L z>Ny%YB_H$lOq@G4vis<#pLr+t20!-hIf@@Wr!%YMjP?v@1>Fiyn)zrMyPpq!=IuFp zR%j0k?F+355*M@&W}wGV=wNvcLRvOmg`3rJuspjX&Pedyb|I?+2Qi;LyW?oMt=&Ge zV`6@=t(_p)7+08u><)g2sP`vy`(8VE*LA0Qu)e~)I!DU(jR`Y5R+})2ihA=mOfv=| zC1={&RpC&(Dy2Ec1|t}1;#~N(cIBOR8=hAI8`ZHT(c!1s<+k?Ti5cM!+Hbb!_*Oyt z&@&Epd;{I$OJCiT-(Fp>FOlg^qpPrWc7)ONp zhEK-t=;@x^+u$0v6I8n0w?Vqi7gaJ$U5icPw|vsKeBv&jw97X-Mh7wWYf{=9zsIp^i&z&0?8ABn>NmckmZqi?M50*dZkBATXBZEUDQSlLfw5fLY z(eU^EBlBMg_xjKD`tir%2mSr4z>-@2n4k8eNBs83{8!y7J>(yY;E&Qf@b~7&{PLZC z&XMq}U-SHvh`PfN{x-f(`*GEF={5+FPNV&8zltCs4f_$(=xZ<%85%j+hlMik@88$e z_dww6xZkGS7Jy|Z_Z&Vo;!-K(MTTq_AOw8w4@K+?10{bQqu*#8EMFKvAhveOO`Sbu zRlQ|3(^ltS75rLfRBr5CdS-oRbZK;WRp%w@j5C#;5qW9ng3B($PpYl&yky1#dJfH+ zk?-q-GvE(6Ia&0-@mQXdwFt3fVc<}3Z|8GiwewGV@uTO-v;W$8`0PJ*MwPtIP(SAX zKH>Bm*OpFI0kXYfSl^WnExHx1SQgRZ_G2W+8( z`?^+}9tfcO!Ta&_(?AGzfb@j{%pA-MVP@226l^1yMtU~md30=OFfxKp(byA?J!l@4 zO9S)~?Ku>-2L=jkh4iQY<$);48I8*8SSuQD2+Syr&L|xyD7}CX^%??X-%S7MLC_xv zVOCCJ4kCl<$tLB8fx!@V-s1ivr!K`m3#}@uB9{j534|ges+8^=i()VCU6*Mo8U9%y iS{z-P5qu)h`(*I30CXh9B)+!GMBBB3r^!jh4gLjJn diff --git a/software/CPM/CPM16_MTPUG_04/XREF.DOC b/software/CPM/CPM16_MTPUG_04/XREF.DOC deleted file mode 100644 index d71a8a7..0000000 --- a/software/CPM/CPM16_MTPUG_04/XREF.DOC +++ /dev/null @@ -1,22 +0,0 @@ -The files XREF.SRC and XREF.COM as originally supplied on the MT+ -distribution disk are the source and object of a Pascal cross-referencing -program. They are public domain and not specific to Pascal/MT+ (i.e., -may be used to cross reference other Pascal programs). They may also be -used to cross reference other languages if the keyword table is changed. - -The present version has been been somewhat customized for Pascal MT+. -The keyword table was modified, and XREF now accepts '@' as a legal letter, -and recognizes '_' as a letter but discards it, just as MT+ does. - -1. Type XREF - -2. XREF asks: Input file? - -3. XREF asks: Output file name? - - -4. XREF asks: Do you want a listing? - - -And that's it! - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/XREF.ERL b/software/CPM/CPM16_MTPUG_04/XREF.ERL deleted file mode 100644 index 459f3f2ab611c09bd4c247efc6b2df2dde52ee9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7552 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 diff --git a/software/CPM/CPM16_MTPUG_04/XREF.SRC b/software/CPM/CPM16_MTPUG_04/XREF.SRC deleted file mode 100644 index 50d57d9..0000000 --- a/software/CPM/CPM16_MTPUG_04/XREF.SRC +++ /dev/null @@ -1,537 +0,0 @@ -{$L-} -{====================================================================} -{ PROGRAM TITLE: PASCAL CROSS-REFERENCING PROGRAM } -{ } -{ PROGRAM FILE: XREF.SRC } -{ } -{ LAST UPDATE: 22 July 82 by Steve Clamage } -{ } -{ NOTE: THIS PROGRAM WAS ORIGINALLY WRITTEN BY N. WIRTH AND } -{ ADAPTED FOR UCSD PASCAL (I.4 - THE PUBLIC DOMAIN VERSION) } -{ BY SHAWN FANNING (IN 1978) AND SUBSEQUENTLY ADAPTED FOR } -{ PASCAL/MT+ BY MIKE LEHMAN (IN 1981) AND IS A PUBLIC DOMAIN } -{ PROGRAM. IF YOU MAKE REVISIONS, ETC. PLEASE LEAVE THE AUTHOR} -{ AND MODIFIERS NAME IN THE SOURCE FILE. THANK YOU. } -{ } -{ PROGRAM SUMMARY: } -{ } -{ THIS PROGRAM PRODUCES A CROSS-REFERENCE LISTING FOR ANY } -{ PASCAL PROGRAM. OCCURENCES ONLY ARE LISTED. NO DISTINCTION IS } -{ MADE BETWEEN DEFINITIONS AND REFERENCES. } -{ } -{ PROGRAM FIXES: } -{ Pascal MT+ distribution version didn't recognize braces as } -{ comment delimiters. Didn't put line feeds in output files, but } -{ terminated lines with CR only. Didn't recognize lower case or } -{ underscore (_). Keyword list incomplete. Last line of file } -{ omitted from listing and xref. } -{====================================================================} - -{$L+} -PROGRAM XREF; - -(*CROSS REFERENCE GENERATOR FOR PASCAL PROGRAMS. N.WIRTH, 7.5.74*) -(*'QUADRATIC QUOTIENT' HASH METHOD*) - -CONST - P = 749; (*SIZE OF HASHTABLE*) - NK = 50; (*NO. OF KEYWORDS*) - ALFALEN = 8; - REFSPERLINE = 10; (* for 80 column line *) - REFSPERITEM = 5; (* controls node size of linked list *) - - -TYPE - ALFA = PACKED ARRAY[1..ALFALEN] OF CHAR; - INDEX = 0..P; - ITEMPTR = ^ITEM; - WORD = RECORD - KEY: ALFA; - FIRST, LAST: ITEMPTR; - FOL: INDEX - END; - NUMREFS = 1..REFSPERITEM; - REFTYPE = (COUNT, PTR); - ITEM = RECORD - REF: ARRAY[NUMREFS] OF INTEGER; - CASE REFTYPE OF - COUNT: (REFNUM: NUMREFS); - PTR: (NEXT: ITEMPTR) - END; - BUFFER = STRING[132]; - IDENTCHARS = SET OF CHAR; - -VAR - TOP: INDEX; (*TOP OF CHAIN LINKING ALL ENTRIES IN T*) - I, - LINECOUNT: INTEGER; (*CURRENT LINE NUMBER*) - CH: CHAR; (*CURRENT CHAR SCANNED *) - BUF: BUFFER; (*OUTPUT LINE*) - T: ARRAY [INDEX] OF WORD; (*HASH TABLE*) - KEY: ARRAY [1..NK] OF ALFA; (*RESERVED KEYWORD TABLE *) - ALLDONE, (*ALLDONE OR ERROR FLAG *) - LISTING: BOOLEAN; (*LISTING OPTION *) - INFILE: TEXT; (*INPUT FILE*) - LST : TEXT; (*OUTPUT FILE*) - LSTFILENAME : STRING; - INPUT_LINE : BUFFER; - INLINEP : INTEGER; (*PTR TO CURRENT CHAR IN INPUT_LINE*) - TOCONSOLE : BOOLEAN; (*WHERE LISTING GOES *) - IDENTSET : IDENTCHARS; (*LEGAL CHARS IN IDENTIFIER*) - -{$P} -PROCEDURE INITIALIZE; -VAR - I : INTEGER; - - PROCEDURE FIRSTHALF; - BEGIN - KEY[ 1] := 'ABSOLUTE'; - KEY[ 2] := 'AND '; - KEY[ 3] := 'ARRAY '; - KEY[ 4] := 'BEGIN '; - KEY[ 5] := 'BOOLEAN '; - KEY[ 6] := 'CASE '; - KEY[ 7] := 'CHAR '; - KEY[ 8] := 'CONST '; - KEY[ 9] := 'DIV '; - KEY[10] := 'DO '; - KEY[11] := 'DOWNTO '; - KEY[12] := 'ELSE '; - KEY[13] := 'END '; - KEY[14] := 'EXIT '; - KEY[15] := 'EXTERNAL'; - KEY[16] := 'FILE '; - KEY[17] := 'FOR '; - KEY[18] := 'FUNCTION'; - KEY[19] := 'GOTO '; - KEY[20] := 'IF '; - KEY[21] := 'IN '; - KEY[22] := 'INTEGER '; - KEY[23] := 'LABEL '; - KEY[24] := 'MOD '; - KEY[25] := 'MODEND '; - KEY[26] := 'MODULE '; - KEY[27] := 'NIL '; - END; - - PROCEDURE SECONDHALF; - BEGIN - KEY[28] := 'NOT '; - KEY[29] := 'OF '; - KEY[30] := 'OR '; - KEY[31] := 'PACKED '; - KEY[32] := 'PROCEDUR'; - KEY[33] := 'PROGRAM '; - KEY[34] := 'READ '; - KEY[35] := 'READLN '; - KEY[36] := 'REAL '; - KEY[37] := 'RECORD '; - KEY[38] := 'REPEAT '; - KEY[39] := 'SET '; - KEY[40] := 'STRING '; - KEY[41] := 'TEXT '; - KEY[42] := 'THEN '; - KEY[43] := 'TO '; - KEY[44] := 'TYPE '; - KEY[45] := 'UNTIL '; - KEY[46] := 'VAR '; - KEY[47] := 'WHILE '; - KEY[48] := 'WITH '; - KEY[49] := 'WRITE '; - KEY[50] := 'WRITELN '; - END; - -BEGIN (* INITIALIZE *) - WRITELN; - WRITELN( - 'Pascal/MT+ Program Xref Utility, Release 5.2, updated 26 July 82'); - WRITELN('This program is public domain'); - ALLDONE := FALSE; - FOR I := 0 TO P DO - T[I].KEY := ' '; - FIRSTHALF; - SECONDHALF; - IDENTSET := [ 'A'..'Z', 'a'..'z', '@', '_' ]; - TOP := P; - CH := ' ' -END; (* INITIALIZE *) - -{$P} -PROCEDURE OPENFILES; -VAR - NUMBLOCKS: INTEGER; - OPENOK: BOOLEAN; - OPENERRNUM : INTEGER; - LISTOPTION: CHAR; - FILENAME: STRING; - -BEGIN (* OPEN *) - REPEAT - WRITELN; - WRITE( 'Input file ? ' ); - READLN( FILENAME ); - IF LENGTH(FILENAME) > 0 THEN - BEGIN - ASSIGN(INFILE, FILENAME ); - RESET(INFILE) - END; - OPENERRNUM := IORESULT; - OPENOK := ( OPENERRNUM <> 255 ); - IF NOT OPENOK THEN - WRITELN( '*** INPUT OPEN ERROR # ', OPENERRNUM ); - UNTIL OPENOK; - - WRITE('Output file name? '); - READLN(LSTFILENAME); - TOCONSOLE := (LSTFILENAME = 'CON:'); - ASSIGN(LST,LSTFILENAME); - REWRITE(LST); - - WRITE( 'Do you want a listing (Y/N)? ' ); - READ( LISTOPTION ); - LISTING := (LISTOPTION <> 'N') AND (LISTOPTION <> 'n'); - IF LISTING THEN - PUTNUMBER(0); - READLN(INFILE,INPUT_LINE); - LINECOUNT := 0; - INLINEP := 1; - WRITELN; -END; (* OPENFILES *) - -{$P} -PROCEDURE LPWRITELN; -VAR - I : INTEGER; - CH : CHAR; -BEGIN - WRITELN(LST,BUF); - BUF[0] := CHR(0); - LINECOUNT := LINECOUNT+1; - IF (LINECOUNT MOD 60) = 0 THEN - PAGE(LST); -END; - -{$P} -PROCEDURE PUTALFA(S:ALFA); -BEGIN - MOVELEFT(S[1], BUF[ORD(BUF[0])+1], 8); - BUF[0] := CHR(ORD(BUF[0]) + 8); -END; - - - -PROCEDURE PUTNUMBER(NUM: INTEGER); -VAR I,IPOT: INTEGER; - A: ALFA; - CH: CHAR; - ZAP: BOOLEAN; - -BEGIN - ZAP := TRUE; - IPOT := 10000; - A[1] := ' '; - FOR I := 2 TO 6 DO - BEGIN - CH := CHR(NUM DIV IPOT + ORD('0')); - IF I <> 6 THEN - IF ZAP THEN - IF CH = '0' THEN - CH := ' ' - ELSE - ZAP := FALSE; - A[I] := CH; - NUM := NUM MOD IPOT; - IPOT := IPOT DIV 10; - END; - A[7] := ' '; - MOVELEFT(A, BUF[ORD(BUF[0])+1], 7); - BUF[0] := CHR(ORD(BUF[0]) + 7); -END; - -{$P} -PROCEDURE GETNEXTCHAR; -BEGIN - - IF INLINEP = LENGTH(INPUT_LINE)+1 THEN - BEGIN - CH := ' '; {DUMMY EOL CHARACTER} - INLINEP := INLINEP + 1; {NEXT TIME THRU WILL READ NEW LINE} - EXIT - END; - - IF INLINEP > LENGTH(INPUT_LINE) THEN - BEGIN - READLN(INFILE,INPUT_LINE); - INLINEP := 2; - LINECOUNT := LINECOUNT + 1; - IF LENGTH(INPUT_LINE) > 0 THEN - CH := INPUT_LINE[1] - ELSE - BEGIN - CH := ' '; - IF EOF(INFILE) THEN - ALLDONE := TRUE; - END; - IF LISTING THEN - BEGIN - IF NOT TOCONSOLE THEN - WRITE('.'); - WRITELN(LST,BUF); - BUF[0] := CHR(0); - PUTNUMBER(LINECOUNT); - END - ELSE - WRITE('.'); - IF (LINECOUNT MOD 60) = 0 THEN - BEGIN - IF LISTING THEN - PAGE(LST); - WRITELN('< ',LINECOUNT:4,', ',MEMAVAIL:5,' >'); - END - END - - ELSE - BEGIN - CH := INPUT_LINE[INLINEP]; - INLINEP := INLINEP + 1; - END; - - IF LISTING THEN - BEGIN - BUF[0] := CHR(ORD(BUF[0]) + 1); - BUF[BUF[0]] := CH; - END; - -END; (* GETNEXTCHAR *) - -{$P} - -PROCEDURE SEARCH( ID: ALFA ); (*MODULO P HASH SEARCH*) -(*GLOBAL: T, TOP*) -VAR - I,J,H,D : INTEGER; - X : ITEMPTR; - F : BOOLEAN; - -BEGIN - J := 0; - FOR I := 1 TO ALFALEN DO - J := J*10+ORD(ID[I]); - H := ABS(J) MOD P; - F := FALSE; - D := 1; - REPEAT - IF T[H].KEY = ID THEN - BEGIN (*FOUND*) - F := TRUE; - IF T[H].LAST^.REFNUM = REFSPERITEM THEN - BEGIN - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].LAST^.NEXT := X; - T[H].LAST := X; - END - ELSE - WITH T[H].LAST^ DO - BEGIN - REFNUM := REFNUM + 1; - REF[REFNUM] := LINECOUNT - END - END - ELSE - IF T[H].KEY = ' ' THEN - BEGIN (*NEW ENTRY*) - F := TRUE; - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].KEY := ID; - T[H].FIRST := X; - T[H].LAST := X; - T[H].FOL := TOP; - TOP := H - END - ELSE - BEGIN (*COLLISION*) - H := H+D; - D := D+2; - IF H >= P THEN - H := H - P; - IF D = P THEN - BEGIN - WRITELN('ITEM TABLE OVERFLOW'); - ALLDONE := TRUE - END; - END - UNTIL F OR ALLDONE -END (*SEARCH*) ; - -{$P} - -PROCEDURE PRINTWORD(W: WORD); -VAR - L: INTEGER; - X: ITEMPTR; - NEXTREF : INTEGER; - THISREF: NUMREFS; -BEGIN - PUTALFA(W.KEY); - X := W.FIRST; - L := 0; - REPEAT - IF L = REFSPERLINE - THEN - BEGIN - L := 0; - LPWRITELN; - PUTALFA(' '); - END ; - L := L+1; - THISREF := (L-1) MOD REFSPERITEM + 1; - NEXTREF := X^.REF[THISREF]; - IF THISREF = X^.REFNUM THEN - X := NIL - ELSE - IF THISREF = REFSPERITEM THEN - X := X^.NEXT; - PUTNUMBER(NEXTREF); - UNTIL X = NIL; - LPWRITELN; -END (*PRINTWORD*) ; - -{$P} -PROCEDURE PRINTTABLE; - -VAR - I,J,M: INDEX; - -BEGIN - LINECOUNT := 0; - BUF[0] := CHR(0); - I := TOP; - WHILE I <> P DO - BEGIN (*FIND MINIMAL WORD*) - M := I; - J := T[I].FOL; - WHILE J <> P DO - BEGIN - IF T[J].KEY < T[M].KEY THEN - M := J; - J := T[J].FOL - END ; - PRINTWORD(T[M]); - IF M <> I THEN - BEGIN - T[M].KEY := T[I].KEY; - T[M].FIRST := T[I].FIRST; - T[M].LAST := T[I].LAST - END; - I := T[I].FOL - END -END (*PRINTTABLE*) ; - -{$P} -PROCEDURE GETIDENTIFIER; -VAR - J,K,I: INTEGER; - ID: ALFA; - MATCH: BOOLEAN; - -BEGIN (* GETIDENTIFIER *) - I := 0; - ID := ' '; - - REPEAT - IF I < ALFALEN THEN - BEGIN - I := I+1; - IF ('a' <= CH) AND (CH <= 'z') THEN - ID[I] := CHR( ORD(CH) - ORD('a') + ORD('A') ) - ELSE - IF CH = '_' THEN - I := I-1 {DISCARD UNDERSCORE} - ELSE - ID[I] := CH - END; - GETNEXTCHAR - UNTIL NOT (CH IN IDENTSET); - - I := 1; - J := NK; - - REPEAT - K := (I+J) DIV 2; (*BINARY SEARCH*) - IF KEY[K] <= ID THEN - I := K+1; - IF KEY[K] >= ID THEN - J := K-1; - UNTIL (I > J); - - IF KEY[K] <> ID THEN - SEARCH(ID); - -END; (* GETIDENTIFIER *) - -{$P} -BEGIN (* CROSSREF *) - - INITIALIZE; - OPENFILES; - - REPEAT - - IF CH IN IDENTSET THEN - GETIDENTIFIER - - ELSE - IF (CH = '''') THEN {SCAN OFF LITERAL STRING} - BEGIN - REPEAT - GETNEXTCHAR; - UNTIL (CH = '''') OR ALLDONE; - GETNEXTCHAR; - END - - ELSE - IF CH = '(' THEN {SCAN OFF (*...*) COMMENT} - BEGIN {FAILS ON (*)...*) } - GETNEXTCHAR; - IF CH = '*' THEN - BEGIN - GETNEXTCHAR; - WHILE (CH <> ')') AND (NOT ALLDONE) DO - BEGIN - WHILE (CH <> '*') AND (NOT ALLDONE) DO - GETNEXTCHAR; - GETNEXTCHAR; - END; - GETNEXTCHAR; - END; - END - - ELSE - IF CH = '{' THEN (* SCAN OFF {...} COMMENT *) - BEGIN - REPEAT - GETNEXTCHAR - UNTIL (CH = '}') OR ALLDONE; - GETNEXTCHAR; - END - - ELSE - GETNEXTCHAR; - - UNTIL ALLDONE; - - PAGE(LST); - PRINTTABLE; - PAGE(LST); - CLOSE(LST,I); - IF I = 255 THEN - WRITELN('Error closing output file'); - -END. - - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/XREF.SUB b/software/CPM/CPM16_MTPUG_04/XREF.SUB deleted file mode 100644 index 0736b29..0000000 --- a/software/CPM/CPM16_MTPUG_04/XREF.SUB +++ /dev/null @@ -1,3 +0,0 @@ -MTPLUS B:XREF $$TB RB -LINKMT B:XREF,PASLIB/S - \ No newline at end of file diff --git a/software/CPM/CPM16_MTPUG_04/ZCOMPR.PAS b/software/CPM/CPM16_MTPUG_04/ZCOMPR.PAS deleted file mode 100644 index 29fb011..0000000 --- a/software/CPM/CPM16_MTPUG_04/ZCOMPR.PAS +++ /dev/null @@ -1,85 +0,0 @@ -(**************************************************** -* -* CHAR COMPARE PROGRAM -* -* Written by Bob Harsch during a debugging -* excercise. It was done hastily but it was such a -* good idea that I cleaned it and now its part of our -* utilities. -* -* Donated to the Pascal/Z Users Group, Oct 1980 -* Modified by Charlie Foster -***************************************************** -* -* INSTRUCTIONS -* -* The two files that you want to compare need to -* have their names changed to F1.DAT and F2.DAT. Then -* all you have to do is type PCOMPAR. It will go thro -* the entire program and list all differences and list -* those in HEX, DECIMAL and ASCII. The line numbers are -* in reference to 100H. -* -******************************************************) - -PROGRAM COMPAREFILES; - -TYPE BYTE=0..255; - -VAR F1,F2 : FILE OF BYTE; - B1,B2 : BYTE; - COUNT : INTEGER; - - -PROCEDURE HEX(N: INTEGER); - -VAR I : INTEGER; - HEXDIGIT : ARRAY [1..4] OF INTEGER; - -BEGIN - FOR I := 1 TO 4 DO - BEGIN - HEXDIGIT[I] := N MOD 16; - N := N DIV 16 - END; - FOR I:= 4 DOWNTO 1 DO - IF HEXDIGIT[I] > 9 - THEN WRITE(CHR( ORD('A')+HEXDIGIT[I]-10 ):1) - ELSE WRITE(HEXDIGIT[I]:1); - WRITE(' '); -END; (* OF HEX *) - - -FUNCTION CHRCHK(B: BYTE): CHAR; - -BEGIN - IF (B < 32) OR (B > 126) - THEN CHRCHK := '.' - ELSE CHRCHK := CHR(B) -END; (* OF CHRCHK *) - - -BEGIN (* MAIN PROGRAM *) - - RESET('F1.DAT',F1); - RESET('F2.DAT',F2); - WRITELN('HEX-ADDR HEX-B1-B2 DEC-B1-B2 CHR1-CHR2'); - WRITELN('--------------------------------------------'); -COUNT := 256; - REPEAT - READ(F1,B1); - READ(F2,B2); - IF B1 <> B2 THEN - BEGIN - HEX(COUNT); - WRITE(' ':5); - HEX(B1); - HEX(B2); - WRITE(' ',B1:3,' ',B2:3); - WRITE(' ',CHRCHK(B1),' ',CHRCHK(B2)); - WRITELN; - END; - COUNT := COUNT + 1; - UNTIL EOF(F1) OR EOF(F2); -END. - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/-MTPUG.005 b/software/CPM/CPM17_MTPUG_05/-MTPUG.005 deleted file mode 100644 index e69de29..0000000 diff --git a/software/CPM/CPM17_MTPUG_05/-MTPUG.DOC b/software/CPM/CPM17_MTPUG_05/-MTPUG.DOC deleted file mode 100644 index bbca233..0000000 --- a/software/CPM/CPM17_MTPUG_05/-MTPUG.DOC +++ /dev/null @@ -1,26 +0,0 @@ -MTPUG.005 September 25, 1982 - -This disk directory is full, although the disk only contains about -150K of code. Sorry. - -procref/src A simple minded tool which will show you all - /erl the nested procedure/function calls in a - /com program. This is a two pass program, the - /doc second of which prints each line containing of - the saved names anywhere in the line, including - inside comments. Uses two modules included - g2txt which removes two file names from an - input string and opens the first as a text file - and the second as an output text file. The - second is cpmname which checks a name for validity. - written by Steve Clamage. - -Z19/H89/asm A collection of modules for direct cursor addressing - /rel the Zenith Z19 or the Heath H89 terminals. This -Z19LIB/erl group of 26 programs is collected into a library. -External/doc English explanation of each module. -loewner/doc German explanation of each module. - Programs are compiled with the M80/L80 assembler. - (Z80 code, I think). Written by Juergen Loewner. - - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/CEOL.ASM b/software/CPM/CPM17_MTPUG_05/CEOL.ASM deleted file mode 100644 index cf8676b..0000000 --- a/software/CPM/CPM17_MTPUG_05/CEOL.ASM +++ /dev/null @@ -1,9 +0,0 @@ - title @ceol -esc equ 1bh -bdos equ 5 - -ceol:: ld de,cleol ;clear to end of line - ld c,9 - jp bdos -cleol: db esc,'K$' - end diff --git a/software/CPM/CPM17_MTPUG_05/CEOL.REL b/software/CPM/CPM17_MTPUG_05/CEOL.REL deleted file mode 100644 index c8d9e910985eefb00a1b957d6e2a0abd62070d60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-khmFrTfxO7 mMlbL~Emu4{!^{N%%q=zYPT~g-sDTvgKomRL`hgWQ5D5Tsq8POR diff --git a/software/CPM/CPM17_MTPUG_05/CEOP.ASM b/software/CPM/CPM17_MTPUG_05/CEOP.ASM deleted file mode 100644 index 95d1934..0000000 --- a/software/CPM/CPM17_MTPUG_05/CEOP.ASM +++ /dev/null @@ -1,9 +0,0 @@ - title @ceop -esc equ 1bh -bdos equ 5 - -ceop:: ld de,cleop ;clear to end of page - ld c,9 - jp bdos -cleop: db esc,'J$' - end diff --git a/software/CPM/CPM17_MTPUG_05/CEOP.REL b/software/CPM/CPM17_MTPUG_05/CEOP.REL deleted file mode 100644 index 6701ba6443753aa849ef9174d7e44f642cf3736d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-khmFrN5RD;Q!1Ih7YM2=a>BIu$T5%#*SZI?L1` nqZjz0mMfl}VdjDW=9U_HC-H*^)If@LI>Cw^ZT-NC8HfY`@AMak diff --git a/software/CPM/CPM17_MTPUG_05/CLS.ASM b/software/CPM/CPM17_MTPUG_05/CLS.ASM deleted file mode 100644 index 43e80a9..0000000 --- a/software/CPM/CPM17_MTPUG_05/CLS.ASM +++ /dev/null @@ -1,11 +0,0 @@ - title @cls - -esc equ 1bh -bdos equ 5 - -cls:: ld de,clearsc ;clear screan - ld c,9 - jp bdos -clearsc:db esc,'E$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/CLS.REL b/software/CPM/CPM17_MTPUG_05/CLS.REL deleted file mode 100644 index 2a255b3b5075208666fc006416b9043af275495b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn_khm@Lz{KRJr2_-Y6&(g;CkDm?(', ',', ':', '=', '*', '?', '[', ']']; - len := length(fname); - if len = 0 then {zero-length name} - exit; - i := 1; {start with 1st character} - if len > 1 then - if fname[2] = ':' then {if 2nd is colon...} - i := 3; {...start test with 3rd} - gotdot := false; - cname := 0; {# chars in name portion} - while (i <= len) and (not gotdot) do {scan name portion} - begin - if fname[i] = '.' then {period terminates name scan} - gotdot := true - else - begin - cname := cname + 1; - if fname[i] in badset then - exit; {illegal character} - end; - i := i + 1 - end; - cext := 0; {# chars in extent portion} - badset := badset + ['.']; - while (i <= len) do {scan extent portion} - begin - cext := cext + 1; - if fname[i] in badset then - exit; {illegal character} - i := i + 1; - end; - if (cname < 1) or (cname > 8) or (cext > 3) then - exit; {improper length} - cpmname := true; {it's ok!} - end; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/CPOS.ASM b/software/CPM/CPM17_MTPUG_05/CPOS.ASM deleted file mode 100644 index 95f2e9c..0000000 --- a/software/CPM/CPM17_MTPUG_05/CPOS.ASM +++ /dev/null @@ -1,40 +0,0 @@ - title @cpos -esc equ 1bh -bdos equ 5 - -cpos:: pop bc ;return addr - pop de ;e= column - pop hl ;l= line - push bc ;return addr. on stack - xor a - cp e - ret z - cp l - ret z - ld a,80 - cp e - ret c - ld a,25 - cp l - ret c - ld h,e ;now l=line and h=colmn - push hl - ld de,pos1 - ld c,9 - call bdos - pop hl - push hl - ld a,1fh - add a,l - ld e,a - ld c,2 - call bdos - pop hl - ld a,1fh - add a,h - ld e,a - ld c,2 - jp bdos -pos1: db esc,'Y$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/CPOS.REL b/software/CPM/CPM17_MTPUG_05/CPOS.REL deleted file mode 100644 index ee1fb3f4d14f010b5b89e2425fcfcd9a9ad7c86c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-khmj#=YfkU%U4SW29_&l7@IB@Yz%$9&FSj|I}N?t%nwd|-H=?=lG(suA#|3h xK}Ij|LoHW4JHyNc0n9Bm@=oFh52#6qFi7ikDlcFVQzEIh7YM2=WHnIu$T5%#*SZI?L1` nqZjz0mMfl}VdjDW=9U_HC-H*^)If@LI>Cw^ZT-NC8HfY`=4=;) diff --git a/software/CPM/CPM17_MTPUG_05/CUOFF.ASM b/software/CPM/CPM17_MTPUG_05/CUOFF.ASM deleted file mode 100644 index ead4e9c..0000000 --- a/software/CPM/CPM17_MTPUG_05/CUOFF.ASM +++ /dev/null @@ -1,12 +0,0 @@ - title @cuoff -esc equ 1bh -bdos equ 5 - -cuoff:: ld de,cuo2 - ld c,9 - jp bdos - dseg -cuo2: db esc,'x5$' - cseg - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/CUOFF.REL b/software/CPM/CPM17_MTPUG_05/CUOFF.REL deleted file mode 100644 index 1ec64e2d5bec14b6ff700c2ea43f759cc54b62c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpjAaOVP=F9~lrXgQaG946Ht|%}lH!v_Bm?j~@sK>y-JCALVXNChy2?Nu@Rm&GE v`!O&u%#(^|XPCJlfVrhc-bwu60W}E`25Fs62;ZSfq|oK)x5bD3=H$6Ku|_6 q@Ix(EJUhe81p&-0HS$j42M?%$6zg;0I6jl5&!_E0~^Z# diff --git a/software/CPM/CPM17_MTPUG_05/DATE.ASM b/software/CPM/CPM17_MTPUG_05/DATE.ASM deleted file mode 100644 index a02274c..0000000 --- a/software/CPM/CPM17_MTPUG_05/DATE.ASM +++ /dev/null @@ -1,48 +0,0 @@ - title @date - -date:: pop ix ;save return addr. - ld bc,3000h+'.' ;preset for "or '0'" and save '.' - pop hl ;get addr. of var - ld (hl),10 ;save length in var[0] - inc hl ;and start transfer of data - in a,(0e8h) ;day10 - and 03h ;0,1,2 or 3 - or b ;get ascii - ld (hl),a ;save it - inc hl ;for the next val - in a,(0e7h) ;and go on for the other's - and 0fh - or b - ld (hl),a - inc hl - ld (hl),c ;put '.' in string - inc hl - in a,(0eah) - and 01h - or b - lä (hl),a - inc hl - in a,(0e9h) - and 0fh - or b - ld (hl),a - inc hl - ld (hl),c - inc hl - ld (hl),'1' - inc hl - ld (hl),'9' - inc hl - in a,(0ech) - and 0fh - or b - ld (hl),a - inc hl - in a,(0ebh) - and 0fh - or b - ld (hl),a - jp (ix) ;this means RETURN (popped before) - - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/DATE.REL b/software/CPM/CPM17_MTPUG_05/DATE.REL deleted file mode 100644 index c94898ecb2f0c916999f7e823614b3e78a9d7345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-kd%m(OmJ}#b%}IfV7c;xao0nJ?lwNb4H|B@ODr3*nRoPVdtS_ZjlEFvh}-Q_ z%LZ+b$V-@rnMB92!xN=*Z#-jP!}rMS_S!T25wf?}&3M7U;^G+MI){OQVV)F_zy$y^ CqbRrl diff --git a/software/CPM/CPM17_MTPUG_05/DAY.ASM b/software/CPM/CPM17_MTPUG_05/DAY.ASM deleted file mode 100644 index 8788616..0000000 --- a/software/CPM/CPM17_MTPUG_05/DAY.ASM +++ /dev/null @@ -1,50 +0,0 @@ - title @day - -day:: pop ix ;RETURN - pop hl ;get var addr. - in a,(0e6h) ;get day of week - and 7 - cp 7 - jr nc,error ;in range? - push hl ;need hl for computing - add a,a ;double the value and clear carry - ld hl,table - ld d,0 - ld e,a - add hl,de - ld a,(hl) - inc hl - ld h,(hl) - ld l,a - pop de ;get again var addr.= destination - ld b,0 - ld c,(hl) ;get length - inc c ;transfer length is stringlength+1 - ldir ;and transfer - jp (ix) ;we are ready - - -error: ld (hl),0 ;stringlength set to 0 - jp (ix) ;ret - - -table: dw mo - dw di - dw mi - dw do - dw fr - dw sa - dw so - -mo: db 6,'Montag' -di: db 8,'Dienstag' -mi: db 8,'Mittwoch' -do: db 9,'Donnerstag' -fr: db 7,'Freitag' -sa: db 7,'Samstag' -so: db 7,'Sonntag' - - - - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/DAY.REL b/software/CPM/CPM17_MTPUG_05/DAY.REL deleted file mode 100644 index 66c11b1a9b85bcce077226c3d5e8d2b7bd24c46d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZn_kd%l^FmVx`>A=8pbr0jNhXvd2oJ+9&!Dqm28SqHTi$RP*{IL2%$r<-9GBa=< zIG%NI*Gp*z>2|w=C(pgsEVjb$VmqVmMc08%1#W72c}7gFi4wmDlcG=6!m2F6*VegV3;Q* pqZjz0mMfl}VdjDW=9U_HC-H*^)IchAI)N$$c^z&2!0H%?1OVJg7cu|< diff --git a/software/CPM/CPM17_MTPUG_05/EXTERNAL.DOC b/software/CPM/CPM17_MTPUG_05/EXTERNAL.DOC deleted file mode 100644 index 067fa45..0000000 --- a/software/CPM/CPM17_MTPUG_05/EXTERNAL.DOC +++ /dev/null @@ -1,113 +0,0 @@ -Comments on Juergen Loewner's procedures "MT+ Pascal Library Extensions" - -The following procedures are implemented for the Heath H19 terminal. -As clock IC the MSM 5832 from OKI was taken. The Microsoft M80/L80 -assembler/linker was used. -%U - procedure CPOS (line,column); - Positioning of the cursor. - - procedure HOME; - The cursor will be positioned to the upper left corner. - - procedure CLS; - Clear screen and set cursor to the "home" position. - - procedure CEOP; - Clear screen from cursor up to the end of the screen; - the character under the cursor will be deleted. - - procedure CTOP; - Clear screen from "home" to cursor position; the - character under the cursor will be also deleted. - - procedure CEOL; - Clear screen from "home" up to the cursor; the character - under the cursor will be also deleted. - - procedure IL; - Insert one line at "cursor line"; the following lines - are scrolled down. The last line (24) will be deleted. - - procedure DL; - Delete "cursor line"; the following lines are scrolled - up. - - procedure DC; - Delete the character at the cursor position; the following - characters of this line are shifted one character to the - left. - - procedure SAVEC; - The procedure saves the cursor position (line and column). - Later on it will be possible to return to this column by - calling "RESTC". - - procedure RESTC; - Position the cursor to the line/column which was saved - by the last call of SAVEC. - - procedure ERASEL; - Clears cursor line (without scrolling the rest of the - screen). - - procedure KBOFF; - The keyboard is switched off (no input will be possible - by it); see also KBON. -.PA - procedure KBON; - The keyboard is switched on (necessary if KBOFF was - was called). - - procedure EBL; - Clear line from the beginning of the line to the cursor; - thecharacter under the cursor is included. - - procedure CUOFF; - The cursor will be switched off; see also CUON. - - procedure CUON; - The cursor will be switched on (necessary if CUON - was called). - - procedure ON25; - Enables an entry into the status line (line 25). - - procedure OFF25; - Delete status line (line 25); furtheron an access - to the status line will not be possible; see ON25. - - procedure TIME (var X: string); - A string of the length 8 will be assigned to the - variable X: "hh:mm:ss". - - procedure DATE (var X: string); - A string of the length 10 will be assigned to the - variable X: "dd.mm.19yy". - - procedure DAY (var X: string); - A string of variable length will be assigned to the - variable X; the string contains the German day of - week. - - procedure IC; - Switches on "insert character" mode: - Insert one character at the cursor position and shift - the rest of the line one character to the right. - Positiob 80 will be deleted. - - procedure XIC; - Switch off the "IC-mode". - - procedure REVON; - The following characters will be output on the screen - in "inverse-mode" (black on white); see also REVOFF. - - procedure REVOFF; - Return from "inverse-mode" to "standard-mode". - - - -rse-mode" (black on white); see also REVOFF. - - pr \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/G2TEXT.ERL b/software/CPM/CPM17_MTPUG_05/G2TEXT.ERL deleted file mode 100644 index ec60dac579d2883b7bba1d67bcc54e89a84584d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmXX@U2Icj7=BKB`h%-yXPIoPRxJaTW}6AluHw8oZO?(#l(DTn+j^si1xXESQkPxq zf`kw4mYSR>QEE17;JAeVp)rucQj!4;R5QxXHX?Ab#HEXyVq!Ev_|d5NwQ%+3ec$JM zpPz5+=1tj_s_ENm%h!rZQv+}fXi&fw9PlUL$SgMk{1I?{QD74Y8#xSl5{{{i19hlB znppzmPsyu;nK{_2P^I@+3D)-!aCM(O-0}KHGSBqwMNKm6G;&|y1zL_!xFK(NAgA9W zrh)Cuo#uJM96pQL+kEmF&1&>`c+aEMPuQrGECXlSVD?db=I^$7!9Zy?*X$FRJA>ug~_EiWG0xfP{wOZ1k*= zJ4Gt`d<@=+XfS?%;vmWbi_|vtJBOCxtN?Rx#Ae()+1!|E4tmS)jS1-!;%IDbz-oizsYk5Paf$Ady*TeCYMF7)h!*KG0KOeWa0UDE`{s~jmPiob5sWFD9v6XYy z&nV9Or*l^aJ$BLJA0;dCwsgX_1m-AUjT2)k-H*tH1E%!*g4bt!b9T+?PJeC*O?$G) z?(eLkm-qZwYKob`ufkF$iXWF&AEk;6f6H0l;+aM^rdfku4teasUuqRH-d+EdX#RP_ z`CxifwnoD5Zd8WzouYmr1SddOG1Bd zNd29jYL{HPlNCaNE_I25x3;?$lB^K)dDRu#rrfRty7hPY)nDmlw>vo>t@d~C>hkWA z)CqEXi|m#=7kRE%>hBGN)xXHvLs>G>k&6rL?v+Ba`Y-m1;esp ' ') do - begin {copy up to next blank} - ch := str[i]; - i := i + 1; - if ch in ['a'..'z'] then - ch := chr(ord(ch) - $20); {ensure upper case} - name := concat(name, ch); - end; - if i > 1 then {remove name} - delete(str, 1, i - 1); - end; {gname} - - begin {g2text} - g2text := false; {assume the worst} - gname; {get input file name} - assign(fin, name); - reset(fin); - if ioresult = 255 then - begin - writeln('Unable to open ', name, ' for input'); - exit - end; - gname; {get output file name} - if not cpmname(name) then - begin - writeln('Illegal CP/M name: ', name); - exit - end; - assign(fout, name); - rewrite(fout); - if ioresult = 255 then - begin - writeln('Unable to open ', name, ' for output'); - exit - end; - g2text := true - end; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/HOME.ASM b/software/CPM/CPM17_MTPUG_05/HOME.ASM deleted file mode 100644 index 8a36c51..0000000 --- a/software/CPM/CPM17_MTPUG_05/HOME.ASM +++ /dev/null @@ -1,11 +0,0 @@ - title @home -esc equ 1bh -bdos equ 5 - - -home:: ld de,hom ;cursor home - ld c,9 - jp bdos -hom: db esc,'H$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/HOME.REL b/software/CPM/CPM17_MTPUG_05/HOME.REL deleted file mode 100644 index 301ae1d365d3687d7b6d439419beb436d5f9ff96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-kdnR~nc&j$Q!1IF%PL2rAl|iWM+0%#*SZI?L1` oqZjz0mMfl}VdjDW=9U_HC-H*^)If@LIzftg9c}%?E&u=k diff --git a/software/CPM/CPM17_MTPUG_05/IC.ASM b/software/CPM/CPM17_MTPUG_05/IC.ASM deleted file mode 100644 index ce99d16..0000000 --- a/software/CPM/CPM17_MTPUG_05/IC.ASM +++ /dev/null @@ -1,11 +0,0 @@ - title @ic -esc equ 1bh -bdos equ 5 - - -ic:: ld de,inc ;cursor home - ld c,9 - jp bdos -inc: db esc,'@$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/IC.REL b/software/CPM/CPM17_MTPUG_05/IC.REL deleted file mode 100644 index 30b4e83f4580ef86a7e0e72e72fd130ba55ca8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 wcmZpQzMIF%PLaH{eZFfh!MVxS!W02CJqF8}}l diff --git a/software/CPM/CPM17_MTPUG_05/IL.ASM b/software/CPM/CPM17_MTPUG_05/IL.ASM deleted file mode 100644 index 489f186..0000000 --- a/software/CPM/CPM17_MTPUG_05/IL.ASM +++ /dev/null @@ -1,10 +0,0 @@ - title @il -esc equ 1bh -bdos equ 5 - -il:: ld de,iil ;INSERT line - ld c,9 - jp bdos -iil: db esc,'L$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/IL.REL b/software/CPM/CPM17_MTPUG_05/IL.REL deleted file mode 100644 index 80c492ae9b6eb1f840de61c8e881a29c3bb5bdb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpQ#iIF%PLaH<*=Ffh!Mf{+$MXPFvg^a4NB la>cVV%v=z_+)^X&B!2LK8c2gqCs2bRucNIWSPKJ@006UR7ZU&g diff --git a/software/CPM/CPM17_MTPUG_05/KBOFF.ASM b/software/CPM/CPM17_MTPUG_05/KBOFF.ASM deleted file mode 100644 index e75fb5d..0000000 --- a/software/CPM/CPM17_MTPUG_05/KBOFF.ASM +++ /dev/null @@ -1,10 +0,0 @@ - title @kboff -esc equ 1bh -bdos equ 5 - -kboff:: ld de,kb2 ;keayboard off - ld c,9 - jp bdos -kb2: db esc,'}$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/KBOFF.REL b/software/CPM/CPM17_MTPUG_05/KBOFF.REL deleted file mode 100644 index 7930842559612148bf549f239d798dbf12bc1955..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpjAa!H*&6x{Awy1nb$#h^~xuV0M?8Lx$V48#ogS1_z@&X1?T~1p`sR9Ouc~bMF pWb^_*)N;kMGt68Nz}!+J?<9WkfEq}t4oImWucNIWSS16I0012l8Ug?S diff --git a/software/CPM/CPM17_MTPUG_05/KBON.ASM b/software/CPM/CPM17_MTPUG_05/KBON.ASM deleted file mode 100644 index 95fff5a..0000000 --- a/software/CPM/CPM17_MTPUG_05/KBON.ASM +++ /dev/null @@ -1,10 +0,0 @@ - title @kbon -esc equ 1bh -bdos equ 5 - -kbon:: ld de,kb1 ;keyboard on - ld c,9 - jp bdos -kb1: db esc,'{$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/KBON.REL b/software/CPM/CPM17_MTPUG_05/KBON.REL deleted file mode 100644 index c6db6fea558a6e291b4a47b6051c2f37853c4bac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-kh(GZ_5znJDqmhYFtA+FVNiBrU_3BQLWDuuwo`clgP<;_tyKX7!#pW4A)^=g kp_VJ2onhvJ0Opn&c_;CM2h>1{b-;>w9c}%<>KKRw0P^@5sQ>@~ diff --git a/software/CPM/CPM17_MTPUG_05/LOEWNER.DOC b/software/CPM/CPM17_MTPUG_05/LOEWNER.DOC deleted file mode 100644 index fb9dae6..0000000 --- a/software/CPM/CPM17_MTPUG_05/LOEWNER.DOC +++ /dev/null @@ -1,135 +0,0 @@ -\cmd` -`formfeed off,draft,lm5,rm70,pl72 -`tm2,bm5 - - - `out14,27,69`MT+ Pascal Library Extension : - `out14`============================== -`out27,70` - - -procedure `out14`cpos`out20`(zeile,spalte); - Cursor Positionierung - - -procedure `out14`home`out20`; - Cursor wird in die linke obere Ecke gesetzt - - -procedure `out14`cls`out20`; - L|scht den Bildschirm und setzt den Cursor in die linke obere - Ecke - - -procedure `out14`ceop`out20`; - L|scht den Bildschirm bis zum Ende, inkl. Cursor Position - - -procedure `out14`ctop`out20`; - L|scht den Bildschirm bis zum Anfang, inkl. Cursor Position - - -procedure `out14`ceol`out20`; - L|scht die Zeile bis zum Ende, inkl. Cursor Position - - -procedure `out14`il`out20`; - F}gt eine Zeile in H|he der Cursor-Position ein, dabei werden - die nachfolgenden Zeilen um eine Zeile nach unten ger}ckt und - eventuell dabei die letzte Zeile gel|scht - - -procedure `out14`dl`out20`; - L|scht die Zeile in der der Cursor ist und r}ckt die - nachfolgenden Zeilen auf - - -procedure `out14`dc`out20`; - L|scht das Zeichen, auf dem der Cursor steht und l{~t den Rest - der Zeile von rechts aufr}cken - - -procedure `out14`savec`out20`; - Das Terminal merkt sich die Cursorposition, um sp{ter durch - ein "_restc_" an diese Position wieder zur}ckzukehren - - -procedure `out14`restc`out20`; - Das Terminal positioniert den Cursor an die Stelle auf dem - Bildschirm, die sich durch die "procedure _savec_" gemerkt - wurde - - -procedure `out14`erasel`out20`; - L|scht die gesamte Zeile, in der der Cursor steht, ohne - aufr}cken - - -`np`procedure `out14`kboff`out20`; - Schaltet die Tastatur aus, so da~ keine weitere Eingabe mehr - m|glich ist (siehe kbon) - - -procedure `out14`kbon`out20`; - Schaltet die Tastatur nach einem "_kboff_" wieder ein - - -procedure `out14`ebl`out20`; - L|scht die Zeile vom Beginn der Zeile bis zum Cursor (inkl.) - - -procedure `out14`cuoff`out20`; - Schaltet den Cursor aus - - -procedure `out14`cuon`out20`; - Schaltet den Cursor wieder ein - - -procedure `out14`on25`out20`; - Erm|glicht den Zugang zur Status- (25.) Zeile - - -procedure `out14`off25`out20`; - L|scht die 25. Zeile (Statuszeile) und ein weiterer Zugriff - auf diese ist bis auf ein weiteres "_on25_" Kommando nicht - m|glich - - -procedure `out14`time`out20`(var x:string); - Die Variable "x" bekommt einen String der L{nge 8 in der Form - "hh:mm:ss" zugewiesen - - -procedure `out14`date`out20`(var x:string); - Die Variable "x" bekommt einen String der L{nge 10 in der Form - "dd.mm.19yy" zugewiesen - - -procedure `out14`day`out20`(var x:string); - Die Variable "x" bekommt einen String variabler L{nge mit dem - deutschen Text des Wochentages zugewiesen - - -procedure `out14`ic`out20`; - F}gt ein Zeichen an der Cursorposition ein und l{~t den rest - der Zeile (inkl. Cursorpos.) nach rechts r}cken. Evtl. in der - 80. Spalte vorhandene Zeichen gehen verloren - - -procedure `out14`xic`out20`; - Schaltet den "_ic_" -modus aus; - - -procedure `out14`revon`out20`; - Von nun an werden die Zeichen 'invertiert' (wei~ auf schwarz) - geschrieben - - -procedure `out14`revoff`out20`; - Die Zeichen werden nun nach einem "_revon_" wieder normal - (wei~ auf schwarz) geschrieben - - -cedure `out14`revoff`out20`; - Die Zeichen werden nun nach einem "_revon_" wieder norm \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/OFF25.ASM b/software/CPM/CPM17_MTPUG_05/OFF25.ASM deleted file mode 100644 index a2a2342..0000000 --- a/software/CPM/CPM17_MTPUG_05/OFF25.ASM +++ /dev/null @@ -1,12 +0,0 @@ - title @off25 -esc equ 1bh -bdos equ 5 - -off25:: ld de,o2 - ld c,9 - jp bdos -o2: db esc,'y1$' - - end - - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/OFF25.REL b/software/CPM/CPM17_MTPUG_05/OFF25.REL deleted file mode 100644 index 2879205490e78987576569fc5e95d64731565b3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpjAboRYPj5oVmy~4XNCyU%D+Ub8P7I6(rb&n}NZa(dOuWFrHLs^9CEJ35VV;z- q9|MSrXJ?qXAb`20M&3#M-~ly|Qk_oa1q_0`j<$XUAQeDmL;(N`Tp8&A diff --git a/software/CPM/CPM17_MTPUG_05/ON25.ASM b/software/CPM/CPM17_MTPUG_05/ON25.ASM deleted file mode 100644 index d858202..0000000 --- a/software/CPM/CPM17_MTPUG_05/ON25.ASM +++ /dev/null @@ -1,10 +0,0 @@ - title @on25 -esc equ 1bh -bdos equ 5 - -on25:: ld de,o1 - ld c,9 - jp bdos -o1: db esc,'x1$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/ON25.REL b/software/CPM/CPM17_MTPUG_05/ON25.REL deleted file mode 100644 index b0b084ea7620f146bd5d60381f1875101f3de555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-kiOm1o8a>0v2vsX1IrZy24yD(#skwNL>Q!Pcw8o4VBnZHCnej0fnlE1s^yE7 r{TM*3cy@-F3j&y1YUG{74<1khDc0#!Ucey8>uBp&08#-|Mic-51mPMK diff --git a/software/CPM/CPM17_MTPUG_05/PROCREF.COM b/software/CPM/CPM17_MTPUG_05/PROCREF.COM deleted file mode 100644 index 7e3322c849c92625e15f347088fc17ff510e4960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12160 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 E05~QC5C8xG diff --git a/software/CPM/CPM17_MTPUG_05/PROCREF.SRC b/software/CPM/CPM17_MTPUG_05/PROCREF.SRC deleted file mode 100644 index fb97784..0000000 --- a/software/CPM/CPM17_MTPUG_05/PROCREF.SRC +++ /dev/null @@ -1,191 +0,0 @@ -{Produce a listing of procedure calls -- who calls whom} -program procref; - - type - wordtype = string[8]; - itemp = ^item; - item = - record - w: wordtype; - left, right: itemp; - end; - strptr = ^string; - - var - idstart, idset: set of char; - word: wordtype; - line: string[132]; - lptr: integer; - fin, fout: text; - t: itemp; - strp: strptr; - lower: array [char] of char; - done: boolean; - fresult: integer; - - external function g2text(var str: string; - var inf, outf: text): boolean; - external function @cmd: strptr; - - - procedure getword; - - var - wlen: integer; - ch: char; - - begin {get a word from input line} - wlen := 0; - word := ''; - while (lptr <= length(line)) and (not (line[lptr] in idstart)) do - lptr := lptr + 1; {scan to first identifier} - while (lptr <= length(line)) and (line[lptr] in idset) do - begin {copy identifier} - ch := lower[line[lptr]]; {uniform case} - if (ch <> '_') and (wlen < 8) then - begin {omit underscore, stop at 8 chars} - wlen := wlen + 1; - word[wlen] := ch - end; - lptr := lptr + 1; - end; - word[0] := chr(wlen); {update word length} - end; {getword} - - - procedure init; - - var - i: char; - - begin {initialize variables} - idstart := ['A'..'Z', 'a'..'z', '@', '_']; - idset := idstart + ['0'..'9']; - for i := chr(0) to chr(127) do - lower[i] := i; - for i := 'A' to 'Z' do - lower[i] := chr(ord(i) + $20); - t := nil; - end; {init} - - - procedure saveword; - - var - x, y: itemp; - found, less: boolean; - - begin {search for word in binary tree, add it if not already there} - if t = nil then - begin {first entry} - new(t); - t^.w := word; - t^.left := nil; - t^.right := nil; - end - else - begin {all subsequent entries} - x := t; - found := false; - while (x <> nil) and (not found) do - begin - y := x; {previous entry} - if word < x^.w then {search left subtree} - begin - x := x^.left; - less := true - end - else if word > x^.w then {search right subtree} - begin - x := x^.right; - less := false - end - else {got it} - found := true - end; - if not found then - begin - new(x); - if less then - y^.left := x - else - y^.right := x; - x^.w := word; - x^.left := nil; - x^.right := nil; - end; - end; - end; {saveword} - - - function is_saved: boolean; - - var - x: itemp; - found: boolean; - - begin {determine whether word is in binary tree} - found := false; - x := t; - while (x <> nil) and (not found) do - if word < x^.w then - x := x^.left - else if word > x^.w then - x := x^.right - else - found := true; - is_saved := found - end; {is_saved} - - begin {procref} - strp := @cmd; {get commmand line} - line := strp^; - if not g2text(line, fin, fout) then - exit; {open files if possible} - init; - while not eof(fin) do - begin - readln(fin, line); - lptr := 1; - getword; - if word = 'external' then - getword; - if (word = 'procedur') or (word = 'function') or - (word = 'program') then - begin - getword; - saveword - end; - end; - - writeln('End of pass 1'); - - reset(fin); - if ioresult = 255 then - begin - writeln('Unable to reset input file'); - exit - end; - while not eof(fin) do - begin - readln(fin, line); - lptr := 1; - getword; - done := false; - while (length(word) > 0) and (not done) do - begin - if is_saved then - begin - writeln(fout, line); - done := true - end - else - getword - end - end; - close(fout, fresult); - if fresult = 255 then - writeln('Unable to close output file'); - - end {procref} . - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/RESTC.ASM b/software/CPM/CPM17_MTPUG_05/RESTC.ASM deleted file mode 100644 index aebdc12..0000000 --- a/software/CPM/CPM17_MTPUG_05/RESTC.ASM +++ /dev/null @@ -1,10 +0,0 @@ - title @restc -esc equ 1bh -bdos equ 5 - -restc:: ld de,rest ;restore cursor - ld c,9 - jp bdos -rest: db esc,'k$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/RESTC.REL b/software/CPM/CPM17_MTPUG_05/RESTC.REL deleted file mode 100644 index 3449861eb771f315cfd017f2f1d50c4dea73de97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpjATu-OuEc{-l~7X`O9uv)D>@9yP7I6(rb&n}NSk&lFJKV$6!i_{D_~%lC&knt oqZjz0mMfl}VdjDW=9U_HC-H*^)IdsgKuQI99c}%)C#eo{ diff --git a/software/CPM/CPM17_MTPUG_05/REVON.ASM b/software/CPM/CPM17_MTPUG_05/REVON.ASM deleted file mode 100644 index 85dc7b8..0000000 --- a/software/CPM/CPM17_MTPUG_05/REVON.ASM +++ /dev/null @@ -1,11 +0,0 @@ - title @revon -esc equ 1bh -bdos equ 5 - - -revon:: ld de,rev ;cursor home - ld c,9 - jp bdos -rev: db esc,'p$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/REVON.REL b/software/CPM/CPM17_MTPUG_05/REVON.REL deleted file mode 100644 index 1c4c34a66dcd48169dc2192526de3af63275e253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpjATu*|_U#3sDxoP~UOF(aT+v}rc4A;WFik>)LE3^-c>#l{r)Z?DRRIITJShgM F0{{mD4g&xH diff --git a/software/CPM/CPM17_MTPUG_05/SAVEC.ASM b/software/CPM/CPM17_MTPUG_05/SAVEC.ASM deleted file mode 100644 index 134a837..0000000 --- a/software/CPM/CPM17_MTPUG_05/SAVEC.ASM +++ /dev/null @@ -1,10 +0,0 @@ - title @savec -esc equ 1bh -bdos equ 5 - -savec:: ld de,sve ;save cursor - ld c,9 - jp bdos -sve: db esc,'j$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/SAVEC.REL b/software/CPM/CPM17_MTPUG_05/SAVEC.REL deleted file mode 100644 index 02a6c92275505c63690602da31694b996a0737c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZpjAaf&jX2gR~6Va3qO9uv)D>@9yP7I6(rb&n}NSkshFJKV$WsMZ&D_~%lC&knt pqZjz0mMfl}VdjDW=9U_HC-H*^)IdsgI)O?Bc^z&2z$zJt1ON!H7mxq| diff --git a/software/CPM/CPM17_MTPUG_05/TIME.ASM b/software/CPM/CPM17_MTPUG_05/TIME.ASM deleted file mode 100644 index 6007138..0000000 --- a/software/CPM/CPM17_MTPUG_05/TIME.ASM +++ /dev/null @@ -1,45 +0,0 @@ - title @time - -time:: pop ix ;save return addr. - ld bc,3000h+':' ;preset for "or '0'" and save ':' - pop hl ;get addr. of var - ld (hl),8 ;save length in var[0] - inc hl ;and start transfer of data - in a,(0e5h) ;h10 - and 03h ;0,1 or 2 - or b ;get ascii - ld (hl),a ;save it - inc hl ;for the next val - in a,(0e4h) ;and go on for the other's - and 0fh - or b - ld (hl),a - inc hl - ld (hl),c ;put ':' in string - inc hl - in a,(0e3h) - and 07h - or b - lä (hl),a - inc hl - in a,(0e2h) - and 0fh - or b - ld (hl),a - inc hl - ld (hl),c - inc hl - in a,(0e1h) - and 07h - or b - ld (hl),a - inc hl - in a,(0e0h) - and 0fh - or b - ld (hl),a - jp (ix) ;this means RETURN (popped before) - - end - - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/TIME.REL b/software/CPM/CPM17_MTPUG_05/TIME.REL deleted file mode 100644 index 9470413e96c53b7f90ed27caf8ec8a7eb4046ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZn-kd=y#OmKCXawXD%f#u2r#$68?`r7yeHz>H>F520U&Ag*`+mmAEYwU%RN8D}~ m?reAs5_tp{DS(PR0Ev{nUS`F>C@K^jn9jh!Fi#3d5C8z;Nhk#X diff --git a/software/CPM/CPM17_MTPUG_05/XIC.ASM b/software/CPM/CPM17_MTPUG_05/XIC.ASM deleted file mode 100644 index fc36412..0000000 --- a/software/CPM/CPM17_MTPUG_05/XIC.ASM +++ /dev/null @@ -1,11 +0,0 @@ - title @xic -esc equ 1bh -bdos equ 5 - - -xic:: ld de,xinc ;cursor home - ld c,9 - jp bdos -xinc: db esc,'O$' - end - \ No newline at end of file diff --git a/software/CPM/CPM17_MTPUG_05/XIC.REL b/software/CPM/CPM17_MTPUG_05/XIC.REL deleted file mode 100644 index 40484c95aa93e7fbf1f45f20266546ef45a82426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 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 348 } -{ evaluation of Bessel function of the second kind } - -var x,ordr : real; - done : boolean; - -external procedure cls; - -function bessy(x,n: real): real; -{ cylindical bessel function of the second kind } -const small = 1.0E-8; - euler = 0.57721566; - pi = 3.1415926; - pi2 = 0.63661977; { 2/pi } -var j : integer; - - x2,sum,sum2,t,t2, - ts,term,xx,y0,y1, - ya,yb,yc,ans,a,b, - sina,cosa : real; - -begin { function bessy } - if x<12 then - begin - xx:=0.5*x; - x2:=xx*xx; - t:=ln(xx)+euler; - sum:=0.0; - term:=t; - y0:=t; - j:=0; - repeat - j:=j+1; - if j<>1 then sum:=sum+1/(j-1); - ts:=t-sum; - term:=-x2*term/(j*j)*(1-1/(j*ts)); - y0:=y0+term - until abs(term)11, asymtotic expansion } - bessy:=sqrt(2/(pi*x))*sin(x-pi/4-n*pi/2) -end; { function bessy } - -begin - cls; - done:=false; - writeln; - repeat - write('Order? '); - readln(ordr); - if ordr<0.0 then done:=true - else - begin - repeat - write('Arg? '); - readln(x) - until x>=0.0; - writeln('Y Bessel is ',bessy(x,ordr)) - end { if } - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/CFIT1.PAS b/software/CPM/CPM18_MTPUG_06/CFIT1.PAS deleted file mode 100644 index 327e554..0000000 --- a/software/CPM/CPM18_MTPUG_06/CFIT1.PAS +++ /dev/null @@ -1,77 +0,0 @@ -program cfit1; { -> 139 } -{ Pascal program to perform a linear least-squares fit } - -const max = 20; - -type index = 1..max; - ary = array[index] of real; - -var x,y,y_calc : ary; - n : integer; - first,done : boolean; - seed,a,b : real; - -external procedure cls; - -{$I RANDOM.LIB } - -procedure get_data(var x,y: ary; - var n: integer); -{ get values for n and arrays x,y } -{ y is randomly scattered about a straight line } - -const a = 2.0; - b = 5.0; - -var i,j : integer; - fudge : real; - -begin - write('Fudge? '); - readln(fudge); - if fudge<0.0 then done:=true - else - begin - repeat - write('How many points? '); - readln(n) - until (n>2) and (n<=max); - if first then first:=false else cls; - - for i:=1 to n do - begin - j:=n+1-i; - x[i]:=j; - y[i]:=(a+b*j)*(1.0+(2.0*random(0)-1.0)*fudge) - end { for-loop } - end { if } -end; { procedure get_data } - - -procedure write_data; -{ print out the answers } -var i : integer; - -begin - writeln; - writeln(' I X Y'); - for i:=1 to n do - writeln(i:3,x[i]:8:1,y[i]:9:2); - writeln -end; { write_data } - -begin { MAIN program } - first:=true; - seed:=4.0; - cls; - done:=false; - repeat - get_data(x,y,n); - if not done then - begin - write_data; - { ***** ---> more lines to be added here ********* } - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/CFIT1A.PAS b/software/CPM/CPM18_MTPUG_06/CFIT1A.PAS deleted file mode 100644 index 71f5e09..0000000 --- a/software/CPM/CPM18_MTPUG_06/CFIT1A.PAS +++ /dev/null @@ -1,92 +0,0 @@ -program cfit1A; { -> 142 } -{ Pascal program to perform a linear least-squares fit } - -const max = 20; - -type index = 1..max; - ary = array[index] of real; - -var x,y,y_calc : ary; - n : integer; - first,done : boolean; - seed,a,b : real; - -external procedure cls; - -function random(dummy: integer): real; -{ random number 0-1 } -{ define seed=4.0 as global } - -const pi = 3.14159; - -var x : real; - i : integer; - -begin { RANDOM } - x:=seed+pi; - x:=exp(5.0*ln(x)); - seed:=x-trunc(x); - random:=seed -end; { RANDOM } - - - -procedure get_data(var x,y: ary; - var n: integer); -{ get values for n and arrays x,y } -{ y is randomly scattered about a straight line } - -const a = 2.0; - b = 5.0; - -var i,j : integer; - fudge : real; - -begin - write('Fudge? '); - readln(fudge); - if fudge<0.0 then done:=true - else - begin - repeat - write('How many points? '); - readln(n) - until (n>2) and (n<=max); - if first then first:=false else cls; - for i:=1 to n do - begin - j:=n+1-i; - x[i]:=j; - y[i]:=(a+b*j)*(1.0+(2.0*random(0)-1.0)*fudge) - end { for-loop } - end { if } -end; { procedure get_data } - - -procedure write_data; -{ print out the answers } -var i : integer; - -begin - writeln; - writeln(' I X Y'); - for i:=1 to n do - writeln(i:3,x[i]:8:1,y[i]:9:2); - writeln -end; { write_data } - -begin { MAIN program } - cls; - seed:=4.0; - first:=true; - done:=false; - repeat - get_data(x,y,n); - if not done then - begin - write_data; - { ***** ---> more lines to be added here ********* } - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/CFIT2.PAS b/software/CPM/CPM18_MTPUG_06/CFIT2.PAS deleted file mode 100644 index 78b7b42..0000000 --- a/software/CPM/CPM18_MTPUG_06/CFIT2.PAS +++ /dev/null @@ -1,96 +0,0 @@ -program cfit2; { -> 142+147 } -{ plot service included } -{ Pascal program to perform a linear least-squares fit } - -const max = 20; - -type index = 1..max; - ary = array[index] of real; - -var x,y,y_calc : ary; - n : integer; - first,done : boolean; - seed,a,b : real; - -external procedure cls; - -function random(dummy: integer): real; -{ random number 0-1 } -{ define seed=4.0 as global } - -const pi = 3.14159; - -var x : real; - i : integer; - -begin { RANDOM } - x:=seed+pi; - x:=exp(5.0*ln(x)); - seed:=x-trunc(x); - random:=seed -end; { RANDOM } - - - -procedure get_data(var x,y: ary; - var n: integer); -{ get values for n and arrays x,y } -{ y is randomly scattered about a straight line } - -const a = 2.0; - b = 5.0; - -var i,j : integer; - fudge : real; - -begin - write('Fudge? '); - readln(fudge); - if fudge<0.0 then done:=true - else - begin - repeat - write('How many points? '); - readln(n) - until (n>2) and (n<=max); - if first then first:=false else cls; - for i:=1 to n do - begin - j:=n+1-i; - x[i]:=j; - y[i]:=(a+b*j)*(1.0+(2.0*random(0)-1.0)*fudge) - end { for-loop } - end { if } -end; { procedure get_data } - - -procedure write_data; -{ print out the answers } -var i : integer; - -begin - writeln; - writeln(' I X Y'); - for i:=1 to n do - writeln(i:3,x[i]:8:1,y[i]:9:2); - writeln -end; { write_data } - -{$I PLOT.LIB } - -begin { MAIN program } - first:=true; - cls; - seed:=4.0; - done:=false; - repeat - get_data(x,y,n); - if not done then - begin - write_data; - plot(x,y,y,-n); - { ***** ---> more lines to be added here ********* } - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/CFIT4.PAS b/software/CPM/CPM18_MTPUG_06/CFIT4.PAS deleted file mode 100644 index 7c57904..0000000 --- a/software/CPM/CPM18_MTPUG_06/CFIT4.PAS +++ /dev/null @@ -1,106 +0,0 @@ -program cfit4; {164} - -{ plot service included } -{ Pascal program to perform a linear least-squares fit } - -const max = 20; - -type index = 1..max; - ary = array[index] of real; - -var x,y,y_calc : ary; - n : integer; - first,done : boolean; - a,b,correl_coef, - sigma_a,sigma_b, - see,seed : real; - -external procedure cls; - -function random(dummy: integer): real; -{ random number 0-1 } -{ define seed=4.0 as global } - -const pi = 3.14159; - -var x : real; - i : integer; - -begin { RANDOM } - x:=seed+pi; - x:=exp(5.0*ln(x)); - seed:=x-trunc(x); - random:=seed -end; { RANDOM } - - - -procedure get_data(var x,y: ary; - var n: integer); -{ get values for n and arrays x,y } -{ y is randomly scattered about a straight line } - -const a = 2.0; - b = 5.0; - -var i,j : integer; - fudge : real; - -begin - write('Fudge? '); - readln(fudge); - if fudge<0.0 then done:=true - else - begin - repeat - write('How many points? '); - readln(n) - until (n>2) and (n<=max); - if first then first:=false else cls; - for i:=1 to n do - begin - j:=n+1-i; - x[i]:=j; - y[i]:=(a+b*j)*(1.0+(2.0*random(0)-1.0)*fudge) - end { for-loop } - end { if } -end; { procedure get_data } - - -procedure write_data; -{ print out the answers } -var i,j : integer; - -begin - writeln; - writeln(' I X Y YCALC'); - for i:=1 to n do - writeln(i:3,x[i]:8:1,y[i]:9:2,y_calc[i]:9:2); - writeln; - writeln('Intercept is ',a:8:3,', sigma is ',sigma_a:8:3); - writeln(' Slope is ',b:8:2,', sigma is ',sigma_b:8:3); - writeln; - writeln('Correlation coeffizient is ',correl_coef:7:4); - for j:=1 to 40 do for i:=1 to 10000 do; cls -end; { write_data } - -{$I C:LINFIT2.LIB } - -{$I PLOT.LIB } - -begin { MAIN program } - seed:=4.0; - cls; - first:=true; - done:=false; - repeat - get_data(x,y,n); - if not done then - begin - linfit(x,y,y_calc,a,b,n); - write_data; - plot(x,y,y_calc,n); - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/CURSOR.ERL b/software/CPM/CPM18_MTPUG_06/CURSOR.ERL deleted file mode 100644 index 19645c8f27f4db5319fe202687ff6eaff04e4902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmZpja5ZGg$ZJi;>Yv}3A>&52m6Xfb2+&JN~$i(2w3Mru~q9&#qlA@lh zqPBi)u0f8j{yvQpLnZ_UUtEwjLp@>-PJLqF;rwyK&V2BsmfOqQ4c{=R$sjU21e6F#%T=<%ngnYZkup1 zurtimxy8UBr?c5%0Xw(rF*^Z8-^UM`c=kO7$}9+Ac9CI9Y;@oODX}&fq`Ex zA|Zg;tbu{OpT|Ihakc{k^YJnX5r(r17#JS~^KdbwU0`7NsN2TMV4T6gP;urkQ-kCd z1_m29m_f=Lpa${WfEv`+12pK+#e^NV)`V$Ko$b^hr6->0(Z!O~+~D|_8R*P}7P&Rk zxm}wcXKjpG6PC-xkg+3nsgj0Z7at>gkIn^%D~_mTh%f*J8hL;MO#;P6F}h-$Pn#YW zZH!qPTs?Kw)1=KA0Spy4&h9(Fb4!Fl&TMo324=HX2KJscx8E?FUFg90c!mWF(77_Y zV%)tD<;*VMpM6%YJtfA!Xmbt+)1GsBjF!Id0t;HGHu1CIWn;mE{ z&h}vD+tJ`2=U^nn6=hYVQu2gZahayl@@4Km4n|T*leDVllq>-WX)avp?!izbHK}SA z*OGD#W~D{Six#YMk8&{5DpInV#8aBWth7>L(elOaAwZ!?Tv}DY6ax`jc{~6tG)rnq z=@DjS^_9xYmE4^gjI62_RUJB0+QO{7Qem;m8utVTEvF=}BAt>0Y-$TuE1q{q43=C-v3_LSV zSg<$*1c&tWGq|v_9Pv20fW;x$&8cU0gA0pmiO0zcEDqs8!9AS~F07`m8Yey2-2FrR YBO-fdFr<79b!83pJix#(Pl{#$01OE{B>(^b diff --git a/software/CPM/CPM18_MTPUG_06/CURSOR2.SRC b/software/CPM/CPM18_MTPUG_06/CURSOR2.SRC deleted file mode 100644 index b41b99b..0000000 --- a/software/CPM/CPM18_MTPUG_06/CURSOR2.SRC +++ /dev/null @@ -1,21 +0,0 @@ -MODULE Cursor2; - -(*******************************************) -(* *) -(* created 27 - Aug - 82 by P.Hochstrasser *) -(* *) -(* this module is part of the utility.lib *) -(* *) -(*******************************************) - -EXTERNAL PROCEDURE GotoXY(x,y: INTEGER); - -PROCEDURE PrintAt(x,y:INTEGER; someText: string); - -BEGIN - GotoXY(x,y); - WRITE(someText); -END; - -MODEND. -R \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/DETERM.PAS b/software/CPM/CPM18_MTPUG_06/DETERM.PAS deleted file mode 100644 index 8a342f8..0000000 --- a/software/CPM/CPM18_MTPUG_06/DETERM.PAS +++ /dev/null @@ -1,71 +0,0 @@ -program determ; { -> 55 } -{ pascal program to calculate the determinant of a 3-by-3matrix } - -type ary2 = array[1..3,1..3] of real; - -var a : ary2; - n : integer; - yesno : char; - d : real; - -external procedure cls; - -procedure get_data(var a: ary2; - var n: integer); - -{ get values for n and arrays x,y } - -var i,j : integer; - -begin - n:=3; - writeln; - for i:=1 to n do - begin - for j:=1 to n do - begin - write(j:3,':'); - readln(a[i,j]) - end { j-loop } - end; { i-loop } - writeln; - for i:=1 to n do - begin - for j:=1 to n do - write(a[i,j]:7:4,' '); - writeln - end; - writeln - end; { procedure get_data } - - - - -function deter(a: ary2): real; - { calculate the determinant of a 3-by-3matrix } - -var - sum : real; - -begin - sum:=a[1,1]*(a[2,2]*a[3,3]-a[3,2]*a[2,3]) - -a[1,2]*(a[2,1]*a[3,3]-a[3,1]*a[2,3]) - +a[1,3]*(a[2,1]*a[3,2]-a[3,1]*a[2,2]); - deter:=sum -end; - - - -begin { MAIN program } - cls; - repeat - get_data(a,n); - d:=deter(a); - writeln('The determinant is',d); - writeln; - write('More?'); - readln(yesno); - cls - until (yesno<>'Y')and(yesno<>'y') -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/DIFFUS.PAS b/software/CPM/CPM18_MTPUG_06/DIFFUS.PAS deleted file mode 100644 index e339d9d..0000000 --- a/software/CPM/CPM18_MTPUG_06/DIFFUS.PAS +++ /dev/null @@ -1,142 +0,0 @@ -{ die ln-funktion bei MT+ ist fuer Werte kleiner 1E-5 aeussertst langsam, - so dass man das Gefuehl bekommt, das dass Programm sich aufhaengt. In- - folgedessen konnte ich dieses Programm nicht verifizieren. -Juergen } - -program diffus; { --> 302 } - -{ Pascal program to perform a linear least-squares fit } -{ for the diffusion of Zn and Cu } -{ with Gauss-Jordan routine } -{ Sperate modules needed: - GAUSSJ, - PLOT } - - -const maxr = 20; { data prints } - maxc = 4; { polynomial terms } - r = 1.987; { gas constant } - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2 = array[1..maxr,1..maxc] of real; - ary2s = array[1..maxc,1..maxc] of real; - -var - x,y,y_calc : ary; - t,d,resid : ary; - coef,sig : arys; - nrow,ncol : integer; - correl_coef,srs : real; - - -external procedure cls; - -procedure get_data(var x,y,t,d: ary; - var nrow: integer); -{ get values for nrow and arrays t,d } - -var i : integer; -begin - nrow:=7; - t[1]:=600.0; d[1]:=1.4E-12; - t[2]:=650.0; d[2]:=5.5E-12; - t[3]:=700.0; d[3]:=1.8E-11; - t[4]:=750.0; d[4]:=6.1E-11; - t[5]:=800.0; d[5]:=1.6E-10; - t[6]:=850.0; d[6]:=4.4E-10; - t[7]:=900.0; d[7]:=1.2E-9; - for i:=1 to nrow do - begin - x[i]:=1.0/(t[i]+273.0); - y[i]:=ln(d[i]) - end -end; { procedure get data } - - -procedure write_data; -{ print out the answers } -var i : integer; -begin - writeln; - writeln; - writeln(' I TC D DCALC'); - for i:=1 to nrow do - writeln(i:3,t[i]:8:0,d[i],' ',y_calc[i]); - writeln; writeln(' Coefficients '); - writeln(coef[1],' constant term'); - for i:=2 to ncol do - writeln(coef[i]); { other terms } - writeln; - writeln('D0=',(exp(coef[1])):7:2,' cm sq/sec.'); - writeln('Q =',(-r*coef[2]/1000.0):8:2,'kcal/mole'); - writeln;writeln('SRS= ',srs:7:3) -end; { write_data } - -{procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer);} -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } - -{$I C:SQUARE.LIB } - -{external procedure gaussj(var b: ary2s; - y: arys; - var coef: arys; - ncol: integer; - var error: boolean); -} -{$I GAUSSJ.LIB } - -procedure linfit(x, { independant variable } - y: ary; { dependent variable } - var y_calc: ary; { calculated dep. variable } - var resid: ary; { array of residuals } - var coef: arys; { coefficients } - var sig: arys; { error on coefficients } - nrow: integer; { length of array } - var ncol: integer); { number of terms } - -{ least squares fit to nrow sets of x and y pairs of points } -{ Seperate procedures needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauss-Jordan elimination } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - see,a1 : real; - -begin { procedure linfit } - ncol:=2; { number of terms } - for i:=1 to nrow do - begin { setup matrix } - xmatr[i,1]:=1.0; { first column } - xmatr[i,2]:=x[i] { second column } - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - srs:=0.0; - a1:=exp(coef[1]); - for i:=1 to nrow do - begin - y_calc[i]:=a1*exp(coef[2]*x[i]); - if y[i]<>0.0 then resid[i]:=y_calc[i]/y[i]-1.0 - else resid[i]:=y[i]/y_calc[i]-1.0; - srs:=srs+sqr(resid[i]) - end -end; { linfit } - - -begin { main program } - cls; - get_data(x,y,t,d,nrow); - linfit(x,y,y_calc,resid,coef,sig,nrow,ncol); - write_data -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/ERF4.PAS b/software/CPM/CPM18_MTPUG_06/ERF4.PAS deleted file mode 100644 index 07f9ce7..0000000 --- a/software/CPM/CPM18_MTPUG_06/ERF4.PAS +++ /dev/null @@ -1,81 +0,0 @@ -program erfd4; { -> 334 } - -{ evaluation of the gaussian error function } - -var x,er,ec : real; - done : boolean; - -external procedure cls; - -function erf(x: real): real; -{ infinite series expansion of the Gaussian error function } - -const sqrtpi = 1.7724538; - t2 = 0.66666667; - t3 = 0.66666667; - t4 = 0.07619048; - t5 = 0.01693122; - t6 = 3.078403E-3; - t7 = 4.736005E-4; - t8 = 6.314673E-5; - t9 = 7.429027E-6; - t10 = 7.820028E-7; - t11 = 7.447646E-8; - t12 = 6.476214E-9; - -var x2,sum : real; - i : integer; - -begin - x2:=x*x; - sum:=t5+x2*(t6+x2*(t7+x2*(t8+x2*(t9+x2*(t10+x2*(t11+x2*t12)))))); - erf:=2.0*exp(-x2)/sqrtpi*(x*(1+x2*(t2+x2*(t3+x2*(t4+x2*sum))))) -end; { function erf } - -function erfc(x: real): real; -{ complement of error function } -const sqrtpi = 1.7724538; - -var x2,v,sum : real; - -begin - x2:=x*x; - v:=1.0/(2.0*x2); - sum:=v/(1+8*v/(1+9*v/(1+10*v/(1+11*v/(1+12*v))))); - sum:=v/(1+3*v/(1+4*v/(1+5*v/(1+6*v/(1+7*sum))))); - erfc:=1.0/(exp(x2)*x*sqrtpi*(1+v/(1+2*sum))) -end; { function ercf } - -begin { main } - cls; - done:=false; - writeln; - repeat - write('Arg? '); - readln(x); - if x<0.0 then done:=true - else - begin - if x=0.0 then - begin - er:=0.0; - ec:=1.0 - end - else - begin - if x<1.5 then - begin - er:=erf(x); - ec:=1.0-er - end - else - begin - ec:=erfc(x); - er:=1.0-ec - end { if } - end; - writeln('X= ',x:6:2,', Erf= ',er:7:4,', Erfc= ',ec) - end { if } - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/ERFD.PAS b/software/CPM/CPM18_MTPUG_06/ERFD.PAS deleted file mode 100644 index 9281b3c..0000000 --- a/software/CPM/CPM18_MTPUG_06/ERFD.PAS +++ /dev/null @@ -1,50 +0,0 @@ -program erfd; { -> 326 } - -{ evaluation of the gaussian error function } - -var x,ans : real; - done : boolean; - -function erf(x: real): real; -{ infinite series expansion of the Gaussian error function } - -const sqrtpi = 1.7724538; - tol = 1.0E-6; - -var x2,sum,sum1,term: real; - i : integer; - -begin - if x=0.0 then erf:=0.0 - else if x>4.0 then erf:=1.0 - else - begin - x2:=x*x; - sum:=x; - term:=x; - i:=0; - repeat - i:=i+1; - sum1:=sum; - term:=2.0*term*x2/(1.0+2.0*i); - sum:=term+sum1 - until term 330 } -{ evaluation of the gaussian error function } - -var x,er,ec : real; - done : boolean; - -external procedure cls; - -function erf(x: real): real; -{ infinite series expansion of the Gaussian error function } - -const sqrtpi = 1.7724538; - tol = 1.0E-4; - -var x2,sum,sum1,term: real; - i : integer; - -begin - x2:=x*x; - sum:=x; - term:=x; - i:=0; - repeat - i:=i+1; - sum1:=sum; - term:=2.0*term*x2/(1.0+2.0*i); - sum:=term+sum1 - until term0 } - begin - simps(fx,lower,upper,tol,sum); - erf:=twopi*sum; - writeln('Erf of ',upper:7:2,', is ',erf:8:4) - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/FITPOL.PAS b/software/CPM/CPM18_MTPUG_06/FITPOL.PAS deleted file mode 100644 index ef8a172..0000000 --- a/software/CPM/CPM18_MTPUG_06/FITPOL.PAS +++ /dev/null @@ -1,148 +0,0 @@ -program fitpol; { -> 295 } -{ Pascal program to perform a linear least-squares fit } -{ to the ratio of 2 polynomials } -{ with Gauss-Jordan routine } -{ Sperate modules needed: - GAUSSJ} - - -const maxr = 20; { data prints } - maxc = 4; { polynomial terms } - -type - ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2 = array[1..maxr,1..maxc] of real; - ary2s = array[1..maxc,1..maxc] of real; - -var - x,y,y_calc : ary; - resid : ary; - coef,sig : arys; - nrow,ncol : integer; - correl_coef : real; - -external procedure cls; - -procedure get_data(var x: ary; { independant variable } - var y: ary; { dependant variable } - var nrow: integer); { length of vectors } -{ get values for n and arrays x,y } - -var i : integer; - -begin - { clausing factors } - nrow:=10; - x[1]:=0.1; y[1]:=0.9524; - x[2]:=0.2; y[2]:=0.9092; - x[3]:=0.5; y[3]:=0.8013; - x[4]:=1.0; y[4]:=0.6720; - x[5]:=1.2; y[5]:=0.6322; - x[6]:=1.5; y[6]:=0.5815; - x[7]:=2.0; y[7]:=0.5142; - x[8]:=3.0; y[8]:=0.4201; - x[9]:=4.0; y[9]:=0.3566; - x[10]:=6.0; y[10]:=0.2755; -end; { procedure get data } - -procedure write_data; -{ print out the answers } -var i : integer; -begin - writeln; - writeln; - writeln(' I X Y YCALC RESID'); - for i:=1 to nrow do - writeln(i:3,x[i]:8:1,y[i]:9:4,y_calc[i]:9:4,resid[i]:9:4); - writeln; writeln(' Coefficients errors '); - writeln(coef[1]:8:5,' ',sig[1],' constant term'); - for i:=2 to ncol do - writeln(coef[i]:8:5,' ',sig[i]); { other terms } - writeln; - writeln('Correlation coefficient is ',correl_coef:8:5) -end; { write_data } - -{procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer);} -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } -{$I C:SQUARE.LIB } - -{external procedure gaussj(var b: ary2s; - y: arys; - var coef: arys; - ncol: integer; - var error: boolean); -} -{$I GAUSSJ.LIB } - -procedure linfit(x, { independant variable } - y: ary; { dependent variable } - var y_calc: ary; { calculated dep. variable } - var resid: ary; { array of residuals } - var coef: arys; { coefficients } - var sig: arys; { error on coefficients } - nrow: integer; { length of array } - var ncol: integer); { number of terms } - -{ least squares fit to nrow sets of x and y pairs of points } -{ Seperate procedures needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauss-Jordan elimination } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - xi,yi,yc,srs,see, - sum_y,sum_y2 : real; - -begin { procedure linfit } - ncol:=4; { number of terms } - for i:=1 to nrow do - begin { setup matrix } - xi:=x[i]; - yi:=y[i]; - xmatr[i,1]:=1.0; { first column } - xmatr[i,2]:=-xi*yi; { second column } - xmatr[i,3]:=xi; { third column } - xmatr[i,4]:=-sqr(xi)*yi - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - sum_y:=0.0; - sum_y2:=0.0; - srs:=0.0; - for i:=1 to nrow do - begin - xi:=x[i]; - yi:=y[i]; - yc:=coef[1]+(-coef[2]*yi+coef[3]-coef[4]*xi*yi)*xi; - y_calc[i]:=yc; - resid[i]:=yc-yi; - srs:=srs+sqr(resid[i]); - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)); - if nrow=ncol then nm:=1 - else nm:=nrow-ncol; - see:=sqrt(srs/nm); - for i:=1 to ncol do { errors on solution } - sig[i]:=see*sqrt(a[i,i]) -end; { linfit } - - -begin { main program } - cls; - get_data(x,y,nrow); - linfit(x,y,y_calc,resid,coef,sig,nrow,ncol); - write_data -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/GAUSID.PAS b/software/CPM/CPM18_MTPUG_06/GAUSID.PAS deleted file mode 100644 index edafb47..0000000 --- a/software/CPM/CPM18_MTPUG_06/GAUSID.PAS +++ /dev/null @@ -1,179 +0,0 @@ -program gausid; { -> 129 } -{ pascal program to perform simultaneous solution } -{ by Gauss-Seidel } -{ procedure SEID is included } - -const maxr = 8; - maxc = 8; - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2s = array[1..maxr,1..maxc] of real; - -var y : ary; - coef : arys; - a : ary2s; - n,m : integer; - first, - error : boolean; - -external procedure cls; - -procedure get_data - (var a : ary2s; - var y : ary; - var n,m: integer); -{ get values for n and arrays a,y } - -var i,j : integer; - -begin - writeln; - repeat - write('How many equations? '); - readln(n); - if first then first:=false else cls - until n1 then - begin - for i:=1 to n do - begin - writeln('Equation',i:3); - for j:=1 to n do - begin - write(j:3,':'); - read(a[i,j]) - end; - write(' C:'); - read(y[i]); - readln { clear the line } - end; - writeln; - for i:=1 to n do - begin - for j:=1 to m do - write(a[i,j]:7:4,' '); - writeln(':',y[i]:7:4) - end; - writeln - end { if n>1 } - else if n<0 then n:=-n; - m:=n -end; { procedure get_data } - -procedure write_data; -{ print out the answers } - -var i : integer; - -begin - for i:=1 to m do - write(coef[i]:9:5); - writeln -end; { write_data } - -procedure seid - (a : ary2s; - y : ary; - var coef: arys; - ncol : integer; - var error: boolean); -{ matrix solution by Gauss Seidel } - -const tol = 1.0E-4; - max = 100; - -var done : boolean; - i,j,k,l,n: integer; - - nextc,hold, - sum,lambda, - ab,big : real; - -begin - repeat - write('Relaxation factor? '); - readln(lambda) - until (lambda<2) and (lambda>0.0); - error:=false; - n:=ncol; - for i:=1 to n-1 do - begin - big:=abs(a[i,i]); - l:=i; - for j:=i+1 to n do - begin - { search for largest element } - ab:=abs(a[j,i]); - if ab>big then - begin - big:=ab; - l:=j - end - end; { j-loop } - if big=0.0 then error:=true - else - begin - if l<>i then - begin - { interchange rows to put } - { largest element on diagonal } - for j:=1 to n do - begin - hold:=a[l,j]; - a[l,j]:=a[i,j]; - a[i,j]:=hold - end; - hold:=y[l]; - y[l]:=y[i]; - y[i]:=hold - end { if l<>i } - end { if big } - end; { i-loop } - if a[n,n]=0.0 then error:=true - else - begin - for i:=1 to n do - coef[i]:=0.0; { initial guess } - i:=0; - repeat - i:=i+1; - done:=true; - for j:=1 to n do - begin - sum:=y[j]; - for k:=1 to n do - if j<>k then - sum:=sum-a[j,k]*coef[k]; - nextc:=sum/a[j,j]; - if abs(nextc-coef[j])>tol then - begin - done:=false; - if nextc*coef[j]<0.0 then - nextc:=(coef[j]+nextc)*0.5 - end; - coef[j]:=lambda*nextc+(1.0-lambda)*coef[j]; - writeln(i:4,',coef(',j,')=',coef[j]) - end { j-loop } - until done or (i>max) - end; { if a[n,n]=0 } - if i>max then error:=true; - if error then writeln('ERROR: Matrix is singular') -end; { SEID } - -begin { MAIN program } - first:=true; - cls; - writeln; - writeln('Simultaneous solution by Gauss-Seidel'); - repeat - get_data(a,y,n,m); - if n>1 then - begin - seid(a,y,coef,n,error); - if not error then write_data - end - until n<2 -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/GAUSS.PAS b/software/CPM/CPM18_MTPUG_06/GAUSS.PAS deleted file mode 100644 index 86acb43..0000000 --- a/software/CPM/CPM18_MTPUG_06/GAUSS.PAS +++ /dev/null @@ -1,169 +0,0 @@ -program gaus; { -> 75 } -{ pascal program to perform simultaneous solution by Gaussian elimination } -{ procedure GAUSS is included } - -const maxr = 8; - maxc = 8; - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2s = array[1..maxr,1..maxc] of real; - -var y : arys; - coef : arys; - a : ary2s; - n,m : integer; - first, - error : boolean; - -external procedure cls; - -procedure get_data(var a: ary2s; - var y: arys; - var n,m: integer); - -{ get values for n and arrays a,y } - -var i,j : integer; - -begin - writeln; - repeat - write('How many equations? '); - readln(n); - if not first then cls else first:=false; - m:=n - until n1 then - begin - for i:=1 to n do - begin - writeln('Equation',i:3); - for j:=1 to n do - begin - write(j:3,':'); - read(a[i,j]) - end; - write(',C:'); - read(y[i]); - readln { clear line } - end; - writeln; - for i:=1 to n do - begin - for j:=1 to m do - write(a[i,j]:7:4); - writeln(':',y[i]:7:4) - end; - writeln - end { if n>1 } -end; { procedure get_data} - -procedure write_data; - { print out the answeres } - -var i : integer; - -begin - for i:=1 to m do - write(coef[i]:9:5); - writeln -end; { write_data } - -procedure gauss - (a : ary2s; - y : arys; - var coef : arys; - ncol : integer; - var error : boolean); - -{ matrix solution by Gaussian Elimination } - -var - b : ary2s; { work array, nrow,ncol } - w : arys; { work array, ncol long } - i,j,i1,k, - l,n : integer; - hold,sum, - t,ab,big: real; - -begin - error:=false; - n:=ncol; - for i:=1 to n do - begin { copy to work arrays } - for j:=1 to n do - b[i,j]:=a[i,j]; - w[i]:=y[i] - end; - for i:=1 to n-1 do - begin - big:=abs(b[i,i]); - l:=i; - i1:=i+1; - for j:=i1 to n do - begin { search for largest element } - ab:=abs(b[j,i]); - if ab>big then - begin - big:=ab; - l:=j - end - end; - if big=0.0 then error:= true - else - begin - if l<>i then - begin - { interchange rows to put largest element on diagonal } - for j:=1 to n do - begin - hold:=b[l,j]; - b[l,j]:=b[i,j]; - b[i,j]:=hold - end; - hold:=w[l]; - w[l]:=w[i]; - w[i]:=hold - end; { if l<>i } - for j:=i1 to n do - begin - t:=b[j,i]/b[i,i]; - for k:=i1 to n do - b[j,k]:=b[j,k]-t*b[i,k]; - w[j]:=w[j]-t*w[i] - end { j-loop } - end { if big } - end; { i-loop } - if b[n,n]=0.0 then error:=true - else - begin - coef[n]:=w[n]/b[n,n]; - i:=n-1; - { back substitution } - repeat - sum:=0.0; - for j:=i+1 to n do - sum:=sum+b[i,j]*coef[j]; - coef[i]:=(w[i]-sum)/b[i,i]; - i:=i-1 - until i=0 - end; { if b[n,n]=0 } - if error then writeln(chr(7),'ERROR: Matrix is singular') -end; { GAUSS } - -begin { MAIN } - first:=true; - cls; - writeln; - writeln('Simultaneous solution by Gauss elimination'); - repeat - get_data(a,y,n,m); - if n>1 then - begin - gauss(a,y,coef,n,error); - if not error then write_data - end - until n<2 -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/GAUSSJ.LIB b/software/CPM/CPM18_MTPUG_06/GAUSSJ.LIB deleted file mode 100644 index 3dfa3be..0000000 --- a/software/CPM/CPM18_MTPUG_06/GAUSSJ.LIB +++ /dev/null @@ -1,167 +0,0 @@ - {87} - -procedure gaussj - (var b: ary2s; { square matrix of coefficients } - y: arys; { constant vector } - var coef: arys; { solution vector } - ncol: integer; { order of matrix } - var error: boolean); { true if matrix singular } - -{ Gauss Jordan matrix inversion and solution } - -{ B(n,n) coefficient matrix becomes inverse } -{ Y(n) original constant vector } -{ W(n,m) constant vector(s) become solution vector } -{ DETERM is the determinant } -{ ERROR=1 if singular } -{ INDEX(n,3) } -{ NV is number of constant vectors } - -label 99; - -var - w : array[1..maxc,1..maxc] of real; - index : array[1..maxc,1..3] of integer; - i,j,k,l,nv, - irow,icol, - n,l1 : integer; - determ,pivot, - hold,sum,t, - ab,big : real; - - - - -procedure swap(var a,b: real); -var hold : real; - -begin { swap } - hold:=a; - a:=b; - b:=hold -end; { procedure swap } - - -procedure gausj2; -label 98; -var i,j,k,l,l1 : integer; - - -procedure gausj3; - -var l : integer; - -begin { procedure gausj3 } - { interchange rows to put pivot on diagonal } - if irow<>icol then - begin - determ:=-determ; - for l:=1 to n do - swap(b[irow,l],b[icol,l]); - if nv>0 then - for l:=1 to nv do - swap(w[irow,l],w[icol,l]) - end { if iroe<>icol } -end; { gausj3 } - -begin { procedure gausj2 } - { actual start of gaussj } - error:=false; - nv:=1; { single constant vector } - n:=ncol; - for i:=1 to n do - begin - w[i,1]:=y[i]; { copy constant vector } - index[i,3]:=0 - end; - determ:=1.0; - for i:=1 to n do - begin - { search for largest element } - big:=0.0; - for j:=1 to n do - begin - if index[j,3]<>1 then - begin - for k:=1 to n do - begin - if index[k,3]>1 then - begin - writeln('ERROR: matrix is singular'); - error:=true; - goto 98 { abort } - end; - if index[k,3]<1 then - if abs(b[j,k])>big then - begin - irow:=j; - icol:=k; - big:=abs(b[j,k]) - end - end { k-loop } - end - end; { j-loop } - - index[icol,3]:=index[icol,3]+1; - index[i,1]:=irow; - index[i,2]:=icol; - - gausj3; { further subdivision of gaussj } - { divide pivot row by pivot column } - pivot:=b[icol,icol]; - determ:=determ*pivot; - b[icol,icol]:=1.0; - - for l:=1 to n do - b[icol,l]:=b[icol,l]/pivot; - if nv>0 then - for l:=1 to nv do - w[icol,l]:=w[icol,l]/pivot; - - { reduce nonpivot rows } - - for l1:=1 to n do - begin - if l1<>icol then - begin - t:=b[l1,icol]; - b[l1,icol]:=0.0; - for l:=1 to n do - b[l1,l]:=b[l1,l]-b[icol,l]*t; - if nv>0 then - for l:=1 to nv do - w[l1,l]:=w[l1,l]-w[icol,l]*t; - end { if l1<>icol } - end - end; { i-loop } -98: -end; { gausj2 } - -begin { gaus-jordan main program } - gausj2; { first half of gaussj } - if error then goto 99; - { interchange columns } - for i:=1 to n do - begin - l:=n-i+1; - if index[l,1]<>index[l,2] then - begin - irow:=index[l,1]; - icol:=index[l,2]; - for k:=1 to n do - swap(b[k,irow],b[k,icol]) - end { if index } - end; { i-loop } -for k:=1 to n do - if index[k,3]<>1 then - begin - writeln(chr(7),'ERROR: matrix is singular'); - error:=true; - goto 99 { abort } - end; - for i:=1 to n do - coef[i]:=w[i,1]; -99: -end; { procedure gaussj } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/GD-LINF1.LIB b/software/CPM/CPM18_MTPUG_06/GD-LINF1.LIB deleted file mode 100644 index a4665d5..0000000 --- a/software/CPM/CPM18_MTPUG_06/GD-LINF1.LIB +++ /dev/null @@ -1,77 +0,0 @@ - -{ -> 216 } -procedure get_data(var t : ary; { independedt variable } - var cp : ary; { dependent variable } - var nrow : integer); { length of vectors } -var i : integer; - -begin - nrow:=10; - for i:=1 to nrow do - t[i]:=(i+2)*100; - cp[1]:=7.02; cp[2]:=7.2; - cp[3]:=7.43; cp[4]:=7.67; - cp[5]:=7.88; cp[6]:=8.06; - cp[7]:=8.21; cp[8]:=8.34; - cp[9]:=8.44; cp[10]:=8.53 -end; { procedure get_data } - - -{ -> 217 } -procedure linfit(X, { independent variable } - y : ary; { dependent variable } - var y_calc : ary; { calculated dep. variable } - var resid : ary; { array of residuals } - var coef : arys; { coefficients } - var sig : arys; { error on coefficients } - nrow : integer; { length of ary } - var ncol : integer); { number of terms } - -{ least-squares fit to nrow sets of x and y pairs of points } -{ Seperate procedure needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauus-Jordan elimination } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - xi,yi,yc,srs,see, - sum_y,sum_y2 : real; - -begin { procedure linfit } - ncol:=3; { number of terms } - for i:=1 to nrow do - begin { setup x matrix } - xi:=x[i]; - xmatr[i,1]:=1.0; { first column } - xmatr[i,2]:=xi; { second column } - xmatr[i,3]:=1.0/sqr(xi) { third column } - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - sum_y:=0.0; - sum_y2:=0.0; - srs:=0.0; - for i:=1 to nrow do - begin - yi:=y[i]; - yc:=0.0; - for j:=1 to ncol do - yc:=yc+coef[j]*xmatr[i,j]; - y_calc[i]:=yc; - resid[i]:=yc-yi; - srs:=srs+sqr(resid[i]); - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)); - if nrow=ncol then nm:=1 - else nm:=nrow-ncol; - see:=sqrt(srs/nm); - for i:=1 to ncol do { errors on solution } - sig[i]:=see*sqrt(a[i,i]) -end; { LINFIT } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/GD-LINF2.LIB b/software/CPM/CPM18_MTPUG_06/GD-LINF2.LIB deleted file mode 100644 index d2d1852..0000000 --- a/software/CPM/CPM18_MTPUG_06/GD-LINF2.LIB +++ /dev/null @@ -1,79 +0,0 @@ - -{ -> 220 } -procedure get_data(var t : ary; { independedt variable } - var p : ary; { dependent variable } - var nrow : integer); { length of vectors } -var i : integer; - -begin - nrow:=10; - for i:=1 to nrow do - t[i]:=(i+6.0)*100.0; - p[1]:=1.0E-9; p[2]:=5.598E-8; - p[3]:=1.234E-6; p[4]:=1.507E-5; - p[5]:=1.138E-4; p[6]:=6.067E-4; - p[7]:=2.512E-3; p[8]:=8.337E-3; - p[9]:=2.371E-2; p[10]:=5.875E-2; - for i:=1 to nrow do - p[i]:=ln(p[i]) { take log data } -end; { procedure get_data } - - - -procedure linfit(X, { independent variable } - y : ary; { dependent variable } - var y_calc : ary; { calculated dep. variable } - var resid : ary; { array of residuals } - var coef : arys; { coefficients } - var sig : arys; { error on coefficients } - nrow : integer; { length of ary } - var ncol : integer); { number of terms } - -{ least-squares fit to nrow sets of x and y pairs of points } -{ Seperate procedure needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauus-Jordan elimination } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - xi,yi,yc,srs,see, - sum_y,sum_y2 : real; - -begin { procedure linfit } - ncol:=3; { number of terms } - for i:=1 to nrow do - begin { setup x matrix } - xi:=x[i]; - xmatr[i,1]:=1.0; { first column } - xmatr[i,2]:=1.0/xi; { second column } - xmatr[i,3]:=ln(xi) { third column } - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - sum_y:=0.0; - sum_y2:=0.0; - srs:=0.0; - for i:=1 to nrow do - begin - yi:=y[i]; - yc:=0.0; - for j:=1 to ncol do - yc:=yc+coef[j]*xmatr[i,j]; - y_calc[i]:=yc; - resid[i]:=yc-yi; - srs:=srs+sqr(resid[i]); - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)); - if nrow=ncol then nm:=1 - else nm:=nrow-ncol; - see:=sqrt(srs/nm); - for i:=1 to ncol do { errors on solution } - sig[i]:=see*sqrt(a[i,i]) -end; { LINFIT } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/JULIAN.LIB b/software/CPM/CPM18_MTPUG_06/JULIAN.LIB deleted file mode 100644 index debc9ff..0000000 --- a/software/CPM/CPM18_MTPUG_06/JULIAN.LIB +++ /dev/null @@ -1,19 +0,0 @@ - - -function julian(dd,mm,yyyy: integer): integer; -var jm,jy: integer; -begin - case mm of - 1,2 : begin - jy:=yyyy-1; - jm:=mm+13 - end - else - begin - jy:=yyyy; - jm:=mm - end; - julian:=trunc(365.25*jy)+trunc(30.6001*jm)+dd+1720982 -end; { julian } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/LEAST1.PAS b/software/CPM/CPM18_MTPUG_06/LEAST1.PAS deleted file mode 100644 index 470c841..0000000 --- a/software/CPM/CPM18_MTPUG_06/LEAST1.PAS +++ /dev/null @@ -1,182 +0,0 @@ -{$S+ } -program least1; { --> 191 } -{ Pascal Program to perform a liner least-squares fit using a parabolic } -{ curve. Aeperate procedure PLOT needed } - -const maxr = 20; - maxc = 3; - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2s = array[1..maxc,1..maxc] of real; - -var x,y,y_calc : ary; - coef : arys; - nrow,ncol : integer; - correl_coef : real; - - -external procedure cls; - -procedure get_data(var x,y: ary; - var nrow: integer); -{ get values for n and arrays x,y } - -var i : integer; - -begin - nrow:=9; - writeln; - for i:=1 to nrow do x[i]:=i; - y[1]:=2.07; y[2]:=8.6; - y[3]:=14.42; y[4]:=15.8; - y[5]:=18.92; y[6]:=17.96; - y[7]:=12.98; y[8]:=6.45; - y[9]:=0.27; -end; { procedure get_data } - -procedure write_data; -{ print out the answers } -var i : integer; -begin - writeln; - writeln(' I X Y YCALC'); - for i:=1 to nrow do - writeln(i:3,x[i]:8:1,y[i]:9:2,y_calc[i]:9:2); - writeln; writeln(' Coefficients '); - for i:=1 to ncol do - writeln(coef[i]:8:4); - writeln; - writeln('Correlation coefficient is ',correl_coef:8:5) -end; { write_data } - -procedure solve(a: ary2s; - y: arys; - var coef: arys; - nrow: integer; - var error: boolean); - -var b : ary2s; - i,j : integer; - det : real; - - -function deter(a: ary2s): real; - { calculate the determinant of a 3-by-3matrix } -begin - deter:=a[1,1]*(a[2,2]*a[3,3]-a[3,2]*a[2,3]) - -a[1,2]*(a[2,1]*a[3,3]-a[3,1]*a[2,3]) - +a[1,3]*(a[2,1]*a[3,2]-a[3,1]*a[2,2]) -end; - - - -procedure setup(var b : ary2s; - var coef: arys; - j : integer); - -var i : integer; - -begin { setup } - for i:=1 to nrow do - begin - b[i,j]:=y[i]; - if j>1 then b[i,j-1]:=a[i,j-1] - end; - coef[j]:=deter(b)/det -end; { setup } - -begin { procedure solve } - error:=false; - for i:=1 to nrow do - for j:=1 to nrow do - b[i,j]:=a[i,j]; - det:=deter(b); - if det=0.0 then - begin - error:=true; - writeln(chr(7),'ERROR: matrix is singular') - end - else - begin - setup(b,coef,1); - setup(b,coef,2); - setup(b,coef,3) - end { esle } -end; { procedure solve } - - -procedure linfit(x,y: ary; - var y_calc: ary; - var coef: arys; - nrow: integer; - var ncol: integer); - -{ least squares fit to a parabola } -{ nrow sets of x and y pair points } - -var a : ary2s; - g : arys; - i : integer; - error : boolean; - - sum_x,sum_y,sum_xy,sum_x2, - sum_y2,xi,yi,sxy,syy, - sxx,sum_x3,sum_x4,sum_2y, - denom,srs,x2 : real; - -begin { linfit } - ncol:=3; { polynomial terms } - sum_x:=0.0; - sum_y:=0.0; - sum_xy:=0.0; - sum_x2:=0.0; - sum_y2:=0.0; - sum_x3:=0.0; - sum_x4:=0.0; - sum_2y:=0.0; - for i:=1 to nrow do - begin - xi:=x[i]; - yi:=y[i]; - x2:=xi*xi; - sum_x:=sum_x+xi; - sum_y:=sum_y+yi; - sum_xy:=sum_xy+xi*yi; - sum_x2:=sum_x2+x2; - sum_y2:=sum_y2+yi*yi; - sum_x3:=sum_x3+xi*x2; - sum_x4:=sum_x4+x2*x2; - sum_2y:=sum_2y+x2*yi - end; - a[1,1]:=nrow; - a[2,1]:=sum_x; a[1,2]:=sum_x; - a[3,1]:=sum_x2; a[1,3]:=sum_x2; - a[2,2]:=sum_x2; a[3,2]:=sum_x3; - a[2,3]:=sum_x3; a[3,3]:=sum_x4; - g[1]:=sum_y; - g[2]:=sum_xy; - g[3]:=sum_2y; - solve(a,g,coef,ncol,error); - srs:=0.0; - for i:=1 to nrow do - begin - y_calc[i]:=coef[1]+coef[2]*x[i]+coef[3]*sqr(x[i]); - srs:=srs+sqr(y[i]-y_calc[i]) - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)) -end; { linfit } - -{ external procedure plot(x,y,y_calc: ary; nrow: integer); -} - -{$I C:PLOT.LIB } { get ptocedure PLOT } - -begin { MAIN program } - cls; - get_data(x,y,nrow); - linfit(x,y,y_calc,coef,nrow,ncol); - write_data; - plot(x,y,y_calc,nrow) -end. { MAIN } - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/LEAST2.PAS b/software/CPM/CPM18_MTPUG_06/LEAST2.PAS deleted file mode 100644 index 667a249..0000000 --- a/software/CPM/CPM18_MTPUG_06/LEAST2.PAS +++ /dev/null @@ -1,164 +0,0 @@ -program least2; { --> 203 } -{ Pascal program to perform a linear least-squares fit } -{ with Gauss-Jordan routine } -{ Sperate modules needed: - GAUSSJ, - PLOT } - - -const maxr = 20; { data prints } - maxc = 4; { polynomial terms } - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2 = array[1..maxr,1..maxc] of real; - ary2s = array[1..maxc,1..maxc] of real; - -var x,y,y_calc : ary; - resid : ary; - coef,sig : arys; - nrow,ncol : integer; - correl_coef : real; - - -external procedure cls; - -procedure get_data(var x: ary; { independant variable } - var y: ary; { dependant variable } - var nrow: integer); { length of vectors } -{ get values for n and arrays x,y } - -var i : integer; - -begin - nrow:=9; - for i:=1 to nrow do x[i]:=i; - y[1]:=2.07; y[2]:=8.6; - y[3]:=14.42; y[4]:=15.8; - y[5]:=18.92; y[6]:=17.96; - y[7]:=12.98; y[8]:=6.45; - y[9]:=0.27; -end; { proceddure get data } - -procedure write_data; -{ print out the answers } -var i : integer; -begin - writeln; - writeln; - writeln(' I X Y YCALC RESID'); - for i:=1 to nrow do - writeln(i:3,x[i]:8:1,y[i]:9:2,y_calc[i]:9:2,resid[i]:9:2); - writeln; writeln(' Coefficients errors '); - writeln(coef[1],' ',sig[1],' constant term'); - for i:=2 to ncol do - writeln(coef[i],' ',sig[i]); { other terms } - writeln; - writeln('Correlation coefficient is ',correl_coef:8:5) -end; { write_data } - -procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer); -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } - -var i,k,l : integer; - -begin { square } - for k:=1 to ncol do - begin - for l:=1 to k do - begin - a[k,l]:=0.0; - for i:=1 to nrow do - begin - a[k,l]:=a[k,l]+x[i,l]*x[i,k]; - if k<>l then a[l,k]:=a[k,l] - end - end; { l-loop } - g[k]:=0.0; - for i:=1 to nrow do - g[k]:=g[k]+y[i]*x[i,k] - end { k-loop } -end; { SQUARE } - -{external procedure gaussj(var b: ary2s; - y: arys; - var coef: arys; - ncol: integer; - var error: boolean); -} -{$I GAUSSJ.LIB } - -procedure linfit(x, { independant variable } - y: ary; { dependent variable } - var y_calc: ary; { calculated dep. variable } - var resid: ary; { array of residuals } - var coef: arys; { coefficients } - var sig: arys; { error on coefficients } - nrow: integer; { length of array } - var ncol: integer); { number of terms } - -{ least squares fit to nrow sets of x and y pairs of points } -{ Seperate procedures needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauss-Jordan elimination } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - xi,yi,yc,srs,see, - sum_y,sum_y2 : real; - -begin { procedure linfit } - ncol:=3; { number of terms } - for i:=1 to nrow do - begin { setup matrix } - xi:=x[i]; - xmatr[i,1]:=1.0; { first column } - xmatr[i,2]:=xi; { second column } - xmatr[i,3]:=xi*xi { third column } - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - sum_y:=0.0; - sum_y2:=0.0; - srs:=0.0; - for i:=1 to nrow do - begin - yi:=y[i]; - yc:=0.0; - for j:=1 to ncol do - yc:=yc+coef[j]*xmatr[i,j]; - y_calc[i]:=yc; - resid[i]:=yc-yi; - srs:=srs+sqr(resid[i]); - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)); - if nrow=ncol then nm:=1 - else nm:=nrow-ncol; - see:=sqrt(srs/nm); - for i:=1 to ncol do { errors on solution } - sig[i]:=see*sqrt(a[i,i]) -end; { linfit } - -{external procedure plot(x,y,z: ary; nrow: integer); -} -{$I C:PLOT.LIB } - -begin { main program } - cls; - get_data(x,y,nrow); - linfit(x,y,y_calc,resid,coef,sig,nrow,ncol); - write_data; - plot(x,y,y_calc,nrow) -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/LEAST3.PAS b/software/CPM/CPM18_MTPUG_06/LEAST3.PAS deleted file mode 100644 index 06b8b02..0000000 --- a/software/CPM/CPM18_MTPUG_06/LEAST3.PAS +++ /dev/null @@ -1,158 +0,0 @@ -program least3; { --> 209 } -{ Pascal program to perform a linear least-squares fit } -{ with Gauss-Jordan routine } -{ Sperate modules needed: - GAUSSJ, - PLOT } - -const maxr = 20; { data prints } - maxc = 4; { polynomial terms } - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2 = array[1..maxr,1..maxc] of real; - ary2s = array[1..maxc,1..maxc] of real; - -var x,y,y_calc : ary; - resid : ary; - coef,sig : arys; - nrow,ncol : integer; - correl_coef : real; - first,done : boolean; - -external procedure cls; - -procedure get_data(var x: ary; { independant variable } - var y: ary; { dependant variable } - var nrow: integer); { length of vectors } -{ get values for n and arrays x,y } - -var i : integer; - -begin - nrow:=9; - for i:=1 to nrow do x[i]:=i; - y[1]:=2.07; y[2]:=8.6; - y[3]:=14.42; y[4]:=15.8; - y[5]:=18.92; y[6]:=17.96; - y[7]:=12.98; y[8]:=6.45; - y[9]:=0.27; -end; { proceddure get data } - -procedure write_data; -{ print out the answers } -var i : integer; -begin - if first then first:=false else cls; - writeln; - writeln; - writeln(' I X Y YCALC RESID'); - for i:=1 to nrow do - writeln(i:3,x[i]:8:1,y[i]:9:2,y_calc[i]:9:2,resid[i]:9:2); - writeln; writeln(' Coefficients errors '); - writeln(coef[1],' ',sig[1],' Constant term'); - for i:=2 to ncol do - writeln(coef[i],' ',sig[i]); { other terms } - writeln; - writeln('Correlation coefficient is ',correl_coef:8:5) -end; { write_data } - -{procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer);} -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } -{$I SQUARE.LIB } - -{external procedure gaussj(var b: ary2s; - y: arys; - var coef: arys; - ncol: integer; - var error: boolean); -} -{$I GAUSSJ.LIB } - -procedure linfit(x, { independant variable } - y: ary; { dependent variable } - var y_calc: ary; { calculated dep. variable } - var resid: ary; { array of residuals } - var coef: arys; { coefficients } - var sig: arys; { error on coefficients } - nrow: integer; { length of array } - var ncol: integer); { number of terms } - -{ least squares fit to nrow sets of x and y pairs of points } -{ Seperate procedures needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauss-Jordan elimination } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - xi,yi,yc,srs,see, - sum_y,sum_y2 : real; - -begin { procedure linfit } - for i:=1 to nrow do - begin { setup matrix } - xi:=x[i]; - xmatr[i,1]:=1.0; { first column } - for j:=2 to ncol do { other columns} - xmatr[i,j]:=xmatr[i,j-1]*xi - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - sum_y:=0.0; - sum_y2:=0.0; - srs:=0.0; - for i:=1 to nrow do - begin - yi:=y[i]; - yc:=0.0; - for j:=1 to ncol do - yc:=yc+coef[j]*xmatr[i,j]; - y_calc[i]:=yc; - resid[i]:=yc-yi; - srs:=srs+sqr(resid[i]); - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)); - if nrow=ncol then nm:=1 - else nm:=nrow-ncol; - see:=sqrt(srs/nm); - for i:=1 to ncol do { errors on solution } - sig[i]:=see*sqrt(a[i,i]) -end; { linfit } - -{external procedure plot(x,y,z: ary; nrow: integer); -} -{$I C:PLOT.LIB } - -begin { main program } - cls; - first:=true; - done:=false; - writeln; - get_data(x,y,nrow); - repeat - repeat - write('Order of polynomial fit? '); - readln(ncol) - until ncol<5; - if ncol<1 then done:=true { quit if ncol<1 } - else - begin - ncol:=ncol+1; { order is one less } - linfit(x,y,y_calc,resid,coef,sig,nrow,ncol); - write_data; - plot(x,y,y_calc,nrow) - end { else } - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/LEAST6.PAS b/software/CPM/CPM18_MTPUG_06/LEAST6.PAS deleted file mode 100644 index b748560..0000000 --- a/software/CPM/CPM18_MTPUG_06/LEAST6.PAS +++ /dev/null @@ -1,149 +0,0 @@ -program least3; { --> 226 } -{ Pascal program to perform a linear least-squares fit } -{ on the properties of steam with Gauss-Jordan routine } -{ Seperate modules needed: - GAUSSJ} - - -const maxr = 20; { data prints } - maxc = 4; { polynomial terms } - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2 = array[1..maxr,1..maxc] of real; - ary2s = array[1..maxc,1..maxc] of real; - -var p,t,v, - y,y_calc : ary; - resid : ary; - coef,sig : arys; - nrow,ncol : integer; - correl_coef : real; - -external procedure cls; - -procedure get_data(var p,t: ary; { independant variable } - var v: ary; { dependant variable } - var nrow: integer); { length of vectors } -{ get values for n and arrays x,y } - -var i : integer; - -begin - nrow:=12; - t[1]:=400; p[1]:=120; v[1]:=4.079; - t[2]:=450; p[2]:=120; v[2]:=4.36; - t[3]:=500; p[3]:=120; v[3]:=4.633; - t[4]:=400; p[4]:=140; v[4]:=3.466; - t[5]:=450; p[5]:=140; v[5]:=3.713; - t[6]:=500; p[6]:=140; v[6]:=3.952; - t[7]:=400; p[7]:=160; v[7]:=3.007; - t[8]:=450; p[8]:=160; v[8]:=3.228; - t[9]:=500; p[9]:=160; v[9]:=3.440; - t[10]:=400; p[10]:=180; v[10]:=2.648; - t[11]:=450; p[11]:=180; v[11]:=2.850; - t[12]:=500; p[12]:=180; v[12]:=3.042; - for i:=1 to nrow do - t[i]:=t[i]+460.0 { convert to Rankine } -end; { proceddure get data } - -procedure write_data; -{ print out the answers } -var i : integer; -begin - writeln; - writeln(' I P T V Y YCALC %RES'); - for i:=1 to nrow do - writeln(i:3,p[i]:7:1,t[i]:7:1,v[i]:7:3,y[i]:9:2,y_calc[i]:9:2, - (100.0*resid[i]/y[i]):9:2); - writeln; writeln(' Coefficients errors '); - writeln(coef[1],' ',sig[1],' Constant term'); - for i:=2 to ncol do - writeln(coef[i],' ',sig[i]); { other terms } - writeln; - writeln('Correlation coefficient is ',correl_coef:8:5) -end; { write_data } - -{procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer);} -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } -{$I SQUARE.LIB } - -{external procedure gaussj(var b: ary2s; - y: arys; - var coef: arys; - ncol: integer; - var error: boolean); -} -{$I GAUSSJ.LIB } - -procedure linfit(p,t,v: ary; { independant variable } - var y: ary; { dependent variable } - var y_calc: ary; { calculated dep. variable } - var resid: ary; { array of residuals } - var coef: arys; { coefficients } - var sig: arys; { error on coefficients } - nrow: integer; { length of array } - var ncol: integer); { number of terms } - -{ least squares fit to nrow sets of x and y pairs of points } -{ Seperate procedures needed: - SQUARE -> form square coefficient matrix - GAUSSJ -> Gauss-Jordan elimination } - -const r = 85.76; { gas constant for steam } - -var xmatr : ary2; { data matrix } - a : ary2s; { coefficient matrix } - g : arys; { constant vector } - error : boolean; - i,j,nm : integer; - power,yi,yc,srs,see, - sum_y,sum_y2 : real; - -begin { procedure linfit } - ncol:=2; { number of terms } - for i:=1 to nrow do - begin { setup matrix } - power:=t[i]; - xmatr[i,1]:=p[i]/power; { first column } - xmatr[i,2]:=sqrt(p[i]); { second column } - y[i]:=v[i]*p[i]-r*t[i]/144.0 - end; - square(xmatr,y,a,g,nrow,ncol); - gaussj(a,g,coef,ncol,error); - sum_y:=0.0; - sum_y2:=0.0; - srs:=0.0; - for i:=1 to nrow do - begin - yi:=y[i]; - yc:=0.0; - for j:=1 to ncol do - yc:=yc+coef[j]*xmatr[i,j]; - y_calc[i]:=yc; - resid[i]:=yc-yi; - srs:=srs+sqr(resid[i]); - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi - end; - correl_coef:=sqrt(1.0-srs/(sum_y2-sqr(sum_y)/nrow)); - if nrow=ncol then nm:=1 - else nm:=nrow-ncol; - see:=sqrt(srs/nm); - for i:=1 to ncol do { errors on solution } - sig[i]:=see*sqrt(a[i,i]) -end; { linfit } - -begin { main program } - cls; - get_data(p,t,v,nrow); - linfit(p,t,v,y,y_calc,resid,coef,sig,nrow,ncol); - write_data -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/LINFIT1.LIB b/software/CPM/CPM18_MTPUG_06/LINFIT1.LIB deleted file mode 100644 index 6065696..0000000 --- a/software/CPM/CPM18_MTPUG_06/LINFIT1.LIB +++ /dev/null @@ -1,40 +0,0 @@ - -{ -> 159 } -procedure linfit(x,y: ary; - var y_calc: ary; - var a,b: real; - n: integer); -{ fit a straight line (y_calc) through n sets of x and y pairs of points } - -var i : integer; - - sum_x,sum_y,sum_xy,sum_x2, - sum_y2,xi,yi,sxy,sxx, - syy : real; - -begin { linfit } - sum_x:=0.0; - sum_y:=0.0; - sum_xy:=0.0; - sum_x2:=0.0; - sum_y2:=0.0; - for i:=1 to n do - begin - xi:=x[i]; - yi:=y[i]; - sum_x:=sum_x+xi; - sum_y:=sum_y+yi; - sum_xy:=sum_xy+xi*yi; - sum_x2:=sum_x2+xi*xi; - sum_y2:=sum_y2+yi*yi; - end; - sxx:=sum_x2-sum_x*sum_x/n; - sxy:=sum_xy-sum_x*sum_y/n; - syy:=sum_y2-sum_y*sum_y/n; - b:=sxy/sxx; - a:=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx; - for i:=1 to n do - y_calc[i]:=a+b*x[i] -end; { LINFIT } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/LINFIT2.LIB b/software/CPM/CPM18_MTPUG_06/LINFIT2.LIB deleted file mode 100644 index 22cf66d..0000000 --- a/software/CPM/CPM18_MTPUG_06/LINFIT2.LIB +++ /dev/null @@ -1,44 +0,0 @@ -{159} {update ->} {166} -procedure linfit(x,y: ary; - var y_calc: ary; - var a,b: real; - n: integer); -{ fit a straight line (y_calc) through n sets of x and y pairs of points } - -var i : integer; - - sum_x,sum_y,sum_xy,sum_x2, - sum_y2,xi,yi,sxy,syy, - sxx : real; - -begin { linfit } - sum_x:=0.0; - sum_y:=0.0; - sum_xy:=0.0; - sum_x2:=0.0; - sum_y2:=0.0; - for i:=1 to n do - begin - xi:=x[i]; - yi:=y[i]; - sum_x:=sum_x+xi; - sum_y:=sum_y+yi; - sum_xy:=sum_xy+xi*yi; - sum_x2:=sum_x2+xi*xi; - sum_y2:=sum_y2+yi*yi; - end; - sxx:=sum_x2-sum_x*sum_x/n; - sxy:=sum_xy-sum_x*sum_y/n; - syy:=sum_y2-sum_y*sum_y/n; - b:=sxy/sxx; - a:=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx; - correl_coef:=sxy/sqrt(sxx*syy); - see:=sqrt((sum_y2-a*sum_y-b*sum_xy)/(n-2)); - sigma_b:=see/sqrt(sxx); - sigma_a:=sigma_b*sqrt(sum_x2/n); - - for i:=1 to n do - y_calc[i]:=a+b*x[i] -end; { LINFIT } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/MATR1.PAS b/software/CPM/CPM18_MTPUG_06/MATR1.PAS deleted file mode 100644 index 1dd3018..0000000 --- a/software/CPM/CPM18_MTPUG_06/MATR1.PAS +++ /dev/null @@ -1,107 +0,0 @@ -program matr1; { -> 50 } -{ pascal program to perform matrix multiplication } - -const rmax = 9; - cmax = 3; - - -type ary = array[1..rmax] of real; - arys = array[1..cmax] of real; - ary2 = array[1..rmax,1..cmax] of real; - ary2s = array[1..cmax,1..cmax] of real; - -var y : ary; - g : arys; - x : ary2; - a : ary2s; - nrow,ncol : integer; - -external procedure cls; - -procedure get_data(var x: ary2; - var y: ary; - var nrow,ncol: integer); - -{ get the values for nrow, ncol, and arrays x,y } - -var i,j : integer; - -begin - nrow:=5; - ncol:=3; - for i:=1 to nrow do - begin - x[i,1]:=1; - for j:=2 to ncol do - x[i,j]:=i*x[i,j-1]; - y[i]:=2*i - end -end; { procedure get_data } - - - -procedure write_data; - -{ print out the answeres } - -var - i,j : integer; - -begin - cls; - writeln; - writeln(' X Y'); - for i:=1 to nrow do - begin - for j:=1 to ncol do - write(x[i,j]:7:1,' '); - writeln(':',y[i]:7:1) - end; - writeln(' A G'); - for i:=1 to ncol do - begin - for j:=1 to ncol do - write(a[i,j]:7:1,' '); - writeln(':',g[i]:7:1) - end -end; { write_data } - - -procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer); - -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } - -var - i,k,l : integer; - -begin { square } - for k:=1 to ncol do - begin - for l:=1 to k do - begin - a[k,l]:=0; - for i:=1 to nrow do - begin - a[k,l]:=a[k,l]+x[i,l]*x[i,k]; - if k<>l then a[l,k]:=a[k,l] - end - end; { l-loop } - g[k]:=0; - for i:=1 to nrow do - g[k]:=g[k]+y[i]*x[i,k] - end { k-loop } -end; { square } - - -begin { MAIN program } - get_data(x,y,nrow,ncol); - square(x,y,a,g,nrow,ncol); - write_data -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/MEANS.PAS b/software/CPM/CPM18_MTPUG_06/MEANS.PAS deleted file mode 100644 index 83f82b6..0000000 --- a/software/CPM/CPM18_MTPUG_06/MEANS.PAS +++ /dev/null @@ -1,54 +0,0 @@ -program means; { -> 26 } -{find mean and standard deviation } - -const max = 80; - -type ary = array[1..max]of real; - -var x : ary; - i,n : integer; - mean,std: real; - -external procedure cls; - -procedure meanstd - (x : ary; {array of values} - length : integer; - var mean : real; - var std_dev : real); - -var - i : integer; - sum_x,sum_sq : real; - - - -begin {main} - sum_x:=0; - sum_sq:=0; - for i:=1 to length do - begin - sum_x:=sum_x+x[i]; - sum_sq:=sum_sq+x[i]*x[i] - end; - mean:=sum_x/length; - std_dev:=sqrt((sum_sq-sqr(sum_x)/length)/(length-1)) -end { procedure meanstd }; - -begin { MAIN program } - cls; - writeln; - writeln('Calculation of mean and standard deviation'); - repeat - write('How many points? '); - readln(n) - until n<=max; - for i:=1 to n do - begin - write(i:3,':'); - readln(x[i]) - end; - meanstd(x,n,mean,std); - writeln(chr(7),'For ',n:3,' points, mean= ',mean:8:4,' sigma= ',std:8:4) -end. { MAIN program } - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/NEWDR.PAS b/software/CPM/CPM18_MTPUG_06/NEWDR.PAS deleted file mode 100644 index ad3b0e1..0000000 --- a/software/CPM/CPM18_MTPUG_06/NEWDR.PAS +++ /dev/null @@ -1,39 +0,0 @@ -program newdr; { -> 243 } -var x,x2 : real; - alldone : boolean; - error : boolean; - -external procedure cls; - -procedure func(x: real; - var fx,dfx: real); -begin - fx:=x*x-2.0; - dfx:=2.0*x -end; { func } - -procedure newton(var x: real); -const tol = 1.0E-6; - -var fx,dfx,dx,x1: real; - -begin { newton } - repeat - x1:=x; - func(x,fx,dfx); - dx:=fx/dfx; - x:=x1-dx; - writeln('x=',x1,' fx=',fx,' dfx=',dfx); - until abs(dx)<=abs(tol*x) -end; { newton } - -begin { main program } - cls; - writeln; - x:=2.0; { first guess } - newton(x); - writeln; - writeln(chr(7),'The solution is ',x); - writeln -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/NEWDR2.PAS b/software/CPM/CPM18_MTPUG_06/NEWDR2.PAS deleted file mode 100644 index f54c730..0000000 --- a/software/CPM/CPM18_MTPUG_06/NEWDR2.PAS +++ /dev/null @@ -1,45 +0,0 @@ -program newdr; { -> 245 } - -var x,x2 : real; - alldone : boolean; - error : boolean; - -procedure func(x: real; - var fx,dfx: real); -begin - fx:=x*x-2.0; - dfx:=2.0*x -end; { func } - -procedure newton(var x: real); -const tol = 1.0E-6; - -var fx,dfx,dx,x1: real; - -begin { newton } - repeat - x1:=x; - func(x,fx,dfx); - dx:=fx/dfx; - x:=x1-dx; - writeln('x=',x1,',fx=',fx,',dfx=',dfx); - until abs(dx)<=abs(tol*x) -end; { newton } - -begin { main program } - alldone:=false; - repeat - writeln; - write('First guess: '); { first guess } - readln(x); - if x<-19.0 then alldone:=true - else - begin - newton(x); - writeln; - writeln('The solution is ',x); - writeln - end - until alldone -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/NEWTON-L.LIB b/software/CPM/CPM18_MTPUG_06/NEWTON-L.LIB deleted file mode 100644 index e7bb747..0000000 --- a/software/CPM/CPM18_MTPUG_06/NEWTON-L.LIB +++ /dev/null @@ -1,42 +0,0 @@ - - - -{ -> 252 } -procedure newton(var x: real); -const tol = 1.0E-6; - max = 20; -var fx,dfx,dx,x1 : real; - i : integer; - -begin { newton } - error:=false; - i:=0; - repeat - i:=i+1; - x1:=x; - func(x,fx,dfx); - if dfx=0.0 then - begin - error:=true; - x:=1.0; - writeln(chr(7),'ERROR: slope zero') - end - else - begin - dx:=fx/dfx; - x:=x1-dx; - writeln('x=',x,' fx=',fx,' dfx=',dfx) - end - until - error or - (i>max) or - (abs(dx)<=abs(tol*x)); - if i>max then - begin - writeln(chr(7),'ERROR: no convergence in ',max,' loops'); - error:=true - end -end; { newton } - - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/NEWTON.LIB b/software/CPM/CPM18_MTPUG_06/NEWTON.LIB deleted file mode 100644 index b5b74ad..0000000 --- a/software/CPM/CPM18_MTPUG_06/NEWTON.LIB +++ /dev/null @@ -1,32 +0,0 @@ - - - -{ -> 249 } -procedure newton(var x: real); -const tol = 1.0E-6; -var fx,dfx,dx,x1 : real; - -begin { newton } - error:=false; - repeat - x1:=x; - func(x,fx,dfx); - if dfx=0.0 then - begin - error:=true; - x:=1.0; - writeln(chr(7),'ERROR: slope zero') - end - else - begin - dx:=fx/dfx; - x:=x1-dx; - writeln('x=',x,' fx=',fx,' dfx=',dfx) - end - until - error or - (abs(dx)<=abs(tol*x)) -end; { newton } - - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/NLIN3.PAS b/software/CPM/CPM18_MTPUG_06/NLIN3.PAS deleted file mode 100644 index 8a21f6e..0000000 --- a/software/CPM/CPM18_MTPUG_06/NLIN3.PAS +++ /dev/null @@ -1,193 +0,0 @@ -{ die ln-funktion bei MT+ ist fuer Werte kleiner 1E-5 aeussertst langsam, - so dass man das Gefuehl bekommt, das dass Programm sich aufhaengt. In- - folgedessen konnte ich dieses Programm nicht verifizieren. -Juergen } - -program nlin3; { -> 310 } -{ Pascal program to perform a nonlinear least-squares fit for the diffusion - of Zn in CU } - -const maxr = 20; { data prints } - maxc = 4; { polynomial terms } - r = 1.987; { gas constant } -type - index = 1..maxr; - ary = array[index] of real; - arys = array[1..maxc] of real; - ary2 = array[1..maxr,1..maxc] of real; - -var - x,y,y_calc : ary; - t,d,ex : ary; - coef : arys; - i,n : integer; - nrow,ncol : integer; - done,error : boolean; - correl_coef,srs, - a,b,x2 : real; - -external procedure cls; - -procedure get_data(var x,y: ary; - var n: integer); -{ get values for n and arrays t,d } - -var i : integer; - -begin - n:=7; - t[1]:=600.0; d[1]:=1.4E-12; - t[2]:=650.0; d[2]:=5.5E-12; - t[3]:=700.0; d[3]:=1.8E-11; - t[4]:=750.0; d[4]:=6.1E-11; - t[5]:=800.0; d[5]:=1.6E-10; - t[6]:=850.0; d[6]:=4.4E-10; - t[7]:=900.0; d[7]:=1.2E-9; - for i:=1 to n do - begin - x[i]:=1.0/(t[i]+273.0); - y[i]:=d[i] - end -end; { proceddure get data } - -procedure write_data; -{ print out the answers } -var i : integer; -begin - writeln; - writeln; - writeln(' I TC D DCALC'); - for i:=1 to n do - writeln(i:3,t[i]:8:0,d[i],' ',y_calc[i]); - writeln; writeln(' Coefficients '); - writeln(coef[1],' constant term'); - for i:=2 to ncol do - writeln(coef[i]); { other terms } - writeln; - writeln('D0=',a:7:2,' cm sq/sec.'); - writeln('Q =',(-r*b/1000.0):8:2,'kcal/mole'); - writeln;writeln('SRS= ',srs:8:4) -end; { write_data } - -procedure func(b: real; - var fb,dfb: real); -var i : integer; - s1,s2,s3,s4,s5,s6, - ex1,ex2,xi, - x2,yi,y2 : real; -begin - s1:=0.0; - s2:=0.0; - s3:=0.0; - s4:=0.0; - s5:=0.0; - s6:=0.0; - for i:=1 to n do - begin - xi:=x[i]; - x2:=xi*xi; - yi:=y[i]; - y2:=yi*yi; - ex1:=exp(b*xi); - ex[i]:=ex1; - ex2:=ex1*ex1; - s1:=s1+xi*ex2/y2; - s2:=s2+ex1/yi; - s3:=s3+xi*ex1/yi; - s4:=s4+ex2/y2; - s5:=s5+2.0*x2*ex2/y2; - s6:=s6+x2*ex1/yi - end; - fb:=s1*s2-s3*s4; - dfb:=s2*s5-s1*s3-s4*s6; - a:=s2/s4 -end; { func } - - -procedure newton(var x: real); -const tol = 1.0E-6; - max = 20; -var fx,dfx,dx,x1 : real; - i : integer; - -begin { newton } - error:=false; - i:=0; - repeat - i:=i+1; - x1:=x; - func(x,fx,dfx); - if dfx=0.0 then - begin - error:=true; - x:=1.0; - writeln('ERROR: slope zero') - end - else - begin - dx:=fx/dfx; - x:=x1-dx; - end - until - error or - (i>max) or - (abs(dx)<=abs(tol*x)); - if i>max then - begin - writeln(chr(7),'ERROR: no convergence in ',max,' loops'); - error:=true - end -end; { newton } - -procedure nlin(x,y: ary; - var y_calc: ary; - n: integer); -{ fits the diffusion equation through n sets of x and y pairs of points } -var - resid : ary; - matr : ary2; - i : integer; - xi,yi,sum_x, - sum_y,sum_y2,b1, - sum_xy,sum_x2 : real; -begin { nlin } - ncol:=2; { number of terms } - sum_x:=0.0; - sum_y:=0.0; - sum_xy:=0.0; - sum_x2:=0.0; - for i:=1 to n do - begin - xi:=x[i]; - yi:=ln(y[i]); - sum_x:=sum_x+xi; - sum_y:=sum_y+yi; - sum_y2:=sum_y2+yi*yi; - sum_xy:=sum_xy+xi*yi; - sum_x2:=sum_x2+xi*xi - end; - b:=(sum_xy-sum_x*sum_y/n)/(sum_x2-sqr(sum_x)/n); - newton(b); - coef[1]:=a; - coef[2]:=b; - srs:=0.0; - for i:=1 to n do - begin - y_calc[i]:=a*ex[i]; - if y[i]<>0.0 then - resid[i]:=y_calc[i]/y[i]-1.0 - else resid[i]:=y[i]/y_calc[i]-1.0; - srs:=srs+sqr(resid[i]) - end -end; { nlin } - - -begin { main program } - cls; -writeln(' start get_data '); - get_data(x,y,n); -writeln(' start nlin '); - nlin(x,y,y_calc,n); -writeln(' start write_data '); - write_data -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/PLOT.LIB b/software/CPM/CPM18_MTPUG_06/PLOT.LIB deleted file mode 100644 index ac38be6..0000000 --- a/software/CPM/CPM18_MTPUG_06/PLOT.LIB +++ /dev/null @@ -1,147 +0,0 @@ - -procedure plot( { with arrays } - x, { as independant variable } - y, { as dependant variable } - ycalc { as fitted curve } - : ary; - { and } m : integer { number of points }); - -{ plot y and ycalc as a function of x for m points } -{ if m is negative, only x and y are plotted } - -const blank = ' '; - linel = 51; - -var - ylabel : array[1..6] of real; - out : array[1..linel] of char; - lines,i,j,jp,l,n: integer; - iskip,yonly : boolean; - - xlow,xhigh,xnext,xlabel,xscale,signxs, - ymin,ymax,change,yscale,ys10 : real; - -function pscale(p: real): integer; -begin - pscale:=trunc((p-ymin)/yscale+1) -end; { pscale} - -procedure outlin(xname: real); -{ output a line } - -var i,max : integer; - -begin - write(xname:8:2,blank); { line label } - max:=linel+1; - repeat { skip blanks on end of line } - max:=max-1 - until (out[max]<>blank) or (max=1); - for i:=1 to max do - write(out[i]); - writeln; - for i:=1 to max do - out[i]:=blank { blank next line } -end; { outlin} - -procedure setup(index: integer); -{ setup the plus and asterisk for printing } - -const star = '*'; - plus = '+'; - -var i : integer; - -begin - i:=pscale(y[index]); - out[i]:=plus; - if not yonly then - begin { add ycalc too } - i:=pscale(ycalc[index]); - out[i]:=star - end -end; { setup } - - -begin { body of plot } - if m>0 then { plot y and ycalc vs x } - begin - n:=m; - yonly:=false - end - else { plot only y vs x } - begin - n:=-m; - yonly:=true - end; - { space out alternate lines } - lines:=2*(n-1)+1; - writeln; - xlow:=x[1]; - xhigh:=x[n]; - ymax:=y[1]; - ymin:=ymax; - xscale:=(xhigh-xlow)/(lines-1); - signxs:=1.0; - if xscale<0.0 then signxs:=-1.0; - for i:=1 to n do - begin - if y[i]ymax then ymax:=y[i]; - if not yonly then - begin - if ycalc[i]ymax then ymax:=ycalc[i] - end { if yonly } - end; - yscale:=(ymax-ymin)/(linel-1); - ys10:=yscale*10; - ylabel[1]:=ymin; { y axis } - for i:=1 to 4 do - ylabel[i+1]:=ylabel[i]+ys10; - ylabel[6]:=ymax; - for i:=1 to linel do - out[i]:=blank; { blank line } - setup(1); - l:=1; - xlabel:=xlow; - iskip:=false; - - for i:=2 to lines do { set up a line } - begin - xnext:=xlow+xscale*(i-1); - if iskip then writeln(' -') - else - begin - l:=l+1; - while - (x[l]-(xnext-0.5*xscale))*signxs<=0.0 do - begin - setup(l); { setup print line } - l:=l+1 - end; { while } - outlin(xlabel); { print a line } - for j:=1 to linel do - out[j]:=blank { blank line } - end; { if skip } - if (x[l]-(xnext+0.5*xscale))*signxs>0.0 then iskip:=true - else - begin - iskip:=false; - xlabel:=xnext; - setup(l) { setup print line } - end - end; { for-loop } - outlin(xhigh); { last line } - write(' '); - for i:=1 to 6 do - write(' ^ '); - writeln; - write(' '); - for i:=1 to 6 do - write(ylabel[i]:9:1,blank); - writeln; - writeln -end; { PLOT } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/RANDG.LIB b/software/CPM/CPM18_MTPUG_06/RANDG.LIB deleted file mode 100644 index 3da240b..0000000 --- a/software/CPM/CPM18_MTPUG_06/RANDG.LIB +++ /dev/null @@ -1,20 +0,0 @@ - -{ -> 35 } -function randg(mean,sigma: real): real; - -{ produce random numbers with a gaussian distribution } -{ MEAN and SIGMA are supplied by calling program } -{ function RANDOM is required !!! } - -var - i : integer; - sum : real; - -begin - sum:=0.0; - for i:=1 to 12 do - sum:=sum+random(0); - randg:=(sum-6)*sigma+mean -end; { function randg } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/RANDOM.LIB b/software/CPM/CPM18_MTPUG_06/RANDOM.LIB deleted file mode 100644 index 9f9599e..0000000 --- a/software/CPM/CPM18_MTPUG_06/RANDOM.LIB +++ /dev/null @@ -1,20 +0,0 @@ -function random(dummy: integer): real; { --> 29} -{ random number 0-1 } - { DEFINE SEED=4.0 AS GLOBAL !!!!!!!! } -{ adapted from HP-35 applications programs } - -const - pi = 3.14159; - -var - x : real; - i : integer; - -begin { RANDOM } - x:=seed+pi; - x:=exp(5.0*ln(x)); - seed:=x-trunc(x); - random:=seed -end; { RANDOM } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/RANDOM.PAS b/software/CPM/CPM18_MTPUG_06/RANDOM.PAS deleted file mode 100644 index 197b198..0000000 --- a/software/CPM/CPM18_MTPUG_06/RANDOM.PAS +++ /dev/null @@ -1,26 +0,0 @@ -module random; {29} - -function random(dummy: integer): real; - -{ random number 0-1 } - - { DEFINE SEED=4.0 AS GLOBAL !!!!!!!! } - -{ adapted from HP-35 applications programs } - -const - pi = 3.14159; - -var - x : real; - i : integer; - -begin { RANDOM } - x:=seed+pi; - x:=exp(5.0*ln(x)); - seed:=x-trunc(x); - random:=seed -end; { RANDOM } - -modend. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/ROMB1.PAS b/software/CPM/CPM18_MTPUG_06/ROMB1.PAS deleted file mode 100644 index ee9d650..0000000 --- a/software/CPM/CPM18_MTPUG_06/ROMB1.PAS +++ /dev/null @@ -1,91 +0,0 @@ -program romb1; { -> 281 } -{ integration by the romberg method } - -const tol = 1.0E-4; -var done : boolean; - sum,upper,lower : real; - -external procedure cls; - -function fx(x: real): real; -{ find f(x)= 1.0/x; watch out for x=0 } -begin - fx:=1.0/x -end; - -procedure romb(function f(x:real): real; - lower,upper,tol: real; - var ans: real); -{ numerical integration by the Romberg method } -var - nx : array[1..16] of integer; - t : array[1..136] of real; - done,error : boolean; - pieces,nt,i,ii,n,nn, - l,ntra,k,m,j : integer ; - delta_x,c,sum,fotom,x : real ; -begin - done:=false; - error:=false; - pieces:=1; - nx[1]:=1; - delta_x:=(upper-lower)/pieces; - c:=(f(lower)+f(upper))*0.5; - t[1]:=delta_x*c; - n:=1; - nn:=2; - sum:=c; - repeat - n:=n+1; - fotom:=4.0; - nx[n]:=nn; - pieces:=pieces*2; - l:=pieces-1; - delta_x:=(upper-lower)/pieces; - { compute trapezoidal sum for 2^(n-1)+1 points } - for ii:=1 to (l+1) div 2 do - begin - i:=ii*2-1; - x:=lower+i*delta_x; - sum:=sum+f(x) - end; - t[nn]:=delta_x*sum; - write(pieces:5,t[nn]); - ntra:=nx[n-1]; - k:=n-1; - { compute n-th row of T array } - for m:=1 to k do - begin - j:=nn+m; - nt:=nx[n-1]+m-1; - t[j]:=(fotom*t[j-1]-t[nt])/(fotom-1.0); - fotom:=fotom*4.0 - end; - writeln(j:4,t[j]); - if n>4 then - begin - if t[nn+1]<>0.0 then - if (abs(t[ntra+1]-t[nn+1])<=abs(t[nn+1]*tol)) - or (abs(t[nn-1]-t[j])<=abs(t[j]*tol)) then - done:=true - else if n>15 then - begin - done:=true; - error:=true - end - end; { if n>4 } - nn:=j+1 - until done; - ans:=t[j] -end; { ROMBERG } - -begin { main program } - cls; - lower:=1.0; - upper:=9.0; - writeln; - romb(fx,lower,upper,tol,sum); - writeln; - writeln(chr(7),'Area= ',sum) -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/ROMB3.PAS b/software/CPM/CPM18_MTPUG_06/ROMB3.PAS deleted file mode 100644 index 6f81437..0000000 --- a/software/CPM/CPM18_MTPUG_06/ROMB3.PAS +++ /dev/null @@ -1,96 +0,0 @@ -program romb3; { -> 287 } -{ integration by the romberg method } - -const tol = 1.0E-4; -var done : boolean; - sumt : real; - sum,upper,lower : real; - -external procedure cls; - -function fx(x: real): real; -{ find f(x)= 1/sqrt(x); watch out for x=0 } -begin - fx:=1.0/sqrt(x) -end; - -procedure romb(function f(x: real): real; - lower,upper,tol: real; - var ans: real); -{ numerical integration by the Romberg method } -var - nx : array[1..16] of integer; - t : array[1..136] of real; - done,error : boolean; - pieces,nt,i,ii,n,nn, - l,ntra,k,m,j : integer ; - delta_x,c,sum,fotom,x : real ; -begin - done:=false; - error:=false; - pieces:=1; - nx[1]:=1; - delta_x:=(upper-lower)/pieces; - c:=(f(lower)+f(upper))*0.5; - t[1]:=delta_x*c; - n:=1; - nn:=2; - sum:=c; - repeat - n:=n+1; - fotom:=4.0; - nx[n]:=nn; - pieces:=pieces*2; - l:=pieces-1; - delta_x:=(upper-lower)/pieces; - { compute trapezoidal sum for 2^(n-1)+1 points } - for ii:=1 to (l+1) div 2 do - begin - i:=ii*2-1; - x:=lower+i*delta_x; - sum:=sum+f(x) - end; - t[nn]:=delta_x*sum; - ntra:=nx[n-1]; - k:=n-1; - { compute n-th row of T array } - for m:=1 to k do - begin - j:=nn+m; - nt:=nx[n-1]+m-1; - t[j]:=(fotom*t[j-1]-t[nt])/(fotom-1.0); - fotom:=fotom*4.0 - end; - if n>4 then - begin - if t[nn+1]<>0.0 then - if (abs(t[ntra+1]-t[nn+1])<=abs(t[nn+1]*tol)) - or (abs(t[nn-1]-t[j])<=abs(t[j]*tol)) then - done:=true - else if n>15 then - begin - done:=true; - error:=true - end - end; { if n>4 } - nn:=j+1 - until done; - ans:=t[j] -end; { ROMBERG } - -begin { main program } - cls; - lower:=0.1; - upper:=1.0; - writeln; - sumt:=0.0; - writeln('new area total area lower upper limits'); - repeat - romb(fx,lower,upper,tol,sum); - upper:=lower; - lower:=0.1*upper; - sumt:=sumt+sum; - writeln(sum:9:6,' ',sumt:9:5,' ',lower,' ',upper) - until abs(sum) 273 } -{ integration by Simpson's method } - -const tol = 1.0E-4; -var sum,upper,lower : real; - -external procedure cls; - -function fx(x: real): real; -{ find f(x)=1/x } -{ watch out for x=0 } - -begin - fx:=1.0/x -end; { function fx } - -procedure simps(function f(x: real): real; - lower,upper,tol : real; - var sum : real); - -{ numerical integration by Simpson's rule } -{ function is f (as paramater), limits are lower and upper } -{ with number of regions equal to pieces } -{ partition is delta_x, answer is sum } - -var i : integer; - x,delta_x,even_sum, - odd_sum,end_sum, - sum1 : real; - pieces : integer; -begin - pieces:=2; - delta_x:=(upper-lower)/pieces; - odd_sum:=f(lower+delta_x); - even_sum:=0.0; - end_sum:=f(lower)+f(upper); - sum:=(end_sum+4.0*odd_sum)*delta_x/3.0; - writeln(pieces:5,sum); - repeat - pieces:=pieces*2; - sum1:=sum; - delta_x:=(upper-lower)/pieces; - even_sum:=even_sum+odd_sum; - odd_sum:=0.0; - for i:=1 to pieces div 2 do - begin - x:=lower+delta_x*(2.0*i-1.0); - odd_sum:=odd_sum+f(x) - end; - sum:=(end_sum+4.0*odd_sum+2.0*even_sum)*delta_x/3.0; - writeln(pieces:5,sum) - until abs(sum-sum1)<=abs(tol*sum) -end; { simps } - -begin { main program } - cls; - lower:=1.0; - upper:=9.0; - writeln; - simps(fx,lower,upper,tol,sum); - writeln; - writeln(chr(7),'area= ',sum) -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SIMPS.LIB b/software/CPM/CPM18_MTPUG_06/SIMPS.LIB deleted file mode 100644 index 4cf0dd8..0000000 --- a/software/CPM/CPM18_MTPUG_06/SIMPS.LIB +++ /dev/null @@ -1,50 +0,0 @@ - - -{ -> 278 } -procedure simps(function f(x: real): real; - lower,upper,tol : real; - var sum : real); - -{ numerical integration by Simpson's rule } -{ function is f (as parameter), limits are lower and upper } -{ with number of regions equal to pieces } -{ partition is delta_x, answer is sum } - -var i : integer; - x,delta_x,even_sum, - odd_sum,end_sum, - end_cor,sum1 : real; - pieces : integer; - -function dfx(x:real):real; -begin - dfx:=-1.0/sqr(x) -end; - -begin - pieces:=2; - delta_x:=(upper-lower)/pieces; - odd_sum:=f(lower+delta_x); - even_sum:=0.0; - end_sum:=f(lower)+f(upper); - end_cor:=dfx(lower)-dfx(upper); - sum:=(end_sum+4.0*odd_sum)*delta_x/3.0; - repeat - pieces:=pieces*2; - sum1:=sum; - delta_x:=(upper-lower)/pieces; - even_sum:=even_sum+odd_sum; - odd_sum:=0.0; - for i:=1 to pieces div 2 do - begin - x:=lower+delta_x*(2.0*i-1.0); - odd_sum:=odd_sum+f(x) - end; - sum:=(7.0*end_sum+14.0*even_sum+16.00*odd_sum - +end_cor*delta_x)*delta_x/15.0; - until abs(sum-sum1)<=abs(tol*sum) -end; { simps } - - - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SIMQ1.PAS b/software/CPM/CPM18_MTPUG_06/SIMQ1.PAS deleted file mode 100644 index 08a4032..0000000 --- a/software/CPM/CPM18_MTPUG_06/SIMQ1.PAS +++ /dev/null @@ -1,139 +0,0 @@ -program simq1; { -> 67 } -{ pascal program to solve three simultaneous equations by Cramer's rule } - -const rmax = 3; - cmax = 3; - -type arys = array[1..cmax] of real; - ary2s = array[1..rmax,1..cmax] of real; - -var y,coef : arys; - a : ary2s; - n : integer; - yesno : char; - error : boolean; - -external procedure cls; - -procedure get_data(var a: ary2s; - var y: arys; - var n: integer); - -{ get the values for n, and arrays a,y } - -var i,j : integer; - -begin { procedure get_data } - writeln; - n:=rmax; - for i:=1 to n do - begin - writeln(' Equation',i:3); - for j:=1 to n do - begin - write(j:3,':'); - read(a[i,j]) - end; - write(',C:'); - readln(y[i]) - end; - writeln; - for i:=1 to n do - begin - for j:=1 to n do - write(a[i,j]:7:4,' '); - writeln(':',y[i]:7:4) - end; - writeln -end; { procedure get_data } - -procedure write_data; - { print out the answeres } - -var i : integer; - -begin { write_data } - for i:=1 to n do - write(coef[i]:9:5); - writeln -end; { write_data } - - -procedure solve(a: ary2s; - y: arys; - var coef: arys; - n: integer; - var error: boolean); - -var - b : ary2s; - i,j : integer; - det : real; - - - -function deter(a: ary2s): real; -{ pascal program to calculate the determinant of a 3-by-3matrix } - -var - sum : real; - -begin { function deter } - sum:=a[1,1]*(a[2,2]*a[3,3]-a[3,2]*a[2,3]) - -a[1,2]*(a[2,1]*a[3,3]-a[3,1]*a[2,3]) - +a[1,3]*(a[2,1]*a[3,2]-a[3,1]*a[2,2]); - deter:=sum -end; { function deter } - - - -procedure setup(var b: ary2s; - var coef: arys; - j: integer); - -var i : integer; - -begin { setup } - for i:=1 to n do - begin - b[i,j]:=y[i]; - if j>1 then b[i,j-1]:=a[i,j-1] - end; - coef[j]:=deter(b)/det -end; { setup } - -begin { procedure solve } - error:=false; - for i:=1 to n do - for j:=1 to n do - b[i,j]:=a[i,j]; - det:=deter(b); - if det=0.0 then - begin - error:=true; - writeln(chr(7),'ERROR: matrix is singular.') - end - else - begin - setup(b,coef,1); - setup(b,coef,2); - setup(b,coef,3); - end { else } -end; {procedure solve } - - -begin { MAIN program } - cls; - writeln; - writeln('Simultaneous solution by Cramers rule'); - repeat - get_data(a,y,n); - solve(a,y,coef,n,error); - if not error then write_data; - writeln; - write('More?'); - readln(yesno); - cls - until(yesno<>'Y')and(yesno<>'y') -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SOLVEC.PAS b/software/CPM/CPM18_MTPUG_06/SOLVEC.PAS deleted file mode 100644 index 4106836..0000000 --- a/software/CPM/CPM18_MTPUG_06/SOLVEC.PAS +++ /dev/null @@ -1,178 +0,0 @@ -program solvec; { -> 119 } -{ pascal program to perform simultaneous solution by Gauss-Jordan elimination} -{ for complex coefficients } - -const maxr = 8; - maxc = 8; - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2s = array[1..maxr,1..maxc] of real; - aryc2 = array[1..maxr,1..maxc,1..2] of real; - aryc = array[1..maxr,1..2] of real; - -var y : arys; - coef : arys; - a,b : ary2s; - n,m,i,j : integer; - error : boolean; - -external procedure cls; -external procedure revon; -external procedure revoff; - - - -procedure get_data(var a: ary2s; - var y: arys; - var n,m: integer); - -{ get complex values for n and arrays a,y } - -var c : aryc2; - v : aryc; - i,j,k,l : integer; - -procedure show; - { print original data } -var i,j,k : integer; - -begin { show } - writeln; - for i:=1 to n do - begin - for j:=1 to m do - for k:=1 to 2 do - write(c[i,j,k]:7:4,' '); - writeln(':',v[i,1]:7:4,':',v[i,2]:7:4) - end; - n:=2*n; - m:=n; - writeln; - for i:=1 to n do - begin - for j:=1 to m do - write(a[i,j]:7:4,' '); - writeln(':',y[i]:9:5) - end; - writeln -end; { show } - -begin { procedure get_data } - writeln; - repeat - write('How many equations? '); - readln(n); - m:=n - until n1 then - begin - for i:=1 to n do - begin - writeln('Equation',i:3); - k:=0; - l:=2*i-1; - for j:=1 to n do - begin - k:=k+1; - write('Real',j:3,':'); - read(c[i,j,1]); { read real part } - a[l,k]:=c[i,j,1]; - a[l+1,k+1]:=c[i,j,1]; - k:=k+1; - write('Imag',j:3,':'); - read(c[i,j,2]); { imaginary part } - a[l,k]:=-c[i,j,2]; - a[l+1,k-1]:=c[i,j,2] - end; { j-loop } - write('Real const:'); - read(v[i,1]); { real constant } - y[l]:=v[i,1]; - write('Imag const:'); - readln(v[i,2]); { imag constant } - y[l+1]:=v[i,2] - end; { i-loop } - show { the original DATA } - end { if n>1 } -end; { procedure get_data } - - -procedure write_data; - -{ print out the answers } - -var i,j : integer; - re,im : real; - -function mag(x,y: real): real; -{ polar magnitude } -begin - mag:=sqrt(sqr(x)+sqr(y)) -end; { function mag } - -function atan(x,y: real): real; -{ arctan in degrees } -const pi180 = 57.2957795; -var a : real; - -begin { atan } - if x=0.0 then - if y=0.0 then atan:=0.0 - else atan:=90.0 - else { x<>0 } - if y=0.0 then atan:=0.0 - else { x and y <>0 } - begin - a:=arctan(abs(y/x))*pi180; - if x>0.0 then - if y>0.0 then atan:=a { x,y>0 } - else atan:=-a { x>0, y<0 } - else { x<0 } - if y>0.0 then atan:=180.0-a { x<0, y>0 } - else atan:=180.0+a { x,y<0 } - end { else } -end; { function atan } -begin - writeln(' REAL Imaginary Magnitude Angle'); - for i:=1 to (m div 2) do - begin - j:=2*i-1; - re:=coef[j]; - im:=coef[j+1]; - writeln(re:11:5,im:11:5,mag(re,im):11:5,atan(re,im):11:5) - end; { for } - writeln -end; { write_data } - - - -{external procedure gaussj - (var b : ary2s; - y : arys; - var coef : arys; - ncol : integer; - var error : boolean);} - -{$I C:GAUSSJ.LIB} - -begin { MAIN program } - cls; - writeln; - writeln; - revon; - writeln('Simultaneous solution with complex coefficients'); - writeln('by Gauss-Jordan elimination'); - revoff; - repeat - get_data(a,y,n,m); - if n>1 then - begin - for i:=1 to n do - for j:=1 to n do - b[i,j]:=a[i,j]; { setup work array } - gaussj(b,y,coef,n,error); - if not error then write_data - end - until n<2 -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SOLVGJ.PAS b/software/CPM/CPM18_MTPUG_06/SOLVGJ.PAS deleted file mode 100644 index c716a16..0000000 --- a/software/CPM/CPM18_MTPUG_06/SOLVGJ.PAS +++ /dev/null @@ -1,100 +0,0 @@ -program solvgj; { -> 84 } -{ pascal program to perform simultaneous solution by Gauss-Jordan elimination} - -const maxr = 8; - maxc = 8; - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2s = array[1..maxr,1..maxc] of real; - -var y : arys; - coef : arys; - a,b : ary2s; - n,m,i,j : integer; - first, - error : boolean; - -external procedure cls; - -procedure get_data(var a: ary2s; - var y: arys; - var n,m: integer); - -{ get the values for n and arrays a,y } - -var i,j : integer; - -begin - writeln; - repeat - write('How many equations? '); - readln(n); - if first then first:=false else cls; - m:=n - until n1 then - begin - for i:=1 to n do - begin - writeln('Equation',i:3); - for j:=1 to n do - begin - write(j:3,':'); - read(a[i,j]) - end; - write(',C:'); - readln(y[i]) { clear line } - end; - writeln; - for i:=1 to n do - begin - for j:=1 to m do - write(a[i,j]:7:4,' '); - writeln(':',y[i]:7:4) - end; - writeln - end { if n>1 } -end; { procedure get_data } - -procedure write_data; - -{ print out the answers } - -var i : integer; - -begin - for i:=1 to m do - write(coef[i]:9:5); - writeln -end; { write_data } - - - -{external procedure gaussj - (var b : ary2s; - y : arys; - var coef : arys; - ncol : integer; - var error : boolean);} - -{$I C:GAUSSJ.LIB} - -begin { MAIN program } - first:=true; - cls; - writeln; - writeln('Simultanuns solution by Gauss-Jordan elimination'); - repeat - get_data(a,y,n,m); - if n>1 then - begin - for i:=1 to n do - for j:=1 to n do - b[i,j]:=a[i,j]; { setup work array } - gaussj(b,y,coef,n,error); - if not error then write_data - end - until n<2 -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SOLVGJ2.PAS b/software/CPM/CPM18_MTPUG_06/SOLVGJ2.PAS deleted file mode 100644 index a0e03d6..0000000 --- a/software/CPM/CPM18_MTPUG_06/SOLVGJ2.PAS +++ /dev/null @@ -1,110 +0,0 @@ -program solvgj2; { -> 111 } -{ pascal program to perform simultaneous solution by Gauss-Jordan elimination} -{ there may be more equations than unknowns } - -const maxr = 8; - maxc = 8; - -type ary = array[1..maxr] of real; - arys = array[1..maxc] of real; - ary2s = array[1..maxr,1..maxc] of real; - ary2 = ary2s; { for square } - -var y : ary; - coef,yy : arys; - a,b : ary2s; - n,m,i,j : integer; - first, - error : boolean; - -external procedure cls; - -procedure get_data(var a: ary2s; - var y: ary; - var n,m: integer); - -{ get the values for n and arrays a,y } - -var i,j : integer; - -begin - writeln; - repeat - write('How many unknowns? '); - readln(m); - if first then first:=false else cls; - until m1 then - begin - repeat - write('How many equations? '); - readln(n) - until n>=m; - for i:=1 to n do - begin - writeln('Equation',i:3); - for j:=1 to m do - begin - write(j:3,':'); - read(a[i,j]) - end; - write(',C:'); - readln(y[i]) { clear line } - end; { i-loop } - writeln; - for i:=1 to n do - begin - for j:=1 to m do - write(a[i,j]:7:4,' '); - writeln(':',y[i]:7:4) - end; - writeln - end { if n>1 } -end; { procedure get_data } - -procedure write_data; - -{ print out the answers } - -var i : integer; - -begin - for i:=1 to m do - write(coef[i]:9:5); - writeln -end; { write_data } - -{external procedure square - ( y : ary; - var a : ary2s; - var g : arys; - nrow,ncol : integer);} - -{$I C:SQUARE.LIB} - -{external procedure gaussj - (var b : ary2s; - y : arys; - var coef : arys; - ncol : integer; - var error : boolean);} - -{$I C:GAUSSJ.LIB} - -begin { MAIN program } - first:=true; - cls; - writeln; - writeln('Best fit to simultaneous equations'); - writeln('By Gauss-Jordan'); - repeat - get_data(a,y,n,m); - if m>1 then - begin - square(a,y,b,yy,n,m); - gaussj(b,yy,coef,m,error); - if not error then write_data - end - until m<2 -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SOLVGV.PAS b/software/CPM/CPM18_MTPUG_06/SOLVGV.PAS deleted file mode 100644 index 6a10341..0000000 --- a/software/CPM/CPM18_MTPUG_06/SOLVGV.PAS +++ /dev/null @@ -1,273 +0,0 @@ -program solvgv; { -> 96 } -{ pascal program to perform simultaneous solution by gauss-jordan elimination } -{ with multiple constant vectors } - -const maxr = 7; - maxc = 7; - -type ary2s = array[1..maxr,1..maxc] of real; - -var dummy : char; - a,y : ary2s; - n,nvec : integer; - first, - error : boolean; - determ : real; - -external procedure cls; -external procedure revon; -external procedure revoff; - -procedure get_data(var a: ary2s; - var y: ary2s; - var n,nvec: integer); -{ get values for n,nvec and arrays a,y } - -var i,j : integer; - -begin - if not first then cls else first:=false; - writeln; - repeat - write('How many equations? '); - readln(n) - until n1 then - begin - write('How many constant vectors? '); - readln(nvec); - for i:=1 to n do - begin - for j:=1 to n do - begin - write(j:3,': '); - read(a[i,j]); - if (j mod n+nvec)=0 then writeln - end; - if nvec>0 then - begin - for j:=1 to nvec do - begin - write(' C:'); - read(y[i,j]) - end; - readln - end - end; { i-loop } - - writeln; - write(' Matrix'); - if nvec>0 then write(' Constants'); - writeln; - for i:=1 to n do - begin - for j:=1 to n do - write(a[i,j]:7:4,' '); - for j:=1 to nvec do - write(':',y[i,j]:7:4); - writeln - end; { i-loop } - writeln - end { if n>1 } - end; { procedure get_data } - -procedure write_data; - { print out answers } - -var i,j : integer; - -begin - if nvec>0 then - begin - writeln('Solution '); - for i:=1 to n do - begin - for j:=1 to nvec do - write(y[i,j]:9:5); - writeln - end - end { if } - else - begin - writeln(' Inverse'); - for i:=1 to n do - begin - for j:=1 to n do - write(a[i,j]:9:5); - writeln - end; - writeln; - write('Determinant is ',determ:10:5) - end; { else } - writeln -end; { write_data } - - -procedure gausjv - (var b : ary2s; { square matrix of coefficients } - var w : ary2s; { constant vector matrix } - var determ : real; { the determinant } - ncol : integer; { order of matrix } - nv : integer; { number of constants } - var error : boolean); { true if matrix is singular } - -{ Gauss Jordan matrix inversion and solution } -{ B(n,n) coefficients matrix becomes inverse } -{ W(n,m) constant vector(s) become solution vector } -{ determ is the determinant } -{ error=1 if singular } -{ INDEX(n,3) } -{ NV is the number of vectors } - -label 99; - -var - index : array[1..maxc,1..3] of integer; - i,j,k,l, - irow,icol, - n,l1 : integer; - pivot,hold, - sum,ab, - t,big : real; - -procedure swap(var a,b: real); -var hold : real; - -begin - hold:=a; - a:=b; - b:=hold -end; { procedure swap } - - -procedure gausj2; - label 98; - var i,j,k,l,l1 : integer; - - -procedure gausj3; - -var l : integer; - -begin { procedure gausj3 } - { interchange rows to put pivot on diagonal } - if irow<>icol then - begin - determ:=-determ; - for l:=1 to n do - swap(b[irow,l],b[icol,l]); - if nv>0 then - for l:=1 to nv do - swap(w[irow,l],w[icol,l]) - end { if irow<>icol } -end; { gausj3 } - -begin { procedure gausj2 } - { actual start of gaussj } - error:=false; - n:=ncol; - for i:=1 to n do - index[i,3]:=0; - determ:=1.0; - for i:=1 to n do - begin - { search for the largest element } - big:=0.0; - for j:=1 to n do - begin - if index[j,3]<>1 then - begin - for k:=1 to n do - begin - if index[k,3]>1 then - begin - writeln(chr(7),'ERROR: matrix is singular'); - error:=true; - goto 98 { abort } - end; - if index[k,3]<1 then - if abs(b[j,k])>big then - begin - irow:=j; - icol:=k; - big:=abs(B[j,k]) - end - end { k-loop } - end { if } - end; { j-loop } - index[icol,3]:=index[icol,3]+1; - index[i,1]:=irow; - index[i,2]:=icol; - gausj3; { further subdivision of gaussj } - { divide pivot row by pivot column } - pivot:=b[icol,icol]; - determ:=determ*pivot; - b[icol,icol]:=1.0; - for l:=1 to n do - b[icol,l]:=b[icol,l]/pivot; - if nv>0 then - for l:=1 to nv do - w[icol,l]:=w[icol,l]/pivot; - { reduce nonpivot rows } - for l1:=1 to n do - begin - if l1<>icol then - begin - t:=b[l1,icol]; - b[l1,icol]:=0; - for l:=1 to n do - b[l1,l]:=b[l1,l]-b[icol,l]*t; - if nv>0 then - for l:=1 to nv do - w[l1,l]:=w[l1,l]-w[icol,l]*t - end { if l1<>icol } - end { for l1 } - end; { i-loop } -98: -end; { gausj2 } - -begin { GAUS-JORDAN main program } - gausj2; { first half of gaussj } - if error then goto 99; - { interchange columns } - for i:=1 to n do - begin - l:=n-i+1; - if index[l,1]<>index[l,2] then - begin - irow:=index[l,1]; - icol:=index[l,2]; - for k:=1 to n do - swap(b[k,irow],b[k,icol]) - end { if index } - end; { i-loop } -for k:=1 to n do - if index[k,3]<>1 then - begin - writeln(chr(7),'ERROR: matrix is singular'); - error:=true; - goto 99 { abort } - end; -99: -end; { procedure gaussj } - - -begin { main program } - first:=true; - cls; - writeln; - revon; - writeln('Simultaneous solution by Gauss-Jordan'); - writeln('Multiple constant vectors, or matrix inverse'); - revoff; - repeat - get_data(a,y,n,nvec); - if n>1 then - begin - gausjv(a,y,determ,n,nvec,error); - if not error then write_data; - read(dummy) - end - until n<2 -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SORT-B.LIB b/software/CPM/CPM18_MTPUG_06/SORT-B.LIB deleted file mode 100644 index 21d4aa6..0000000 --- a/software/CPM/CPM18_MTPUG_06/SORT-B.LIB +++ /dev/null @@ -1,34 +0,0 @@ - - -{ --> 176} -procedure {bubble} sort(var a: ary; n: integer); -{ adapted from 'Introduction to PASCAL', - R.Zaks, Sybex, 1980 } - -var no_change : boolean; - j : integer; - -procedure swap(p,q: real); -var hold : real; -begin - hold:=p; - p:=q; - q:=hold -end; { swap } - -begin { procedure sort } - repeat - no_change:=true; - for j:=1 to n-1 do - begin - if a[j]>a[j+1] then - begin - swap(a[j],a[j+1]); - no_change:=false - end - end { for } - until no_change -end; { procedure sort } - - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SORT-Q-N.LIB b/software/CPM/CPM18_MTPUG_06/SORT-Q-N.LIB deleted file mode 100644 index e46a586..0000000 --- a/software/CPM/CPM18_MTPUG_06/SORT-Q-N.LIB +++ /dev/null @@ -1,74 +0,0 @@ - - -{ --> 183} -procedure sort(var x: ary; n: integer); -{ a NONRECURSIVE quicksort routine } -{ Adapted from 'Software-Tools', - B.Kernighan, Addison Wesley, 1976 } - -var left,right : array[1..20] of integer; - i,j,sp,mid : integer; - pivot : real; - -procedure swap(var p,q: real); -var hold : real; - -begin - hold:=p; - p:=q; - q:=hold -end; { swap } - - -begin - left[1]:=1; - right[1]:=n; - sp:=1; - while sp>0 do - begin - if left[sp]>=right[sp] then sp:=sp-1 - else - begin - i:=left[sp]; - j:=right[sp]; - pivot:=x[j]; - mid:=(i+j)div 2; - if (j-i)>5 then - if ((x[mid]x[i])) - or - ((x[mid]>pivot)and(x[mid]pivot)) - or ((x[i]>x[mid])and(x[i]=right[sp]-i then - begin { put shorter part first } - left[sp]+1:=left[sp]; - right[sp+1]:=i-1; - left[sp]:=i+1 - end - else - begin - left[sp+1]:=i+1; - right[sp+1]:=right[sp]; - right[sp]:=i-1 - end; - sp:=sp+1 { push stack } - end { if } - end { while } -end; { QUICK SORT } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SORT-Q-R.LIB b/software/CPM/CPM18_MTPUG_06/SORT-Q-R.LIB deleted file mode 100644 index c087c54..0000000 --- a/software/CPM/CPM18_MTPUG_06/SORT-Q-R.LIB +++ /dev/null @@ -1,58 +0,0 @@ - - -{ --> 180} -procedure {quick} sort(var x: ary; n: integer); -{ a RECURSIVE sorting routine } -{ Adapted from 'The design of Well-Structured and Correct Programs', - S. Alagic, Springer-Verlag, 1978 } - - -procedure qsort(var x: ary; m,n: integer); -var i,j : integer; - - -procedure partit(var a: ary; var i,j: integer; left,right: integer); -var pivot : real; - -procedure swap(var p,q: real); -var hold : real; -begin - hold:=p; - p:=q; - q:=hold -end; { swap } - -begin - pivot:=a[(left+right)div 2]; - i:=left; - j:=right; - while i<=j do - begin - while a[i] 178} - -procedure {shell} sort(var a: ary; n: integer); -{ Shell-Metzner sort } -{ Adapted from 'Programming in pascal', - P. Grogono, Addison-Wesley, 1980 } - -var done : boolean; - jump,i,j: integer; - -procedure swap(var p,q: real); -var hold : real; - -begin - hold:=p; - p:=q; - q:=hold -end; { swap } - -begin - jump:=n; - while jump>1 do - begin - jump:=jump div 2; - repeat - done:=true; - for j:=1 to n do - begin - i:=j+jump; - if a[j]>a[i] then - begin - swap(a[j],a[i]); - done:=false - end { if } - end { for } - until done - end { while } -end; { SORT } - - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/SQUARE.LIB b/software/CPM/CPM18_MTPUG_06/SQUARE.LIB deleted file mode 100644 index a92c6a3..0000000 --- a/software/CPM/CPM18_MTPUG_06/SQUARE.LIB +++ /dev/null @@ -1,33 +0,0 @@ - -procedure square(x: ary2; - y: ary; - var a: ary2s; - var g: arys; - nrow,ncol: integer); - -{ matrix multiplication routine } -{ a= transpose x times x } -{ g= y times x } - -var - i,k,l : integer; - -begin { square } - for k:=1 to ncol do - begin - for l:=1 to k do - begin - a[k,l]:=0.0; - for i:=1 to nrow do - begin - a[k,l]:=a[k,l]+x[i,l]*x[i,k]; - if k<>l then a[l,k]:=a[k,l] - end - end; { l-loop } - g[k]:=0.0; - for i:=1 to nrow do - g[k]:=g[k]+y[i]*x[i,k] - end { k-loop } -end; { square } - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TERMINAL.BLD b/software/CPM/CPM18_MTPUG_06/TERMINAL.BLD deleted file mode 100644 index e24aeaf..0000000 --- a/software/CPM/CPM18_MTPUG_06/TERMINAL.BLD +++ /dev/null @@ -1,4 +0,0 @@ -TERMINAL.ERL -CURSOR.ERL -CURSOR2.ERL - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TERMINAL.ERL b/software/CPM/CPM18_MTPUG_06/TERMINAL.ERL deleted file mode 100644 index 65a46b64bbb56a223ffd090af89822cf08b0c536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmXw%Ur1A77{=dk^PE|%>GGWA$qdUWBSm!0P*B)(N4GM!o&9k$gQ;V9Gt#gqDmtSk zigMU!LA8iOK?HeWVE?F#S!uEorcM(HTBVgGl8|&$&{@-)7vAT4d3YYaUm!SV3(qEa zkCGVeT{2KRDvV^U8n16+Xp_|+oF&3>;jvP=p&<8dEIR+s@*wj&8#8hg}5fDEZ!qX0E7uU{)u3=W+ysEfRQkwIOE$g060Un^Y%*jqCa<#8WC*4|vVS$v2E3Ab9VLJ=*9U){|mV2TIy>6mmoc;f);*ZVLy z*adKAXv?T^%ZS=C+L1B}+#c(B=p1e-ITQd*TiHyA$Q&19PT)e!vCLXmnPL!|nCp1z z99|?~y8GE-y}6LsBg)Ek@#z%(O>q?nf`}4?jDjzoC#|J9Z?K8wj;F16f0x)}klFqghDE)@p(VEao={xqFj#`P^69(zb^0ICd933E!~xuKF0@EYdS9i2Fdl%A4G`6 z6JLKy&7!Qlv1qYS^<&pa+py!lkXSOLP3ELJzYF5Nc4&#bU29Q2xwY(F$i~jzY!jV~ zyubbF+|`I%OMdC;w#QDK92{74`266V590Yfz&&R-u~?Z*6Vb$7V?CO2rEQ~X#gLMO zujYcVl;&g2jMMr?T4&=%S&wZ=e@dDAeKG|EZEE1|v74ZLH>4#i$EPGxQ>psVk2jc@ z#%4VifK6h4Wa0v24MryyWo?&Vg_oQwtn{ePdW8GSrqNmbi8)d@-2{L@{6ED*{3%Qs zUe=Swx{-{;FVqK6{;gcB0mx2*BrjZNfoc~I;>&cH-Lt>+9!vpXE;EW9h-qaG0f>E3 zkXbSTmc1-U 264 } -{ integration by the trapezoidal rule } - -var done : boolean; - sum,upper,lower : real; - pieces : integer; - -function fx(x: real): real; -{ find f(x)=1/x } -{ watch out for x=0 ! } -begin - fx:=1.0/x -end; - -procedure trapez(lower,upper : real; - pieces : integer; - var sum : real); -{ numerical integration by the trapezoid method } -{ function is FX, limits are LOWER and UPPER } -{ with number of regions equal to PIECES } -{ fixed partition is DELTA_X, answer is SUM } - -var i : integer; - x,delta_x,esum,psum : real; -begin - delta_x:=(upper-lower)/pieces; - esum:=fx(lower)+fx(upper); - psum:=0.0; - - for i:=1 to pieces do - begin - x:=lower+i*delta_x; - psum:=psum+fx(x) - end; - sum:=(esum+2.0*psum)*delta_x*0.5 -end; { TRAPEZ } - -begin { main program } - done:=false; - lower:=1.0; - upper:=9.0; - writeln; - repeat - write('How many sections? '); - readln(pieces); - if pieces<0 then done:=true - - else - begin - trapez(lower,upper,pieces,sum); - writeln('area=',sum) - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TRAP2.PAS b/software/CPM/CPM18_MTPUG_06/TRAP2.PAS deleted file mode 100644 index 570bfd5..0000000 --- a/software/CPM/CPM18_MTPUG_06/TRAP2.PAS +++ /dev/null @@ -1,56 +0,0 @@ -program trap2; { -> 266 } -{ integration by the trapezoidal rule } - -const tol = 1.0E-4; -var sum,upper,lower : real; - -external procedure cls; - -function fx(x: real): real; -{ find f(x)=1/x } -{ watch out for x=0 ! } -begin - fx:=1.0/x -end; - -procedure trapez(lower,upper,tol: real; - var sum : real); - -{ numerical integration by the trapezoid method } -{ function is FX, limits are LOWER and UPPER } -{ with number of regions equal to PIECES } -{ fixed partition is DELTA_X, answer is SUM } - -var pieces,i : integer; - x,delta_x,end_sum,mid_sum,sum1 : real; -begin - pieces:=1; - delta_x:=(upper-lower)/pieces; - end_sum:=fx(lower)+fx(upper); - sum:=end_sum*delta_x/2.0; - writeln(' 1',sum); - mid_sum:=0.0; - repeat - pieces:=pieces*2; - sum1:=sum; - delta_x:=(upper-lower)/pieces; - for i:=1 to pieces div 2 do - begin - x:=lower+delta_x*(2.0*i-1.0); - mid_sum:=mid_sum+fx(x) - end; - sum:=(end_sum+2.0*mid_sum)*delta_x*0.5; - writeln(pieces:5,sum) - until abs(sum-sum1)<=abs(tol*sum) -end; { TRAPEZ } - -begin { main program } - cls; - lower:=1.0; - upper:=9.0; - writeln; - trapez(lower,upper,tol,sum); - writeln; - writeln(chr(7),'area=',sum) -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TRAPEZ.LIB b/software/CPM/CPM18_MTPUG_06/TRAPEZ.LIB deleted file mode 100644 index d32552c..0000000 --- a/software/CPM/CPM18_MTPUG_06/TRAPEZ.LIB +++ /dev/null @@ -1,43 +0,0 @@ - - -{ -> 270 } -procedure trapez(function f(x:real):real; - lower,upper,tol: real; - var sum : real); - -{ numerical integration by the trapezoid method } -{ function is f (as parameter), limits are LOWER and UPPER } -{ with number of regions equal to PIECES } -{ fixed partition is DELTA_X, answer is SUM } - -var pieces,i : integer; - x,delta_x,end_sum,mid_sum, - end_cor,sum1 : real; - -function dfx(x: real): real; -begin - dfx:=1.0/sqr(x) -end; - -begin - pieces:=1; - delta_x:=(upper-lower)/pieces; - end_sum:=f(lower)+f(upper); - end_cor:=(dfx(upper)-dfx(lower))/12.0; - sum:=end_sum*delta_x/2.0; - mid_sum:=0.0; - repeat - pieces:=pieces*2; - sum1:=sum; - delta_x:=(upper-lower)/pieces; - for i:=1 to pieces div 2 do - begin - x:=lower+delta_x*(2.0*i-1.0); - mid_sum:=mid_sum+f(x) - end; - sum:=(end_sum+2.0*mid_sum)*delta_x*0.5*0.5-sqr(delta_x)*end_cor; - until abs(sum-sum1)<=abs(tol*sum) -end; { TRAPEZ } - - - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TSTBES.PAS b/software/CPM/CPM18_MTPUG_06/TSTBES.PAS deleted file mode 100644 index 504f351..0000000 --- a/software/CPM/CPM18_MTPUG_06/TSTBES.PAS +++ /dev/null @@ -1,83 +0,0 @@ -program tstbes; { -> 344 } -{ test the bessel function } -{ the Gamma function is included } - -var done :boolean; - x,ordr : real; - - -function gamma(x: real): real; -const pi = 3.1415926; - -var i,j : integer; - y,gam : real; - -begin { gamma function } - if x>=0.0 then - begin - y:=x+2.0; - gam:=sqrt(2*pi/y)*exp(y*ln(y)+(1-1/(30*y*y))/(12*y)-y); - gamma:=gam/(x*(x+1)) - end - else { x<0 } - begin - j:=0; - y:=x; - repeat - j:=j+1; - y:=y+1.0 - until y>0.0; - gam:=gamma(y); { recursive call } - for i:=0 to j-1 do - gam:=gam/(x+1); - gamma:=gam - end { x<0 } -end; { gamma function } - -function bessj(x,n: real): real; -{ cylindrical Bessel function of the first kind } -{ the gamma function is required } - -const tol = 1.0E-4; - pi = 3.1415926; - -var i : integer; - term,new_term, - sum,x2 : real; - -begin { bessj } - x2:=x*x; - if (x=0.0)and(N=1.0) then bessj:=0.0 - else if x>15 then { asymptotic expansion } - bessj:=sqrt(2/(pi*x))*cos(x-pi/4-n*pi/2) - else - begin - if n=0.0 then sum:=1.0 - else sum:=exp(n*ln(x/2))/gamma(n+1.0); - new_term:=sum; - i:=0; - repeat - i:=i+1; - term:=new_term; - new_term:=-term*x2*0.25/(i*(n+1)); - sum:=sum+new_term - until abs(new_term)<=abs(sum*tol); - bessj:=sum - end { if} -end; { bessj } - -begin { main } - done:=false; - repeat - write('Order: '); - readln(ordr); - if ordr<-25.0 then done:=true - else - begin - write('X: '); - readln(x); - writeln('J Bessel is ',bessj(x,ordr)) - end - until done -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TSTGAM.PAS b/software/CPM/CPM18_MTPUG_06/TSTGAM.PAS deleted file mode 100644 index 4b9078e..0000000 --- a/software/CPM/CPM18_MTPUG_06/TSTGAM.PAS +++ /dev/null @@ -1,48 +0,0 @@ - -program tstgam; { -> 340 } -{ test the gamma function } - -var x : real; - -external procedure cls; - -function gamma(x: real): real; -const pi = 3.1415926; - -var i,j : integer; - y,gam : real; - -begin { gamma function } - if x>=0.0 then - begin - y:=x+2.0; - gam:=sqrt(2*pi/y)*exp(y*ln(y)+(1-1/(30*y*y))/(12*y)-y); - gamma:=gam/(x*(x+1)) - end - else { x<0 } - begin - j:=0; - y:=x; - repeat - j:=j+1; - y:=y+1.0 - until y>0.0; - gam:=gamma(y); { recursive call } - for i:=0 to j-1 do - gam:=gam/(x+i); - gamma:=gam - end { x<0 } -end; { gamma function } - -begin - cls; - writeln; - repeat - repeat - write('X: '); - read(x) - until x<>0.0; - writeln('Gamma is ',gamma(x)) - until x<-22.0; -end. - \ No newline at end of file diff --git a/software/CPM/CPM18_MTPUG_06/TSTSORT.PAS b/software/CPM/CPM18_MTPUG_06/TSTSORT.PAS deleted file mode 100644 index b3ead66..0000000 --- a/software/CPM/CPM18_MTPUG_06/TSTSORT.PAS +++ /dev/null @@ -1,76 +0,0 @@ -program tstsort; { -> 172 } -{ test speed of sorting routine } - -const max = 1000; - -type ary = array[1..300] of real; - -var x : ary; - n,i : integer; - seed : real; - first : boolean; - -external procedure cls; - -{$I RANDOM.LIB } - -procedure print; -var i : integer; - -begin - writeln; - for i:=1 to n do - begin - write(x[i]:7:2); - if (i mod 10)=0 then writeln - end -end; - -procedure { bubble- } sort(var a: ary; n: integer); -var i,j : integer; - hold : real; - -begin { procedure sort } - for i:=1 to n-1 do - for j:=i+1 to n do - begin - if a[i]>a[j] then - begin - hold:=a[i]; - a[i]:=a[j]; - a[j]:=hold - end - end { for } -end; { procedure sort } - -begin { MAIN program } - cls; - seed:=4.0; - repeat - repeat - writeln; - write('How many points? '); - readln(n) - until n<=max; - if first then first:=false else cls; - for i:=1 to n do - x[i]:=100*random(0); - print; - write(chr(7)); - sort(x,n); { random numbers } - write(chr(7)); - print; - writeln(' random '); - write(chr(7)); - sort(x,n); { sorted numbers } - write(chr(7)); - print; - writeln(' sorted '); - for i:=1 to n do - x[i]:=n+1-i; - write(chr(7)); - print; - writeln(' reversed '); - until n<5 -end. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/-MTPUG.007 b/software/CPM/CPM19_MTPUG_07/-MTPUG.007 deleted file mode 100644 index e69de29..0000000 diff --git a/software/CPM/CPM19_MTPUG_07/-MTPUG.DOC b/software/CPM/CPM19_MTPUG_07/-MTPUG.DOC deleted file mode 100644 index c67780b..0000000 --- a/software/CPM/CPM19_MTPUG_07/-MTPUG.DOC +++ /dev/null @@ -1,56 +0,0 @@ -MTPUG.007 December 11, 1982 - -PRMAC.SRC A program for typing the .PRN and .SYM files produced - .COM by the Digital Research's MAC assembler. Has improved - .DOC output format. - -GRAPH.DOC This set of programs was the result of a concerted -GRPH.SRC effort to produce a PORTABLE set of graphic procedures -GRAPHADM.SRC which could be easily used on more than one machine. - Written by J.A. Koehler and Jack Gilmer. - -PRETTY.DOC A starter program for Pascal programs. At present it - .SRC only converts lower case reserved words to upper case. - .COM Written by J.A. Koehler. - -DISKIO.DOC Start of a library of I/O routines. At present only - .SRC includes a routine to obtain up to two arguments on - a command line. Written by J.A. Koehler. - -SHAREFIL.DOC This is an application program using a Pascal interface - to assembly modules provided by Sue Arnold of Centaurus - Software. These modules together provide file sharing - and record locking/unlocking capability for Pascal/MT+ - programs ver 5.5 running under MP/M II. This package of - programs is not supported by the author or by Digital - Research, Inc. - -SHAREFIL.TST A simple program example showing the use of the above - routines. Written by Dick Lovelace and Dan Erickson. - -BCD.DOC Z80 Version of BCDREALS.ERL(Ver 5.5). This module is - .ERL about 20% shorter and 25% faster than the original - library. It is highly Z-80 specific. Provided by - Guenter Musstopf, author unknown. - -TYPESET.DOC Program converts a text file written by "WORDSTAR" - .SRC to a format acceptable to type setting equipment. - .PRM Special Wordstar symbols are translated to symbols - acceptable to the type setting equipment. Operator - intervention requested when needed. May also be - used to translate to other word processor formats. - Written by Per Strangeland, Norway. - -FOTOSATS.DOC Norwegian version of TYPESET above. - .SRC - .PRM - -MYLIB.ERL Contains corrected versions of MT+(5.5) run time - modules, GETSTR and DELBLNK described in News #7. - Written by Henry Lucas - -3740UTIL.DOC A CPM program to read/write IBM 3740 format disks - .COM and read/write CPM format disks. Maintained by - Bob White. - - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/3740UTIL.COM b/software/CPM/CPM19_MTPUG_07/3740UTIL.COM deleted file mode 100644 index ec973a528b730e2f961c4880d6ecc64e2db1543a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 zcmeHNeRNY*w!eioO$$kzet%K!ZIY6f-ZTkFAwWvnq%@KyF(1XEh`s?uM@5hsq(vzB z6hC;+<>1HYd%jT_ozZzN-*cYwW)y)QK~l{q6|mD;t{Db{MP+74-#%Zrxh1XR zTJz6aYswb|6a>MVly#VQ(}R4v5j9*dA)` zB0|q`p|e=X4nn?wFY0sqeJi}AQ;#nUW`f}!BK|fPH%|d^2Z*jE!N4!zd8;CLkjwv)GXd4!u3&I}oGl~sdEWC;f zKaYhk!NR^s$nWmSD7}kIpTN@dK-%w%L^C+~OD>o{6$D#AFdB9TA|2i^i5rd|$&sba zA8cRNK%6|qbzE3ye!32kWic1ib;_qQUvI@a3(|FPe#Y!Xg0XPBml|5em3|6JcAQlO zoZ3*jQa@KZj+Jnhl|Tgu)mUtaD=%^3vr{22*y+xouifhufq%beZH9iqwXGEXlfDN~&$BLtA%Ao;Mf#DO1AfWyn zj45qE!XUu*6ky+B9VBk8b$lsHFUxvOt$3?ZH}FUfis#VmWg3^F#V*goLpL00AbEWv z6B2Yfhq!Z!HR8Nxjaz+4;4c${D&9tQux ziHsI^Mt~9?2&f53=8`BaZWO;?K2oc%ygn zA)u26`bFN+*ZGqM`h6xhF3@wQVRmFLSd>5)PowUP4>ShJXCibv?um57MtTNTtYjUb zr>9K{_Fg784(taM>{!9X3q4wmDR>V|fR_=YZu+FgbEi{p#~EKS9Y^Zo`b)98nCU4| z8ri9XssOst*GSu^;|b>R=}hsv77MjD=yTji$H143s#TlhZ@>1ifutJD0|tbM-Q}`SpH5a`WpWg7h=lH5EHEwxk@4qceKU zLZyCI7u~eDR|tvpG(|5sK9duFsdNbmSM|ukLRXfwtvQiB11=#xirWxa>^~H=XX@UP zllp16PEP78@mDIlb)>uCP%tS)3-Ghzp{xs|c^W}qop&%9KY1`|7`5uFh`ixfvc80< z2!l@*q_PIBh3J6-jF~{ig{0^Whk@;Ik8osD0Y&Nj3@WD2WNDgB-%qQmXA2C|Y|^OJ z`Id}pAv9P3Wm(n32cRxHP+;h9mX63cy88=8bcKVuLUf+k!H=Qd%cFP|hXu*6*!iv6 z4zd;|e%9pN-n_`My&1kz)guiBP{qNIez@1)jNqq`h}A&2`kNCcY5-qK7+7D3Ru`&L zFgDF8raB7Q*oYURht$$|?cgPlM^V_w74{cGaRkqod`1q&qPTqT@cF&8c6*9Tepoo^ z2zrajsYeiMG^ntvAHT-YXNqAQeWcA+Oq)eTt}M)?MMd98A49KI8e~ao9ceB~9BWL= z?>&aJ{3=yc8s*{!Ou07<87T)m8KYb&qg+W55{eYIEf4$PFcx` zeO4gAS_2TE&+6=j8@*NpKLx4R3b_Y|V~hYBiqINjK^cP?2(Yw>5n!+gJ*<|_On~ok zg#$(3K!815@()Fm5+K3k#u1>YSVaK!{K1~T6)Nj_EfPlfuxEPRiz_mizntm zVxR=t({g@$G0u6vz{a#{6u(2y3kBwr;;4J_yZ3x59i-+*s z5;Uts6@?5L%qw9T+*N`uS4(HkU<+5+QSuELT*D=wE15Kd_cJ+l2J!mW&(^;ZXgZ$w zy5#6^DsSM!lH$J8xdZQ)prMkKZs5}rXo#osj}#TdjmFPq=Q%uo<(5Lqh6BdMb)UStij@}}w%Ggp*P~-WzhxMc^aBPOUzl_dM_m?G3mrqPi=CXQ{+ExaW6xLzuj$2FF z>i9%aD8K#s& zW$1s)zKM{Jl`%rjC`TWur85)q2v;aB{{}*S$t4$-PfAF!oI+3&5~#Jw2nhs!K`hQO zo^2=xUxy+5m|02<@mM*g)DO!uQYzzw{y{l9TCT7u(}eyqL&fO?T&D9)72cWoxEy|r z(aTtY`^vnNs7!lPDyW~BR%l^`1?D31$Uc|d#|8dA8Lg|J5AM8X4!B`28Fs1Wr|(h) zn2suDXjcU(eePk6^nra(MJjLP%?k7y!Km6YRG>Y>G|;jN=`~rer4zwWh2gcdT`Hg$ zU8z@BeoOLSSqbFVhk*NdpCi%WIFwvf1|>9JT@OMu8!E@honNUUH~eIaB_skSnnx?q zuFCXaXP9KyRWeQ=szk34VY*g(VqrKEP|^gwkZ}Dw7e7@wDNm0uIaSQ#NK<9O%NgAKGcy!X}t z8}2{~tCFw9tT*&9(PjfN?3D?1#^n0A++Qlu8&!V;ubyEFDj(4YRU}X+StI4uU#fst z#%fenO&mzyidJx@xcxmv6+Gt)|jYspf)fq=KEK{^RgYaPv=`n{S zcsh`1aer5};cXdg;fFDc#_*o3pDI05jUUvWt%ebGHkCD?sY&9;iDIltuF6Q2Hwq2t z9C3z}FKIP$+V-ca_J6aQCY8+*q_YCn*`+mTK@E-!=?queVlV{TrX6mdKNj{XA*!fR z^>Om(!M(5=L~B}bSkj`hwFXCJOU>j_!HyL&1V?Jn-Z2F2{vg!<zTgkY_?qTt zf5G7GGoT-`qg^@!t)0P#f-?8PV@*de1_J|H2nRc7sKRv?U0;hkhfB& zw3fSwQF()&ab3->Rk?>z4az6aNQcSOjzvS`y_bd?{h*c&X?zqy&s{8T*+UO9HnXn4 zr?dmA7iviu|C8In2N?s$YMncTlzZe@ZOS`ztoDQ(%*4^h7^`Z%;7NFoX`}Dg0!gI{ zwMkSyQ$4%*JmfSbdnWZq4Px$00>aK3>3p(gW-4!Joe_8f>kl~#3C}d7l=Y`ib5go? zW)kgYhWx>$zIHfXh5e*p81|LCfu+$-(GtLaGypecwEbVy_VZ)5_YVGXW-4a@Oz+@Z z6(j46eQ?0D&Y0Q`kPHP@)`UTv0T6j`dg)#23k2|b0%sg_V}L9HpRtY;vI+FTwY`H) zqMfYqjoNkwz;`cdclsPS?F2bhjzGc$^Tcw_L3Gl!%8bbqV9%1DeP1 zjwWm{cg6fspUlp~e1OB!-X!{)MA$!R^ScAfXaJvMovM>}RwT*$6KkZ&tCb*rm_+S^ z6;jHNKSa0#XHyQd^`taYN}@|8YFjylyDa7nw0qh4IL;ikS}$dy%ykm6x|%hTxIQVR zrm(c(?YZo}v9ztmX{#shLlbuYDS!}X5ZZb|Za5Jlj<=0-`q_-;PgC=!#>@jf^mWYX zwn1&3;;#h$7Stutk~->d#0#fC_~iv+E)WdJB*f#)mepnQdSxB)dIf8wvF>ALad7Lv z*cLGM95Y5M*-$tb#cxCqi=lCr?#O8A4QlCim8DO(gQ3BX#vC+)%}>FmXk-b6_Z&KU zn%jdR<|A;adpwuE%4l`5k@)8{Qs=3EHy9Nztv05*2jPQr$!$GJrlz}%6HQGUSXX%U zL@zUhkOFvbLt)x{*)flD?NKJJX85}l)jKLwxh6Qo&owEBw!pSrQ(sC8pRfm=Ya+Nr z(?q!PP1Hs7un~2cXyD*+w0&7K180dwZ4q_`ZDYb}ST~qRu&!f`WC+}2f|=_+j0%>$ zk^4-0<76T3P5j6-&t~j{FN_O9@ump^qFhqJC>~zLW?(&hENg{NM~RtiB&Xf4#`m2i=H+Mh#^WLw zgd=9U_@5_-(6C_*3oJd5hQ)uQ8C`FNfZ>XKS;n(baweu;Y!{koAX_kc>9|>+Q)|Od zWZTS?Jx9$cP3v&b@M|*!h3?q@(oUlD z*sP0|HBjfrCKIabrNc!1*eqC?;H51%YJvq3H2ERRgqk`@uwVyumb3*06#0qFB#H}& zVuyt+4qk4NAKy%2Ddgx1UPpnVY7=``1(!!_`8AX~H}PvIVEBD{ z_I6)`s}rw#=Vh$3Ax(~7W0WsAzLK3^%J_Kcr3U=i^z()ck4?_6WS9g--XjvnRT8!I z019mGZ5bSGfEi(AwBgWV=;?w=PNH(dS?A@XRMD7j#6+5sl2vtg7P&hPV^1T-xLhU3 zj=&hkJ|eMMC85H&rx9b^(?~ErsghG+d{x!NF%GHjHd2hv%~l-1FNx_dR1zFquN4Qd zVm5|fHap#W4zAA%0bDX0gIhA2fODzj6mX-~q|~Eo;^5Y)?y>+faJz}=2UHSja4!*w zpQ|KP;NBQ~`kQg&!bBpZlHlOB zH$&uln{ecMn@HqtQ^_gdrrDCxZdDTp_pItJj~oS;Ag13`NvOenLL@#`NvOb;%NSg_ zOu&`O>48vzv#FXmxDM4_7P+^wug*D|`;)xFY5S%*rytOd77E2rl#Z6e%xw2~!ghEc z*k*5;V{^>2+2P7&v(2~R1=$-EMc-=h)}kFR{~7dUJVyTjp_ zjcZQu>Gg=~??n{>f_xa8Qp2=l@gwA4&#KZ_@}t>ECR5TTdR03t3a9 zX3N&*vK;fY={kKup`oa_WU-^ZqOx^X&5YWaOIB>_yW+;s?OiLc41D+MW!HRq_Os8w zIQQjOU!U*2%D?sIbz2S&pw|x_e&a~|=+L{zj-PmM_}9Nb^+EFVhky9!`QPnZb<^hU zJMQ@BJMY?g_dO5%VE2O$J^aWIAAM@ikDq?#CqI4mzzy#_nG1L@ng%;T!-wAA;oG{% zGJ6Xtt4U{)sj*?HI`oj#^^=`w#; zAQ-wV%)5z1W8KRy?^!{A+w6`xb1#|KGJgU6tz>6`<8Ot|US8fP~_7RUN? zE?l(O)w)E%qX6LmuDEjLRjb5n{^>ib*Iawu+Usxl?u|FyyzZ9u8*bhBz3*?jZF6tm MmfJ;9`1}0*A4>cHz5oCK diff --git a/software/CPM/CPM19_MTPUG_07/3740UTIL.DOC b/software/CPM/CPM19_MTPUG_07/3740UTIL.DOC deleted file mode 100644 index f77c893..0000000 --- a/software/CPM/CPM19_MTPUG_07/3740UTIL.DOC +++ /dev/null @@ -1,232 +0,0 @@ - - - **************************************************************** - * * - * N O T E * - * ------- * - * * - * The source code (.ASM file) for the software described in * - * the following documentation requires the macro assembler, * - * "MAC.COM", available from Digital Research, for assembly * - * as well as a macro library called "MACS3740.LIB". The * - * macro library (MACS3740.LIB) is included with the 3740UTIL * - * package and must be present on the same disk on which the * - * main source file "3740UTIL.ASM" is assembled. An already * - * assembled and loaded object code file (3740UTIL.OBJ) ready * - * to run is included with the 3740UTIL software package. Be * - * sure to rename it 3740UTIL.COM for CP/M. * - * * - * -Calamity Cliffs Computer Center * - * * - **************************************************************** - - - - - INTRODUCTION - - - The following manual describes the use and function of the - CP/M - IBM disk utility. It is designed to allow the user to - easily transfer data between CP/M and IBM disk formats. - - - CP/M is a registered trademark of Digital Research, Garden Grove, - CA. IBM is a registered trademark of International Business - Machines, Poughkeepsie, NY. - - - - TABLE OF CONTENTS - - - INTRODUCTION ................................................ 1 - INITIALIZE AN IBM DISKETTE .................................. 2 - CHANGE AN IBM VOLUME SERIAL NUMBER .......................... 3 - CHANGE AN IBM DATASET'S DIRECTORY ENTRY ..................... 4 - DELETE AN IBM DATASET'S DIRECTORY ENTRY ..................... 5 - LIST AN IBM DATASET'S DIRECTORY ............................. 6 - TRANSFER CP/M TO IBM DATASET (BLOCK FORMAT) ................. 7 - TRANSFER IBM TO CP/M DATASET (BLOCK FORMAT) ................. 8 - TRANSFER CP/M TO IBM DATASET (SOURCE FORMAT) ................ 9 - TRANSFER IBM TO CP/M DATASET (SOURCE FORMAT) ................ 10 - DISPLAY AN IBM DATASET ...................................... 11 - HARDWARE/SOFTWARE REQUIREMENTS .............................. 12 - MAINTENANCE POLICIES ........................................ 13 - PROGRAM ERROR REPORT ........................................ 14 - - - - INTRODUCTION - - - Introduction - - This program was developed so that developement could be - performed on a small computer utilizing CP/M for large IBM site. - The data or programs were coded using the small computer, and - then transfered to the IBM computer utilizing this program. - Also, certain data were transferred back to the small computer - for updating and again transferred back to the IBM computer. - Thus, the time involved for coding and keypunching were absorbed - on the small machine. All transfers were performed by diskette. - This manual assumes that the reader has a working knowledge - of both CP/M and IBM operating systems. In particular, the user - should fully understand the basic disk layout for IBM Standard - Interchange Format. This program assumes the SIF throughout and - was written to be compatible with only it. NO other IBM format - is utilized. For further information concerning this format, - please review manual GA21-9182, IBM General Information Manual on - Diskettes. - The program was designed to be menu driven with prompting. - Currently, each response is verified, and if incorrect, re- - prompted. If you make a mistake which is a valid reply, re-boot - CP/M and restart the program. At this time, no backup facility - is offered so be careful as to your responses. - When working with CP/M files, the file names are assumed to - be an 1-8 byte name with a type of '.DAT'. The 1-8 byte name - must correspond with a file name on the IBM diskette. - - - - INITIALIZE AN IBM DISKETTE - - - Initialize an IBM Diskette - - To initialize a diskette in IBM SIF format, use this - command. Place the diskette to be initialized in the appropriate - drive. Select this function (1). Reply with the drive (A-D). - Then reply with the new 6-byte volume serial number. The program - will then format the diskette to IBM specifications. This may - take a few minutes so don't be alarmed if it doesn't reply to - you immediately. After initialization, the diskette is ready to - use as an IBM diskette. - - - - CHANGE AN IBM VOLUME SERIAL NUMBER - - - Change an IBM Volume Serial Number - - This function allows the user to simply change an IBM - diskette's volume serial number. Use function code (2) to invoke - it. Reply with the disk drive (A-D) that the diskette is on, and - then reply with the new volume serial number, 1-6 characters. No - checking is done on the rest of the diskette. Only the volume - serial number is changed. - - - - CHANGE AN IBM DATASET'S DIRECTORY ENTRY - - - Change an IBM Dataset's Directory Entry - - This function allows you to change the directory entry for - an IBM file. You will use this entry to create a file, rename - it or adjust its parameters. To invoke this function, use code - (3). Reply with the disk drive containing the IBM diskette. - Then reply with the directory sector to be changed. You can find - the sector number by using function (6), List Directory. The - program will then display all the fields in the entry and request - that you entry a new value. Enter ONLY the fields that you want - to change. When the last field has been entered, the directory - will automatically be updated, and a completion message will be - posted to the terminal. You will then return to the main menu. - - - - DELETE AN IBM DATASET'S DIRECTORY ENTRY - - - Delete an IBM Dataset's Directory Entry - - To delete a dataset from an IBM diskette, place the diskette - in a drive, invoke function code (4), enter the disk drive (A-D) - on which the diskette resides, and enter the sector number of the - directory entry. If you are in doubt as to the sector number, - use function code (6), List Directory, to find out what it is. - When the entry has been deleted and a completion message has been - posted, control will return to the main menu. - - - - LIST AN IBM DIRECTORY - TRANSFER A CP/M FILE TO IBM FORMAT (BLOCK) - TRANSFER AN IBM FILE TO CP/M FORMAT (BLOCK) - TRANSFER A CP/M FILE TO IBM FORMAT (SOURCE) - TRANSFER AN IBM FILE TO CP/M FORMAT (SOURCE) - - - - MAINTENANCE POLICIES - - - Maintenance Policies - - In the event of a problem, contact Robert M. White at (208) - 377-0336. He is responsible for answering questions relating to - installation, operation and maintenance. If the problem is - determined to be a part of this package, please obtain a printed - dump before calling for support. ALL user modifications must be - removed before obtaining any error analysis and correction from - Robert M. White. If the problem persists after initial contact, - please complete the Program Error Report supplied as a part of - this manual and send it along with all supporting documentation - to: - Robert M. White - 8530 Stonehaven - Boise, ID 83704 - - Robert M. White will provide custom modifications to users - who request them. These modifications may require an additional - charge and may not be quaranteed to function correctly in all - future releases. All agreements must be in writing. Estimates - will be issued pertaining to the work involved in performing the - modifications. - - - - - Program Error Report - - - Date: ________ Title:___________________________________________ - - Submittor:______________________________________________________ - - Address: ______________________________________________________ - - ______________________________________________________ - - ______________________________________________________ - - Phone: ( ) ___-____ ext. ____ - - Error Description: - - - - - - - - - - - Environment: - Computer Type: ________________________________________ - - Core Size: _____k - - No. and type of disks: ________________________________ - - Console type: ________________________________________ - - CP/M release: ________________________________________ - - - - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/ALOCK.Z80 b/software/CPM/CPM19_MTPUG_07/ALOCK.Z80 deleted file mode 100644 index e0040f3..0000000 --- a/software/CPM/CPM19_MTPUG_07/ALOCK.Z80 +++ /dev/null @@ -1,50 +0,0 @@ -TITLE KOCLA -; -; 9/22/82 Sue Arnold -; -; This is an assembly program that will lock a file record so that no -; other programs may access it. This routine should only be used to -; WRITE to a record that has been previously READ by the calling routine. -; It is VERY important to call UNLOCK after the write operation so as -; to free up the record for other routines. -; -; CALLING PROCEDURE= -; -; ALOCK (VAR FIB.addr: file_descriptor); (pointer to the file FIB) -; VAR lck_err: INTEGER; (0=success) -; -; This routine uses XDOS function number 2Ah for a lock. -; - - PAGE - .Z80 -; -BDOSJP EQU 5 ; Use this to call XDOS -; -; - PAGE - PUBLIC ALOCK - CSEG -; -; -ALOCK: - POP HL ; HL = Pascal Return Address - POP DE ; DE = The addr of the error code variable - EX (SP), HL ; HL = The addr of the file descriptor - ; (top of stack now has the Pascal rtn addr) - EX DE, HL ; DE = The addr of the descriptor - ; HL = The addr of the err code variable - LD C, 2AH ; LOCK function number - PUSH DE ; Save the addr of the descriptor - PUSH HL ; Save the error code addr - LD HL, 11H ; Add 17 to the address - ADD HL,DE ; To get the addr of the FCB within - EX DE,HL ; The file descriptor block - CALL BDOSJP ; lock out the record - POP HL ; Restore error code addr - POP DE ; Restore file descriptor address - LD (HL), A ; Put error code in err code variable - RET ; Else, Return to calling routine - - END ALOCK - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/AUNLCK.Z80 b/software/CPM/CPM19_MTPUG_07/AUNLCK.Z80 deleted file mode 100644 index f742381..0000000 --- a/software/CPM/CPM19_MTPUG_07/AUNLCK.Z80 +++ /dev/null @@ -1,48 +0,0 @@ -TITLE KCLNUA -; -; 9/22/82 Sue Arnold -; -; This is an assembly program that will UNLOCK a file record so that -; other programs may access it. This routine should only be used to -; UNLOCK a record that has been previously LOCKED by the calling routine. -; It is VERY important to unlock the record as no one else can do it -; for you. -; -; CALLING PROCEDURE= -; -; AUNLCK (VAR FIB.addr: file_descriptor); (pointer to the file FIB) -; VAR lck_err: INTEGER; (0=success) -; -; This routine uses XDOS function number 2Bh for an AUNLCK. -; - - .Z80 -; -BDOSJP EQU 5 ; Use this to call XDOS -; -; - PUBLIC AUNLCK - CSEG -; -; -AUNLCK: - POP HL ; HL = Pascal Return Address - POP DE ; DE = The addr of the error code variable - EX (SP), HL ; HL = The addr of the file descriptor - ; (top of stack now has the Pascal rtn addr) - EX DE, HL ; DE = The addr of the descriptor - ; HL = The addr of the err code variable - LD C, 2BH ; UNLOCK function number - PUSH DE ; Save the addr of the descriptor - PUSH HL ; Save the error code addr - LD HL, 11H ; Add 17 to the address - ADD HL,DE ; To get the addr of the FCB within - EX DE,HL ; The file descriptor block - CALL BDOSJP ; lock out the record - POP HL ; Restore error code addr - POP DE ; Restore file descriptor address - LD (HL), A ; Put error code in err code variable - RET ; Else, Return to calling routine - - END AUNLCK - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/BCD.DOC b/software/CPM/CPM19_MTPUG_07/BCD.DOC deleted file mode 100644 index 98d5ff7..0000000 --- a/software/CPM/CPM19_MTPUG_07/BCD.DOC +++ /dev/null @@ -1,13 +0,0 @@ -***************************************************************** -* * -* BCD.ERL -- Z80 VERSION OF BCDREALS.ERL (OF 5.5) * -* * -***************************************************************** - - -Thå  filå  BCD.ERÌ caî bå linkeä insteaä oæ BCDREALS.ERÌ anä  haó -thå samå entrù pointó aó thaô one¬ ió approx® 20¥ shorteò anä 25¥ -fasteò  thaî  thå originaì library®  Iô ió highlù  Z80- specific® -Durinç linë time¬ thå modulå namå displayó aó "Z80BCD¢ insteaä oæ -"BCD" to show that it is a different version. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/BCD.ERL b/software/CPM/CPM19_MTPUG_07/BCD.ERL deleted file mode 100644 index a031a4e0452d865f36c60ca94926dbeecd4bf42a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 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 N(FO3A+5f-u{}<1mFHisg diff --git a/software/CPM/CPM19_MTPUG_07/DISKIO.DOC b/software/CPM/CPM19_MTPUG_07/DISKIO.DOC deleted file mode 100644 index 8981437..0000000 --- a/software/CPM/CPM19_MTPUG_07/DISKIO.DOC +++ /dev/null @@ -1,37 +0,0 @@ - This file is the start of a library of I/O routines. The only -one implemented to date is the procedure 'GETARG'. - - GETARG is a procedure for getting command line arguments. For -example, if it were used in a program called DUMMY, then invoking the -program by typing: - - DUMMY NAME1 NAME2 - -will result in the procedure getarg returning NAME1 and NAME2. It also -returns the number of arguments ( up to 2). - - For example, in the above case, the number returned would be 2. -If the command line were: - - DUMMY NAME - -the procedure would return a number of 1 and it would be NAME. - - Finally, typing in a command line which caontains more than -two arguments causes getarg to return a number of 2 and the second -returned string would contain all the succeeding arguments. Thus, -if the command line were: - - DUMMY NAME1 NAME2 NAME3 NAME4 - -it would return NAME1 as the first string and NAME2 NAME3 NAME4 as the -second. - - The source code could, of course, be modified to separate out -more than two arguments. - - I first saw the technique used in this procedure in an article -in S-100 Microsystems by two Gilbreath's. - - J.A. Koehler, Saskatoon, 28 October, 1982 - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/DISKIO.SRC b/software/CPM/CPM19_MTPUG_07/DISKIO.SRC deleted file mode 100644 index 070fb2e..0000000 --- a/software/CPM/CPM19_MTPUG_07/DISKIO.SRC +++ /dev/null @@ -1,52 +0,0 @@ -module diskio; -{ - A file of diskio routines. - -} - - -procedure getarg(var narg:integer;var arg1,arg2:string); -{ - This procedure gets the arguments from the command line - and returns them as strings. narg is the number detected -} - -const cpm_buf_adr = $80; - sp = ' '; - -var p: ^byte; - sep: integer; - cmd_line: - string; - -begin - arg1:=''; - arg2:=''; - p:=cpm_buf_adr; - move(p^,cmd_line,sizeof(cmd_line)); - while pos(sp,cmd_line) = 1 do delete(cmd_line,1,1); - if length(cmd_line) = 0 - then narg := 0 - else - begin - sep:=pos(sp,cmd_line); - if sep = 0 - then - begin - narg:=1; - arg1:=cmd_line; - end - else - begin - arg1:=copy(cmd_line,1,sep-1); - delete(cmd_line,1,sep); - while copy(cmd_line,1,1)=sp do - delete(cmd_line,1,1); - narg:=2; - arg2:=cmd_line; - end; - end; -end; - -modend. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/FOTOSATS.DOC b/software/CPM/CPM19_MTPUG_07/FOTOSATS.DOC deleted file mode 100644 index 413c18b..0000000 --- a/software/CPM/CPM19_MTPUG_07/FOTOSATS.DOC +++ /dev/null @@ -1,217 +0,0 @@ -.lh 10 -Versjon 8.10.82 Per Stangeland -.he - # - -TRYKKING AV WORDSTAR TEKST - -Teksô  soí  eò skreveô meä Wordstaò haò eî deì spesiellå  kjenne -tegn¬ soí gj|ò aô deî ikkå uteî viderå kaî leseó elleò skriveó aö -andrå  programmeò  foò  behandlinç aö  tekst®  Foò  eksempeì  viì -ordrenº  .pá f|rsô pý eî nù linjå gé nù side® Skriveó dettå uô aö -eô anneô tekstbehandlingsprogram¬  viì eî slië ordrå blé  st}endå -midt i teksten, og har ingen effekt. - -Detaljenå  é  hvá  soí  skilleò WS- teksô frá  andrå  teksteò  eò -gjengitô  é PP- nytô frá \stfolä Distriktsh|gskolå nò  7-82®  Heò -finó ogsý eô prograí soí oversetteò eî wordstar- teksô tiì vanliç -tekst¬  dvs®  ASCII- kodå  soí  kaî leseó undeò  operativsystemeô -CP/M. - -Problemeô  meä  dettå programmeô eò aô maî derveä ogsý misteò  då -spesiellå  redigeringsmulighetenå  soí eò lagô inî é  teksteî  aö -Wordstar®  Då fjernes¬  é stedeô foò ý oversetteó tiì kodeò  soí -kaî  leseó aö eô anneô tekstbehandlingssystem®  Dessuteî viì  deô -oftå v{rå n|dvendiç ý oversettå ogsý standarä CP/Í tegî tiì andrå -koder®  Eî fotosetteò aö merkeô LINOTRON¬  foò eksempel¬ viì ikkå -reagerå  riktiç pý standarä tegneô foò nù linjå é CP/M®  Deî  viì -helleò ikkå godtá meò eî etô mellomroí melloí hverô ord¬  menó WÓ -leggeò  inî flerå mellomroí foò ý fý tiì eî retô  h|yremarg®  Deî -f|lgeò helleò ikkå ASCII- tegnsettetº  Eô anf|rselstegî viì kommå -ut som en e med aksent over. - -Prograí FOTOSATS‚ oversetteò eî WS- teksô tiì eî teksô soí  egneò -seç  foò trykkinç aö eî fotosetter®  Etô enkelô skilletegî leggeó -inî  melloí  hverô  ord®  \vrigå blankå  tegî  oç  blankå  linjeò -fjernes®  Avsnitô  markereó  meä eô  egeô  symbol®  Overskrifter¬ -understrekningeò  oç  sitateò f}ò eî egeî mark|ò foraî oç  etter® -Deô  gió muligheô foò ý byttå uô enkeltå tegî meä eô fritô  valgô -annet tegn. - -Då  nyå tegî oç symboleò soí skaì leggeó inî é teksteî leseó  frá -eî egeî filº  FOTOSATS.PRM® Dennå mý liggå pý innloggeô diskenheô -veä kj|rinç aö programmet® - -É  dennå tabelleî eò kodenå soí eò brukô moô eî LINOTROΠ 202Î -gjengitt. -.lh 8 -.po 4 -.cp 20 Š -KONVERTERINGSKODER FRA SPESIELLE WS- TEGN TIL FOTOSETTER-TEGN - -Nr  Doô commandó é WS- fiì FOTOSATS.PRM - for LINOTRON 202N - --  .cð ø (indikereò oftå starô pý tabell© on-linå valg -1  .pá (ny side) Bell c1> -2  .lè 1° (halvanneî linjeavstand) ON: Bell c2> - OFF: Bell c5> -3  .lè ¸ smalå linjeò Bell c3> -´ .lè 1² dobbeì linjeavstanä Belì c4> -    Etter .lh 8: Bell c5> -   ASCII-kode -   Heø des. Betyr: -    --  0¸ 0¸ BÓ Backspacå bliò fjernet - -8  0² 0² feô trykë ^Ð Â ON: Bell c¸> -9   OFF: Bell c9> - -10 1³ 1¹ understrekinç p}/aö ^Ð Ó ON: Bell c10¾ -11 OFF: Bell c11> - -12 1´ 2° tegî halö linjå opð p}/aö ^Ð T ON: 0· 3ã 75 32 hex -13 OFF: Bell c13> - -14 22 34 anf|rselstegn " quote ON: 02 hex -15 OFF: 01 hex - -17 1Å 3° orddelingsforslag (Midt p} linja) @ (blir fjernet) -    -17 1Æ 3± orddelingsforslag( Pý slutten @ (blir fjernet) -    aö linjá, blir skrevet av WS) -    -18 0F 1µ non- breaë spacå (ordmellomrom ON: Bell c 15> - OFF:Bell c 15> - -19 8D SOFTLINÅ Markerinç aö linjeskifô Hvis eneste skilletegn -    inné avsnitô mellom to hele ord: 20 hex -    Ellers: blir fjernet - -20 0D 1³ CÒ - nytt avsnitt 1¶ 0³ 5E hex -    Š-  0á 1° LÆ (ny linje-f|lger etter CR) bliò fjernet -    -2± 0¹ 0¹  TAB(hopð fraí tiì bestemô kolonne©  Vanliç ordmellomrom - 20 hex - Belì      betyò 07hex -________________________________________________________________ -.lh 10 -.po 8 -En linje i fotosats.prm kan ogs} inneholde et spesielt symbol: - -Tegnet @ (40 hex) betyr "ingen tegn"- fjerning av WS-symbolet -Tegnet $ betyr standard linjeskift (0D 0A hex) - -Kodå  nò 6¬  · oç 1¶ eò lediç foò on-linå  markeringer¬  dvó  aô -brukereî  kaî  oppgé disså tallenå undeò kj|rinç aö  programmet¬ -n}ò  deô  dukkeò  opð  eî doô commanä soí  ikkå  eò  definerô  pý -forh}nd® - -Eksempelº  É  dennå  bruksanvisningeî liggeò deô eî .cð 3°  foraî -tabellen®  Deô betyò aô skrivereî skaì begynnå pý nù sidå  dersoí -deô  ikkå eò plasó tiì 3° nyå linjeò pý arket®  Kj|reò maî  dennå -teksteî  gjennoí  FOTOSATS- programmet¬  viì deô kommå  eô  BELL- -signal¬  oç utf|rinç aö programmeô viì stoppå opp®  Teksteî viseó -pý skjermen¬ oç brukereî kaî leggå inî eî |nskeô kode® ° betyò aô -ordreî skaì overses. - - -Bruk av programmet - -FOTOSATS.SRC er programkoden -FOTOSATS.COM er den kj|rbare versjonen -FOTOSATS.PRM inneholder LINOTRON 202N- parametrene. - -Ethvert CP/M system med minst en platestasjon kan brukes. - -FOTOSATS.COM, tekstfila og FOTOSATS.PRM m} ligge i systemet -S|rç  foò aô deô eò plasó pý tekstplateî tiì deî  nyå  versjonen® -Den blir lagt p} samme plate som originalen. - -Skriv FOTOSATS, og trykk RETURN - -Programmet sp|r om navn p} tekstfila. Oppgi dette, og trykk RETURN - -Teksteî  viseó pý skjermeî slië deî leseó inn®  Kontrolltegî  soí -ikkå kaî skrives¬ f® eks® linjeskift¬ erstatteó meä ? - ŠM|teò programmeô pý eî doô commanä soí ikkå eò  forh}ndsdefinert¬ -viì  deî  pipå oç bå oí eî verdé foò denne®  - -Deî nyå filá skriveó uô é sekvenseò pý 4Ë oí  gangen®  Programmeô -giò meldinç n}r dettå blir gjort® Filá f}ò navî .FOT® - -ENDRINGER I PARAMETERFILA - FOTOSATS.PRM - -Symbolenå  soí liggeò é FOTOSATS.PRÍ kaî skifteó uô etteò  |nske® -Hverô  symboì liggeò pý eî linje®  É dennå programversjoneî  skaì -deô  é  alô  v{rå  2±  slikå linjer®  Då  eò  gjengitô  é  riktiç -rekkef|lgå  é  tabelleî  ovenfor®  \nskeò  maî  eô  anneô  symboì -plasserô inî é teksteî é stedeô foò då soí eò foresl}tô her¬  kaî -maî  endrå  vedkommendå  symboì é FOTOSATS.PRÍ veä  hjelð  aö  eô -redigeringsprogram®  - -Eksempelº  Viì maî há eô vanliç linjeskifô é stedeô foò 1¶ 0³  5å -hex¬  mý  maî  endrå pý linjå 2° é parameterfila®  Legç inî eô  ¤ -symboì  (2´  hex©  é stedeô foò disså trå tegn®  Eî  vanliç  CP/Í -brukeò kaî fý dettå tiì veä hjelð aö WÓ oç DDT® Maî kunnå jï ogsý -lagå  eî interaktiö prosedyrå tiì FOTOSATS.SRà soí danneô  eî  nù -parameterfil® - -ENDRINGER I PROGRAMMET - -M}lsetningeî haò v{rô ý lagå eô generelô anvendbarô oversettings -prograí foò tekstfiler® Brukerå soí |nskeò ý skiftå frá WÓ tiì eô -anneô tekstbehandlingssystem¬  kaî derfoò ogsý há nyttå aö  prog -rammet®  É noeî tilfelleò skullå dettå kunnå gj|reó uteî ý  endrå -FOTOSATS.COM¬  barå veä ý skiftå uô noeî symboleò é FOTOSATS.PRM® -Meî  dersoí  definisjoneò elleò listeî oveò tegî soí skaì  endreó -skaì skifteó ut¬ mý deô skjå veä tilf|yelseò é FOTOSATS.SRà oç nù -kompilerinç  aö  programmet®  Programteksteî eò  strukturerô  oç -kommentert¬  slië  aô deô skullå v{rå muliç ý endrå pý deî  etteò -behoö  foò allå meä eô vissô kjennskað tiì  programmeringsspr}keô -PASCAL®  \nskeò  maî foò eksempeì ý skiftå uô allå û ü oç  ý  meä -andrå tegn¬ mý f|lgendå endringeò gj|res: - -i sekvensen CASE ord(ch) OF (* i procedure convert- linje 257 *) - -f|yer man til: - -'{': Enter(22); -'|': Enter(23); Š'}': Enter(24); - -CONSÔ no_of_codeó ½ 21» (F|rsô é programmet- linjå 4© endreó til - -CONST no_of_codes = 24; (*tre ekstra koder for {,|,}*) - -oç  filá FOTOSATS.PRÍ giò trå nyå linjer¬  soí inneholdeò då  trå -symbolene som {, |,} skal erstattes med. - -Programmeô   mý  deretteò  kompilereó  pý  nytt®   Andrå  Pascal- -kompilatorer enn MT+ vil kreve enkelte endringer i teksten. - -FOTOSATS.PRÍ  inneholdeò  då nyå symbolenå soí skaì inî  é  fila® -Hverô   symboì  avslutteó  meä  linjeskift¬   oç  nummerereó   aö -programmeô  é deî rekkef|lgå då leseó inn®  - -KAN TEKSTEN TRYKKES OPP N\YAKTIG SOM DEN BLIR? - -Eî visó sluttredigerinç é setterieô viì noë v{rå n|dvendiç meä då -flestå  tekstfiler®  Mengdeî aö slikå redigeringeò viì avhengå aö -hvordaî WS- teksteî vaò skreveô opprinnelig® Inkonsekvenô bruë aö -utheveô trykk¬ understrekningeò etc® kaî gé forvirrendå resultat® -Enkeltå  ordrå é WÓ viì blé oversetô - f.eks®  bruë aö smaì elleò -breä marg¬  oç marginnrykë veä sitater®  Tabelleò oç innholdsfor -tegnelseò viì oftå gé problemer®  Setterieô mý ogsý f|rå pý kodeò -foò skrifttype¬ sideformaô etc® - -Konsekvenô  bruë aö doô commandó oç andrå WS- ordrå viì  reduserå -behovet for slike rettinger. Forslag: - -Sett alltid .lh 10 ved start av teksten -Bruk .lh 8 for markering av sitat -Bruk .pa for markering av kapitler -Bruë  feô  skrifô  tiì  allå  overskrifter¬ og  understrekinç   tiì -uthevelser i teksten. - -Dettå  programmeô  eò gratió foò privatpersoner®  Dersoí  forlag¬ -trykkerieò elleò firmaeò |nskeò ý tá deô é kommersielì bruk¬  beó -då kontaktå Peò Stangeland¬ tlf® 04· 9761µ foò n{rmerå avtale® *) - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/FOTOSATS.PRM b/software/CPM/CPM19_MTPUG_07/FOTOSATS.PRM deleted file mode 100644 index 82d8d04af258ff088a53ac2af558c1951cca60b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZQiHnijAVox>#lg41u1WcNONi#5M4kj(Yq$QX%G=NZG-8Q90ATta>+L?H{7{MHn zP6sdxWRe0eml$&#n3h5TEkeSFGZ`=HF}&mxILpdl6fbvDF-@*OyHG1t?lqqvR7jA4 zflmk~odK3k2TBVAg-$AFf%%z0z6h9~1LkJ~`J!Nc9+;mC 20 THEN Enter(20); - (*The first RETURN is kept,following ones are removed*) - Dot; (* check for dot commands*) - END; (*IF*) - IF (count <1) OR (count>max) then writeln(count); - END; (*while not EOF and count < max *) - -(****************** WRITE PHASE ***************************) - Writeln; - WRITELN(' Fil ',navn,' skrives - vennligst vent'); - FOR idx := 1 TO count - 1 DO - BEGIN - d^ := buff[idx]; - put(d); - END; (*FOR*) - Count:=1; (*start a new buffer*) - END; (*while not eof*) - END; (*procedure convert*) - - (********************************************************** - MAIN PROGRAM **) - - BEGIN - REPEAT - write('Navn p} Wordstar- fil: '); - readln(navn); - open(inn,navn,ior); - IF ior = 255 THEN - writeln('finner ikke ',navn); - UNTIL ior < 255; - I:=Pos('.',navn); - IF I>0 THEN delete(navn,I,length(navn)-I+1); - navn:=concat(navn,'.FOT'); - open(ut,navn,ior); - IF ior <> 255 THEN - BEGIN - write('fila ',navn,' fins fra f|r. Skal den slettes? (J/N)'); - read(tegn); - readln; - IF not (tegn in ['J','j']) THEN - @hlt; - END; - rewrite(ut); - assign(skjerm,'CON:'); - rewrite(skjerm); - open(par,'FOTOSATS.PRM',I); - IF i = 255 THEN - BEGIN - writeln('Finner ikke "FOTOSATS.PRM" '); - @hlt; - END; - FOR i := 1 TO no_of_codes DO - BEGIN - IF eof(par) then writeln('for f} symboler i fila "FOTOSATS.PRM') - ELSE readln(par,symbol[i]); - END; - writeln('Filene er }pnet - lesing begynner '); - IF not eof(inn) THEN - convert(inn,ut); - close(ut,ior); - IF ior < 255 THEN - writeln('fil ',navn,' er skrevet.'); - END. (*FOTOSATS*) - - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/GRAPH.DOC b/software/CPM/CPM19_MTPUG_07/GRAPH.DOC deleted file mode 100644 index d5abc42..0000000 --- a/software/CPM/CPM19_MTPUG_07/GRAPH.DOC +++ /dev/null @@ -1,140 +0,0 @@ - This set of program packages was the result of a concerted effort -to produce a PORTABLE set of graphic procedures which could be easily -transported from one machine to another. It was produced by myself and -a colleague .. Jack Gilmer. - - The problem originated because we had access to a number of -computers ranging from a large mainframe where we work ( at a university) -through several minis to the micros we have at home. There are many -different graphical packages available to us but it was all too -confusing to keep straight - life is just too short to become adept in -such a variety of programs. Secondly, most graphical packages are very -generalized and really are not well adapted to the type of work we do. -As physical scientists, we mostly wanted procedures which were well -suited to plotting line graphs - we essentially NEVER use bar plots, -pie plots etc. - - So, we designed a number of procedures which would fulfill our -requirements. The philosophy was to write the desired user oriented -procedures in terms of simpler procedures which ultimately call a very few -very primitive procedures which can be modified easily for any particular -combination of computer and plotter. - - The first set of these was written by me using Apple UCSD Pascal -with its 'Turtlegraphics' procedures for CRT graphics and a Houston -Instruments 'HIPLOT' plotter. Later, Jack adapted the packages to an LSI-11 -using Whitesmith's Pascal. This was done for two plotting systems; one of -these was an ADM3+ CRT plus a Digital Engineering 'Graphx' hard copy unit. -The other was for a HP 7225A pen plotter. - - The packages on this diskette are the latter two which have been -copied from the DEC diskettes using a program on the MTPUG program disk #1. -That program has, incidentally, been a godsend. - - If you want to use these procedures, you will have to adapt the -package to your machine/plotter combination by rewriting the serial I/O -outines and the primitive procedures called; - - PENUP - PENDOWN - DRAWTO - -I have modified the ADM3 package slightly so that it will at least compile -under Pascal MT+. The other one, called GRHP.SRC is just as it was on the -LSI-11. You will have to modify it a bit more extensively since Whitesmith's -Pascal does not have the UCSD string data type we have in MT+ but uses ZERO -terminated strings instead. - - Incidentally, since these procedures were all originally written -using UCSD Pascal, the more primitive procedures could all be hidden from -the user and so I used procedure names which were fairly descriptive. In -Pascal MT+, you may want to change the names to something more unusual for -these procedures in order not to give other procedures in your program the -same name. - - The plotted data is specified by a number of pre-defined data types -which are listed below. All plots were to be in absolute coordinates with -values given in MILLIMETERS. - - The data types are: - - astringtype = STRING[132]; - - aendtype = (noend, point, square, triangle, cross, ecks, diamond, - circle); - - alinetype = (noline, solid, dotted, dashed, dotdashed, - dotdotdashed); - - apointtype = RECORD (* absolute position in millimeters *) - x, - y: REAL; - END; - - You can see that we were primarily concerned with scientific type -plots since we wanted to be able to specify the type of line plotted and the -type of end to that line. For example, to plot a number of data points as -triangles, you use a particular procedure to set the type of line to 'noline' -and the type of endpoint to 'triangle'. Then you just call the plotting -procedure with the x,y positions of the points. - - The procedures and functions which you will use in your program are: - - AINIT - this initializes the plotter ( if it needs it ) to the - lower left corner. - - AWINDOW - this sets the plotting window. Lines which are called to - be plotted and which extend outside this window are cut off - at the boundaries by the software. - - ADEFAULT - sets the default parameters such as the pattern size for - patterned lines (dotted, dashed etc), the endpoint sizes etc. - - ABADCALL - a function to determine whether or not the called for point - is so far outside the plotting window that serious arithmetic - round off errors will cause plotting errors. This function - has not been implemented in any of the packages we've written. - This probably means that it is not necessary. - - AMAKECOPY - sets the hard copy unit into motion if it is different - from the CRT display. - - ASETWINDOW - sets up the window limits. - - ASETPLOT - sets up the plotting parameters. These are the type of - line, the type of endpoint etc. - - APLOT - plots a line to the point specified. The characteristics of - the line and its end are what has last been set with - ASETPLOT. - - ASETSTR - sets up the characteristics of the text plotting. These - are the character size, character orientation, character - spacing, string orientation and character width. For many - plotters like the ADM3+ plus Graphx combination, this - procedure does nothing since the text characteristics are - fixed. - - ASTR - writes a string starting in the current pen location. - - ATEXT - switches back from graphical to text mode ( needed for - all types of CRT monitors). - - AGRAPH - switches to graph mode - - AWHERE - returns the current pen position. - - - Good luck... I would be interested in hearing from anyone who uses -these packages for another computer/plotter combination. I would be glad to -help out anyone who is having difficulty in transporting these procedures -to another system - just please don't expect me to rewrite the whole thing. -Jack and I would also be interested in hearing from anyone who has construct- -ive comments about the utility of the procedures and suggestions for -improvements. - - J.A. Koehler - 2 Sullivan St. - Saskatoon, SK, S7H-3G8 28 October, 1982 - - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/GRAPHADM.SRC b/software/CPM/CPM19_MTPUG_07/GRAPHADM.SRC deleted file mode 100644 index d14634e..0000000 --- a/software/CPM/CPM19_MTPUG_07/GRAPHADM.SRC +++ /dev/null @@ -1,795 +0,0 @@ -MODULE GRAPH ; - (*------------------------------------------------------------------*) - (* *) - (* Written Mar 22,'82 by Jack Gilmer *) - (* *) - (* Modified Oct 23,'82 by J.A. Koehler from Whitesmiths PASCAL *) - (* as used on LSI-11 to PASCAL MT+ *) - (* *) - (* This file of absolute graphic routines implements the standard *) - (* graphics package for the Lear Seigler ADM 3A+ equipped with the *) - (* Graphx hard copy. All positions are in mm. on a 170 by 130 mm. *) - (* page. All angles are in degrees up from the x-axis. *) - (* *) - (* NOTE - The ADM 3A+ emulates a Tektronix terminal and uses a *) - (* virtual screen size of 1024 by 780, and translates this to pixel *) - (* co-ordinates of 512 by 250 internally. *) - (*------------------------------------------------------------------*) - - CONST - xfactor = 6.0532; (* # of steps/mm on the Tektronix 1024 by *) - yfactor = 6.0387; (* 780 - ADM 3A+ translates to 512 by 250.*) - - nulcode = 0; (* ASCII NUL *) - eotcode = 4; (* ASCII EOT *) - enqcode = 5; (* ASCII ENQ *) - etbcode = 23; (* ASCII ETB *) - cancode = 24; (* ASCII CAN *) - emcode = 25; (* ASCII EM *) - esccode = 27; (* ASCII ESC *) - fscode = 28; (* ASCII FS *) - gscode = 29; (* ASCII GS *) - uscode = 31; (* ASCII US *) - - maxsent = 20; (* # of co-ord pairs sent before handshake *) - - minx = 0; (* screen co-ords in mm. *) - maxx = 169; - miny = 0; - maxy = 129; - - absmaxx = 10000.0; (* absolute calculation limits *) - absmaxy = 10000.0; - - radian = 57.2958; (* degrees/radian *) - - - TYPE - astringtype = STRING[132]; - - aendtype = (noend, point, square, triangle, cross, ecks, diamond, - circle); - - alinetype = (noline, solid, dotted, dashed, dotdashed, - dotdotdashed); - - apointtype = RECORD (* absolute position in millimeters *) - x, - y: REAL; - END; - - byte = 0..255; - - (* units for 'serio' routines *) - unittype = (conunit, prunit, admunit, hpunit); - - - VAR - oldend: aendtype; (* last end symbol defined *) - - oldline: alinetype; (* last set line type *) - - oldpt, (* last point plotted *) - oldleft, (* existing window corners in mm.*) - oldright: apointtype; - - penlifted: BOOLEAN; (* last pen position *) - - numsent: INTEGER; (* co-ord counter for handshake *) - - oldesize, (* last set end symbol radius *) - oldrptlength: REAL; (* last set line pattern length *) - - - - EXTERNAL FUNCTION serin(unit: unittype): CHAR; - - EXTERNAL PROCEDURE serout(unit: unittype; ch: CHAR); - - - FUNCTION getadm: byte; - (*------------------------------------------------------------------*) - (* Gets a byte from the ADM 3A+ terminal port using 'serin'. *) - (*------------------------------------------------------------------*) - - BEGIN (* getadm *) - getadm := ORD(serin(admunit)) MOD 128; - END; (* getadm *) - - - - PROCEDURE putadm(outbyte: byte); - (*------------------------------------------------------------------*) - (* Puts out 'outbyte' to the ADM 3A+ terminal port using 'serout'. *) - (*------------------------------------------------------------------*) - - BEGIN (* putadm *) - serout(admunit, CHR(outbyte)); - END; (* putadm *) - - - - PROCEDURE handshake; - (*------------------------------------------------------------------*) - (* Handshakes with the ADM 3A+. *) - (*------------------------------------------------------------------*) - - BEGIN (* handshake *) - putadm(esccode); (* ask for response *) - putadm(enqcode); - WHILE getadm <> eotcode DO; (* sent when ready *) - END; (* handshake *) - - - - PROCEDURE penup; - (*------------------------------------------------------------------*) - (* Simply sets the 'penlifted' indicator as 'drawto' takes care of *) - (* the ADM 3A+ 'pen'. *) - (*------------------------------------------------------------------*) - - BEGIN (* penup *) - penlifted := TRUE; - END; (* penup *) - - - - PROCEDURE pendown; - (*------------------------------------------------------------------*) - (* Simply sets the 'penlifted' indicator as 'drawto' takes care of *) - (* the ADM 3A+ 'pen'. *) - (*------------------------------------------------------------------*) - - BEGIN (* pendown *) - penlifted := FALSE; - END; (* pendown *) - - - - FUNCTION isinwindow(pt: apointtype): BOOLEAN; - (*------------------------------------------------------------------*) - (* Returns TRUE if the 'pt' is within the window defined by *) - (* 'oldleft' and 'oldright'. *) - (*------------------------------------------------------------------*) - - BEGIN (* isinwindow *) - isinwindow := (pt.x <= oldright.x) AND (pt.y <= oldright.y) AND - (pt.x >= oldleft.x) AND (pt.y >= oldleft.y); - END; (* isinwindow *) - - - - PROCEDURE plot(dest: apointtype; - how: alinetype; - endsym: aendtype); - (*------------------------------------------------------------------*) - (* Plots a line from the present position to 'dest' using the *) - (* pattern in 'how' and the end symbol in 'endsym'. The line is *) - (* constrained to stay within the current window. *) - (*------------------------------------------------------------------*) - - VAR - previous, (* pattern endpoints *) - temp: apointtype; - - i, (* pattern loop counter *) - number: INTEGER; (* # of patterns in line *) - - dx, (* pattern repeat spacing *) - dy, - len: REAL; (* line length *) - - - - PROCEDURE drawto(dest: apointtype); - (*----------------------------------------------------------------*) - (* Moves the pen to 'dest' with the pen specified by 'penlifted'.*) - (*----------------------------------------------------------------*) - - VAR - temp: apointtype; (* window crossing points *) - - - PROCEDURE plotpoint(at: apointtype); - (*--------------------------------------------------------------*) - (* Moves the pen to 'at'. *) - (*--------------------------------------------------------------*) - - VAR - xint, (* integer plotting values, *) - yint: INTEGER; (* between 0 and 779 or 1023 *) - - - BEGIN (* plotpoint *) - xint := round(at.x * xfactor); - yint := round(at.y * yfactor); - - putadm(((yint DIV 32) MOD 32) + 32); (* ms 1/2 of y *) - putadm((yint MOD 32) + 96); (* ls 1/2 of y *) - putadm(((xint DIV 32) MOD 32) + 32); (* ms 1/2 of x *) - putadm((xint MOD 32) + 64); (* ls 1/2 of x *) - - numsent := numsent + 1; (* need to handshake? *) - IF numsent > maxsent - THEN - BEGIN - numsent := 0; - handshake; - putadm(gscode); (* re-draw to the point *) - putadm(((yint DIV 32) MOD 32) + 32); (* ms 1/2 of y *) - putadm((yint MOD 32) + 96); (* ls 1/2 of y *) - putadm(((xint DIV 32) MOD 32) + 32); (* ms 1/2 of x *) - putadm((xint MOD 32) + 64); (* ls 1/2 of x *) - END; (* IF numsent ... *) - END; (* plotpoint *) - - - PROCEDURE interpolate(inside, - outside: apointtype; - VAR crossing: apointtype); - (*--------------------------------------------------------------*) - (* Finds the window crossing point on the line between 'inside'*) - (* and 'outside'. The result is returned in 'crossing'. *) - (*--------------------------------------------------------------*) - - - - FUNCTION vertcross(left, - right: apointtype; - midx: REAL): REAL; - (*------------------------------------------------------------*) - (* Finds the vertical crossing point at 'midx' on the *) - (* line between 'left' and 'right'. *) - (*------------------------------------------------------------*) - - BEGIN (* vertcross *) - vertcross := left.y + (right.y - left.y) * - (midx - left.x) / (right.x - left.x); - END; (* vertcross *) - - - - FUNCTION horcross(bottom, - top: apointtype; - midy: REAL): REAL; - (*------------------------------------------------------------*) - (* Finds the horizontal crossing point at 'midy' on the *) - (* line between 'bottom' and 'top'. *) - (*------------------------------------------------------------*) - - BEGIN (* horcross *) - horcross := bottom.x + (top.x - bottom.x) * - (midy - bottom.y) / (top.y - bottom.y); - END; (* horcross *) - - - - BEGIN (* interpolate *) - crossing.x := -1; (* indicate crossing not found *) - crossing.y := -1; - - IF outside.x < oldleft.x (* is it to the left? *) - THEN - BEGIN - crossing.x := oldleft.x; - crossing.y := vertcross(outside, inside, - oldleft.x); - END (* IF outside ... *) - ELSE IF outside.x > oldright.x (* or to the right? *) - THEN - BEGIN - crossing.x := oldright.x; - crossing.y := vertcross(inside, outside, - oldright.x); - END; (* ELSE IF outside.x ... *) - - IF NOT isinwindow(crossing) (* did we not find it yet? *) - THEN - IF outside.y < oldleft.y (* is it below? *) - THEN - BEGIN - crossing.y := oldleft.y; - crossing.x := horcross(outside, inside, - oldleft.y); - END (* IF outside ... *) - ELSE IF outside.y > oldright.y (* or above? *) - THEN - BEGIN - crossing.y := oldright.y; - crossing.x := horcross(inside, outside, - oldright.y); - END; (* ELSE IF outside.y ... *) - END; (* interpolate *) - - - - BEGIN (* drawto *) - - IF penlifted - THEN - putadm(gscode); - - IF isinwindow(oldpt) - THEN - IF isinwindow(dest) - THEN - plotpoint(dest) - ELSE - BEGIN - interpolate(oldpt, dest, temp); - plotpoint(temp); - END (* ELSE *) - ELSE IF isinwindow(dest) - THEN - BEGIN - interpolate(dest, oldpt, temp); - putadm(gscode); - plotpoint(temp); - IF penlifted - THEN - putadm(gscode); - plotpoint(dest); - END; (* ELSE IF ... *) - oldpt := dest; - END; (* drawto *) - - - - PROCEDURE draw(what: aendtype); - (*----------------------------------------------------------------*) - (* Draws the endpoint symbol 'what' with size 'oldesize' *) - (* centered at the present position. *) - (*----------------------------------------------------------------*) - - VAR - origin, (* holds line endpoint *) - temp: apointtype; - - oldpenup: BOOLEAN; (* holds old penlifted *) - - - - PROCEDURE closed(initangle: REAL; - npoints: INTEGER); - (*--------------------------------------------------------------*) - (* Plots a polygon of size 'oldesize' with 'npoints' *) - (* corners starting at 'initangle' degrees clockwise from *) - (* vertical centered at 'origin'. *) - (*--------------------------------------------------------------*) - - VAR - i: INTEGER; (* corner counter *) - - angle: REAL; (* angle counter *) - - - BEGIN (* closed *) - FOR i := 0 to npoints DO - BEGIN - IF i = 0 - THEN - penup - ELSE IF penlifted - THEN - pendown; - angle := (initangle + i * (360.0 / npoints)) / radian; - temp.x := origin.x + oldesize * sin(angle); - temp.y := origin.y + oldesize * cos(angle); - drawto(temp); - END; (* FOR i ... *) - END; (* closed *) - - - - PROCEDURE open(initangle: REAL); - (*--------------------------------------------------------------*) - (* Plots a cross of size 'oldesize' with one axis at *) - (* 'initangle' clockwise from vertical centered at 'origin'. *) - (*--------------------------------------------------------------*) - - VAR - i, (* loop counters *) - j: INTEGER; - - angle, (* angle of a line segment *) - stangle: REAL; (* start angle of a line segment *) - - - BEGIN (* open *) - FOR j := 0 TO 1 DO - BEGIN - stangle := initangle + j * 90.0; - FOR i := 0 TO 1 DO - BEGIN - IF i = 0 - THEN - penup - ELSE - pendown; - angle := (stangle + i * 180.0) / radian; - temp.x := origin.x + oldesize * sin(angle); - temp.y := origin.y + oldesize * cos(angle); - drawto(temp); - END; (* FOR i ... *) - END; (* FOR j ... *) - END; (* open *) - - - - BEGIN (* draw *) - IF what <> noend - THEN - BEGIN - origin := oldpt; (* save endpoint *) - oldpenup := penlifted; (* and pen status *) - IF what IN [square, triangle, diamond, circle, cross, ecks] - THEN - CASE what OF - square: closed(45.0, 4); - triangle: closed(0.0, 3); - diamond: closed(0.0, 4); - circle: closed(0.0, 10); - cross: open(0.0); - ecks: open(45.0); - END (* CASE what *) - ELSE IF what = point - THEN - BEGIN - pendown; - putadm(fscode); (* go to point mode *) - drawto(origin); (* re-draw point *) - END; (* ELSE IF what ... *) - - IF NOT penlifted (* return to last endpoint *) - THEN - penup; - drawto(origin); (* also resets vector mode *) - IF NOT oldpenup - THEN - pendown; - END; (* IF what... *) - END; (* draw *) - - - - PROCEDURE pltpat(source, - dest: apointtype); - (*----------------------------------------------------------------*) - (* Plots the a line segment of the pattern 'how' from 'source' *) - (* to 'dest'. *) - (*----------------------------------------------------------------*) - - VAR - p1, (* pattern fraction endpoints *) - p2, - p3: apointtype; - - dx, (* pattern fraction increment *) - dy: REAL; - - - BEGIN (* pltpat *) - CASE how OF - dotted: BEGIN - IF NOT penlifted - THEN - penup; - drawto(dest); - draw(point); - END; (* dotted: *) - dashed: BEGIN - p1.x := (source.x + dest.x) / 2.0; - p1.y := (source.y + dest.y) / 2.0; - IF NOT penlifted - THEN - penup; - drawto(p1); - pendown; - drawto(dest); - END; (* dashed: *) - dotdashed: BEGIN - dx := (dest.x - source.x) / 3.0; - dy := (dest.y - source.y) / 3.0; - p1.x := source.x + dx; - p2.x := p1.x + dx; - p1.y := source.y + dy; - p2.y := p1.y + dy; - IF NOT penlifted - THEN - penup; - drawto(p1); - draw(point); - drawto(p2); - pendown; - drawto(dest); - END; (* dotdashed: *) - dotdotdashed: BEGIN - dx := (dest.x - source.x) / 4.0; - dy := (dest.y - source.y) / 4.0; - p1.x := source.x + dx; - p2.x := p1.x + dx; - p3.x := p2.x + dx; - p1.y := source.y + dy; - p2.y := p1.y + dy; - p3.y := p2.y + dy; - IF NOT penlifted - THEN - penup; - drawto(p1); - draw(point); - drawto(p2); - draw(point); - drawto(p3); - pendown; - drawto(dest); - END; (* dotdotdashed: *) - END; (* CASE how *) - END; (* pltpat *) - - - - BEGIN (* plot *) - IF dest.x > absmaxx - THEN - dest.x := absmaxx - ELSE IF dest.x < (0 - absmaxx) - THEN - dest.x := (0 - absmaxx); - IF dest.y > absmaxy - THEN - dest.y := absmaxy - ELSE IF dest.y < (0 - absmaxy) - THEN - dest.y := (0 - absmaxy); - - IF how IN [noline, solid] (* segmenting not needed *) - THEN - BEGIN - IF how = noline - THEN - penup - ELSE - pendown; - drawto(dest); - END (* IF how ... *) - ELSE - BEGIN - len := sqr(oldpt.x - dest.x) + sqr(oldpt.y - dest.y); - IF len > 0.25 (* make sure won't bomb on *) - THEN (* underflow *) - len := sqrt(len) - ELSE - len := 0; - number := 1 + trunc(len / oldrptlength); - dx := (dest.x - oldpt.x) / number; - dy := (dest.y - oldpt.y) / number; - previous := oldpt; - FOR i := 1 TO number DO - BEGIN - temp.x := previous.x + dx; - temp.y := previous.y + dy; - pltpat(previous, temp); - previous := temp; - END; (* FOR i ... *) - END; (* ELSE *) - - draw(endsym); - END; (* plot *) - - - - FUNCTION abadcall: BOOLEAN; - (*------------------------------------------------------------------*) - (* Returns TRUE if something is wrong with a procedure call. Not *) - (* implemented. *) - (*------------------------------------------------------------------*) - - BEGIN (* abadcall *) - abadcall := FALSE; - END; (* abadcall *) - - - - PROCEDURE adefault; - (*------------------------------------------------------------------*) - (* Sets all globals to their default values. *) - (*------------------------------------------------------------------*) - - BEGIN (* adefault *) - oldend := noend; (* simple line *) - oldesize := 3.0; - oldrptlength := 5.0; - oldline := noline; - oldleft.x := minx; (* window size to full screen *) - oldleft.y := miny; - oldright.x := maxx; - oldright.y := maxy; - END; (* adefault *) - - - - PROCEDURE agraph; - (*------------------------------------------------------------------*) - (* Sets the ADM 3A+ into the vector graphics mode and clears the *) - (* screen. *) - (*------------------------------------------------------------------*) - - BEGIN (* agraph *) - putadm(gscode); (* enter vector mode *) - putadm(emcode); (* clear the screen *) - handshake; - END; (* agraph *) - - - - PROCEDURE ainit; - (*------------------------------------------------------------------*) - (* Initializes the I/O to the ADM 3A+ terminal, the character set, *) - (* sets all paramters to their default values, and places the pen *) - (* in the lower left-hand corner. *) - (*------------------------------------------------------------------*) - - BEGIN (* ainit *) - adefault; - agraph; - oldpt.x := 0; - oldpt.y := 0; - numsent := 0; - plot(oldpt, noline, noend); - END; (* ainit *) - - - - PROCEDURE amakecopy; - (*------------------------------------------------------------------*) - (* Initiates a copy cycle from the ADM 3A+ to the Graphx printer *) - (* and waits for it to finish. *) - (*------------------------------------------------------------------*) - - BEGIN (* amakecopy *) - putadm(esccode); (* send copy command *) - putadm(etbcode); - handshake; - END; (* amakecopy *) - - - - PROCEDURE aplot(endpoint: apointtype); - (*------------------------------------------------------------------*) - (* Plots to 'endpoint' using line type 'oldline' and end type *) - (* 'oldend'. *) - (*------------------------------------------------------------------*) - - BEGIN (* aplot *) - plot(endpoint, oldline, oldend); - END; (* aplot *) - - - - PROCEDURE asetplot(line: alinetype; - repeatlength, - endsize: REAL; - endsymbol: aendtype); - (*------------------------------------------------------------------*) - (* Sets the characteristics of the line(s) to be plotted next. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetplot *) - oldline := line; - oldrptlength := repeatlength; - oldesize := endsize; - oldend := endsymbol; - END; (* asetplot *) - - - - PROCEDURE asetstr(charheight, - charwidth, - charangle, - charspace, - strangle: REAL); - (*------------------------------------------------------------------*) - (* Sets the characteristics of the next string(s) to be plotted. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetstr *) (* do nothing in this implementation *) - END; (* asetstr *) - - - - PROCEDURE asetwindow(lowerleft, - upperright: apointtype); - (*------------------------------------------------------------------*) - (* Sets the window size. Nothing will appear outside this window. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetwindow *) - oldleft := lowerleft; - oldright := upperright; - IF lowerleft.x < minx - THEN - oldleft.x := minx; - IF lowerleft.y < miny - THEN - oldleft.y := miny; - IF upperright.x > maxx - THEN - upperright.x := maxx; - IF upperright.y > maxy - THEN - upperright.y := maxy; - END; (* asetwindow *) - - - - PROCEDURE asize(VAR size: apointtype); - (*------------------------------------------------------------------*) - (* Returns the size of the display in mm. *) - (*------------------------------------------------------------------*) - - BEGIN (* asize *) - size.x := maxx - minx; - size.y := maxy - miny; - END; (* asize *) - - - - PROCEDURE astr(str: astringtype); - (*------------------------------------------------------------------*) - (* Writes the null-terminated string 'str' on the screen starting *) - (* at the current location (taken as the lower left corner of the *) - (* first character) and proceeding at 'oldstrangle'. The *) - (* character angle, height, width and spacing is 'oldchangle', *) - (* 'oldchheight', 'oldchwidth' and 'oldchspace'. *) - (* *) - (* In this implementation, the 4010 mode of text writing is *) - (* used, so only one size of upper case characters at a horizontal *) - (* direction is possible; all the above variables are ignored. *) - (*------------------------------------------------------------------*) - - VAR - index: INTEGER; - - - BEGIN (* astr *) - handshake; - putadm(uscode); (* enter 4010 alpha mode *) - - index := 1; (* put out characters *) - WHILE ord(str[index]) <> nulcode DO - BEGIN - putadm(ord(str[index])); - index := index + 1; - END; (* WHILE str... *) - - putadm(gscode); (* re-enter vector mode *) - handshake; - END; (* astr *) - - - - PROCEDURE atext; - (*------------------------------------------------------------------*) - (* Sets the display to the text mode. *) - (*------------------------------------------------------------------*) - - BEGIN (* atext *) - putadm(uscode); (* enter 4010 alpha mode *) - putadm(cancode); (* and then to ADM 3A alpha mode *) - END; (* atext *) - - - - PROCEDURE awhere(VAR where: apointtype; - VAR inwindow: BOOLEAN); - (*------------------------------------------------------------------*) - (* Returns the current locatation and whether it's inside the *) - (* window. *) - (*------------------------------------------------------------------*) - - BEGIN (* awhere *) - where := oldpt; - inwindow := isinwindow(oldpt); - END; (* awhere *) -modend. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/GRHP.SRC b/software/CPM/CPM19_MTPUG_07/GRHP.SRC deleted file mode 100644 index 059144d..0000000 --- a/software/CPM/CPM19_MTPUG_07/GRHP.SRC +++ /dev/null @@ -1,802 +0,0 @@ -module (output); - (*------------------------------------------------------------------*) - (* *) - (* Written Apr 26,'82 by Jack Gilmer *) - (* *) - (* This file of absolute graphic routines implements the standard *) - (* graphics package for the HP 7225A plotter. All positions are in *) - (* mm. on a 250 by 180 mm. page. All angles are in degrees up from *) - (* the x-axis. *) - (* *) - (*------------------------------------------------------------------*) - - - xfactor = 40.0; (* # of steps/mm on the HP 7225A *) - yfactor = 40.0; - - nulcode = 0; (* ASCII NUL *) - etxcode = 3; (* ASCII ETX *) - enqcode = 5; (* ASCII ENQ *) - ackcode = 6; (* ASCII ACK *) - esccode = 27; (* ASCII ESC *) - - maxsent = 136; (* # of words sent before handshake *) - - minx = 0; (* screen co-ords in mm. *) - maxx = 250; - miny = 0; - maxy = 180; - - percent = 0.32461; (* conversion factor from mm. to % of *) - (* diagonal of screen co-ordinates *) - - radian = 57.2958; (* degrees/radian *) - - maxhpstr = 10; (* short strings for commands, etc. *) - - absp1x = 328; (* position of lower left corner *) - absp1y = 279; (* in abs HP plotter units for window *) - - - TYPE - astringtype = PACKED ARRAY [1..132] OF CHAR; (* null-terminated *) - - aendtype = (noend, point, square, triangle, cross, ecks, diamond, - circle); - - alinetype = (noline, solid, dotted, dashed, dotdashed, - dotdotdashed); - - apointtype = RECORD (* absolute position in millimeters *) - x, - y: REAL; - END; - - cmdstrtype = PACKED ARRAY [1..2] OF CHAR; - hpstrtype = PACKED ARRAY [1..maxhpstr] OF CHAR; - - unittype = (conunit, prunit, admunit, hpunit); - - - VAR - oldend: aendtype; (* last end symbol defined *) - - oldline: alinetype; (* last set line type *) - - oldpt, (* last point plotted *) - oldleft, (* existing window corners in mm.*) - oldright: apointtype; - - oldpenlifted, (* last sent pen up/down instruction *) - penlifted: BOOLEAN; (* last pen position *) - - numsent: INTEGER; (* co-ord counter for handshake *) - - oldesize, (* last set end symbol radius *) - oldrptlength: REAL; (* last set line pattern length *) - - - - FUNCTION serin(unit: unittype): CHAR; EXTERNAL; - - PROCEDURE serout(unit: unittype; ch: CHAR); EXTERNAL; - - PROCEDURE exit(success: BOOLEAN); EXTERNAL; - - - FUNCTION gethp: CHAR; - (*------------------------------------------------------------------*) - (* Gets a character from the HP port using 'serin'. *) - (*------------------------------------------------------------------*) - - BEGIN (* gethp *) - gethp := serin(hpunit); - END; (* gethp *) - - - - PROCEDURE puthp(outchar: CHAR); - (*------------------------------------------------------------------*) - (* Puts out 'outchar' the port to the HP plotter. If the *) - (* system call fails, the program aborts with an error message. *) - (*------------------------------------------------------------------*) - - BEGIN (* puthp *) - serout(hpunit, outchar); - END; (* puthp *) - - - - PROCEDURE handshake(roomfor: INTEGER); - (*------------------------------------------------------------------*) - (* Makes sure there is room for 'roomfor' bytes in the HP 7225A *) - (* buffer. Performs the handshake sequence only when necessary. *) - (*------------------------------------------------------------------*) - - BEGIN (* handshake *) - numsent := numsent + roomfor; - IF numsent > maxsent - THEN - BEGIN - numsent := 0; - puthp(chr(enqcode)); - WHILE gethp <> chr(ackcode) DO; - END; (* IF numsent ... *) - END; (* handshake *) - - - - PROCEDURE puthpstr(str: hpstrtype); - (*------------------------------------------------------------------*) - (* Puts out 'str' using 'puthp' up to but not including the first *) - (* blank. *) - (*------------------------------------------------------------------*) - - VAR - index: 0..maxhpstr; - - BEGIN (* puthpstr *) - handshake(maxhpstr); - index := 0; - REPEAT - index := index + 1; - IF str[index] <> ' ' - THEN - puthp(str[index]); - UNTIL (index = maxhpstr) OR (str[index] = ' '); - END; (* puthpstr *) - - - - PROCEDURE putinum(i: INTEGER); - (*------------------------------------------------------------------*) - (* Sends the integer 'i' to the HP plotter in the form: iiiii or *) - (* -iiiii. Leading zeroes are suppressed. *) - (*------------------------------------------------------------------*) - - VAR - digit, (* single digit *) - factor: INTEGER; (* digit selector *) - - - BEGIN (* putinum *) - IF i < 0 (* send '-' if nec. *) - THEN - BEGIN - puthp('-'); - i := 0 - i; - END; (* IF i < 0 *) - factor := 10000; (* find 1st digit *) - WHILE ((i DIV factor) = 0) AND (factor > 1) DO - factor := factor DIV 10; - WHILE factor > 0 DO (* send digits *) - BEGIN - digit := i DIV factor; - puthp(chr(ord('0') + digit)); - i := i - (digit * factor); - factor := factor DIV 10; - END; (* WHILE factor ... *) - END; (* putinum *) - - - - PROCEDURE putdnum(d: REAL); - (*------------------------------------------------------------------*) - (* Sends the real number 'd' to the HP plotter in the form: *) - (* ddd.ddd or -ddd.ddd. Leading zeroes are suppressed. *) - (*------------------------------------------------------------------*) - - VAR - digit, (* individual digit *) - factor, (* counts order of digit sent *) - i: INTEGER; (* temporary value of d *) - - - BEGIN (* putdnum *) - i := trunc(d); (* put the integral part, *) - putinum(i); - - puthp('.'); (* the decimal point, *) - - i := trunc(1000.0 * abs((d - i))); (* then the fraction *) - factor := 100; - WHILE factor > 0 DO - BEGIN - digit := i DIV factor; (* get digit to send *) - puthp(chr(ord('0') + digit)); (* and send it *) - i := i - (digit * factor); - factor := factor DIV 10; - END; (* WHILE factor *) - END; (* putdnum *) - - - - PROCEDURE putddcmd(cmd: cmdstrtype; - d1, - d2: REAL); - (*------------------------------------------------------------------*) - (* Sends a command and two decimal parameters to the HP plotter. *) - (*------------------------------------------------------------------*) - - BEGIN (* putddcmd *) - handshake(20); - - puthp(cmd[1]); (* send command *) - puthp(cmd[2]); - - putdnum(d1); (* now the parameters *) - puthp(','); - putdnum(d2); - puthp(';'); - END; (* putddcmd *) - - - - PROCEDURE putidcmd(cmd: cmdstrtype; - i: INTEGER; - d: REAL); - (*------------------------------------------------------------------*) - (* Sends a command and an integer and a decimal parameter to the *) - (* HP plotter. *) - (*------------------------------------------------------------------*) - - BEGIN (* putidcmd *) - handshake(18); - - puthp(cmd[1]); (* send command *) - puthp(cmd[2]); - - putinum(i); (* now the parameters *) - puthp(','); - putdnum(d); - puthp(';'); - END; (* putidcmd *) - - - - PROCEDURE putiicmd(cmd: cmdstrtype; - i1, - i2: INTEGER); - (*------------------------------------------------------------------*) - (* Sends a command and two integer parameters to the HP plotter. *) - (*------------------------------------------------------------------*) - - BEGIN (* putiicmd *) - handshake(16); - - puthp(cmd[1]); (* send command *) - puthp(cmd[2]); - - putinum(i1); (* now the parameters *) - puthp(','); - putinum(i2); - puthp(';'); - END; (* putiicmd *) - - - - PROCEDURE putiiiicmd(cmd: cmdstrtype; - i1, - i2, - i3, - i4: INTEGER); - (*------------------------------------------------------------------*) - (* Sends a command and four integer parameters to the HP plotter. *) - (*------------------------------------------------------------------*) - - BEGIN (* putiiiicmd *) - handshake(30); - - puthp(cmd[1]); (* send command *) - puthp(cmd[2]); - - putinum(i1); (* now the parameters *) - puthp(','); - putinum(i2); - puthp(','); - putinum(i3); - puthp(','); - putinum(i4); - puthp(';'); - END; (* putiiiicmd *) - - - - PROCEDURE inithp; - (*------------------------------------------------------------------*) - (* Sets up the HP plotter software handshake mode and the scaling. *) - (*------------------------------------------------------------------*) - - BEGIN (* inithp *) - puthpstr('IN; '); (* init the plotter *) - - puthp(chr(esccode)); (* shut off hardware handshake *) - puthpstr('.@;0: '); - - puthp(chr(esccode)); (* software handshake mode 1 *) - puthpstr('.H '); - putinum(maxsent); - puthpstr(';5;6: '); (* decimal equiv of enq and ack *) - - putiiiicmd('SC', 0, 10000, 0, 7200); (* 40'ths of mm. *) - END; (* inithp *) - - - - PROCEDURE penup; - (*------------------------------------------------------------------*) - (* Sets the 'penlifted' indicator. The command is sent to the *) - (* plotter only if necessary by 'drawto'. *) - (*------------------------------------------------------------------*) - - BEGIN (* penup *) - penlifted := TRUE; - END; (* penup *) - - - - PROCEDURE pendown; - (*------------------------------------------------------------------*) - (* Sets the 'penlifted' indicator. The command is sent to the *) - (* plotter only if necessary by 'drawto'. *) - (*------------------------------------------------------------------*) - - BEGIN (* pendown *) - penlifted := FALSE; - END; (* pendown *) - - - - PROCEDURE sethpplot(l: alinetype; - rptlen: REAL; - endsym: aendtype); - (*------------------------------------------------------------------*) - (* Sends the 'line type' command and sets the penup and pendown. *) - (*------------------------------------------------------------------*) - - VAR - linetynum: INTEGER; - - - BEGIN (* sethpplot *) - IF ((l = noline) AND (endsym = point)) OR (l <> noline) - THEN - BEGIN - IF l = solid - THEN - puthpstr('LT; ') (* set solid line or *) - ELSE - BEGIN - CASE l OF (* set pattern number *) - noline: linetynum := 0; - dotted: linetynum := 1; - dashed: linetynum := 2; - dotdashed: linetynum := 4; - dotdotdashed: linetynum := 6; - END; (* CASE l *) - putidcmd('LT', linetynum, rptlen * percent); - END; (* ELSE *) - pendown; (* and lower pen *) - END (* IF ((l... *) - ELSE - penup; (* otherwise raise pen *) - END; (* sethpplot *) - - - - PROCEDURE sethpstr(height, - width, - angle: REAL); - (*------------------------------------------------------------------*) - (* Uses the 'SI' command to set the character size and the 'DI' *) - (* command to set the string angle. *) - (*------------------------------------------------------------------*) - - BEGIN (* sethpstr *) - putddcmd('SI', width / 10.0, (* convert to cm. *) - height / 10.0); - putddcmd('DI', 100.0 * cos(angle / radian), (* run *) - 100.0 * sin(angle / radian)); (* rise *) - END; (* sethpstr *) - - - - PROCEDURE sethpwindow(left, - right: apointtype); - (*------------------------------------------------------------------*) - (* Sends the window size to the HP plotter. This uses absolute *) - (* (not scaled) HP plotter units. *) - (*------------------------------------------------------------------*) - - BEGIN (* sethpwindow *) - putiiiicmd('IW', round((left.x * xfactor) + absp1x), (* send to *) - round((left.y * yfactor) + absp1y), (* plotter *) - round((right.x * xfactor) + absp1x), - round((right.y * yfactor) + absp1y)); - END; (* sethpwindow *) - - - - FUNCTION isinwindow(pt: apointtype): BOOLEAN; - (*------------------------------------------------------------------*) - (* Returns TRUE if the 'pt' is within the window defined by *) - (* 'oldleft' and 'oldright'. *) - (*------------------------------------------------------------------*) - - BEGIN (* isinwindow *) - isinwindow := (pt.x <= oldright.x) AND (pt.y <= oldright.y) AND - (pt.x >= oldleft.x) AND (pt.y >= oldleft.y); - END; (* isinwindow *) - - - - PROCEDURE plot(dest: apointtype); - (*------------------------------------------------------------------*) - (* Plots a line from the present position to 'dest'. *) - (*------------------------------------------------------------------*) - - - - PROCEDURE drawto(dest: apointtype); - (*----------------------------------------------------------------*) - (* Moves the pen to 'dest' with the pen specified by 'penlifted'.*) - (*----------------------------------------------------------------*) - - BEGIN (* drawto *) - IF penlifted AND (NOT oldpenlifted) - THEN - puthpstr('PU; ') - ELSE IF (NOT penlifted) AND oldpenlifted - THEN - puthpstr('PD; '); - oldpenlifted := penlifted; - - putiicmd('PA', round(dest.x * xfactor), - round(dest.y * yfactor)); - oldpt := dest; - END; (* drawto *) - - - - PROCEDURE draw(what: aendtype); - (*----------------------------------------------------------------*) - (* Draws the endpoint symbol 'what' with size 'oldesize' *) - (* centered at the present position. *) - (*----------------------------------------------------------------*) - - VAR - origin, (* holds line endpoint *) - temp: apointtype; - - oldpenup: BOOLEAN; (* holds old penlifted *) - - - - PROCEDURE closed(initangle: REAL; - npoints: INTEGER); - (*--------------------------------------------------------------*) - (* Plots a polygon of size 'oldesize' with 'npoints' *) - (* corners starting at 'initangle' degrees clockwise from *) - (* vertical centered at 'origin'. *) - (*--------------------------------------------------------------*) - - VAR - i: INTEGER; (* corner counter *) - - angle: REAL; (* angle counter *) - - - BEGIN (* closed *) - FOR i := 0 to npoints DO - BEGIN - IF i = 0 - THEN - penup - ELSE IF penlifted - THEN - pendown; - angle := (initangle + i * (360.0 / npoints)) / radian; - temp.x := origin.x + oldesize * sin(angle); - temp.y := origin.y + oldesize * cos(angle); - drawto(temp); - END; (* FOR i ... *) - END; (* closed *) - - - - PROCEDURE open(initangle: REAL); - (*--------------------------------------------------------------*) - (* Plots a cross of size 'oldesize' with one axis at *) - (* 'initangle' clockwise from vertical centered at 'origin'. *) - (*--------------------------------------------------------------*) - - VAR - i, (* loop counters *) - j: INTEGER; - - angle, (* angle of a line segment *) - stangle: REAL; (* start angle of a line segment *) - - - BEGIN (* open *) - FOR j := 0 TO 1 DO - BEGIN - stangle := initangle + j * 90.0; - FOR i := 0 TO 1 DO - BEGIN - IF i = 0 - THEN - penup - ELSE - pendown; - angle := (stangle + i * 180.0) / radian; - temp.x := origin.x + oldesize * sin(angle); - temp.y := origin.y + oldesize * cos(angle); - drawto(temp); - END; (* FOR i ... *) - END; (* FOR j ... *) - END; (* open *) - - - - BEGIN (* draw *) - IF what IN [square, triangle, diamond, circle, cross, ecks] - THEN - BEGIN - origin := oldpt; (* save endpoint *) - oldpenup := penlifted; (* and pen status *) - IF oldline <> solid (* set it to solid *) - THEN - sethpplot(solid, 0.0, noend); - CASE what OF - square: closed(45.0, 4); - triangle: closed(0.0, 3); - diamond: closed(0.0, 4); - circle: closed(0.0, 10); - cross: open(0.0); - ecks: open(45.0); - END; (* CASE what *) - - penup; (* return to endpoint *) - drawto(origin); - - IF oldline <> solid (* restore line charact's *) - THEN - sethpplot(oldline, oldrptlength, oldend); - END; (* IF what... *) - END; (* draw *) - - - - BEGIN (* plot *) - drawto(dest); - draw(oldend); - END; (* plot *) - - - - FUNCTION abadcall: BOOLEAN; - (*------------------------------------------------------------------*) - (* Returns TRUE if something is wrong with a procedure call. Not *) - (* implemented. *) - (*------------------------------------------------------------------*) - - BEGIN (* abadcall *) - abadcall := FALSE; - END; (* abadcall *) - - - - PROCEDURE adefault; - (*------------------------------------------------------------------*) - (* Sets all globals to their default values. *) - (*------------------------------------------------------------------*) - - BEGIN (* adefault *) - oldline := noline; (* simple line *) - oldrptlength := 5.0; - oldesize := 3.0; - oldend := noend; - sethpplot(oldline, oldrptlength, oldend); - - oldleft.x := minx; (* window size to full screen *) - oldleft.y := miny; - oldright.x := maxx; - oldright.y := maxy; - sethpwindow(oldleft, oldright); - - sethpstr(2.70, 1.875, 0.0); (* default character size *) - END; (* adefault *) - - - - PROCEDURE agraph; - (*------------------------------------------------------------------*) - (*------------------------------------------------------------------*) - - BEGIN (* agraph *) - END; (* agraph *) - - - - PROCEDURE ainit; - (*------------------------------------------------------------------*) - (* Initializes the I/O to the HP plotter, and *) - (* sets all parameters to their default values, and places the pen *) - (* in the lower left-hand corner. *) - (*------------------------------------------------------------------*) - - BEGIN (* ainit *) - inithp; - adefault; - agraph; - oldpenlifted := TRUE; - oldpt.x := minx; - oldpt.y := miny; - plot(oldpt); - numsent := 0; - END; (* ainit *) - - - - PROCEDURE amakecopy; - (*------------------------------------------------------------------*) - (* This is not implemented - it could be used to indicate for *) - (* the paper to be changed by sending out DP;, then OS;'s till bit *) - (* 2 returned was a 1, then a DC;. This would turn on the 'enter' *) - (* light on the plotter, wait until 'enter' was pushed (presumably *) - (* after the paper had been changed) by the operator, and then *) - (* extinguish the light and return. *) - (* See the HP plotter manual for more details. *) - (*------------------------------------------------------------------*) - - BEGIN (* amakecopy *) - END; (* amakecopy *) - - - - PROCEDURE aplot(endpoint: apointtype); - (*------------------------------------------------------------------*) - (* Plots to 'endpoint' using line type 'oldline' and end type *) - (* 'oldend'. *) - (*------------------------------------------------------------------*) - - BEGIN (* aplot *) - plot(endpoint); - END; (* aplot *) - - - - PROCEDURE asetplot(line: alinetype; - repeatlength, - endsize: REAL; - endsymbol: aendtype); - (*------------------------------------------------------------------*) - (* Sets the characteristics of the line(s) to be plotted next. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetplot *) - sethpplot(line, repeatlength, endsymbol); - - oldline := line; (* save the values *) - oldrptlength := repeatlength; - oldesize := endsize; - oldend := endsymbol; - END; (* asetplot *) - - - - PROCEDURE asetstr(charheight, - charwidth, - charangle, - charspace, - strangle: REAL); - (*------------------------------------------------------------------*) - (* Sets the characteristics of the next string(s) to be plotted. *) - (* Doesn't implement the charspace or charangle settings since it *) - (* uses the standard plotter values. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetstr *) - sethpstr(charheight, charwidth, strangle); - END; (* asetstr *) - - - - PROCEDURE asetwindow(lowerleft, - upperright: apointtype); - (*------------------------------------------------------------------*) - (* Sets the window size. Nothing will appear outside this window. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetwindow *) - oldleft := lowerleft; (* save the window value *) - oldright := upperright; - IF lowerleft.x < minx (* make sure it's valid *) - THEN - oldleft.x := minx; - IF lowerleft.y < miny - THEN - oldleft.y := miny; - IF upperright.x > maxx - THEN - upperright.x := maxx; - IF upperright.y > maxy - THEN - upperright.y := maxy; - - sethpwindow(oldleft, oldright); - END; (* asetwindow *) - - - - PROCEDURE asize(VAR size: apointtype); - (*------------------------------------------------------------------*) - (* Returns the size of the display in mm. *) - (*------------------------------------------------------------------*) - - BEGIN (* asize *) - size.x := maxx - minx; - size.y := maxy - miny; - END; (* asize *) - - - - PROCEDURE astr(str: astringtype); - (*------------------------------------------------------------------*) - (* Writes the null-terminated string 'str' on the screen starting *) - (* at the current location (taken as the lower left corner of the *) - (* first character) and proceeding at 'strangle'. The *) - (* character angle, height, width and spacing is 'charangle', *) - (* 'charheight', 'charwidth' and 'charspace'. *) - (* *) - (* In this implementation, the HP 7225A mode of text writing is *) - (* used, so the standard spacing and character rotation (same as *) - (* line rotation) are used. *) - (*------------------------------------------------------------------*) - - VAR - index: INTEGER; - - - BEGIN (* astr *) - handshake(136); (* make sure there's enough room *) - puthp('L'); (* send start of LB command *) - puthp('B'); - - index := 1; (* put out characters *) - WHILE ord(str[index]) <> nulcode DO - BEGIN - puthp(str[index]); - index := index + 1; - END; (* WHILE str... *) - - puthp(chr(etxcode)); (* and end of string code *) - puthp(';'); - END; (* astr *) - - - - PROCEDURE atext; - (*------------------------------------------------------------------*) - (* Sets the display to the text mode. *) - (*------------------------------------------------------------------*) - - BEGIN (* atext *) - END; (* atext *) - - - - PROCEDURE awhere(VAR where: apointtype; - VAR inwindow: BOOLEAN); - (*------------------------------------------------------------------*) - (* Returns the current location and whether it's inside the *) - (* window. *) - (*------------------------------------------------------------------*) - - BEGIN (* awhere *) - where := oldpt; - inwindow := isinwindow(oldpt); - END; (* awhere *) -modend. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/LOCK.PAS b/software/CPM/CPM19_MTPUG_07/LOCK.PAS deleted file mode 100644 index 2d7a92e..0000000 --- a/software/CPM/CPM19_MTPUG_07/LOCK.PAS +++ /dev/null @@ -1,76 +0,0 @@ -MODULE KCOL; -{********************************************************************* - * LOCK * - * Date Author * - * 13-October-82 Sue Arnold * - * * - * This routine will lock out other programs from using your record. * - * To use it, you must pass the file descriptor and the File_ID that * - * was returned by "SHARE" when you opened the file in unlock mode. * - * * - * An assembly routine (alock) will be called to actually lock out * - * the record after this routine moves the file_ID to the sector * - * buffer and sets the current DMA. * - * * - * This program requires that the rec# of the record to be locked be * - * in the FCB. To get it there, please access the record before * - * calling this routine via a "SEEKREAD". (or something similiar). * - *********************************************************************} - - - {**************************************************************** - * follows is the format for the Pascal MT+ file information * - * block (FIB). It was modified for Ver 5.5 to include file * - * option type "fauxio". * - ****************************************************************} -TYPE - opttype = (notopen,fwrite,frdwr,frandom,fconio,ftrmio,flstout,fauxio); - buftype = PACKED ARRAY [0..127] OF CHAR; - - FIB= - RECORD - fname : STRING[16]; { d:filename.ext } - FCB : PACKED ARRAY [0..34] OF CHAR; { CP/M FILE CONTROL BLOCK } - buflen : INTEGER; { size of fbuffer } - bufidx : INTEGER; { current index into fbuffer } - option : opttype; - IOsize : INTEGER; { size of next transfer } - feoln : BOOLEAN; { TRUE if text file at end-of-line } - feof : BOOLEAN; { TRUE if at end-of-file } - fbufadr: WORD; { pointer to fbuffer } - fsecinx: 0..128; { index into fsector <+1 for overflow> } - ftext : BOOLEAN; { TRUE if this is a text file! } - nosectrs:BOOLEAN; { TRUE if no more disk room available } - fsector: buftype; { 1 sector buffer for CP/M } - fbuffer: PACKED ARRAY [0..0 ] OF CHAR; - END; - - - {**************************************************************** - * Here are bunches of external procedure declarations. * - ****************************************************************} -EXTERNAL PROCEDURE setDMA (VAR sector_buffer: buftype); - -EXTERNAL PROCEDURE alock (VAR ufile: FIB; - VAR lck_err: INTEGER); - -{**************************************************************** - * Procedure LOCK starts here: * - ****************************************************************} - -PROCEDURE lock (VAR ufile : FIB; - file_ID : WORD; - VAR lck_err : INTEGER); - -BEGIN - {**************************************************************** - * First, put the file_ID number in the file sector buffer: * - * Then, call "alock" to lock the record. * - ****************************************************************} - MOVE (file_ID, ufile.fsector[0], 2); - setDMA( ufile.fsector ); - alock ( ufile, lck_err); - END; {procedure LOCK} - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/MYLIB.ERL b/software/CPM/CPM19_MTPUG_07/MYLIB.ERL deleted file mode 100644 index 5c3de0e3cb91dacd541b535deee6f3c9a4b358e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 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 diff --git a/software/CPM/CPM19_MTPUG_07/PRMAC.DOC b/software/CPM/CPM19_MTPUG_07/PRMAC.DOC deleted file mode 100644 index 0d4ef9b..0000000 --- a/software/CPM/CPM19_MTPUG_07/PRMAC.DOC +++ /dev/null @@ -1,22 +0,0 @@ - PRMAC is a program for typing out the .PRN and .SYM files -produced by Digital Research's MAC assembler. The only difference -between this and the one in the manual for MAC (other than the -fact that theirs is in assembly language) is that it paginates -the output etc. - - It is invoked by typing: - - PRMAC DUMMY LISTING - -where DUMMY is the basename of the file to be listed and -where LISTING is the name of the desired output file - usually this -is just the listing 'device' - LST: - -The program will then read through DUMMY.PRN, send it to the output -file, and then do the same for DUMMY.SYM. - -NOTE ******* - - After doing the above, the program will ERASE both the source -files! - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/PRMAC.SRC b/software/CPM/CPM19_MTPUG_07/PRMAC.SRC deleted file mode 100644 index 6ce186633d7b3c3d3d4240393f31f86cadf6a88a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmaJ^-*4MC5Y8SIz}udSK3t0da!}QX-5==GxtN!zskg)qY_(n26#*^Nwh&1)B)aJq z4A`H(yCW&fNmf6|*75l9yW@99`g}4znGDV#7s@PS@m#G$6Yaj44k(Cr>vhpi98ytbCDw)qRS#}5> zv1JXNs5}?N9I~{KkZ&ptGhAc=3svSJd!J7TVl+65ZcV;Qvka+}ILoX@)0igl<2jx4 z$tW-Z7;348t5mOGEtV3BO+J%l70{dlWGSlctPTvx6<6TFOsPwPHz-7>GyQO8p#f1T ziUtf>vPzkVf9(u9@SBn=%mL*GU@EFhp_MAkD?EX5q7{+}p!?&C9)$NN|W~!VcVjsGPWX#mnZR28r<3Ai8z4W|m%If2Vlyk<8Kb%K6 zr&v~+Fz}fc%a7gOi%%?rcY}$S7L>^Vv2o++XXt79#mK}fWwpsP4Klw%(NEgQi$aAs zRm-I;8OmEpF=rKp-b|@Xio)0lvJg4Kn$_7F{T@e?(cl!$C*z~&`0XTupH~?zddJ98 zYEdrRNEV9Ftx0bpn1u%P0B2q!wUa0wOiloWEuh4BNOD!0rK$ zby~o~saohOQA)GxF;cI{elDs+WDlX!>Co1fQg6z_6bO>pYa|F2E|? zAhF!7Vyp^D_2`#Fd$T4wy@L+;g->*8x{>Nj@CBI+3fYbP3Cf?<&Xr75F*n*9GHhLN zs1S)Ed{&oSw*i-o{37x-?sJoe>@l@dgwPv!>xDJ`1(Azg0q7q&gKD)&gsVM5<-J?vnQCM=$i6TJn+= z8j_W;LM(89(BOo^EoBQX%km;wUA9@0Tk#>0#wA|9bI zYB!H|UuH$ye_IG_eYB%$jcVW`0zaT7NSL1IS#f(FAw;8NvYM~fz5}ca2*N(ZleZB^ z?^*RzRDnqY=YW6_1i8`(@;r1bcSzP8->-y*2M-?jhLIz*h^1KfSWJ zt~}9;NrZirUm|qdQ1Yn>8|b>;`#eOEGU2fApHAb@Cj*`q>9T0s*28{G3zIIjHM7C( z*4D*NwY`dY_Uv4awQWakO=mC4IfV?@{Dk3X7!L=h!#^T?XCZEtlBJdDf+Rqy=FoLg zPCWr^o#$$yl(xN)hTN|1kP4Dj*~4dr4Ae6ZrDAY5TMA^GQY zTktWzcn%lpZd8t|25zK_Ioi5*$Ky_d9(BLEr=Srxbw;x4uYrb=icjc${7NmF7>7n>>fkTgXiBmiSE7>xMQ&n`~Rt9 zX7RRmZ*R}zzdN1j=+%>N(!$3Uik@3+4F?t3>x-}m?SzM*e={COXT=uS>7E#$qg Ge*Od9f8Fi? diff --git a/software/CPM/CPM19_MTPUG_07/SETDMA.Z80 b/software/CPM/CPM19_MTPUG_07/SETDMA.Z80 deleted file mode 100644 index 4319166..0000000 --- a/software/CPM/CPM19_MTPUG_07/SETDMA.Z80 +++ /dev/null @@ -1,40 +0,0 @@ -TITLE DMAset -; -; 9/22/82 Sue Arnold -; -; This is an assembly program that will set the current "DMA" to the -; "fsector" field in the FIB, so that the system may lockout a record. -; It expects "buftype" to be of the type: PACKED ARRAY [0..127] OF CHAR; -; -; CALLING PROCEDURE= -; -; setDMA (VAR sector_buffer: buftype); (pointer to the file FCB) -; -; This routine uses XDOS function number 1Ah for to set the DMA. -; - - .Z80 -; -BDOSJP EQU 5 ; Use this to call XDOS -; -; - PUBLIC setDMA - CSEG -; -; -setDMA: - POP HL ; HL = Pascal Return Address - EX (SP), HL ; HL = The addr of the CP/M sector buffer - ; (top of stack now has the Pascal rtn addr) - EX DE, HL ; DE = The addr of the CP/M sector buffer - ; HL = Garbage - LD C, 1AH ; C = Set DMA BDOS function number - PUSH DE ; Save the addr of the CP/M sector buffer - PUSH HL ; Save the error code addr - CALL BDOSJP ; Set the current DMA - POP HL ; Restore garbage - POP DE ; Restore the addr of the CP/M sector buffer - RET ; Else, Return to calling routine - - END setDMA - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/SHARE.PAS b/software/CPM/CPM19_MTPUG_07/SHARE.PAS deleted file mode 100644 index 91976c8..0000000 --- a/software/CPM/CPM19_MTPUG_07/SHARE.PAS +++ /dev/null @@ -1,50 +0,0 @@ -MODULE erahs; -{********************************************************************* - * SHARE * - * Date Author * - * 04-October-82 Sue Arnold * - * * - * This is a super-duper procedure that will open the file of your * - * choice in UNLOCKED mode! Just send it the file descriptor, the * - * file name, and it will open the file and return the file ID * - * number that you need to have in order to lock and unlock * - * records. * - *********************************************************************} - - - {**************************************************************** - * follows is the format for the Pascal MT+ file information * - * block (FIB). It was modified for Ver 5.5 to include file * - * option type "fauxio". * - ****************************************************************} -TYPE - string15 = STRING[15]; - - dum_rec = - RECORD - dumb : BYTE; - END; - dum_type = FILE OF dum_rec; - -VAR - bufsize : INTEGER; {default value = 1} - -EXTERNAL PROCEDURE uset (VAR ufile: dum_type; - bufsize: INTEGER; - VAR file_ID: INTEGER); - -{**************************************************************** - * Procedure SHARE starts here: * - ****************************************************************} - -PROCEDURE share (VAR ufile : dum_type; - VAR filename : string15; - VAR file_ID : INTEGER); - -BEGIN - ASSIGN(ufile, filename); - uset (ufile, bufsize, file_ID); -END; { procedure share } - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/SHAREFIL.DOC b/software/CPM/CPM19_MTPUG_07/SHAREFIL.DOC deleted file mode 100644 index 6172c97..0000000 --- a/software/CPM/CPM19_MTPUG_07/SHAREFIL.DOC +++ /dev/null @@ -1,190 +0,0 @@ - - - -     PASCAL/MT«   INTERFACÅ   TÏ  MP/Í II'Ó   -     FILÅ  SHARINÇ   FUNCTIONS - - - - -     Thå  abilitù  tï updatå shareä datá while maintaiîing  -    data integrity is a unique feature of MP/M II. - -     The current version of Pascal/MT+, having been designed -    foò á singlå-useò environment¬  lackó thå facilitieó tï  takå -    advantagå  oæ  thå filå integritù mechanisimó requireä  iî  á -    multi-user environment. - -     SHAREFIÌ  ió  aî applicatioî prograí usinç  á  Pascaì -    interfacå  tï  assemblù modules provideä bù  Suå  Arnolä  oæ -    Centauruó  Software®  Theså  moduleó  togetheò  providå  filå -    sharinç   anä   recorä   locking/unlockinç   capabilitù   foò -    Pascal/Mt+ ver. 5.5 running under MP/M II. - -     Thå firsô useò oæ SHAREFIÌ shoulä creatå á smalì  texô -    filå  oæ nameó anä addresses®  Subsequenô useró caî opeî  thå -    samå  filå anä attempô accesó oæ thå samå recordó foò reaä oò -    write®  Iæ  thå  recorä haó beeî lockeä bù á  previouó  writå -    requesô thå currenô writå requesô wilì bå denieä anä aî erroò -    codå displayed. - -     Onå  drawbacë  oæ extendinç á filå openeä iî  unlockeä -    modå  - aó  occuró iî thió examplå - ió  thaô  thå  operatinç -    systeí  musô allocatå á fulì blocë oæ disë spacå aô thå firsô -    writå  tï aî unallocateä record®  Thå effecô ió, á reaä tï  á -    recorä  withiî  the  blocë, thaô haó noô beeî  writteî, wilì -    successfullù returî uninitializeä data®  Aî applicatioî thaô -    useó  thió schemå shoulä maintaiî á headeò tï thå  filå  thaô -    keepó tracë oæ valiä records. - -     Linkinç  SHAREFIÌ  ió acomplisheä witè  thå  followinç -    command. - -    0A>LINKMT SHAREFIL,SHARELIB,RANDOMIO,PASLIB/S - - -    Digitaì   Researcè   disclaimó  anù  expresseä   oò   implieä -    responsibilitù  foò  thå  effectó oæ thió  softwarå  oî  youò -    application®  Thå  externaì moduleó useä iî thió  applicatioî -    arå  madå  availablå  tï DRÉ anä ouò customeró  bù  Centauruó -    Software®  Iô ió thå intenô oæ thå authoò thaô theså  moduleó -    be regarded as public domain. - - - -    Daniel Erickson/Dick Lovelace Digital Research 11/11/82 Š - - - - (1) - - - - - - - - MODULE LIST - =========== - - -SHARE.PAS -========= -   Thió ió thå Pascaì procedurå thaô ió useä bù thå callinç routinå tï opeî -   a file in the shared access mode. The calling procedure is: - -    SHARE (VAR ufile: file_descriptor; -    uname: string15; -    VAR file_ID: INTEGER); - -   All parameters are passed except file_ID. - - -USET.PAS (called by SHARE) -======== -   Thió ió mù versioî oæ "RESET"®  Iô ió basicallù á documenteä versioî oæ -   reseô witè thå followinç exceptionsº  (1© Iæ filå optioî ½ FWRITE¬  theî -   thå f5§ biô ió seô beforå closinç thå file» (2© Thå f5§ attributå biô ió -   seô  beforå  thå filå ió opened»  (3© "@BDOS¢ functioî waó  replaceä  bù -   assemblù routinå "UOPEN"® - -    USET (VAR ufile: FIB; -    bufsize: INTEGER; -    VAR file_ID: INTEGER); - -   É don'ô kno÷ whetheò oò noô É neeä bufsizå aó thå seconä parameter¬  buô -   that'ó thå waù thå originaì reseô looks®  Eventually¬ file_IÄ shoulä bå -   type "WORD", and not "INTEGER". - - -UOPEN.PAS (called by USET) -======== -   Thió  ió  jusô aî assemblù routinå thaô actuallù calló thå BDOÓ tï  opeî -   the file. - -    uopen (VAR ufile: FIB; -    VAR result: INTEGER); - - -LOCK.PAS Š======== -   Thió ió thå Pascaì procedurå thaô ió useä bù thå callinç routinå tï locë -   á recorä foò á filå thaô haó beeî openeä iî shareä accesó mode®  Pleaså -   seå thå prograí headeò foò furtheò documentation. - -    LOCK (VAR ufile: FIB; -    file_ID: WORD; -   VAR lck_err: INTEGER); - -   The file_ID is the same one as that returned by "SHARE". - - - - - - (2) - - - - - - - - - -ALOCK.Z80 (called by LOCK) -========= -   Thió  ió jusô aî assemblù routinå thaô actuallù calló thå BDOÓ tï  locë -   thå  recorä thå file¬  iô assumeó thaô thå currenô DMÁ haó alreadù  beeî -   set. - -    alock (VAR ufile: FIB; -    VAR lck_err: INTEGER); - - -SETDMA.Z80 (called by LOCK and UNLOCK) -=========== -   Thió  ió  yeô  anotheò assemblù routinå thaô calló thå BDOÓ tï  seô  thå -   current DMA (which is passed). - -    setdma (VAR sector_buffer: buftype); - -   Whereº  buftypå ½ PACKEÄ ARRAÙ [0..127Ý OÆ CHAR¬  anä thå sector_buffeò -   is the "fsector" field of the FIB. - - -UNLOCK.PAS -========== -   Thió  ió  thå Pascaì procedurå thaô ió useä bù thå  callinç  routinå  tï -   unlocë á recorä thaô haó beeî writteî tï iî lockeä mode®  Pleaså seå thå -   prograí headeò foò furtheò documentation. - -    UNLOCK (VAR ufile: FIB; -    file_ID: WORD; -   VAR lck_err: INTEGER); Š -   The file_ID is the same one as that returned by "SHARE". - - -AUNLCK.Z80 (called by UNLOCK) -========== -   Thió ió jusô aî assemblù routinå thaô actuallù calló thå BDOÓ tï unlocë -   thå  recorä thå file¬  iô assumeó thaô thå currenô DMÁ haó alreadù  beeî -   set. - -    áunlck (VAÒ ufileº FIB; -    VAR lck_err: INTEGER); - - - SHARELIB.ERL  - ===========½ - Iî  ordeò  tï  makå iô easieò tï linë togetheò, wå havå  provideä  thió - library module containing all of the other modules listed above. - - - - - - - - (3) - -      \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/SHAREFIL.TST b/software/CPM/CPM19_MTPUG_07/SHAREFIL.TST deleted file mode 100644 index 341e57f..0000000 --- a/software/CPM/CPM19_MTPUG_07/SHAREFIL.TST +++ /dev/null @@ -1,163 +0,0 @@ - - - - -PROGRAM SHAREFIL; - -TYPE - PERSON = RECORD - NAME : STRING; - ADDRESS : STRING; - END; - FYLE = FILE OF PERSON; - -VAR - BF : FYLE; - S,NAME : STRING; - BUFFSIZE,ID,RN,ERR_CD : INTEGER; - CREATE,REED : BOOLEAN; - CH : CHAR; - FID : WORD; - - - EXTERNAL PROCEDURE SHARE(VAR UFILE : FYLE; UNAME : STRING; - VAR FILE_ID : INTEGER); - EXTERNAL PROCEDURE @HLT; - EXTERNAL PROCEDURE USET (VAR UFILE : FYLE; BUFFSIZE : INTEGER; - VAR FILE_ID : INTEGER); - EXTERNAL PROCEDURE LOCK (VAR UFILE : FYLE; FILE_ID : WORD; - VAR LCK_ERR : INTEGER); - EXTERNAL PROCEDURE UNLOCK (VAR UFILE : FYLE; FILE_ID : WORD; - VAR ERR_CD : INTEGER); - - -PROCEDURE HALT; -BEGIN - CLOSE(BF,FID); - @HLT -END; - - -PROCEDURE ERR_CHK (VAR ERR_CD : INTEGER); -VAR IORSLT : INTEGER; -BEGIN - IORSLT := IORESULT; - IF ERR_CD <> 0 - THEN - BEGIN - WRITELN ('UNSUCCESSFUL LOCK/UNLOCK, ERROR CODE = ',ERR_CD); - ERR_CD := 0; - ACCESS_RECS; - EXIT - END; - IF IORSLT <> 0 - THEN - BEGIN - WRITELN ('UNSUCCESSFUL FILE I/O, IORESULT = ',IORSLT); - O_C_FILE; - EXIT - END; -END; - - -PROCEDURE READ_RECS; -BEGIN - WRITE('RECORD NUMBER ? '); - READLN(RN); - SEEKREAD(BF,RN); - IF REED - THEN BEGIN - ERR_CHK (ERR_CD); - WRITELN (BF^.NAME,'/',BF^.ADDRESS) - END; -END; - - -PROCEDURE WRITE_RECS; -BEGIN - READ_RECS; - FID := WRD(ID); - IF CREATE = FALSE - THEN BEGIN - LOCK (BF,FID,ERR_CD); - ERR_CHK (ERR_CD) - END; - WRITE('NAME?'); - READLN(S); - BF^.NAME := S; - WRITE('ADDRESS?'); - READLN(S); - BF^.ADDRESS := S; - SEEKWRITE(BF,RN); - UNLOCK (BF,FID,ERR_CD); - ERR_CHK (ERR_CD) -END; - - -PROCEDURE ACCESS_RECS; -BEGIN - REPEAT - WRITE ('R)EAD,W)RITE OR Q)UIT? '); - READ(CH); - WRITELN; - CASE CH OF - 'R','r' : BEGIN - REED := TRUE; - READ_RECS - END; - 'W','w' : BEGIN - REED := FALSE; - WRITE_RECS - END; - 'Q','q' : HALT - - ELSE WRITELN('ENTER R, W OR Q ONLY') - END; - UNTIL FALSE; -END; - - -PROCEDURE OPEN_FILE; -BEGIN - WRITE ('FILE NAME? '); - READLN (NAME); - SHARE (BF,NAME,ID); - ERR_CHK (ERR_CD); -END; - - -PROCEDURE CREATE_FILE; -BEGIN - WRITE ('FILE NAME? '); - READLN (NAME); - ASSIGN (BF,NAME); - REWRITE (BF); - CLOSE (BF,FID); - SHARE (BF,NAME,ID); - ERR_CHK (ERR_CD); - CREATE := TRUE -END; - -PROCEDURE O_C_FILE; -BEGIN - CREATE := FALSE; - REPEAT - WRITE ('C)REATE OR O)PEN? '); - READLN (CH); - WRITELN; - IF CH = 'O' - THEN OPEN_FILE - ELSE IF CH = 'C' - THEN CREATE_FILE - ELSE WRITELN ('TYPE "C" OR "O" ONLY') - UNTIL (CH = 'O') OR (CH = 'C'); - ACCESS_RECS -END; - - -BEGIN (* MAINLINE *) - ERR_CD := 0; - O_C_FILE -END. - - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/SHARELIB.ERL b/software/CPM/CPM19_MTPUG_07/SHARELIB.ERL deleted file mode 100644 index b8597edb919646bedad360aa909b0ae3caa87ab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1792 zcmcIkZA?>V6h8O%gDYRTrG;37dRve}F$%Ta05!REZ3V+eOIt*vu6E_a1vZ8sQD&Aq zsIGHvt4QO5M7vrX6t}UB`4zKWJ79>z6hRZ?vel@I+mgjh=P!TkeJ_eLGuf~8&rRR= zJm);mbIyDA+8q8GMSS}bN4-7}u1l{}Ny;;<^9jR?u!V!>gY&;w?t-dT1rS6XVfm#?Yn1%SOXS8a}ijwu(uDrbY@nX;6900nmoM0$W$ z-;hh>HFt7|5`(EJacv63Mg}gOG)h3aF+>*;6X-@#$AY>Dq(+{+?=TVqP0?uIn=HCO zG%xU}w$wCe`wFW;U*F5|g!~tdajQ108wMlHhNFt~H5Q!@!;0oJuqRT*_}}%~2uJV_AqvPDZ3QhO;@sBad1`f!R4BTnB&PiL2K*J3d%DAp7TH)){<=Kuj zamrKO#E}iW*l-3h{fte%u@h9Mk!>weX!wbS-E6oztJ{}7MTouCdFfQx((*ORf|89s z$t|Ne(Xub70#LU3UP5i~!eb>gP#*ws7$597Q{_IH33upkfBvJkWfSZgjsP{70E^AP z+>f8XoF#L`iCPrz7vf1A-(1p5YNJ4;0qE|~9HgF}_k+_5WEKzg6Doj(ugO2cZm)5{ zrEX+W$&Z>soWjczhwHp7B%d`gAo?`A4P$NS26I^97a(yA;pQNI1es&WfGiV4%WM<{ zzqj^|;?5Q0RwDZ7|45?>7kMA^MEr44<+wmAhG=2F88qnT0+S$V(nbODe~OnOAZ~HO zya$_KZ#q`Him#p zH>)Pkb@kSdBn_wsA}6%jV>XCH+B>w{8~f)S4@E3H`4H*WDLl=IOkTgn;^4Fk-0eL} z8}CXPjizsG4}{3BHigGS2Gv9tm|s!u73*IiC!w z$5_5ix7O`mV2Yz{Vn67RUv)Vhe~BHxvLK$Z649wQ&RyUi4t5)5Al=j)%S9(EzkDSK z>CV-q=_RcQR5Kl$rdTR0Wk{bS6N+a{u|k5I&lC1 diff --git a/software/CPM/CPM19_MTPUG_07/TYPESET.DOC b/software/CPM/CPM19_MTPUG_07/TYPESET.DOC deleted file mode 100644 index a281b5d..0000000 --- a/software/CPM/CPM19_MTPUG_07/TYPESET.DOC +++ /dev/null @@ -1,184 +0,0 @@ -.lh 10 -PROGRAM TYPESET - CONVERSION OF WORDSTAR TEXT TO OTHER FORMATS - -PER STANGELAND -4230 SAND -NORWAY -1982/11/27 - -Prograí  TYPESET‚ convertó á texô writteî bù WORDSTAÒ tï á  formaô -acceptable to type setting equipment. - - -Operating instructions - -TYPESET.SRC is the program code -TYPESET.COM is the version you run -TYPESET.PRM contains the parameter list. - -Any CP/M system with at least one disk drive can be used. -TYPESET.COM and TYPESET.PRM must be on the same disk. -Write TYPESET, and press RETURN -Thå  prograí  askó  foò  youò texô file®  Assurå  thaô  therå  ió -sufficienô  spacå oî thaô disë foò thå ne÷ version¬  anä givå  iô -the drive prefix and file name. - -Thå filå texô ió displayeä oî youò terminaì aó iô ió  read®  Non- -printable characters are substituted with ? - -Thå  prograí stopó executioî aô undefineó doô commands¬  sï  thaô -you may give a suitable number code at this point. - -Youò  ne÷  filå ió writteî iî chunkó oæ 4K®  Iô ió  calleä  .SET - - -WHAT DOES THE PROGRAM DO? - -Youò  WORDSTAÒ  texô ió read¬  characteò  bù  character®  Speciaì -wordstaò  featureó arå exchangeä witè speciaì symbols.Alì symboló -tï  bå  entereä  iî  thå  ne÷  texô  arå  reaä  froí  á  separatå -file:TYPESET.PRM®  Theså  parameteró caî bå changeä aô  will¬  tï -suiô  differenô typesetteò equipment®  Equippeä witè thå  correcô -parameters¬  thió  prograí  maù  alsï bå  usefuì  foò  convertinç -WORDSTAÒ textó tï á formaô accepteä bù otheò texô editors. - ŠThå olä filå ió lefô unchanged® Thå ne÷ filå witè suffiø .SEÔ haó -the following characteristics: - -*Onlù  onå blanë (oò otheò worä delimiteò oæ youò choice© betweeî - eacè word -*Additionaì whitespacå - blanë lineó anä characters¬  linå shiftó - withiî paragraphs- arå removed -*A special symbol marks end of every paragraph -*Headings¬  subtitleó  anä quotationó arå markeä aô beginninç anä - end -*Other features in the WORDSTAR text are standardized to ASCII. - -Thå  distributeä  versioî  oæ TYPESET.COÍ requireó á  filå  nameä -TYPESET.PRÍ  witè 2± parameteró iî it®  Theså parameteró arå  puô -intï thå ne÷ filå insteaä oæ thå correspondinç WORDSTAÒ symboì iî -thió list: - -.cp 10 -CONVERSION CODES FROM WS TO TYPESETTER SYMBOLS - -No  Doô commandó én WS- fiìe TYPESET.PRM - for LINOTRON 202N - --  .cð ø (conditional page shift© on-linå choice -1  .pá (new page) Bell c1> -2  .lè 1° (line height 1 1/2) ON: Bell c2> - OFF: Bell c5> -3  .lè ¸ (narrow lines) Bell c3> -´ .lè 1² (double spaced lines) Belì c4> -    After .lh 8: Bell c5> -________________________________________________________________ -.cp 20 Š   ASCII-code -No Heø dec. Function: TYPESET.PRM -    --  0¸ 0¸ BÓ Backspacå removed - -8  0² 0² Boldface ^Ð Â ON: Bell c¸> -9   OFF: Bell c9> - -10 1³ 1¹ underline on/off ^Ð Ó ON: Bell c10¾ -11 OFF: Bell c11> - -12 1´ 2° superscript on/off ^Ð T ON: 0· 3ã 75 32 hex -13 OFF: Bell c13> - -14 22 34 " quote symbol ON: 02 hex -15 OFF: 01 hex - -1· 1Å 3° sofô hypheî (noô printeä bù WS© À (means:removed© -17 1Æ 3± soft hyphen at end-of-line @ (means:removed) -    -18 0F 1µ non- breaë spacå ON: Bell c 15> - OFF:Bell c 15> - -19 8D SOFTLINÅ line shift within if only delimiter -    a paragraph between two words: 20 hex -    Else:removed. - -20 0D 1³ CÒ - new paragraph 1¶ 0³ 5E hex -    --  0á 1° LÆ (line feed -follows CR) removed -    -2± 0¹ 0¹  TAB 20 hex -______________________________________________________________________ -"Belì"  in this table means the character 07 hex. -________________________________________________________________ - -Thå  parameteró  giveî  iî  thió tablå  arå  thå  oneó  founä  iî -TYPESET.PRÍ  oî  thå  distributioî disk®  Theù  suiô  mù  printeò -contacô  anä  hió  LINOTROÎ 202Î prettù well®  Buô  theù  maù  bå -changeä  tï  anù  otheò symbol¬  oò  sequencå  oæ  symbols®  Eacè -sequencå oæ symboló iî TYPESET.PRÍ ió terminateä bù á CR-LF® Thió -meanó thaô thå CR-LÆ symboì itselæ caî noô bå á parameter®  Iô ió -representeä  bù  thå  symboì '$§  (2´  hex)¬  whicè  thå  prograí -interpretó aó á standarä end-of-paragrapè symbol(0ä 0á hex) Š -Thå  sigî  '@§  (4°  hex© iî TYPESET.PRÍ meanó  removaì  oæ  thaô -Wordstar feature. - -Parameteò  no®  6,·  anä  1¶ arå aô  disposaì  wheî  runninç  thå -program®  Doô  commandó thaô maù havå differenô meaninç accordinç -tï thå context¬  havå nï pre-determineä conversioî code® Exampleº -Iô thå prograí findó á '.cð 10§ symboì iî thå WORDSTAÒ  file¬  iô -wilì givå á BELÌ sigî tï thå terminal¬  anä requesô á numbeò froí -thå user® ° meanó thaô thió doô commanä shoulä bå ignored® Iæ thå -"conditionaì  page"- commanä  aô  thió spoô meanó  thaô  á  tablå -startó here¬  thå useò maù enteò symboì 6¬  anä telì thå typeset -tinç firí thaô symboì ¶ meanó starô oæ tables. - -PROGRAM CHANGES - -Iæ  you'ä  likå  tï adä tï thå lisô oæ Wordstaò  featureó  tï  bå -converted¬  you'ä  havå  tï compilå á ne÷ versioî oæ thå  TYPESEÔ -program® Exampleº You'ä likå tï changå alì {,ü anä ý tï somethinç -else® Iô requireó thå followinç changes: - -in the sequence CASE ord(ch) OF (*in procedure convert- line 257 *) - -you add: - -'{': Enter(22); -'|': Enter(23); -'}': Enter(24); - -CONSÔ no_of_codeó ½ 21» (Line 4© is changed to - -CONST no_of_codes = 24; (*three extra codes for {,|,}*) - -anä  thå  filå  TYPESET.PRÍ  ió  giveî  threå  additionaì  lines¬ -containing the symbols you'd like to have instead of {,| and }. - - -IS THE FINAL TEXT READY FOR PRINT? - -Somå finaì editinç bù thå typesettinç firí wilì bå necessary® Thå -codeó giveî bù thió prograí arå intermediate¬ anä arå switcheä tï -codeó  whicè  indicatå  characteò  fonts®   Pagå  sizå  anä  pagå -numberinç ió noô carrieä oveò froí thå WORDSTAÒ text® Theså finaì -toucheó  concerninç  lay-ouô  arå betteò lefô tï  thå  typesetteò Šprofessionals®  If¬ however¬ thå uså oæ underlininç anä differenô -linå  heightó  iî youò texô ió inconsistent¬  you'ä havå  tï  paù -extra foò re-editing® Somå advice: - -Agreå  witè youò typesetteò contacô firsô oî suitablå parameters® -Make sure that he can read your disk or cassette format. - -Start the text with a .lh 10 - this is interpreted as ordinary -line height - -use .lh 8 for quotations -use .pa for new chapters -Use underlining and boldface for sub-headings - -NON-COPYRIGHT NOTICE - -Thió  prograí ió aô disposaì foò non-commerciaì uså  bù  writers® -Your comments are welcome. - -Anù  publisheò oò printeò firí thaô consideró takinç thå  prograí -intï regulaò uså ió requesteä tï contacô må aô thå addresó above® -É mighô selì theí aî updateä oò custom-builô version® -  \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/TYPESET.PRM b/software/CPM/CPM19_MTPUG_07/TYPESET.PRM deleted file mode 100644 index 82d8d04af258ff088a53ac2af558c1951cca60b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZQiHnijAVox>#lg41u1WcNONi#5M4kj(Yq$QX%G=NZG-8Q90ATta>+L?H{7{MHn zP6sdxWRe0eml$&#n3h5TEkeSFGZ`=HF}&mxILpdl6fbvDF-@*OyHG1t?lqqvR7jA4 zflmk~odK3k2TBVAg-$AFf%%z0z6h9~1LkJ~`J!Nc9+;mC 20 THEN Enter(20); - (*The first RETURN is kept,following ones are removed*) - Dot; (* check for dot commands*) - END; (*IF*) - IF (count <1) OR (count>max) then writeln(count); - END; (*while not EOF and count < max *) - -(****************** WRITE PHASE ***************************) - Writeln; - WRITELN(' File ',navn,' is written - please wait'); - FOR idx := 1 TO count - 1 DO - BEGIN - d^ := buff[idx]; - put(d); - END; (*FOR*) - Count:=1; (*start a new buffer*) - END; (*while not eof*) - END; (*procedure convert*) - - (********************************************************** - MAIN PROGRAM **) - - BEGIN - REPEAT - write('Name of Wordstar- file: '); - readln(navn); - open(inn,navn,ior); - IF ior = 255 THEN - writeln('Cannot find ',navn); - UNTIL ior < 255; - I:=Pos('.',navn); - IF I>0 THEN delete(navn,I,length(navn)-I+1); - navn:=concat(navn,'.SET'); - open(ut,navn,ior); - IF ior <> 255 THEN - BEGIN - write('the file ',navn,' already exists. Should it be removed? (Y/N)'); - read(tegn); - readln; - IF not (tegn in ['Y','y']) THEN - @hlt; - END; - rewrite(ut); - assign(skjerm,'CON:'); - rewrite(skjerm); - open(par,'TYPESET.PRM',I); - IF i = 255 THEN - BEGIN - writeln('Cannot find "TYPESET.PRM" '); - @hlt; - END; - FOR i := 1 TO no_of_codes DO - BEGIN - IF eof(par) then writeln('not enough symbols in "TYPESET.PRM"') - ELSE readln(par,symbol[i]); - END; - writeln('Files are opened- conversion starts'); - IF not eof(inn) THEN - convert(inn,ut); - close(ut,ior); - IF ior < 255 THEN - writeln('file ',navn,' is written.'); - END. (*TYPESET*) - - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/UNLOCK.PAS b/software/CPM/CPM19_MTPUG_07/UNLOCK.PAS deleted file mode 100644 index c93a33d..0000000 --- a/software/CPM/CPM19_MTPUG_07/UNLOCK.PAS +++ /dev/null @@ -1,76 +0,0 @@ -MODULE KCOLNU; -{********************************************************************* - * UNLOCK * - * Date Author * - * 14-October-82 Sue Arnold * - * * - * This routine will unlock the record that you have locked so that * - * other programs may access the record that you have just locked * - * and written data to. * - * * - * An assembly routine (aunlck) will be called to actually unlock * - * the record after this routine moves the file_ID to the sector * - * buffer and sets the current DMA. * - * * - * This program requires that the rec# of the record to be locked be * - * in the FCB. To get it there, please access the record before * - * calling this routine via a "SEEKWRITE". (or something similiar). * - *********************************************************************} - - - {**************************************************************** - * follows is the format for the Pascal MT+ file information * - * block (FIB). It was modified for Ver 5.5 to include file * - * option type "fauxio". * - ****************************************************************} -TYPE - opttype = (notopen,fwrite,frdwr,frandom,fconio,ftrmio,flstout,fauxio); - buftype = PACKED ARRAY [0..127] OF CHAR; - - FIB= - RECORD - fname : STRING[16]; { d:filename.ext } - FCB : PACKED ARRAY [0..34] OF CHAR; { CP/M FILE CONTROL BLOCK } - buflen : INTEGER; { size of fbuffer } - bufidx : INTEGER; { current index into fbuffer } - option : opttype; - IOsize : INTEGER; { size of next transfer } - feoln : BOOLEAN; { TRUE if text file at end-of-line } - feof : BOOLEAN; { TRUE if at end-of-file } - fbufadr: WORD; { pointer to fbuffer } - fsecinx: 0..128; { index into fsector <+1 for overflow> } - ftext : BOOLEAN; { TRUE if this is a text file! } - nosectrs:BOOLEAN; { TRUE if no more disk room available } - fsector: buftype; { 1 sector buffer for CP/M } - fbuffer: PACKED ARRAY [0..0 ] OF CHAR; - END; - - - {**************************************************************** - * Here are bunches of external procedure declarations. * - ****************************************************************} -EXTERNAL PROCEDURE setDMA (VAR sector_buffer: buftype); - -EXTERNAL PROCEDURE aunlck (VAR ufile: FIB; - VAR lck_err: INTEGER); - -{**************************************************************** - * Procedure LOCK starts here: * - ****************************************************************} - -PROCEDURE unlock (VAR ufile : FIB; - file_ID : WORD; - VAR lck_err : INTEGER); - -BEGIN - {**************************************************************** - * First, put the file_ID number in the file sector buffer: * - * Then, call "alock" to lock the record. * - ****************************************************************} - MOVE (file_ID, ufile.fsector[0], 2); - setDMA( ufile.fsector ); - aunlck ( ufile, lck_err); - END; {procedure LOCK} - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/UOPEN.Z80 b/software/CPM/CPM19_MTPUG_07/UOPEN.Z80 deleted file mode 100644 index b334c17..0000000 --- a/software/CPM/CPM19_MTPUG_07/UOPEN.Z80 +++ /dev/null @@ -1,47 +0,0 @@ -TITLE NEPOU -; -; 9/22/82 Sue Arnold -; -; This is an assembly program that will create a file that may later be -; opened in UNLOCK mode. -; -; CALLING PROCEDURE= -; -; MAKE (VAR FCB.addr: file_descriptor; (ptr to the file FIB) -; VAR result: INTEGER); (ptr to err code variable) -; -; This routine uses XDOS function number 16h. -; - - PAGE - .Z80 -; -BDOSJP EQU 5 ; Use this to call XDOS -; -; - PAGE - PUBLIC UOPEN - CSEG -; -; -UOPEN: - POP HL ; HL = Pascal Return Address - POP DE ; DE = The addr of the error code variable - EX (SP), HL ; HL = The addr of the file descriptor - ; (top of stack now has the Pascal rtn addr) - EX DE, HL ; DE = The addr of the descriptor - ; HL = The addr of the err code variable - LD C,0FH ; OPEN function number - PUSH DE ; Save the addr of the descriptor - PUSH HL ; Save the error code addr - LD HL, 11H ; Add 17 to the address - ADD HL,DE ; To get the addr of the FCB within - EX DE,HL ; The file descriptor block - CALL BDOSJP ; Open the file - POP HL ; Restore error code addr - POP DE ; Restore file descriptor address - LD (HL), A ; Put error code in err code variable - RET ; Else, Return to calling routine -; - END UOPEN - \ No newline at end of file diff --git a/software/CPM/CPM19_MTPUG_07/USET.PAS b/software/CPM/CPM19_MTPUG_07/USET.PAS deleted file mode 100644 index a752824..0000000 --- a/software/CPM/CPM19_MTPUG_07/USET.PAS +++ /dev/null @@ -1,203 +0,0 @@ -MODULE SUERESET; -{********************************************************************* - * USET * - * Date Author * - * 04-October-82 Sue Arnold * - * * - * This is a modified version of Digital Research's Pascal MT+ * - * "RESET" procedure. It sets the "open in unlocked mode" attribute * - * bit (f5') in the FCB before calling "UOPEN" - an assembly * - * routine that replaces the @BDOS call that is normally used. * - * * - * Please note that after the OPEN the attribute bit will be reset * - * by the operating system. * - *********************************************************************} - - - {**************************************************************** - * follows is the format for the Pascal MT+ file information * - * block (FIB). It was modified for Ver 5.5 to include file * - * option type "fauxio". * - ****************************************************************} -TYPE - opttype = (notopen,fwrite,frdwr,frandom,fconio,ftrmio,flstout,fauxio); - - FIB= - RECORD - fname : STRING[16]; { d:filename.ext } - FCB : PACKED ARRAY [0..34] OF CHAR; { CP/M FILE CONTROL BLOCK } - buflen : INTEGER; { size of fbuffer } - bufidx : INTEGER; { current index into fbuffer } - option : opttype; - IOsize : INTEGER; { size of next transfer } - feoln : BOOLEAN; { TRUE if text file at end-of-line } - feof : BOOLEAN; { TRUE if at end-of-file } - fbufadr: WORD; { pointer to fbuffer } - fsecinx: 0..128; { index into fsector <+1 for overflow> } - ftext : BOOLEAN; { TRUE if this is a text file! } - nosectrs:BOOLEAN; { TRUE if no more disk room available } - fsector: PACKED ARRAY [0..127] OF CHAR; { 1 sector buffer for CP/M } - fbuffer: PACKED ARRAY [0..0 ] OF CHAR; - END; - -VAR - resultio : EXTERNAL INTEGER; - @LFB : EXTERNAL ^FIB; - - {**************************************************************** - * Here are bunches of external procedure declarations. * - ****************************************************************} -EXTERNAL PROCEDURE @DFLT; { to set Default DMA addr} -EXTERNAL FUNCTION @SPN(VAR ufile:FIB):BOOLEAN; -EXTERNAL FUNCTION @NOK(S :STRING):BOOLEAN; {parses file name} -EXTERNAL PROCEDURE @RNB; -EXTERNAL PROCEDURE CLOSE(VAR ufile:FIB; SZ:INTEGER;VAR result:INTEGER); -EXTERNAL PROCEDURE @HLT; {to abort task} -EXTERNAL PROCEDURE GET(VAR ufile:FIB; SZ:INTEGER); -EXTERNAL PROCEDURE uopen (VAR ufile: FIB; VAR result: INTEGER); - -{**************************************************************** - * Procedure USET starts here: * - ****************************************************************} - -PROCEDURE uset (VAR ufile : FIB; - bufsize : INTEGER; - VAR file_ID : INTEGER); - -VAR - result : INTEGER; - -BEGIN - @DFLT; { Set DMA Address } - {**************************************************************** - * Set the f5' attribute bit before we do anything else: * - ****************************************************************} - SETBIT (ufile.FCB[5], 7); {that's all there is to it} - {**************************************************************** - * If file write option set, then close the file first: * - ****************************************************************} - IF ufile.option = fwrite THEN - BEGIN { file write option } - CLOSE(ufile,bufsize,result); - IF result = 255 THEN - {************************************************* - * Do error handling required for bad file close:* - *************************************************} - BEGIN { can't close the file} - WRITELN; - WRITELN('UNABLE TO AUTOMATICALLY CLOSE: ',ufile.fname,' IN RESET'); - WRITELN; - WRITELN('PROGRAM ABORTED'); - @HLT {abort via @HLT} - END; { can' close the file} - END; { file write option } - - {**************************************************************** - * Put zeros in FCB entries 12-34 and set BUFLEN to zero: * - ****************************************************************} - FILLCHAR(ufile.FCB[12],25,CHR(0)); { PREPARE FOR OPEN } - {**************************************************************** - * Set the file option to indicate that it's not open: * - ****************************************************************} - ufile.option := NOTOPEN; - - {**************************************************************** - * If TEXT file, then indicate this in the FIB: * - ****************************************************************} - IF bufsize = -1 THEN { text file } - BEGIN { text file } - bufsize := -bufsize; - ufile.ftext := TRUE - END { TEXT FILE } - {**************************************************************** - * If not a text file, just set the text file boolean to FALSE * - ****************************************************************} - ELSE - ufile.ftext := FALSE; - - {**************************************************************** - * The following section of code sets up the default values for * - * the data in the file information block as follows: * - * * - * end-of-file = FALSE end-of-line = FALSE * - * FCB record count = 0 fsector index = 128 * - * there is room on disk file option = read/write * - * IOsize = bufsize (1?) buffer length = bufsize (1?) * - * fbufadr points to fbuffer * - * * - ****************************************************************} - ufile.feof := FALSE; - ufile.feoln := FALSE; { default these to FALSE } - ufile.FCB[32] := CHR(0); { set up next record field in FCB } - @LFB := ADDR(ufile); - ufile.fsecinx:= 128; { To force initial reads } - ufile.nosectrs := FALSE; { Initially sectors available } - ufile.option := FRDWR; { READ / WRITE } - ufile.IOsize := bufsize; - ufile.buflen := bufsize; - ufile.fbufadr := WRD(ADDR(ufile.fbuffer)); - - {**************************************************************** - * Now check the file name.. to see if there is one and if it * - * has the correct format: * - ****************************************************************} - IF (LENGTH(ufile.fname) = 0) OR NOT(@NOK(ufile.fname)) THEN - BEGIN { bad file name } - resultio := 255; - END { bad file name } - {**************************************************************** - * If the file name is OK then call XDOS to open the file IF it * - * is on a disk device after setting f5' * - ****************************************************************} - ELSE - BEGIN { see where the file is } - IF @SPN(ufile) THEN {=TRUE if CON:, LST:, KBD:, TRM: } - BEGIN { not on disk } - EXIT; {so we're done already} - END { not on disk } - ELSE - BEGIN { on disk } - SETBIT(ufile.FCB[5], 7); {mark the attribute bit} - uopen (ufile, resultio); - MOVE (ufile.FCB[33], file_ID, 2); {get file ID} - END { on disk } - END; { see where the file is } - - {**************************************************************** - * Add finishing touches to the FIB if we survived this far. * - ****************************************************************} - IF resultio <> 255 THEN { continue processing } - BEGIN - resultio := 0; - ufile.feof := FALSE; - ufile.feoln := FALSE; - ufile.buflen := bufsize; - {***************************************** - * Do an "initial GET" of who knows what:* - *****************************************} - IF bufsize <> 0 THEN { do an initial get } - BEGIN { buffer size not zero } - ufile.bufidx := 0; - IF ufile.ftext THEN - BEGIN { text file } - GET(@LFB^,@LFB^.buflen); - END { text file } - ELSE - BEGIN { not text file } - @RNB; - END; { not text file } - END { buffer size not zero } - END - {**************************************************************** - * We didn't make it... mark end-of-file in the FIB. * - * * - ****************************************************************} - ELSE - BEGIN {bad file name or unable to open} - ufile.feof := TRUE; - ufile.feoln := TRUE - END {bad file name or unable to open} -END; { newset } - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/-MTPUG.008 b/software/CPM/CPM20_MTPUG_08/-MTPUG.008 deleted file mode 100644 index e69de29..0000000 diff --git a/software/CPM/CPM20_MTPUG_08/-MTPUG.DOC b/software/CPM/CPM20_MTPUG_08/-MTPUG.DOC deleted file mode 100644 index b8f35e9..0000000 --- a/software/CPM/CPM20_MTPUG_08/-MTPUG.DOC +++ /dev/null @@ -1,65 +0,0 @@ -*** MTPUG.008 February 24, 1983 *** - - Multi-tasking under MP/M-86 using Pascal MT+86 - - Written and submitted by - Steve Clamage, - Ocean Technology, Inc. - 8755 Aero Drive Suite 310 - San Diego, CA 92123 - -Here is a package of information on how I have implemented real- -time multi-tasking under MP/M-86 using Pascal MT+86. I am not in -a position to provide detailed tutorials free to anyone who asks, -nor to field general questions from users. But I am glad to -share this with the MT Plus User's Group. The package consists -of the following: - -MPMUTIL.DOC Documentation -MPMUTIL.I86 Source code for use with the ASMT86 assembler -MPMUTIL.R86 Assembled version of the above -MPMTTIME.SRC Pascal source code illustrating the added - timing function -MPMTEST.SRC Pascal source code illustrating the use of - multi-tasking with the MPMUTIL package -MPMTESTQ.SRC Pascal source code illustrating the use of - MP/M message queues to synchronize tasks - -PASMAT.DOC A Wordstar format user's manual for Pasmat. - .CMD CP/M-86 Version - .COM CP/M-80 Version. Either version works on - MT+80 or MT+86 source code. -PMTEST.TST A scrambled Pascal program which tests MT+ features. -PMXREF.TST A Pascal program which kills the MT+ XREF program. - -*************************************************************** - - A set of graphic modules using MT+ - Written and submitted by: - J.A. Koehler - 2 Sullivan St. - Saskatoon, SK, S7H-3G8 - -DMP.SRC The graphical module -SERIO.SRC The I/O module which communicates with the - plotter. -CHROFF.DAT Data needed to plot the character set -CHRVE.DAT So far, upper case only. -TESTGR.SRC A test program to exercise the plotter. -WRDATA.SRC The program used to generate the .DAT files above. - -**************************************************************** - -ELEVATOR.PAS An elevator simulation program written by someone - .DOC in school taking a computer course. Program shows - .DAT how to get around a MT+ Bug involving calls to the - floating point routines with explicit reference to - the predeclared input files INPUT and OUTPUT. - There are three elevators in a 15 story building, - and this program simulates the pushing of the buttons - in the cars or on the floors. Submitted by - Larry D. Adkins - 56 Camille Lane - E. Patchogue, NY 11772 - - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/CHROFF.DAT b/software/CPM/CPM20_MTPUG_08/CHROFF.DAT deleted file mode 100644 index bb770cc6d2f25e12e72eb4bf4a438a0b11ec8146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmc)1F$w_y06@|Ii-n27AZ4LU%AlAG63MD06Il#W3=A?@q#VHkEXtrP$^~pLV6>Sm z3diuC1PBo&L7FT%@)Rj?{#K|`qfV1HJw{BJvtq-R9nJ5a14m9=xN_spgC{TE1PvQ8 gX2PT?Gv+K#;+GxLA>oT{D!#&i53ExQ z*%3K#VmZDDTlJa}P`xsCX#lP#ds<2Y|20Y_|-pzt%%rQp{dCpA8`}9>?QgzA_2SSagC_0bC zs!M6`P~gC#yY+CJ$A+Um2{tLRl4VNAdNP7FDB^yM0XaHVxh~K9f|8$z5cK`ScO*31o>SZ zM<(!gg-)$= oldleft.x) AND (pt.y >= oldleft.y); - END; (* isinwindow *) - - - - PROCEDURE plot(dest: apointtype; - how: alinetype; - endsym: aendtype); - (*------------------------------------------------------------------*) - (* Plots a line from the present position to 'dest' using the *) - (* pattern in 'how' and the end symbol in 'endsym'. The line is *) - (* constrained to stay within the current window. *) - (*------------------------------------------------------------------*) - - VAR - previous, (* pattern endpoints *) - temp: apointtype; - - i, (* pattern loop counter *) - number: INTEGER; (* # of patterns in line *) - - dx, (* pattern repeat spacing *) - dy, - len: REAL; (* line length *) - - - - PROCEDURE drawto(dest: apointtype); - (*----------------------------------------------------------------*) - (* Moves the pen to 'dest' with the pen specified by 'penlifted'.*) - (*----------------------------------------------------------------*) - - VAR - temp: apointtype; (* window crossing points *) - oldpen: BOOLEAN; - - - PROCEDURE plotpoint(at: apointtype); - (*--------------------------------------------------------------*) - (* Moves the pen to 'at'. *) - (*--------------------------------------------------------------*) - - VAR - xint, (* integer plotting values, *) - yint: INTEGER; (* between 0 and 779 or 1023 *) - - - PROCEDURE sendit(x,y:integer); - (* - Procedure to draw a line of dimensions (x,y) on the - DMP-2 plotter - *) - - var val:string; - j,z,e,t,i,d,f: integer; - - BEGIN - val:='pqrqrststuvuvwpw'; - f:=abs(x)+abs(y); - IF f<> 0 - THEN - BEGIN - d:=abs(y)-abs(x); - i:=0; - IF y > 0 THEN i :=2; - t := x+y; - IF t >= 0 THEN i := i+2; - t := y-x; - IF t >= 0 THEN i := i+2; - IF x < 0 - THEN i := i+10 - ELSE i := 8-i; - IF d >= 0 - THEN - BEGIN - t := abs(x); - d := -d; - END - ELSE t := abs(y); - e := 0; - REPEAT - z := t+d+e+e; - IF z >= 0 - THEN - BEGIN - e := e+d; - f := f-2; - serout(val[i]); - END - ELSE - BEGIN - e := e+t; - f := f-1; - serout(val[i-1]); - END; - UNTIL f <= 0; - END; - END; (* sendit *) - - - BEGIN (* plotpoint *) - xint := round((at.x-oldpt.x)* xfactor); - yint := round((at.y-oldpt.y)* yfactor); - sendit(xint,yint); - oldpt := at; - END; (* plotpoint *) - - - PROCEDURE interpolate(inside, - outside: apointtype; - VAR crossing: apointtype); - (*--------------------------------------------------------------*) - (* Finds the window crossing point on the line between 'inside'*) - (* and 'outside'. The result is returned in 'crossing'. *) - (*--------------------------------------------------------------*) - - - - FUNCTION vertcross(left, - right: apointtype; - midx: REAL): REAL; - (*------------------------------------------------------------*) - (* Finds the vertical crossing point at 'midx' on the *) - (* line between 'left' and 'right'. *) - (*------------------------------------------------------------*) - - BEGIN (* vertcross *) - vertcross := left.y + (right.y - left.y) * - (midx - left.x) / (right.x - left.x); - END; (* vertcross *) - - - - FUNCTION horcross(bottom, - top: apointtype; - midy: REAL): REAL; - (*------------------------------------------------------------*) - (* Finds the horizontal crossing point at 'midy' on the *) - (* line between 'bottom' and 'top'. *) - (*------------------------------------------------------------*) - - BEGIN (* horcross *) - horcross := bottom.x + (top.x - bottom.x) * - (midy - bottom.y) / (top.y - bottom.y); - END; (* horcross *) - - - - BEGIN (* interpolate *) - crossing.x := -1; (* indicate crossing not found *) - crossing.y := -1; - - IF outside.x < oldleft.x (* is it to the left? *) - THEN - BEGIN - crossing.x := oldleft.x; - crossing.y := vertcross(outside, inside, - oldleft.x); - END (* IF outside ... *) - ELSE IF outside.x > oldright.x (* or to the right? *) - THEN - BEGIN - crossing.x := oldright.x; - crossing.y := vertcross(inside, outside, - oldright.x); - END; (* ELSE IF outside.x ... *) - - IF NOT isinwindow(crossing) (* did we not find it yet? *) - THEN - IF outside.y < oldleft.y (* is it below? *) - THEN - BEGIN - crossing.y := oldleft.y; - crossing.x := horcross(outside, inside, - oldleft.y); - END (* IF outside ... *) - ELSE IF outside.y > oldright.y (* or above? *) - THEN - BEGIN - crossing.y := oldright.y; - crossing.x := horcross(inside, outside, - oldright.y); - END; (* ELSE IF outside.y ... *) - END; (* interpolate *) - - - - BEGIN (* drawto *) - - oldpen := penlifted; - IF isinwindow(lastpt) - THEN - IF isinwindow(dest) - THEN - plotpoint(dest) - ELSE - BEGIN - interpolate(oldpt, dest, temp); - plotpoint(temp); - END (* ELSE *) - ELSE { was not inside the window before } - IF isinwindow(dest) - - THEN - - IF oldpen THEN plotpoint(dest) ELSE - - BEGIN - interpolate(dest, lastpt, temp); - penup; - plotpoint(temp); - pendown; - plotpoint(dest); - END; - lastpt:=dest; - END; (* drawto *) - - - - PROCEDURE draw(what: aendtype); - (*----------------------------------------------------------------*) - (* Draws the endpoint symbol 'what' with size 'oldesize' *) - (* centered at the present position. *) - (*----------------------------------------------------------------*) - - VAR - origin, (* holds line endpoint *) - temp: apointtype; - - oldpenup: BOOLEAN; (* holds old penlifted *) - - - - PROCEDURE closed(initangle: REAL; - npoints: INTEGER); - (*--------------------------------------------------------------*) - (* Plots a polygon of size 'oldesize' with 'npoints' *) - (* corners starting at 'initangle' degrees clockwise from *) - (* vertical centered at 'origin'. *) - (*--------------------------------------------------------------*) - - VAR - i: INTEGER; (* corner counter *) - - angle: REAL; (* angle counter *) - - - BEGIN (* closed *) - FOR i := 0 to npoints DO - BEGIN - IF i = 0 - THEN - penup - ELSE IF penlifted - THEN - pendown; - angle := (initangle + i * (360.0 / npoints)) / radian; - temp.x := origin.x + ( oldesize * sin(angle)) / 2.0; - temp.y := origin.y + ( oldesize * cos(angle)) / 2.0; - drawto(temp); - END; (* FOR i ... *) - END; (* closed *) - - - - PROCEDURE open(initangle: REAL); - (*--------------------------------------------------------------*) - (* Plots a cross of size 'oldesize' with one axis at *) - (* 'initangle' clockwise from vertical centered at 'origin'. *) - (*--------------------------------------------------------------*) - - VAR - i, (* loop counters *) - j: INTEGER; - - angle, (* angle of a line segment *) - stangle: REAL; (* start angle of a line segment *) - - - BEGIN (* open *) - FOR j := 0 TO 1 DO - BEGIN - stangle := initangle + j * 90.0; - FOR i := 0 TO 1 DO - BEGIN - IF i = 0 - THEN - penup - ELSE - pendown; - angle := (stangle + i * 180.0) / radian; - temp.x := origin.x + ( oldesize * sin(angle)) / 2.0; - temp.y := origin.y + ( oldesize * cos(angle)) / 2.0; - drawto(temp); - END; (* FOR i ... *) - END; (* FOR j ... *) - END; (* open *) - - - - BEGIN (* draw *) - IF what <> noend - THEN - BEGIN - origin := oldpt; (* save endpoint *) - oldpenup := penlifted; (* and pen status *) - IF what IN [square, triangle, diamond, circle, cross, ecks] - THEN - CASE what OF - square: closed(45.0, 4); - triangle: closed(0.0, 3); - diamond: closed(0.0, 4); - circle: closed(0.0, 10); - cross: open(0.0); - ecks: open(45.0); - END (* CASE what *) - ELSE IF what = point - THEN - pendown; (* make a mark *) - - IF NOT penlifted (* return to last endpoint *) - THEN - penup; - drawto(origin); (* also resets vector mode *) - IF NOT oldpenup - THEN - pendown - ELSE - penup; - END; (* IF what... *) - END; (* draw *) - - - - PROCEDURE pltpat(source, - dest: apointtype); - (*----------------------------------------------------------------*) - (* Plots the a line segment of the pattern 'how' from 'source' *) - (* to 'dest'. *) - (*----------------------------------------------------------------*) - - VAR - p1, (* pattern fraction endpoints *) - p2, - p3: apointtype; - - dx, (* pattern fraction increment *) - dy: REAL; - - - BEGIN (* pltpat *) - CASE how OF - dotted: BEGIN - IF NOT penlifted - THEN - penup; - drawto(dest); - draw(point); - END; (* dotted: *) - dashed: BEGIN - p1.x := (source.x + dest.x) / 2.0; - p1.y := (source.y + dest.y) / 2.0; - IF NOT penlifted - THEN - penup; - drawto(p1); - pendown; - drawto(dest); - END; (* dashed: *) - dotdashed: BEGIN - dx := (dest.x - source.x) / 3.0; - dy := (dest.y - source.y) / 3.0; - p1.x := source.x + dx; - p2.x := p1.x + dx; - p1.y := source.y + dy; - p2.y := p1.y + dy; - IF NOT penlifted - THEN - penup; - drawto(p1); - draw(point); - drawto(p2); - pendown; - drawto(dest); - END; (* dotdashed: *) - dotdotdashed: BEGIN - dx := (dest.x - source.x) / 4.0; - dy := (dest.y - source.y) / 4.0; - p1.x := source.x + dx; - p2.x := p1.x + dx; - p3.x := p2.x + dx; - p1.y := source.y + dy; - p2.y := p1.y + dy; - p3.y := p2.y + dy; - IF NOT penlifted - THEN - penup; - drawto(p1); - draw(point); - drawto(p2); - draw(point); - drawto(p3); - pendown; - drawto(dest); - END; (* dotdotdashed: *) - END; (* CASE how *) - END; (* pltpat *) - - - - BEGIN (* plot *) - IF dest.x > absmaxx - THEN - dest.x := absmaxx - ELSE IF dest.x < (0 - absmaxx) - THEN - dest.x := (0 - absmaxx); - IF dest.y > absmaxy - THEN - dest.y := absmaxy - ELSE IF dest.y < (0 - absmaxy) - THEN - dest.y := (0 - absmaxy); - - IF how IN [noline, solid] (* segmenting not needed *) - THEN - BEGIN - IF how = noline - THEN - penup - ELSE - pendown; - drawto(dest); - END (* IF how ... *) - ELSE - BEGIN - len := sqr(oldpt.x - dest.x) + sqr(oldpt.y - dest.y); - IF len > 0.25 (* make sure won't bomb on *) - THEN (* underflow *) - len := sqrt(len) - ELSE - len := 0; - number := 1 + trunc(len / oldrptlength); - dx := (dest.x - oldpt.x) / number; - dy := (dest.y - oldpt.y) / number; - previous := oldpt; - FOR i := 1 TO number DO - BEGIN - temp.x := previous.x + dx; - temp.y := previous.y + dy; - pltpat(previous, temp); - previous := temp; - END; (* FOR i ... *) - END; (* ELSE *) - - draw(endsym); - END; (* plot *) -(*$E+*) - - FUNCTION abadcall: BOOLEAN; - (*------------------------------------------------------------------*) - (* Returns TRUE if something is wrong with a procedure call. Not *) - (* implemented. *) - (*------------------------------------------------------------------*) - - BEGIN (* abadcall *) - abadcall := FALSE; - END; (* abadcall *) - - - PROCEDURE adefault; - (*------------------------------------------------------------------*) - (* Sets all globals to their default values. *) - (*------------------------------------------------------------------*) - - BEGIN (* adefault *) - oldchrspace:=3.0; - oldchrheight:=3.5; - oldchrwidth:=3.0; - oldchrangle:=0.0; - oldstringangle:=0.0; - oldend := noend; (* simple line *) - oldesize := 3.0; - oldrptlength := 5.0; - oldline := noline; - oldleft.x := minx; (* window size to full screen *) - oldleft.y := miny; - oldright.x := maxx; - oldright.y := maxy; - END; (* adefault *) - - - - PROCEDURE agraph; - (*------------------------------------------------------------------*) - (* Does nothing *) - (*------------------------------------------------------------------*) - - BEGIN (* agraph *) - END; (* agraph *) - - - - PROCEDURE ainit; - (*------------------------------------------------------------------*) - (* Initializes the I/O to the DMP-2 plotter, the character set, *) - (* sets all paramters to their default values, and places the pen *) - (* in the lower left-hand corner. *) - (*------------------------------------------------------------------*) - - - VAR ch: CHAR; - - result: INTEGER; - - x: FILE OF roff; - y: FILE OF vec; - - BEGIN (* ainit *) - assign(x,'A:CHROFF.DAT'); - reset(x); - IF ioresult = 255 - THEN - BEGIN - assign(x,'B:CHROFF.DAT'); - reset(x); - IF ioresult = 255 - THEN - BEGIN - writeln('Cannot find CHROFF.DAT'); - @hlt; - END; - END; - chroff:=x^; - close(x,result); - assign(y,'A:CHRVEC.DAT'); - reset(y); - IF ioresult = 255 - THEN - BEGIN - assign(y,'B:CHRVEC.DAT'); - reset(y); - IF ioresult = 255 - THEN - BEGIN - writeln('Cannot find CHRVEC.DAT'); - @hlt; - END; - END; - chrvec:=y^; - close(y,result); - initac; - penup; - adefault; - agraph; - oldpt.x:=0.0; - oldpt.y :=0.0; - lastpt:=oldpt; - writeln('Set plotter to lower left corner, type anything when ready'); - read(ch); - END; (* ainit *) - - - - PROCEDURE amakecopy; - (*------------------------------------------------------------------*) - (* Does nothing *) - (*------------------------------------------------------------------*) - - BEGIN (* amakecopy *) - END; (* amakecopy *) - - - - PROCEDURE aplot(endpoint: apointtype); - (*------------------------------------------------------------------*) - (* Plots to 'endpoint' using line type 'oldline' and end type *) - (* 'oldend'. *) - (*------------------------------------------------------------------*) - - BEGIN (* aplot *) - plot(endpoint, oldline, oldend); - END; (* aplot *) - - - - PROCEDURE asetplot(line: alinetype; - repeatlength, - endsize: REAL; - endsymbol: aendtype); - (*------------------------------------------------------------------*) - (* Sets the characteristics of the line(s) to be plotted next. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetplot *) - oldline := line; - oldrptlength := repeatlength; - oldesize := endsize; - oldend := endsymbol; - END; (* asetplot *) - - - - PROCEDURE asetstr(charheight, - charwidth, - charangle, - charspace, - strangle: REAL); - (*------------------------------------------------------------------*) - (* Sets the characteristics of the next string(s) to be plotted. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetstr *) - oldchrheight:=charheight; - oldchrwidth:=charwidth; - oldchrangle:=charangle; - oldchrspace:=charspace; - oldstringangle:=strangle; - END; (* asetstr *) - - - - PROCEDURE asetwindow(lowerleft, - upperright: apointtype); - (*------------------------------------------------------------------*) - (* Sets the window size. Nothing will appear outside this window. *) - (*------------------------------------------------------------------*) - - BEGIN (* asetwindow *) - oldleft := lowerleft; - oldright := upperright; - IF lowerleft.x < minx - THEN - oldleft.x := minx; - IF lowerleft.y < miny - THEN - oldleft.y := miny; - IF upperright.x > maxx - THEN - upperright.x := maxx; - IF upperright.y > maxy - THEN - upperright.y := maxy; - END; (* asetwindow *) - - - - PROCEDURE asize(VAR size: apointtype); - (*------------------------------------------------------------------*) - (* Returns the size of the display in mm. *) - (*------------------------------------------------------------------*) - - BEGIN (* asize *) - size.x := maxx - minx; - size.y := maxy - miny; - END; (* asize *) - - - - PROCEDURE astr(str: astringtype); - (*------------------------------------------------------------------*) - (* writes the string 'str' out to plotter *) - (*------------------------------------------------------------------*) - - TYPE - - pen = (down,up); - - moves = RECORD - number:integer; - x,y: ARRAY [1..15] of REAL; - how: ARRAY [1..15] of pen; - END; (* record *) - - - VAR i,j,nchr: integer; - init,temp: apointtype; - co_ord: moves; - - PROCEDURE rotandmake(ch:CHAR;height,width,angle:REAL;VAR co_ord:moves - ); - (* makes up a set of moves in order to plot the character *) - - VAR sine,cosine,tempx,tempy: REAL; - i: INTEGER; - - PROCEDURE getch(ch:char;var vals:moves); - - VAR n,i,j,beg,last,val: INTEGER; - - BEGIN - val := ord(ch)-32; - while val>63 do val:=val-32; { remove lower case char. } - if (val>0) and (val<64) - THEN - BEGIN - beg:=chroff[val]; - if beg < 0 then beg := 0-beg; - last := chroff[val+1]; - if last < 0 then last := 0 - last; - last := last - 1; - FOR i :=beg to last do - BEGIN - j:=i+1-beg; - n := chrvec[i]; - if n < 0 then n := (-1)*n; - vals.x[j]:=n div 10; - vals.y[j]:=n mod 10; - if chroff[val] < 0 then vals.y[j]:=vals.y[j]-4.0; - if (i=beg) or (chrvec[i]<0) - THEN vals.how[j]:=up - ELSE vals.how[j]:=down; - END; - vals.number := last+1-beg; - END; - END; (* getch *) - - BEGIN - sine:=sin(angle/radian); - cosine:=cos(angle/radian); - getch(ch,co_ord); - FOR i := 1 TO co_ord.number - DO - BEGIN - tempx:=co_ord.x[i]*width/10.0; - tempy:=co_ord.y[i]*height/10.0; - co_ord.x[i]:=tempx*cosine-tempy*sine; - co_ord.y[i]:=tempy*cosine+tempx*sine; - END; - END; - - BEGIN (* astr *) - nchr:=length(str); - FOR i := 1 to nchr - DO - BEGIN - init:=oldpt; - if str[i]<>' ' - THEN - BEGIN - rotandmake(str[i],oldchrheight,oldchrwidth, - oldchrangle,co_ord); - FOR j:=1 TO co_ord.number - DO - BEGIN - temp.x:=init.x+co_ord.x[j]; - temp.y:=init.y+co_ord.y[j]; - IF co_ord.how[j]=up - THEN plot(temp,noline,noend) - ELSE plot(temp,solid,noend); - END; - END; - temp.x:=init.x+oldchrspace*cos(oldstringangle/radian); - temp.y:=init.y+oldchrspace*sin(oldstringangle/radian); - plot(temp,noline,noend); - END; - END; (* astr *) - - - - PROCEDURE atext; - (*------------------------------------------------------------------*) - (* Does nothing in this implementation *) - (*------------------------------------------------------------------*) - - BEGIN (* atext *) - END; (* atext *) - - - - PROCEDURE awhere(VAR where: apointtype; - VAR inwindow: BOOLEAN); - (*------------------------------------------------------------------*) - (* Returns the current locatation and whether it's inside the *) - (* window. *) - (*------------------------------------------------------------------*) - - BEGIN (* awhere *) - where := oldpt; - inwindow := isinwindow(oldpt); - END; (* awhere *) -modend. - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/ELEVATOR.CMD b/software/CPM/CPM20_MTPUG_08/ELEVATOR.CMD deleted file mode 100644 index 3be4cc5..0000000 --- a/software/CPM/CPM20_MTPUG_08/ELEVATOR.CMD +++ /dev/null @@ -1 +0,0 @@ -b:elevator,b:fpreals/s,paslib/s \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/ELEVATOR.DAT b/software/CPM/CPM20_MTPUG_08/ELEVATOR.DAT deleted file mode 100644 index e31d95f..0000000 --- a/software/CPM/CPM20_MTPUG_08/ELEVATOR.DAT +++ /dev/null @@ -1,8 +0,0 @@ -2 8 13 -0.105 0.0 0.2 0.01 0.018 0.018 0.018 0.018 0.018 0.018 -0.019 0.011 0.01 0.01 0.03 0.02 0.01 0.02 0.011 0.010 -0.012 0.021 0.02 0.03 0.04 0.05 0.06 0.07 0.0 0.255555 -0.1 0.3 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.25 0.3 -40 -20000 - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/ELEVATOR.PAS b/software/CPM/CPM20_MTPUG_08/ELEVATOR.PAS deleted file mode 100644 index a39d645..0000000 --- a/software/CPM/CPM20_MTPUG_08/ELEVATOR.PAS +++ /dev/null @@ -1,773 +0,0 @@ -{############################################################################# -#### File name: ELEVATOR.PAS -#### Module name: MSC-elevator. -#### Support modules reqd: . -#### Run time environment: Digital Research's CP/M -#### 8080 CPU. -#### Compile time environment: Digital Research's Pascal/MT+ 5.2 -#### Copyright (c) 1981 by Lawrence Adkins. -#### Program development history: -#### 29-Apr-82 Program created. -#### 1-May-82 Changes made to allow scheduling of non-busy elevators, and -#### to idle those that are both non_busy and not scheduled. -#### 3-May-82 More improvements to the scheduling algorithms. -#### (Last update on: 03-May-82) -##############################################################################} - -{############################################################################## -#### This program simulates a system of several elevators all in operation -#### within a high-rise building. The program cannot do any special I/O, -#### and is therefore unable to replace the conventional relay networks -#### presently controlling most elevators. The program runs in batch mode. -#### 1-May changes: Any passengerless, unassigned elevator -#### (during each time interval) will be assigned any most extreme floor -#### (should one exist) where a floor call has been made which originated -#### at a floor in the direction of the elevator, but which indicated that the -#### direction had to be reverse. I.e, curr_floor = 6, direction = down, call -#### from floor 2 to to go up. Passengerless elevators which see -#### no floor calls originating and indicating the current direction (i.e., -#### curr_floor = 6, direction = down, call from 3 to go down), did not prev- -#### iously assign themselves, nor cannot currently assign themselves a floor -#### would be required to cease motion. Once any elevator opens its doors at -#### a floor, and both button lights go out, that floor's assigned elevator -#### field must be reset to zero. -##############################################################################} - - - -PROGRAM elevator_system (* VAR input, output: text *); - -CONST - bottom_floor = 1; { lowest floor elevator goes to } - top_floor = 15; { highest floor elevator goes to } - max_elevators = 3; { number of elevators in the system } - -TYPE - motion = (down, up); { the only two ways an elevator moves } - action = (door_open, in_motion); { ... and the only two states... } - t_elevator_info = RECORD - curr_floor : bottom_floor..top_floor; - fire_exit : bottom_floor..top_floor; - direction : motion; - status : action; - button_bank: ARRAY [bottom_floor..top_floor] OF boolean; - END; - t_floor_info = RECORD - up_button : boolean; - down_button: boolean; - prob_up_button_pushed: real; - prob_down_button_pushed: real; - prob_this_floor_is_destination: real; - nb_elev_serving_this_request: 0..max_elevators; - END; - - -VAR - elev_cars : ARRAY [1..max_elevators] OF t_elevator_info; - { our three elevator cars and associated shafts } - elev_foyers: ARRAY [bottom_floor..top_floor] OF t_floor_info; - { our foyers on fifteen stories each with - three elevator entrances and a pair of buttons } - clock: integer; { measures intervals of (lets say) five seconds } - bldg_on_fire: boolean; { at this point always false, but if there - was a sensor, would bring elevators to exit floor } - max_time: integer; { our elevator cannnot run forever- it must cease to - to function when clock exceeds this value } - shaft: integer; { a temporary holding an elevator/shaft number } - seed_for_random_number_generator: real; - infil: text; - outfil: text; - -{############################################################################## -#### Assumed structure of input text data file... -#### The first three inputs are integers indicating the floor where each -#### elevator will be initially positioned. (Preferably fire exit floors.) -#### The next fifteen pairs of inputs are real floating point numbers -#### representing the probabilities of the 'UP' and 'DOWN' buttons in -#### that order) being pushed for the respective floors 1..15. -#### The next fifteen inputs are real floating point numbers representing -#### the probabilities of the buttons in the elevators, for floors 1 thru -#### 15, respectively, whenever passengers enter the elevator. -#### The next input is an integer representing the number of time units for -#### which to run the simulation. -#### The last expected input is an integer between 1 and 65256 to be used -#### as an initial seed for the random number generator. -##############################################################################} - - - - -PROCEDURE initialize (VAR input, output: text); FORWARD; - PROCEDURE init_elev_cars (VAR input, output: text); FORWARD; - PROCEDURE print_legend (VAR output: text); FORWARD; - PROCEDURE init_up_down_probabilities (VAR input, output: text); FORWARD; - PROCEDURE init_floor_selection_probabilities (VAR input,output:text);FORWARD; -PROCEDURE print_status_board (VAR output: text); FORWARD; - PROCEDURE print_elev_car_status (VAR output: text); FORWARD; -PROCEDURE h1andle_requests_for_elevator_usage (VAR output: text); FORWARD; - FUNCTION random_num (VAR seed: real): real; FORWARD; -PROCEDURE perform_a_single_operation (shaft: integer; VAR output:text);FORWARD; - FUNCTION listed_in_floor_table (shaft: integer; VAR floor: integer) - : boolean; FORWARD; - FUNCTION must_continue_in_same_direction (shaft: integer): boolean; FORWARD; - FUNCTION against_stops (shaft: integer): boolean; FORWARD; - FUNCTION no_passengers (shaft: integer): boolean; FORWARD; - FUNCTION reason_to_open_door (shaft: integer): boolean; FORWARD; - FUNCTION other_floor_calls (shaft: integer): boolean; FORWARD; - PROCEDURE h2andle_an_emergency (shaft: integer; VAR output: text); FORWARD; - PROCEDURE open_elevator_door (shaft: integer; VAR output: text); FORWARD; - PROCEDURE pick_destination_floors (shaft: integer;VAR output:text);FORWARD; - FUNCTION could_provide_service (shaft: integer): boolean; FORWARD; - - - - - - - -{############################################################################## -#### Initialize probabilities by reading from data file. -#### Data file is read from only at initialization time. -#### Range checking is done on most read-in values, with errors -#### generating messages and replacing with arbitrary permissable values. -#### Initialize elevator system data structures. -##############################################################################} -PROCEDURE initialize (* VAR input, output: text *); - - BEGIN - writeln (output, ' ---- SIMULATION OF AN ELEVATOR SYSTEM. ---- '); - writeln (output); - print_legend (output); - writeln (output); - init_elev_cars (input, output); - writeln (output); - init_up_down_probabilities (input, output); - writeln (output); - init_floor_selection_probabilities (input, output); - writeln (output); - read (input, max_time); - IF (max_time < 0) OR (max_time > 1000) - THEN BEGIN - writeln (output, 'Data error. Illegal MAX_TIME of ', max_time:6); - max_time := 5 - END; - writeln (output, 'MAX_TIME is ', max_time:6); - read (input, seed_for_random_number_generator); - IF (seed_for_random_number_generator < 1.0) - OR (seed_for_random_number_gernerator > 65256.0) - THEN BEGIN - writeln (output, 'Data error. Illegal SEED of ', - seed_for_random_number_generator:15); - seed_for_random_number_generator := 127.0 - END; - writeln (output, 'Random number generator SEED is ', - seed_for_random_number_generator:15); - bldg_on_fire := false - END; - - - -PROCEDURE print_legend (* VAR output: text *); - - BEGIN - writeln (output, 'In the maps which follow the following legend applies:'); - writeln (output, ' Given this sample output,'); - writeln (output, - '1 floor 1 2 3 4 5 6 7 8 9 10...'); - writeln (output, '2'); - writeln (output, - '3 up calls > . . . . > . . . .'); - writeln (output, '4'); - writeln (output, - '5 car 1 -> . 1 . . . . . . . +'); - writeln (output, - '6 car 2 -> . . . . . . . 2 + .'); - writeln (output, - '7 car 3 <- + . . < . . . . . .'); - writeln (output,'8'); - writeln (output, - '9 down calls . . . < . . . . . .'); - writeln (output); - writeln (output,'where, in lines 3 and 9 the arrows represent calls, and'); - writeln (output,'dots represent no calls. In lines 5 thru 7, plusses'); - writeln (output,'represent buttons pushed within the elevator, digits'); - writeln (output,'represent elevators which have opened their doors, while'); - writeln (output,'arrows here represent elevators passing by a floor w/o'); - writeln (output,'stopping. Dots here indicate no elevators or buttons '); - writeln (output,'not pushed from within the elevator.'); - END; - - -{############################################################################## -#### Initialization of the elev_cars array. Probabilities read from input -#### file, other fields initialized with predetermined values. -##############################################################################} -PROCEDURE init_elev_cars (* VAR input, output: text *); - - VAR shaft, floor, pres_floor: integer; - BEGIN - writeln (output, 'Initial elevator floor assignments. '); - writeln (output, 'elevator':10, 'floor':10); - FOR shaft := 1 TO max_elevators - DO WITH elev_cars [shaft] - DO BEGIN - read (input, pres_floor); - IF (pres_floor < bottom_floor) OR (pres_floor > top_floor) - THEN BEGIN - writeln (output, 'Data error. Illegal initial floor # ', - pres_floor:3, ' for elevator ', shaft:2); - pres_floor := bottom_floor - END; - curr_floor := pres_floor; - writeln (output, shaft:10, curr_floor:10); - direction := up; - status := door_open; - fire_exit := curr_floor; - FOR floor := bottom_floor TO top_floor - DO button_bank [floor] := false - END - END; - - - -{############################################################################## -#### Initialize most portions of the elev_foyer array, with probabilities -#### read from the input file, and other fields assigned predetermined values. -##############################################################################} -PROCEDURE init_up_down_probabilities (* VAR input, output: text *); - - VAR floor: integer; - BEGIN - writeln (output, 'Initial elevator foyer up-down button probability', - ' assignments.'); - writeln (output, 'floor':10, 'up':15, 'down':15); - FOR floor := bottom_floor TO top_floor - DO WITH elev_foyers [floor] - DO BEGIN - up_button := false; - down_button := false; - nb_elev_serving_this_request := 0; - read (input, prob_up_button_pushed, prob_down_button_pushed); - IF (prob_up_button_pushed < 0.0) OR (prob_up_button_pushed > 1.0) - THEN BEGIN - writeln (output, 'Data error. Illegal UP selection probability', - ' of ', prob_up_button_pushed:15, ' for floor ', floor:3); - prob_up_button_pushed := 0.0 - END; - IF (prob_down_button_pushed < 0.0) OR (prob_down_button_pushed > 1.0) - THEN BEGIN - writeln (output, 'Data error. Illegal DOWN selection', - ' probability of ', prob_down_button_pushed:15, ' for floor ', - floor:3); - prob_down_button_pushed := 0.0 - END; - writeln (output, floor:10, prob_up_button_pushed:15, - prob_down_button_pushed:15) - END - END; - - - -{############################################################################## -#### Read one more set of probabilities from the input text file. -##############################################################################} -PROCEDURE init_floor_selection_probabilities (* VAR input, output: text *); - - VAR floor: integer; - BEGIN - writeln (output, 'Initial floor selection probability assignments. '); - writeln (output, 'floor':10, 'selection':15); - FOR floor := bottom_floor TO top_floor - DO WITH elev_foyers [floor] - DO BEGIN - read (input, prob_this_floor_is_destination); - IF (prob_this_floor_is_destination < 0.0) - OR (prob_this_floor_is_destination > 1.0) - THEN BEGIN - writeln (output, 'Data error. Illegal FLOOR selection ', - 'probability of ', prob_this_floor_is_destination:15, - ' for floor ', floor:3); - prob_this_floor_is_destination := 0.0 - END; - writeln (output, floor:10, prob_this_floor_is_destination:15) - END - END; - - - - -{############################################################################## -#### Give a sort of pictorial view of the status of the elevator system, -#### showing present positions, floors where buttons were pushed, etc. -#### Given this sample output, -###1 floor 1 2 3 4 5 6 7 8 9 10... -###2 -###3 up calls > . . . . > . . . . -###4 -###5 car 1 -> . 1 . . . . . . . + -###6 car 2 -> . . . . . . . 2 + . -###7 car 3 <- . . . < . . . . . . -###8 -###9 down calls . . . < . . . . . . -#### -#### where, in lines 3 and 9 the arrows represent calls, and dots represent -#### no calls. In lines 5 thru 7, plusses represent buttons pushed within -#### the elevator, digits represent elevators which have opened their doors, -#### while arrows here represent elevators passing by a floor w/o stopping. -##############################################################################} -PROCEDURE print_status_board (* VAR output: text *); - - CONST s = 3; { so that board fits on 80 column screen. } - VAR floor: integer; - BEGIN - writeln (output); writeln (output); - write (output, 'floor':15); - FOR floor := bottom_floor TO top_floor - DO write (output, floor:4); - writeln (output); writeln (output); - - write (output, 'up calls':15); - FOR floor := bottom_floor TO top_floor - DO WITH elev_foyers [floor] - DO IF up_button - THEN write (output, '>':s) - ELSE write (output, '.':s); - writeln (output); writeln (output); - - print_elev_car_status (output); - - write (output, 'down calls':15); - FOR floor := bottom_floor TO top_floor - DO WITH elev_foyers [floor] - DO IF down_button - THEN write (output, '<':s) - ELSE write (output, '.':s); - writeln (output); writeln (output); writeln (output) - END; - - - -{############################################################################## -#### Print a line pertaining to the status of a single elevator car. -##############################################################################} -PROCEDURE print_elev_car_status (* VAR output: text *); - - CONST s = 3; { so that board fits in 80 cols on screen } - VAR shaft, floor: integer; - BEGIN - FOR shaft := 1 TO max_elevators - DO WITH elev_cars [shaft] - DO BEGIN - write (output, 'car ':8, shaft:2); - IF direction = up - THEN write (output, '->':5) - ELSE write (output, '<-':5); - FOR floor := bottom_floor TO top_floor - DO IF (curr_floor = floor) - THEN IF status = door_open - THEN write (output, shaft:4) - ELSE IF direction = up - THEN write (output, '>':s) - ELSE write (output, '<':s) - ELSE IF button_bank [floor] - THEN write (output, '+':s) - ELSE write (output, '.':s); - writeln (output) - END; - writeln (output) - END; - - - -{############################################################################## -#### Figure out which buttons were pressed in every foyer (what I call the -#### hall space the elevators open into). -##############################################################################} -PROCEDURE h1andle_requests_for_elevator_usage (* VAR output: text *); - - VAR floor,shaft: integer; - r: real; - b: boolean; - BEGIN - FOR floor := bottom_floor TO top_floor - DO WITH elev_foyers [floor] - DO BEGIN - r := random_num (seed_for_random_number_generator); - IF r < prob_up_button_pushed - THEN BEGIN - up_button := true; - writeln (output, 'Up call on floor ', floor:4) - END; - r := random_num (seed_for_random_number_generator); - IF r < prob_down_button_pushed - THEN BEGIN - down_button := true; - writeln (output, 'Down call on floor ', floor:4) - END - END; - FOR shaft := 1 TO max_elevators - DO b:= could_provide_service (shaft) - END; - - - -{############################################################################## -#### Generate the pseudo random number such that 0 <= random_num <= 1 -##############################################################################} -FUNCTION random_num (* VAR seed: real): real *); - - CONST modulus = 65536.0; - multiplier = 25173.0; - increment = 13849.0; - VAR temp: real; - BEGIN - temp := ((multiplier * seed) + increment); { MOD modulus } - temp := temp / modulus; - seed := (temp - trunc (temp)) * modulus; - random_num := seed / modulus - END; - - - -{############################################################################## -#### Do what is considered a legal operation for an elevator within the -#### time interval assumed (say, 5 secs.) -##############################################################################} -PROCEDURE perform_a_single_operation (* shaft: integer; VAR output: text *); - - VAR i, floor1: integer; - busy : boolean; - BEGIN - busy := true; i := 0; - REPEAT - i := i + 1; - WITH elev_cars [shaft] - DO IF bldg_on_fire - THEN h2andle_an_emergency (shaft, output) - ELSE IF reason_to_open_door (shaft) - THEN open_elevator_door (shaft, output) - ELSE IF must_continue_in_same_direction (shaft) - OR (no_passengers (shaft) - AND NOT against_stops (shaft) - AND listed_in_floor_table (shaft, floor1)) - THEN BEGIN { move a floor up or down } - status := in_motion; - IF direction = down - THEN curr_floor := curr_floor - 1 - ELSE curr_floor := curr_floor + 1 - END - ELSE IF busy - THEN BEGIN { turn around, but dont move } - busy := false; - status := in_motion; - IF direction = down - THEN direction := up - ELSE direction := down - END - UNTIL busy OR (i = 2) - END; - - - -{############################################################################## -#### Return true if elevator (shaft) scheduled to stop at any floor along its -#### path -##############################################################################} -FUNCTION listed_in_floor_table (* shaft:integer; VAR floor:integer):boolean *); - - VAR b: boolean; - BEGIN - floor := bottom_floor - 1; - REPEAT - floor := floor + 1; - b := elev_foyers [floor].nb_elev_serving_this_request = shaft - UNTIL (floor >= top_floor) OR b; - listed_in_floor_table := b; - END; - - - -{############################################################################## -#### Determine if we must travel further before turning direction. -#### Normally, when the elevator is busy, we return true only if there are -#### people in the foyers of the floors in the elevator's current direction -#### waiting to travel further on in the same direction. -##############################################################################} -FUNCTION must_continue_in_same_direction (* shaft: integer) : boolean *); - - VAR b: boolean; - floor: integer; - BEGIN - b:= false; - IF NOT against_stops (shaft) - THEN WITH elev_cars[shaft] - DO IF direction = up - THEN FOR floor := curr_floor+1 TO top_floor - DO b := b OR button_bank [floor] - OR elev_foyers [floor].up_button - ELSE FOR floor := curr_floor-1 DOWNTO bottom_floor - DO b := b OR button_bank [floor] - OR elev_foyers [floor].down_button; - must_continue_in_same_direction := b; - END; - - - - -{############################################################################## -#### Determine if the elevator cannot go any further in the same direction. -##############################################################################} -FUNCTION against_stops (* shaft: integer): boolean *); - - BEGIN - WITH elev_cars [shaft] - DO against_stops := ((curr_floor = bottom_floor) AND (direction = down)) - OR ((curr_floor = top_floor ) AND (direction = up)) - END; - - - -{############################################################################## -#### Return true if NO buttons remain lit (unserviced) within the elevator car -##############################################################################} -FUNCTION no_passengers (* shaft: integer): boolean *); - - VAR floor: integer; - b: boolean; - BEGIN - b := false; - WITH elev_cars [shaft] - DO FOR floor := bottom_floor TO top_floor - DO b := b OR button_bank [floor]; - no_passengers := NOT b; - END; - - - -{############################################################################## -#### Return true if there stands good reason why the door should be opened. -#### Either a passenger wants to get out, or people outside want a ride along -#### the current direction. -##############################################################################} -FUNCTION reason_to_open_door (* shaft: integer): boolean *); - - BEGIN - WITH elev_cars [shaft] - DO reason_to_open_door := button_bank [curr_floor] - OR ((direction = up) AND elev_foyers [curr_floor]. up_button) - OR ((direction = down) AND elev_foyers [curr_floor]. down_button) - END; - - - -{############################################################################## -#### Return true if floor calls are pending that could not be detected by the -#### must_continue_in_same_direction function. -#### The calls examined are those originating in the current direction of the -#### elevator, but whose direction indicate that the people want to travel -#### in the reverse direction. -##############################################################################} -FUNCTION other_floor_calls (* shaft: integer): boolean *); - - VAR b: boolean; - floor: integer; - BEGIN - b:= false; - IF NOT against_stops (shaft) - THEN WITH elev_cars[shaft] - DO IF direction = up - THEN FOR floor := curr_floor+1 TO top_floor - DO b := b OR elev_foyers [floor].down_button - ELSE FOR floor := curr_floor-1 DOWNTO bottom_floor - DO b := b OR elev_foyers [floor].up_button; - other_floor_calls := b; - END; - - - -{############################################################################## -#### Routine executed whenever a building emergency occurs. -##############################################################################} -PROCEDURE h2andle_an_emergency (* shaft: integer; VAR output: text *); - - BEGIN - WITH elev_cars [shaft] - DO BEGIN - button_bank [fire_exit] := true; - IF curr_floor = fire_exit - THEN BEGIN - open_elevator_door (shaft, output); - writeln (output, '*** Elevator # ',shaft:3, ' out of service. ***') - END - ELSE IF curr_floor > fire_exit - THEN BEGIN - status := in_motion; - direction := down; - curr_floor := curr_floor - 1 - END - ELSE BEGIN - status := in_motion; - direction := up; - curr_floor := curr_floor + 1 - END - END - END; - - -{############################################################################## -#### Open the doors on the elevator and simulate the actions of the new -#### passengers pushing floor buttons. -##############################################################################} -PROCEDURE open_elevator_door (* shaft: integer; VAR output: text *); - - VAR current_floor: integer; - BEGIN - WITH elev_cars [shaft] - DO BEGIN - status := door_open; - current_floor := curr_floor - END; - WITH elev_foyers [current_floor] - DO BEGIN - IF up_button OR down_button - THEN pick_destination_floors (shaft, output); - IF elev_cars [shaft]. direction = up - THEN up_button := false - ELSE down_button := false; - IF NOT (up_button OR down_button) - THEN BEGIN - nb_elev_serving_this_request := 0; - END - END; - WITH elev_cars [shaft] - DO BEGIN - IF button_bank [curr_floor] - THEN BEGIN - button_bank [curr_floor] := false; - writeln ('Passengers let off elevator ',shaft:2, ' on floor ', - curr_floor:4) - END - END - END; - - - -{############################################################################## -#### Routine to simulate the action of passengers selecting the floors where -#### they want to go. If this were my elevator, Any floor selection would -#### be recognized (but perhaps not untilany of those in the path of the -#### present direction were visited first.) -##############################################################################} -PROCEDURE pick_destination_floors (* shaft: integer; VAR output: text *); - - CONST this_was_my_elevator = false; - VAR floor : integer; - PROCEDURE push_floor_selection_button; - VAR r: real; - BEGIN - WITH elev_cars [shaft] - DO BEGIN - r := random_num (seed_for_random_number_generator); - IF r < elev_foyers [floor]. prob_this_floor_is_destination - THEN BEGIN - button_bank [floor] := true; - write (output, floor:3, ' , ') - END - END - END; - - BEGIN - WITH elev_cars [shaft] - DO BEGIN - write (output, 'Passengers picked up by elevator ',shaft:2, ' at floor ', - curr_floor:4,' to go to floors '); - IF this_was_my_elevator - THEN FOR floor := bottom_floor TO top_floor - DO push_floor_selection_button - ELSE IF NOT against_stops (shaft) - THEN IF direction = up - THEN FOR floor := curr_floor + 1 TO top_floor - DO push_floor_selection_button - ELSE FOR floor := curr_floor - 1 DOWNTO bottom_floor - DO push_floor_selection_button; - writeln (output) - END - END; - - - -{########################################################################## -#### Figure out if the elevator has no passengers, whether there is a floor -#### call from in your direction to go in the reverse direction, and then -#### assign the closest elevator that meets these qualifications to the -#### floor call closest to either the top or bottom of the shaft. -##########################################################################} -FUNCTION could_provide_service (* shaft: integer): boolean *); - - VAR b, b1: boolean; floor: integer; - FUNCTION find_floor_unassigned_to_elevator (scale: integer): boolean; - VAR b: boolean; elev_assigned_previously: boolean; - BEGIN - REPEAT - floor := floor + scale; - WITH elev_foyers [floor] - DO BEGIN - elev_assigned_previously := NOT no_passengers (shaft) - OR ((nb_elev_serving_this_request > 0) - AND (abs (elev_cars [nb_elev_serving_this_request]. curr_floor - - floor) - < abs (elev_cars [shaft]. curr_floor - floor))); - IF NOT elev_assigned_previously - AND (((elev_cars [shaft].direction = up) AND (down_button)) - OR ((elev_cars [shaft].direction = down) AND (up_button))) - THEN nb_elev_serving_this_request := shaft; - b := (nb_elev_serving_this_request = shaft) - END - UNTIL b OR elev_assigned_previously - OR (floor = elev_cars [shaft]. curr_floor); - find_floor_unassigned_to_elevator := b - END; - - BEGIN - b := (NOT listed_in_floor_table (shaft, floor)) - AND other_floor_calls (shaft); - IF b - THEN IF elev_cars [shaft]. direction = up - THEN BEGIN - floor := top_floor + 1; - b1 := find_floor_unassigned_to_elevator (-1) - END - ELSE BEGIN - floor := bottom_floor - 1; - b1 := find_floor_unassigned_to_elevator (+1) - END; - could_provide_service := b AND b1; - END; - - - - -BEGIN { main program } -assign (infil, 'b:elevator.dat'); -reset (infil); -assign (outfil, 'CON:'); -rewrite (outfil); -initialize (infil, outfil); {init probability and other stuff } -clock := 1; -print_status_board (outfil); -REPEAT { for each time interval,...} - writeln (outfil); - writeln (outfil, ' ':30, 'Time Interval: ', clock:4); - h1andle_requests_for_elevator_usage (outfil); - FOR shaft := 1 TO max_elevators - DO perform_a_single_operation (shaft, outfil); - clock := clock + 1; - print_status_board (outfil); -UNTIL clock > max_time; { sorry, even computerized els go out of order } -writeln (outfil, 'Simulation complete. ') -END. - - - - - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/MPMTEST.SRC b/software/CPM/CPM20_MTPUG_08/MPMTEST.SRC deleted file mode 100644 index 8cfe1b9..0000000 --- a/software/CPM/CPM20_MTPUG_08/MPMTEST.SRC +++ /dev/null @@ -1,180 +0,0 @@ -program test; -{ Test multi-tasking under MP/M with Pascal MT+86 - Uses simple booleans for task exclusion - ABORT used for subtask termination } - - const - pd_max = 61; {max byte address in process descriptor table} - uda_max = 255; {max byte address in user data area table} - def_prior = 201; {default process priority} - - type - name_type = packed array [1..8] of char; - - pd_size = 0..pd_max; {Process Descriptor} - pd_type = - record - case boolean of - true: - (z1: packed array [1..5] of byte; - prior: byte; - flag: word; - name: name_type; - uda: word; - user, disk: byte; - z2: packed array [1..12] of byte; - cns: byte; - z3: packed array [1..3] of byte; - list: byte; - z4: packed array [1..15] of byte; - cns2: byte; - z5: byte; - name2: name_type); - false: - (ray: array [pd_size] of byte); - end; - - uda_size = 0..uda_max; {User Data Area for Process} - uda_type = array [uda_size] of byte; - - ptr = ^integer; - pdp = ^pd_type; - udap = ^uda_type; - - ptrtype = (ptrp, pdpp, udapp, offseg); - pointer = - record {kludge to allow any type of pointer reference} - case ptrtype of - ptrp: - (pptr: ptr); - pdpp: - (ppdp: pdp); - udapp: - (puda: udap); - offseg: - (off: word; - seg: word) - end; - - var - uda_b, uda_a: uda_type; {user data area for sub-processes} - pd_b, pd_a: pd_type; {process descriptor for sub-processes} - count_b, count_a: integer; - flag_b, flag_a: boolean; - done_b, done_a: boolean; - - external procedure init_mpm_util(size: integer); - external procedure fix_stack(taskp: ptr; - var uda: uda_type; - size: integer); - external procedure delay(ticks: integer); - external procedure dispatch; - external procedure abort(var pd: pd_type); - external function create_process(var pd: pd_type): boolean; - external function set_priority(priority: byte): boolean; - -{ ********************************************************** } - - - procedure startup(var pd: pd_type; - var uda: uda_type; - task: ptr; - name: string; - priority: integer; - size: integer); - - var - i: integer; - p: pointer; - - begin - for i := 0 to pd_max do - pd.ray[i] := 0; - for i := 0 to uda_max do - uda[i] := 0; - - pd.prior := priority; - for i := 1 to 8 do - begin - pd.name[i] := name[i]; - pd.name2[i] := name[i] - end; - p.puda := addr(uda); - pd.uda := shr(p.off, 4); {make into paragraph address} - fix_stack(task, uda, size); - - if create_process(pd) then - writeln('Starting ', name) - else - writeln('Startup of ', name, ' failed'); - end; - - - procedure task_a; - - begin - while true do - begin - while flag_a do - delay(40); {wait for flag to be cleared} - count_a := count_a + 1; - flag_a := true; - end; - end; - - - procedure task_b; - - begin - while true do - begin - while flag_b do - delay(50); {wait for flag to be cleared} - count_b := count_b + 1; - flag_b := true; - end; - end; - - - begin {main program} - writeln('Entered MAIN'); - if not set_priority(def_prior) then - begin - writeln('Unable to set main program priority'); - exit - end; - count_a := 0; count_b := 0; - flag_a := false; flag_b := false; - done_a := false; done_b := false; - init_mpm_util(6000); - startup(pd_a, uda_a, addr(task_a), 'TASK_A ', def_prior, 900); - startup(pd_b, uda_b, addr(task_b), 'TASK_B ', def_prior, 900); - - repeat - dispatch; - if flag_a then - begin - writeln('loop A count = ', count_a); - flag_a := false - end; - if (count_a >= 10) and (not done_a) then - begin - abort(pd_a); - writeln('Task A complete'); - done_a := true; - end; - if flag_b then - begin - writeln('loop B count = ', count_b); - flag_b := false - end; - if (count_b >= 10) and (not done_b) then - begin - abort(pd_b); - writeln('Task B complete'); - done_b := true; - end; - until done_a and done_b; - - end. - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/MPMTESTQ.SRC b/software/CPM/CPM20_MTPUG_08/MPMTESTQ.SRC deleted file mode 100644 index 884feac..0000000 --- a/software/CPM/CPM20_MTPUG_08/MPMTESTQ.SRC +++ /dev/null @@ -1,335 +0,0 @@ -program testq; -{ Test multi-tasking under MP/M with Pascal MT+86 - Queues used for synchronization - TERMINATE used for subtask termination } - - const - pd_max = 61; {max byte address in process descriptor table} - uda_max = 255; {max byte address in user data area table} - def_prior = 201; {default process priority} - qd_nmsgs = 5; {max messages in queue} - q_open = 135; - q_delete = 136; - q_read = 137; - q_cond_read = 138; - q_write = 139; - q_cond_write = 140; - - type - name_type = packed array [1..8] of char; - - pd_size = 0..pd_max; {Process Descriptor} - pd_type = - record - case boolean of - true: - (z1: packed array [1..5] of byte; - prior: byte; - flag: word; - name: name_type; - uda: word; - user, disk: byte; - z2: packed array [1..12] of byte; - cns: byte; - z3: packed array [1..3] of byte; - list: byte; - z4: packed array [1..15] of byte; - cns2: byte; - z5: byte; - name2: name_type); - false: - (ray: array [pd_size] of byte); - end; - - uda_size = 0..uda_max; {User Data Area for Process} - uda_type = array [uda_size] of byte; - - ptr = ^integer; - pdp = ^pd_type; - udap = ^uda_type; - qdp = ^qd_type; - qpbp = ^qpb_type; - qdmp = ^qd_msg; - - ptrtype = (ptrp, pdpp, udapp, qdpp, qpbpp, qdmpp, offseg); - pointer = - record {kludge to allow any type of pointer reference} - case ptrtype of - ptrp: - (pptr: ptr); - pdpp: - (pdpp: pdp); - udapp: - (puda: udap); - qdpp: - (pqdp: qdp); - qpbpp: - (pqpb: qpbp); - qdmpp: - (pqdm: qdmp); - offseg: - (off: word; - seg: word) - end; - - qd_msg = - record {actual Queue Message for this example} - name: name_type; - count: integer - end; - - qd_type = - record {Queue Descriptor block} - z1: longint; - flags: word; - name: name_type; - msglen: integer; - nmsgs: integer; - z3, z2: longint; - z4: word; - end; - - qpb_type = - record {Queue Parameter Block} - z: word; - qid: word; - nmsgs: integer; - buffer: word; - name: name_type; - end; - - var - uda_c, uda_b, uda_a: uda_type; {user data area for sub-process} - pd_c, pd_b, pd_a: pd_type; {process descriptor for sub-process} - qd: qd_type; {queue descriptor block} - qpb: qpb_type; {queue parameter block} - qmsg: qd_msg; {queue message} - done_c, done_b, done_a: boolean; {communication flags} - writ_c, writ_b, writ_a: boolean; - - external procedure init_mpm_util(size: integer); - external procedure fix_stack(taskp: ptr; - var uda: uda_type; - size: integer); - external procedure delay(ticks: integer); - external procedure dispatch; - external procedure terminate; - external function create_process(var pd: pd_type): boolean; - external function set_priority(priority: byte): boolean; - external function queue_make(var qd: qd_type): boolean; - external function queue_oper(op: byte; - var qpb: qpb_type): boolean; -{ - *********************************************************** -} - procedure startup(var pd: pd_type; - var uda: uda_type; - task: ptr; - name: string; - priority: integer; - size: integer); - var - i: integer; - p: pointer; - - begin - for i := 0 to pd_max do - pd.ray[i] := 0; - for i := 0 to uda_max do - uda[i] := 0; - - pd.prior := priority; - for i := 1 to 8 do - begin - pd.name[i] := name[i]; - pd.name2[i] := name[i] - end; - p.puda := addr(uda); - pd.uda := shr(p.off, 4); {make into paragraph address} - fix_stack(task, uda, size); - - if create_process(pd) then - writeln('Starting ', name) - else - writeln('Startup of ', name, ' failed'); - end; - - - function makeq(var qd: qd_type; {queue descriptor address} - var qpb: qpb_type; {queue parm block address} - name: name_type; {name of queue} - msglen: integer; {length of message in bytes} - nmsgs: integer) {max messages in queue} - : boolean; - - begin {make and open the main message queue} - qd.z1 := #0; {initialize queue descriptor} - qd.flags := 0; - qd.name := name; - qd.msglen := msglen; - qd.nmsgs := nmsgs; - qd.z2 := #0; - qd.z3 := #0; - qd.z4 := 0; - - if not queue_make(qd) then - begin - writeln('Unable to make queue'); - makeq := false - end - else - begin - qpb.z := 0; {initialize queue parameter block} - qpb.name := name; - if not queue_oper(q_open, qpb) then - begin - writeln('Unable to open queue'); - makeq := false - end - else - makeq := true; - end - end; - - - function read_msg(rm_qpb: qpb_type; {local copy of the q parm block} - var msgp: qd_msg) {where to send the message} - : boolean; - - var - p: pointer; - rm_msg: qd_msg; {local copy of message read} - - begin {read a message from a queue} - rm_qpb.nmsgs := 1; - p.pqdm := addr(rm_msg); - rm_qpb.buffer := p.off; {put offset of msg into qpb} - read_msg := queue_oper(q_read, rm_qpb); - msgp := rm_msg; {copy message to output} - end; - - - function write_msg(wm_qpb: qpb_type; {local copy of the q parm block} - wm_msg: qd_msg) {local copy of the message} - : boolean; - - var - p: pointer; - - begin {write a message to a queue} - wm_qpb.nmsgs := 1; - p.pqdm := addr(wm_msg); - wm_qpb.buffer := p.off; {put offset of msg into qpb} - write_msg := queue_oper(q_write, wm_qpb); - end; - - - procedure task_a; - - var - msg_a: qd_msg; - - begin - msg_a.count := 0; - msg_a.name := 'A-msg '; - - repeat - delay(31); - msg_a.count := msg_a.count + 1; - if not write_msg(qpb, msg_a) then - msg_a.count := 999; - until msg_a.count >= 9; - done_a := true; - terminate; - end; - - - procedure task_b; - - var - msg_b: qd_msg; - - begin - msg_b.count := 0; - msg_b.name := ' B-msg '; - - repeat - delay(19); - msg_b.count := msg_b.count + 1; - if not write_msg(qpb, msg_b) then - msg_b.count := 999; - until msg_b.count >= 9; - done_b := true; - terminate; - end; - - - procedure task_c; - - var - msg_c: qd_msg; - - begin - msg_c.count := 0; - msg_c.name := ' C-msg '; - - repeat - delay(25); - msg_c.count := msg_c.count + 1; - if not write_msg(qpb, msg_c) then - msg_c.count := 999; - until msg_c.count >= 9; - done_c := true; - terminate; - end; - - - begin {main program} - if not makeq(qd, qpb, 'MAIN QQQ', sizeof(qmsg), qd_nmsgs) then - exit; - if not set_priority(def_prior) then - begin - writeln('Unable to set main program priority'); - exit - end; - - done_a := false; done_b := false; done_c := false; - writ_a := false; writ_b := false; writ_c := false; - init_mpm_util(1500); - startup(pd_a, uda_a, addr(task_a), 'TASK_A ', def_prior, 1500); - startup(pd_b, uda_b, addr(task_b), 'TASK_B ', def_prior, 1500); - startup(pd_c, uda_c, addr(task_c), 'TASK_C ', def_prior, 1500); - delay(1); - - repeat - if not readmsg(qpb, qmsg) then - begin - writeln('Error trying to read queue'); - exit; - end; - writeln(qmsg.name, ' loop count = ', qmsg.count); - if done_a then - begin - writeln('TASK A completed'); - writ_a := true; - done_a := false; - end; - if done_b then - begin - writeln('TASK B completed'); - writ_b := true; - done_b := false; - end; - if done_c then - begin - writeln('TASK C completed'); - writ_c := true; - done_c := false; - end; - until writ_a and writ_b and writ_c; - - if not queue_oper(q_delete, qpb) then - writeln('Unable to delete queue'); - - end. - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/MPMTTIME.SRC b/software/CPM/CPM20_MTPUG_08/MPMTTIME.SRC deleted file mode 100644 index 7fb4331..0000000 --- a/software/CPM/CPM20_MTPUG_08/MPMTTIME.SRC +++ /dev/null @@ -1,54 +0,0 @@ -program ttime; {test new XIOS timing function, and GET_TOD} - - const - period = 90; {period in clock ticks - 1.5 seconds} - stack_size = $1000; {main program stack size} - - type - tod_type = - record - day: integer; - hour: byte; - min: byte; - sec: byte - end; - - var - t_entry: longint; - i: integer; - tod: tod_type; - - external procedure delay(ticks: integer); - external function x_time: longint; - external procedure get_tod(var tod: tod_type); - external procedure init_mpm_util(size: integer); - - begin - init_mpm_util(stack_size); - - repeat {do forever, ^C to stop} - t_entry := x_time; - writeln('x_time = ', t_entry); - - get_tod(tod); - with tod do - begin - write('day = ', day, ' time = '); - if hour < 10 then - write('0'); - write(hour, ':'); - if min < 10 then - write('0'); - write(min, ':'); - if sec < 10 then - write('0'); - writeln(sec); - end; - {other processing could go here} - - delay(period - short(x_time - t_entry)); - - until false; - - end. - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/MPMUTIL.DOC b/software/CPM/CPM20_MTPUG_08/MPMUTIL.DOC deleted file mode 100644 index 38bc2e7..0000000 --- a/software/CPM/CPM20_MTPUG_08/MPMUTIL.DOC +++ /dev/null @@ -1,533 +0,0 @@ -.FOMPMUTIL page # of 9 17 Jan 83 - MP/M UTILITY INTERFACE TO PASCAL MT+86 - - -MPMUTIÌ ió á packagå oæ interfacå routineó tï MP/M-8¶ froí Pascaì -MT+8¶  whicè allo÷ systeí timing¬  subtasë (subprocess©  control¬ -and MP/M queue operations. Its use is described in this memo. - - -1. Initialization - - external procedure init_mpm_util(size: integer); - -Iî  thå  maiî  program¬   therå  musô  bå  exactlù  onå  calì  tï -init_mpm_utiì beforå anù calló tï anù oæ thå otheò procedureó anä -functionó iî MPMUTIL®  Thå parameteò SIZÅ ió thå numbeò oæ byteó -tï  reservå foò stacë spacå iî thå maiî task®  Eacè subtasë  (iæ -any©  wilì  havå  itó owî amounô oæ stacë spacå tï  bå  reserved¬ -independenô oæ thå maiî tasë stack®  Init_mpm_utiì performó  alì -initialization needed by all of the other utilities. - - -2. Timing - - external function x_time: longint; - external procedure delay(ticks: integer); - -MP/Í  provideó severaì systeí calló tï geô thå timå oæ daù tï thå -nearesô  second®  Theså  twï procedureó providå  timinç  tï  thå -nearest clock tick (1/60 second). - -X_TIMÅ  returnó  thå currenô timå iî clocë tickó sincå  MP/Í  waó -lasô booteä in® Iô takeó faò lesó thaî ± mó tï calì XTIME¬ sincå -nï MP/Í calì ió involved®  Bù makinç á standarä MP/Í time-of-daù -call¬  thå  longinô returneä bù X_TIMÅ caî bå relateä tï timå  oæ -daù iæ needed® Itó maiî uså ió iî computinç elapseä timå betweeî -twï events®  Iæ thió elapseä timå ió lesó thaî 9.± minutes¬  thå -timå  iî  tickó wilì fiô iî á 16-biô integeò withouô settinç  thå -sigî  bit®  (Thå  Pascaì  MT« "short¢ functioî must bå  useä  tï -convert the longint difference of two calls to X_TIME.) - -DELAÙ  ió  calleä witè aî integeò representinç desireä  delaù  iî -clocë ticks®  Iæ TICKÓ ió lesó thaî oò equaì tï zero¬ therå wilì -bå nï delay®  Iæ 3276· ¼ TICKÓ ¼ 65536¬ thió lookó negative¬ anä -agaiî therå wilì bå nï delay®  3276· tickó ió abouô 9.± minutes® -Iæ ± <½ TICKÓ <½ 32767¬  aî MP/Í calì wilì bå madå requestinç thå -delay®  MP/Í wilì noô returî untiì aô leasô thaô manù tickó havå -occurred®  Iô  maù bå longer¬  dependinç oî prioritieó wheî  thå -requesteä timå haó elapsed® Tï geô delayó longeò thaî ¹ minutes¬ -makå consecutivå calló tï DELAY. - - -.cp23 Š3. Subtask control - - type - name_type = packed array[1..8] of char; - pd_type = - record - case boolean of - true: - (z1: packed array [1..5] of byte; - prior: byte; - flag: word; - name: name_type; - uda: word; - user, disk: byte; - z2: packed array [1..12] of byte; - cns: byte; - z3: packed array [1..3] of byte; - list: byte; - z4: packed array[1.15] of byte; - cns2: byte; - z5: byte; - name2: name_type); - false: - (ray: array [0..61] of byte) - end; {pd_type} - uda_type = array[0..255] of byte; - - external procedure fix_stack(taskp: ^integer; {kludge} - var uda: uda_type; - size: integer); - external function create_process(var pd: pd_type): boolean; - external function set_priority(prioritry: byte): boolean; - external procedure dispatch; - external procedure terminate; - external procedure abort(var pd: pd_type); - -Each subtask requires: - a Process Descriptor table (62 bytes) - a User Data Area table (256 bytes) for use by MP/M only - an execution priority - a name of 8 characters - some stack space - a starting address - -Thå  Procesó  Descriptoò anä Useò Datá Areá musô botè bå  iî  thå -globaì datá area¬ noô locaì procedurå data® Thå examplå programó -(seå especiallù TEST© sho÷ procedurå STARTUÐ aó á waù tï starô uð -á  task®  Thå  PÄ  showî herå ió largeò thaî showî  iî  thå  MPÍ -Programmer'ó  Guide»  iô haó 1´ extrá byteó foò uså bù thå  ABORÔ -procedure. - -.CP2 -Thå UDÁ foò eacè tasë must“ residå oî á paragrapè (16-byte©  boun -dary®  Thå  waù tï achievå thió ió tï declarå alì UDA'ó togetheò -aô  thå  beginninç oæ thå globaì datá areá oæ  thå  maiî  prograí -module¬ aó iî thå examples. Š -.CP2 -FIX_STACË   musô  bå  calleä  beforå  thå  tasë  ió  starteä   bù -CREATE_PROCESS® FIX_STACË reserveó stacë spacå foò thå task® Iô -ió calleä witè thå addresó oæ thå tasë entrù poinô (whicè wilì bå -á  procedure)¬  thå  Useò Datá Areá foò thå tasë (eacè tasë  musô -havå itó own)¬  anä thå amounô oæ stacë spacå tï reservå foò  thå -task. - -CREATE_PROCESÓ musô bå calleä immediatelù afteò FIX_STACK® Iô ió -passeä  thå Procesó Descriptoò tablå foò thå tasë (eacè tasë  haó -itó own)®  Thå PÄ ió firsô seô tï alì zeroes¬  anä theî initial -izeä aó follows: - - PRIOR is set to the desired initial task priority. - FLAG will normally be zero, but see MP/M call 144. - NAME  ió  seô tï thå 8-characteò tasë name®  Alì ¸ bitó  oæ -          each byte are significant. - UDA  ió  seô  tï thå offseô oæ thå UDÁ divideä  bù  1¶  (seå -          example). - USER, DISK¬  CNS¬  LISÔ  arå seô tï thå desireä defaulô useò -          number¬  disë  drive¬  consolå number¬  anä LSÔ  devicå -          number¬ iæ anù arå needed. (Normally 0.) - NAME2 is set to the same name as NAME. Used only by ABORT. - CNS2 is set to the same value as CNS. Used only by ABORT. - -FALSÅ  ió returneä iæ thå procesó coulä noô bå createä aó  speci -fied¬  whicè coulä bå duå tï toï manù processeó alreadù  created¬ -oò  á duplicatå procesó name¬  foò example®  TRUÅ ió returneä iæ -thå  procesó  waó successfullù  created®  Creatinç  thå  procesó -causeó iô tï begiî executioî accordinç tï itó priority. - -SET_PRIORITÙ  maù bå calleä aô anù timå bù anù tasë tï alteò  itó -owî priority®  Iô ió calleä witè thå desireä ne÷ prioritù level® -Seå thå discussioî oæ schedulinç anä prioritù below®  Iô returnó -FALSE if the priority could not be set, and TRUE otherwise. - -DISPATCÈ  ió  similaò tï DELAY(1)¬  iî thaô thå tasë  callinç  iô -giveó  uð thå CPÕ untiì itó nexô turî tï  execute¬  whereupoî  iô -continueó  executioî  aô thå instructioî followinç  thå  DISPATCÈ -call®  DELAY(1©  guaranteeó  thaô aô leasô onå clocë  ticë  wilì -occuò  beforå  thå  tasë  continues»   dependinç  oî  priorities¬ -DISPATCÈ maù returî controì immediately. - -TERMINATÅ  causeó  thå callinç tasë tï bå removeä froí  alì  MP/Í -lists¬  anä executioî oæ thaô tasë wilì stop®  Thaô is¬ therå ió -nï returî froí thå TERMINATÅ call® Nï tasë caî TERMINATÅ anotheò -(buô seå ABORT)¬  anä alì taskó musô bå terminateä  somehow®  Iî -particular¬  iæ á maiî tasë startó uð severaì subtasks¬  anä theî -terminateó  onlù itself¬  thå subtaskó wilì continuå tï exisô  iî -memorù  anä executå untiì explicitù terminated®  Re-bootinç MP/Í -wilì oæ courså terminatå everything. - -.CP2 -ABORÔ  ió similaò tï TERMINATE¬  excepô thaô á specifieä tasë  ió -terminated¬  whicè wilì usuallù noô bå thå callinç task®  Thå PÄ -oæ  thå tasë tï bå terminateä ió passeä tï ABORT®  Thå NAME² anä ŠCNS² fieldó musô bå seô tï matcè thå NAMÅ anä CNÓ fields¬  oò thå -procesó wilì noô bå aborteä -- althougè somå otheò procesó  mighô -be¡ ABORÔ allowó á maiî task¬ foò example¬ tï terminatå itó sub- -tasks when processing is complete. - - -.CP6 -4. Scheduling and Priority - -Therå  arå  25¶ possiblå prioritù leveló iî  MP/M®  Thå  highesô -("best"©  prioritù ió 0¬  anä thå lowesô ("worst"© ió  255®  Thå -followinç  ió á guidelinå foò establishinç prioritieó whicè  wilì -not conflict with MP/M usage: - -.CP3 - 002 - 031 Interrupt handlers - 200 Task initialization - 201 - 254 User tasks - -Everù tasë ió eitheò running¬  readù tï run¬  oò waitinç foò somå -event®  Onlù  onå tasë caî ruî aô anù onå time¬  sincå therå  ió -onlù onå CPU®  Taskó whicè arå ablå tï run¬ anä arå waitinç onlù -foò thå CPÕ arå "ready"®  "Waiting¢ taskó mighô bå waitinç foò á -systeí flag¬  foò á timå delaù tï elapse¬ oò foò á resourcå (con -sole¬ printer¬ disk© tï becomå available. - -Thå  MP/Í scheduleò ió calleä aô everù clocë tick¬  anä aô  everù -interrupt®  Thå  highest-prioritù "ready¢ tasë ió theî  resumed® -Iæ morå thaî onå tasë haó thå samå priority¬ theù arå executeä oî -á round-robiî basis. - -Exampleº  Taskó A¬  B¬  à arå aô prioritù 210¬  anä tasë Ø ió aô -prioritù 250» alì arå "ready"¬ anä tasë Á ió currentlù executing® -Aô  thå nexô tick¬  tasë Á wilì bå placeä aô thå enä oæ thå readù -lisô foò prioritù 210¬  anä tasë  wilì bå resumed®  Aô thå nexô -tick¬  tasë  Ã wilì bå resumed®  Theî tasë Á again¬  anä sï  on® -Tasë Ø wilì bå lockeä ouô untiì A¬  B¬  anä à arå alì waitinç foò -somethinç tï happen¬ sucè aó á delaù tï expire¬ oò á characteò tï -bå typeä aô thå console®  Notå thaô A¬  B¬  anä à caî interleavå -theiò  executioî  iæ  anù takeó morå thaî 1· mó  tï  executå  onå -cycle®  Iæ  interleavinç ió undesireable¬  thå runninç tasë  caî -raiså  itó  prioritù upoî entry¬  anä decreaså iô tï itó  nominaì -leveì aô thå enä oæ itó cycle®  Thió wilì guaranteå thaô Á  wilì -completå beforå  oò à geô executeä (unlesó Á goeó intï á waitinç -statå foò somå reason). - - -5. Stack Space - -Pascaì  MT+8¶  programó uså thå stacë foò passinç  parameteró  tï -procedureó anä functionó (includinç run-timå procedureó invisiblå -tï thå programmer)¬ foò temporarù storagå durinç compleø calcula -tions¬  anä  foò  storagå oæ locaì  variableó  (includinç  formaì -parameters© oæ procedureó anä functions. - -.CP2 -Iô  ió difficulô tï estimatå ho÷ mucè stacë spacå á prograí  wilì -need¬  aó  iô dependó oî thå (dynamic© deptè oæ procedurå nestinç Šaô ruî timå aó welì aó oî thå (static© factoró listeä above® Thå -linkeò  bù  defaulô assignó 8Ë byteó ($20° paragraphs©  oæ  stacë -spacå tï á program¬ unlesó thå /Ú switcè ió used® Unfortunately¬ -therå  ió  nï  reliablå  waù tï  telì  wheî  stacë  overflo÷  haó -occurred®  Thå  prograí  maù exhibiô bizarrå behaviour¬  oò  thå -systeí maù crasè entirely» thå computeò haó nï memorù protection. - -Iî anù event¬  afteò aî amounô oæ stacë spacå haó beeî decideä oî -foò  thå  maiî prograí anä eacè task¬  aó showî iî thå  calló  tï -init_mpm_utiì anä create_process¬  adä uð alì theså valueó tï geô -thå minimuí amounô oæ stacë spacå needed®  Converô thå totaì  tï -hexadecimal¬  droð thå finaì digiô (i.e.¬  dividå bù 16)¬ anä adä -± (foò round-up)®  Uså thió (oò á largeò value© aó thå numbeò oî -the linker /Z switch. - -Examplå 1º Prograí PROGÔ reserveó 150° byteó oæ stacë foò itselæ -anä  eacè oæ twï subtasks¬  foò á totaì oæ 4500®  Thió ió  $119´ -(hex)®  dividinç  bù  1¶ anä addinç ± giveó $120®  Thå  defaulô -linkeò  valuå oæ $20° ió biç enough¬  sï nï linkeò /Ú  switcè  ió -needed. - -.CP4 -Examplå 2º Á hypotheticaì prograí reserveó 1Ë byteó foò thå maiî -program¬  anä 3Ë byteó foò eacè oæ ¸ subtasks® Thió ió 25Ë deci -mal¬  oò $6400®  Thió ió biggeò thaî thå linkeò default¬  sï thå -linkeò commanä linå woulä looë something likå this: - -linkmô main,task1,task2,task3,...,task8,fpreals,paslib/s/z:640 - - -.CP14 -6. MP/M Message Queues - - type - name_type = packed array[1..8] of char; - qd_type = - record - z1: longint; - flags: word; - name: name_type; - msglen: integer; - nmsgs: integer; - z3, z2: longint; - z4: word - end; -.CP8 - qpb_type = - record - z: word; - qid: word; - nmsgs: integer; - buffer: word; - nameº name_type - end; - -.CP3 - external function queue_make(var qd: qd_type): boolean; - external function queue_oper(op: byte; - var qpb: qpb_type): boolean; Š -.CP2 -MP/Í  allowó anù reasonablå numbeò oæ messagå queueó oæ anù reas -onablå  sizå  tï bå dynamicallù createä anä  used®  Thå  maximuí -numbeò  oæ queueó activå aô onå time¬  anä thå  maximuí  combineä -sizå  oæ  alì  queueó activå aô onå timå ió seô  aô  MP/Í  systeí -generatioî time®  (Thió ió becauså thå queueó exisô iî MP/Í datá -space, not in program data space.) - -Á messagå queuå ió createä bù specifyinç itó name¬  thå sizå oæ á -message¬ anä thå capacitù oæ thå queuå iî messages® Anù tasë caî -writå  messageó  tï oò reaä messageó froí thå queuå  oncå  iô  ió -createä  anä opened®  (Á queuå needó á separatå "open¢ operatioî -performeä afteò iô ió created.© Messageó arå handleä strictlù oî -á first-in¬ first-ouô (FIFO© basis® Wheî writinç tï á queue¬ thå -tasë caî elecô tï waiô foò aî emptù messagå sloô tï becomå avail -able¬  oò havå thå writå requesô returî witè aî erroò indication® -Similarly¬ wheî readinç á queue¬ thå tasë caî elecô tï waiô foò á -messagå tï bå writteî intï thå queuå iæ iô ió empty¬  oò havå thå -reaä  requesô returî iî aî erroò condition®  Thå  queuå  handleò -knowó onlù abouô messagå size»  thå interpretatioî oæ messageó ió -lefô strictlù uð tï taskó whicè reaä anä writå thå messages. - -See example TESTQ for sample queue usage. - -.CP2 -QUEUE_MAKÅ  musô bå calleä oncå foò eacè queuå tï creatå it®  Iô -ió calleä witè á Queuå Descriptoò table®  Thå QÄ ió  initializeä -bù settinç thå "z¢ fieldó tï zero¬ FLAGÓ tï zerï (excepô seå MP/Í -manuaì  foò discussioî oæ Mutuaì Exclusioî Queues)¬  NAMÅ tï  thå -namå  oæ  thå queuå (alì ¸ bitó oæ alì ¸ byteó arå  significant)¬ -MSGLEÎ tï thå sizå oæ á messagå iî byteó (alì messageó iî á giveî -queuå  arå  thå samå size)¬  anä NMSGÓ tï thå queuå  capacitù  iî -messages® TRUÅ ió returneä iæ alì ió succesful¬ anä FALSÅ iæ thå -queuå namå ió duplicated¬  oò iæ therå ió noô enougè spacå iî thå -systeí datá areá tï creatå thå queue®  Thå queuå musô bå  openeä -viá  á calì tï QUEUE_OPEÒ beforå anù otheò operatioî caî bå  per -formeä oî it. - -QUEUE_OPEÒ  ió  á  general-purposå routinå tï perforí  alì  queuå -functionó otheò thaî makinç á queue® Iô ió calleä witè thå queuå -operatioî numbeò anä á Queuå Parameteò Block®  Thå queuå  opera -tioî numberó arå aó follows: - - 135 open queue - 136 delete queue - 137 read queue - 138 conditional read queue - 139 write queue - 140 conditional write queue - -.CP3 -TRUÅ ió returneä iæ thå requesteä operatioî ió successful® FALSÅ -ió  returneä iæ unsuccessful¬  oò iæ aî operatioî numbeò  outsidå -the above range is used. The operations are discussed below. - -.CP2 -OPEΠ QUEUÅ  ió  requireä oncå afteò thå queuå  ió  created¬  anä -beforå anù otheò operatioî ió performed®  Á QP musô bå initialŠizeä bù settinç Ú tï zerï anä NAMÅ tï thå namå oæ thå queue® Alì -¸  bitó oæ alì ¸ byteó oæ NAMÅ musô matcè thå NAMÅ fielä  iî  thå -Queuå Descriptoò useä tï creatå thå queue® Thå QIÄ fielä wilì bå -filleä  iî witè á queuå identifieò needeä foò furtheò operations® -Thå  QP musô bå preserveä foò uså iî furtheò  queuå  operations¬ -and so should probably be a global rather than local data item. - -DELETÅ QUEUÅ shoulä bå donå prioò tï terminatioî oæ thå lasô tasë -tï  uså thå queue®  Iæ alì taskó terminatå anä thå queuå ió  noô -deleted¬  succeedinç attemptó tï creatå thå queuå wilì fail¬  anä -MP/Í maù havå tï bå re-booteä tï cleaò ouô thå queue®  Á copù oæ -thå QP useä tï opeî thå queuå shoulä bå passeä tï QUEUE_OPER. - -REAÄ  QUEUÅ  musô  bå passeä á copù oæ thå QP useä tï  opeî  thå -queue®  NMSGÓ  iî  thå  QP copù musô bå seô tï  thå  numbeò  oæ -messageó  tï bå reaä froí thå queue®  BUFFEÒ musô bå seô tï  thå -addresó  oæ á datá iteí biç enougè tï holä NMSGÓ messageó (iæ  iô -ió toï small¬  adjacenô datá wilì bå over-written)® Iî addition¬ -thå  QP copù anä thå buffeò musô botè bå iî thå samå datá  area® -Thaô  is¬  botè musô bå globaì oò botè musô bå locaì datá oæ  thå -samå procedure®  Seå READ_MSÇ iî examplå TESTQ¬  wherå botè  arå -locaì  tï thå samå procedure®  TRUÅ ió returneä afteò NMSGÓ havå -beeî  reaä  froí thå queue®  Iæ noô enougè messageó arå  iî  thå -queuå aô thå timå oæ thå call¬  thå callinç tasë wilì bå puô iî á -"waiting¢  statå untiì enougè additionaì messageó arå writteî  tï -thå queue®  FALSÅ ió returneä iæ thå queuå ió noô opeî oò iæ  iô -haó beeî deleted. - -CONDITIONAÌ  REAÄ  QUEUÅ ió thå samå aó REAÄ  QUEUÅ  excepô  thaô -FALSÅ ió returneä iæ therå arå noô enougè messageó alreadù iî thå -queue» thaô is¬ iô doeó noô waiô foò thå messages. - -WRITÅ  QUEUÅ  musô bå passeä á copù oæ thå QP useä tï  opeî  thå -queue®  NMSGÓ  iî  thå  QP copù musô bå seô tï  thå  numbeò  oæ -messageó  tï  writå  tï thå queue®  BUFFEÒ musô bå  seô  tï  thå -addresó  oæ á datá iteí containinç NMSGÓ messages®  Iî addition¬ -thå  QP copù anä thå buffeò musô botè bå iî thå samå datá  area® -Thaô  is¬  botè musô bå globaì oò botè musô bå locaì datá oæ  thå -samå procedure®  Seå WRITE_MSÇ iî examplå TESTQ¬  wherå botè arå -locaì tï thå samå procedure®  TRUÅ ió returneä afteò NMSGÓ  havå -beeî  writteî  tï thå queue®  Iæ therå ió noô enougè  spacå  foò -NMSGÓ messageó iî thå queuå aô thå timå oæ thå call¬  thå callinç -tasë  wilì bå puô iî á "waiting¢ statå untiì enougè messageó  arå -reaä froí thå queuå tï makå room® FALSÅ ió returneä iæ thå queuå -ió noô opeî oò iæ iô haó beeî deleted. - -CONDITIONAÌ  WRITÅ QUEUÅ ió thå samå aó WRITÅ QUEUÅ  excepô  thaô -FALSÅ  ió  returneä iæ therå ió noô enougè rooí iî thå queuå  foò -NMSGÓ  messages»  thaô is¬  iô doeó noô waiô foò spacå tï  becomå -available. - - -.CP6 Š7. Raw Console Input - - external procedure r_con_raw(var str: string); - -Aô thió writing¬  readln“ froí thå KBDº devicå doeó noô worë prop -erly¬  anä  inpuô lineó froí thå CONº  devicå arå limiteä  tï  8° -characters¬  sï  thió extrá functioî ió includeä iî thå  package® -Iô  caî  bå  useä witè carå iî conjuctioî witè I/Ï  tï  thå  CONº -(default©  device®  Buô seå thå cautioî iî thå MT+8¶ manuaì sec -tioî 3.4.1¶ (discussioî oæ ASSIGN). - -R_CON_RA×  bypasseó thå MP/Í interpretatioî oæ consolå characteró -tï  providå  ra÷  consolå inpuô viá MP/Í  functioî  3®  Iô  alsï -bypasseó  alì  oæ thå Pascaì MT+8¶ filå I/O®  STÒ  ió  initiallù -cleareä  (lengtè bytå seô tï 0)®  Characteró arå reaä  froí  thå -consolå  anä  appendeä  tï STÒ -- includinç  controì  characters® -Wheî á CÒ ($0D© ió detected¬ iô ió noô writteî tï thå string¬ buô -R_CON_RAW returns at that point to the calling program. - -Thió  procedurå waó includeä tï providå á simplå waù oæ  usinç  á -consolå  iî Blocë Transmissioî mode¬  wherebù thå useò typeó  thå -'senä  page§ key¬  anä datá ió senô tï thå computeò witè  controì -characteró  delimitinç  fieldó anä lines¬  anä á finaì CÒ aô  thå -end. - -Cautionsº  - -a.   Iæ  thå terminaì sendó morå thaî onå CR¬  thå datá followinç -     thå  firsô CÒ maù bå lost¬  dependinç oî thå buffeò sizå  oæ -     thå  XIOÓ  consolå inpuô routine¬  systeí  timing¬  anä  thå -     consolå bauä rate. - -b.   Thå  maximuí strinç sizå undeò Pascaì MT« ió 25µ  bytes®  Á -     fulì consolå screeî ió typicallù 192° bytes®  Yoõ musô beaò -     thió iî mind®  Mosô consoleó witè blocë transmissioî  allo÷ -     thå sendinç oæ onlù thå unprotecteä fields¬  whicè musô theî -     bå  seô  uð  tï totaì lesó thaî 25µ byteó  (includinç  fielä -     separators). - -c.   Yoõ won'ô wanô tï uså thió procedurå foò manuaì input¬ sincå -     thå  backspacå  anä  otheò controló  characteró  arå  merelù -     transmitteä withouô interpretation® Furthermore¬ characteró -     typeä wilì noô bå echoeä tï thå screen. - -d. Characteró  maù bå losô wheî thå consolå ió operateä aô higè -     bauä   rates®   Characteró  will“  bå  losô  wheî  useä   iî -     conjunctioî  witè thå 808· matè library®  Thió  ió  becauså -     interruptó  musô  bå  disableä whilå thå 808·  ió  computinç -     undeò  thå  currenô versioî oæ MP/M®  Thió  probablù  makeó -     R_CON_RAW unusable. -      - -.CP9 Š8. Time of Day - - type - tod_rec = record - day: integer; - hour: byte; - min: byte; - sec: byte - end; - - external procedure get_tod(var tod: tod_rec); - -.CP3 -Thió procedurå implementó MP/Í calì 155¬  excepô thaô iô convertó -thå hour/min/seã fieldó tï binarù insteaä oæ BCD®  Thå fieldó iî -recorä TOÄ arå filleä iî aó follows: - - day = number of days since 1 Jan 1978 - hour = hour of the day, 0 to 23 (24-hour clock) - min = minute of the hour, 0 to 59 - sec = second of the minute, 0 to 59 - -Iæ yoõ neeä thå valueó iî BCÄ insteaä oæ straighô binary¬ yoõ caî -reconverô thå numberó iî thå callinç program¬ oò uså @BDOS86. -cmdtyp] ;Get GPL and DTL fields - sto ax,ciopb+7 ;Set GPL and DTL fields - sto #mrtry,rtry ;Initialize retry count -fnl1 ld al,ciopb+2 ;Get cylinder number - call doseek ;Seek to proper track - jnz fnl3 ;If seek error - ld ax,bufseg ;Get host buffer segment - ld cl,#4 ;Shift count - rol ax,cl ;Shift segment for absolute address - mov bx,ax ;Save lower 16 bits of paragraph - and al,#0fh ;Grab upper nibble of paragraph - and bx,#0fff0h ;Grab upper 12 bits of offset - add bx,bufadr ;Form 16 bit offset - adc al,#0 ;Propagate carry up to upper nibble - outb dma ;Msb of 24 bit address - mov al,bh ;Get middle byte of 24 bit address - outb dma ;Middle Byte of 24 bit address - mov al,bl ;Get lsb of 24 bit address - outb dma ;Lsb of 24 bit address - ld bx,#ciopb ;Address of command to execute - ld cx,#ciopl ;Set command buffer length - ld dx,#7 ;Length of status info - call exec ;Perform operation - sub ax,#8040h ;Check for errors - sto ah,erflag ;Set error flag - jz fnl4 ;If no errors -fnl3 decb rtry ;Get retry counter - jnz fnl1 ;If not permanent error - or al,#1 ;Set error condition - sto al,erflag ;Set error flag -fnl4 ret - endif - page -;**************************************************************** -;* * -;* HDFNL -- Hard disk final command processing. * -;* * -;**************************************************************** - - if hard -hdfnl call hdsel ;Select the hard disk unit - sto al,erflag ;Save error condition - jnz hdfnl2 ;If select error - stob #mrtry,rtry ;Set retry count - stob #mrtry,recal ;Set not recal on error -hdfnl1 call hdseek ;Seek to correct track - call hdxfer ;Perform hard disk transfer - sto al,erflag ;Save error condition - jz hdfnl2 ;If no errors - decb rtry ;Update error count - jnz hdfnl1 ;If attempts left - ld bl,actdsk ;Get current drive - ld bh,#0 ;Form 16 bit drive # - stob #-1,[bx+hdcyl] ;Force track zero seek - decb recal ;Check recalibrated attempt - jnz hdfnl1 ;If no recal attempt yet - or al,#1 ;Set error condition - sto al,erflag ;Save error condition -hdfnl2 ret -recal db 0 - endif - -rtry db 0 ;Storage for retry count - -;**************************************************************** -;* * -;* Command buffer disk type dependent values. * -;* * -;** \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/MPMUTIL.I86 b/software/CPM/CPM20_MTPUG_08/MPMUTIL.I86 deleted file mode 100644 index 25f444d..0000000 --- a/software/CPM/CPM20_MTPUG_08/MPMUTIL.I86 +++ /dev/null @@ -1,546 +0,0 @@ -;MP/M Utility routines in assembly language to provide operations -; which are difficult or unavailable from Pascal MT+ -; -;Pascal MT+ definitions for procedures/functions in this package: -; -; external function create_process(pd_p: ^process_descriptor): boolean; -; external procedure delay(ticks: integer); -; external procedure dispatch; -; external procedure fix_stack(taskp: ^integer; -; udap: ^user_data_area; -; size: integer); -; external procedure init_mpm_util(size: integer); -; external function queue_make(qd_p: ^queue_descriptor): boolean; -; external function queue_oper(op: byte; -; qp_p: ^queue_parm_block): boolean; -; external function set_priority(priority: byte): boolean; -; external procedure terminate; -; external procedure abort(pd_p: ^process_descriptor); -; external function x_time: longint; -; external procedure r_con_raw(str: ^string); -; external procedure get_tod(tod: ^tod_record); -; external function who_am_i: ^process_descriptor; - - - name mpm_util - - assume cs: code, ds: data - -spoff equ 34h ;offset of sp in UDA -csoff equ 50h ;offset of cs in UDA -dsoff equ 52h ;offset of ds in UDA -esoff equ 54h ;offset of es in UDA -ssoff equ 56h ;offset of ss in UDA - -mpm_call equ 224 ;mpm call interrupt value - -mpm_read_raw equ 3 ;mpm read raw console function -mpm_bios equ 50 ;mpm direct BIOS call function -mpm_make_q equ 134 ;mpm make queue function -mpm_min_q equ 135 ;smallest mpm queue function code -mpm_max_q equ 140 ;largest mpm queue function code -mpm_delay equ 141 ;mpm delay function -mpm_dispatch equ 142 ;mpm dispatch function -mpm_terminate equ 143 ;mpm terminate function -mpm_create_p equ 144 ;mpm create process function -mpm_set_prior equ 145 ;mpm set priority function -mpm_get_sysdat equ 154 ;mpm get system data area addr fcn -mpm_get_tod equ 155 ;mpm get time of day -mpm_get_pd equ 156 ;mpm get process desc address -mpm_abort equ 157 ;mpm abort specified process fcn - - -data segment public - -stack_offset dw ? - -data ends - - -code segment public - - public delay, dispatch, terminate, abort, xtime - public createprocess, setpriority - public queuemake, queueoper - public fixstack, initmpmutil -; public whoami ;temp fix -- causes problem - public rconraw, gettod - - -;************************************************************************ -; PROCEDURE INIT_MPM_UTIL(SIZE: INTEGER) * -;Inputs: * -; Size of stack area to reserve for main program * -;Outputs: * -; None * -;Processing: * -; Internal initialization for FIX_STACK. INIT_FIX_STACK must be * -; called exactly once before any calls to FIX_STACK. It notes * -; amount of stack space to reserve for the main program. * -; Also sets up location of XIOS entry for X_TIME. * -;************************************************************************ - - -initmpmutil proc near - - pop dx ;return address - pop ax ;size - mov stack_offset,ax ;initialize offset with size - - push dx ;restore return address - push es ;save extra segment - - mov cl,mpm_get_sysdat ;get system data area address - int mpm_call ;... in es:bx - mov cx,es: word ptr 28h[bx] ;XIOS entry offset - mov dx,es: word ptr 2Ah[bx] ;...and segment - mov cs:xtoff,cx ;put into CALLF instruction - mov cs:xtseg,dx - - pop es ;restore extra segment - ret - -initmpmutil endp - - -;************************************************************************ -; PROCEDURE FIX_STACK(TASKP: ^INTEGER; * -; UDAP: ^USER_DATA_AREA; * -; SIZE: INTEGER); * -;Inputs: * -; Starting address of task * -; Address of User Data Area * -; Size of stack area to reserve for this task * -;Outputs: * -; None * -;Processing: * -; Puts segment registers in UDA table. Computes stack area to * -; use for this task, puts stack location in UDA table, * -; puts task address at stack location. Assumes small model. * -; Init must have been called first to set up 'offset' variable. * -;************************************************************************ - -fixstack proc near - - pop cx ;return address - pop ax ;size value - pop bx ;offset of UDA - pop dx ;segment of UDA (don't care) - push ax ;save size - - mov word ptr csoff[bx],cs ;store segment registers in UDA - mov word ptr dsoff[bx],ds - mov word ptr esoff[bx],es - mov word ptr ssoff[bx],ss - - mov ax,sp ;current stack pointer - sub ax,stack_offset ;subtract offset - mov word ptr spoff[bx],ax ;put new stack pointer in UDA - pop dx ;size - add stack_offset,dx ;new offset value for next time - - pop dx ;offset of task - pop bx ;segment of task (don't care) - push cx ;return address back on stack - - push bp - mov bp,ax ;get new stack offset - mov word ptr [bp],dx ;put task address at that location - pop bp - - ret ;all done - -fixstack endp - - -;************************************************************************ -; PROCEDURE DELAY(TICKS: INTEGER); * -;Inputs: * -; Number of clock ticks (1/60 second) to delay * -;Outputs: * -; None * -;Processing: * -; Calls MP/M delay function for given number of ticks. * -; If TICKS is 0 or negative (>32767) there is no delay. * -;************************************************************************ - -delay proc near - - pop bx ;return address - pop dx ;number of ticks - push bx ;save return address - cmp dx,0 - jle delend ;no delay if zero or negative - mov cl,mpm_delay - int mpm_call ;call mpm -delend: ret - -delay endp - - -;************************************************************************ -; PROCEDURE DISPATCH; * -;Inputs: * -; None * -;Outputs: * -; None * -;Processing: * -; Calls MP/M dispatch to allow scheduling of another task. * -;************************************************************************ - -dispatch proc near - - mov cl,mpm_dispatch - int mpm_call - ret - -dispatch endp - - -;************************************************************************ -; PROCEDURE TERMINATE; * -;Inputs: * -; None * -;Outputs: * -; None * -;Processing: * -; Calls MP/M function to terminate this task. * -;************************************************************************ - -terminate proc near - - mov cl,mpm_terminate - int mpm_call - ret - -terminate endp - - -;************************************************************************ -; PROCEDURE ABORT(PD_P: ^PROCESS_DESCRIPTOR); * -;Inputs: * -; Address of Process Descriptor table * -;Outputs: * -; None * -;Processing: * -; Calls MP/M function to abort the specified task. * -;************************************************************************ - -abort proc near - - pop ax ;return address - pop dx ;PD offset - pop bx ;PD segment - push ax ;save return address - push ds ;save current data segment - mov ds,bx ;ds of the PD - add dx,48 ;offset of the APB in the PD - mov cl,mpm_abort - int mpm_call ;call mpm to abort - pop ds ;restore ds - ret ;exit - -abort endp - - -;************************************************************************ -; FUNCTION X_TIME: LONGINT; * -;Inputs: * -; None * -;Outputs: * -; Time in ticks since system start * -;Processing: * -; XIOS is called directly to get at non-standard XIOS * -; call #4, implemented as misc extra calls in G&G XIOS. * -; 32-bit integer counter returned in bx, ax (Pascal longint) * -; INIT_MPM_UTIL must have been called first to set up XIOS entry. * -;************************************************************************ - -xtime proc near - - pushf ;save interrupt state - cli ;disable interrupts - mov al,4 ;XIOS call number - mov ch,10 ;extended call number - db 9Ah ;CALLF to XIOS -xtoff dw 0 ;time returned in dx,cx -xtseg dw 0 - popf ;restore interrupt state - - mov ax,cx ;time lsw - mov bx,dx ;time msw - ret ;return - -xtime endp - - -;************************************************************************ -; FUNCTION CREATE_PROCESS(PD_P: ^PROCESS_DESC): BOOLEAN; * -;Inputs: * -; Address of Process Descriptor table * -;Outputs: * -; True if success, False if failure * -;Processing: * -; Creates subtask for given Process Descriptor table. * -;************************************************************************ - -createprocess proc near - - pop ax ;return address - pop dx ;offset of PD - pop bx ;segment of PD - push ax ;save return address - push ds ;save current data segment - - mov ds,bx ;get PD segment - mov cl,mpm_create_p - int mpm_call ;call MP/M - pop ds ;restore ds - and ax,ax ;ax=0 if success - - jz cpok ;jump if success - xor ax,ax ;return 'False' - ret - -cpok: inc ax ;return 'True' - ret - -createprocess endp - - -;************************************************************************ -; FUNCTION SET_PRIORITY(PRIOR: BYTE): BOOLEAN; * -;Inputs: * -; Priority value to use * -;Outputs: * -; True if success, False if failure * -;Processing: * -; Sets current task priority to given value * -;************************************************************************ - -setpriority proc near - - pop ax ;return address - pop dx ;priority - push ax ;save return address - mov cl,mpm_set_prior - int mpm_call ;call MP/M - and ax,ax ;ax=0 if success - - jz spok ;jump if success - xor ax,ax ;return 'False' - ret - -spok: inc ax ;return 'True' - ret - -setpriority endp - - -;************************************************************************ -; FUNCTION QUEUE_MAKE(QD_P: ^QUEUE_DESCRIPTOR): BOOLEAN; * -;Inputs: * -; Address of Queue Descriptor table * -;Outputs: * -; True if success, False if failure * -;Processing: * -; Creates a queue according to Queue Descriptor table. * -;************************************************************************ - -queuemake proc near - - pop ax ;return address - pop dx ;offset of QD - pop bx ;segment of QD - push ax ;save return address - push ds ;save current data segment - - mov ds,bx ;get QD data segment - mov cl,mpm_make_q - int mpm_call ;call MP/M - pop ds ;restore ds - and ax,ax ;ax=0 if success - - jz qmok ;jump if success - xor ax,ax ;return 'False' - ret - -qmok: inc ax ;return 'True' - ret - -queuemake endp - - -;************************************************************************ -; FUNCTION QUEUE_OPER(OP: INTEGER; * -; QP_P: ^QUEUE_PARM_BLOCK): BOOLEAN * -;Inputs: * -; Operation code for a queue operation (135 - 140) * -; Address of Queue Parameter Block * -;Outputs: * -; True if success, False if failure * -;Processing: * -; Ensures OP is a queue operation other than make_queue. * -; Performs operation, returns status * -;************************************************************************ - -queueoper proc near - - pop ax ;return address - pop dx ;qpb offset - pop bx ;qpb segment - pop cx ;operation code - push ax ;return address back on stack - push ds ;save current data segment - - mov ds,bx ;get qpb segment - cmp cl,mpm_min_q ;validate op_code - jb qobad - cmp cl,mpm_max_q - ja qobad - int mpm_call ;op code ok - call MP/M - pop ds ;restore ds - and ax,ax ;check returned status - - jnz qobad ;jump if failed - inc ax ;return 'True' - ret - -qobad: xor ax,ax ;return 'False' - ret - -queueoper endp - - -;************************************************************************ -; PROCEDURE R_CON_RAW(STR: ^STRING) * -;Inputs: * -; Address of string to read into * -;Outputs: * -; Raw console input written to string * -;Processing: * -; Reads raw console input up to a CR. * -; Chars placed in STR, which must be big enough. CR not included.* -; Equivalent to READLN(KBD, STR) * -;************************************************************************ - -rconraw proc near - - pop ax ;return address - pop bx ;offset of string - push bx ;put them back - push ax - mov byte ptr [bx],0 ;set string length to 0 - -loop: mov cl,mpm_read_raw - int mpm_call ;read raw char from console - cmp al,0Dh ;is it cr? - je done ;exit if so - - pop dx ;return address - pop bx ;offset of string - push bx ;put them back - push dx - inc byte ptr [bx] ;bump string length byte - mov cl,byte ptr [bx] ;get length of string - mov ch,0 ;make 16 bits - add bx,cx ;addr of next character - mov byte ptr [bx],al ;store new character - jmp short loop ;repeat until done - -done: ret 4 ;exit, pop offset and segment - -rconraw endp - - -;************************************************************************ -; PROCEDURE GET_TOD(TOD: ^TOD_RECORD); * -;Inputs: * -; Address of TOD record: record * -; day: integer * -; sec, min, hour: byte * -; end * -;Outputs: * -; Record set as described below * -;Processing: * -; day set to number of days since Jan 1, 1978 * -; hour, min, sec set to binary value * -;************************************************************************ - -gettod proc near - pop ax ;return address - pop dx ;offset of tod record - pop cx ;...segment - push cx ;put back input data - push dx - push ax - push ds ;save current data segment - - mov ds,cx ;segment of tod record - mov cl,mpm_get_tod ;call mpm tod function - int mpm_call - - pop dx ;original data segment - pop ax ;return address - pop bx ;offset of tod record - pop ds ;...segment - push ax ;restore return address - push dx ;restore original data segment - add bx,2 ;point to hour byte - call todxlate ;translate from BCD to binary in place - inc bx ;point to minute byte - call todxlate - inc bx ;point to second byte - call todxlate - pop ds - ret - -gettod endp - -; translate in place from BCD to binary -; new = upper(old)*10 + lower(old) -; where 'upper' and 'lower' means nybble - -todxlate proc near - - mov al,byte ptr[bx] ;BCD value in al - mov dl,al - and dl,0Fh ;just lower nybble in dl - mov ah,0 - mov cl,4 - shr ax,cl ;just upper nybble in ax - mov cl,10 - mul cl ;upper * 10 in ax - add al,dl ;upper*10 + lower - mov byte ptr[bx],al ;store in place - ret - -todxlate endp - - -;************************************************************************ -; FUNCTION WHO_AM_I: ^PROCESS_DESCRIPTOR * -;Inputs: * -; None * -;Outputs: * -; Address of calling process's PD * -;Processing: * -; Returns PD address * -;************************************************************************ - -whoami proc near - - push es - mov cl,mpm_get_pd ;call mpm function - int mpm_call - mov bx,es ;segment address, offset in ax - pop es - ret - -whoami endp - - -code ends - - end - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/MPMUTIL.R86 b/software/CPM/CPM20_MTPUG_08/MPMUTIL.R86 deleted file mode 100644 index 224f25898f07ac9f0e2b42971f1325119d0e8f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 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 diff --git a/software/CPM/CPM20_MTPUG_08/PASMAT.COM b/software/CPM/CPM20_MTPUG_08/PASMAT.COM deleted file mode 100644 index 2063bb819c2b9fbd5dcecc64d6a51e9434712ec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 diff --git a/software/CPM/CPM20_MTPUG_08/PASMAT.DOC b/software/CPM/CPM20_MTPUG_08/PASMAT.DOC deleted file mode 100644 index 4e1efbe..0000000 --- a/software/CPM/CPM20_MTPUG_08/PASMAT.DOC +++ /dev/null @@ -1,284 +0,0 @@ -.PN1 -.FOPASMAÔ pagå # - PASMAT User Manual - PAScal source-text reforMATer - A Public-Domain Program - Pascal MT+ Version - - -1. Introduction. - -Pasmaô  ió á utilitù whicè reformató á Pascaì sourcå prograí intï -á standarä format® Itó featureó include: - -a. Thå  prograí  maù bå converteä tï uniforí caså  conventions® -     Thió ió undeò thå controì oæ thå user. - -b. Thå prograí ió indenteä tï sho÷ itó logicaì  structure¬  anä -     wilì bå fiôted intï á specifieä outpuô linå length. - -c. Comment delimiters are all changed to '{ }'. - -d. Iæ requested¬ underscorå characteró wilì bå removeä froí thå -     identifieró foò uså oî systemó whicè dï noô supporô them. - -e.  Alì non-printinç characteró excepô foò tabó arå removed¬ anä -     thå  hi-biô oæ alì characteró ió turneä off®  Thió  caî  bå -     usefuì  afteò  glitcheó  witè somå editoró  -- notablù  wheî -     usinç WordStar. - -Thå  useò  haó considerablå controì oveò thå forí oæ  thå  outpuô -usinç "formatteò directives¢ inserteä iî á speciaì forí oæ Pascaì -comment. - -Pasmaô  acceptó fulì programs¬  modules¬  singlå procedures¬  anä -groupó oæ statments® Iô maù complaiî abouô arbitrarù collectionó -oæ  prograí fragments¬  sucè aó incompletå  procedures®  Wheî  á -syntaø erroò ió detected¬ Pasmaô copieó thå remaindeò oæ thå filå -unchangeä tï thå output®  Pasmaô acceptó alì oæ standarä Pascal¬ -pluó thå extensionó oæ Pascaì MT+. - - -2. Formatting Details. - -Iî general¬  thå formattinç ió straightforward¬  anä requireó  nï -controì  froí  thå  user®  Thå besô waù tï finä ouô  ho÷  Pasmaô -formató somethinç ió tï trù iô ouô anä see®  Therå are¬ however¬ -somå wayó iî whicè thå useò caî affecô thå formattinç rules¬  anä -thió sectionó coveró them. - -2.1 Comments. - -Commentó  iî Pascaì arå harä tï format¬  anä Pasmaô trieó  tï  bå -cleveò  abouô it®  Thå ruleó shoulä allo÷ yoõ tï uså commentó tï -achievå almosô anù effecô yoõ woulä like¬ buô yoõ dï havå tï kno÷ -thå rules®  Iæ yoõ finä thaô Pasmaô scrambleó youò comments¬ re- -read this section. - Š.CP2 -a. Á commenô whicè standó alonå oî á singlå linå wilì bå passeä -     tï thå outpuô unaltered®  Iô wilì havå itó lefô enä seô  tï -     thå  currenô indentatioî level¬  sï thaô iô wilì bå  aligneä -     witè thå statementó beforå anä afteò it®  Iæ iô ió toï lonç -     tï fiô witè thió alignment¬ iô wilì bå placeä oî thå pagå aó -     faò righô aó iô wilì go. - -b. Á  commenô  whicè beginó aó thå firsô thinç oî á  line¬  anä -     continueó  oî  anotheò line¬  wilì bå passeä tï  thå  outpuô -     unaltered¬  includinç thå indentation® Thió typå oæ commenô -     (á "blocë comment"© ió assumeä tï bå carefullù formatteä  bù -     thå author¬ anä sï ió untouched. - -c. Iæ á commenô whicè ió covereä bù onå oæ thå abovå ruleó wilì -     noô  fiô withiî thå defineä outpuô linå length¬  thå  outpuô -     linå wilì bå extendeä aó necessarù tï accomodatå thå commenô -     anä á messagå wilì bå written aô thå enä oæ thå formatting. - -d. Á  commenô  whicè ió noô thå firsô thinç oî á linå  wilì  bå -     formatteä  iî  witè thå resô oæ thå code®  Wordó withiî  iô -     wilì bå moveä arounä freelù tï makå iô fit¬ sï nothinç whicè -     haó  á fixeä formaô maù bå useä iî sucè á comment®  Sucè  á -     commenô  wilì bå brokeî onlù aô blanks¬  anä iæ therå ió  nï -     waù  tï breaë á commenô anä stilì fiô thå outpuô withiî  thå -     outpuô linå length¬ thaô linå wilì bå extendeä aó necessary¬ -     anä á messagå writteî aô thå enä oæ thå formatting. - -2.2 Statement Bunching. - -Thå  normaì  formattinç  ruleó foò á "case¢  statmenô  placå  thå -selecteä statmentó oî á separatå linå froí thå caså labels®  Thå -"B¢  directivå  (seå below© telló thå formatteò  tï  placå  theså -statementó oî thå samå linå aó thå caså labeló iæ iô wilì fit. - -Similarly¬  thå  ruleó  foò "if-then-else¢ placå  thå  controlleä -statementó  oî separatå lines®  Thå "B¢ directivå telló thå for -matteò tï placå thå controlleä statementó oî thå samå linå aó thå -"then¢ oò "else¢ iæ iô wilì fit. - -2.3 Tables. - -Iî  manù  Pascaì programó therå arå lonç listó oæ  initializatioî -statmentó  oò constanô declarationó whicè arå logicallù á  singlå -actioî  oò declaration®  Thå authoò maù wanô tï fiô theí intï aó -fe÷  lineó  aó possible®  Thå "S¢ directivå (seå  below©  allowó -this® Iæ thió ió used¬ thå equivalenô oæ taâ stopó arå seô uð oî -thå line¬  anä successivå statmentó oò constanô declarationó  arå -aligneä tï theså taâ stopó insteaä oæ beginninç oî ne÷ lines. - -Therå  wilì  alwayó bå aô leasô onå blanë betweeî  statementó  oò -constanô declarations¬  sï iæ taâ stopó arå seô uð aô everù char -acteò location¬ statementó wilì bå packeä oî á line. - -Structureä statementó whicè normallù formaô oî morå thaî onå linå -wilì noô bå affecteä bù thió directive. Š - -.CP4 -3. Usage. - -Pasmat is invoked as follows: - - pasmat - -pasmat myprog.src b:myprog.new b+r- o=72 - -Thió  wilì  uså  myprog.srã  froí thå  defaulô  drivå  aó  input¬ -producinç  á filå oî drivå  calleä myprog.ne÷ whicè containó thå -reformatteä program® Thå  optioî ió turneä on¬ thå Ò optionó ió -turned off, and the O option is set to 72. - - -4. Directives. - -Directiveó caî bå supplieä oî thå commanä linå aó above¬  anä caî -bå  includeä iî thå texô iî speciaì comments®  Thå speciaì  com -mentó havå thå form: - - {[directives] text} -or - {$ text [directives] text} - -The directives themselves are either switches or numeric. - -Switcè  directiveó  consisô oæ aî uppercaså oò  lowercaså  letteò -immediately followed by a '+' or '-'. Examples: B+, r- - -Numeriã  directiveó consisô oæ aî uppercaså oò lowercaså  letter¬ -an optional '=', and a number. Examples: O=72, s=2, t4 - -Multiplå  directiveó maù bå separateä bù commaó  oò  blanks¬  buô -blankó arå noô alloweä withiî á directive®  Portionó oæ á direc -tivå whicè arå malformeä oò unrecognizeä arå quietlù ignored. - Š.CP4 -Examples: - {[b+] turn on statement bunching} - {[o=79, s2] make line width 79, 2 statements per line} - {$Ð eject á pagå [r+Ý make reserveä wordó uppercase} - -But not: - {this will not be recognized [o=79] due to initial text} - -The recognized directives are as follows: - -B (Defaulô  B-©  B« specifieó thaô thå statemenô followinç  á -     "then¢ oò "else¢ oò caså labeì wilì bå puô oî thå samå  linå -     iæ  iô wilì fit®  Thió makeó á smalleò outpuô  file®  Somå -     finä  iô easieò tï read¬  somå don't®  Iô ió hardeò tï makå -     corrections. - -C (Numeric¬  defaulô C=1© Thió specifieó thå numbeò oæ blankó -     precedinç  anä followinç inlinå comments®  Iæ therå ió  noô -     enougè  rooí  oî  á giveî linå foò à spaceó  precedinç  thå -     comment¬ Ô spaceó wilì bå used (seå below©. - -F (Defaulô F+© Turnó formattinç oî (+© oò ofæ (-)¬ commencinç -     oî thå linå afteò thå directivå iî whicè iô ió placed® Thió -     ió  usefuì foò preservinç carefullù hand-formatteä  sectionó -     oæ á program. - -L (Defaulô  L-© L« specifieó thaô thå caså oæ reserveä  wordó -     anä identifieró ió á literaì copù oæ thå input®  Thió over -     rideó  thå 'R§ anä 'U§ directives®  Thió directivå ió  dis -     ableä bù thå 'P§ directive. - -O (Numeric¬  defaulô  O=72©  Thió specifieó thå widtè oæ  thå -     outpuô line®  Thå maximuí valuå alloweä ió 13²  characters® -     Iæ  á particulaò iteí wilì noô fiô iî thió width¬  thaô linå -     wilì bå wideneä anä á warninç messagå wilì bå issued. - -P (Defaulô  P-© P« specifieó "portabilitù  mode¢  formatting¬ -     whicè  removeó  underscorå (_© characteró froí  identifiers® -     Thå  firsô letteò oæ eacè identifier¬  anä thå firsô  letteò -     followinç eacè underscorå wilì bå iî uppercase® Thå remain -     inç characteró wilì bå iî lowercase® Thió overrideó thå 'L§ -     anä  'U§ directives®  Thå caså oæ reserveä wordó  ió  unaf -     fecteä bù 'P§ (iô ió seô witè 'R'). - -Q (Defaulô Q-© Q« specifieó quieô mode¬  iî whicè alì consolå -     messageó arå suppressed¬ includinç alì erroò messages® Thió -     ió usefuì iî detacheä modå undeò MP/M. - -R (Defaulô  R-© R« specifieó thaô alì reserveä wordó wilì  bå -     in all uppercase. R- sets all reserved words to lowercase. - -.CP2 -S (Numeric¬  defaulô S=1© Specifieó thå numbeò oæ statementó -     peò line®  Thå spacå froí thå currenô indentatioî leveì  tï -     thå  enä oæ thå linå ió divideä intï equaì pieces¬  anä suc -     cessivå  statementó arå starteä aô thå boundarù oæ  á  piecå Š     (likå tabbinç oî á typewriter)®  Á statemenô whicè wilì noô -     fiô  oî  onå linå wilì noô bå affected¬  buô  thå  followinç -     statementó  maù looë strange®  Thió directivå affectó  onlù -     thå  constanô  declaratioî anä statemenô portionó oæ á  pro -     gram¬ anä ió intendeä foò uså iî intializinç variables. - -.CP4 -T (Numeric¬  defaulô  T=2© Specifieó thå amounô tï "tab¢  foò -     eacè  indentatioî  level®   Statementó  whicè  continuå  oî -     successivå  lineó wilì bå additionallù indenteä bù halæ thió -     amount. - -U (Defaulô U-© U« specifieó thaô identifieró arå converteä tï -     uppercase®  Theù wilì otherwiså bå converteä tï  lowercase® -     This directive is overridden by the 'L' and 'P' directive. - - -5. Limitations. - -a. Maximum input line length is 132 characters. - -b. Maximum output line length is 132 characters. - -c. Only syntactically correct programs can be formatted. - -d. Inpuô  fileó  arå currentlù limiteä tï  32Ë  bytes®  Largeò -     fileó  wilì  causå aî internaì counteò tï overflo÷ anä  ter -     riblå thingó tï happen. - - -6. Errors Detected and Reported. - -a. Anù detecteä syntaø erroò iî thå codå wilì causå thå format -     tinç tï abort¬ witè á messagå tï thå console® Thå remaindeò -     oæ  thå filå wilì bå copieä unchanged®  Thå syntaø checkinç -     ió noô complete¬  meaninç that Pasmaô wilì allo÷ somå thingó -     thaô  thå compileò wilì not®  Iæ possible¬  uså thå  syntaø -     checkeò  iî thå Speeä Programminç Packagå tï  verifù  syntaø -     beforå runninç Pasmat, to avoid formatter aborts. - -b. Therå  ió á limiô to thå numbeò oæ indentatioî leveló Pasmaô -     caî  handle¬  buô iô shoulä bå ablå tï handlå anythinç  thaô -     Pascaì MT« caî handle® Iæ thå limiô ió exceeded¬ processinç -     will be aborted. This should never happen. - -c. Iæ á commenô woulä requirå morå thaî thå maximuí outpuô linå -     lengtè (132)¬ processinç wilì bå aborted® Thió shoulä neveò -     happen. - -d. Iæ á tokeî (identifieò oò string© ió toï lonç foò thå outpuô -     linå length¬  thå lengtè wilì bå extendeä foò thaô line®  Á -     messagå wilì writteî tï thå consolå aô thå enä oæ processinç -     givinç thå numbeò oæ timeó thió occurreä anä thå linå numbeò -     oæ thå firsô occurrence. - -.CP2 Še. Iæ  á commenô linå ió extendeä accordinç tï rulå "c¢ iî  thå -     commentó  sectioî above¬  á messagå wilì bå writteî  tï  thå -     consolå  aô  thå enä oæ thå formattinç givinç thå numbeò  oæ -     timeó thió occurreä anä thå outpuô linå numbeò oæ thå  firsô -     occurrence. - - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/PMTEST.TST b/software/CPM/CPM20_MTPUG_08/PMTEST.TST deleted file mode 100644 index 781c9a4..0000000 --- a/software/CPM/CPM20_MTPUG_08/PMTEST.TST +++ /dev/null @@ -1,84 +0,0 @@ -prOGram test; -cOnst lOw=1; hIGh=10; -aaa='aaa';bbb='bbb';ccc=-32;ddd=$abcd;eee=#1234; -type -fyle = file Of packed array[1..1023] Of char; -natural = 1..maxint; -maintype = (little, medium, larGe); -midtype = (lO, med, hI); -biGtype = (One, twO, three); -cOmplicated = packed array [-1..$1] Of -recOrd -case distinGuish: maintype Of -little: (lray: array[1..2] Of -recOrd -i1, i2, i3: inteGer; -f: file Of packed array[1..10] Of real; -end); -medium: (mrec: -recOrd -mrecx,mrecy: char; -mrecray: array[19..21] Of -recOrd -a1,b1,c1: char; -d1,e1: array[38..40] Of byte; -case mid: midtype Of -lO: (x11,y11: real); -med: (x12,y12,z12: inteGer); -hI: (w13,x13,y13,z13: byte) -end -end); -larGe: (mlaray: array[1..2] Of -recOrd -a2,b2,c2,d2,e2: real; -f2,G2,h2: inteGer; -case biG: biGtype Of -One: (brecO: recOrd -brecOray: array[10..12] Of real; -w21,x21,y21,z21: inteGer -end); -twO: (brayt: array[-4..4] Of recOrd re,im:real end); -three: (brec3: recOrd -brec3ray: array[48..50,-3..-1] Of -recOrd -a23,b23,c23: strinG[2]; -br3rayray: array[maintype] Of real; -w23,x23,y23: wOrd -end; -t23,u23,v23: strinG[2]; -end) -end) -end; -var -ff: file; -aa,bb,cc,dd:byte; -ww,xx,yy,zz:bOOlean; -x: external recOrd a,b: real; c,d: inteGer end; -y: absOlute [23] inteGer; -z: absOlute [hIGh] real; -w: absOlute [$3A6] byte; -UGH: COMPLICATED; - -external prOcedure interrupt [36] intp1; -external prOcedure interrupt [lOw] intp2; -external prOcedure interrupt [$EF1] intp3; -prOcedure interrupt [17] intp4;beGin -aa:=bb;bb:=cc;cc:=dd;dd:=aa;ww:=xx;xx:=yy;yy:=zz;zz:=ww;end; -prOcedure test_cOn_fOrm(var a: array[lOwb..hIGhb:natural] Of inteGer); -var i:inteGer; -beGin FOR i := lOwb tO hIGhb div 2 dO -a[i] := x.c; a[i*2] := x.d; -if ww and xx then yy:=zz else zz:=yy; -aa:=~((aa|bb)&(cc!dd))!(?aa);end; -beGin {main prOGram} -with x dO -if a 0 THEN - BEGIN - ASSIGN(INFILE, FILENAME ); - RESET(INFILE) - END; - OPENERRNUM := IORESULT; - OPENOK := ( OPENERRNUM <> 255 ); - IF NOT OPENOK THEN - WRITELN( '*** INPUT OPEN ERROR # ', OPENERRNUM ); - UNTIL OPENOK; - - WRITE('Output file name? '); - READLN(LSTFILENAME); - TOCONSOLE := (LSTFILENAME = 'CON:'); - ASSIGN(LST,LSTFILENAME); - REWRITE(LST); - - WRITE( 'Do you want a listing (Y/N)? ' ); - READ( LISTOPTION ); - LISTING := (LISTOPTION <> 'N') AND (LISTOPTION <> 'n'); - IF LISTING THEN - PUTNUMBER(0); - READLN(INFILE,INPUT_LINE); - LINECOUNT := 0; - INLINEP := 1; - WRITELN; -END; (* OPENFILES *) - -{$P} -PROCEDURE LPWRITELN; -VAR - I : INTEGER; - CH : CHAR; -BEGIN - WRITELN(LST,BUF); - BUF[0] := CHR(0); - LINECOUNT := LINECOUNT+1; - IF (LINECOUNT MOD 60) = 0 THEN - PAGE(LST); -END; - -{$P} -PROCEDURE PUTALFA(S:ALFA); -BEGIN - MOVELEFT(S[1], BUF[ORD(BUF[0])+1], 8); - BUF[0] := CHR(ORD(BUF[0]) + 8); -END; - - - -PROCEDURE PUTNUMBER(NUM: INTEGER); -VAR I,IPOT: INTEGER; - A: ALFA; - CH: CHAR; - ZAP: BOOLEAN; - -BEGIN - ZAP := TRUE; - IPOT := 10000; - A[1] := ' '; - FOR I := 2 TO 6 DO - BEGIN - CH := CHR(NUM DIV IPOT + ORD('0')); - IF I <> 6 THEN - IF ZAP THEN - IF CH = '0' THEN - CH := ' ' - ELSE - ZAP := FALSE; - A[I] := CH; - NUM := NUM MOD IPOT; - IPOT := IPOT DIV 10; - END; - A[7] := ' '; - MOVELEFT(A, BUF[ORD(BUF[0])+1], 7); - BUF[0] := CHR(ORD(BUF[0]) + 7); -END; - -{$P} -PROCEDURE GETNEXTCHAR; -BEGIN - - IF INLINEP = LENGTH(INPUT_LINE)+1 THEN - BEGIN - CH := ' '; {DUMMY EOL CHARACTER} - INLINEP := INLINEP + 1; {NEXT TIME THRU WILL READ NEW LINE} - EXIT - END; - - IF INLINEP > LENGTH(INPUT_LINE) THEN - BEGIN - READLN(INFILE,INPUT_LINE); - INLINEP := 2; - LINECOUNT := LINECOUNT + 1; - IF LENGTH(INPUT_LINE) > 0 THEN - CH := INPUT_LINE[1] - ELSE - BEGIN - CH := ' '; - IF EOF(INFILE) THEN - ALLDONE := TRUE; - END; - IF LISTING THEN - BEGIN - IF NOT TOCONSOLE THEN - WRITE('.'); - WRITELN(LST,BUF); - BUF[0] := CHR(0); - PUTNUMBER(LINECOUNT); - END - ELSE - WRITE('.'); - IF (LINECOUNT MOD 60) = 0 THEN - BEGIN - IF LISTING THEN - PAGE(LST); - WRITELN('< ',LINECOUNT:4,', ',MEMAVAIL:5,' >'); - END - END - - ELSE - BEGIN - CH := INPUT_LINE[INLINEP]; - INLINEP := INLINEP + 1; - END; - - IF LISTING THEN - BEGIN - BUF[0] := CHR(ORD(BUF[0]) + 1); - BUF[BUF[0]] := CH; - END; - -END; (* GETNEXTCHAR *) - -{$P} - -PROCEDURE SEARCH( ID: ALFA ); -(*MODULO P HASH SEARCH*) (*GLOBAL: T, TOP*) -VAR - I,J,H,D : INTEGER; - X : ITEMPTR; - F : BOOLEAN; - -BEGIN - J := 0; - FOR I := 1 TO ALFALEN DO - J := J*10+ORD(ID[I]); - H := ABS(J) MOD P; - F := FALSE; - D := 1; - REPEAT - IF T[H].KEY = ID THEN - BEGIN (*FOUND*) - F := TRUE; - IF T[H].LAST^.REFNUM = REFSPERITEM THEN - BEGIN - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].LAST^.NEXT := X; - T[H].LAST := X; - END - ELSE - WITH T[H].LAST^ DO - BEGIN - REFNUM := REFNUM + 1; - REF[REFNUM] := LINECOUNT - END - END - ELSE - IF T[H].KEY = ' ' THEN - BEGIN (*NEW ENTRY*) - F := TRUE; - NEW(X); - X^.REFNUM := 1; - X^.REF[1] := LINECOUNT; - T[H].KEY := ID; - T[H].FIRST := X; - T[H].LAST := X; - T[H].FOL := TOP; - TOP := H - END - ELSE - BEGIN (*COLLISION*) - H := H+D; - D := D+2; - IF H >= P THEN - H := H - P; - IF D = P THEN - BEGIN - WRITELN('ITEM TABLE OVERFLOW'); - ALLDONE := TRUE - END; - END - UNTIL F OR ALLDONE -END (*SEARCH*) ; - -{$P} - -PROCEDURE PRINTWORD(W: WORD); -VAR - L: INTEGER; - X: ITEMPTR; - NEXTREF : INTEGER; - THISREF: NUMREFS; -BEGIN - PUTALFA(W.KEY); - X := W.FIRST; - L := 0; - REPEAT - IF L = REFSPERLINE - THEN - BEGIN - L := 0; - LPWRITELN; - PUTALFA(' '); - END ; - L := L+1; - THISREF := (L-1) MOD REFSPERITEM + 1; - NEXTREF := X^.REF[THISREF]; - IF THISREF = X^.REFNUM THEN - X := NIL - ELSE - IF THISREF = REFSPERITEM THEN - X := X^.NEXT; - PUTNUMBER(NEXTREF); - UNTIL X = NIL; - LPWRITELN; -END (*PRINTWORD*) ; - -{$P} -PROCEDURE PRINTTABLE; - -VAR - I,J,M: INDEX; - -BEGIN - LINECOUNT := 0; - BUF[0] := CHR(0); - I := TOP; - WHILE I <> P DO - BEGIN (*FIND MINIMAL WORD*) - M := I; - J := T[I].FOL; - WHILE J <> P DO - BEGIN - IF T[J].KEY < T[M].KEY THEN - M := J; - J := T[J].FOL - END ; - PRINTWORD(T[M]); - IF M <> I THEN - BEGIN - T[M].KEY := T[I].KEY; - T[M].FIRST := T[I].FIRST; - T[M].LAST := T[I].LAST - END; - I := T[I].FOL - END -END (*PRINTTABLE*) ; - -{$P} -PROCEDURE GETIDENTIFIER; -VAR - J,K,I: INTEGER; - ID: ALFA; - MATCH: BOOLEAN; - -BEGIN (* GETIDENTIFIER *) - I := 0; - ID := ' '; - - REPEAT - IF I < ALFALEN THEN - BEGIN - I := I+1; - IF ('a' <= CH) AND (CH <= 'z') THEN - ID[I] := CHR( ORD(CH) - ORD('a') + ORD('A') ) - ELSE - IF CH = '_' THEN - I := I-1 {DISCARD UNDERSCORE} - ELSE - ID[I] := CH - END; - GETNEXTCHAR - UNTIL NOT (CH IN IDENTSET); - - I := 1; - J := NK; - - REPEAT - K := (I+J) DIV 2; (*BINARY SEARCH*) - IF KEY[K] <= ID THEN - I := K+1; - IF KEY[K] >= ID THEN - J := K-1; - UNTIL (I > J); - - IF KEY[K] <> ID THEN - SEARCH(ID); - -END; (* GETIDENTIFIER *) - -{$P} -BEGIN (* CROSSREF *) - - INITIALIZE; - OPENFILES; - - REPEAT - - IF CH IN IDENTSET THEN - GETIDENTIFIER - - ELSE - IF (CH = '''') THEN {SCAN OFF LITERAL STRING} - BEGIN - REPEAT - GETNEXTCHAR; - UNTIL (CH = '''') OR ALLDONE; - GETNEXTCHAR; - END - - ELSE - IF CH = '(' THEN {SCAN OFF (*...*) COMMENT} - BEGIN {FAILS ON (*)...*) } - GETNEXTCHAR; - IF CH = '*' THEN - BEGIN - GETNEXTCHAR; - WHILE (CH <> ')') AND (NOT ALLDONE) DO - BEGIN - WHILE (CH <> '*') AND (NOT ALLDONE) DO - GETNEXTCHAR; - GETNEXTCHAR; - END; - GETNEXTCHAR; - END; - END - - ELSE - IF CH = '{' THEN (* SCAN OFF {...} COMMENT *) - BEGIN - REPEAT - GETNEXTCHAR - UNTIL (CH = '}') OR ALLDONE; - GETNEXTCHAR; - END - - ELSE - GETNEXTCHAR; - - UNTIL ALLDONE; - - PAGE(LST); - PRINTTABLE; - PAGE(LST); - CLOSE(LST,I); - IF I = 255 THEN - WRITELN('Error closing output file'); - -END. - - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/SERIO.SRC b/software/CPM/CPM20_MTPUG_08/SERIO.SRC deleted file mode 100644 index 1f84840..0000000 --- a/software/CPM/CPM20_MTPUG_08/SERIO.SRC +++ /dev/null @@ -1,89 +0,0 @@ -module serio; -{ - A set of procedures and functions for the Apple II version of CP/M - which do I/O via 'COMM' cards (or their equivalent) put into various - slots. -} - -const slot = 2; { slot card is in } - base = $E08E; { base address for ACIA's } - -procedure poke(ch:byte;add:integer); -{ - Puts 'ch' into the absolute address, 'add' -} - -begin - inline ("LDA / ch / - "LHLD / add / - $77 ); { MOV M,A } -end; - -function peek (add:integer): byte; -{ - Returns the value of the byte located at the absolute address, 'add' -} - -var value:integer; - -begin - inline ( "LHLD/ add / - $7E / { MOV A,M } - "STA / value ); - peek := value; -end; - -procedure initac; -{ - Initializes the ACIA in the slot -} - -var status: integer; - -begin - status := base + slot *16; - inline ("LHLD/ status / - $3E / $03 / { MVI A,03 } - $77 / { MOV M,A } - $3E / $11 / { MVI A,11 } - $77 ); { MOV M,A } -end; (* initac *) - -function serin: char; -{ - Returns the byte which has just been received. - NOTE: it will stay forever in this routine if a byte has NOT been received -} - -const rxmask = $01; { mask for receive buffer full } - -var status, - data: integer; - -begin - status := base + slot*16; - data := status+1; - repeat until (peek(status) & rxmask ) <> 0; - serin := peek( data ); -end; - -procedure serout(ch: char); -{ - Sends the character, 'ch', out -} - -const txmask=$02; { mask for transmit buffer empty } - -var data, - status: integer; - - -begin - status := base + 16*slot; - data := status + 1; - repeat until (peek(status) & txmask ) <> 0; - poke (ch,data); -end; (* serout *) - -modend. - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/TESTGR.SRC b/software/CPM/CPM20_MTPUG_08/TESTGR.SRC deleted file mode 100644 index e393fe3..0000000 --- a/software/CPM/CPM20_MTPUG_08/TESTGR.SRC +++ /dev/null @@ -1,179 +0,0 @@ -PROGRAM testgr (input, output); - (*------------------------------------------------------------------*) - (* File : TESTGR.P on Prog Store 1 *) - (* *) - (* Written Mar 25,'82 by Jack Gilmer *) - (* *) - (* Modified to MT+ Pascal, J.A. Koehler, 23 Nov., 1982 *) - (* *) - (* This program calls routines defined in a graphics library such *) - (* as DMP.ERL and GRHP.ERL, and plots a border, then exercises *) - (* various options, etc. It makes a hard copy on hard copy devices, *) - (* (such as the DMP-2 plotter) or just the CRT if the package is *) - (* for a CRT oriented device (such as the ADM3) plus a hard copy *) - (* *) - (*------------------------------------------------------------------*) - - CONST - radian = 57.2958; - - - TYPE - astringtype = string[132]; - - aendtype = (noend, point, square, triangle, cross, ecks, diamond, - circle); - - alinetype = (noline, solid, dotted, dashed, dotdashed, - dotdotdashed); - - apointtype = RECORD (* absolute position in millimeters *) - x, - y: REAL; - END; - - VAR - - lineend: aendtype; - - sinewave: alinetype; - - ms, - mx, - my, - origin, - temp: apointtype; - - index, - xval: INTEGER; - - str: astringtype; - - EXTERNAL PROCEDURE adefault; - EXTERNAL PROCEDURE ainit; - EXTERNAL PROCEDURE aplot(endpoint: apointtype); - EXTERNAL PROCEDURE asetplot(line: alinetype; - repeatlength, - endsize: REAL; - endsymbol: aendtype); - EXTERNAL PROCEDURE asetstr(charheight, - charwidth, - charangle, - charspace, - strangle: REAL); - EXTERNAL PROCEDURE asetwindow(lowerleft, - upperright: apointtype); - EXTERNAL PROCEDURE asize(VAR size: apointtype); - EXTERNAL PROCEDURE astr(str: astringtype); - EXTERNAL PROCEDURE atext; - EXTERNAL PROCEDURE awhere(VAR where: apointtype); - - - - - BEGIN (* testgr *) - ainit; (* set it up *) - asize(ms); (* get screen size *) - origin.x := 0; (* set corners *) - origin.y := 0; - mx := origin; - mx.x := ms.x; - my := origin; - my.y := ms.y; - - asetplot(solid, 0, 0, noend); (* draw border *) - aplot(mx); - aplot(ms); - aplot(my); - aplot(origin); - - asetplot(noline, 0, 0, noend); - temp.x := ms.x * 0.05; - temp.y := ms.y * 0.95; - aplot(temp); - - str := 'Default size and direct. '; - - astr(str); - - temp.y := ms.y * 0.8; - aplot(temp); - asetstr(5, 1.5, -30, 1.6, -30); - str := 'Tall, narrow characters. '; - - astr(str); - - temp.y := ms.y * 0.65; - aplot(temp); - asetstr(1, 5, 30, 5.1, 30); - str := 'Short, fat characters.'; - - astr(str); - - temp.x := 0; (* draw sine waves - move to start *) - temp.y := ms.y / 2.0; - asetplot(noline, 0, 0, noend); - aplot(temp); - FOR sinewave := solid TO dotted DO - BEGIN - asetplot(sinewave, 5.0, 0, noend); - FOR xval := 1 TO 36 DO - BEGIN - temp.y := (ms.y / 2.0) + - (sin(xval * 10.0 / radian) * ms.y / 3.0); - aplot(temp); - temp.x := temp.x + (ms.x / 72.0); - END; (* FOR xval *) - END; (* FOR sinenum *) - - temp := origin; (* display end types available *) - temp.y := ms.y / 10.0; - asetplot(noline, 0, 0, noend); - aplot(temp); - FOR lineend := noend TO circle DO - BEGIN - asetplot(noline, 0, 2.0, lineend); - temp.x := temp.x + (ms.x / 16.0); - aplot(temp); - END; (* FOR lineend *) - FOR lineend := diamond DOWNTO noend DO - BEGIN - asetplot(solid, 0, 2.5, lineend); - temp.x := temp.x + (ms.x / 16.0); - aplot(temp); - END; (* FOR lineend *) - - origin.x := ms.x * 0.4; (* draw small window *) - origin.y := ms.y * 0.75; - ms.x := ms.x * 0.6; - ms.y := ms.y * 0.9; - asetplot(noline, 0, 0, noend); - aplot(origin); - - temp := origin; - temp.x := ms.x; - asetplot(dotted, 5.0, 0, noend); - aplot(temp); - - asetplot(dotdashed, 10.0, 0, noend); - aplot(ms); - - temp := origin; - temp.y := ms.y; - asetplot(dotdotdashed, 15.0, 0, noend); - aplot(temp); - - asetplot(dashed, 10.0, 0, noend); - aplot(origin); - - temp.x := (origin.x + ms.x) / 2.0; (* circle the box centre *) - temp.y := (origin.y + ms.y) / 2.0; - asetplot(noline, 0, ms.x - origin.x , circle); - aplot(temp); - - asetwindow(origin, ms); (* restrict to the window *) - asetplot(noline, 0, ms.x - origin.x , diamond); - aplot(temp); - - END. (* testgr *) - \ No newline at end of file diff --git a/software/CPM/CPM20_MTPUG_08/WRDATA.SRC b/software/CPM/CPM20_MTPUG_08/WRDATA.SRC deleted file mode 100644 index 45309e0..0000000 --- a/software/CPM/CPM20_MTPUG_08/WRDATA.SRC +++ /dev/null @@ -1,195 +0,0 @@ -program writedata; - -type - - vector = -512..511; - posn = -128..127; - - roff = PACKED ARRAY [1..64] of vector; - vec = PACKED ARRAY [1..393] of posn; - - -var - - chroff: roff; - chrvec: vec; - - x: FILE of roff; - y: FILE of vec; - - result: integer; - - - PROCEDURE init1; - - BEGIN - chroff[ 1]:= 1;chroff[ 2]:= 4;chroff[ 3]:= 10;chroff[ 4]:= 18; - chroff[ 5]:= 28;chroff[ 6]:= 37;chroff[ 7]:= 46;chroff[ 8]:= 49; - chroff[ 9]:= 53;chroff[10]:= 57;chroff[11]:= 63;chroff[12]:= -67; - chroff[13]:= 69;chroff[14]:= 71;chroff[15]:= 72;chroff[16]:= 74; - chroff[17]:= 85;chroff[18]:= 90;chroff[19]:= 99;chroff[20]:= 112; - chroff[21]:= 116;chroff[22]:= 125;chroff[23]:= 136;chroff[24]:= 141; - chroff[25]:= 157;chroff[26]:= 169;chroff[27]:=-171;chroff[28]:= 174; - chroff[29]:= 177;chroff[30]:= 181;chroff[31]:= 184;chroff[32]:= 192; - chroff[33]:= 205;chroff[34]:= 212;chroff[35]:= 225;chroff[36]:= 233; - chroff[37]:= 240;chroff[38]:= 246;chroff[39]:= 251;chroff[40]:= 261; - chroff[41]:= 267;chroff[42]:= 273;chroff[43]:= 278;chroff[44]:= 284; - chroff[45]:= 287;chroff[46]:= 292;chroff[47]:= 296;chroff[48]:= 305; - chroff[49]:= 312;chroff[50]:= 323;chroff[51]:= 332;chroff[52]:= 344; - chroff[53]:= 348;chroff[54]:= 354;chroff[55]:= 357;chroff[56]:= 362; - chroff[57]:= 366;chroff[58]:= 371;chroff[59]:= 377;chroff[60]:= 381; - chroff[61]:= 383;chroff[62]:= 387;chroff[63]:=-392;chroff[64]:= 394; - END; - - PROCEDURE init2; - - BEGIN - chrvec[ 1]:= 39;chrvec[ 2]:= 33;chrvec[ 3]:= -30;chrvec[ 4]:= 19; - chrvec[ 5]:= 29;chrvec[ 6]:= 17;chrvec[ 7]:= -49;chrvec[ 8]:= 59; - chrvec[ 9]:= 47;chrvec[ 10]:= 21;chrvec[ 11]:= 27;chrvec[ 12]:= -47; - chrvec[ 13]:= 41;chrvec[ 14]:= -63;chrvec[ 15]:= 3;chrvec[ 16]:= -5; - chrvec[ 17]:= 65;chrvec[ 18]:= 30;chrvec[ 19]:= 39;chrvec[ 20]:= -57; - chrvec[ 21]:= 38;chrvec[ 22]:= 17;chrvec[ 23]:= 15;chrvec[ 24]:= 54; - chrvec[ 25]:= 52;chrvec[ 26]:= 31;chrvec[ 27]:= 12;chrvec[ 28]:= 29; - chrvec[ 29]:= 17;chrvec[ 30]:= 9;chrvec[ 31]:= 69;chrvec[ 32]:= 0; - chrvec[ 33]:= -60;chrvec[ 34]:= 40;chrvec[ 35]:= 52;chrvec[ 36]:= 60; - chrvec[ 37]:= 0;chrvec[ 38]:= 57;chrvec[ 39]:= 49;chrvec[ 40]:= 28; - chrvec[ 41]:= 26;chrvec[ 42]:= 62;chrvec[ 43]:= 40;chrvec[ 44]:= 20; - chrvec[ 45]:= 13;chrvec[ 46]:= 29;chrvec[ 47]:= 39;chrvec[ 48]:= 27; - chrvec[ 49]:= 49;chrvec[ 50]:= 27;chrvec[ 51]:= 22;chrvec[ 52]:= 40; - chrvec[ 53]:= 29;chrvec[ 54]:= 47;chrvec[ 55]:= 42;chrvec[ 56]:= 20; - chrvec[ 57]:= 17;chrvec[ 58]:= 51;chrvec[ 59]:= -57;chrvec[ 60]:= 11; - chrvec[ 61]:= -4;chrvec[ 62]:= 64;chrvec[ 63]:= 4;chrvec[ 64]:= 64; - END; - - PROCEDURE init3; - - BEGIN - chrvec[ 65]:= -37;chrvec[ 66]:= 31;chrvec[ 67]:= 34;chrvec[ 68]:= 22; - chrvec[ 69]:= 14;chrvec[ 70]:= 64;chrvec[ 71]:= 30;chrvec[ 72]:= 10; - chrvec[ 73]:= 69;chrvec[ 74]:= 0;chrvec[ 75]:= 69;chrvec[ 76]:= -49; - chrvec[ 77]:= 29;chrvec[ 78]:= 7;chrvec[ 79]:= 2;chrvec[ 80]:= 20; - chrvec[ 81]:= 40;chrvec[ 82]:= 62;chrvec[ 83]:= 67;chrvec[ 84]:= 49; - chrvec[ 85]:= 27;chrvec[ 86]:= 39;chrvec[ 87]:= 30;chrvec[ 88]:= -20; - chrvec[ 89]:= 40;chrvec[ 90]:= 7;chrvec[ 91]:= 29;chrvec[ 92]:= 49; - chrvec[ 93]:= 67;chrvec[ 94]:= 54;chrvec[ 95]:= 24;chrvec[ 96]:= 1; - chrvec[ 97]:= 0;chrvec[ 98]:= 60;chrvec[ 99]:= 7;chrvec[100]:= 29; - chrvec[101]:= 59;chrvec[102]:= 68;chrvec[103]:= 66;chrvec[104]:= 55; - chrvec[105]:= 25;chrvec[106]:= -55;chrvec[107]:= 64;chrvec[108]:= 61; - chrvec[109]:= 50;chrvec[110]:= 20;chrvec[111]:= 2;chrvec[112]:= 40; - chrvec[113]:= 49;chrvec[114]:= 3;chrvec[115]:= 63;chrvec[116]:= 69; - chrvec[117]:= 9;chrvec[118]:= 5;chrvec[119]:= 55;chrvec[120]:= 64; - chrvec[121]:= 61;chrvec[122]:= 50;chrvec[123]:= 10;chrvec[124]:= 1; - chrvec[125]:= 49;chrvec[126]:= 19;chrvec[127]:= 8;chrvec[128]:= 1; - chrvec[129]:= 10;chrvec[130]:= 50;chrvec[131]:= 61;chrvec[132]:= 64; - END; - - PROCEDURE init4; - - BEGIN - chrvec[133]:= 55;chrvec[134]:= 15;chrvec[135]:= 4;chrvec[136]:= 9; - chrvec[137]:= 69;chrvec[138]:= 67;chrvec[139]:= 21;chrvec[140]:= 20; - chrvec[141]:= 15;chrvec[142]:= 6;chrvec[143]:= 8;chrvec[144]:= 19; - chrvec[145]:= 59;chrvec[146]:= 68;chrvec[147]:= 66;chrvec[148]:= 55; - chrvec[149]:= 15;chrvec[150]:= 4;chrvec[151]:= 1;chrvec[152]:= 10; - chrvec[153]:= 50;chrvec[154]:= 61;chrvec[155]:= 64;chrvec[156]:= 55; - chrvec[157]:= 1;chrvec[158]:= 10;chrvec[159]:= 50;chrvec[160]:= 61; - chrvec[161]:= 68;chrvec[162]:= 59;chrvec[163]:= 19;chrvec[164]:= 8; - chrvec[165]:= 5;chrvec[166]:= 14;chrvec[167]:= 54;chrvec[168]:= 65; - chrvec[169]:= 35;chrvec[170]:= -31;chrvec[171]:= 39;chrvec[172]:= -34; - chrvec[173]:= 22;chrvec[174]:= 58;chrvec[175]:= 14;chrvec[176]:= 50; - chrvec[177]:= 52;chrvec[178]:= 12;chrvec[179]:= -15;chrvec[180]:= 55; - chrvec[181]:= 18;chrvec[182]:= 54;chrvec[183]:= 10;chrvec[184]:= 18; - chrvec[185]:= 29;chrvec[186]:= 49;chrvec[187]:= 58;chrvec[188]:= 56; - chrvec[189]:= 34;chrvec[190]:= 32;chrvec[191]:= -30;chrvec[192]:= 62; - chrvec[193]:= 40;chrvec[194]:= 20;chrvec[195]:= 2;chrvec[196]:= 7; - END; - - PROCEDURE init5; - - BEGIN - chrvec[197]:= 29;chrvec[198]:= 49;chrvec[199]:= 67;chrvec[200]:= 63; - chrvec[201]:= 42;chrvec[202]:= 34;chrvec[203]:= 46;chrvec[204]:= 66; - chrvec[205]:= 0;chrvec[206]:= 6;chrvec[207]:= 39;chrvec[208]:= 66; - chrvec[209]:= 60;chrvec[210]:= -4;chrvec[211]:= 64;chrvec[212]:= 0; - chrvec[213]:= 50;chrvec[214]:= 61;chrvec[215]:= 64;chrvec[216]:= 55; - chrvec[217]:= 15;chrvec[218]:= -55;chrvec[219]:= 66;chrvec[220]:= 68; - chrvec[221]:= 59;chrvec[222]:= 9;chrvec[223]:= -19;chrvec[224]:= 10; - chrvec[225]:= 68;chrvec[226]:= 59;chrvec[227]:= 29;chrvec[228]:= 7; - chrvec[229]:= 2;chrvec[230]:= 20;chrvec[231]:= 50;chrvec[232]:= 61; - chrvec[233]:= 0;chrvec[234]:= 9;chrvec[235]:= 49;chrvec[236]:= 67; - chrvec[237]:= 62;chrvec[238]:= 40;chrvec[239]:= 0;chrvec[240]:= 69; - chrvec[241]:= 9;chrvec[242]:= 0;chrvec[243]:= 60;chrvec[244]:= -45; - chrvec[245]:= 5;chrvec[246]:= 69;chrvec[247]:= 9;chrvec[248]:= 0; - chrvec[249]:= -45;chrvec[250]:= 5;chrvec[251]:= 68;chrvec[252]:= 59; - chrvec[253]:= 29;chrvec[254]:= 7;chrvec[255]:= 2;chrvec[256]:= 20; - chrvec[257]:= 50;chrvec[258]:= 61;chrvec[259]:= 64;chrvec[260]:= 44; - chrvec[261]:= 0;chrvec[262]:= 9;chrvec[263]:= -60;chrvec[264]:= 69; - END; - - PROCEDURE init6; - - BEGIN - chrvec[265]:= -5;chrvec[266]:= 65;chrvec[267]:= 29;chrvec[268]:= 49; - chrvec[269]:= -39;chrvec[270]:= 30;chrvec[271]:= -20;chrvec[272]:= 40; - chrvec[273]:= 69;chrvec[274]:= 62;chrvec[275]:= 40;chrvec[276]:= 20; - chrvec[277]:= 2;chrvec[278]:= 9;chrvec[279]:= 0;chrvec[280]:= -5; - chrvec[281]:= 69;chrvec[282]:= -37;chrvec[283]:= 60;chrvec[284]:= 9; - chrvec[285]:= 0;chrvec[286]:= 60;chrvec[287]:= 0;chrvec[288]:= 9; - chrvec[289]:= 34;chrvec[290]:= 69;chrvec[291]:= 60;chrvec[292]:= 0; - chrvec[293]:= 9;chrvec[294]:= 60;chrvec[295]:= 69;chrvec[296]:= 10; - chrvec[297]:= 2;chrvec[298]:= 7;chrvec[299]:= 19;chrvec[300]:= 59; - chrvec[301]:= 67;chrvec[302]:= 62;chrvec[303]:= 50;chrvec[304]:= 10; - chrvec[305]:= 0;chrvec[306]:= 9;chrvec[307]:= 59;chrvec[308]:= 68; - chrvec[309]:= 66;chrvec[310]:= 55;chrvec[311]:= 5;chrvec[312]:= 10; - chrvec[313]:= 2;chrvec[314]:= 7;chrvec[315]:= 19;chrvec[316]:= 59; - chrvec[317]:= 67;chrvec[318]:= 62;chrvec[319]:= 50;chrvec[320]:= 10; - chrvec[321]:= -42;chrvec[322]:= 60;chrvec[323]:= 0;chrvec[324]:= 9; - chrvec[325]:= 59;chrvec[326]:= 68;chrvec[327]:= 66;chrvec[328]:= 55; - END; - - PROCEDURE init7; - - BEGIN - chrvec[329]:= 5;chrvec[330]:= -35;chrvec[331]:= 60;chrvec[332]:= 68; - chrvec[333]:= 59;chrvec[334]:= 19;chrvec[335]:= 8;chrvec[336]:= 6; - chrvec[337]:= 15;chrvec[338]:= 55;chrvec[339]:= 64;chrvec[340]:= 61; - chrvec[341]:= 50;chrvec[342]:= 10;chrvec[343]:= 1;chrvec[344]:= 9; - chrvec[345]:= 69;chrvec[346]:= -39;chrvec[347]:= 30;chrvec[348]:= 9; - chrvec[349]:= 2;chrvec[350]:= 10;chrvec[351]:= 50;chrvec[352]:= 62; - chrvec[353]:= 69;chrvec[354]:= 9;chrvec[355]:= 30;chrvec[356]:= 69; - chrvec[357]:= 9;chrvec[358]:= 10;chrvec[359]:= 35;chrvec[360]:= 50; - chrvec[361]:= 69;chrvec[362]:= 9;chrvec[363]:= 60;chrvec[364]:= -69; - chrvec[365]:= 0;chrvec[366]:= 9;chrvec[367]:= 35;chrvec[368]:= -69; - chrvec[369]:= 35;chrvec[370]:= 30;chrvec[371]:= 9;chrvec[372]:= 69; - chrvec[373]:= 0;chrvec[374]:= 60;chrvec[375]:= -25;chrvec[376]:= 45; - chrvec[377]:= 49;chrvec[378]:= 29;chrvec[379]:= 20;chrvec[380]:= 40; - chrvec[381]:= 19;chrvec[382]:= 50;chrvec[383]:= 29;chrvec[384]:= 49; - chrvec[385]:= 40;chrvec[386]:= 20;chrvec[387]:= 17;chrvec[388]:= 39; - chrvec[389]:= 57;chrvec[390]:= -39;chrvec[391]:= 30;chrvec[392]:= 3; - chrvec[393]:= 63; - END; - - -BEGIN - init1; - init2; - init3; - init4; - init5; - init6; - init7; - assign(x,'B:CHROFF.DAT'); - rewrite(x); - x^:=chroff; - put(x); - close(x,result); - if result = 255 then writeln('Error in closing CHROFF.DAT'); - assign(y,'B:CHRVEC.DAT'); - rewrite(y); - y^:=chrvec; - put(y); - close(y,result); - if result = 255 then writeln('Error in closing CHRVEC.DAT'); -END. -  \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/-MTPUG.DOC b/software/CPM/CPM21_MTPUG_09/-MTPUG.DOC deleted file mode 100644 index 25095ec..0000000 --- a/software/CPM/CPM21_MTPUG_09/-MTPUG.DOC +++ /dev/null @@ -1,57 +0,0 @@ -*** MTPUG.009 April 15, 1983 *** - -TYPECHK: A Cross Module Type/Identifier Checker - Version 2.2 Serial #12200012 - - The entire source was submitted to MTPUG for -distribution as Public Domain Software and can not -be sold. A version (improved ??) which is supported can be -purchased from the Author, Lawrence Adkins, -56 Camille Lane, East Patchogue, NY 11772. - -TYPECHK.DOC This program detects errors in Pascal/MT+ - .SUB source modules which are apparent only when - .COM comparing the common identifier declarations - made in them. This is a very large program - which is comprised of 9 modules and about - 4300 lines of .PRN output. It requires about - 30 minutes to compile and about 35 min to - check itself. Source code, .ERL and .COM files - requires about 200K of space. Extensive features - are available for directing output to a file as - well as to the terminal. - -PASERROR.SRC The MT+ error messages are printed on the terminal - when given the error number. - -MSA326 .DOC These programs were transcribed from hard copy -MSA326A.PAS listings. They are numerical analysis programs -MSA326B.PAS from a book by Conte and Deboore, Title and Publisher -MSA326C.PAS are unknown. -MSA326D.PAS - -****************************************************************** - -PLANE.SRC This is a Pascal upgrade of a Basic program from one - of the early CP/M Library disks. The conversion was - done by Dan Covill, a San Diego software consultant, - who is happy to have it added to your program disks. - The graphics is currently configured to run on a - Heath H-19 Terminal, but can be easily changed. I - trust you will find it a pleasant distraction from - the serious programs. Submitted by Wil Wakely, - 2328 Germanium Street, San Diego, CA 92109 - -SWEEP.COM This is a new improved version of a program which - appeared on program disk #4. Written by Robert - Fisher in PL/1. This version includes verified - copy. Used for tagged multi-file copy or delete. - On some systems, the automatic disk reset allows - multi-disk operations. An improved assembly version - is available from Micro Resources, 2468 Hansen Court, - Simi Valley, CA 93605 for $49.95 - -SYNONYM.COM This small program allows you to create your own - collection of synanyms for activating programs. - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/BLOCKR.SRC b/software/CPM/CPM21_MTPUG_09/BLOCKR.SRC deleted file mode 100644 index b19bf6d..0000000 --- a/software/CPM/CPM21_MTPUG_09/BLOCKR.SRC +++ /dev/null @@ -1,45 +0,0 @@ -MODULE READBLK; -{ 4-Mar-82 } -(*$M BLOCKR*) -(*$M **) - -(*$I FIBDEF.LIB*) -VAR - RESULTIO: EXTERNAL INTEGER; - -EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; - -PROCEDURE - BLOCKR(VAR F:FIB;SZ:INTEGER;BA:WORD;VAR R:INTEGER;NB,RB:INTEGER); -VAR - PTR : INTEGER; - I,J : INTEGER; - extent: integer; - -BEGIN - f.option := frandom; - PTR := ORD(BA); - IF rb >= 0 - THEN BEGIN - extent := shr (rb, 7); { bits 7 to 11+ specify extent requested - by user, while bits 0 to 6 specify the - relative sector within that extent. } - F.FCB[32] := CHR(RB & $7F); (* RELATIVE BLOCK *) - IF ord (f.fcb [12]) <> extent - THEN BEGIN - f.fcb [12] := chr (extent); { set extent number } - resultio := @bdos (15, wrd (addr (f.fcb))) { open new extent } - END - END; - FOR I := 1 TO shr (nb, 7) DO {TO NB DIV 128} {# of specified sectors } - BEGIN - J := @BDOS(26,WRD(PTR)); (* SETDMA address*) - J := @BDOS(20,WRD(ADDR(F.FCB))); (* do a SEQUENTIAL READ *) - PTR := PTR + 128 - END; - R := J; -END; - -MODEND. - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/CONSTTAB.PAS b/software/CPM/CPM21_MTPUG_09/CONSTTAB.PAS deleted file mode 100644 index fb4b634..0000000 --- a/software/CPM/CPM21_MTPUG_09/CONSTTAB.PAS +++ /dev/null @@ -1,330 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: CONSTANT_TABLE_MODULE_FOR_TYPE_CHECKER_PROGRAM.#### -#### File name: CONSTTAB.PAS. #### -#### Support modules reqd: PASLIB.ERL. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 Vers 1.0. File just created. - 12-NOV-81 Development of this version completed. - 9-JAN-82 Vers 2.0. development begins. - 1-MAR-82 Development of this version complete. - 19-APR-82 Vers 2.2. No changes made. -#### #### -##########################################################################} - - - -MODULE CONSTANT_TABLE_HANDLER; - -{$I B:TYPECHK.DEC } { list of all our type declarations } - -VAR - last_ct_entry: natural; { last filled element of const table } - token: EXTERNAL tokentype; - tokenbuf: EXTERNAL string132; - exit_keywords: EXTERNAL SET OF tokentype; - last_entry_point_name: EXTERNAL string132; - outfile: EXTERNAL text; - debug: EXTERNAL boolean; - -EXTERNAL PROCEDURE get_next_token; -EXTERNAL PROCEDURE error (pascal_error_no: integer); -EXTERNAL PROCEDURE @hlt; - - - - - - -{###########################################################################} -{--- Initialize the variables in this module } -{###########################################################################} -PROCEDURE cminit_constant_table_module - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - BEGIN - WITH const_table [1] DO BEGIN - const_id := 'MAXINT'; actual_value := 32767 END; - WITH const_table [2] DO BEGIN - const_id := 'FALSE'; actual_value := 0 END; - WITH const_table [3] DO BEGIN - const_id := 'TRUE'; actual_value := 1 END; - WITH const_table [4] DO BEGIN - const_id := 'NIL'; actual_value := 0 END; - - last_ct_entry := 4 - END; - - - - -{#############################################################################} -(*-- First we will skip past the and - --- syntax until we hit a token defined in the exit_keyword set. *) -(*-- Then we will parse the following Pascal/MT+ BNF productions: - --- ::= | - --- CONST {; } ; - --- - --- ::= = - --- ::= - --- *) -{#############################################################################} -PROCEDURE cmadd_new_constants_to_const_table - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - CONST action_message = 'Handling Constants...'; - BEGIN - writeln (action_message); writeln (outfile, action_message); - exit_keywords := - [tokconst, toktype, tokvar, tokproc, tokfunc, tokbegin, tokexternal]; - - REPEAT get_next_token { skip prog heading and label declarations } - UNTIL (token IN exit_keywords); - - WHILE token = tokconst - DO BEGIN - get_next_token; { should be constant identifier } - REPEAT - last_entry_point_name := tokenbuf; - cminc_last_ct_entry_index (cthibound); - WITH const_table [last_ct_entry] - DO BEGIN - const_id := tokenbuf; - get_next_token; { should be tokequal } - get_next_token; { should be const_id, number, sign, or string } - cmfinish_parsing_constant_value (actual_value, const_table); - cmremove_duplicate_const_entry (const_table) - END; - get_next_token; { should be semicolon } - IF debug THEN error (0); - get_next_token { should be const_id or new keyword } - UNTIL (token IN exit_keywords); - END - END; - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, - --- Here we will finish parsing the following Pascal/MT+ BNF productions: - --- ::= | | - --- | | - --- - --- ::= | - --- ::= . | - --- . E | - --- E - --- ::= {} - --- ::= | - --- ::= + | - - --- ::= - --- ::= ' {} ' | '' - --- *) -{#############################################################################} -PROCEDURE cmfinish_parsing_constant_value - (VAR actual_value: integer; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - VAR sign: integer; - BEGIN - sign := +1; - IF (token = tokplus) OR (token = tokminus) - THEN BEGIN - IF TOKEN = tokminus THEN sign := -1; - get_next_token; { should be const_id or unsigned number } - END; - - CASE token OF - tokidentifier: - BEGIN { look up it's integer value in the table } - IF cmfind_const_id (actual_value, const_table) - THEN actual_value := actual_value * sign - ELSE actual_value := 0 - END; - tokintnum, tokbytenum, tokrealnum: - BEGIN { make the characters into an integer } - cmxlate_const_value (actual_value, const_table); - actual_value := actual_value * sign - END; - toklitstring: - BEGIN { take the ordinal value of just the first character } - IF length (tokenbuf) > 0 - THEN actual_value := ord (tokenbuf[1]) - ELSE actual_value := 0 - END - END - END; - - - - - - - - - - - - - - - - -{############################################################################} -{---- Check for identical identifier earlier in the table, if match, ------ compare entries, and erase latter entry. } -{############################################################################} -PROCEDURE cmremove_duplicate_const_entry - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - VAR i: integer; - BEGIN - FOR i := 1 TO (last_ct_entry - 1) - DO WITH const_table [i] - DO IF const_id = const_table [last_ct_entry].const_id - THEN BEGIN - IF actual_value <> const_table [last_ct_entry].actual_value - THEN error (101); { id declared elsewhere with different value } - last_ct_entry := last_ct_entry - 1; - exit - END - END; - - - -{#############################################################################} -{--- Search out specified identifier in constant table. If found, ----- return the index, and true, meaning found. } -{#############################################################################} -FUNCTION cmfind_const_id - (VAR ret_val: integer; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec): - boolean; - - VAR i : integer; - name_to_find: alfa; - BEGIN - ret_val := 0; cm_find_const_id := false; - name_to_find := tokenbuf; {shorten length down to alfalen chars} - FOR i := 1 TO last_ct_entry - DO WITH const_table[i] - DO IF const_id = name_to_find - THEN BEGIN ret_val := actual_value; cmfind_const_id := true; exit END - END; - - - -{############################################################################} -(*-- Assuming we have already scanned the first symbol, - --- Here we will finish parsing the following Pascal/MT+ BNF productions: - --- ::= $ | - --- ::= {} - --- *) -{############################################################################} -PROCEDURE cmxlate_const_value - (VAR ret_val: integer; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - VAR i, offset, first, last, base: byte; - BEGIN - last := length(tokenbuf); ret_val := 0; - IF tokenbuf[1] = '$' - THEN BEGIN first := 2; base := 16 END - ELSE BEGIN first := 1; base := 10 END; - FOR i := first TO last - DO BEGIN - IF tokenbuf[i] <= '9' THEN offset := 48 ELSE offset := 65; - ret_val := (ret_val * base) + (ord(tokenbuf[i]) - offset) - END - END; - - -{############################################################################} -{--- Bump the index into the constant table by one. Error if overflow. } -{############################################################################} -PROCEDURE cminc_last_ct_entry_index (max_const_elements: natural); - - VAR i: integer; - BEGIN - IF last_ct_entry >= max_const_elements - THEN BEGIN - writeln; - writeln ('Const table overflow. Last id: ', last_entry_point_name); - close (outfile, i); - @hlt - END; - last_ct_entry := last_ct_entry + 1 - END; - - - -{#############################################################################} -{--- Display the current contents of the constant table } -{#############################################################################} -PROCEDURE cmdump_constant_table - (VAR outfile: text; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - VAR i: integer; - BEGIN - writeln (outfile); writeln (outfile, '--- Constant Table Dump --- '); - writeln (outfile, 'name':30, 'value':10); - FOR i := 1 TO last_ct_entry - DO WITH const_table[i] - DO writeln (outfile, i:10, const_id:20, actual_value:10); - writeln (outfile) - END; - - - - - - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, - --- here we will finish parsing the following Pascal/MT+ BNF production : - --- ::= ( {, } ) - --- *) -{#############################################################################} -PROCEDURE cmstore_scalar_type_values - (VAR n_of_values: integer; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - BEGIN - n_of_values := 0; - REPEAT - get_next_token; { should be scalar value identifier } - cminc_last_ct_entry_index (cthibound); - WITH const_table [last_ct_entry] - DO BEGIN const_id := tokenbuf; actual_value := n_of_values END; - n_of_values := n_of_values + 1; - cmremove_duplicate_const_entry (const_table); - get_next_token { should be comma or right paren } - UNTIL token = tokrparen - END; - - -MODEND. - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/FIBDEF.LIB b/software/CPM/CPM21_MTPUG_09/FIBDEF.LIB deleted file mode 100644 index e4cedc8..0000000 --- a/software/CPM/CPM21_MTPUG_09/FIBDEF.LIB +++ /dev/null @@ -1,25 +0,0 @@ - - - (* FIB LAYOUT *) - - -TYPE - OPTTYPE = (NOTOPEN,FWRITE,FRDWR,FRANDOM,FCONIO,FTRMIO,FLSTOUT); - - FIB=RECORD - FNAME : STRING[16]; (* d:filename.ext *) - FCB : PACKED ARRAY [0..34] OF CHAR; (* CP/M FILE CONTROL BLOCK *) - BUFLEN : INTEGER; (* SIZE OF FBUFFER *) - BUFIDX : INTEGER; (* CURRENT INDEX INTO FBUFFER *) - OPTION : OPTTYPE; - IOSIZE : INTEGER; (* SIZE OF NEXT TRANSFER *) - FEOLN : BOOLEAN; (* TRUE IF TEXT FILE AT END-OF-LINE *) - FEOF : BOOLEAN; (* TRUE IF AT END-OF-FILE *) - FBUFADR: WORD; (* POINTER TO FBUFFER *) - FSECINX: 0..128; (* INDEX INTO FSECTOR +1 FOR OVERFLOW *) - FTEXT : BOOLEAN; (* TRUE IF THIS IS A TEXT FILE! *) - NOSECTRS:BOOLEAN; (* TRUE IF NO MORE DISK DATA AVAILABLE *) - FSECTOR: PACKED ARRAY [0..127] OF CHAR; (* 1 SECTOR BUFFER FOR CP/M *) - FBUFFER: PACKED ARRAY [0..0 ] OF CHAR; - END; - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/FILES.CMD b/software/CPM/CPM21_MTPUG_09/FILES.CMD deleted file mode 100644 index eb1e15b..0000000 --- a/software/CPM/CPM21_MTPUG_09/FILES.CMD +++ /dev/null @@ -1,12 +0,0 @@ -; LIST OF FILES TO BE USED WITH THE TYPE CHECKER PROGRAM. VERS 2.1. -; THIS FILE LETS IT TYPE CHECK ITSELF. -; TAKES ABOUT 35 MIN. -B:TYPECHK.PAS -B:CONSTTAB.PAS -B:TYPE1TAB.PAS -B:VARTAB.PAS -B:ROUTTAB.PAS -B:SCANNER.PAS -B:MARKREL.SRC -B:BLOCKR.SRC - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/INPUTFAS.PAS b/software/CPM/CPM21_MTPUG_09/INPUTFAS.PAS deleted file mode 100644 index f245ba1..0000000 --- a/software/CPM/CPM21_MTPUG_09/INPUTFAS.PAS +++ /dev/null @@ -1,156 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: FAST BLOCKREAD INPUT OF SOURCE MODULE. #### -#### File name: INPUTFST.PAS. #### -#### Support modules reqd: PASLIB.ERL. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 19-APR-82 Vers 2.2. File just created, and completed. - -#### #### -##########################################################################} - - - - - - -MODULE STD_INPUT; - -{$I B:TYPECHK.DEC } { list of all our type declarations } - -VAR - endfile: boolean; { Here, true only if eofmark char was read } - infile, infile1: EXTERNAL text; - {$E-} - saved_main_program_text: string132; {Store line till after include file done} - ior_for_main_file, ior_for_include_file: integer; - maintextbuffer,includfiletextbuffer: p_array_of_char; - main1_file_index, includ1_file_index: integer; - include_file_level: EXTERNAL integer; - -{$E+} -FUNCTION maineof: boolean; - - BEGIN - maineof := endfile AND (include_file_level = 0) - END; - - -PROCEDURE init_include_file_block; - - BEGIN - blockread (infile1, includfiletextbuffer, ior_for_include_file, blkiosize, - {record} 0); - includ1_file_index := 1; - saved_main_program_text := ''; - endfile := false - END; - - -PROCEDURE init_main_file_block; - - BEGIN - blockread (infile, maintextbuffer, ior_for_main_file, blkiosize, {record} 0); - main1_file_index := 1; - saved_main_program_text := ''; - endfile := false - END; - - - - -PROCEDURE readln_main_program_text (VAR input_line: string132); - - BEGIN - IF length (saved_main_program_text) > 0 - THEN BEGIN - input_line := saved_main_program_text; - saved_main_program_text := '' - END - ELSE grab_some_text (input_line, maintextbuffer, main1_file_index, infile, - ior_for_main_file) - END; - -PROCEDURE readln_include_file_text (VAR input_line: string132); - BEGIN - IF length (saved_main_program_text) = 0 - THEN BEGIN - saved_main_program_text := input_line; - IF length (saved_main_program_text) = 0 - THEN saved_main_program_text := ' ' - END; - grab_some_text (input_line, includfiletextbuffer, includ1_file_index, - infile1, ior_for_include_file) - END; - -{$E-} -PROCEDURE grab_some_text (VAR input_line: string132; - VAR textbuffer: p_array_of_char; - VAR buf_index: integer; - VAR infile: text; - VAR ior: integer); - - FUNCTION at_eof: boolean; - BEGIN at_eof := (textbuffer [buf_index] = chr (eofmark)) - OR ((buf_index > blkiosize) AND (ior > 0)) - END; - BEGIN - input_line := ''; - WHILE ((textbuffer [buf_index] = chr (cr)) - OR (textbuffer [buf_index] = chr (lf))) - AND NOT at_eof - DO BEGIN - buf_index := buf_index + 1; - IF (buf_index > blkiosize) AND (ior = 0) - THEN BEGIN - blockread (infile, textbuffer, ior, blkiosize, -1 {seq access}); - buf_index := 1 - END; - END; - - WHILE (textbuffer [buf_index] <> chr (cr)) - AND NOT at_eof - DO BEGIN - IF (buf_index <= blkiosize) - THEN BEGIN - input_line := concat (input_line, textbuffer [buf_index]); - buf_index := buf_index + 1 - END; - IF (buf_index > blkiosize) AND (ior = 0) - THEN BEGIN - blockread (infile, textbuffer, ior, blkiosize, -1 {seq access}); - buf_index := 1 - END - END; - endfile := at_eof - END; - -MODEND. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/INPUTSTD.PAS b/software/CPM/CPM21_MTPUG_09/INPUTSTD.PAS deleted file mode 100644 index 22de9fb..0000000 --- a/software/CPM/CPM21_MTPUG_09/INPUTSTD.PAS +++ /dev/null @@ -1,88 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: STANDARD READLN INPUT OF SOURCE MODULE. #### -#### File name: INPUTSTD.PAS. #### -#### Support modules reqd: PASLIB.ERL. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 19-APR-82 Vers 2.2. File just created, and completed. - -#### #### -##########################################################################} - - - - - - -MODULE STNDRD_INPUT; - -{$I B:TYPECHK.DEC } { list of all our type declarations } - -VAR - endfile: boolean; { Here, equivalent to eof function } - infile, infile1: EXTERNAL text; - - - - - - - - - - -{$E+} -FUNCTION maineof: boolean; - BEGIN maineof := eof (infile) END; - - -PROCEDURE init_include_file_block; - BEGIN endfile := false END; - - -PROCEDURE init_main_file_block; - BEGIN endfile := false END; - - -PROCEDURE readln_main_program_text (VAR input_line: string132); - BEGIN grab_some_text (infile, input_line) END; - - -PROCEDURE readln_include_file_text (VAR input_line: string132); - BEGIN grab_some_text (infile1, input_line) END; - -{$E-} -PROCEDURE grab_some_text (VAR infile: text; VAR input_line: string132); - BEGIN - IF eof (infile) THEN input_line := '' ELSE readln (infile, input_line); - endfile := eof (infile) - END; - - -MODEND. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/MARKREL.SRC b/software/CPM/CPM21_MTPUG_09/MARKREL.SRC deleted file mode 100644 index 5346956..0000000 --- a/software/CPM/CPM21_MTPUG_09/MARKREL.SRC +++ /dev/null @@ -1,94 +0,0 @@ -{################################################################### -#### #### -#### Full module name: NEW_MARK_AND_RELEASE ROUTINES. #### -#### File name: MARKREL.SRC. #### -#### Support modules reqd: SYSERR. #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+5.2 #### -#### PUBLIC DOMAIN. #### -#### Module development history: #### -#### ---- 30-SEP-81 Module published in MTPUG newsletter #### -#### ---- 20-OCT-81 Modified to compare words and not integers#### -#### #### -###################################################################} - -MODULE NEW_MARK_AND_RELEASE; - -VAR SYSMEM: EXTERNAL INTEGER; { start of free area } - @SFP: EXTERNAL INTEGER; { start of stack frame } - HERR: BOOLEAN; { indicates heap overflow error } - -EXTERNAL PROCEDURE @ERR (AN_ERROR: BOOLEAN; ERROR_NUMBER: INTEGER); - - -(*#################################################################### -#### return the amount of free space existing between the top of the -#### heap at present and the reverse top of the local variable stack. -#### -------+-----> <-----+------- -#### .... | heap local | .... -#### low mem | area var | hi mem -#### | stack | -#### -------+-----> <-----+------- -#### ^ ^ -#### SYSMEM--> <---@SFP -#### This routine will return only the absolute value of the differ -#### ence between sysmem and @sfp, and will not know if sysmem is -#### already higher than (on wrong side of) @sfp. -###################################################################*) - -FUNCTION MEMAVA: INTEGER; - BEGIN MEMAVA := ORD (WRD(@SFP) - WRD(SYSMEM)) END; - - - - - -(*################################################################### -#### Dynamic allocation routine. Expands the heap by objectsize -#### bytes. If resulting heap collides with the stack then notify -#### user of heap overflow error. -#### The comparison of two words is used to avoid the possibility -#### that we are comparing a positive integer (0 <= word <= 32767) -#### with a negative integer (32768 <= word <= 65534). -###################################################################*) - -PROCEDURE @NEW (VAR POINTER: INTEGER; OBJECTSIZE: INTEGER); - BEGIN - POINTER := SYSMEM; - SYSMEM := SYSMEM + OBJECTSIZE; - HERR := WRD (SYSMEM) >= WRD (@SFP); { memavail wont tell us this } - IF HERR THEN @ERR (TRUE, 2) { heap overflow error } - END; (* keep check in until exception checking works again *) - - - - - - -(*################################################################## -#### Mark start of heap to be deallocated later. -##################################################################*) - -PROCEDURE MARK (VAR P: INTEGER); - BEGIN P := SYSMEM END; - - - -(*################################################################## -#### Release area allocated since call to mark(addr(pointer)) -##################################################################*) - -PROCEDURE RELEASE (P: INTEGER); - BEGIN SYSMEM := P END; - - - - - - -MODEND. - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/MSA326.DOC b/software/CPM/CPM21_MTPUG_09/MSA326.DOC deleted file mode 100644 index 65dcb7f..0000000 --- a/software/CPM/CPM21_MTPUG_09/MSA326.DOC +++ /dev/null @@ -1,9 +0,0 @@ -Thå  programó  founä oî thå fileó MSA326(A,B,C,D©  arå  numericaì -analysió  probleí  solutionó  aó implementeä oî  aî  Univaã  110° -mainframå  runninç Underseá Pascal®  Thå fileó werå  transcribeä -froí hardcopù listings»  theù maù contaiî errors®  Eveî iæ therå -werå  nï  transcribinç  errors¬  É  dï noô kno÷  iæ  thå  prograí -generateó  thå  righô  solutions®  Thå titlå oæ  thå  Contå  anä -Deboorå  booë referreä tï ió unknown¬  buô thå subjecô  concerneä -numerical analysis. - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/MSA326A.PAS b/software/CPM/CPM21_MTPUG_09/MSA326A.PAS deleted file mode 100644 index 0914f7c..0000000 --- a/software/CPM/CPM21_MTPUG_09/MSA326A.PAS +++ /dev/null @@ -1,45 +0,0 @@ -PROGRAM solveasystem (input, output) -(**************************************************************************** - L A W R E N C E A D K I N S , MSA 326 SECT 01 COMPUTER PROJECT NO. 1. - Conte and DeBoore, page 90(2.8-6) Spring, 1979 - **************************************************************************** -Solve F(X,Y) = (Exp(X)) + (X*Y) - 1 = 0 -and G(X,Y) = (Sin(X*Y)) + X + Y = 0 -Using the scheme - X[I+1] = X[I] - ((EXP(X[I])) + (X[I]*Y[I]) - 1) / ((EXP(X[I]))+Y[I] - Y[I+1] = Y[I] - ((SIN(X[I+1] * Y[I]) + (X[I+1]) + (Y[I])-1) / - (X[I+1] * COS(X[I+1] * Y[I]) + 1)) -Using the initial approximations X[0] = 0.1, Y[0] = 0.5. - ****************************************************************************) - - -CONST n = 20; epsilon = 5.0E-08; -VAR x, y, fofxy, gofxy, fpofxy, gpofxy: real; - i: integer; -FUNCTION convergence: boolean; - BEGIN convergence := (abs(fofxy)<=epsilon) AND (abs(gofxy)<=epsilon) END; - -BEGIN -readln (x,y); i:=0; -writeln ('RESULTS OF ITERATION OF THIS PROBLEM.'); -writeln; writeln; -writeln ('I X Y F(X,Y) G(X,Y)'); -writeln; -REPEAT - fofxy := (exp(x)) + (x*y) - 1; (*f(x,y)*) - write (i:2,' ',x:9:6,' ',y:9:6,' ',fofxy:9:6,' '); - fpofxy := exp(x) + y; (*f'(x,y)*) - x:=x- (fofxy/fpofxy); - gofxy := sin(x*y) + x + y - 1; (*g(x,y)*) - writeln (gofxy:9:6); - gpofxy := (x * cos(x*y)) + 1; (*g'(x,y)*) - y := y - (gofxy/gpofxy); - i:=i+1 -UNTIL (i=21) OR convergence; -writeln; writeln; -IF NOT convergence -THEN BEGIN - writeln; write ('****ERROR**** ITERATION FUNCTION FAILED TO '); - writeln ('CONVERGE IN ',n:2, ' ITERATIONS.'); - END -END. \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/MSA326B.PAS b/software/CPM/CPM21_MTPUG_09/MSA326B.PAS deleted file mode 100644 index 198adf3..0000000 --- a/software/CPM/CPM21_MTPUG_09/MSA326B.PAS +++ /dev/null @@ -1,54 +0,0 @@ -PROGRAM TRIDMATRIX (INPUT,OUTPUT); -(**************************************************************************** -LAWRENCE ADKINS, MSA 326, SECT. 1, COMPUTER PROJECT NO. 2. -CONTE AND DEBOORE, PAGE 123 (3.2-9) SPRING, 1979 - **************************************************************************** -USE THE TRID PROCEDURE TO SOLVE THE LINEAR SYSTEM - - 2*(1+H*H) * X(1) + X(2) = 1 - X(I-1) - 2*(1+H*H) * X(I) + X(I+1) = 0, FOR I=2,3,...,N-1 - X(N-1) - 2*(1+H*H) * X(N) = 1 -FOR N=30, H=0.1 - ****************************************************************************) - -CONST N=30; H=0.1 -VAR X,A,B,C,D: ARRAY[1..N] OF REAL; - M: REAL; K: INTEGER; -PROCEDURE CREATEMATRIX; - BEGIN - FOR K=1 TO N - DO BEGIN A[K] := 1; D[K] := -2*(1+H*H); C[K] := 1; B[K] := 0 END; - A[1] := 0; C[N] := 0; B[1] := 1; B[N] := 1 - END; -PROCEDURE TRID; - PROCEDURE DIAGERROR; - BEGIN - WRITELN ('**ERROR** FOUND A ZERO-VALUED DIAGONAL ELEMENT. PGM ABORTED.'); - HALT - END; - BEGIN (*ELIMINATION*) - FOR K:= 2 TO N - DO BEGIN - IF D[K-1] = 0 - THEN DIAGERROR - ELSE BEGIN - M := A[K] / D[K-1]; - D[K] := D[K] - (M* C[K-1]); - B[K] := B[K] - (M* B[K-1]) - END - END; - IF D[N] = 0 - THEN DIAGERROR - ELSE BEGIN (*BACK SUBSTITUTION*) - WRITELN; WRITELN; WRITELN ('THE SOLUTION VECTOR Y IS '); WRITELN; - WRITELN ('K Y(K)'); WRITELN; - X[N] := B[N] / D[N]; WRITELN (N:2,' ',X[N]); - FOR K:= N-1 DOWNTO 1 - DO BEGIN - X[K] := (B[K] - (C[K] * X[K+1])) / D[K]; - WRITELN (K*2, ' ', X[K]) - END - END; - WRITELN; WRITELN - END; -BEGIN CREATEMATRIX; TRID END. - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/MSA326C.PAS b/software/CPM/CPM21_MTPUG_09/MSA326C.PAS deleted file mode 100644 index 09e0956..0000000 --- a/software/CPM/CPM21_MTPUG_09/MSA326C.PAS +++ /dev/null @@ -1,124 +0,0 @@ -PROGRAM EIGENVALUE (INPUT,OUTPUT); -(**************************************************************************** -LAWRENCE ADKINS, MSA 326, SECT 1, COMPUTER PROJECT NO. 3. -CONTE AND DEBOORE, PAGE 180 (3.9-5), SPRING, 1979 - **************************************************************************** -USE THE POWER METHOD TO ESTIMATE THE MAXIMUM-MODULUS EIGENVALUE, AND A -CORRESPONDING EIGENVECTOR FOR THE TRIDIAGONAL MATRIX A OF ORDER N=20 -WITH A[I,I] = 4, A[I+1,I] = A[I,I+1] = -1 FOR I=1,2,...,N, -AND COMPARE THE RESULT WITH THE EXACT MAXIMUM EIGENVALUE OBTAINED BY - LAMBDA = 4 + (-2) * COS ((J*PI)/N+1) , J=1,2,...,N -WHERE WE CHOOSE J=1 IN ORDER TO OBTAIN THE MAXIMUM EIGENVALUE. - ****************************************************************************) -CONST N=20; KK=1; EPSILON=0.005; MAXIT=10; D=4; E=-1; PI=3.1415926; -TYPE VECTOR = ARRAY [1..N] OF REAL; - MATRIX = ARRAY [1..N,1..N] OF REAL; -VAR B, BM: MATRIX; - RATIO, BMZ, ZM, BZM, Z: VECTOR; - I,J,K: 1..N; M: INTEGER; - SUM, DIFFERENCE, RMAX, RMIN, LAMBDA: REAL; -PROCEDURE CREATEMATRIX; - BEGIN - FOR K:=1 TO N - DO BEGIN - FOR J:=1 TO N DO B[K,J] := 0; - Z[K] := 1 - END; - B[1,1] := D; B[1,2] := E; - FOR K:= 2 TO N-1 - DO BEGIN B[K,K-1] := E; B[K,K] := D; B[K,K+1] := E END; - B[N,N-1] := E; B[N,N] := D - END; -PROCEDURE INITIALIZE; - BEGIN - M:= 0; - FOR I:= 1 TO N - DO BEGIN - FOR J:= 1 TO N DO BM[I,J] := 0; - BM[I,I] := 1 - END - END; -PROCEDURE MULTVECTOR (B:MATRIX; X: VECTOR; VAR Y: VECTOR); - BEGIN - FOR J:= 1 TO N (* ALL ROWS OF B*) - DO BEGIN - SUM := 0; - FOR I:= 1 TO N (*ALL COLUMNS OF B*) - DO SUM := SUM + B[J,I] * X[I]; - Y[J] := SUM - END - END; -PROCEDURE MULTZM; - BEGIN FOR J := 1 TO N DO ZM[J] := (1/BMZ[KK])*BMZ[J] END; -PROCEDURE DIVRATIO; - BEGIN FOR J:= 1 TO N DO RATIO[J] := ABS(BZM[J]/ZM[J]) END; -PROCEDURE MAXMINCHECK; - BEGIN - RMAX := 0; RMIN := RATIO [1]; - FOR J := 2 TO N - DO BEGIN - IF RATIO [J] < RMIN THEN RMIN := RATIO[J]; - IF RATIO [J] > RMAX THEN RMAX := RATIO[J] - END - END; -PROCEDURE WRITETABLE; - BEGIN - WRITE (M:2, ' '); - FOR J:= 1 TO N - DO BEGIN - IF J<> 1 THEN WRITE (' '); - WRITE (BMZ[J]:14:6, ' ', ZM[J]:14:6, ' '); - WRITE (BZM[J]:14:6, ' ', RATIO[J]:14:6, ' '); - IF J=N THEN WRITELN (DIFFERENCE:14:6); - WRITELN - END - END; -PROCEDURE MULTMATRIX; - VAR C:MATRIX; - BEGIN - FOR I:= 1 TO N - DO BEGIN - FOR J:= 1 TO N - DO BEGIN - SUM := 0; - FOR K:= 1 TO N DO SUM := SUM + B[I,K] * BM[K,J]; - C[I,J] := SUM - END - END; - FOR I:= 1 TO N DO FOR J:= 1 TO N DO BM[I,J] := C[I,J] - END; -PROCEDURE COMPARE; - BEGIN - WRITELN; WRITELN; WRITELN; - WRITELN ('COMPARE THIS RESULT WITH THE EXACT MAXIMUM EIGENVALUE...'); - WRITELN; WRITELN (' J LAMBDA(J)'); WRITELN; - FOR J:= 1 TO N - DO BEGIN - LAMBDA := D + (2*E * COS((J*PI)/(N+1))); - WRITELN (J:2, ' ', LAMBDA) - END - END; - -BEGIN CREATEMATRIX; INITIALIZE; -WRITE ('RESULTS OF USE OF THE POWER METHOD IN FINDING LARGEST EIGENVALUE'); -WRITELN ('OF THE INPUTTED MATRIX'); WRITELN; -WRITE ('M BMZ ZM BZM '); -WRITELN('BMZ/ZM RMAX-RMIN'); -WRITE ('ITER. NUMERATOR DENOMINATOR '); -WRITELN(' RATIO DIFFERENCE'); -WRITELN; -REPEAT - MULTVECTOR (BM,Z,BMZ); (*BMZ:=BM*Z*) - MULTZM; (*ZM:=(1/BMZ[KK])*BMZ*) - MULTVECTOR (B,ZM, BZM); (*BZM:=B*ZM*) - DIVRATIO; (*RATIO:=BZM/ZM*) - MAXMINCHECK; (*CHECK IF RATIO IS CANDIDATE FOR RMAX OR RMIN*) - DIFFERENCE := ABS(RMAX-RMIN); - WRITETABLE; (*PRINT OUT THE VECTORS IN A TABLE*) - MULTMATRIX; (*BM:=B*BM*) - M:=M+1 -UNTIL (M=MAXIT+1) OR (DIFFERENCE < EPSILON); -COMPARE -END. - -  \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/MSA326D.PAS b/software/CPM/CPM21_MTPUG_09/MSA326D.PAS deleted file mode 100644 index af5d217..0000000 --- a/software/CPM/CPM21_MTPUG_09/MSA326D.PAS +++ /dev/null @@ -1,53 +0,0 @@ -PROGRAM GAUNTEGRATE (INPUT,OUTPUT); -(**************************************************************************** -LAWRENCE ADKINS, MSA 326, SECT 1, COMPUTER PROJECT NO. 4 -CONTE AND DEBOORE, PAGE 306(5.4-6), SPRING, 1979 - **************************************************************************** -SOLVE PROBLEMS 5.3-3(A,B,C) ON PAGE 298 USING THE GAUSSIAN FIVE POINT FORMULA -FORMULA AS AN APPROXIMATION TO THE REQUIRED INTEGRALS. - -CHANGE /INTEGRAL FROM 0 TO 1 OF (F(X) DX)/ TO -/ (1/2) * INTEGRAL FROM -1 TO 1 OF (G(T) DT)/ -WHICH IS APPROXIMATELY EQUAL TO -/ (1/2) * SUMMATION FROM K=0 TO 4 OF (AWEIGHT[K] * G(XIPOINT[K])) / -IN ALL THREE CASES ONLY THE FUNCTION G CHANGES; THE WEIGHTS AND POINTS -USED REMAIN THE SAME. THEY ARE COPIED FROM A TABLE ON PAGE 304 OF -CONTE AND DEBOORE. - ****************************************************************************) -CONST N=4; (*5-1:=4*) -TYPE TABLE = RECORD - XIPOINT : ARRAY [0..N] OF REAL; - AWEIGHT : ARRAY [0..N] OF REAL - END; -VAR GAUSS: TABLE; I,C: REAL; J,K: 0..N; - -PROCEDURE FILLINGAUSS; - BEGIN - GAUSS.XIPOINT[2] := 0; GAUSS.AWEIGHT[2] := 0.56888889; - GAUSS.XIPOINT[4] := 0.90617985; GAUSS.AWEIGHT[4] := 0.23692689; - GAUSS.XIPOINT[0] :=-0.90617985; GAUSS.AWEIGHT[0] := 0.23692689; - GAUSS.XIPOINT[3] := 0.53846931; GAUSS.AWEIGHT[3] := 0.47862867; - GAUSS.XIPOINT[1] :=-0.53846931; GAUSS.AWEIGHT[1] := 0.47862867; - END; -FUNCTION F1 (T:REAL): REAL; - BEGIN F1 := ((T+1)/2)*EXP(-(T+1)/2) END; -FUNCTION F2 (T:REAL): REAL; - BEGIN F2 := ((T+1)/2)*SIN( (T+1)/2) END; -FUNCTION F3 (T:REAL): REAL; - VAR TEMP: REAL; - BEGIN TEMP := 1 + SQR((T+1)/2); F3 := SQRT(TEMP*TEMP*TEMP) END; -PROCEDURE SOLVE (CONSTANT: REAL; FUNCTION G(T: REAL): REAL); - BEGIN - I:= 0; - FOR J:= 0 TO (N-1) - DO I := I + (GAUSS.AWEIGHT[J] * G(GAUSS.XIPOINT[J])); - I := CONSTANT * I - END; - -BEGIN -FILLINGAUSS; C:= 0.5; WRITELN ('R E S U L T S'); -SOLVE (C,F1); WRITELN ('PROB 5.3-3-A) := ',I); -SOLVE (C,F2); WRITELN ('PROB 5.3-3-B) := ',I); -SOLVE (C,F3); WRITELN ('PROB 5.3-3-C) := ',I) -END. - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/PASERROR.PAS b/software/CPM/CPM21_MTPUG_09/PASERROR.PAS deleted file mode 100644 index c54c6ee..0000000 --- a/software/CPM/CPM21_MTPUG_09/PASERROR.PAS +++ /dev/null @@ -1,22 +0,0 @@ -PROGRAM display_pascal_error_text; - -VAR errfile: text; - error_num, users_error_num, ioreturn_value: integer; - error_text: STRING; -BEGIN -write ('What is the Pascal/MT+ error number that you want the text of? '); -readln (users_error_num); -error_text := 'MTERRS.TXT'; -open (errfile, error_text, ioreturn_value); -IF ioreturn_value > 4 -THEN BEGIN writeln ('File ', error_text, ' not found.'); exit END; -read (errfile, error_num); -WHILE (error_num <> users_error_num) AND NOT eof (err_file) -DO BEGIN readln (err_file); read (err_file, error_num) END; -IF NOT EOF (err_file) -THEN BEGIN - readln (errfile, error_text); - writeln ('Error ', error_num, ' is: ', error_text) - END -ELSE writeln ('Unexplainable error. ') -END. \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/PLANE.SRC b/software/CPM/CPM21_MTPUG_09/PLANE.SRC deleted file mode 100644 index d1a19e0..0000000 --- a/software/CPM/CPM21_MTPUG_09/PLANE.SRC +++ /dev/null @@ -1,374 +0,0 @@ -PROGRAM PLANE; (*D.COVILL - from BASIC program by - John L. Eggert*) -CONST VERSION = 'PLANE version 1.2 7/10/81 D.Covill'; - -VAR ESC,GRAPHON,GRAPHOFF: STRING; - ERASE,HOME,REVON,REVOFF: STRING; - CH: CHAR; - - ALT,ALT0,ALT2,CLIMB,CLIMB0,CLIMB2:INTEGER; - SPEED,SPEED0,SPEED2,POWER,POWER0,POWER2:INTEGER; - HEAD,HEAD0,HEAD2,FUEL,FUEL0,FUEL2:INTEGER; - ATT,ATT0,ATT2:INTEGER; {Attack angle} - DIST,DIST2:INTEGER; {Distance to goal} - TURN:INTEGER; {-1=LEFT, +1=RIGHT, 0=CENTER} - WAITLOOP:INTEGER; - STALLED:BOOLEAN; - -LABEL 999; -(*----------------------------------------------*) -EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; -(*----------------------------------------------*) -PROCEDURE INITIALIZE; -BEGIN - ESC := CHR($1B); {Escape} - GRAPHON := CONCAT(ESC,'F'); - GRAPHOFF := CONCAT(ESC,'G'); - ERASE := CONCAT(ESC,'E'); - HOME := CONCAT(ESC,'H'); - REVON := CONCAT(ESC,'p'); - REVOFF := CONCAT(ESC,'q'); - WRITE(ERASE); - WRITE(ESC,'x1'); {Enable line 25} - - ALT:=2500; CLIMB:=6; FUEL:=980; - HEAD:=280; POWER:=75; SPEED:=125; - HEAD2:=280; ATT:=7; - DIST:=32000; DIST2:=30000; - WAITLOOP := 60; {Approx 1 second} -END {INITIALIZE}; -(*----------------------------------------------*) -FUNCTION BOUND(WHAT,LO,HI:INTEGER):INTEGER; -BEGIN - IF WHATHI THEN BOUND:=HI - ELSE BOUND:=WHAT; -END {BOUND}; -(*----------------------------------------------*) -PROCEDURE CURSOR(L,C:INTEGER); - {move cursor to line L, column C (starting from 1,1)} -BEGIN - WRITE(ESC,'Y',CHR(L+31),CHR(C+31)); -END {CURSOR}; -(*----------------------------------------------*) -PROCEDURE COMM(L:INTEGER; STR:STRING); - {Display STR in line L of the COMM box on the panel} -VAR I:INTEGER; -BEGIN - IF L=1 THEN WRITE(CHR($07)); {bell} - CURSOR(2+L,48); FOR I:=1 TO 24 DO WRITE(' '); - CURSOR(2+L,48); WRITE(STR); -END {COMMUNICATE}; -(*----------------------------------------------*) -PROCEDURE DISPLAY; - {Display all status instruments, clear old readings} -VAR I,L,N:INTEGER; CH:CHAR; -BEGIN - CURSOR(15,5); WRITE(ALT:4); - CURSOR(15,16); WRITE(CLIMB:3); - CURSOR(ROUND(13-(ALT0/500)),8); WRITE(' '); - CURSOR(ROUND(13-(ALT/500)),8); WRITE(GRAPHON,'aa',GRAPHOFF); - N := BOUND(CLIMB0,-25,25); - CURSOR(ROUND(8-(N/5)),19); WRITE(' '); - N := BOUND(CLIMB,-25,25); - CURSOR(ROUND(8-(N/5)),19); WRITE(GRAPHON,'aa',GRAPHOFF); - CURSOR(4,33); WRITE(HEAD:3); - CURSOR(8,56); WRITE(FUEL:4); - N := ROUND((SPEED-40)*7/20)+1; IF N>71 THEN N:=71; - CURSOR(18,2); - WRITE(REVON); FOR I:=2 TO N DO WRITE(' '); - WRITE(REVOFF); FOR I:=N+1 TO 71 DO WRITE(' '); - N := ROUND(POWER*7/10)+1; IF N>71 THEN N:=71; - CURSOR(21,2); - WRITE(REVON); FOR I:=2 TO N DO WRITE(' '); - WRITE(REVOFF); FOR I:=N+1 TO 71 DO WRITE(' '); - - L := 14-((ATT0+6)DIV 3); {clear old ATT display} - CURSOR(L,32); WRITE(' '); - CURSOR(10,32); WRITE('-----'); {may be overwritten} - L := 14-((ATT+6)DIV 3); {new ATT display line} - CASE (ATT MOD 3) OF - 0: CH := '{'; {low} - 1: CH := 'a'; {center} - 2: CH := 'z'; {high} - END; - CURSOR(L,32); - WRITE(GRAPHON,CH,CH,REVON,' ',REVOFF,CH,CH,GRAPHOFF); - CURSOR(25,1); -END {DISPLAY}; -(*----------------------------------------------*) -PROCEDURE DOTURN(VAL:INTEGER); -BEGIN - IF VAL=TURN THEN EXIT; - CASE TURN+1 OF - 0: BEGIN CURSOR(9,28); WRITE(' '); - CURSOR(11,38); WRITE(' '); END; - 1: BEGIN CURSOR(10,27); WRITE(' '); - CURSOR(10,38); WRITE(' '); END; - 2: BEGIN CURSOR(11,28); WRITE(' '); - CURSOR(9,38); WRITE(' '); END; - END; - TURN := VAL; - CASE TURN+1 OF - 0: BEGIN CURSOR(9,28); WRITE(GRAPHON,'z a',GRAPHOFF); - CURSOR(11,38); WRITE(GRAPHON,'z a',GRAPHOFF); - END; - 1: BEGIN CURSOR(10,27); WRITE('----'); - CURSOR(10,38); WRITE('----'); END; - 2: BEGIN CURSOR(11,28); WRITE(GRAPHON,'a z',GRAPHOFF); - CURSOR(9,38); WRITE(GRAPHON,'a z',GRAPHOFF); - END; - END; -END {DOTURN}; -(*----------------------------------------------*) -PROCEDURE DISASTER(MSG:STRING); -VAR I:INTEGER; -BEGIN - FOR I:=1 TO 10 DO BEGIN - CURSOR(24,5); WRITE(REVON,MSG); - END; - GOTO 999; -END {DISASTER}; -(*----------------------------------------------*) -PROCEDURE COMPUTE; - {Compute new values for performance parameters} -VAR NEWCLRATE:REAL; -BEGIN - HEAD := HEAD + (2*TURN); - IF HEAD<1 THEN HEAD:=HEAD+360; - IF HEAD>360 THEN HEAD:=HEAD-360; - - IF SPEED<55 THEN BEGIN - CURSOR(12,52); WRITE(REVON,'STALL WARNING',REVOFF); - STALLED := TRUE; - END; - IF STALLED THEN BEGIN - CURSOR(12,52); WRITE(' '); - IF SPEED>80 THEN STALLED:=FALSE - ELSE BEGIN - CURSOR(12,52); {This will make it blink} - WRITE(REVON,'STALL WARNING',REVOFF); - ATT := ATT-3; - END; - END; - - ATT := BOUND(ATT,-45,45); - NEWCLRATE := -32 + SPEED*SIN(ATT*6.28319/180); - ALT := ALT + CLIMB + ROUND(NEWCLRATE/2); - ALT := BOUND(ALT,0,5000); - CLIMB := CLIMB + ROUND(NEWCLRATE); - CLIMB := BOUND(CLIMB,-50,25); - CLIMB := ROUND(CLIMB0*0.7 + CLIMB*0.3); {Smooth it} - - IF FUEL<=0 THEN POWER:=0; - POWER := BOUND(POWER,0,100); - SPEED := ROUND(SPEED*0.9 + POWER*0.17 - CLIMB*0.4); - IF SPEED>240 THEN - DISASTER('YOUR WINGS JUST FELL OFF DUE TO EXCESS SPEED'); - SPEED := BOUND(SPEED,0,240); - FUEL := FUEL-ROUND(POWER/12); -END {COMPUTE}; -(*----------------------------------------------*) -PROCEDURE CALLTHETOWER; - {Check distance and issue new instructions} -VAR MSG:STRING; GLIDE:INTEGER; - (*-----------*) -PROCEDURE ADDCH(CH:CHAR); -BEGIN MSG := CONCAT(MSG,CH); END; - (*-----------*) -BEGIN - DIST2 := DIST2-500; - IF DIST2=29500 THEN - COMM(1,'YOU ARE IN RADAR CONTACT') - ELSE IF DIST2=29000 THEN BEGIN - COMM(1,'TURN TO HEADING OF 242'); - HEAD2:=242; END - ELSE IF DIST2=28000 THEN - COMM(1,'DESCEND TO 1500 FEET') - ELSE IF DIST2=21000 THEN BEGIN - COMM(1,'TURN TO HEADING OF 304'); - HEAD2:=304; END - ELSE IF DIST2=20000 THEN - COMM(1,'REDUCE AIRSPEED TO 90') - ELSE IF DIST2=18000 THEN - COMM(1,'BEGIN DESCENT 10 fps') - ELSE IF DIST2<17500 THEN BEGIN - {Runway is 3000 ft from +500 to -2500} - IF DIST<500 THEN BEGIN - IF DIST<-2800 THEN - IF ALT<100 THEN - DISASTER('YOU HAVE OVERSHOT THE RUNWAY AND CRASHED') - ELSE - DISASTER('YOU HAVE JUST BUZZED THE FIELD - NOW WHAT?'); - MSG := ''; - WRITE([ADDR(ADDCH)],2500+DIST,' FT OF RUNWAY LEFT'); - COMM(2,MSG); END - ELSE BEGIN - {On the glidepath} - GLIDE := ROUND(0.0875*DIST); - IF ALTGLIDE+50 THEN BEGIN - MSG := ''; - WRITE([ADDR(ADDCH)],'YOU ARE ',ALT-GLIDE,' FT HIGH'); - COMM(1,MSG); END - ELSE COMM(1,' '); - END; - END; -END {CALLTHETOWER}; -(*----------------------------------------------*) -PROCEDURE RUNIT; -VAR I,B:INTEGER; X:REAL; -LABEL 100; -BEGIN -REPEAT -100: - COMPUTE; - FOR I:=1 TO WAITLOOP DO BEGIN - B := @BDOS(6,WRD($FF)); {Direct Console Input} - {if there was no input B will be $00} - CASE CHR(B) OF - 'X': EXIT; - '4': DOTURN(-1); {Left} - '5': DOTURN(0); {Home} - '6': DOTURN(+1); {Right} - '8': ATT:=ATT+1; {Up} - '2': ATT:=ATT-1; {Down} - 'F': POWER:=POWER+2; - 'D': POWER:=POWER-2; - END {CASES}; - X := SQRT(7.7); {Kill some time} - END {1-SECOND LOOP}; - DISPLAY; - ALT0:=ALT; CLIMB0:=CLIMB; HEAD0:=HEAD; - FUEL0:=FUEL; POWER0:=POWER; SPEED0:=SPEED; - ATT0:=ATT; - IF ABS(HEAD-HEAD2) < 4 THEN BEGIN - {Making progress toward the goal} - DIST := DIST-ROUND(SPEED*1.5); - IF DIST<=DIST2 THEN CALLTHETOWER; - END; - UNTIL ALT<=5; - - IF CLIMB<-10 THEN - DISASTER('YOU JUST CRASHED INTO THE GROUND'); - IF DIST>500 THEN - DISASTER('WHAT ARE YOU DOING IN THIS CORNFIELD?'); - IF SPEED>100 THEN BEGIN - COMM(1,CONCAT(REVON,' BOUNCE ',REVOFF)); - ALT:=50; GOTO 100; END; - COMM(1,' --LANDED OK--'); - POWER:=0; ALT:=0; SPEED:=0; CLIMB:=0; - DISPLAY; -END {RUNIT}; -(*----------------------------------------------*) -PROCEDURE PRINTPANEL; - (*Print the instrument panel on the terminal*) - PROCEDURE PANEL; (*PRINTPANEL is too big in one piece*) - BEGIN -WRITELN -('faaaaaaaaasaasaaaaaaasaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaaaaaac'); -WRITELN -('` ALTITUDE` ` CLIMB ` faaaaaaaaaaaaac vaaaa COMMUNICATIONS aaaaat'); -WRITELN -('` 5000 ` ` 25 ` ` HEADING ` ` `'); -WRITELN -('` 4500 ` ` 20 ` ` ... ` ` `'); -WRITELN -('` 4000 ` ` 15 ` eaaaaaaaaaaaaad eaaaaaaaaaaaaaaaaaaaaaaaaat'); -WRITELN -('` 3500 ` ` 10 ` xzzzzzzzzzzzzzy faaaaaaaaaaac `'); -WRITELN -('` 3000 ` ` 5 ` x y ` FUEL ` `'); -WRITELN -('` 2500 ` ` 0 ` } } ` .... ` `'); -WRITELN -('` 2000 ` ` -5 ` } } eaaaaaaaaaaad `'); -WRITELN -('` 1500 ` `-10 ` } ---- ----- ----} `'); -WRITELN -('` 1000 ` `-15 ` } } faaaaaaaaaaaaaaac `'); -WRITELN -('` 0500 ` `-20 ` } } ` ` `'); -WRITELN -('` 0000 ` `-25 ` y x eaaaaaaaaaaaaaaad `'); -WRITELN -('vaaaaaaaaabaabaaaaaaat y x `'); -WRITELN -('` .... ` ` .. ` zzzzzzzzzzzzz `'); -WRITELN -('vaaaaaaaaauaauaaaaaaauaaaaaaa AIRSPEED aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat'); -WRITELN -('`40 60 80 100 120 140 160 180 200 `'); -WRITELN -('` `'); -WRITELN -('vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa POWER aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat'); -WRITELN -('`0 10 20 30 40 50 60 70 80 90 100`'); -WRITELN -('` `'); -WRITELN -('eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad'); - END {PANEL}; -BEGIN - WRITE(ERASE,GRAPHON); - PANEL; - WRITE(GRAPHOFF,HOME); -END {PRINTPANEL}; -(*----------------------------------------------*) -PROCEDURE INSTRUCT; - (*Print Instructions*) -BEGIN -WRITELN('This version by D.Covill based on BASIC original by J.Eggert.'); - WRITELN; -WRITE('This program simulates an instrument landing in a light '); -WRITELN('aircraft.'); -WRITELN('You will see a representation of a pilot''s instrument panel'); -WRITELN(' with real-time updates at 1-second intervals.'); -WRITELN; -WRITELN('When the game starts, you will be flying level at 2500 feet.'); -WRITELN('Instructions from the ground radar controller will appear'); -WRITELN(' in the upper RH corner of the screen. He/she will attempt'); -WRITELN(' to talk you down safely. Don''t screw up!'); -WRITELN; -WRITELN('Please note the following:'); -WRITELN(' The plane will stall below 60 MPH'); -WRITELN(' Touchdown above 100 MPH results in a 50-foot bounce'); -WRITELN(' Descent rate at touchdown must be less than 10 fps'); -WRITELN(' A 100-foot hill is at the far end of the runway'); -WRITELN(' You do not have an unlimited supply of fuel'); -WRITELN(' You only get nearer the field when on the proper heading'); -WRITELN(' A forced landing is possible, if touchdown is gentle'); -WRITELN; -WRITELN(' DEPRESS RETURN FOR NEXT PAGE'); - READLN; -WRITELN('THE FOLLOWING KEYS ARE YOUR CONTROLS-'); -WRITELN(' 4-LEFT ARROW - TURN LEFT'); -WRITELN(' 6-RIGHT ARROW - TURN RIGHT'); -WRITELN(' 5-HOME - WINGS LEVEL'); -WRITELN(' 8-UP ARROW - NOSE UP'); -WRITELN(' 2-DOWN ARROW - NOSE DOWN'); -WRITELN(' F - FORWARD THROTTLE'); -WRITELN(' D - DECREASE THROTTLE'); -WRITELN; -WRITELN(' X - BAIL OUT (TO CP/M)'); -WRITELN; -WRITELN('THEY MAY BE DEPRESSED REPEATEDLY FOR GROSS CHANGES'); -WRITELN(' DEPRESS RETURN TO BEGIN'); - READLN; -END {INSTRUCT}; -(*----------------------------------------------*) -BEGIN - WRITELN(VERSION); WRITELN; - WRITELN('DO YOU WANT INSTRUCTIONS (Y/N)?'); - READ(CH); IF CH='Y' THEN INSTRUCT; - INITIALIZE; - PRINTPANEL; - RUNIT; -999: - CURSOR(25,1); WRITE(ESC,'E'); {Erase line 25} - CURSOR(24,1); WRITE(GRAPHOFF,REVOFF); -END. \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/ROUTTAB.PAS b/software/CPM/CPM21_MTPUG_09/ROUTTAB.PAS deleted file mode 100644 index f1606e3..0000000 --- a/software/CPM/CPM21_MTPUG_09/ROUTTAB.PAS +++ /dev/null @@ -1,484 +0,0 @@ -{########################################################################## -#### #### -#### Full program name: ROUTINE_TABLE_MODULE_FOR_TYPE_CHECKER_PROGRAM.#### -#### File name: ROUTTAB.PAS. #### -#### Support modules reqd: PASLIB.ERL, SCANNER. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 Vers 1.0. File just created. - 12-NOV-81 Development of this version completed. - 9-JAN-82 Vers 2.0. development begins. - 1-MAR-82 Development of this version complete. - 6-MAR-82 Vers 2.1. Conformant array stuff added. - 19-APR-82 Vers 2.2. No changes made. -#### #### -##########################################################################} - - -MODULE ROUTINE_TABLE_HANDLER; - -{$I B:TYPECHK.DEC } - -VAR - last_rt_entry: integer; { index to last filled element of routine table } - token: EXTERNAL token_type; - tokenbuf: EXTERNAL string132; - infile: EXTERNAL text; - outfile: EXTERNAL text; - last_entry_point_name: EXTERNAL string132; - symbols_avail_for_external_reference: EXTERNAL boolean; - last_tt_entry: EXTERNAL integer; - extern_declaration: boolean; - exit_keywords: EXTERNAL SET OF token_type; - debug: EXTERNAL boolean; - -EXTERNAL PROCEDURE get_next_token; -EXTERNAL PROCEDURE error (pascal_error_no: integer); -EXTERNAL PROCEDURE @hlt; -EXTERNAL PROCEDURE mark ({VAR} p: integer); -EXTERNAL PROCEDURE release (p: integer); -EXTERNAL FUNCTION tm1find_prev_occurance_of_type_id - (VAR name_to_find: string132; - last_index: integer; - VAR ret_index: integer; - VAR type_table: ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec): - boolean; - - -{#############################################################################} -{ Initialize this module's private variables. } -{#############################################################################} -PROCEDURE rminit_routine_table_module; - - BEGIN - last_rt_entry := 0; - END; - - - - - - -{#############################################################################} -(*-- Assuming the first symbol has already been scanned, ----- parse the following Pascal/MT+ productions: ----- ::= { ;} ----- ::= | ----- ::= EXTERNAL | ----- ----- ::= EXTERNAL | ----- ----- ::= ----- ::= ----- ::= ----- *) -{#############################################################################} -PROCEDURE rmadd_new_routines_to_routine_table - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - CONST action = 'Handling Routines...'; - VAR saw_a_begin_token: boolean; - BEGIN - writeln; writeln (action); writeln (outfile); writeln (outfile, action); - exit_keywords := [tokexternal, tokproc, tokfunc]; - WHILE NOT eof (infile) { outer file } - DO BEGIN - IF (token IN exit_keywords) - THEN BEGIN - extern_declaration := token = tokexternal; - IF token = tokexternal THEN get_next_token; - rthandle_routine_heading_guts - (symbols_avail_for_external_reference, type_table, routine_table); - IF debug THEN error (0); - rtremove_duplicate_routine_entry (routine_table); - IF NOT extern_declaration - THEN rtskip_routine_body (type_table, routine_table) - ELSE get_next_token - END - ELSE get_next_token - END - END; - - - - -{#############################################################################} -(*-- Parse the BNF production. See the Pascal manuals. *) -{#############################################################################} -PROCEDURE rtskip_routine_body - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - BEGIN - REPEAT - get_next_token - UNTIL (token IN exit_keywords) OR (token = tokbegin); - WHILE (token IN exit_keywords) { some local routine declarations } - DO BEGIN - rthandle_routine_heading_guts (false, type_table, routine_table); - rtrecurse_skip_routine_body (type_table, routine_table) - END; - { Assume that we are now at the outer begin of this block } - REPEAT - get_next_token; - WHILE (token = tokend) AND (NOT eof (infile)) - DO BEGIN - get_next_token; - IF token = toksemicolon - THEN BEGIN - get_next_token; - IF (token IN exit_keywords) OR (token = tokbegin) - THEN exit - END - END - UNTIL eof (infile) - END; - - - - -PROCEDURE rtrecurse_skip_routine_body - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - BEGIN rtskip_routine_body (type_table, routine_table) END; - - - - -{#############################################################################} -{--- Insert the specified info into a record linked onto the routine table-- ----- The routine being parsed has parameters. } -{#############################################################################} -PROCEDURE rtupdate_parmlist - (VAR type_id: string132; - n_of_stacked_parms: integer; - param_class: tparm_class; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - VAR ptr, last_ptr, top_of_addl_parm_list: t_ptr_to_next_parm; - i, type_index: integer; - b: boolean; - BEGIN - { Assume that at least one additional parm is to to added to parmlist } - new (ptr); last_ptr := ptr; top_of_addl_parm_list := ptr; - b := tm1find_prev_occurance_of_type_id - (type_id, last_tt_entry, type_index, type_table); - WITH ptr^ - DO BEGIN - parm_indx_to_type_table := type_index; - parm_class := param_class; - rest_of_parm_list := nil - END; - IF n_of_stacked_parms > 1 - THEN FOR i := 2 TO n_of_stacked_parms - DO BEGIN - new (ptr); - WITH ptr^ - DO BEGIN - parm_indx_to_type_table := type_index; - parm_class := param_class; - rest_of_parm_list := nil - END; - last_ptr^.rest_of_parm_list := ptr; - last_ptr := ptr - END; - { Add the additional parm list to the existing parmlist } - ptr := routine_table [last_rt_entry]. parm_list; - IF ptr = nil - THEN routine_table [last_rt_entry]. parm_list := top_of_addl_parm_list - ELSE BEGIN - WHILE ptr^.rest_of_parm_list <> nil - DO ptr := ptr^. rest_of_parm_list; - ptr^.rest_of_parm_list := top_of_addl_parm_list - END - END; - - - - - - - - - - - - - - - - - - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ productions: ----- ::= PROCEDURE INTERRUPT [ ] ; | ----- PROCEDURE [ ] ; | ----- PROCEDURE ; ----- ::= FUNCTION : ----- ; ----- ::= | ----- ----- ::= [ ] | ----- *) -{#############################################################################} -PROCEDURE rthandle_routine_heading_guts - ( rtinsert_flag: boolean; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - BEGIN - get_next_token; { should be routine identifier } - IF (token = toklbracket) - OR ((token = tokidentifier) AND (tokenbuf = 'INTERRUPT')) - THEN BEGIN { get past overlay/interrupt syntax stuff } - REPEAT get_next_token UNTIL token = tokrbracket; - get_next_token - END; - IF rtinsert_flag - THEN BEGIN - last_entry_point_name := tokenbuf; - rtplace_id_into_routine_table (tokenbuf, routine_table) - END; - get_next_token; { should be lparen, scolon, or colon tokens } - IF token = toklparen - THEN BEGIN - rt1handle_formal_parmlist (rtinsert_flag, type_table, routine_table); - get_next_token; { should be func's colon or proc's scolon } - END; - IF token = tokcolon - THEN BEGIN - get_next_token; { should be result_type_id } - IF rtinsert_flag - THEN rtupdate_parmlist (tokenbuf, 1, func_value, type_table, - routine_table); - get_next_token { should be scolon token } - END - END; - - - - - - - - - - - - - - - - - - - - -{#############################################################################} -(*-- Assuming the first symbol has already been scanned, ----- parse the following Pascal/MT+ productions: ----- ::= ( {, } ) ----- ::= | | ----- VAR | ----- ::= {, } : | ----- {, } : ----- ::= ARRAY [ {; } ] OF ----- ----- ::= | ----- ::= .. : ----- ::= | ----- *) -{#############################################################################} -PROCEDURE rt1handle_formal_parm_list - ( rtinsert_flag: boolean; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - VAR n_of_stacked_parms: integer; - param_class: t_parm_class; - was_a_procfunc_parm: boolean; - BEGIN - REPEAT - param_class := value_parm; - n_of_stacked_parms := 0; - was_a_procfunc_parm := false; - REPEAT - get_next_token; { should be VAR, parm_id, FUNCTION or PROCEDURE tokens } - IF (token = tokfunc) OR (token = tokproc) - THEN BEGIN - was_a_procfunc_parm := true; - param_class := proc_func; - rthandle_routine_heading_guts (false, type_table, routine_table); - tokenbuf := '0undefin' - END - ELSE BEGIN - IF token = tokvar - THEN BEGIN param_class := var_parm; get_next_token END; - get_next_token { should be comma or colon tokens } - END; - n_of_stacked_parms := n_of_stacked_parms + 1; - UNTIL (token = tokcolon) OR was_a_procfunc_parm; - IF NOT was_a_procfunc_parm - THEN BEGIN - get_next_token; { should be type_id token, or ARRAY } - IF token = tokarray - THEN BEGIN - param_class := conform_array; - rm2handle_conformant_array (type_table, routine_table) - END - END; - IF rtinsert_flag - THEN rtupdate_parmlist (tokenbuf, n_of_stacked_parms, - param_class, type_table, routine_table); - IF NOT was_a_procfunc_parm - THEN get_next_token { should be scolon or rparen tokens } - UNTIL token = tokrparen; - END; - - - - - - -{#############################################################################} -{---- For now, skip by the conformant array syntax. } -{#############################################################################} -PROCEDURE rm2handle_conformant_array - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - BEGIN - REPEAT - REPEAT - get_next_token; get_next_token; { should be lbracket, then identifier } - get_next_token; get_next_token; { should be dotdot, then identifier } - get_next_token; get_next_token; { should be colon, then ordtypeid } - get_next_token; get_next_token { should be rbracket, then scolon or OF} - UNTIL token = tokof; - get_next_token { should be ARRAY or base_type_id } - UNTIL token <> tokarray - END; - - - - -{#############################################################################} -{--- Insert a routine identifier into the routine tablem, after first ----- bumping up the routine table index and checking for its overflow. } -{#############################################################################} -PROCEDURE rtplace_id_into_routine_table - (VAR proc_id: alfa; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - VAR i: integer; - BEGIN - IF (last_rt_entry >= max_routines) - THEN BEGIN - writeln; - writeln ('Routine Table overflow, Last id: ',last_entry_point_name); - close (outfile, i); - @hlt - END; - last_rt_entry := last_rt_entry + 1; - WITH routine_table [last_rt_entry] - DO BEGIN parm_list := nil; routine_name := proc_id END - END; - -{#############################################################################} -{--- Find a preexisting occurance of the last routine in the routine table ----- and compare the pair, before deleting the latter one. } -{#############################################################################} -PROCEDURE rtremove_duplicate_routine_entry - (VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - VAR i: integer; - ptr, temp_ptr: t_ptr_to_next_parm; - BEGIN - FOR i := 1 TO (last_rt_entry - 1) - DO IF routine_table [i]. routine_name = - routine_table [last_rt_entry]. routine_name - THEN BEGIN - temp_ptr := routine_table [last_rt_entry]. parm_list; - ptr := routine_table [i]. parm_list; - WHILE (ptr <> nil) AND (temp_ptr <> nil) - DO BEGIN - IF (temp_ptr^. parm_indx_to_type_table <> - ptr^. parm_indx_to_type_table) - OR (temp_ptr^.parm_class <> ptr^.parm_class) - THEN error (127); { illegal parameter substitution } - temp_ptr := temp_ptr^. rest_of_parm_list; - ptr := ptr^.rest_of_parm_list - END; - IF temp_ptr <> ptr - THEN error (126); { # of parms do not agree with prev declaration } - mark (addr (routine_table [last_rt_entry]. parm_list)); - release (routine_table [last_rt_entry]. parm_list); - last_rt_entry := last_rt_entry - 1; - exit { stop comparing } - END - END; - - - - - - - - - - - -{#############################################################################} -{--- Display the current contents of the routine table. } -{#############################################################################} -PROCEDURE rmdump_routine_table - (VAR outfile: text; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); - - VAR i: integer; - ptr: t_ptr_to_next_parm; - BEGIN - writeln (outfile); writeln (outfile, '--- Routine Table Dump --- '); - writeln (outfile, 'name':20, 'parms':10); - FOR i := 1 TO last_rt_entry - DO BEGIN - write (outfile, i:10, routine_table[i]. routine_name:10); - ptr := routine_table [i]. parm_list; - WHILE ptr <> nil - DO BEGIN - CASE ptr^.parm_class OF - var_parm : write (outfile, ' ( var_parm '); - value_parm: write (outfile, ' ( val_parm '); - func_value: write (outfile, ' ( func_val '); - conform_array: write (outfile, ' ( conf_arr '); - proc_func: write (outfile, ' ( procfunc ') - END; - write (outfile, ptr^. parm_indx_to_type_table:5, ' ) '); - ptr := ptr^. rest_of_parm_list - END; - writeln (outfile) - END; - writeln (outfile) - END; - - - - -MODEND. - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/SCANNER.PAS b/software/CPM/CPM21_MTPUG_09/SCANNER.PAS deleted file mode 100644 index 42e845b..0000000 --- a/software/CPM/CPM21_MTPUG_09/SCANNER.PAS +++ /dev/null @@ -1,572 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: SCANNER. File name: SCANNER.PAS. #### -#### Support modules reqd: PASLIB.ERL. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 vers 1.0. File just created. - 12-NOV-81 development of this version complete. - 9-JAN-82 vers 2.0. Minor mods for use with other updated modules. - 1-MAR-82 deveopment of this version complete. - 19-APR-82 Vers 2.2. Add blockread compatibility stuff. -#### #### -##########################################################################} - - - - -{############################################################################ -#### #### -#### S C A N N E R M O D U L E #### -#### #### -#### This is a collection of procedures of the cross-module type checking### -#### program which are involved with the sending back to the parser the #### -#### next token in the source text. There are two entry points: #### -#### GET_NEXT_TOKEN which drives almost everything else within this #### -#### module, and SCAN_INIT which initializes this module's variables. #### -#### NOTE: We do not tokenize every single symbol in the Pascal #### -#### language, but rather only those symbols that make up all constant, #### -#### type, and var declarations, as well as procedure and function #### -#### headings. #### -#### Vers 2 changes: add ',','^','@' to the alphabet, permit '@' to be #### -#### used as either a pointer or an identifier character. Move uppercase#### -#### function to another module. Improved SKIP_COMMENT logic. #### -############################################################################} - -MODULE pascal_type_var_and_routine_header_scanner; - -{$I B:TYPECHK.DEC} - -VAR - infile: EXTERNAL text; - infile1: text; - outfile: EXTERNAL text; - input_line: EXTERNAL string132; - curr_input_line: EXTERNAL string132; - prev_input_line: EXTERNAL string132; - prev1_input_line: EXTERNAL string132; - token: EXTERNAL tokentype; - tokenbuf, ident_buf: EXTERNAL string132; - charbuf: EXTERNAL char; - at_is_alternative_pointer_symbol: EXTERNAL boolean; - symbols_avail_for_external_reference: EXTERNAL boolean; - include_file_level: EXTERNAL byte; - includ_file_name: EXTERNAL string15; - token_table: ARRAY [token_type] OF alfa; - debug: EXTERNAL boolean; - endfile: EXTERNAL boolean; - - - - -EXTERNAL PROCEDURE @hlt; -EXTERNAL FUNCTION uppercase (ch: char): char; -EXTERNAL PROCEDURE init_include_file_buffer; -EXTERNAL FUNCTION maineof: boolean; -EXTERNAL PROCEDURE readln_main_program_text (VAR input_line: string132); -EXTERNAL PROCEDURE readln_include_file_text (VAR input_line: string132); - - - - - - - - - - - - - - - - -{############################################################################ -#### Initialize charbuf and the token table. -############################################################################} -PROCEDURE init_scanner; - BEGIN - charbuf := ' '; - token_table [notoken] := 'NOTOKEN'; - token_table [tokliteral] := 'LITERAL'; - token_table [toklparen] := 'LPAREN'; - token_table [tokrparen] := 'RPAREN'; - token_table [tokcomma] := 'COMMA'; - token_table [tokperiod] := 'PERIOD'; - token_table [tokcolon] := 'COLON'; - token_table [toksemicolon] := 'SCOLON'; - token_table [tokequal] := 'EQUAL'; - token_table [toklbracket] := 'LBRACKET'; - token_table [tokrbracket] := 'RBRACKET'; - token_table [tokdotdot] := 'DOTDOT'; - token_table [tokpointer] := 'UPARROW'; - token_table [tokplus] := 'PLUS'; - token_table [tokminus] := 'MINUS'; - token_table [tokintnum] := 'INTNUM'; - token_table [tokbytenum] := 'BYTENUM'; - token_table [tokrealnum] := 'REALNUM'; - token_table [toklitstring] := 'LITVALUE'; - token_table [tokidentifier]:= 'IDENT'; - token_table [tokbegin] := 'BEGIN'; - token_table [tokend] := 'END'; - token_table [tokconst] := 'CONST'; - token_table [toktype] := 'TYPE'; - token_table [tokvar] := 'VAR'; - token_table [tokproc] := 'PROCEDUR'; - token_table [tokfunc] := 'FUNCTION'; - token_table [tokpacked] := 'PACKED'; - token_table [tokstring] := 'STRING'; - token_table [tokarray] := 'ARRAY'; - token_table [tokof] := 'OF'; - token_table [tokfile] := 'FILE'; - token_table [tokset] := 'SET'; - token_table [tokrecord] := 'RECORD'; - token_table [tokcase] := 'CASE'; - token_table [tokexternal] := 'EXTERNAL'; - token_table [toklabel] := 'LABEL'; - END; - - - - -{$E- ####################################################################### -#### Return the character that would have appeared in charbuf had we called -#### get-next-char instead. Dont disturb contents of charbuf or input-line. -###########################################################################} -FUNCTION lookahead_char: char; - BEGIN - IF length (input_line) = 0 - THEN lookahead_char := ' ' - ELSE lookahead_char := input_line[1] - END; - - - - - - - - -{########################################################################## -#### If input-line string is empty then fill it up by reading the next -#### source line and insert a blank into charbuf. Otherwise, remove the -#### next character from input-line and deposit it into charbuf. -#### If we were already at eof of an include file then start reading from -#### the main text and subtract one from include-file-level to let every- -#### one else know about this change in input files. -##########################################################################} -PROCEDURE get_next_char; - CONST - eoifmsg = 'EOF reached on Include file. '; - BEGIN - IF (length (input_line) = 0) AND NOT endfile - THEN BEGIN - IF include_file_level = 0 - THEN readln_main_program_text (input_line) - ELSE readln_include_file_text (input_line); - IF debug - THEN BEGIN writeln (input_line); writeln (outfile, input_line) END - ELSE BEGIN write ('+'); write (outfile, '+') END; - { update the three line buffer used when printing out errors } - prev1_input_line := prev_input_line; - prev_input_line := curr_input_line; - curr_input_line := input_line - END; - IF length (input_line) = 0 - THEN charbuf := ' ' { return blank as a separator } - ELSE BEGIN - charbuf := input_line[1]; { return character } - delete (input_line,1,1) { easier then maintaining column index } - END; - IF endfile AND (include_file_level > 0) - THEN BEGIN { jump out of include file } - endfile := false; - include_file_level := include_file_level - 1; - writeln; writeln (outfile); - writeln (eoifmsg); writeln (outfile, eoifmsg) - END - END; - - - - - -{########################################################################### -#### return true if char is permissable in type, var, routine declaration. -###########################################################################} -FUNCTION in_alphabet (character: char): boolean; - BEGIN in_alphabet := character IN - ['A'..'Z', 'a'..'z', '0'..'9', ':', ';', '*', '{', '}', '''', '+', - '-', '=', '(', ')', '.', ',', '$', '_', '[', ']', '^', '@', ' '] - END; - -FUNCTION in_alpha (character: char): boolean; - BEGIN in_alpha := character IN ['A'..'Z', 'a'..'z', '_'] END; - -FUNCTION in_numeric (character: char): boolean; - BEGIN in_numeric := character IN ['0'..'9'] END; - -FUNCTION in_hex_numeric (character: char): boolean; - BEGIN in_hex_numeric := character IN ['0'..'9', 'A'..'F', 'a'..'f'] END; - - - - - -{################################################################# -#### Procedures that call this will do so if after they call -#### get-next-char all they find in charbuf is either a blank or -#### is not in the alphabet as we define it for type, var, and -#### routine heading declarations. We correct the state of charbuf by -#### repeatedly calling get-next-char until either a legal nonblank -#### character is found or eof of the main text is found. -##################################################################} -PROCEDURE handle_blank_or_illegal_chars; - BEGIN - WHILE ((NOT in_alphabet(charbuf)) OR (charbuf = ' ')) AND - NOT maineof - DO get_next_char - END; - - - - - - - - -{####################################################################### -#### Check whether or not the sequence of characters is a reserved word. -#######################################################################} -PROCEDURE check_if_reserved_word; - VAR - temp_str: alfa; - i: token_type; - BEGIN - temp_str := tokenbuf; - FOR i := tokbegin TO toklabel - DO IF temp_str = token_table [i] - THEN BEGIN token:= i; exit END - END; - - - - - - - - - -{###################################################################### -#### Assuming that the character in charbuf was determined to be -#### an alpha, scan all following alphanumeric characters. After -#### then checking if the id is a reserved word, leave in charbuf -#### the last alphanumeric character scanned. -######################################################################} -PROCEDURE handle_identifier; - BEGIN - token := tokidentifier; - tokenbuf := ''; - charbuf := uppercase (charbuf); - tokenbuf := concat (tokenbuf, charbuf); - WHILE in_alpha (lookahead_char) OR in_numeric (lookahead_char) - DO BEGIN - REPEAT get_next_char UNTIL (charbuf <> '_'); - charbuf := uppercase (charbuf); - tokenbuf := concat (tokenbuf, charbuf); - END; - check_if_reserved_word - END; - - -{######################################################################## -#### If two periods found in a row (one in charbuf, the other still in -#### input-line, then transfer the second one from input-line to charbuf. -########################################################################} -PROCEDURE handle_dot_dot; - BEGIN - token := tokperiod; - IF lookahead_char = '.' - THEN BEGIN get_next_char; token := tokdotdot END - END; - - - - - - - - - - - - -{######################################################################## -#### Assuming the character in charbuf is a '$', scan the following chars -#### in input-line as hex digits. Stop before reading in a non-hex digit. -#########################################################################} -PROCEDURE handle_hex_num; - BEGIN - token := tokintnum; tokenbuf := charbuf; - WHILE in_hex_numeric (lookahead_char) - DO BEGIN get_next_char; tokenbuf := concat (tokenbuf, charbuf) END; - END; - - - - - - - - - - - - -{######################################################################## -#### Assuming that the character in charbuf is a literal mark, get -#### any other characters on that line into tokenbuf until either a second -#### literal mark or eoln occurs. Stop before loading into charbuf any -#### character that is not a part of the literal string. -########################################################################} -PROCEDURE handle_literal_constant; - CONST lit_mark = ''''; - BEGIN - token := toklitstring; tokenbuf := ''; - WHILE (length (input_line) > 0) AND (lookahead_char <> lit_mark) - DO BEGIN - get_next_char; - tokenbuf := concat (tokenbuf, charbuf) - END; - get_next_char; { put second literal mark into charbuf } - IF (lookahead_char = lit_mark) - THEN BEGIN get_next_char; get_next_char; tokenbuf := charbuf END - END; - - - -{######################################################################### -#### Process a single digit for handle_integer_or_real_number -#########################################################################} - PROCEDURE handle_a_digit (VAR bytenum: integer); - BEGIN - IF bytenum < 256 THEN bytenum := (bytenum * 10) + (ord(charbuf) - 48); - tokenbuf := concat (tokenbuf, charbuf); { next digit } - IF lookahead_char IN ['E','e','.'] - THEN BEGIN { treat number as a real number instead } - IF (lookahead_char = '.') AND (input_line[1] = '.') - THEN exit; { a dotdot is the next token } - byte_num := 256; - token := tokrealnum; - get_next_char; { to get the 'E' or '.' } - tokenbuf := concat (tokenbuf, charbuf); - IF lookahead_char IN ['+','-'] - THEN BEGIN get_next_char; tokenbuf := concat (tokenbuf, charbuf) END - END; - END; - - - -{######################################################################## -#### Assuming that the digit in charbuf is a digit or sign, bring in the -#### following digits into tokenbuf. The encountering of a period or 'e' -#### character will make the number a real one. The encountering of -#### other alpha chars (as might follow a sign) will force the interpreting -#### of an identifier instead. As with the other routines in this module, -#### one must do a get_next_char to get the char following the last digit. -########################################################################} -PROCEDURE handle_integer_or_real_num; - VAR - bytenum: integer; {used to find out if integer can be squeezed into byte} - BEGIN - bytenum := 0; - token := tokintnum; tokenbuf := ''; - handle_a_digit (bytenum); { charbuf should now contain the first digit } - WHILE in_numeric (lookahead_char) - DO BEGIN get_next_char; handle_a_digit (bytenum) END; - IF (bytenum <= 255) AND (bytenum >= 0) - THEN token := tokbytenum; { integer can be crammed into a byte } - END; - - -{########################################################################## -#### Go open the include file specified following the the $I option -#### within the comment last scanned. Bump up include_file_level by one -#### to notify the rest of the program that we are now in an include file. -##########################################################################} -PROCEDURE open_include_file; - CONST - eifmsg = 'Including Text from file: '; - comsg = 'Cannot open Include file: '; - VAR - i: integer; - BEGIN - open (infile1, includ_file_name, i); - writeln; writeln (outfile); - IF i = 255 - THEN BEGIN - writeln (comsg, includ_file_name); - writeln (outfile, comsg, includ_file_name); - close (outfile,i); - @hlt - END - ELSE BEGIN - init_include_file_buffer; - include_file_level := include_file_level + 1; - writeln (eifmsg, includ_file_name); - writeln (outfile, eifmsg, includ_file_name) - END; - includ_file_name := '' - END; - - - - - - - - - - - - - - - -{######################################################################### -#### Pull off characters of the specified include file name and insert -#### into the variable includ_file_name. Leave in charbuf the last letter -#### of the file name obtained. -#########################################################################} -PROCEDURE get_include_file_name; - BEGIN - get_next_char; {get first char following the I letter } - handle_blank_or_illegal_chars; {charbuf now has 1st letter of fname } - includ_file_name := concat (includ_file_name, uppercase (charbuf)); - WHILE NOT (lookahead_char IN [' ','*','}']) - DO BEGIN - get_next_char; - includ_file_name := concat (includ_file_name, uppercase (charbuf)) - END - END; - - - - - - -{############################################################################# -#### Assuming that either a left brace or left paren is in charbuf, keep on -#### scanning until the matching right brace or right paren is in charbuf, -#### then return. If a dollar sign follows the chars that signal the -#### beginning of a comment, then parse the relevant compiler toggles. -#### Permissable ones are Entry-point symbol ($E+/-) and Include-file -#### ($I fname.ext) as documented in the MT MicroSYSTEMS Pascal manual. -#############################################################################} -PROCEDURE handle_comment; - VAR - brace_comment: boolean; - prev_char: char; - BEGIN - brace_comment := charbuf = '{'; - IF (charbuf = '(') - THEN IF (lookahead_char = '*') - THEN get_next_char - ELSE BEGIN token := toklparen; exit END; - token := notoken; - IF lookahead_char = '$' - THEN BEGIN - get_next_char; - CASE uppercase (lookahead_char) OF - 'E': BEGIN get_next_char; - symbols_avail_for_external_reference := lookahead_char <> '-' - END; - 'I': BEGIN get_next_char; get_include_file_name END - END - END; - - { Continue to read characters until the end of the comment is found. } - charbuf := ' '; - REPEAT prev_char := charbuf; get_next_char - UNTIL ((prevchar = '*') AND (charbuf = ')') AND (NOT brace_comment)) - OR ((charbuf = '}') AND brace_comment) - OR maineof - END; - - - - - - - -{$E+ ################################################################## -#### This entry procedure is the driver of all of the other routines in -#### this module. Its function, when called by the parser in the main -#### program are to get the next character in the linebuffer into -#### charbuf, determine the token value, and then perhaps to call another -#### routine to determine if the consecutively following characters in -#### the linebuffer might cause a change in the token value. The repeat -#### loop is intended to handle the occurence of a comment. -######################################################################} -PROCEDURE get_next_token; - BEGIN - IF tokenbuf <>'' THEN ident_buf := tokenbuf; { store id for use in error } - tokenbuf := ''; - REPEAT - IF includ_file_name <> '' THEN open_include_file; - get_next_char; { advance past character from last token } - handle_blank_or_illegal_chars; { skip any separators } - IF in_alpha (charbuf) THEN handle_identifier ELSE - IF in_numeric (charbuf) THEN handle_integer_or_real_num ELSE - CASE charbuf OF - '$': handle_hex_num; - '''': handle_literal_constant; - '(','{': handle_comment; - ')': token := tokrparen; - ',': token := tokcomma; - '.': handle_dot_dot; - ':': token := tokcolon; - ';': token := toksemicolon; - '=': token := tokequal; - '[': token := toklbracket; - ']': token := tokrbracket; - '^': token := tokpointer; - '@': IF at_is_alternative_pointer_symbol - THEN token := tokpointer - ELSE handle_identifier; - '-': token := tokminus; - '+': token := tokplus; - ELSE token := notoken - END - UNTIL (token <> notoken) OR maineof; - IF debug - THEN BEGIN - write (' ':20, ' '); - writeln (token_table [token]:10, ' ':5, tokenbuf:10) - END - END; - - -MODEND. - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/SWEEP.COM b/software/CPM/CPM21_MTPUG_09/SWEEP.COM deleted file mode 100644 index 2b2f80aadcdf482d0542555ce80f4ea95833f1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28288 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 diff --git a/software/CPM/CPM21_MTPUG_09/TYPE1TAB.PAS b/software/CPM/CPM21_MTPUG_09/TYPE1TAB.PAS deleted file mode 100644 index 8ae9faa..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPE1TAB.PAS +++ /dev/null @@ -1,308 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: TYPE_TABLE MODULE OF THE TYPE_CHECKER PROGRAM. #### -#### File name: TYPE1TAB.PAS.(First of 3 files reqd for this module.)#### -#### Support modules reqd: PASLIB.ERL, SCANNER. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 Vers 1.0. File just created. - 12-NOV-81 Development of this version completed. - 9-JAN-82 Vers 2.0. development begins. - 1-MAR-82 Development of this version complete. - 6-MAR-82 Vers 2.1. Add conformant array stuff. - 19-APR-82 Vers 2.2. No changes made. -#### #### -##########################################################################} - - -MODULE TYPE_TABLE_HANDLER; - -{$I B:TYPECHK.DEC } - -VAR - last_tt_entry: integer; { index to last filled entry of type table } - token: EXTERNAL tokentype; - tokenbuf: EXTERNAL string132; - exit_keywords: SET OF token_type; - outfile: EXTERNAL text; - record_parsing_status : t_record_parsing_status; - last_entry_point_name: EXTERNAL string132; - ttentry_types_where_base_types_wont_compare, - rectype_expansion: SET OF tt_types; - debug: EXTERNAL boolean; - -EXTERNAL PROCEDURE get_next_token; -EXTERNAL PROCEDURE error (pascal_error_no: integer); -EXTERNAL PROCEDURE @hlt; -EXTERNAL PROCEDURE cmstore_scalar_type_values (VAR n_of_values: integer; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); -EXTERNAL PROCEDURE cmfinish_parsing_constant_value (VAR actual_value: integer; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); - - - - - - - - - - - - - - - - - - - - - -{#############################################################################} -{--- Initialize all of the variables private to this module } -{#############################################################################} -PROCEDURE tminit_type_table_module - (VAR type_table: ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR i: integer; - BEGIN - FOR i:= 1 TO 9 - DO WITH type_table[i] - DO BEGIN - entry_purpose:= predef_type; - base_type_index := 0; - lower_bound := 0; upper_bound := 0 - END; - WITH type_table[0] DO type_id := '0UNDEFIN'; - WITH type_table[1] - DO BEGIN type_id := 'CHAR'; upper_bound := 255 END; - WITH type_table[2] - DO BEGIN type_id := 'BYTE'; upper_bound := 255 END; - WITH type_table[3] - DO BEGIN type_id := 'INTEGER'; lower_bound := -32768; upper_bound := 32767 - END; - WITH type_table[4] - DO BEGIN type_id := 'BOOLEAN'; upper_bound := 1 END; - WITH type_table[5] - DO BEGIN type_id := 'WORD'; lower_bound := -32768; upper_bound := 32767 - END; - WITH type_table[6] DO type_id := 'REAL'; - WITH type_table[7] - DO BEGIN type_id := 'STRING'; upper_bound := 255 END; - WITH type_table[8] DO type_id := 'TEXT'; - WITH type_table[9] DO type_id := 'FILE'; - - last_tt_entry := 9; - rectype_expansion := - [recfields, recfldnestedrecord, recvariant, recvarvalues]; - ttentry_types_where_base_types_wont_compare := - [array_type, file_type, record_type] - END; - - - - -{#############################################################################} -(*-- Assuming that a Pascal keyword has been read in, we will parse the ----- folllowing Pascal/MT+ BNF productions: ----- ::= | ----- TYPE {; } ; ----- ----- ::= = ----- ::= ----- ::= ----- *) -{#############################################################################} -PROCEDURE tmadd_new_types_to_type_table - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - CONST action = 'Handling Types...'; - BEGIN - writeln; writeln (action); writeln (outfile); writeln (outfile, action); - exit_keywords := [toktype, tokvar, tokproc, tokfunc, tokbegin, tokexternal]; - record_parsing_status.got_rec_type := 0; - WHILE token = toktype - DO BEGIN - get_next_token; { should be type identifier being defined } - REPEAT - last_entry_point_name := tokenbuf; - tm1add_type_identifier_to_type_table (tokenbuf, type_table); - get_next_token; { should be equal_sign } - REPEAT tm0parse_rest_of_type_definition (const_table, type_table) - UNTIL (record_parsing_status.got_rec_type= 0) AND (token= toksemicolon); - get_next_token; { should be type_id or keyword } - UNTIL (token IN exit_keywords) - END - END; - - - - - - - - - - - -{#############################################################################} -{--- Place a type_id into a new slot of the type table. } -{#############################################################################} -PROCEDURE tm1add_type_identifier_to_type_table - (new_id: alfa; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - tminc_last_tt_entry_index (tthibound); - WITH type_table [last_tt_entry] - DO BEGIN - entry_purpose := undef_type; - IF record_parsing_status. got_rec_type = 0 THEN type_id := new_id; - lower_bound := 0; upper_bound := 0; base_type_index := 0 - END; - tmchange_any_refs_to_identical_type_id_with_undef_type (type_table) - END; - - - - - -{#############################################################################} -{--- Bump the index into the type table by 1, and error if overflow } -{#############################################################################} -PROCEDURE tminc_last_tt_entry_index (max_type_elements: natural); - - VAR i: integer; - BEGIN - IF last_tt_entry >= max_type_elements - THEN BEGIN - writeln; - writeln ('Type Table overflow, last id: ', last_entry_point_name); - close (outfile, i); - @hlt - END; - last_tt_entry := last_tt_entry + 1 - END; - - - - - - -{#############################################################################} -(*-- Parse the following Pascal/MT+ BNF productions: ----- ::= | | ----- ::= | ----- PACKED ----- ::= | | ----- | ----- ::= | ----- ::= ----- ::= ----- ::= ----- ::= ----- ::= ----- ::= ----- ::= FILE ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm0parse_rest_of_type_definition - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - get_next_token; { should be some type definition stuff } - IF (token = tokidentifier) AND (tokenbuf = 'ABSOLUTE') - THEN BEGIN { ignore [ ] syntax representing the address } - get_next_token; get_next_token; get_next_token; get_next_token END - ELSE IF token = tokexternal THEN get_next_token; - IF token = tokpacked THEN get_next_token; - { for sure now, we are at the type_id being defined } - tm1init_new_type_table_entry (token, type_table); - CASE token OF - tokset : tm1parse_set (const_table, type_table); - tokfile : tm2parse_tokof_and_beyond (const_table, type_table); - tokstring : tm3parse_string (const_table, type_table); - tokpointer: tm4parse_pointer (type_table); - tokarray : tm5parse_array (const_table, type_table); - tokrecord : tm6parse_record (const_table, type_table); - ELSE tm9finish_parsing_simple_type (const_table, type_table) - END; - IF debug THEN error (0); - tmremove_duplicate_type_declaration (type_table) - END; - -{#############################################################################} -{--- Assuming index has already been bumped and type_identifier entered, ----- initialize some of the other fields for that entry } -{#############################################################################} -PROCEDURE tm1init_new_type_table_entry - (token: tokentype; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - WITH type_table [last_tt_entry] - DO IF record_parsing_status.got_rec_type = 0 - THEN entry_purpose := tok_class (token) - ELSE BEGIN - entry_purpose := tokrec_class (token); - n_of_stacked_fields:= record_parsing_status.last_n_of_stacked_fields; - record_nesting := record_parsing_status.got_rec_type; - local_fieldlist_continues := true; - field_entry_purpose := tok_class (token) - END - END; - - -FUNCTION tokrec_class (token: tokentype): tt_types; - - BEGIN - IF token = tokrecord - THEN tokrec_class := recfldnestedrecord - ELSE tokrec_class := recfields - END; - -FUNCTION tok_class (token: tokentype): tt_types; - - BEGIN - CASE token OF - tokset : tok_class := set_type; - tokfile : tok_class := file_type; - tokstring : tok_class := string_type; - tokpointer : tok_class := ptr_type; - tokarray : tok_class := array_type; - tokrecord : tok_class := record_type; - notoken : tok_class := undef_type; - ELSE tok_class := simple_type - END - END; - -{$I B:TYPE2TAB.PAS } -{$I B:TYPE3TAB.PAS } - -MODEND. - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPE2TAB.PAS b/software/CPM/CPM21_MTPUG_09/TYPE2TAB.PAS deleted file mode 100644 index 1cde815..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPE2TAB.PAS +++ /dev/null @@ -1,418 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: TYPE_TABLE MODULE OF THE TYPE_CHECKER PROGRAM. #### -#### File name: TYPE2TAB.PAS.(2'nd of 3 files reqd for this module.) #### -#### Support modules reqd: PASLIB.ERL, SCANNER. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 Vers 1.0. File just created. - 12-NOV-81 Development of this version completed. - 9-JAN-82 Vers 2.0. development begins. - 1-MAR-82 Development of this version complete. - 6-MAR-82 Vers 2.1. Conformant array stuff added. - 19-APR-82 Vers 2.2. No changes made. -#### #### -##########################################################################} - - -{#############################################################################} -{ Call to this could have been a call to tm2parse_tokof_and_beyond, - except that here we avoid filling another type_table entry } -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ BNF productions: ----- ::= SET OF ----- ::= ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm1parse_set - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - get_next_token; { should be OF token } - get_next_token; { should be lparen, constant, or type_id } - tm9finish_parsing_simple_type (const_table, type_table); - END; - - - -{#############################################################################} -(*-- parse the following Pascal/MT+ BNF production: ----- ::= {OF } ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm2parse_tokof_and_beyond - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR orig_token: token_type; - BEGIN - orig_token:= token; - get_next_token; { should be OF, scolon, END, or rparen tokens } - IF token = tokof - THEN BEGIN - tm1add_type_identifier_to_type_table ('0BASETYP', type_table); - type_table [last_tt_entry - 1]. base_type_index := last_tt_entry; - tm0parse_rest_of_type_definition (const_table, type_table) - END - ELSE IF orig_token = tokfile - THEN tmmake_it_reference_a_simple_type (token, type_table) - END; - - - - - - - - - - - - - - - - - - - - - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ BNF productions: ----- ::= STRING ----- ::= [ ] | ----- ::= | ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm3parse_string - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - get_next_token; { should be lbracket, scolon, END, or rparen tokens } - IF token = toklbracket - THEN BEGIN - get_next_token; { should be constant_id or constant_value } - cmfinish_parsing_constant_value (type_table[last_tt_entry].upper_bound, - const_table); - get_next_token; { should be rbracket } - get_next_token { should be scolon, END, or rparen tokens } - END - ELSE tmmake_it_reference_a_simple_type (tokstring, type_table) - END; - - - - - - - - - - - - - - - - - - - -{#############################################################################} -{---- Make a type entry have as it's base type a simple type, not the following ------ type table entry, so that we may save some type table space.} -{#############################################################################} -PROCEDURE tmmake_it_reference_a_simple_type - ( token: token_type; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - WITH type_table [last_tt_entry] - DO BEGIN - IF (entry_purpose IN rectype_expansion) - THEN field_entry_purpose := simple_type - ELSE entry_purpose := simple_type; - CASE token OF - tokfile: base_type_index := 9; - tokstring: base_type_index := 7 - END - END - END; - - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ BNF production: ----- ::= ^ | ----- @ ----- *) -{#############################################################################} -PROCEDURE tm4parse_pointer - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR base, len: integer; - BEGIN - get_next_token; { should be (possibly undefined) type_id } - IF tm1find_prev_occurance_of_type_id - (tokenbuf, last_tt_entry, base, type_table) - THEN type_table [last_tt_entry]. base_type_index := base - ELSE BEGIN - tm1add_type_identifier_to_type_table (tokenbuf, type_table); - tm1init_new_type_table_entry (notoken, type_table); - type_table [last_tt_entry - 1]. base_type_index := last_tt_entry - END; - get_next_token { should be scolon, END, or rparen tokens } - END; - - - - - - - - - - - - - - - - - - - - - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ BNF productions: ----- ::= ARRAY [ {, } ] ----- ----- ::= ----- ::= ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm5parse_array - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - get_next_token; { should be lbracket } - REPEAT - get_next_token; { should be lparen, constant, or type_id } - tm9finish_parsing_simple_type (const_table, type_table); - { present token should be a comma or rbracket } - IF token = tokcomma - THEN BEGIN - tm1add_type_identifier_to_type_table ('0ARRAY', type_table); - tm1init_new_type_table_entry (tokarray, type_table); - type_table [last_tt_entry - 1]. base_type_index := last_tt_entry - END - UNTIL token = tokrbracket; - tm2parse_tokof_and_beyond (const_table, type_table) - END; - - - - - - - - - - - - - - - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ BNF productions: ----- ::= RECORD END ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm6parse_record - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - IF last_tt_entry < max_type_elements - THEN type_table [last_tt_entry]. base_type_index := last_tt_entry + 1; - WITH record_parsing_status DO got_rec_type := got_rec_type + 1; - tm7parse_fieldlist (const_table, type_table); - { should now be at the END token for this record } - WITH record_parsing_status DO got_rec_type := got_rec_type - 1; - type_table [last_tt_entry]. local_fieldlist_continues := false; - get_next_token { should be scolon, END, or rparen tokens } - END; - -{#############################################################################} -(*-- Assuming that the first symbol has already been scanned, ----- parse the following Pascal/MT+ BNF productions: ----- ::= | ; | ----- ----- ::= {; } ----- ::= {, } : ----- | ----- ::= ----- ::= CASE OF {; } ----- ::= ----- ::= : ( ) | ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm7parse_fieldlist - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN - REPEAT - record_parsing_status.last_n_of_stacked_fields := 0; - get_next_token; { should be identifier, CASE, END, or rparen tokens } - CASE token OF - tokidentifier: - BEGIN - REPEAT - IF token = tokidentifier { as opposed to being tokcomma } - THEN WITH record_parsing_status - DO last_n_of_stacked_fields := last_n_of_stacked_fields + 1; - get_next_token { should be comma or colon tokens } - UNTIL token = tokcolon; - tm1add_type_identifier_to_type_table ('0noname', type_table); - tm0parse_rest_of_type_definition (const_table, type_table) - END; - tokcase: - BEGIN - tm71parse_variant_declaration (type_table); - get_next_token; { should be OF token } - REPEAT - tm72parse_list_of_variant_values (type_table); - REPEAT - get_next_token;{ should be lparen } - tm7recurse_parse_fieldlist (const_table, type_table); - IF token = toksemicolon { instead of tokrparen } - THEN tm72parse_list_of_variant_values (type_table) - UNTIL token = tokrparen; - type_table [last_tt_entry]. local_fieldlist_continues := false; - get_next_token { should be scolon or END token } - UNTIL token = tokend - END; - tokrparen, tokend: - { do no action } - END { case } - UNTIL (token = tokend) OR (token = tokrparen) - END; - - -PROCEDURE tm7recurse_parse_fieldlist - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - BEGIN tm7parse_fieldlist (const_table, type_table) END; - - - -{#############################################################################} -(*-- parse the following Pascal/MT+ BNF productions: ----- ::= ----- ::= : | ----- *) -{#############################################################################} -PROCEDURE tm71parse_variant_declaration - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR base: integer; - BEGIN - get_next_token; { should be identifier (variant_var_id or type_id) } - IF tm1find_prev_occurance_of_type_id - (tokenbuf, last_tt_entry, base, type_table) - THEN record_parsing_status.last_n_of_stacked_fields := 0 - ELSE BEGIN - record_parsing_status.last_n_of_stacked_fields := 1; - get_next_token; { should be colon token } - get_next_token { should be type_id } - END; - tminc_last_tt_entry_index (tthibound); - record_parsing_status.last_base_type_index := base; - WITH type_table [last_tt_entry] - DO BEGIN - entry_purpose := recvariant; - base_type_index := base; - upper_bound := type_table [base]. upper_bound; - lower_bound := type_table [base]. lower_bound; - n_of_stacked_fields := record_parsing_status.last_n_of_stacked_fields; - field_entry_purpose := simpletype; - local_fieldlist_continues := true; - record_nesting := record_parsing_status.got_rec_type - END - END; - - - - - - - - - - -{#############################################################################} -(*-- parse the following Pascal/MT+ BNF productions: ----- ::= {, } ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm72parse_list_of_variant_values - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR n_of_values: integer; - BEGIN - n_of_values := 0; - REPEAT - get_next_token; { should be constant_value } - n_of_values := n_of_values + 1; - get_next_token { should be comma or colon tokens } - UNTIL token = tokcolon; - tminc_last_tt_entry_index (tthibound); - WITH type_table [last_tt_entry] - DO BEGIN - entry_purpose := recvarvalues; - base_type_index := record_parsing_status. last_base_type_index; - upper_bound := n_of_values; - lower_bound := 0; - local_fieldlist_continues := true; - field_entry_purpose := simple_type; - record_nesting := record_parsing_status. got_rec_type; - n_of_stacked_fields := 1 - END - END; - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPE3TAB.PAS b/software/CPM/CPM21_MTPUG_09/TYPE3TAB.PAS deleted file mode 100644 index dd43ad1..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPE3TAB.PAS +++ /dev/null @@ -1,286 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: TYPE_TABLE MODULE OF THE TYPE_CHECKER PROGRAM. #### -#### File name: TYPE3TAB.PAS.(3'rd of 3 files reqd for this module.) #### -#### Support modules reqd: PASLIB.ERL, SCANNER. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 Vers 1.0. File just created. - 12-NOV-81 Development of this version completed. - 9-JAN-82 Vers 2.0. development begins. - 1-MAR-82 Development of this version completed. -#### #### -##########################################################################} - - - - -{#############################################################################} -(*-- Assuming that the first_symbol has already been scanned, ----- parse the following Pascal/MT+ productions: ----- ::= | | ----- ----- ::= ( {, } ) ----- ::= .. ----- ::= ----- ::= ----- *) -{#############################################################################} -PROCEDURE tm9finish_parsing_simple_type - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR base, n_of_values, actual_value: integer; - BEGIN - IF token = toklparen - THEN BEGIN - cmstore_scalar_type_values (n_of_values, const_table); - WITH type_table [last_tt_entry] - DO BEGIN lower_bound := 0; upper_bound := n_of_values - 1 END - END - ELSE IF tm1find_prev_occurance_of_type_id - (tokenbuf, last_tt_entry, base, type_table) - THEN type_table [last_tt_entry]. base_type_index := base - ELSE BEGIN - cmfinish_parsing_constant_value (actual_value, const_table); - type_table [last_tt_entry]. lower_bound := actual_value; - get_next_token; { should be dot_dot token } - get_next_token; { should be constant_value or identifier } - cmfinish_parsing_constant_value (actual_value, const_table); - type_table [last_tt_entry]. upper_bound := actual_value - END; - get_next_token { should be scolon, END, or rparen tokens } - END; { or even rbracket or comma tokens (as with arrays) } - - - - - - - - -{#############################################################################} -{--- Find 2 occurances of the same type declaration, compare the two, and ----- remove the latter one. Error if two dont compare. } -{#############################################################################} -PROCEDURE tmremove_duplicate_type_declaration - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR j, base, len, last_type_dec_index: integer; - rec: t_type_tab_rec; - BEGIN - IF (record_parsing_status. got_rec_type = 0) - AND tm2find_prev_occurance_of_last_type_entry (base, len, type_table) - THEN BEGIN - {compare all related pairs of records for identity } - last_type_dec_index := last_tt_entry - len; - FOR j := 0 TO len - DO BEGIN - rec := type_table [last_type_dec_index + j]; - WITH type_table [base + j] - DO IF (lower_bound <> rec.lower_bound) - OR (upper_bound <> rec.upper_bound) - OR (NOT exception (entry_purpose) AND - (base_type_index <> rec.base_type_index)) - OR (entry_purpose <> rec.entry_purpose) - OR ((entry_purpose IN rectype_expansion) - AND ((n_of_stacked_fields <> rec.n_of_stacked_fields) - OR (NOT exception (field_entry_purpose) AND - (field_entry_purpose <> rec.field_entry_purpose)) - OR(local_fieldlist_continues<>rec.local_fieldlist_continues) - OR (record_nesting <> rec.record_nesting) ) ) - THEN BEGIN - error (101); { type declared differently from first time } - last_tt_entry := last_type_dec_index - 1; - exit - END; - END; { for } - last_tt_entry := last_type_dec_index - 1 - END { if } - END; - - - - - -{#############################################################################} -{--- Resolve previously unresolved type declarations. } -{--- It is assumed that any references to undefined types occur only ----- in the form TYPE ptr_type_name = ^ defined_or_undefined_type } -{#############################################################################} -PROCEDURE tmchange_any_refs_to_identical_type_id_with_undef_type - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR base, len: integer; - BEGIN - WHILE tm2find_prev_occurance_of_last_type_entry (base, len, type_table) - DO IF type_table [base]. entry_purpose = undef_type - THEN BEGIN - type_table [base-1]. base_type_index := last_tt_entry; - WITH type_table [base] DO type_id := concat ('0', type_id) - END - ELSE exit - END; - - - - -{#############################################################################} -{--- Determine the number of entries consumed by the last type declaration, ----- as well as the index to the last previous occurance of the same type ----- identifier. } -{#############################################################################} -FUNCTION tm2find_prev_occurance_of_last_type_entry - (VAR ret_index: integer; - VAR entries_consumed: integer; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec): - boolean; - - VAR last_type_dec_index: integer; - BEGIN - last_type_dec_index := last_tt_entry; - WHILE (type_table [last_type_dec_index]. entry_purpose IN rectype_expansion) - OR (type_table [last_type_dec_index]. type_id [1] = '0') - DO last_type_dec_index := last_type_dec_index - 1; - entries_consumed := last_tt_entry - last_type_dec_index; - tm2find_prev_occurance_of_last_type_entry := - tm1find_prev_occurance_of_type_id (type_table[last_type_dec_index].type_id, - (last_type_dec_index - 1), ret_index, type_table) - END; -{#############################################################################} -{--- Looking back from last_index, return the index where the last declar- ----- ation of the specified type identifier may be found. } -{#############################################################################} -FUNCTION tm1find_prev_occurance_of_type_id - (VAR name_string: string132; - last_index: integer; - VAR ret_index: integer; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec): - boolean; - - VAR i: integer; - name_to_find: alfa; - BEGIN - ret_index := 0; - name_to_find := name_string; { reduce length to alfalen characters } - tm1find_prev_occurance_of_type_id := false; - FOR i :=last_index DOWNTO 1 - DO IF (NOT (type_table [i]. entry_purpose IN rectype_expansion)) - AND (type_table [i]. type_id = name_to_find) - THEN BEGIN - tm1find_prev_occurance_of_type_id := true; - ret_index := i; exit - END - END; - - - - - -{#############################################################################} -{--- Return true if we dont want to compare the base type entry field } -{#############################################################################} -FUNCTION exception (entry_purpose: tt_types): boolean; - - BEGIN - exception := entry_purpose IN ttentry_types_where_base_types_wont_compare - END; - - - - - - -{#############################################################################} -{--- Display the current contents of the type table } -{#############################################################################} -PROCEDURE tmdump_type_table - (VAR outfile: text; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); - - VAR i: integer; - BEGIN - writeln (outfile); writeln (outfile, '--- TYPE TABLE DUMP --- '); - write (outfile, ' rec# #fld nest recpurpose cont lbound ubound '); - writeln (outfile, 'mainpurpose base'); - FOR i := 0 TO last_tt_entry - DO WITH type_table [i] - DO BEGIN - write (outfile, i:10); - IF NOT (entry_purpose IN rectype_expansion) - THEN write (outfile, type_id: 20, ' ':8) - ELSE BEGIN - write (outfile, n_of_stacked_fields:5, record_nesting:5); - write_tt_type_value (outfile, field_entry_purpose); - write (outfile, local_fieldlist_continues:5) - END; - write (outfile, lower_bound:7, upper_bound:7); - write_tt_type_value (outfile, entry_purpose); - writeln (outfile, base_type_index:5) - END; - writeln (outfile) - END; - - - - - - - - - - - - - - - -{#############################################################################} -{#############################################################################} -PROCEDURE write_tt_type_value (VAR outfile: text; tt_type_value: tt_types); - - BEGIN - CASE tt_type_value OF - undef_type : write (outfile, ' undef_type '); - predef_type : write (outfile, ' predef_type '); - simple_type : write (outfile, ' simple_type '); - ptr_type : write (outfile, ' ptr_type '); - string_type : write (outfile, ' string_type '); - array_type : write (outfile, ' array_type '); - file_type : write (outfile, ' file_type '); - set_type : write (outfile, ' set_type '); - record_type : write (outfile, ' record_type '); - recfields : write (outfile, ' recfields '); - recfldnestedrecord: write (outfile, ' recfldnested '); - recvariant : write (outfile, ' recvariant '); - recvarvalues : write (outfile, ' recvarvalues ') - END - END; - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPECHK.BLD b/software/CPM/CPM21_MTPUG_09/TYPECHK.BLD deleted file mode 100644 index 8a703b2..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPECHK.BLD +++ /dev/null @@ -1,11 +0,0 @@ -typelib.erl -b:consttab.erl -b:type1tab.erl -b:vartab.erl -b:routtab.erl -b:scanner.erl -b:inputstd.erl -b:inputfas.erl -b:markrel.erl -b:blockr.erl - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPECHK.CMD b/software/CPM/CPM21_MTPUG_09/TYPECHK.CMD deleted file mode 100644 index c2927f0..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPECHK.CMD +++ /dev/null @@ -1,2 +0,0 @@ -b:typechk,b:consttab,b:type1tab,b:vartab,b:routtab,b:scanner,b:inputstd, -b:markrel,paslib/s/d:8000 \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPECHK.COM b/software/CPM/CPM21_MTPUG_09/TYPECHK.COM deleted file mode 100644 index 3a9e7833cb3952b49c110511be38cd7e0295e355..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31744 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 diff --git a/software/CPM/CPM21_MTPUG_09/TYPECHK.DEC b/software/CPM/CPM21_MTPUG_09/TYPECHK.DEC deleted file mode 100644 index cb4d27c..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPECHK.DEC +++ /dev/null @@ -1,114 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: INCLUDE FILE for TYPECHK and SCANNER modules. #### -#### File name: TYPECHK.DEC. (109 LINES LONG) #### -#### Support modules reqd: #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 vers 1.0. File just created. - 12-NOV-81 Development of this version is completed. - 9-JAN-82 vers 2.0. development begun. - 1-MAR-82 Development of this version complete. - 6_MAR-82 Vers 2.1. Conformant array stuff added. - 19-APR-82 Vers 2.2. Blockread parameters added. -#### #### -##########################################################################} - - -CONST - header1 = ' Pascal/MT+5.2 Cross Module Type Checking Program. Vers 2.1.'; - header2 = ' Copyright (c) 1982 by Haldo Products, Inc. All rights reserved.'; - datastart = $8000; { Where I tell linker to start the data area} - dataextent = $3225; { data size assuming standard input } -(*dataextent = $4000; { data size assuming fast input } *) - max_constants = 250; { max size of constant table } - max_type_elements = 200; { max size of type table } - max_var_elements = 100; { max size of variable table } - max_routines = 200; { max size of routine table } - alfalen = 8; { max length of any identifier } - output_file = 'OUTPUT.PRN'; { where all scanned text and errors are put } - cpmlinesz = 127; { max chars permitted on cpm command line } - maxlinelength = 132; { max permitted length of Pascal source line} - blkiosize = 2048; { size of io buffer used when blockreading } - cr = $0D; { ascii carriage return code } - lf = $0A; { ascii line feed code } - eofmark = $1A; { char used as eofmark on CPM textfiles } - -TYPE - natural = 0..maxint; { for use with conformant arrays } - alfa = STRING [alfalen]; { identifiers, keywords, etc buffer } - string132 = STRING [maxlinelength]; { input line buffer } - string15 = STRING [15]; { hold file name } - p_array_of_char = PACKED ARRAY [1..blkiosize] OF char; {hold blockread text} - - token_type = { the recognized tokens } - (notoken, tokliteral, toklparen, tokrparen, tokcomma, - tokperiod, tokcolon, toksemicolon, tokequal, toklbracket, - tokrbracket, tokdotdot, tokpointer, tokminus, tokplus, - tokintnum, tokbytenum, tokrealnum, toklitstring, tokidentifier, - tokbegin, tokend, tokconst, toktype, tokvar, - tokproc, tokfunc, tokpacked, tokstring, tokarray, - tokof, tokfile, tokset, tokrecord, tokcase, - tokexternal, toklabel ); - - tt_types = { the types assignable to an entry in the type table } - (undef_type, predef_type, simple_type, ptr_type, string_type, - array_type, file_type, set_type, record_type, recfields, - recfldnestedrecord, recvariant, recvarvalues); - - t_parm_class = { the attributes of a parameter in the routine table } - (var_parm, value_parm, func_value, conform_array, procfunc); - - t_const_tab_rec = RECORD { A record of the constant table } - const_id: alfa; - actual_value: integer - END; - - t_type_tab_rec = RECORD { A record of the type table } - lower_bound, - upper_bound: integer; - base_type_index: natural; - CASE entry_purpose: tt_types OF - undef_type, predef_type, simple_type, ptr_type, string_type, - array_type, file_type, set_type, record_type: - (type_id : alfa); - recfields, recfldnestedrecord, recvariant, recvarvalues: - (n_of_stacked_fields, - record_nesting: byte; - field_entry_purpose: tt_types; - local_fieldlist_continues: boolean) - END; - - t_var_tab_rec = RECORD { A record of the variable table } - var_id: alfa; - var_ptr_to_type_table: natural - END; - - t_ptr_to_next_parm = ^t_parm; - - t_parm = RECORD { one parameter's info linked to the routine table } - parm_class: t_parm_class; - parm_indx_to_type_table: natural; - rest_of_parm_list: t_ptr_to_next_parm - END; - - t_rout_tab_rec = RECORD { A record of the routine table } - routine_name: alfa; - parm_list: t_ptr_to_next_parm - END; - - t_record_parsing_status = RECORD {Contains some important type_parsing info} - got_rec_type: byte; - last_n_of_stacked_fields: byte; - last_base_type_index: natural - END; - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPECHK.PAS b/software/CPM/CPM21_MTPUG_09/TYPECHK.PAS deleted file mode 100644 index 5e4fd96..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPECHK.PAS +++ /dev/null @@ -1,462 +0,0 @@ -{########################################################################## -#### #### -#### Full program name: MULTI_MODULE_PARAMETER_AND_VAR_TYPE_CHECKER. #### -#### File name: TYPECHK.PAS. #### -#### Support modules reqd: PASLIB.ERL, SCANNER. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 6-NOV-81 Vers 1.0. File just created. - 12-NOV-81 Development of this version completed. - 9-JAN-82 Vers 2.0. development begins. - 1-MAR-82 Development of this version completed. - 6-MAR-82 Vers 2.1. Conformant array stuff added. - 19-APR-82 Vers 2.2. Add blockread compatibility stuff. -#### #### -##########################################################################} - - -{####################################################################### -#### #### -#### C R O S S M O D U L E T Y P E C H E C K E R #### -#### #### -#### This program, along with the scanner module located in the #### -#### 'scanner.pas' file, scans a series of Pascal/MT source files #### -#### to make sure that the routines defined in one module and #### -#### referenced from within separate modules have the same number #### -#### of parameters and that the types of the corresponding parms #### -#### match. A listing of all errors is output to a diskfile named #### -#### 'output.prn'. The list of file names to scan is expected to #### -#### be in the file whose name is specified in the command line. #### -#### To use, #### -#### 1) Compile the modules using MTPLUS to remove all errors that #### -#### can be trapped by that program. This program will bomb if #### -#### syntactic errors normally trapped by MTPLUS exist in the #### -#### files being scanned. #### -#### 2) Edit the file 'FILES.CMD' to enter the names of the files #### -#### to be scanned by this program, one file per line, with a #### -#### carriage return after even the last file name. #### -#### Sample 'files.cmd' contents: '' means carriage return #### -#### ; typechk 1.0 source files. #### -#### ; (This is a CPM-type comment) #### -#### ; There are 3 switches permitted: $D, $Pd and $@ #### -#### b:mprog.pas $D $PB #### -#### b:mymodule.pas $D #### -#### 3) Run the program TYEPECHK FILES.CMD #### -#### The program expects the list of file name file to be specified#### -#### on the command line. #### -#######################################################################} - - - - - - - - - - - - - - -PROGRAM mult_module_type_checker; - -{$I B:TYPECHK.DEC} - -VAR - memory: ABSOLUTE [$0000] ARRAY [0..0] OF byte; - sysmem: EXTERNAL integer; - - infile: text; { infile is pascal source file with no errors after } - outfile: text; { file where listing of errors is sent } - filenamefile: text; { file containing list of files to be scanned } - - input_line: string132; { holds line currently being scanned } - curr_input_line: string132; { hold lines of input for printing upon error } - prev_input_line: string132; - prev1_input_line: string132; - token: tokentype; { hold last token scanned } - tokenbuf,ident_buf: string132; { hold last identifier/number/string scanned } - charbuf: char; { hold last character scanned } - - debug: boolean; { determines if tables are dumped often or not } - file_entered: boolean; { has same effect as eof(filenamefile)} - symbols_avail_for_external_reference: boolean; {false if $E-, else true } - at_is_alternative_pointer_symbol: boolean;{true if $@ switch seen else false} - last_entry_point_name: string132; { store last $E+ symbol scanned } - include_file_level: byte; { 0 if in main file, 1 if in include file } - includ_file_name: string15; { holds name of the source file being included } - i: integer; { no special purpose } - fname: string132; { name of the file currently being compiled } - cpmcmdbuf: ABSOLUTE [$80] PACKED ARRAY [0..cpmlinesz] OF char; - cpmstr: STRING [cpmlinesz]; - list_of_files: string15; - - const_table: ARRAY [1..max_constants] OF t_const_tab_rec; - type_table : ARRAY [0..max_type_elements] OF t_type_tab_rec; - var_table : ARRAY [1..max_var_elements] OF t_var_tab_rec; - routine_table: ARRAY [1..max_routines] OF t_rout_tab_rec; - -EXTERNAL PROCEDURE @hlt; { Stop program execution } -EXTERNAL FUNCTION @bdos (func: integer; parm: word): integer; -EXTERNAL PROCEDURE get_next_token; -EXTERNAL PROCEDURE init_scan; -EXTERNAL PROCEDURE mark ({VAR} p: integer); -EXTERNAL PROCEDURE release (p: integer); -EXTERNAL PROCEDURE cminit_constant_table_module - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); -EXTERNAL PROCEDURE tminit_type_table_module - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); -EXTERNAL PROCEDURE vminit_var_table_module; -EXTERNAL PROCEDURE rminit_routine_table_module; -EXTERNAL PROCEDURE cmadd_new_constants_to_const_table - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); -EXTERNAL PROCEDURE tmadd_new_types_to_type_table - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); -EXTERNAL PROCEDURE vmadd_new_vars_to_var_table - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR var_table : ARRAY [vtlobound..vthibound: natural] OF t_var_tab_rec); -EXTERNAL PROCEDURE rmadd_new_routines_to_routine_table - (VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); -EXTERNAL PROCEDURE cmdump_constant_table - (VAR outfile: text; - VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec); -EXTERNAL PROCEDURE tmdump_type_table - (VAR outfile: text; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); -EXTERNAL PROCEDURE vmdump_variable_table - (VAR outfile: text; - VAR var_table : ARRAY [vtlobound..vthibound: natural] OF t_var_tab_rec); -EXTERNAL PROCEDURE rmdump_routine_table - (VAR outfile: text; - VAR routine_table: ARRAY [rtlobound..rthibound: natural] OF t_rout_tab_rec); -EXTERNAL PROCEDURE init_main_file_buffer; - - - - - - - - - - - - - -{########################################################################## -#### Print out an error message. -##########################################################################} -PROCEDURE error (pascal_error_no: integer); - - CONST - bar = '-------------------------------------------------------'; - fmsg = 'File being Scanned: '; - epmsg = 'Entry Point is: '; - ltsmsg = 'Last Identifier Scanned: '; - errmsg = 'Error # '; - VAR ch: char; - BEGIN - writeln; writeln(outfile); - IF pascal_error_no > 0 - THEN BEGIN - writeln (bar); writeln (outfile, bar); - writeln (prev1_input_line);writeln (outfile,' ':10, prev1_input_line); - writeln (prev_input_line); writeln (outfile, ' ':10, prev_input_line); - writeln (curr_input_line); writeln (outfile, ' ':10, curr_input_line); - writeln (bar); writeln (outfile, bar); - writeln (fmsg, fname); writeln (outfile, fmsg, fname); - writeln (epmsg, last_entry_point_name); - writeln (outfile, epmsg, last_entry_point_name); - writeln (ltsmsg, ident_buf); writeln (outfile, ltsmsg, ident_buf); - writeln (errmsg, pascal_error_no); - writeln (outfile, errmsg, pascal_error_no); - writeln ('Hit any key to continue...'); - WHILE @bdos (11,wrd(-1)) <> 0 DO read (ch); { remove queued up chars } - read (ch) { wait so that the user can recognize the error occurance } - END; - IF NOT debug - THEN ch := 'Y' - ELSE BEGIN write ('???? Want Tables (Y/N)? '); read (ch); writeln END; - IF uppercase (ch) = 'Y' - THEN BEGIN - cmdump_constant_table (output, const_table); - cmdump_constant_table (outfile, const_table); - tmdump_type_table (output, type_table); - tmdump_type_table (outfile, type_table); - vmdump_variable_table (output, var_table); - vmdump_variable_table (outfile, var_table); - rmdump_routine_table (output, routine_table); - rmdump_routine_table (outfile, routine_table); - END - END; - - - - - - - - - - - - - - - - - - - - -{###################################################################### -#### Repeatedly try to open files (containing pascal source) whose names -#### were specified in filenamefiles until a file is successfully opened -#### for parsing. File_entered is set false if eof is met here. -#### Limitations: Each filename must start on the first column of -#### a separate line. Comments must also start on the first column of -#### a new line, and must begin with a ':' or ';' character. -#### MTPLUS compiler-like switches $Pd and $@ are now also supported. -#### The P switch puts the output file onto the specified device, and -#### the default is not to have an output file listing. The @ switch, -#### if present, permits use of the '@' character instead of the '^' -#### character. The default is that '@' is an identifier character. -#### An enabled @ switch will be disabled when the end of the specified -#### module is reached. -######################################################################} -PROCEDURE obtain_and_open_an_input_file; - - CONST - openerrmsg = '*** Unable to Open Input file: '; - openmsg = 'Processing file: '; - VAR - openerrnum: integer; - openok : boolean; - BEGIN - close (infile, openerrnum); - REPEAT - debug := false; {by default, switch $D is off} - at_is_alternative_pointer_symbol := false; {by default, switch $@ is off} - openok := NOT eof (filenamefile); - IF openok - THEN BEGIN - REPEAT readln (filenamefile, fname) - UNTIL ((fname[1] <> ':') AND (fname[1] <> ';')) OR eof (filenamefile); - { permit comments the way CP/M permits them in ".SUB" files. } - writeln; writeln (outfile); - handle_directive_switches (fname); - open (infile, fname, openerrnum); openok := openerrnum <> 255; - IF NOT openok - THEN BEGIN - writeln (openerrmsg, fname); writeln (outfile, openerrmsg, fname) - END - ELSE BEGIN - init_main_file_buffer; - writeln (openmsg, fname); writeln (outfile, openmsg, fname) - END - END - UNTIL openok OR eof (filenamefile); - symbols_avail_for_external_reference := true; {by default, toggle is $E+} - file_entered := openok - END; - - - - - - - - - - - - - - - - -{########################################################################### -#### Handle compiler directive switches. -#### Only $Pd and $@ switches presently implemented, -#### The acceptable format is -#### filename.pas $PB $@ $D -###########################################################################} -PROCEDURE handle_directive_switches (VAR fname: string132); - - VAR position: byte; - FUNCTION switch_char_posn (VAR fname: string132): byte; - VAR n: integer; - BEGIN - n := pos ('$', fname); - IF n = 0 THEN n := pos ('#', fname); - switch_char_posn := n - END; - BEGIN - FOR position := 1 TO length (fname) - DO fname [position] := uppercase (fname [position]); - WHILE fname[1] = ' ' DO delete (fname, 1, 1); - { search for multiple '$' switches, and act on them } - position := switch_char_posn (fname); - WHILE position > 0 - DO BEGIN - fname [position] := '&'; - CASE fname [position + 1] OF - 'P': open_output_file (fname [position + 2]); - '@': at_is_alternative_pointer_symbol := true; - 'D': debug := true - END; - position := switch_char_posn (fname) - END; - { remove the switch settings from the file name } - position := pos (' ', fname); - IF position > 0 THEN fname := copy (fname, 1, position-1) - END; - - - - - - - - -{########################################################################### -#### Open the file output.prn, where the listing is sent to. -###########################################################################} -PROCEDURE open_output_file (drive_spec: char); - - VAR - s: STRING [15]; - i: integer; - BEGIN - close (outfile, i); - IF drive_spec = 'P' - THEN s := 'LST:'; - assign (outfile, s); - rewrite (outfile); - writeln (outfile); writeln (outfile, header1); - writeln (outfile, header2); writeln (outfile); - END; - - - - - -{######################################################################## -#### read a file name from the command_line buffer, and return in outstr. -########################################################################} -PROCEDURE getname (VAR outstr: string15); - - BEGIN - outstr := ''; - { strip off the leading blanks } - WHILE (length (cpmstr) > 0) AND (cpmstr [1] = ' ') - DO delete (cpmstr, 1, 1); - { obtain the file name characters } - WHILE (length (cpmstr) > 0) AND (cpmstr [1] <> ' ') - DO BEGIN outstr := concat (outstr, cpmstr[1]); delete (cpmstr, 1, 1) END - END; - - - - - - - - -{#################################################################### -#### Initialize everything other than the four identifier tables. -####################################################################} -PROCEDURE initialize; - - VAR i: integer; - BEGIN - { copy command tail to a private pascal string } - move ({from} cpmcmdbuf, {to} cpmstr, cpmlinesz + 1 {bytes}); - getname (list_of_files); - writeln; writeln (header1); writeln (header2); writeln; - open (filenamefile, list_of_files, i); - IF i = 255 - THEN BEGIN - writeln ('Failure to Open Input file: ',list_of_files, - ' containing the list of file names. '); - @hlt { halt program execution } - END; - file_entered := false; - include_file_level := 0; { by default, not in include file } - includ_file_name := ''; - input_line := ''; charbuf := ' '; - last_entry_point_name := ''; - token := notoken; - END; - - - - -{################################################################## -#### Convert a lower case alpha char to an upper case one. -##################################################################} -FUNCTION uppercase (charbuf: char): char; - - BEGIN - IF (charbuf >= 'a') AND (charbuf <= 'z') - THEN charbuf := chr (charbuf & $DF); - uppercase := charbuf - END; - - - - - -{################################################################### -#### The main program.... -###################################################################} - -BEGIN -fillchar (memory [datastart], dataextent, chr (0)); {zero out the data area} -{ We had to use the linker's "/D" option and also do local file I/O } -initialize; -init_scan; -cminit_constant_table_module (const_table); -tminit_type_table_module (type_table); -vminit_var_table_module; -rminit_routine_table_module; -obtain_and_open_an_input_file; -WHILE file_entered -DO BEGIN - cmadd_new_constants_to_const_table (const_table); { add constants } - tmadd_new_types_to_type_table (const_table, type_table); { add types } - vmadd_new_vars_to_var_table (const_table, type_table, var_table);{ " vars } - rmadd_new_routines_to_routine_table (type_table, routine_table); - { check routine parms } - tokenbuf := 'Normal EOF Reached on Source file. '; - writeln; writeln (outfile); writeln (tokenbuf); writeln (outfile,tokenbuf); - error (0); { get a dump of the tables at this point } - obtain_and_open_an_input_file - END; -tokenbuf := 'End of Normal Program Execution. '; -writeln; writeln (outfile); -writeln (tokenbuf); writeln (outfile, tokenbuf); -close (outfile, i); -IF i = 255 -THEN writeln ('Unable to Close file: ', output_file) -ELSE writeln ('Examine file: ',output_file) -END. - - - - - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/TYPECHK.SUB b/software/CPM/CPM21_MTPUG_09/TYPECHK.SUB deleted file mode 100644 index bfbe6d9..0000000 --- a/software/CPM/CPM21_MTPUG_09/TYPECHK.SUB +++ /dev/null @@ -1,14 +0,0 @@ -mtplus b:typechk -mtplus b:consttab -mtplus b:type1tab #tb -mtplus b:vartab -mtplus b:routtab -mtplus b:scanner -mtplus b:inputstd -mtplus b:inputfas -mtplus b:markrel -mtplus b:blockr -libmt b:typechk -l b:typechk,typelib/s,mylib/s,paslib/s/d:8500 -era typelib.erl - \ No newline at end of file diff --git a/software/CPM/CPM21_MTPUG_09/VARTAB.PAS b/software/CPM/CPM21_MTPUG_09/VARTAB.PAS deleted file mode 100644 index ef687ca..0000000 --- a/software/CPM/CPM21_MTPUG_09/VARTAB.PAS +++ /dev/null @@ -1,198 +0,0 @@ -{########################################################################## -#### #### -#### Full module name: VARIABLE_TABLE_MODULE_FOR_TYPE_CHECKER_PROGRAM.#### -#### File name: VARTAB.PAS. #### -#### Support modules reqd: TYPETAB.PAS, PASLIB.ERL. #### -#### Run time environment: . #### -#### Compile time environment: MT MicroSYSTEMS Pascal/MT+v5.25. #### -#### Link time environment: MT MicroSYSTEMS Linkmt v5.1. #### -#### Copyright (C) 1982 by Haldo Products, Inc. All rights reserved. #### -#### 56 Camille Ln, E. Patchogue, NY 11772 #### -#### Programmer: Lawrence Adkins. #### -#### Module Development/Maintenance History: #### - 1-MAR-82 Vers 2.0. File just created, and completed. - 6-MAR-82 Vers 2.1. Conformant array stuff added. - 19-APR-82 Vers 2.2. No changes made. -#### #### -##########################################################################} - - - - - -MODULE VARIABLE_TABLE_HANDLER; - -{$I B:TYPECHK.DEC } { list of all our type declarations } - -VAR - last_vt_entry: integer; { last filled element of var table } - token: EXTERNAL tokentype; - tokenbuf: EXTERNAL string132; - exit_keywords: EXTERNAL SET OF tokentype; - last_entry_point_name: EXTERNAL string132; - outfile: EXTERNAL text; - record_parsing_status: EXTERNAL t_record_parsing_status; - last_tt_entry: EXTERNAL integer; - symbols_avail_for_external_reference: EXTERNAL boolean; - debug: EXTERNAL boolean; - -EXTERNAL PROCEDURE get_next_token; -EXTERNAL PROCEDURE error (pascal_error_no: integer); -EXTERNAL PROCEDURE @hlt; -EXTERNAL PROCEDURE tm1add_type_identifier_to_type_table - ( new_id: alfa; - VAR type_table: ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); -EXTERNAL PROCEDURE tm0parse_rest_of_type_definition - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec); -EXTERNAL FUNCTION tm1find_prev_occurance_of_type_id - (VAR type_id: string132; - last_index: integer; - VAR ret_index: integer; - VAR type_table: ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec): - boolean; - - -{#############################################################################} -{--- Initialize the variables in this module } -{#############################################################################} -PROCEDURE vminit_var_table_module; - - BEGIN - last_vt_entry := 0 - END; - - - -{#############################################################################} -(*-- Then we will parse the following Pascal/MT+ BNF productions: ----- ::= | ----- VAR {; } ; ----- ::= {, } : ----- ----- ::= EXTERNAL | ABSOLUTE [ ] | ----- ::= ----- *) -{#############################################################################} -PROCEDURE vmadd_new_vars_to_var_table - (VAR const_table: ARRAY [ctlobound..cthibound: natural] OF t_const_tab_rec; - VAR type_table : ARRAY [ttlobound..tthibound: natural] OF t_type_tab_rec; - VAR var_table : ARRAY [vtlobound..vthibound: natural] OF t_var_tab_rec); - - CONST action = 'Handling Variables...'; - VAR type_id: alfa; - b: boolean; - i, j, typ_index, first_var_index: integer; - BEGIN - writeln; writeln (action); writeln (outfile); writeln (outfile, action); - exit_keywords := - [tokvar, tokproc, tokfunc, tokbegin, tokexternal]; - record_parsing_status.got_rec_type := 0; - - WHILE token = tokvar - DO BEGIN - get_next_token; { should be var identifier } - REPEAT - type_id := concat ('9', tokenbuf); - tm1add_type_identifier_to_type_table (type_id, type_table); - first_var_index := last_vt_entry + 1; - REPEAT { for the list of vars being declared of the same type } - last_entry_point_name := tokenbuf; - vmplace_var_id_into_var_table (var_table); - get_next_token; { should be tokcolon } - IF token = tokcomma THEN get_next_token { should be var_id } - UNTIL token = tokcolon; - - REPEAT - { let that routine strip off the } - tm0parse_rest_of_type_definition (const_table, type_table) - UNTIL (record_parsing_status.got_rec_type= 0) AND (token= toksemicolon); - - b := tm1find_prev_occurance_of_type_id - (type_id, last_tt_entry, i, type_table); - WITH type_table [i] - DO IF entry_purpose = simple_type - THEN BEGIN - typ_index := base_type_index; last_tt_entry := last_tt_entry - 1 - END - ELSE typ_index := i; - FOR j := first_var_index TO last_vt_entry - DO var_table [j]. var_ptr_to_type_table := typ_index; - IF NOT symbols_avail_for_external_reference - THEN BEGIN last_tt_entry := i-1; last_vt_entry := first_var_index-1 END - ELSE vmremove_duplicate_var_entry (var_table); - IF debug THEN error (0); - get_next_token; { should be var_id or exit keyword } - UNTIL (token IN exit_keywords); - END - END; - - - - -{#############################################################################} -{---- Check for identical identifier earlier in the table, if match, ------ compare entries, and erase latter entry. } -{#############################################################################} -PROCEDURE vmremove_duplicate_var_entry - (VAR var_table : ARRAY [vtlobound..vthibound: natural] OF t_var_tab_rec); - - VAR i: integer; - BEGIN - FOR i := 1 TO (last_vt_entry - 1) - DO WITH var_table [i] - DO IF var_id = var_table [last_vt_entry]. var_id - THEN BEGIN - IF var_ptr_to_type_table <> - var_table [last_vt_entry].var_ptr_to_type_table - THEN error (101); { id declared elsewhere with different value } - last_vt_entry := last_vt_entry - 1; - exit - END - END; - - -{#############################################################################} -{--- Bump the index into the variable table by one. Error if overflow. ----- Then insert the variable identifier presently in tokenbuf. } -{#############################################################################} -PROCEDURE vmplace_var_id_into_var_table - (VAR var_table : ARRAY [vtlobound..vthibound: natural] OF t_var_tab_rec); - - VAR i: integer; - BEGIN - IF last_vt_entry >= vthibound - THEN BEGIN - writeln; - writeln ('Variable table overflow. Last id: ', last_entry_point_name); - close (outfile, i); - @hlt - END; - last_vt_entry := last_vt_entry + 1; - var_table [last_vt_entry]. var_id := tokenbuf - END; - - - -{#############################################################################} -{--- Display the current contents of the variable table } -{#############################################################################} -PROCEDURE vmdump_variable_table - (VAR outfile: text; - VAR var_table : ARRAY [vtlobound..vthibound: natural] OF t_var_tab_rec); - - VAR i: integer; - BEGIN - writeln (outfile); writeln (outfile, '--- Variable Table Dump --- '); - writeln (outfile, 'name':30, 'type index':15); - FOR i := 1 TO last_vt_entry - DO WITH var_table[i] - DO writeln (outfile, i:10, var_id:20, var_ptr_to_type_table:15); - writeln (outfile) - END; - - - -MODEND. - - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/-MTPUG.010 b/software/CPM/CPM22_MTPUG_10/-MTPUG.010 deleted file mode 100644 index e69de29..0000000 diff --git a/software/CPM/CPM22_MTPUG_10/-MTPUG.DOC b/software/CPM/CPM22_MTPUG_10/-MTPUG.DOC deleted file mode 100644 index 81d3405..0000000 --- a/software/CPM/CPM22_MTPUG_10/-MTPUG.DOC +++ /dev/null @@ -1,53 +0,0 @@ -*** MTPUG.010 July 11, 1983 *** - -FFT.DOC - - The Pascal programs PASFFT1.SRC thru PASFFT4.SRC use several -different techniques to calculate the Fast Fourier Transform. The -programs have been tested with and without the AMD 9511. The times -and the advantages of each are described. Written by J.A. Koehler, -2 Sullivan St., Saskatoon, SK, S7H-3G8. - -FFTKF.DOC -FFTKF.PAS -FFTLIB.PAS - - This is an implementation of the radix-2, fast Fourier Transform -algorithm with decimation in time (Cooley-Tukey method). There are -many methods of computing discrete Fourier transforms in order -(N log N) floating point operations. FFTKF.PAS represents an efficient -, but relative straight forward approach well suited to micro- -processors. Written by Kurt Fickie, 144 So. Catalina, CA 91106 - -FACT2K.DOC -FACT2K.PAS - - This program will analize experimental data from a 2**k factorial -design. As an example, you could determine the effects and inter- -actions of multiple variables such as temperature, pressure, flow -etc. in a study of conversion yield of a catalytic reaction. -Written by Kurt Fickie, 144 So. Catalina, CA 91106 - -LAB.PAS - - A program for computer control of laboratory equipment using -A/D and D/A interface boards. See article in Newsletter #9. -Written by Kurt Fickie, 144 So. Catalina, CA 91106 - -CPMNAME.SRC -PASMAT.CMD -PASMAT.SRC -PASMAT.SUB -PMCOMENT.SRC -PMDEFS.INC -PMFILEIO.SRC -PMINIT.SRC -PMPARSE.SRC -RNB.SRC - - The PASMAT Pascal/MT reformatter source code for use by -a CPM-80 (8080/Z80) system. Files with the same name but ending -in .PAS, .SU, and .IN are for use on a CPM-86 system. Written -by Steven Clamage, 6072 Cirrus St., San Diego, CA 92110 - - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/CPMNAME.PAS b/software/CPM/CPM22_MTPUG_10/CPMNAME.PAS deleted file mode 100644 index 6f47ba4..0000000 --- a/software/CPM/CPM22_MTPUG_10/CPMNAME.PAS +++ /dev/null @@ -1,90 +0,0 @@ -module tstcpmname; - {Test input string for valid CP/M file name or device } - {MT+86 version, allows for recursion offset of device name table} - {by Steve Clamage} - - - function cpmname(fname: string): boolean; - - const - numdevs = 6; {number of defined devices} - - type {[b+]} - devs = 1..numdevs; - devnames = array [devs] of string[4]; - devptr = ^devnames; - ptrkludge = record {see MT+86 manual section 3.8} - case boolean of - true : (p: devptr); - false: (loword: word; - hiword: word); - end; - - var {[b-]} - gotdot: boolean; - cname, cext, i, len: integer; - badset: set of char; - devtptr: devptr; - p: ptrkludge; - - procedure devname; {table of device names} - - begin {[f-]} - inline( 4/ 'CON:'/ - 4/ 'KBD:'/ - 4/ 'TRM:'/ - 4/ 'LST:'/ - 4/ 'RDR:'/ - 4/ 'PUN:' - ); {[f+]} - end; - - begin {cpmname} - p.p := addr(devname); {see MT+86 manual section 3.8} - p.loword := p.loword + wrd(8); - devtptr := p.p; - for i := 1 to numdevs do {check for device name} - if fname = devtptr^[i] then - begin - cpmname := true; - exit; {got one, so it's ok} - end; - cpmname := false; {assume the worst} - badset := [' ', '<', '>', ',', ':', '=', '*', '?', '[', ']']; - len := length(fname); - if len = 0 then {zero-length name} - exit; - i := 1; {start with 1st character} - if len > 1 then - if fname[2] = ':' then {if 2nd is colon...} - i := 3; {...start test with 3rd} - gotdot := false; - cname := 0; {# chars in name portion} - while (i <= len) and (not gotdot) do {scan name portion} - begin - if fname[i] = '.' then {period terminates name scan} - gotdot := true - else - begin - cname := cname + 1; - if fname[i] in badset then - exit; {illegal character} - end; - i := i + 1 - end; - cext := 0; {# chars in extent portion} - badset := badset + ['.']; - while (i <= len) do {scan extent portion} - begin - cext := cext + 1; - if fname[i] in badset then - exit; {illegal character} - i := i + 1; - end; - if (cname < 1) or (cname > 8) or (cext > 3) then - exit; {improper length} - cpmname := true; {it's ok!} - end; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/CPMNAME.SRC b/software/CPM/CPM22_MTPUG_10/CPMNAME.SRC deleted file mode 100644 index b79b9a6..0000000 --- a/software/CPM/CPM22_MTPUG_10/CPMNAME.SRC +++ /dev/null @@ -1,80 +0,0 @@ -module tstcpmname; - {Test input string for valid CP/M file name or device } - {by Steve Clamage} - - - function cpmname(fname: string): boolean; - - const - numdevs = 6; {number of defined devices} - - type - devs = 1..numdevs; - devnames = array [devs] of string[4]; - - var - gotdot: boolean; - cname, cext, i, len: integer; - badset: set of char; - devtptr: ^devnames; - - - procedure devname; {table of device names} - - begin {[f-]} - inline( 4/ 'CON:'/ - 4/ 'KBD:'/ - 4/ 'TRM:'/ - 4/ 'LST:'/ - 4/ 'RDR:'/ - 4/ 'PUN:' - ); {[f+]} - end; - - begin {cpmname} - devtptr := addr(devname); - for i := 1 to numdevs do {check for device name} - if fname = devtptr^[i] then - begin - cpmname := true; - exit; {got one, so it's ok} - end; - cpmname := false; {assume the worst} - badset := [' ', '<', '>', ',', ':', '=', '*', '?', '[', ']']; - len := length(fname); - if len = 0 then {zero-length name} - exit; - i := 1; {start with 1st character} - if len > 1 then - if fname[2] = ':' then {if 2nd is colon...} - i := 3; {...start test with 3rd} - gotdot := false; - cname := 0; {# chars in name portion} - while (i <= len) and (not gotdot) do {scan name portion} - begin - if fname[i] = '.' then {period terminates name scan} - gotdot := true - else - begin - cname := cname + 1; - if fname[i] in badset then - exit; {illegal character} - end; - i := i + 1 - end; - cext := 0; {# chars in extent portion} - badset := badset + ['.']; - while (i <= len) do {scan extent portion} - begin - cext := cext + 1; - if fname[i] in badset then - exit; {illegal character} - i := i + 1; - end; - if (cname < 1) or (cname > 8) or (cext > 3) then - exit; {improper length} - cpmname := true; {it's ok!} - end; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FACT2K.DOC b/software/CPM/CPM22_MTPUG_10/FACT2K.DOC deleted file mode 100644 index be213a3..0000000 --- a/software/CPM/CPM22_MTPUG_10/FACT2K.DOC +++ /dev/null @@ -1,41 +0,0 @@ - - - - - FACT2K.PAS analyzes experimental data from a 2**k factorial -design. This is a common statistical technique used in examining -all possible combinations of two levels of k separate factors under -contorl of an experimentalist. As an illustration, a chemist may -wish to study the conversion yield of a catalytic reaction by running -experiments of two catalyst preparations, two temperatures, two -pressures, and two reactant ratios. Upon analyzing the data, the -chemist can determine the effects and interations of the various -treatments (temperature effect, pressure-catalyst interaction, ect.). - - There are many variations of this technique: n**k designs, frac- -tional factorial, block designs, and replicated 2**k factorial designs. -They would be programmed similarly. For more information, study a book -on experimental statistics. Two elementary ones which I recommend are: - - I. Guttman, S. Wilks, and J.S. Hunter, "Introductory - Engineering Statistics," (Wiley:1982). - - G.E.P. Box, W.G. Hunter, and J.S. Hunter, "Statistics - for Experimentalist," (Wiley:1978). - - -The output from FACT2K using the input file FACT2K.IN is the same as -that shown in the appendix of Guttman, Wilks, and Hunter. - - Of particular interest to me was the Yates' algorithm (1937) for -the 2**k factorial. This algorithm will manipulate specially ordered -data in (N log N) multiplications instead of the obvious N**2 method. -Its similarity to the fast Fourier transform is striking. John Tukey, -one of the world's foremost statisticians, only upon prompting outlined -his method of efficiently computing Fourier transforms. His total famil- -iarity with Yates' algorithm probably contributed to his under-estimation -of the FFT's inportance to computing. - - - - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FACT2K.IN b/software/CPM/CPM22_MTPUG_10/FACT2K.IN deleted file mode 100644 index 1d5e386..0000000 --- a/software/CPM/CPM22_MTPUG_10/FACT2K.IN +++ /dev/null @@ -1,18 +0,0 @@ - - 62 - 88 - 63 - 83 - 88 - 80 - 99 - 92 - 65 - 123 - 65 - 121 - 97 - 105 - 92 - 117 - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FACT2K.OUT b/software/CPM/CPM22_MTPUG_10/FACT2K.OUT deleted file mode 100644 index a2f8391..0000000 --- a/software/CPM/CPM22_MTPUG_10/FACT2K.OUT +++ /dev/null @@ -1,45 +0,0 @@ - - Data in Yates Order - ************************* - 62.00 - - - - - 88.00 + - - - - 63.00 - + - - - 83.00 + + - - - 88.00 - - + - - 80.00 + - + - - 99.00 - + + - - 92.00 + + + - - 65.00 - - - + - 123.00 + - - + - 65.00 - + - + - 121.00 + + - + - 97.00 - - + + - 105.00 + - + + - 92.00 - + + + - 117.00 + + + + - - - Average = 90.00 - - Estimated Effect Contrib. to Identification - Effects Treatment Sum of Squares of Effects - *********************************************************** - - 22.25 1980.25 1 - 3.00 36.00 2 - 1.25 6.25 12 - 12.50 625.00 3 - -17.75 1260.25 13 - 4.50 81.00 23 - 3.25 42.25 123 - 16.25 1056.25 4 - 14.50 841.00 14 - -1.75 12.25 24 - 2.50 25.00 124 - -3.25 42.25 34 - -2.50 25.00 134 - -2.25 20.25 234 - 1.50 9.00 1234 - - Sum of Squares = 2170592.00 - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FACT2K.PAS b/software/CPM/CPM22_MTPUG_10/FACT2K.PAS deleted file mode 100644 index 9b8a81c..0000000 --- a/software/CPM/CPM22_MTPUG_10/FACT2K.PAS +++ /dev/null @@ -1,104 +0,0 @@ - - PROGRAM FACT2K(INFILE,INPUT,OUTPUT); - -CONST k = 4; - n = 16; {n=2**k} - -TYPE VECTOR = ARRAY[1..n] OF REAL; - -VAR M : ARRAY[1..n,1..k] OF INTEGER; - I,J,L : INTEGER; - COUNT1 : INTEGER; - COUNT2 : INTEGER; - INDEX : INTEGER; - COUNT : INTEGER; - IORESULT : INTEGER; - Y : VECTOR; - SSQ : REAL; - SSQ_YI : REAL; - INFILE : TEXT; - -PROCEDURE YATES( INDEX : INTEGER; X : VECTOR; VAR Y : VECTOR); - {performs Yates' algorithm for the 2**k factorial design.} - {See p. 461 of Guttman, Wilks, & Hunter for details. } - - VAR I,J : INTEGER; - BEGIN - J:=0; - FOR I:=1 TO INDEX DO - BEGIN - J:=J+2; - Y[I ]:=X[J] + X[J-1]; - Y[I+INDEX]:=X[J] - X[J-1] - END - END; - - - -BEGIN -OPEN(INFILE,'FACT2K.IN',IORESULT); -RESET(INFILE); - -COUNT1:=n DIV 2; -COUNT2:=1; -FOR J:=1 TO k DO - BEGIN - INDEX:=1; - FOR I:=1 TO COUNT1 DO - BEGIN - FOR L:=1 TO COUNT2 DO - BEGIN - M[INDEX ,J]:=-1; - M[INDEX+COUNT2,J]:=+1; - INDEX:=INDEX+1 - END; - INDEX:=INDEX+COUNT2 - END; - COUNT2:=2*COUNT2; - COUNT1:=COUNT1 DIV 2 - END; - -WRITELN(' Data in Yates Order'); -WRITELN(' *************************'); -FOR I:=1 TO n DO - BEGIN - READLN(INFILE,Y[I]); - WRITE(Y[I]:10:2,' ':5); - FOR J:=1 TO K DO - BEGIN - IF M[I,J]=1 THEN - WRITE('+') - ELSE WRITE('-'); - WRITE(' ':2) - END; - WRITELN - END; - -COUNT:=n DIV 2; -FOR J:=1 TO k DO - YATES(COUNT,Y,Y); - -WRITELN; WRITELN; -WRITELN(' Average = ',Y[1]/n:10:2); WRITELN; - -SSQ:=Y[1]*Y[1]; -WRITELN(' ':5,' Estimated Effect Contrib. to Identification'); -WRITELN(' ':5,' Effects Treatment Sum of Squares of Effects' ); -WRITELN(' ':5,'***********************************************************'); -WRITELN; - -FOR I:=2 TO n DO - BEGIN - SSQ_YI:=Y[I]*Y[I]; - WRITE(' ':2,Y[I]/COUNT:10:2, ' ':11,SSQ_YI/n:10:2, ' ':21); - FOR J:=1 TO k DO - IF M[I,J]=1 THEN WRITE(J:1); - WRITELN; - SSQ:=SSQ + SSQ_YI - END; - -WRITELN; -WRITELN(' Sum of Squares = ',SSQ:10:2) - -END. - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FFT.DOC b/software/CPM/CPM22_MTPUG_10/FFT.DOC deleted file mode 100644 index dd00517..0000000 --- a/software/CPM/CPM22_MTPUG_10/FFT.DOC +++ /dev/null @@ -1,135 +0,0 @@ - - - The Pascal programs PASFFT1.SRC to - PASFFT4.SRC are programs which use several - different techniques to calculate the Fast Fourier - Transform. These techniques are taken directly from - the book: - - 'Introduction to Digital Filtering' by - R.E Bogner and A.G Constantinides, Wiley, 1975 - - This book is one of the better references to - the FFT. The heart of the programs given here is - the procedure, 'easy', which is a direct translation - of the FORTRAN subroutines given by the authors. - They actually give two versions and I wrote another - two in the hope that they might prove to be faster. - - These were originally written on an Apple II - using their version of UCSD Pascal. This code - represents a minimum change version which runs on - Pascal MT+. - - There are 4 programs each of which contains - the procedure 'easy' which does the FFT. The - various implementations differ only in the way in - which the cosine and sine terms are derived. - - PASFFT2 is the most straight forward and uses - the calculated values of sine and cosine using the - 'cos' and 'sin' functions. This version is the - slowest. - - PASFFT1 is an improved ( from the speed point - of view ) version in which the incremental values - of the sine and cosine are derived from the - equation for the sum of cosines and sines. Since - the transcendental functions are not used as - frequently, the procedure executes considerably - faster. - - PASFFT3 is a version in which a table of - cosines is first precalulated and passed to the - procedure 'easy'. Then the values used are first - just looked up and then incremental values are - calculated as in PASFFT1. - - PASFFT4 is similar except that only the - lookup table is used - there is no 'incremental' - calculation. If table lookup is done very - efficiently, this version probably ought to be the - fastest. - - I have tried all the versions shown using - both the AMD9511 floating point chip and just using - the 'normal' MT+ TRANCEND and FPREALS relocatable - modules. - - The following table shows the results of - these tests on a 5 MHz Z80 machine using the $Z - - - 1 - - - - - - - - - option during compilation. The times shown are in - seconds and are the average of two runs of the - program. The probable accuracy is not much better - than about a quarter of a second. NOTE - these are - the times for procedure 'easy' ONLY. - - - --------------------------------------------------- - - Procedure | AMD 9511 | without | Comment - ___________________________________________________ - - PASFFT1 | 7.6 | 11.3 | just passes - _____________________________________ the array - - PASFFT2 | 18.8 | 72.1 | - ___________________________________________________ - - PASFFT3 | 8.2 | 11.4 | passes the - _____________________________________ array and a - precalcul- - PASFFT4 | 7.4 | 10.6 | ated cosine - table - --------------------------------------------------- - - - - My general conclusion is that PASFFT1 is the - easiest to use ( you don't have to precalculate the - table and hence use the memory space ). The speed - penalties for it compared to PASFFT4 are negligible - anyway. - - The AMD9511 floating point chip doesn't - produce an appreciable increase in speed with - PASFFT1 since there are only simple multiplications - being used. It's great advantage is shown in the - PASFFT2 test where the transcendental functions are - used frequently. - - Finally, I hope its obvious that the - procedure 'easy' can be easily changed to handle - any ( limited by memory size ) size array by re- - defining the data type 'data'. - - - - - - - - - - - - - - 2 - - - - - - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FFTKF.DOC b/software/CPM/CPM22_MTPUG_10/FFTKF.DOC deleted file mode 100644 index 5dd0e70..0000000 --- a/software/CPM/CPM22_MTPUG_10/FFTKF.DOC +++ /dev/null @@ -1,48 +0,0 @@ - - - FFT.PAS is an implementation of the radix-2, fast Fourier trans- -form algorithm with decimation in time (Cooley-Tukey method). This -program is essentially the same as that found in J.W. Cooper, "Intro- -duction to Pascal for Scientists," (Wiley:1981) pp. 211-216. I do -not particularly recommend this book in general, but the FFT program -is solid and in the author's area of expertise. Also, variable names -and program structure follow closely to the discussion in the text. -There were, however, several blunders in Cooper's post-processing pro- -cedure which I have corrected. Furthermore, I incorporated more effi- -cient code in a number of places (for example, the required sines and -cosines are computed recursively using only the SQRT function). - - By rearranging the procedure calls in the main body, you can -perform other calculations. Some common usages are: - - - Forward Transform -----> FFT(FORWRD); - Complex Vector - - Inverse Transform -----> FFT(INVERSE); - Complex Vector - - Inverse Transform -----> POST_PROCESS(INVERSE); - Real Vector FFT(INVERSE); - SHUFFLE(INVERSE); - - - There are many methods of computing discrete Fourier transforms -in order (N log N) floating point operations. The differences can -usually be attributed to various ways the data are accessed or to -the optimal computational structure as dictated by the available -hardware. FFT.PAS represents an efficient, but relatively straight- -forward approach well suited to microprocessors. - - For those interested in studying FFT's further, I suggest: - - - J.D. Lipson, "Elements of Algebra and Algebraic - Computing," (Addison-Wesley:1981). - - H. Nussbaumer, "Fast Fourier Transform and Convolution - Algorithms," (Springer-Verlag:1982). - - E.O. Brigham, "The Fast Fourier Transform," (Prentice- - Hall:1974). - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/FFTKF.IN b/software/CPM/CPM22_MTPUG_10/FFTKF.IN deleted file mode 100644 index 227313bf299954057d336885ac940f4ce901d52a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmc)Hu@1r@5C-7RB)mW;24}-zt*BFzQbQuNL7Kqi`@eI3E_1Dt!GIb$zxd1}AvHt*}^N(Q+?iurBmh1PK EUJ2<*y@r*}$|_fSJE&{nE|*fmjx2d1B7i%kc2Zyci%F~Y zsi+xtS{8MYZ2*?f`#eXFU|Rl?+JrUFstN>Y8OgIklZ&~k5a#0ik8dEpf5fxIab3DR zB)ILF=LL-v3a=4_n~;`S;F)9~oOR4f#-GUG z*gV^-zyd3E;f(y)2~u*fm!Ft$PQ$S~NPJrZM&tndI0@m{nh38=0Smn#I`yIaq=dt1 zVFIuKsrARRK88mwQhtO>IEgJc7mjy&(b#$c`{R4Ui9>^9_{>=iY{FR(k+so7v|Az! zkO2nA@R@z*L~*rQd#GNJhEALq9O84wIu3^ewB0~tZQWq#wm=4l_}p=g9b=)VWb@PU z83NCVBZEVH<|=o9Hb9)0wr4D27a%rfWb;FOX5UYRjz6s4>vz<2V!xTMG|pDf64qIr zK~e7ZbuHI$)0=|{&J`R9m>_IK2oj_}G8ajQe8C1nhEawoI}{mt)gS}RzOKe_12w|u zg|2FN&Nev>TiVIA&R(FXKua8=S-Cd5m3&etnu|rnvlgJ(W*;Qb~*mbHF??Ht zRM)*!&@dQS3yQ$3srB-|lrC{nH>10q`i3z^#_!JnzS%;pwyKSmX}TayaQh8frp4Se zKGm8`R^R@*tgpVqM>w|CG?e#7Tg`lXYg|pU_`#`%xWntjLu!q|xL5^+6D`vSNM4h} ze$DLDBG+nb*fM=s-oxcis~z&CMjk??@)}rElHyI|5WH} z?z-j;VMeY;QK THEN {swap the real and imaginary components} - BEGIN - IPN2:=I + N_2; {imaginary} - KPN2:=K + N_2; { indices } - - TEMP_R:=X[ K ]; - TEMP_I:=X[KPN2]; - - X[ K ]:=X[ I ]; - X[KPN2]:=X[IPN2]; - - X[ I ]:=TEMP_R; - X[IPN2]:=TEMP_I - END - END; - - - {do first pass specially, since it has no multiplication} - I:=1; - FOR J:=1 TO N_4 DO - BEGIN - K:=I+1; - IPN2:=I+N_2; - KPN2:=IPN2+1; - K1:= X[ I ] + X[ K ]; - X[ K ]:=X[ I ] - X[ K ]; - X[ I ]:=K1; - K1:= X[IPN2] + X[KPN2]; - X[KPN2]:=X[IPN2] - X[KPN2]; - X[IPN2]:=K1; - I:=I+2 - END; - - {set up for 2nd pass ARG = pi/2} - COS0:=0.0; - IF MODE=FORWRD THEN SIN0:= 1.0 - ELSE SIN0:=-1.0; - CELL_COUNT:=N_2 DIV 4; - POINT_COUNT:=2; - CELL_DISTANCE:=4; - - {each pass after the 1st starts here} - FOR I2:=2 TO NU DO - BEGIN - COSY:=1.0; - SINY:=0.0; - FOR INDEX:=1 TO POINT_COUNT DO - BEGIN - I:=INDEX; - - FOR L:=1 TO CELL_COUNT DO - BEGIN - J:=I + POINT_COUNT; - IPN2:=I + N_2; - JPN2:=J + N_2; - - IF INDEX=1 THEN {no sine or cosine terms} - BEGIN - R2COS_I2SIN:=X[ J ]; - I2COS_R2SIN:=X[JPN2] - END - ELSE - BEGIN - R2COS_I2SIN:=X[ J ]*COSY + X[JPN2]*SINY; - I2COS_R2SIN:=X[JPN2]*COSY - X[ J ]*SINY - END; - - X[ J ]:=X[ I ] - R2COS_I2SIN; {Note: these assignments} - X[ I ]:=X[ I ] + R2COS_I2SIN; {must be in this order if} - X[JPN2]:=X[IPN2] - I2COS_R2SIN; {temporary variables are } - X[IPN2]:=X[IPN2] + I2COS_R2SIN; {to be avoided. } - I:=I + CELL_DISTANCE - END; - - K1 :=COSY*COS0 - SINY*SIN0; {using de Moivre's Theorem} - SINY:=SINY*COS0 + COSY*SIN0; - COSY:=K1; - - END; - - {pass done--change cell distance and number of cells} - CELL_COUNT:=CELL_COUNT DIV 2; - POINT_COUNT:=POINT_COUNT*2; - CELL_DISTANCE:=CELL_DISTANCE*2; - - SIN0:=SQRT((1.0 - COS0)/2.0); {use half-angle formulas to compute} - COS0:=SQRT((1.0 + COS0)/2.0); {sin & cos of ARG:=ARG/2 } - - IF MODE=INVERSE THEN SIN0:= -SIN0 - END; - - IF MODE=INVERSE THEN - FOR I:=1 TO N DO X[I]:=X[I]/N_2 - END; - - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/LAB.PAS b/software/CPM/CPM22_MTPUG_10/LAB.PAS deleted file mode 100644 index e5f0499..0000000 --- a/software/CPM/CPM22_MTPUG_10/LAB.PAS +++ /dev/null @@ -1,387 +0,0 @@ - - - -MODULE LAB; -{$M AD1_CONVERT } -{$M AD2_CONVERT } -{$M DA_CONVERT } -{$M TIMER } -{$M TIME_OUT } -{$M READ_CLOCK } -{$M PRINT_TIME } -{$M CONTROL } -{$M HYDROGEN } -{$M OXYGEN } -{$M AIR } -{$M STRIP_CHART } -{$M LOGIN_DISK } - -{$M *} - -TYPE AD1_CHAN = 0..7; - AD2_CHAN = 0..15; - DA_CHAN = 0..3; - NIBBLE = 0..15; - DEVICE_CODE = RECORD - HOUSE : 'A'..'P'; - UNIT : 0..15; - END; - CONTROL_ACTION = (ON,OFF,ALL_ON,ALL_OFF,BRIGHTEN,DIM,CLR_STOP); - - TIME_OF_DAY = RECORD - YEAR : 1982..2000; - MONTH : 1..12; - DAY : 1..31; - HOUR : 0..23; - MINUTE : 0..59; - SECOND : 0..59; - END; - - FILE_NAME = STRING; - - - -EXTERNAL FUNCTION @BDOS(FUNC,PARM : INTEGER) : INTEGER; - -FUNCTION AD1_CONVERT(CHANNEL : AD1_CHAN; N : NIBBLE) : INTEGER; - {Access the CDC 12-bit A/D converter board set at +/-5 volts} - CONST AD1_PORT = $A0; - MASK = $20; - BEGIN - {GAIN = 2**N. However we must adjust N so that the proper gain} - {switching is inputted to the programmable gain amplifier. See} - {p. 7 of the 3606 IC manual. } - CASE N OF - 0, 1, 2 : N:=N; - 3, 4 : N:=N+2; - 5, 6, 7 : N:=N+3; - 8, 9, 10 : N:=N+4; - ELSE BEGIN - WRITELN('Gain of 1024 (2**10) is a maximum bound.'); - N:=14 - END - END; - - OUT[ AD1_PORT ]:=N; {input gain switch} - OUT[(AD1_PORT+1)]:=CHANNEL; - OUT[(AD1_PORT+2)]:=0; {start A/D conversion} - - WAIT(AD1_PORT,MASK,TRUE); {wait until the 5th bit goes low} - - AD1_CONVERT:=SWAP(INP[(AD1_PORT+3)]) ! INP[(AD1_PORT+2)] - END; - - - -FUNCTION AD2_CONVERT(CHANNEL : AD2_CHAN) : INTEGER; - {Access the Techmar 12-bit A/D converter board set at +/-10 volts} - CONST AD2_PORT = $B0; - MASK = $01; - BEGIN - - OUT[ AD2_PORT ]:=CHANNEL; - OUT[(AD2_PORT+1)]:=0; {start A/D conversion} - - WAIT(AD2_PORT+1,MASK,FALSE); {wait until the LSB bit goes high} - - AD2_CONVERT:=SWAP(INP[(AD2_PORT+3)]) ! INP[(AD2_PORT+2)] - END; - - - -PROCEDURE DA_CONVERT(CHANNEL : DA_CHAN; DA_OUTPUT : INTEGER); - {Access the CDC 12-bit D/A converter board set at +/-10 volts} - CONST DA_PORT = $C0; - - VAR DAC_PORT : BYTE; - - BEGIN - IF ( CHANNEL>3 ) OR ( CHANNEL<0 ) THEN - WRITELN('D/A CHANNEL',CHANNEL,' does not exist.'); - DAC_PORT:=DA_PORT + 2*CHANNEL; - OUT[(DAC_PORT )]:=HI(DA_OUTPUT); - OUT[(DAC_PORT + 1)]:=LO(DA_OUTPUT) - END; - - - -PROCEDURE TIMER(SECONDS : INTEGER); - {Access the SciTronics RTC-100 Real Time Clock board} - {and wait a specified number of seconds. } - - VAR I : INTEGER; - NOW : TIME_OF_DAY; - OLD_SEC : INTEGER; - - BEGIN - READ_CLOCK(NOW); - FOR I:=SECONDS DOWNTO 1 DO - BEGIN - OLD_SEC:=NOW.SECOND; - REPEAT - READ_CLOCK(NOW) - UNTIL NOW.SECOND<>OLD_SEC - END - END; - - -PROCEDURE TIME_OUT(HOURS,MINUTES,SECONDS : INTEGER); - {Access the RTC-100 Real Time Clock board and wait a specified} - {block of time (accurate only to the nearest second). } - - CONST RTC0 = $18; - RTC1 = $19; - RTC2 = $1A; - RTC3 = $1B; - - VAR I : INTEGER; - NOW : TIME_OF_DAY; - TARGET : TIME_OF_DAY; - SUM_SECONDS : INTEGER; - SUM_MINUTES : INTEGER; - SUM_HOURS : INTEGER; - MINUTE_CARRY : INTEGER; - HOUR_CARRY : INTEGER; - READY : BOOLEAN; - - BEGIN - READ_CLOCK(NOW); - READY:=FALSE; - - SUM_SECONDS := NOW.SECOND + SECONDS; - - MINUTE_CARRY := SUM_SECONDS DIV 60; - SUM_MINUTES := NOW.MINUTE + MINUTES + MINUTE_CARRY; - - HOUR_CARRY := SUM_MINUTES DIV 60; - SUM_HOURS := NOW.HOUR + HOURS + HOUR_CARRY; - - TARGET.SECOND:= SUM_SECONDS MOD 60; - TARGET.MINUTE:= SUM_MINUTES MOD 60; - TARGET.HOUR := SUM_HOURS MOD 24; - - REPEAT - READ_CLOCK(NOW); - IF NOW.HOUR=TARGET.HOUR THEN - IF NOW.MINUTE=TARGET.MINUTE THEN - READY:=TARGET.SECOND=NOW.SECOND - UNTIL READY - END; - - - -PROCEDURE READ_CLOCK(VAR NOW : TIME_OF_DAY); - {Read the RTC-100 Real Time Clock} - VAR TIME : ARRAY[0..12] OF BYTE; - - PROCEDURE RTC_READ; - CONST RTC0 = $18; - RTC1 = $19; - RTC2 = $1A; - RTC3 = $1B; - - VAR I : INTEGER; - - BEGIN - OUT[RTC1]:=$F0; - OUT[RTC0]:=$0F; - OUT[RTC3]:=$FC; - OUT[RTC1]:=$F4; - - FOR I:=0 TO 12 DO - BEGIN - OUT[RTC0]:=I; - TIME[I]:=SHR( INP[RTC0], 4) - END; - - OUT[RTC1]:=$F8; - OUT[RTC0]:=$0F; - OUT[RTC3]:=$F8; - OUT[RTC1]:=$FC; - OUT[RTC0]:=$0F - END; - - BEGIN - RTC_READ; - WITH NOW DO - BEGIN - YEAR:=TIME[12]*10 + TIME[11] + 1900; - MONTH:=(TIME[10] & 3)*10 + TIME[9]; - DAY:=TIME[8]*10 + TIME[7]; - HOUR:=(TIME[5] & 3)*10 + TIME[4]; - MINUTE:=TIME[3]*10 + TIME[2]; - SECOND:=TIME[1]*10 + TIME[0] - END - END; - - - - -PROCEDURE PRINT_TIME(F_NAME : FILE_NAME); - VAR TIME : TIME_OF_DAY; - - BEGIN - READ_CLOCK(TIME); - WITH TIME DO - IF F_NAME='SCREEN' THEN - WRITE('Time is: ',HOUR:2,':',MINUTE:2,':',SECOND:2) - ELSE WRITE(F_NAME, HOUR:2,':',MINUTE:2,':',SECOND:2) - END; - - - - -PROCEDURE CONTROL(TRIAC : DEVICE_CODE; COMMAND : CONTROL_ACTION); - {Works in conjunction with the SciTronics Remote Controller } - {board. This procedure accesses and performs the appropriate} - {command for a BSR control module. It takes approximately } - {3 seconds to execute. } - - CONST RC_PORT = $40; - MASK = $80; - - VAR STR : STRING; - I : INTEGER; - - BEGIN - WITH TRIAC DO - BEGIN - STR:='JBHPLDFNIAGOKCEM'; - {output the device code --> see p.8 of RC-100 manual} - OUT[RC_PORT]:=SHL(UNIT,4)!( POS(HOUSE,STR) - 1 ); - CASE COMMAND OF - - ON : OUT[(RC_PORT + 1)]:=$93; - - OFF : OUT[(RC_PORT + 1)]:=$9B; - - ALL_ON : OUT[(RC_PORT + 1)]:=$95; - - ALL_OFF : OUT[(RC_PORT + 1)]:=$9D; - - BRIGHTEN : OUT[(RC_PORT + 1)]:=$C7; - - DIM : OUT[(RC_PORT + 1)]:=$CF; - - CLR_STOP : OUT[(RC_PORT + 1)]:=$A1 - - END; - - - FOR I:=1 TO 100 DO; {a short delay before reading status} - - {wait until controller has stopped transmitting} - WAIT(RC_PORT,MASK,TRUE) - END - END; - - - -FUNCTION KEYPRESSED : BOOLEAN; - BEGIN - KEYPRESSED:=( @BDOS(11,0) <> 0 ) - END; - - - -PROCEDURE HYDROGEN(FLOWRATE : INTEGER); - {This procedure activates the appropriate solenoid valve to } - {the gas regulator and inputs a voltage to the flow controller} - {which will correspond to the given flowrate requested. } - - CONST H2_FLOW_CONTROLLER = 3; {D/A channel 3} - MAX_FLOW = 300; {cm**3/minute} - MIN_FLOW = 13; - - VAR H2_VALVE : DEVICE_CODE; - FLOW_I : INTEGER; - BEGIN - H2_VALVE.HOUSE:='P'; {If using BSR appliance} - H2_VALVE.UNIT:=2; {modules, dial in "P3" } - - IF FLOWRATE<=0 THEN - CONTROL(H2_VALVE,OFF) - ELSE IF FLOWRATE<=MAX_FLOW THEN - BEGIN - CONTROL(H2_VALVE,ON); - {Generate a positve DAC voltage <= 5.0 volts for proper flowrate} - FLOW_I:=ROUND(1024.0*FLOWRATE/MAX_FLOW); - DA_CONVERT(H2_FLOW_CONTROLLER,FLOW_I) - END - ELSE WRITELN('Error *** Hydrogen flowrate exceeds controller max.') - - END; - - - -PROCEDURE OXYGEN(FLOWRATE : INTEGER); - {This procedure activates the appropriate solenoid valve to } - {the gas regulator and inputs a voltage to the flow controller} - {which will correspond to the given flowrate requested. } - - CONST O2_FLOW_CONTROLLER = 2; {D/A channel 2} - MAX_FLOW = 2000; {cm**3/minute} - MIN_FLOW = 0; - - VAR O2_VALVE : DEVICE_CODE; - FLOW_I : INTEGER; - BEGIN - O2_VALVE.HOUSE:='P'; {If using BSR appliance} - O2_VALVE.UNIT:=3; {modules, dial in "P4" } - - IF FLOWRATE<=0 THEN - CONTROL(O2_VALVE,OFF) - ELSE IF FLOWRATE<=MAX_FLOW THEN - BEGIN - CONTROL(O2_VALVE,ON); - {Generate a positve DAC voltage <= 5.0 volts for proper flowrate} - FLOW_I:=ROUND(1024.0*FLOWRATE/MAX_FLOW); - DA_CONVERT(O2_FLOW_CONTROLLER,FLOW_I) - END - ELSE WRITELN('Error *** Oxygen flowrate exceeds controller max.') - - END; - - -PROCEDURE AIR(FLOWRATE : INTEGER); - {This is used when a 21% oxygen/79% nitrogen mixture flows} - {through the flow controller calibrated for pure oxygen. } - BEGIN - OXYGEN( ROUND(1.00*FLOWRATE) ) {Correction factor given} - END; {in Tylan manual, p. 19 } - - - -PROCEDURE STRIP_CHART(ACTION : CONTROL_ACTION); - {This procedure turns the Houston Instrument strip chart recorder} - {on or off. No pen control is needed since it automatically goes} - {up when power is curtailed. } - - VAR CHART : DEVICE_CODE; - BEGIN - CHART.HOUSE:='P'; {If using BSR appliance} - CHART.UNIT:=4; {modules, dial in "P5" } - - CASE ACTION OF - ON,OFF : CONTROL(CHART,ACTION); - ELSE BEGIN - WRITELN('***> Control action requested is not available'); - WRITELN(' for the strip chart recorder.') - END - END - END; - - -PROCEDURE LOGIN_DISK(DISK : CHAR); - {logs in the given floppy disk drive (A,B,C,...)} - CONST DISK_DRIVE_LOGIN = 14; - - VAR DUMMY : INTEGER; - BEGIN - DUMMY:=@BDOS( DISK_DRIVE_LOGIN, ORD(DISK)-ORD('A') ) - END; - - - -MODEND. - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PASFFT1.SRC b/software/CPM/CPM22_MTPUG_10/PASFFT1.SRC deleted file mode 100644 index 2ec40bc93ebe80d8bc35167bfb1ce80673ccaf9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2560 zcmb_eOLLq!5Z>!j#UI#H-@<^vBaQ8HNI0bSyr&#fImnF0)&vBRa6Hb|{`c)hz%XOR zTU!;1QUU$Y*Iz$GYnulvYiOn0?Ya+P5C(sT!S8=ItyWvu*`|h1ZCfeWYWK|nzlOi$ z3j_ZCZUb2cjnxm@$O@jV?mA`QvuZn%uEXFTa#l9RbpYKnIxKE8akt@jH@FS>tCojC z+}s{NghBVx;%>5&g|t?_eBoIp7%r`CDbC959i4`~4oIjN5JWj;uI?>g6}QxD3H z;xLHf^p{-mih^rxQ>yKgRiLDMi3pJNc+9x&GxKfm99B0f|d=d znH|xM#7O(VBxh2vd(Q3!D>*B1b$H{G>r~5}#+x%oFDERA!M(y7=u>L*!ZuH48&xJU zt1DbZwq6kj7(c=qFkU|UaYhAvav>? z9LPAj1#~PJ$zB^Ovz@!D@`AED|MdK*k(UZXJaXWDF9(Q>?^9~0IRJbn*YnIw;xh~pM2ua}^~1wCp2^tt4K?9T;rO#Ycxgobm14pBc0hBKxAT1#yfM+E*5%u4&boDaw; zO;L`mhzT`O{|gf9tJ`ZllICy^3-fk@N&htpN60&z%k(>fI~w(Fu7q~x=mhRnS}@xJd=NCUt$)bv)%^B;0Z=@n zYyV;>F30@x95*BwJ{!67#rehlhixrB-%TNsh4d#uF!}t24~K%`fY7fnpFyT%Tr&PN z2>^B;L2LWat5!?r+S5s)9#mE@+m_=F{+Gw?QE+#`{AzmrTQCJB^B0E*Ny8_px9*ix z9Ty3q(vW7`P(@Fff@fVkf+S&3j|y`AmxArew&=sG zgCSuQMs>$Se#Xz=3R2UyN_8|_vzWzt!)XvSjM;`|HM?3EnLRMcnG|fv*;25Ovk=D| zU!3KIN?ES) z^!B>#D)xLj)%LI7KivE}g&0HJYhZkL2Z)NV2UJdN0yrnv?UQMi4=9j*e{WB#4b)8V z(CXt-Nt82)RH!$yz;rjKnM2n(W~~4YshdPHiKcd`*mV|(7J()t!ff^!-i1N%A>qazC&*}w9{SD(N%x(Ys0)`u`u-G*-LgtTvh2vS z3WQ-&;=Bq9Tb}x~SVo6>>M+<_;S7`k`=h zos{#VCP-(1HZ_iHYWt%$ShuAbp1@ZrlM`4-c6GK6-glgU9Ck%%>hwVess&d%%~ zvwvvclWb$CX)nt#LehKh)AxQ!+>A#b#=R?8i*!EE-r1IIeYLGu7pt|BGngl%uBg4=NTBJSQs4WDK`*ooR8$w*Dcoi_!J%1R#4xz~IdF z&b$2l6psP(S&B{Iou2J%L^4frv!Z2NlP@;|n2AgTz45sB<&L|q$8bRVdl(HNks>NU zGBJ&0uGi5jgjiLxtza^~ZwnYmg2gAsu4^!85`3XOL>rtxm@QLJsDYjq{i`0_S z;L*@!OO}*$^GplQgvX|wO+6NJ7UG!V7iVcE*DO`|?<09K*HjVv&Fq3SgPa1>>IhN zm3wIC2OYOlZ>&%#@?h)&dyHh?8xF4fRj9}hD5KS_KR#amK7a^a+{VCQ*E@(2U$o1% z+_E6(YGz8w9tE;*ZS6@~s+tKVtw@)QXDNf34AoL(Snej9Db(dLsW`At-4v23G`U$j zj%xEpvnaN_+RW(`pQ0wUYSLB*RH=&4?V^gj3W3rk(pheGc%2R^?-MTVae|Dxh|qGD zNV?@jMBQtWOVvD9Ev9)9l4VVu8PzGeDeg>nA5;n}NG&?@ux17B$C`M>_<^InAuqfJ zT#fpGm;NDluw)z*>*_jbw9)>MCN}HheMdJd=tBDeDs^heo961hL(uzH=oQPl_BCM> z=x2Ltx2ReX$RTRf{5l_gFy*bfF3$0bl%Ss15<9(G&2fQeVojj!pM#dlUi$!YwOh?R z?@;VYdcREThJ>)+sAtRKwTDwc0@d;L0Z7#__Gw|u|)R{X>z zKS=*dG6x68FmANWoH!Mann_|oMftqLLL7W=>qi-QSHDWO_3P2m>zm%~a5(9@x8sW= R{mC~#Z~Xg9=RdQJ<2QpcJZb;{ diff --git a/software/CPM/CPM22_MTPUG_10/PASFFT4.SRC b/software/CPM/CPM22_MTPUG_10/PASFFT4.SRC deleted file mode 100644 index 17b5ebc1d01dab86f6203e253ead6b6768354b3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 zcmb_e&u`*J6sDI-b>-t;svh2L4Ga!r$SUhyA83HxNKJ?wy45P(!(fJFs4>*zD5O=T z{xg;OXZFpEZ45EHs#FV2#`C`S&HL?Khm&{V;1V`WE*9Av+p?`cZ0noz^+xbHEYkG~ z2AfUHVJ_saK>KjXo(Ry_XFYITSf}F7g~wE68BahYaKks57I$syPepb9z8q7Yrs4!whg?~S9=FBml6*vDBGHTydJ@vWh@wk;o##fbzP6(g8H9eGKQ41 zxFE^cEao|`t09W93bU;bgAicrE5<@C@~b4m7fHtNcv_0r5{Z3HUYyyM)9U;$Pphed zbsbL5N5h}O5pX7-9AzXkHYTMxQN@lX8lr5#SYq;ElddB^e@HnzitHYkiaO?P#Sn_s$I?3@$dbe) z7AvY2Pc1#NB57%Eo@qu2^T>>nnMWc@B3vc@a3?dqAyVLv5~*JH(qLOZjNV;bX_nLv z()B|!cjClJnkTq=Znvpofc`5J{2=Mj^3}sv7+!n;&m1lNfWFDguI3L$amMekgysFi zVu1y(0)V*jBm{w~FrDa2U^vNrf}LrG?_vz%?GmQ%N5WzetV~{q$SjBFlj})crup+<~$NBmSMS@Y)YuhV_I?G&~#Hs zrqK9y<2a&2o2{bQ@@g};tN0W(siA2{9D%ATTGdyP;W{+KoMMalf#a;S33yu*E+<34 zp;t|dfnu;66zI72n;q1Aj==(5zU}G)1s&X4CW+;4rp#?!X-2XX<0Unw&7?GIY|25HE_Q3C)KO4WVQQ-@k0UE| zpGT@zk7z5B?Z|6Mam)#ZgdN05p>UBrio>a)9rc45ZP&HA@wfC9abBD4HM2n!IKyY0 zP^6tNla^qwbAfiP`5(jg726d8S+Qp$~wkD~2Pvu7`E4A05Sc{bKLptiu;a z{{zy}&3uBYdwsmcaH^R|aVTQ!lN{W4yWWX7Kt7+IrBCYLAdZ9LC5~_Xjh(L({xa9s zAM`E3tBJ8KKd*jXzTlD{$lub;!NoBaH``{fY%0EkCZUBX!lzvl;o^HcKgz(n`a@=0 y-!&TFUJq`@<7wZ$3C|n)$qzsu{Pp7Rf6Q^QzGyVQQhT-h^8MG11^^QM_vc@?oJc+Z diff --git a/software/CPM/CPM22_MTPUG_10/PASMAT.CMD b/software/CPM/CPM22_MTPUG_10/PASMAT.CMD deleted file mode 100644 index 9457705..0000000 --- a/software/CPM/CPM22_MTPUG_10/PASMAT.CMD +++ /dev/null @@ -1,4 +0,0 @@ -B:PASMAT=B:PASMAT -B:PMINIT,B:PMCOMENT,B:PMPARSE,B:PMFILEIO -B:CPMNAME,B:RNB,B:PASLIB/S/E/W - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PASMAT.KMD b/software/CPM/CPM22_MTPUG_10/PASMAT.KMD deleted file mode 100644 index 56497c5..0000000 --- a/software/CPM/CPM22_MTPUG_10/PASMAT.KMD +++ /dev/null @@ -1,2 +0,0 @@ -PASMAT,PMINIT,PMCOMENT,PMPARSE,PMFILEIO,CPMNAME,PASLIB/S - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PASMAT.PAS b/software/CPM/CPM22_MTPUG_10/PASMAT.PAS deleted file mode 100644 index e280585..0000000 --- a/software/CPM/CPM22_MTPUG_10/PASMAT.PAS +++ /dev/null @@ -1,955 +0,0 @@ - {*-----------------------------------* - | PASMAT: PAScal source code forMAT | - *-----------------------------------*} -{$K0} {$K7} {$K12} {$K13} {$K14} {$K15} -(* {$Q2 for parser recursion} *) -program pasmat; -{$p---------------------* - | Labels and Constants | - *----------------------*} - - const - titleheader = 'Pasmat 3.15, revised 22 Mar 83'; - maxlinelen = 132; {max output line length} - bufsize = 134; {output buffer size, > maxlinelen} - maxwordlen = 9; {reserved words char size} - noreswords = 53; {number of reserved words} - defaultoutline = 72; {default output line length} - defaulttabspaces = 2; {logical indentation increments} - defaultcomentspaces = 1; {spacing before and after comments} - tab = 9; {ord of tab character} - tabinterval = 8; {standard tab interval for CP/M} - stacksize = 256; {extra hardware stack size} - ibufsize = 2047; {size of input buffer - 1} -{$p------* - | Types | - *-------*} - - type - symbols = (abslutesy, andsy, arraysy, beginsy, casesy, constsy, - divsy, dosy, downtosy, elsesy, endsy, externsy, filesy, - forsy, forwardsy, funcsy, gotosy, ifsy, insy, intruptsy, - labelsy, modsy, modendsy, modulesy, nilsy, notsy, ofsy, - orsy, othwisesy, packedsy, procsy, programsy, recordsy, - repeatsy, setsy, stringsy, thensy, tosy, typesy, untilsy, - varsy, whilesy, withsy, plus, minus, mult, divide, - becomes, period, comma, semicolon, colon, equal, - notequal, lessthan, lessequal, greatequal, greatthan, - pointer, subrange, apostrophy, openparen, closeparen, - openbrack, closebrack, identifier, number, stringcon, - coment, textend, dummysy); - {basic symbol enumeration} - setofsyms = set of symbols; {set ops on basic symbols} - wordtype = packed array [1..maxwordlen] of char; - {reserved} - lentabletype = {index into reserved word table by length} - record - lowindex, hiindex: 1..noreswords; - end; - lineindex = 0..maxlinelen; - actions = (graphic, spaces, beginline); - bufferindex = 0..bufsize; {output buffer index} - charbuffer = array [bufferindex] of - record - case actionis: actions of - spaces, beginline: - (spacing: lineindex); - graphic: - (character: char) - end; - collog = - record - logchar: integer; {charcount at time of log} - logcol: lineindex; {writecol at time of log} - logline: integer; {currentline at time of log} - end; - abortkind = (syntax, nesting, comformat); {error types} - stringp = ^string; -{$p----------* - | Variables | - *-----------*} - - var - {CP/M interface control variables} - @sfp: external integer; {initial stack pointer} - strptr: stringp; - clinearg: string[127]; - - {Structured Constants} - stdsyms: setofsyms; {symbols valid in standard pascal} - validdirectives: set of char; {valid formatter directives} - spacebefore, spaceafter: setofsyms; {individual symbol spacing} - alphanumerics: setofsyms; {alpha symbols} - resvwrd: array [1..noreswords] of wordtype; {reserved word table} - ressymbol: array [1..noreswords] of symbols; {symbols for resvwrd} - reslen: array [2..maxwordlen] of lentabletype; { length index} - digits, letters: set of char; - uppercase: array [char] of char; - lowercase: array [char] of char; {case conversion tables} - progset, blockbegsys, statset: setofsyms; {syntactic symbol types} - cnstnts: setofsyms; {symbols which can be constants} - headingbegsys: setofsyms; {symbols which begin a block heading} - typebegsys: setofsyms; {type beginning symbols} - exprbegsys: setofsyms; {expression beginning symbols} - relops: setofsyms; {relational operators} - arithops: setofsyms; {arithmetic operators} - - {Formatting variables} - indent: integer; {current number of indentation spaces} - statindent: integer; {indentation for major statement} - writecol: integer; {current output column} - symbolbreak: integer; {break symbol for putsym} - breakcol: integer; {output column for putsym} - lastsym: symbols; {last symbol processed} - symwritten: boolean; {last symbol was written} - indentstate: array [lineindex] of lineindex; - indentlevel: lineindex; {these make a stack of indent levels} - - {comment formatting} - statbreak: integer; {character where line can be broken} - statblanks: boolean; {set if blank was last char} - firstinputline: boolean; {set if first input line} - - {miscellaneous} - outputline: integer; {line numbers for output} - currentline: integer; {line number being written} - inputline: integer; {input line number} - linenumber: integer; - - {Formatting Control Values} - outlinelen: integer; {current output line length} - onehalfline: integer; {significant point upon line} - fiveeighthline: integer; { "} - threefourthline: integer; {"} - tabspaces: integer; {spaces to indent for each level} - continuespaces: integer; {spaces to indent continuation line} - comentspaces: integer; {spaces before statement comment} - statsperline: integer; {statements per line} - - {Flags to direct formatting} - ucreswords: boolean; {convert reserved words to UC} - ucidents: boolean; {convert identifiers to UC} - litcopy: boolean; {copy identifiers and reserved words literally} - portabilitymode: boolean; {eliminate underscores} - formatting: boolean; {do formatting (otherwise, copy)} - newformatting: boolean; {start formatting at end of comment} - bunching: boolean; {bunch statements on one line} - silentmode: boolean; {don't even generate error messages} - - {lexical scanner variables} - symbolfound: boolean; {success from lexical analysis} - newinputline: boolean; {true when no chars as yet on new line} - endfile: boolean; {eof read} - blankline: boolean; {true when blank line is ok to output} - ch: char; {current character for lexical analysis} - doubleperiod: boolean; {set if double period found} - column: integer; {input column for last char input} - sym: symbols; {current basic symbol from lex} - symbol: array [lineindex] of char; {workspace for lex analysis} - symlen: 0..maxlinelen; {index into WINDOW array} - {output character buffering} - unwritten: charbuffer; {unwritten characters} - charcount: integer; {characters written so far} - oldest: bufferindex; {oldest char in buffer} - - {error handling variables} - overflows: 0..maxint; {number of line overflows} - firstoverflow: 0..maxint; {line where first overflow occured} - comoverflows: 0..maxint; {number of comment overflows} - firstcomoverflow: 0..maxint; {line of first comment overflow} - - external function @cmd: stringp; - external procedure initialize; - - {file i/o entry points} - external procedure abort(line: integer; - kind: abortkind); - external procedure comentoverflow; - external procedure finaldata; - external procedure flushbuffer; - external procedure getchar; - external function getfiles: boolean; - external procedure lineoverflow; - external procedure writea(ch: char); - - {comment entry points} - external procedure comentchar; - external procedure commanddirectives; - - {parser entry points} - external procedure doprogram; - external procedure doblock; - external procedure statlist; - -{$p-----------------* - | Output Utilities | - *------------------*} - - - procedure newline(indent: lineindex); - - begin {start a new line and indent it as specified} - {fake a character, then change it} - writea(' '); - with unwritten[oldest] do - begin - actionis := beginline; - spacing := indent; - end; - writecol := indent; - currentline := currentline + 1; - end; {newline} - - - procedure printline(indent: integer); - - begin {print a line for formatting} - if formatting then - begin - if blankline and (currentline > 0) then - newline(0); - newline(indent); - end; - blankline := false; - symbolbreak := 0; - end; {printline} - - - procedure space(n: integer); - - begin {space n characters} - if formatting then - begin - writea(' '); - with unwritten[oldest] do - begin - actionis := spaces; - if n > 0 then - spacing := n - else - spacing := 0; - end; - writecol := writecol + n - 1; - end; - end; {space} - - - procedure flushsymbol; - - var - p: lineindex; {induction var} - - begin {flush any accumulated characters in the buffer} - if not symwritten then - begin - symwritten := true; - newline(writecol); - for p := 1 to symlen do - writea(symbol[p]); - end; - flushbuffer; - newline(column); - end; {flushsymbol} - -{$p--------------------* - | Indentation Control | - *---------------------*} - - - procedure indentplus(delta: integer; - line: integer); - - begin {increment indentation and check for overflow} - if indentlevel > maxlinelen then - abort(line, nesting); - indentlevel := indentlevel + 1; - indentstate[indentlevel] := indent; - indent := indent + delta; - if indent > outlinelen then - indent := outlinelen - else if indent < 0 then - indent := 0; - end; {indentplus} - - - procedure undent; - - begin {reset indent to the last value} - indent := indentstate[indentlevel]; - indentlevel := indentlevel - 1; - end; {undent} - -{$p-------------------------* - | Lexical Scanner, Utility | - *--------------------------*} - {Place characters of current basic symbol on output TARGET line. - Invoke lexical analysis to assemble next basic symbol in WINDOW - and determine type. SYM is set equal to symbol type. Comments - are transparent to the analysis. } - - - procedure symbolput(thischar: char); - - begin {ch to symbol} - symlen := symlen + 1; - symbol[symlen] := thischar; - getchar; - end {symbolput} ; - -{*------------* - | print char | - *------------*} - - - procedure printchar; - - begin {print ASCII chars not belonging to Pascal} - if writecol >= outlinelen then - printline(indent + continuespaces); - if formatting then - writea(ch); - getchar; - end {printchar} ; - -{*-------------* - | scanblanks | - *-------------*} - - - procedure scanblanks; - - begin {scan off blanks in the input} - while ((ch = ' ') or (ch = chr(tab))) and not endfile do - getchar; - end; - -{$p----------------* - | String Constant | - *-----------------*} - - - procedure stringcnstnt; - - var - stringend: boolean; - - begin {character string to symbol} - newinputline := false; - symbolfound := true; - sym := stringcon; - stringend := false; - repeat - symbolput(ch); - if ch = '''' then - begin - symbolput(ch); - stringend := ch <> '''' - end; - until newinputline or stringend; - if not stringend then - abort(linenumber, syntax); - end {stringcnstnt} ; - -{$p------------------------* - | Test for Reserved Words | - *-------------------------*} - - - procedure testresvwrd; - - var - id: wordtype; - index: 1..noreswords; - p: 1..maxwordlen; - - begin {$R- test for reserved word} - sym := identifier; {default} - if (2 <= symlen) and (symlen <= maxwordlen) then - begin {possible length} - for p := 1 to maxwordlen do - if p > symlen then - id[p] := ' ' - else - id[p] := lowercase[symbol[p]]; - with reslen[symlen] do - begin {length index search} - index := lowindex; - while index <= hiindex do - if resvwrd[index] = id then - begin - sym := ressymbol[index]; - exit - end - else - index := index + 1; - end {length index search} ; - end {possible length} - end { $ R + testresvwrd} ; - -{$p----------------------------* - | Identifier or Reserved Word | - *-----------------------------*} - - - procedure alphachar; - - var - p: lineindex; {induction var} - lastunderscore: boolean; {true if last char underscore} - - begin {identifier or reserved word to symbol} - newinputline := false; - symbolfound := true; - lastunderscore := true; - while ch in letters + digits do - begin - if portabilitymode then - begin - if ch = '_' then - begin - lastunderscore := true; - getchar; - end - else if lastunderscore then - begin - lastunderscore := false; - symbolput(uppercase[ch]); - end - else - symbolput(lowercase[ch]) - end - else - symbolput(ch); - end; {while} - testresvwrd; - if sym = identifier then - begin - if not (litcopy or portabilitymode) then - if ucidents then - for p := 1 to symlen do - symbol[p] := uppercase[symbol[p]] - else - for p := 1 to symlen do - symbol[p] := lowercase[symbol[p]] - end - else {reserved word} - begin - if portabilitymode or (not litcopy) then - if ucreswords then - for p := 1 to symlen do - symbol[p] := uppercase[symbol[p]] - else - for p := 1 to symlen do - symbol[p] := lowercase[symbol[p]]; - end; - end {alpha char} ; - -{$p-------* - | Number | - *--------*} - - - procedure hexcnstnt; - - begin {hexadecimal number to symbol} - newinputline := false; - symbolfound := true; - sym := number; - symbolput(ch); { '$' } - while ch in ['0'..'9', 'A'..'F', 'a'..'f'] do - symbolput(uppercase[ch]); - end {hexcnstnt} ; - - - procedure numericchar; - - begin {unsigned number to symbol} - newinputline := false; - symbolfound := true; - sym := number; - if ch = '#' then - symbolput(ch); - while ch in digits do {integer or fractional portion} - symbolput(ch); - if ch = '.' then - begin - symbolput(ch); - if ch = '.' then - begin {actually subrange, must fudge} - symlen := symlen - 1; {erase period} - doubleperiod := true; - end - else - while ch in digits do - symbolput(ch); - end; - if (ch = 'E') or (ch = 'e') then - begin {exponential portion} - symbolput('E'); - if (ch = '+') or (ch = '-') then {sign} - symbolput(ch); - while ch in digits do {characteristic} - symbolput(ch); - end {exponential} - else if ch = '$' then - hexcnstnt; - end {numeric char} ; - -{$p------------------* - | Special Character | - *-------------------*} - - - procedure specialchar; - - begin {operators or delimiters to symbol} - symbolfound := true; {untrue only for comments} - newinputline := false; - case ch of {special symbols} - '+': - begin {plus} - sym := plus; - symbolput(ch); - end; - '-': - begin {minus} - sym := minus; - symbolput(ch); - end; - '*': - begin {multiply} - sym := mult; - symbolput(ch); - end; - '/': - begin {divide} - sym := divide; - symbolput(ch); - end; - '.': - begin {subrange or period} - sym := period; - symbolput(ch); - if doubleperiod then - begin {fudge a subrange} - symbol[2] := '.'; - symlen := 2; - sym := subrange; - end - else if ch = '.' then - begin {subrange} - sym := subrange; - symbolput(ch); - end; {subrange} - doubleperiod := false; - end; - ',': - begin {comma} - sym := comma; - symbolput(ch); - end; - ';': - begin {semicolon} - sym := semicolon; - symbolput(ch); - end; - ':': - begin {becomes, or colon} - sym := colon; - symbolput(ch); - if ch = '=' then - begin {becomes} - sym := becomes; - symbolput(ch); - end - end; - '=': - begin {equals} - sym := equal; - symbolput(ch); - end; - '<': - begin {less than, less equal, not equal} - sym := lessthan; - symbolput(ch); - if ch = '=' then - begin {less than or equal} - sym := lessequal; - symbolput(ch); - end - else if ch = '>' then - begin {not equal} - sym := notequal; - symbolput(ch); - end - end; - '>': - begin {greater equal, greater than} - sym := greatthan; - symbolput(ch); - if ch = '=' then - begin {greater than or equals} - sym := greatequal; - symbolput(ch); - end - end; - '^': - begin {pointer} - sym := pointer; - symbolput('^'); - end; - '''': - stringcnstnt; - ')': - begin {close parenthesis} - sym := closeparen; - symbolput(ch); - end; - '[': - begin {open bracket} - sym := openbrack; - symbolput(ch); - end; - ']': - begin {close bracket} - sym := closebrack; - symbolput(ch); - end; - '~', '?': - begin {bitwise 'not'} - sym := notsy; - symbolput(ch); - end; - '!', '|': - begin {bitwise 'or'} - sym := orsy; - symbolput(ch); - end; - '&': - begin {bitwise 'and'} - sym := andsy; - symbolput(ch); - end; - end {case} ; - end {specialchar} ; - -{$p--------------------------* - | Get Next Symbol (getsym) | - *---------------------------*} - - - procedure getsym; - - begin {extract next basic sym from text} - symlen := 0; - symbolfound := false; - symwritten := false; - repeat - scanblanks; - if endfile then - begin - sym := textend; - symbolfound := true - end - else if ((ord(ch) >= 0) and (ord(ch) <= 31)) or (ord(ch) = - 127) then - getchar - else - case ch of {lexical analysis} - - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '#': - numericchar; - - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', - 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', - 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', - 'w', 'x', 'y', 'z', '@', '_': - alphachar; - - ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', - '[', ']', '^', '''', '~', '?', '!', '|', '&': - specialchar; - - '(', '{': - comentchar; - - '%', '\', '`', '}', '"': - printchar; - end {case} - until symbolfound - end {getsym} ; - -{$p-------* - | Putsym | - *--------*} - - - procedure putsym; - - var - before: lineindex; {spaces before this character} - symindent: integer; {indentation before this symbol} - i: lineindex; {induction var} - overflowerror: boolean; {delays error message till symbol - printed} - - - function spacesbefore(thissym, oldsym: symbols): lineindex; - - var - spbefore: lineindex; - - begin {determine the number of spaces before a symbol} - if ((thissym in alphanumerics) and (oldsym in alphanumerics)) or - (thissym in spacebefore) or (oldsym in spaceafter) then - spbefore := 1 - else - spbefore := 0; - spacesbefore := spbefore; - end; {spacesbefore} - - begin {putsym: put the current symbol to the output, taking care of - spaces before the symbol. This also handles full lines, and - tries to break lines at a convenient place} - overflowerror := false; - before := spacesbefore(sym, lastsym); - if before + symlen + writecol > outlinelen then - begin {must handle an end of line} - if formatting and (symbolbreak > 0) and (charcount - - symbolbreak < bufsize) and (before + symlen + - indent + writecol - breakcol <= outlinelen) then - begin - with unwritten[symbolbreak mod bufsize] do - begin - actionis := beginline; - spacing := indent - end; - writecol := writecol - breakcol + indent; - currentline := currentline + 1; - end - else - begin {no good break spot, break it here} - symindent := outlinelen - symlen; - if symindent > indent then - symindent := indent - else if symindent < 0 then - begin - symindent := 0; - overflowerror := true; - end; - printline(symindent); - end; - symbolbreak := 0; - end; {if line overflow} - if unwritten[oldest].actionis = beginline then - before := 0; - if before > 0 then - if formatting and (symbolbreak = charcount) then - with unwritten[symbolbreak mod bufsize] do - begin - writecol := writecol - spacing + before; - spacing := before; - end - else - space(before); - if formatting then - for i := 1 to symlen do - writea(symbol[i]); - lastsym := sym; - symwritten := true; - if overflowerror then - lineoverflow; - end; {putsym} - -{$p------------------------* - | Parser Utility Routines | - *-------------------------*} - -{*---------* - | nextsym | - *---------*} - - - procedure nextsym; - - begin {output current sym and input next} - if sym <> textend then - begin {symbol} - if not symwritten then - putsym; - getsym; - end {symbol} - end {nextsym} ; - -{*-----------* - | Check sym | - *-----------*} - - - procedure checksym(desired: symbols; - line: integer); - - begin - if sym = desired then - nextsym - else - abort(line, syntax); - end; {checksym} - -{*-----------------* - | Next on newline | - *-----------------*} - - - procedure nextonnewline(spacing, delta: integer); - - begin {space "spacing" lines, indent, put new symbol, and increment - indent by "delta"} - if blankline or (currentline = 0) then - spacing := spacing - 1; - repeat - if spacing > 0 then - printline(0) - else - printline(indent); - spacing := spacing - 1; - until spacing < 0; - indentplus(delta, linenumber); - statindent := indent; - nextsym; - end; {nextonnewline} - -{*------------------* - | Set symbol break | - *------------------*} - - - procedure setsymbolbreak; - - begin {mark a good spot to break a line} - space(0); - symbolbreak := charcount; - breakcol := writecol; - end; {setsymbolbreak} - -{*------------------* - | Log symbol start | - *------------------*} - - - procedure logsymbolstart(var log: collog); - - begin {log the starting loc of the next symbol} - with log do - begin - logchar := charcount + 1; - logcol := writecol + 1; - logline := currentline; - end; - end; {logsymbolstart} - -{$p-------------------* - | Statement bunching | - *--------------------*} - - - procedure bunch(start: collog; {start of statement} - var success: boolean); - - begin {move a statement up to the previous line if it will fit} - with start do - if formatting and (charcount - logchar < bufsize) and (logline + - 1 = currentline) and (writecol - indent + logcol < - outlinelen) then - begin {move it up, adjusting things as we go} - with unwritten[logchar mod bufsize] do - begin - actionis := spaces; - spacing := 1; - writecol := writecol - indent + logcol + 1; - end; - currentline := currentline - 1; - success := true; - end - else - success := false; - end; {bunch} - -{*-----------------* - | Bunchstatements | - *-----------------*} - - - procedure bunchstatement(start: collog); - - var - tabint: integer; {tab interval} - nexttab: integer; {next tab location} - - begin {see if we can put multiple statements on a line} - if formatting then - with start do - begin - tabint := (outlinelen - indent) div statsperline; - if tabint = 0 then - tabint := 1; - if logcol = indent + 1 then - logcol := indent; - {fudge for start} - nexttab := (logcol - indent + tabint - 1) div - tabint * tabint + indent; - if (nexttab > indent) and (logline + 1 = currentline) and - (charcount - logchar < bufsize) and (nexttab + - writecol - indent <= outlinelen) then - begin {move up to prior line and fiddle pointers} - with unwritten[logchar mod bufsize] do - begin - actionis := spaces; - spacing := nexttab - logcol + 1; - end; - writecol := nexttab + writecol - indent; - currentline := currentline - 1; - end; - end; - end; {bunchstatement} - -{$P--------------------------* - | PROGRAM LOOP: processtext | - *---------------------------*} - - - procedure processtext; - - begin {processtext} - if sym in progset then - doprogram - else if sym in blockbegsys then - repeat - doblock - until sym <> semicolon - else if sym in statset then - statlist; - if sym <> textend then - abort(linenumber, syntax); - flushbuffer; - end {processtext} ; - -{*--------------* - | BEGIN PASMAT | - *--------------*} - - begin {pasmat} -(* @sfp := @sfp - stacksize; {more stack space} *) - strptr := @cmd; {get command line} - clinearg := strptr^; - initialize; - commanddirectives; - if not silentmode then - writeln(titleheader); - getchar; {lead one char} - getsym; {lead one symbol} - processtext; - finaldata; - end {pasmat} . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PASMAT.SRC b/software/CPM/CPM22_MTPUG_10/PASMAT.SRC deleted file mode 100644 index 05c419b..0000000 --- a/software/CPM/CPM22_MTPUG_10/PASMAT.SRC +++ /dev/null @@ -1,955 +0,0 @@ - {*-----------------------------------* - | PASMAT: PAScal source code forMAT | - *-----------------------------------*} -{$K0} {$K7} {$K12} {$K13} {$K14} {$K15} -{$Q2 for parser recursion} -program pasmat; -{$p---------------------* - | Labels and Constants | - *----------------------*} - - const - titleheader = 'Pasmat 3.14, revised 14 Dec 82'; - maxlinelen = 132; {max output line length} - bufsize = 134; {output buffer size, > maxlinelen} - maxwordlen = 9; {reserved words char size} - noreswords = 53; {number of reserved words} - defaultoutline = 72; {default output line length} - defaulttabspaces = 2; {logical indentation increments} - defaultcomentspaces = 1; {spacing before and after comments} - tab = 9; {ord of tab character} - tabinterval = 8; {standard tab interval for CP/M} - stacksize = 256; {extra hardware stack size} - ibufsize = 2047; {size of input buffer - 1} -{$p------* - | Types | - *-------*} - - type - symbols = (abslutesy, andsy, arraysy, beginsy, casesy, constsy, - divsy, dosy, downtosy, elsesy, endsy, externsy, filesy, - forsy, forwardsy, funcsy, gotosy, ifsy, insy, intruptsy, - labelsy, modsy, modendsy, modulesy, nilsy, notsy, ofsy, - orsy, othwisesy, packedsy, procsy, programsy, recordsy, - repeatsy, setsy, stringsy, thensy, tosy, typesy, untilsy, - varsy, whilesy, withsy, plus, minus, mult, divide, - becomes, period, comma, semicolon, colon, equal, - notequal, lessthan, lessequal, greatequal, greatthan, - pointer, subrange, apostrophy, openparen, closeparen, - openbrack, closebrack, identifier, number, stringcon, - coment, textend, dummysy); - {basic symbol enumeration} - setofsyms = set of symbols; {set ops on basic symbols} - wordtype = packed array [1..maxwordlen] of char; - {reserved} - lentabletype = {index into reserved word table by length} - record - lowindex, hiindex: 1..noreswords; - end; - lineindex = 0..maxlinelen; - actions = (graphic, spaces, beginline); - bufferindex = 0..bufsize; {output buffer index} - charbuffer = array [bufferindex] of - record - case actionis: actions of - spaces, beginline: - (spacing: lineindex); - graphic: - (character: char) - end; - collog = - record - logchar: integer; {charcount at time of log} - logcol: lineindex; {writecol at time of log} - logline: integer; {currentline at time of log} - end; - abortkind = (syntax, nesting, comformat); {error types} - stringp = ^string; -{$p----------* - | Variables | - *-----------*} - - var - {CP/M interface control variables} - @sfp: external integer; {initial stack pointer} - strptr: stringp; - clinearg: string[127]; - - {Structured Constants} - stdsyms: setofsyms; {symbols valid in standard pascal} - validdirectives: set of char; {valid formatter directives} - spacebefore, spaceafter: setofsyms; {individual symbol spacing} - alphanumerics: setofsyms; {alpha symbols} - resvwrd: array [1..noreswords] of wordtype; {reserved word table} - ressymbol: array [1..noreswords] of symbols; {symbols for resvwrd} - reslen: array [2..maxwordlen] of lentabletype; { length index} - digits, letters: set of char; - uppercase: array [char] of char; - lowercase: array [char] of char; {case conversion tables} - progset, blockbegsys, statset: setofsyms; {syntactic symbol types} - cnstnts: setofsyms; {symbols which can be constants} - headingbegsys: setofsyms; {symbols which begin a block heading} - typebegsys: setofsyms; {type beginning symbols} - exprbegsys: setofsyms; {expression beginning symbols} - relops: setofsyms; {relational operators} - arithops: setofsyms; {arithmetic operators} - - {Formatting variables} - indent: integer; {current number of indentation spaces} - statindent: integer; {indentation for major statement} - writecol: integer; {current output column} - symbolbreak: integer; {break symbol for putsym} - breakcol: integer; {output column for putsym} - lastsym: symbols; {last symbol processed} - symwritten: boolean; {last symbol was written} - indentstate: array [lineindex] of lineindex; - indentlevel: lineindex; {these make a stack of indent levels} - - {comment formatting} - statbreak: integer; {character where line can be broken} - statblanks: boolean; {set if blank was last char} - firstinputline: boolean; {set if first input line} - - {miscellaneous} - outputline: integer; {line numbers for output} - currentline: integer; {line number being written} - inputline: integer; {input line number} - linenumber: integer; - - {Formatting Control Values} - outlinelen: integer; {current output line length} - onehalfline: integer; {significant point upon line} - fiveeighthline: integer; { "} - threefourthline: integer; {"} - tabspaces: integer; {spaces to indent for each level} - continuespaces: integer; {spaces to indent continuation line} - comentspaces: integer; {spaces before statement comment} - statsperline: integer; {statements per line} - - {Flags to direct formatting} - ucreswords: boolean; {convert reserved words to UC} - ucidents: boolean; {convert identifiers to UC} - litcopy: boolean; {copy identifiers and reserved words literally} - portabilitymode: boolean; {eliminate underscores} - formatting: boolean; {do formatting (otherwise, copy)} - newformatting: boolean; {start formatting at end of comment} - bunching: boolean; {bunch statements on one line} - silentmode: boolean; {don't even generate error messages} - - {lexical scanner variables} - symbolfound: boolean; {success from lexical analysis} - newinputline: boolean; {true when no chars as yet on new line} - endfile: boolean; {eof read} - blankline: boolean; {true when blank line is ok to output} - ch: char; {current character for lexical analysis} - doubleperiod: boolean; {set if double period found} - column: integer; {input column for last char input} - sym: symbols; {current basic symbol from lex} - symbol: array [lineindex] of char; {workspace for lex analysis} - symlen: 0..maxlinelen; {index into WINDOW array} - {output character buffering} - unwritten: charbuffer; {unwritten characters} - charcount: integer; {characters written so far} - oldest: bufferindex; {oldest char in buffer} - - {error handling variables} - overflows: 0..maxint; {number of line overflows} - firstoverflow: 0..maxint; {line where first overflow occured} - comoverflows: 0..maxint; {number of comment overflows} - firstcomoverflow: 0..maxint; {line of first comment overflow} - - external function @cmd: stringp; - external procedure initialize; - - {file i/o entry points} - external procedure abort(line: integer; - kind: abortkind); - external procedure comentoverflow; - external procedure finaldata; - external procedure flushbuffer; - external procedure getchar; - external function getfiles: boolean; - external procedure lineoverflow; - external procedure writea(ch: char); - - {comment entry points} - external procedure comentchar; - external procedure commanddirectives; - - {parser entry points} - external procedure doprogram; - external procedure doblock; - external procedure statlist; - -{$p-----------------* - | Output Utilities | - *------------------*} - - - procedure newline(indent: lineindex); - - begin {start a new line and indent it as specified} - {fake a character, then change it} - writea(' '); - with unwritten[oldest] do - begin - actionis := beginline; - spacing := indent; - end; - writecol := indent; - currentline := currentline + 1; - end; {newline} - - - procedure printline(indent: integer); - - begin {print a line for formatting} - if formatting then - begin - if blankline and (currentline > 0) then - newline(0); - newline(indent); - end; - blankline := false; - symbolbreak := 0; - end; {printline} - - - procedure space(n: integer); - - begin {space n characters} - if formatting then - begin - writea(' '); - with unwritten[oldest] do - begin - actionis := spaces; - if n > 0 then - spacing := n - else - spacing := 0; - end; - writecol := writecol + n - 1; - end; - end; {space} - - - procedure flushsymbol; - - var - p: lineindex; {induction var} - - begin {flush any accumulated characters in the buffer} - if not symwritten then - begin - symwritten := true; - newline(writecol); - for p := 1 to symlen do - writea(symbol[p]); - end; - flushbuffer; - newline(column); - end; {flushsymbol} - -{$p--------------------* - | Indentation Control | - *---------------------*} - - - procedure indentplus(delta: integer; - line: integer); - - begin {increment indentation and check for overflow} - if indentlevel > maxlinelen then - abort(line, nesting); - indentlevel := indentlevel + 1; - indentstate[indentlevel] := indent; - indent := indent + delta; - if indent > outlinelen then - indent := outlinelen - else if indent < 0 then - indent := 0; - end; {indentplus} - - - procedure undent; - - begin {reset indent to the last value} - indent := indentstate[indentlevel]; - indentlevel := indentlevel - 1; - end; {undent} - -{$p-------------------------* - | Lexical Scanner, Utility | - *--------------------------*} - {Place characters of current basic symbol on output TARGET line. - Invoke lexical analysis to assemble next basic symbol in WINDOW - and determine type. SYM is set equal to symbol type. Comments - are transparent to the analysis. } - - - procedure symbolput(thischar: char); - - begin {ch to symbol} - symlen := symlen + 1; - symbol[symlen] := thischar; - getchar; - end {symbolput} ; - -{*------------* - | print char | - *------------*} - - - procedure printchar; - - begin {print ASCII chars not belonging to Pascal} - if writecol >= outlinelen then - printline(indent + continuespaces); - if formatting then - writea(ch); - getchar; - end {printchar} ; - -{*-------------* - | scanblanks | - *-------------*} - - - procedure scanblanks; - - begin {scan off blanks in the input} - while ((ch = ' ') or (ch = chr(tab))) and not endfile do - getchar; - end; - -{$p----------------* - | String Constant | - *-----------------*} - - - procedure stringcnstnt; - - var - stringend: boolean; - - begin {character string to symbol} - newinputline := false; - symbolfound := true; - sym := stringcon; - stringend := false; - repeat - symbolput(ch); - if ch = '''' then - begin - symbolput(ch); - stringend := ch <> '''' - end; - until newinputline or stringend; - if not stringend then - abort(linenumber, syntax); - end {stringcnstnt} ; - -{$p------------------------* - | Test for Reserved Words | - *-------------------------*} - - - procedure testresvwrd; - - var - id: wordtype; - index: 1..noreswords; - p: 1..maxwordlen; - - begin {$R- test for reserved word} - sym := identifier; {default} - if (2 <= symlen) and (symlen <= maxwordlen) then - begin {possible length} - for p := 1 to maxwordlen do - if p > symlen then - id[p] := ' ' - else - id[p] := lowercase[symbol[p]]; - with reslen[symlen] do - begin {length index search} - index := lowindex; - while index <= hiindex do - if resvwrd[index] = id then - begin - sym := ressymbol[index]; - exit - end - else - index := index + 1; - end {length index search} ; - end {possible length} - end { $ R + testresvwrd} ; - -{$p----------------------------* - | Identifier or Reserved Word | - *-----------------------------*} - - - procedure alphachar; - - var - p: lineindex; {induction var} - lastunderscore: boolean; {true if last char underscore} - - begin {identifier or reserved word to symbol} - newinputline := false; - symbolfound := true; - lastunderscore := true; - while ch in letters + digits do - begin - if portabilitymode then - begin - if ch = '_' then - begin - lastunderscore := true; - getchar; - end - else if lastunderscore then - begin - lastunderscore := false; - symbolput(uppercase[ch]); - end - else - symbolput(lowercase[ch]) - end - else - symbolput(ch); - end; {while} - testresvwrd; - if sym = identifier then - begin - if not (litcopy or portabilitymode) then - if ucidents then - for p := 1 to symlen do - symbol[p] := uppercase[symbol[p]] - else - for p := 1 to symlen do - symbol[p] := lowercase[symbol[p]] - end - else {reserved word} - begin - if portabilitymode or (not litcopy) then - if ucreswords then - for p := 1 to symlen do - symbol[p] := uppercase[symbol[p]] - else - for p := 1 to symlen do - symbol[p] := lowercase[symbol[p]]; - end; - end {alpha char} ; - -{$p-------* - | Number | - *--------*} - - - procedure hexcnstnt; - - begin {hexadecimal number to symbol} - newinputline := false; - symbolfound := true; - sym := number; - symbolput(ch); { '$' } - while ch in ['0'..'9', 'A'..'F', 'a'..'f'] do - symbolput(uppercase[ch]); - end {hexcnstnt} ; - - - procedure numericchar; - - begin {unsigned number to symbol} - newinputline := false; - symbolfound := true; - sym := number; - if ch = '#' then - symbolput(ch); - while ch in digits do {integer or fractional portion} - symbolput(ch); - if ch = '.' then - begin - symbolput(ch); - if ch = '.' then - begin {actually subrange, must fudge} - symlen := symlen - 1; {erase period} - doubleperiod := true; - end - else - while ch in digits do - symbolput(ch); - end; - if (ch = 'E') or (ch = 'e') then - begin {exponential portion} - symbolput('E'); - if (ch = '+') or (ch = '-') then {sign} - symbolput(ch); - while ch in digits do {characteristic} - symbolput(ch); - end {exponential} - else if ch = '$' then - hexcnstnt; - end {numeric char} ; - -{$p------------------* - | Special Character | - *-------------------*} - - - procedure specialchar; - - begin {operators or delimiters to symbol} - symbolfound := true; {untrue only for comments} - newinputline := false; - case ch of {special symbols} - '+': - begin {plus} - sym := plus; - symbolput(ch); - end; - '-': - begin {minus} - sym := minus; - symbolput(ch); - end; - '*': - begin {multiply} - sym := mult; - symbolput(ch); - end; - '/': - begin {divide} - sym := divide; - symbolput(ch); - end; - '.': - begin {subrange or period} - sym := period; - symbolput(ch); - if doubleperiod then - begin {fudge a subrange} - symbol[2] := '.'; - symlen := 2; - sym := subrange; - end - else if ch = '.' then - begin {subrange} - sym := subrange; - symbolput(ch); - end; {subrange} - doubleperiod := false; - end; - ',': - begin {comma} - sym := comma; - symbolput(ch); - end; - ';': - begin {semicolon} - sym := semicolon; - symbolput(ch); - end; - ':': - begin {becomes, or colon} - sym := colon; - symbolput(ch); - if ch = '=' then - begin {becomes} - sym := becomes; - symbolput(ch); - end - end; - '=': - begin {equals} - sym := equal; - symbolput(ch); - end; - '<': - begin {less than, less equal, not equal} - sym := lessthan; - symbolput(ch); - if ch = '=' then - begin {less than or equal} - sym := lessequal; - symbolput(ch); - end - else if ch = '>' then - begin {not equal} - sym := notequal; - symbolput(ch); - end - end; - '>': - begin {greater equal, greater than} - sym := greatthan; - symbolput(ch); - if ch = '=' then - begin {greater than or equals} - sym := greatequal; - symbolput(ch); - end - end; - '^': - begin {pointer} - sym := pointer; - symbolput('^'); - end; - '''': - stringcnstnt; - ')': - begin {close parenthesis} - sym := closeparen; - symbolput(ch); - end; - '[': - begin {open bracket} - sym := openbrack; - symbolput(ch); - end; - ']': - begin {close bracket} - sym := closebrack; - symbolput(ch); - end; - '~', '?': - begin {bitwise 'not'} - sym := notsy; - symbolput(ch); - end; - '!', '|': - begin {bitwise 'or'} - sym := orsy; - symbolput(ch); - end; - '&': - begin {bitwise 'and'} - sym := andsy; - symbolput(ch); - end; - end {case} ; - end {specialchar} ; - -{$p--------------------------* - | Get Next Symbol (getsym) | - *---------------------------*} - - - procedure getsym; - - begin {extract next basic sym from text} - symlen := 0; - symbolfound := false; - symwritten := false; - repeat - scanblanks; - if endfile then - begin - sym := textend; - symbolfound := true - end - else if ((ord(ch) >= 0) and (ord(ch) <= 31)) or (ord(ch) = - 127) then - getchar - else - case ch of {lexical analysis} - - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '$', '#': - numericchar; - - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', - 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', - 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', - 'w', 'x', 'y', 'z', '@', '_': - alphachar; - - ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', - '[', ']', '^', '''', '~', '?', '!', '|', '&': - specialchar; - - '(', '{': - comentchar; - - '%', '\', '`', '}', '"': - printchar; - end {case} - until symbolfound - end {getsym} ; - -{$p-------* - | Putsym | - *--------*} - - - procedure putsym; - - var - before: lineindex; {spaces before this character} - symindent: integer; {indentation before this symbol} - i: lineindex; {induction var} - overflowerror: boolean; {delays error message till symbol - printed} - - - function spacesbefore(thissym, oldsym: symbols): lineindex; - - var - spbefore: lineindex; - - begin {determine the number of spaces before a symbol} - if ((thissym in alphanumerics) and (oldsym in alphanumerics)) or - (thissym in spacebefore) or (oldsym in spaceafter) then - spbefore := 1 - else - spbefore := 0; - spacesbefore := spbefore; - end; {spacesbefore} - - begin {putsym: put the current symbol to the output, taking care of - spaces before the symbol. This also handles full lines, and - tries to break lines at a convenient place} - overflowerror := false; - before := spacesbefore(sym, lastsym); - if before + symlen + writecol > outlinelen then - begin {must handle an end of line} - if formatting and (symbolbreak > 0) and (charcount - - symbolbreak < bufsize) and (before + symlen + - indent + writecol - breakcol <= outlinelen) then - begin - with unwritten[symbolbreak mod bufsize] do - begin - actionis := beginline; - spacing := indent - end; - writecol := writecol - breakcol + indent; - currentline := currentline + 1; - end - else - begin {no good break spot, break it here} - symindent := outlinelen - symlen; - if symindent > indent then - symindent := indent - else if symindent < 0 then - begin - symindent := 0; - overflowerror := true; - end; - printline(symindent); - end; - symbolbreak := 0; - end; {if line overflow} - if unwritten[oldest].actionis = beginline then - before := 0; - if before > 0 then - if formatting and (symbolbreak = charcount) then - with unwritten[symbolbreak mod bufsize] do - begin - writecol := writecol - spacing + before; - spacing := before; - end - else - space(before); - if formatting then - for i := 1 to symlen do - writea(symbol[i]); - lastsym := sym; - symwritten := true; - if overflowerror then - lineoverflow; - end; {putsym} - -{$p------------------------* - | Parser Utility Routines | - *-------------------------*} - -{*---------* - | nextsym | - *---------*} - - - procedure nextsym; - - begin {output current sym and input next} - if sym <> textend then - begin {symbol} - if not symwritten then - putsym; - getsym; - end {symbol} - end {nextsym} ; - -{*-----------* - | Check sym | - *-----------*} - - - procedure checksym(desired: symbols; - line: integer); - - begin - if sym = desired then - nextsym - else - abort(line, syntax); - end; {checksym} - -{*-----------------* - | Next on newline | - *-----------------*} - - - procedure nextonnewline(spacing, delta: integer); - - begin {space "spacing" lines, indent, put new symbol, and increment - indent by "delta"} - if blankline or (currentline = 0) then - spacing := spacing - 1; - repeat - if spacing > 0 then - printline(0) - else - printline(indent); - spacing := spacing - 1; - until spacing < 0; - indentplus(delta, linenumber); - statindent := indent; - nextsym; - end; {nextonnewline} - -{*------------------* - | Set symbol break | - *------------------*} - - - procedure setsymbolbreak; - - begin {mark a good spot to break a line} - space(0); - symbolbreak := charcount; - breakcol := writecol; - end; {setsymbolbreak} - -{*------------------* - | Log symbol start | - *------------------*} - - - procedure logsymbolstart(var log: collog); - - begin {log the starting loc of the next symbol} - with log do - begin - logchar := charcount + 1; - logcol := writecol + 1; - logline := currentline; - end; - end; {logsymbolstart} - -{$p-------------------* - | Statement bunching | - *--------------------*} - - - procedure bunch(start: collog; {start of statement} - var success: boolean); - - begin {move a statement up to the previous line if it will fit} - with start do - if formatting and (charcount - logchar < bufsize) and (logline + - 1 = currentline) and (writecol - indent + logcol < - outlinelen) then - begin {move it up, adjusting things as we go} - with unwritten[logchar mod bufsize] do - begin - actionis := spaces; - spacing := 1; - writecol := writecol - indent + logcol + 1; - end; - currentline := currentline - 1; - success := true; - end - else - success := false; - end; {bunch} - -{*-----------------* - | Bunchstatements | - *-----------------*} - - - procedure bunchstatement(start: collog); - - var - tabint: integer; {tab interval} - nexttab: integer; {next tab location} - - begin {see if we can put multiple statements on a line} - if formatting then - with start do - begin - tabint := (outlinelen - indent) div statsperline; - if tabint = 0 then - tabint := 1; - if logcol = indent + 1 then - logcol := indent; - {fudge for start} - nexttab := (logcol - indent + tabint - 1) div - tabint * tabint + indent; - if (nexttab > indent) and (logline + 1 = currentline) and - (charcount - logchar < bufsize) and (nexttab + - writecol - indent <= outlinelen) then - begin {move up to prior line and fiddle pointers} - with unwritten[logchar mod bufsize] do - begin - actionis := spaces; - spacing := nexttab - logcol + 1; - end; - writecol := nexttab + writecol - indent; - currentline := currentline - 1; - end; - end; - end; {bunchstatement} - -{$P--------------------------* - | PROGRAM LOOP: processtext | - *---------------------------*} - - - procedure processtext; - - begin {processtext} - if sym in progset then - doprogram - else if sym in blockbegsys then - repeat - doblock - until sym <> semicolon - else if sym in statset then - statlist; - if sym <> textend then - abort(linenumber, syntax); - flushbuffer; - end {processtext} ; - -{*--------------* - | BEGIN PASMAT | - *--------------*} - - begin {pasmat} - @sfp := @sfp - stacksize; {more stack space} - strptr := @cmd; {get command line} - clinearg := strptr^; - initialize; - commanddirectives; - if not silentmode then - writeln(titleheader); - getchar; {lead one char} - getsym; {lead one symbol} - processtext; - finaldata; - end {pasmat} . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PASMAT.SU b/software/CPM/CPM22_MTPUG_10/PASMAT.SU deleted file mode 100644 index 6b41546..0000000 --- a/software/CPM/CPM22_MTPUG_10/PASMAT.SU +++ /dev/null @@ -1,8 +0,0 @@ -mt+86 cpmname.src -mt+86 pasmat.src -mt+86 pminit.src -mt+86 pmcoment.src -mt+86 pmparse.src -mt+86 pmfileio.src -linkmt pasmat/f - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PASMAT.SUB b/software/CPM/CPM22_MTPUG_10/PASMAT.SUB deleted file mode 100644 index 21417e2..0000000 --- a/software/CPM/CPM22_MTPUG_10/PASMAT.SUB +++ /dev/null @@ -1,9 +0,0 @@ -mtplus b:cpmname.src -mtplus b:rnb.src -mtplus b:pasmat.src -mtplus b:pminit.src -mtplus b:pmcoment.src -mtplus b:pmparse.src -mtplus b:pmfileio.src -linkmt pasmat/f - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMCOMENT.PAS b/software/CPM/CPM22_MTPUG_10/PMCOMENT.PAS deleted file mode 100644 index 7161b7f..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMCOMENT.PAS +++ /dev/null @@ -1,494 +0,0 @@ -{*--------------------------------------* - | Pasmat Comment Formatting Procedures | - *--------------------------------------*} -{$K0} {$K7} {$K12} {$K13} {$K14} {$K15} -module comment; - {$L-} - {$I PMDEFS.INC} - {$L+} - - external procedure abort(line: integer; - kind: abortkind); - external procedure comentoverflow; - external procedure getchar; - external procedure getfiles; - external procedure indentplus(delta, line: integer); - external procedure printline(indent: integer); - external procedure space(n: integer); - external procedure symbolput(thischar: char); - external procedure undent; - external procedure writea(ch: char); - -{$p------------------------* - | Block Comment Character | - *-------------------------*} - - - procedure blkcomchar(character: char); - - begin {Write a character for a block comment. The comment - formatting must be terminated with a call to - adjustblkcoment. The comment is copied exactly, and if it - will not fit within the outlinelen a message will be - printed.} - if endfile then - abort(linenumber, syntax); - if formatting then - if newinputline then - begin - if writecol > outlinelen then - comentoverflow; - printline(column); - firstinputline := false; - newinputline := false; - end - else - writea(character); - end; {blkcomchar} -{$p----------------------------* - | Statement Comment Character | - *-----------------------------*} - - - procedure breakstatcoment; - - var - extralen: integer; {length from last break} - comindent: integer; {amount to indent the extra} - - begin {Break a statement comment at the last break. Assumes - (statbreak <> 0) and (charcount - statbreak < bufsize)} - extralen := charcount - statbreak + 1; - if writecol - extralen > maxlinelen then - abort(linenumber, comformat) - else - begin {we can at least write it} - if writecol - extralen > outlinelen then - comentoverflow; - comindent := outlinelen - extralen; - if comindent < 0 then - comindent := 0 - else if comindent > indent then - comindent := indent; - with unwritten[statbreak mod bufsize] do - begin - actionis := beginline; - spacing := comindent; - end; - currentline := currentline + 1; - writecol := comindent + extralen; - end; - end; {breakstatcoment} - - - procedure statcomchar(character: char); - - begin {Take a statement character and format it. assumes that - statbreak and statblank are initialized before the first - character and are unchanged thereafter. The procedure - adjuststatcoment must be called after the comment is done} - if endfile then - abort(linenumber, syntax); - if formatting then - if (character = ' ') or (character = chr(tab)) then - begin - if not statblanks then - begin - if (writecol > outlinelen) and (statbreak <> 0) then - breakstatcoment; - writea(' '); - statbreak := charcount; - statblanks := true; - end; - end - else - begin - writea(character); - statblanks := false; - end; - end; {statcomchar} -{$p-----------------------* - | Do compiler directives | - *------------------------*} - - - procedure docompilerdirectives(block: boolean); - - begin {scan off compiler directives} - while (ch <> '[') and (ch <> '*') and (ch <> '}') do - begin - if block then - blkcomchar(ch) - else - statcomchar(ch); - getchar; - end; - end; {docompilerdirectives} -{$p----------------------* - | doformatterdirectives | - *-----------------------*} - - - procedure doformatterdirectives(block: boolean {block comment} ; - cline: boolean {control line} ); - - var - optchar: char; {which option specified} - - - procedure copyachar; - - begin {copy a character and get a new one} - if cline then - begin - if length(clinearg) = 0 then - ch := '}' - else - begin - ch := clinearg[1]; - delete(clinearg, 1, 1) - end - end - else - begin - if block then - blkcomchar(ch) - else - statcomchar(ch); - getchar; - end; - end; {copyachar} - - - procedure switchdir(var switch: boolean); - - begin {read and set a switch directive, if char is not + or -, - the value is unchanged} - if ch = '+' then - begin - switch := true; - copyachar - end - else if ch = '-' then - begin - switch := false; - copyachar - end; - end; {switchdir} - - - procedure numdir(var value: integer; - min, max: integer {limits} ); - - var - tempval: integer; {value being accumulated} - - begin {Read a numeric directive and set value. If the value is - out of bounds it is set to the limit value} - if ch = '=' then - copyachar; - if (ch >= '0') and (ch <= '9') then - begin - tempval := 0; - repeat - if tempval <= (maxint - 9) div 10 then - tempval := tempval * 10 + (ord(ch) - ord('0')); - copyachar; - until (ch < '0') or (ch > '9'); - if tempval < min then - tempval := min; - if tempval > max then - tempval := max; - value := tempval; - end; - end; {numdir} - - begin {doformatterdirectives: read a formatter directive and set - flags and value appropriately} - copyachar; - repeat - if ch in validdirectives then - begin - optchar := ch; - copyachar; - case optchar of - 'b', 'B': - switchdir(bunching); - 'c', 'C': - numdir(comentspaces, 0, maxlinelen); - 'f', 'F': - switchdir(newformatting); - 'l', 'L': - switchdir(litcopy); - 'o', 'O': - begin - numdir(outlinelen, 1, maxlinelen); - onehalfline := outlinelen div 2; - fiveeighthline := (5 * outlinelen) div 8; - threefourthline := (3 * outlinelen) div 4; - end; - 'p', 'P': - switchdir(portabilitymode); - 'q', 'Q': - switchdir(silentmode); - 'r', 'R': - switchdir(ucreswords); - 's', 'S': - numdir(statsperline, 1, maxlinelen); - 't', 'T': - begin - numdir(tabspaces, 0, maxlinelen); - continuespaces := (tabspaces + 1) div 2; - end; - 'u', 'U': - switchdir(ucidents); - end; {case} - end - else if not (ch in [']', '*', '}']) then - copyachar; - until ch in [']', '*', '}']; - if ch = ']' then - copyachar; - end; {doformatterdirectives} - -{$P------------------------* - | Command Line Directives | - *-------------------------*} - - - procedure commanddirectives; - - begin {read a command line and process directives} - getfiles; - if length(clinearg) > 0 then - doformatterdirectives(false, true); - end; {commanddirectives} - -{$P-----------------* - | Comment Handling | - *------------------*} - - - procedure docoment(block: boolean; {true if block comment} - initcol: lineindex; {starting column} - initchar: char {starting char} ); - {Handles all comments. - Comments are split into two classes which are handled separately. - Comments which begin a line are treated as "block comments" and - are not formatted. At most, it will be folded to fit on the - output line. - Comments which follow other statements on a line are formatted - like any other statement.} - -{$p---------------------* - | Adjust Block Comment | - *----------------------*} - - - procedure adjustblkcoment(startcol, startchar: integer); - - var - comlength: integer; {length of comment if on one line} - comindent: integer; {amount to indent comment} - - begin {if the comment is all on one line, adjust it to line up - with the indentation if possible, otherwise just try to - fit it somehow. In any case, if the comment extends - beyond the allowable length, bitch about it.} - if formatting then - begin - if firstinputline then - begin - comlength := writecol - startcol; - comindent := outlinelen - comlength; - if comindent < 0 then - comindent := 0 - else if comindent > statindent then - comindent := statindent; - unwritten[startchar mod bufsize].spacing := comindent; - writecol := comindent + comlength; - end; - if writecol > outlinelen then - comentoverflow; - end; {if formatting} - end; {adjustblkcoment} - -{$p------------------------* - | Adjust Statment Comment | - *-------------------------*} - - - procedure adjuststatcoment; - - begin {called after the last character of a statment comment has - been written to ensure that it all fits on a line} - if formatting then - if writecol > outlinelen then - if statbreak = 0 then - if writecol <= maxlinelen then - comentoverflow - else - abort(linenumber, comformat) - else - breakstatcoment; - end; {adjuststatcoment} - -{$p--------------* - | Block Comment | - *---------------*} - - - procedure blkcoment; - - var - comcolstart: integer; {start of comment} - comcharstart: integer; {start of comment in buffer} - - begin {format a block comment: If the comment is all on one input - line it will be indented to the current statement level - unless it won't fit, in which case it is shifted left - until it will fit. If any part of a block comment will - not fit in the output line, the output line will be - extended and a message printed.} - printline(initcol - 1); - comcolstart := writecol; - comcharstart := charcount; - firstinputline := true; - blkcomchar('{'); - getchar; - if ch = '$' then - docompilerdirectives(true); - if ch = '[' then - doformatterdirectives(true, false); - if initchar = '{' then - while ch <> '}' do - begin - blkcomchar(ch); - getchar - end - else - repeat - while ch <> '*' do - begin - blkcomchar(ch); - getchar - end; - getchar; - if ch <> ')' then - blkcomchar('*'); - until ch = ')'; - blkcomchar('}'); - adjustblkcoment(comcolstart, comcharstart); - end; {blkcoment} - -{$p-----------* - | Statcoment | - *------------*} - - - procedure statcoment; - - begin {Format a statement comment: These are inserted in the line - at the place found, and subsequent lines are indented to - the start of the comment. If the start of the comment is - too far to the right, it will be indented on the next - line. Text will be moved as necessary to fill lines. All - breaks will be at blanks, and if it is not possible to - break a comment properly the output line will be extended - and a message printed} - {initialize statcomchar} - statbreak := 0; - statblanks := false; - indentplus(writecol + comentspaces + 1 - indent, linenumber); - if (indent > threefourthline) and (tabspaces < - comentspaces) then - begin - undent; - indentplus(tabspaces, linenumber); - end; - if writecol < (outlinelen - comentspaces - 1) then - space(comentspaces); - statcomchar('{'); - getchar; - if ch = '$' then - docompilerdirectives(false); - if ch = '[' then - doformatterdirectives(false, false); - if initchar = '{' then - while ch <> '}' do - begin - statcomchar(ch); - getchar - end - else - repeat - while ch <> '*' do - begin - statcomchar(ch); - getchar - end; - getchar; - if ch <> ')' then - statcomchar('*'); - until ch = ')'; - statcomchar('}'); - adjuststatcoment; - undent; - blankline := false; - end; {statcoment} - -{$p----------------------* - | Main Body of Docoment | - *-----------------------*} - - begin {docoment} - newinputline := false; - if block then - blkcoment - else - statcoment; - formatting := newformatting; - newinputline := false; - getchar; - while ((ch = ' ') or (ch = chr(tab))) and not newinputline do - getchar; - if newinputline then {start new line if comment is last on line} - if formatting then - begin - space(0); - writecol := outlinelen; - symbolbreak := 0; - end {comment at end of line} ; - symbolfound := false; - lastsym := coment; - end; {docoment} - -{$p-----------------* - | Start of Comment | - *------------------*} - - - procedure comentchar; - - begin {possible start of comment} - if ch = '(' then - begin {see if comment or just open paren} - symbolput('('); - if ch = '*' then - begin - symlen := 0; - docoment(newinputline, column - 1, ch) - end - else - begin - newinputline := false; - sym := openparen; - symbolfound := true - end; - end - else - docoment(newinputline, column, ch); - end; {comentchar} - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMCOMENT.SRC b/software/CPM/CPM22_MTPUG_10/PMCOMENT.SRC deleted file mode 100644 index 7161b7f..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMCOMENT.SRC +++ /dev/null @@ -1,494 +0,0 @@ -{*--------------------------------------* - | Pasmat Comment Formatting Procedures | - *--------------------------------------*} -{$K0} {$K7} {$K12} {$K13} {$K14} {$K15} -module comment; - {$L-} - {$I PMDEFS.INC} - {$L+} - - external procedure abort(line: integer; - kind: abortkind); - external procedure comentoverflow; - external procedure getchar; - external procedure getfiles; - external procedure indentplus(delta, line: integer); - external procedure printline(indent: integer); - external procedure space(n: integer); - external procedure symbolput(thischar: char); - external procedure undent; - external procedure writea(ch: char); - -{$p------------------------* - | Block Comment Character | - *-------------------------*} - - - procedure blkcomchar(character: char); - - begin {Write a character for a block comment. The comment - formatting must be terminated with a call to - adjustblkcoment. The comment is copied exactly, and if it - will not fit within the outlinelen a message will be - printed.} - if endfile then - abort(linenumber, syntax); - if formatting then - if newinputline then - begin - if writecol > outlinelen then - comentoverflow; - printline(column); - firstinputline := false; - newinputline := false; - end - else - writea(character); - end; {blkcomchar} -{$p----------------------------* - | Statement Comment Character | - *-----------------------------*} - - - procedure breakstatcoment; - - var - extralen: integer; {length from last break} - comindent: integer; {amount to indent the extra} - - begin {Break a statement comment at the last break. Assumes - (statbreak <> 0) and (charcount - statbreak < bufsize)} - extralen := charcount - statbreak + 1; - if writecol - extralen > maxlinelen then - abort(linenumber, comformat) - else - begin {we can at least write it} - if writecol - extralen > outlinelen then - comentoverflow; - comindent := outlinelen - extralen; - if comindent < 0 then - comindent := 0 - else if comindent > indent then - comindent := indent; - with unwritten[statbreak mod bufsize] do - begin - actionis := beginline; - spacing := comindent; - end; - currentline := currentline + 1; - writecol := comindent + extralen; - end; - end; {breakstatcoment} - - - procedure statcomchar(character: char); - - begin {Take a statement character and format it. assumes that - statbreak and statblank are initialized before the first - character and are unchanged thereafter. The procedure - adjuststatcoment must be called after the comment is done} - if endfile then - abort(linenumber, syntax); - if formatting then - if (character = ' ') or (character = chr(tab)) then - begin - if not statblanks then - begin - if (writecol > outlinelen) and (statbreak <> 0) then - breakstatcoment; - writea(' '); - statbreak := charcount; - statblanks := true; - end; - end - else - begin - writea(character); - statblanks := false; - end; - end; {statcomchar} -{$p-----------------------* - | Do compiler directives | - *------------------------*} - - - procedure docompilerdirectives(block: boolean); - - begin {scan off compiler directives} - while (ch <> '[') and (ch <> '*') and (ch <> '}') do - begin - if block then - blkcomchar(ch) - else - statcomchar(ch); - getchar; - end; - end; {docompilerdirectives} -{$p----------------------* - | doformatterdirectives | - *-----------------------*} - - - procedure doformatterdirectives(block: boolean {block comment} ; - cline: boolean {control line} ); - - var - optchar: char; {which option specified} - - - procedure copyachar; - - begin {copy a character and get a new one} - if cline then - begin - if length(clinearg) = 0 then - ch := '}' - else - begin - ch := clinearg[1]; - delete(clinearg, 1, 1) - end - end - else - begin - if block then - blkcomchar(ch) - else - statcomchar(ch); - getchar; - end; - end; {copyachar} - - - procedure switchdir(var switch: boolean); - - begin {read and set a switch directive, if char is not + or -, - the value is unchanged} - if ch = '+' then - begin - switch := true; - copyachar - end - else if ch = '-' then - begin - switch := false; - copyachar - end; - end; {switchdir} - - - procedure numdir(var value: integer; - min, max: integer {limits} ); - - var - tempval: integer; {value being accumulated} - - begin {Read a numeric directive and set value. If the value is - out of bounds it is set to the limit value} - if ch = '=' then - copyachar; - if (ch >= '0') and (ch <= '9') then - begin - tempval := 0; - repeat - if tempval <= (maxint - 9) div 10 then - tempval := tempval * 10 + (ord(ch) - ord('0')); - copyachar; - until (ch < '0') or (ch > '9'); - if tempval < min then - tempval := min; - if tempval > max then - tempval := max; - value := tempval; - end; - end; {numdir} - - begin {doformatterdirectives: read a formatter directive and set - flags and value appropriately} - copyachar; - repeat - if ch in validdirectives then - begin - optchar := ch; - copyachar; - case optchar of - 'b', 'B': - switchdir(bunching); - 'c', 'C': - numdir(comentspaces, 0, maxlinelen); - 'f', 'F': - switchdir(newformatting); - 'l', 'L': - switchdir(litcopy); - 'o', 'O': - begin - numdir(outlinelen, 1, maxlinelen); - onehalfline := outlinelen div 2; - fiveeighthline := (5 * outlinelen) div 8; - threefourthline := (3 * outlinelen) div 4; - end; - 'p', 'P': - switchdir(portabilitymode); - 'q', 'Q': - switchdir(silentmode); - 'r', 'R': - switchdir(ucreswords); - 's', 'S': - numdir(statsperline, 1, maxlinelen); - 't', 'T': - begin - numdir(tabspaces, 0, maxlinelen); - continuespaces := (tabspaces + 1) div 2; - end; - 'u', 'U': - switchdir(ucidents); - end; {case} - end - else if not (ch in [']', '*', '}']) then - copyachar; - until ch in [']', '*', '}']; - if ch = ']' then - copyachar; - end; {doformatterdirectives} - -{$P------------------------* - | Command Line Directives | - *-------------------------*} - - - procedure commanddirectives; - - begin {read a command line and process directives} - getfiles; - if length(clinearg) > 0 then - doformatterdirectives(false, true); - end; {commanddirectives} - -{$P-----------------* - | Comment Handling | - *------------------*} - - - procedure docoment(block: boolean; {true if block comment} - initcol: lineindex; {starting column} - initchar: char {starting char} ); - {Handles all comments. - Comments are split into two classes which are handled separately. - Comments which begin a line are treated as "block comments" and - are not formatted. At most, it will be folded to fit on the - output line. - Comments which follow other statements on a line are formatted - like any other statement.} - -{$p---------------------* - | Adjust Block Comment | - *----------------------*} - - - procedure adjustblkcoment(startcol, startchar: integer); - - var - comlength: integer; {length of comment if on one line} - comindent: integer; {amount to indent comment} - - begin {if the comment is all on one line, adjust it to line up - with the indentation if possible, otherwise just try to - fit it somehow. In any case, if the comment extends - beyond the allowable length, bitch about it.} - if formatting then - begin - if firstinputline then - begin - comlength := writecol - startcol; - comindent := outlinelen - comlength; - if comindent < 0 then - comindent := 0 - else if comindent > statindent then - comindent := statindent; - unwritten[startchar mod bufsize].spacing := comindent; - writecol := comindent + comlength; - end; - if writecol > outlinelen then - comentoverflow; - end; {if formatting} - end; {adjustblkcoment} - -{$p------------------------* - | Adjust Statment Comment | - *-------------------------*} - - - procedure adjuststatcoment; - - begin {called after the last character of a statment comment has - been written to ensure that it all fits on a line} - if formatting then - if writecol > outlinelen then - if statbreak = 0 then - if writecol <= maxlinelen then - comentoverflow - else - abort(linenumber, comformat) - else - breakstatcoment; - end; {adjuststatcoment} - -{$p--------------* - | Block Comment | - *---------------*} - - - procedure blkcoment; - - var - comcolstart: integer; {start of comment} - comcharstart: integer; {start of comment in buffer} - - begin {format a block comment: If the comment is all on one input - line it will be indented to the current statement level - unless it won't fit, in which case it is shifted left - until it will fit. If any part of a block comment will - not fit in the output line, the output line will be - extended and a message printed.} - printline(initcol - 1); - comcolstart := writecol; - comcharstart := charcount; - firstinputline := true; - blkcomchar('{'); - getchar; - if ch = '$' then - docompilerdirectives(true); - if ch = '[' then - doformatterdirectives(true, false); - if initchar = '{' then - while ch <> '}' do - begin - blkcomchar(ch); - getchar - end - else - repeat - while ch <> '*' do - begin - blkcomchar(ch); - getchar - end; - getchar; - if ch <> ')' then - blkcomchar('*'); - until ch = ')'; - blkcomchar('}'); - adjustblkcoment(comcolstart, comcharstart); - end; {blkcoment} - -{$p-----------* - | Statcoment | - *------------*} - - - procedure statcoment; - - begin {Format a statement comment: These are inserted in the line - at the place found, and subsequent lines are indented to - the start of the comment. If the start of the comment is - too far to the right, it will be indented on the next - line. Text will be moved as necessary to fill lines. All - breaks will be at blanks, and if it is not possible to - break a comment properly the output line will be extended - and a message printed} - {initialize statcomchar} - statbreak := 0; - statblanks := false; - indentplus(writecol + comentspaces + 1 - indent, linenumber); - if (indent > threefourthline) and (tabspaces < - comentspaces) then - begin - undent; - indentplus(tabspaces, linenumber); - end; - if writecol < (outlinelen - comentspaces - 1) then - space(comentspaces); - statcomchar('{'); - getchar; - if ch = '$' then - docompilerdirectives(false); - if ch = '[' then - doformatterdirectives(false, false); - if initchar = '{' then - while ch <> '}' do - begin - statcomchar(ch); - getchar - end - else - repeat - while ch <> '*' do - begin - statcomchar(ch); - getchar - end; - getchar; - if ch <> ')' then - statcomchar('*'); - until ch = ')'; - statcomchar('}'); - adjuststatcoment; - undent; - blankline := false; - end; {statcoment} - -{$p----------------------* - | Main Body of Docoment | - *-----------------------*} - - begin {docoment} - newinputline := false; - if block then - blkcoment - else - statcoment; - formatting := newformatting; - newinputline := false; - getchar; - while ((ch = ' ') or (ch = chr(tab))) and not newinputline do - getchar; - if newinputline then {start new line if comment is last on line} - if formatting then - begin - space(0); - writecol := outlinelen; - symbolbreak := 0; - end {comment at end of line} ; - symbolfound := false; - lastsym := coment; - end; {docoment} - -{$p-----------------* - | Start of Comment | - *------------------*} - - - procedure comentchar; - - begin {possible start of comment} - if ch = '(' then - begin {see if comment or just open paren} - symbolput('('); - if ch = '*' then - begin - symlen := 0; - docoment(newinputline, column - 1, ch) - end - else - begin - newinputline := false; - sym := openparen; - symbolfound := true - end; - end - else - docoment(newinputline, column, ch); - end; {comentchar} - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMDEFS.IN b/software/CPM/CPM22_MTPUG_10/PMDEFS.IN deleted file mode 100644 index 65acf56..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMDEFS.IN +++ /dev/null @@ -1,155 +0,0 @@ -{$p----------* - | Constants | - *-----------*} - - const - maxlinelen = 132; {max output line length} - bufsize = 134; {output buffer size, > maxlinelen} - maxwordlen = 9; {reserved words char size} - noreswords = 53; {number of reserved words} - defaultoutline = 72; {default output line length} - defaulttabspaces = 2; {logical indentation increments} - defaultcomentspaces = 1; {spacing before and after comments} - tab = 9; {ord of tab character} - tabinterval = 8; {standard tab interval for CP/M} - ibufsize = 2047; {size of input file buffer} - -{$p------* - | Types | - *-------*} - - type - symbols = (abslutesy, andsy, arraysy, beginsy, casesy, constsy, - divsy, dosy, downtosy, elsesy, endsy, externsy, filesy, - forsy, forwardsy, funcsy, gotosy, ifsy, insy, intruptsy, - labelsy, modsy, modendsy, modulesy, nilsy, notsy, ofsy, - orsy, othwisesy, packedsy, procsy, programsy, recordsy, - repeatsy, setsy, stringsy, thensy, tosy, typesy, untilsy, - varsy, whilesy, withsy, plus, minus, mult, divide, - becomes, period, comma, semicolon, colon, equal, - notequal, lessthan, lessequal, greatequal, greatthan, - pointer, subrange, apostrophy, openparen, closeparen, - openbrack, closebrack, identifier, number, stringcon, - coment, textend, dummysy); - - {basic symbol enumeration} - setofsyms = set of symbols; {set ops on basic symbols} - wordtype = packed array [1..maxwordlen] of char; - - {reserved} - lentabletype = {index into reserved word table by length} - record - lowindex, hiindex: 1..noreswords; - end; - - lineindex = 0..maxlinelen; - actions = (graphic, spaces, beginline); - bufferindex = 0..bufsize; {output buffer index} - charbuffer = array [bufferindex] of - record - case actionis: actions of - spaces, beginline: - (spacing: lineindex); - graphic: - (character: char) - end; - collog = - record - logchar: integer; {charcount at time of log} - logcol: lineindex; {writecol at time of log} - logline: integer; {currentline at time of log} - end; - abortkind = (syntax, nesting, comformat); {error types} - stringp = ^string; - -{$p----------* - | Variables | - *-----------*} - - var - {CP/M interface variables} - clinearg: external string[127]; - - {Structured Constants} - stdsyms: external setofsyms; {symbols valid in standard pascal} - validdirectives: external set of char; {valid formatter directives} - spacebefore, spaceafter: external setofsyms; {individual symbol spacing} - alphanumerics: external setofsyms; {alpha symbols} - resvwrd: external array [1..noreswords] of wordtype; {reserved word table} - ressymbol: external array [1..noreswords] of symbols; {symbols for resvwrd} - reslen: external array [2..maxwordlen] of lentabletype; { length index} - digits, letters: external set of char; - uppercase: external array [char] of char; - lowercase: external array [char] of char; {case conversion tables} - progset, blockbegsys, statset: external setofsyms; {syntactic symbol types} - cnstnts: external setofsyms; {symbols which can be constants} - headingbegsys: external setofsyms; {symbols which begin a block heading} - typebegsys: external setofsyms; {type beginning symbols} - exprbegsys: external setofsyms; {expression beginning symbols} - relops: external setofsyms; {relational operators} - arithops: external setofsyms; {arithmetic operators} - - {Formatting variables} - indent: external integer; {current number of indentation spaces} - statindent: external integer; {indentation for major statement} - writecol: external integer; {current output column} - symbolbreak: external integer; {break symbol for putsym} - breakcol: external integer; {output column for putsym} - lastsym: external symbols; {last symbol processed} - symwritten: external boolean; {last symbol was written} - indentstate: external array [lineindex] of lineindex; - indentlevel: external lineindex; {these make a stack of indent levels} - - {comment formatting} - statbreak: external integer; {character where line can be broken} - statblanks: external boolean; {set if blank was last char} - firstinputline: external boolean; {set if first input line} - - {miscellaneous} - outputline: external integer; {line numbers for output} - currentline: external integer; {line number being written} - inputline: external integer; {input line number} - linenumber: external integer; - - {Formatting Control Values} - outlinelen: external integer; {current output line length} - onehalfline: external integer; {significant point upon line} - fiveeighthline: external integer; { "} - threefourthline: external integer; {"} - tabspaces: external integer; {spaces to indent for each level} - continuespaces: external integer; {spaces to indent continuation line} - comentspaces: external integer; {spaces before statement comment} - statsperline: external integer; {statements per line} - - {Flags to direct formatting} - ucreswords: external boolean; {convert reserved words to UC} - ucidents: external boolean; {convert identifiers to UC} - litcopy: external boolean; {copy identifiers and reserved words literally} - portabilitymode: external boolean; {eliminate underscores} - formatting: external boolean; {do formatting (otherwise, copy)} - newformatting: external boolean; {start formatting at end of comment} - bunching: external boolean; {bunch statements on one line} - silentmode: external boolean; {don't even generate error messages} - - {lexical scanner variables} - symbolfound: external boolean; {success from lexical analysis} - newinputline: external boolean; {true when no chars as yet on new line} - endfile: external boolean; {eof read} - blankline: external boolean; {true when blank line is ok to output} - ch: external char; {current character for lexical analysis} - doubleperiod: external boolean; {set if double period found} - column: external integer; {input column for last char input} - sym: external symbols; {current basic symbol from lex} - symbol: external array [lineindex] of char; {workspace for lex analysis} - symlen: external 0..maxlinelen; {index into WINDOW array} - {output character buffering} - unwritten: external charbuffer; {unwritten characters} - charcount: external integer; {characters written so far} - oldest: external bufferindex; {oldest char in buffer} - - {error handling variables} - overflows: external 0..maxint; {number of line overflows} - firstoverflow: external 0..maxint; {line where first overflow occured} - comoverflows: external 0..maxint; {number of comment overflows} - firstcomoverflow: external 0..maxint; {line of first comment overflow} - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMDEFS.INC b/software/CPM/CPM22_MTPUG_10/PMDEFS.INC deleted file mode 100644 index 65acf56..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMDEFS.INC +++ /dev/null @@ -1,155 +0,0 @@ -{$p----------* - | Constants | - *-----------*} - - const - maxlinelen = 132; {max output line length} - bufsize = 134; {output buffer size, > maxlinelen} - maxwordlen = 9; {reserved words char size} - noreswords = 53; {number of reserved words} - defaultoutline = 72; {default output line length} - defaulttabspaces = 2; {logical indentation increments} - defaultcomentspaces = 1; {spacing before and after comments} - tab = 9; {ord of tab character} - tabinterval = 8; {standard tab interval for CP/M} - ibufsize = 2047; {size of input file buffer} - -{$p------* - | Types | - *-------*} - - type - symbols = (abslutesy, andsy, arraysy, beginsy, casesy, constsy, - divsy, dosy, downtosy, elsesy, endsy, externsy, filesy, - forsy, forwardsy, funcsy, gotosy, ifsy, insy, intruptsy, - labelsy, modsy, modendsy, modulesy, nilsy, notsy, ofsy, - orsy, othwisesy, packedsy, procsy, programsy, recordsy, - repeatsy, setsy, stringsy, thensy, tosy, typesy, untilsy, - varsy, whilesy, withsy, plus, minus, mult, divide, - becomes, period, comma, semicolon, colon, equal, - notequal, lessthan, lessequal, greatequal, greatthan, - pointer, subrange, apostrophy, openparen, closeparen, - openbrack, closebrack, identifier, number, stringcon, - coment, textend, dummysy); - - {basic symbol enumeration} - setofsyms = set of symbols; {set ops on basic symbols} - wordtype = packed array [1..maxwordlen] of char; - - {reserved} - lentabletype = {index into reserved word table by length} - record - lowindex, hiindex: 1..noreswords; - end; - - lineindex = 0..maxlinelen; - actions = (graphic, spaces, beginline); - bufferindex = 0..bufsize; {output buffer index} - charbuffer = array [bufferindex] of - record - case actionis: actions of - spaces, beginline: - (spacing: lineindex); - graphic: - (character: char) - end; - collog = - record - logchar: integer; {charcount at time of log} - logcol: lineindex; {writecol at time of log} - logline: integer; {currentline at time of log} - end; - abortkind = (syntax, nesting, comformat); {error types} - stringp = ^string; - -{$p----------* - | Variables | - *-----------*} - - var - {CP/M interface variables} - clinearg: external string[127]; - - {Structured Constants} - stdsyms: external setofsyms; {symbols valid in standard pascal} - validdirectives: external set of char; {valid formatter directives} - spacebefore, spaceafter: external setofsyms; {individual symbol spacing} - alphanumerics: external setofsyms; {alpha symbols} - resvwrd: external array [1..noreswords] of wordtype; {reserved word table} - ressymbol: external array [1..noreswords] of symbols; {symbols for resvwrd} - reslen: external array [2..maxwordlen] of lentabletype; { length index} - digits, letters: external set of char; - uppercase: external array [char] of char; - lowercase: external array [char] of char; {case conversion tables} - progset, blockbegsys, statset: external setofsyms; {syntactic symbol types} - cnstnts: external setofsyms; {symbols which can be constants} - headingbegsys: external setofsyms; {symbols which begin a block heading} - typebegsys: external setofsyms; {type beginning symbols} - exprbegsys: external setofsyms; {expression beginning symbols} - relops: external setofsyms; {relational operators} - arithops: external setofsyms; {arithmetic operators} - - {Formatting variables} - indent: external integer; {current number of indentation spaces} - statindent: external integer; {indentation for major statement} - writecol: external integer; {current output column} - symbolbreak: external integer; {break symbol for putsym} - breakcol: external integer; {output column for putsym} - lastsym: external symbols; {last symbol processed} - symwritten: external boolean; {last symbol was written} - indentstate: external array [lineindex] of lineindex; - indentlevel: external lineindex; {these make a stack of indent levels} - - {comment formatting} - statbreak: external integer; {character where line can be broken} - statblanks: external boolean; {set if blank was last char} - firstinputline: external boolean; {set if first input line} - - {miscellaneous} - outputline: external integer; {line numbers for output} - currentline: external integer; {line number being written} - inputline: external integer; {input line number} - linenumber: external integer; - - {Formatting Control Values} - outlinelen: external integer; {current output line length} - onehalfline: external integer; {significant point upon line} - fiveeighthline: external integer; { "} - threefourthline: external integer; {"} - tabspaces: external integer; {spaces to indent for each level} - continuespaces: external integer; {spaces to indent continuation line} - comentspaces: external integer; {spaces before statement comment} - statsperline: external integer; {statements per line} - - {Flags to direct formatting} - ucreswords: external boolean; {convert reserved words to UC} - ucidents: external boolean; {convert identifiers to UC} - litcopy: external boolean; {copy identifiers and reserved words literally} - portabilitymode: external boolean; {eliminate underscores} - formatting: external boolean; {do formatting (otherwise, copy)} - newformatting: external boolean; {start formatting at end of comment} - bunching: external boolean; {bunch statements on one line} - silentmode: external boolean; {don't even generate error messages} - - {lexical scanner variables} - symbolfound: external boolean; {success from lexical analysis} - newinputline: external boolean; {true when no chars as yet on new line} - endfile: external boolean; {eof read} - blankline: external boolean; {true when blank line is ok to output} - ch: external char; {current character for lexical analysis} - doubleperiod: external boolean; {set if double period found} - column: external integer; {input column for last char input} - sym: external symbols; {current basic symbol from lex} - symbol: external array [lineindex] of char; {workspace for lex analysis} - symlen: external 0..maxlinelen; {index into WINDOW array} - {output character buffering} - unwritten: external charbuffer; {unwritten characters} - charcount: external integer; {characters written so far} - oldest: external bufferindex; {oldest char in buffer} - - {error handling variables} - overflows: external 0..maxint; {number of line overflows} - firstoverflow: external 0..maxint; {line where first overflow occured} - comoverflows: external 0..maxint; {number of comment overflows} - firstcomoverflow: external 0..maxint; {line of first comment overflow} - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMFILEIO.PAS b/software/CPM/CPM22_MTPUG_10/PMFILEIO.PAS deleted file mode 100644 index 4ffcc0b..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMFILEIO.PAS +++ /dev/null @@ -1,284 +0,0 @@ -{*-------------------------------------------* - | Pasmat - All Direct I/O is in this Module | - *-------------------------------------------*} -{$K0} {$K7} {$K12} {$K14} {$K15} -module pmfileio; - {$L-} - {$I PMDEFS.INC} - {$L+} - - var - finp: file of packed array [0..ibufsize] of char; - fout: text; - - external procedure @hlt; - {check file name for legality} - external function cpmname(str: string): boolean; - {pasmat entry points} - external procedure flushsymbol; - external procedure newline(indent: lineindex); - -{$p----------------------------* - | Terminate and Print Message | - *-----------------------------*} - - - procedure finaldata; - - var - fstatus: integer; - - begin {print summary data} - if not silentmode then - begin - if (overflows > 0) or (comoverflows > 0) then - writeln; - writeln(inputline - 1: 1, ' lines input, ', currentline: 1, - ' lines output'); - if overflows = 1 then - writeln('Token too wide for output at output line ', - firstoverflow: 1) - else if overflows > 1 then - writeln('Token too wide for output in ', overflows: 1, - ' places, first at output line ', firstoverflow: 1); - if comoverflows = 1 then - writeln('Comment too wide for output at output line ', - firstcomoverflow: 1) - else if comoverflows > 1 then - writeln('Comment too wide for output in ', comoverflows: 1, - ' places, first at output line ', firstcomoverflow: - 1); - end; - close(fout, fstatus); - if fstatus = 255 then - writeln('Unable to close output file'); - end; {finaldata} -{$p-----------------* - | Character output | - *------------------*} - - - procedure writea(ch: char); - - var - i: lineindex; - - begin {Write a character to the output buffer. If necessary (which - it always is after the buffer is filled), write the - previous contents of the buffer} - charcount := charcount + 1; - oldest := charcount mod bufsize; - with unwritten[oldest] do - begin - if charcount > bufsize then - if actionis = graphic then - write(fout, character) - else if actionis = spaces then - begin - for i := 1 to spacing do - write(fout, ' '); - end - else {actionis = beginline} - begin - if outputline > 1 then {not initial begin} - begin - writeln(fout); - end; - outputline := outputline + 1; - for i := 1 to spacing div tabinterval do - write(fout, chr(tab)); - for i := 1 to spacing mod tabinterval do - write(fout, ' '); - end; - actionis := graphic; - character := ch; - writecol := writecol + 1; - if ch = chr(tab) then - writecol := writecol + tabinterval - (writecol mod - tabinterval); - end; {with} - end; {writea} - - - procedure flushbuffer; - - var - i: 0..bufsize; - - begin {flush any unwritten buffer} - for i := 1 to bufsize do - writea(' '); - charcount := 0; - writeln(fout); - end; {flushbuffer} - -{$P----------------* - | Character Input | - *-----------------*} - - - procedure getchar; - - begin {read next character from input file} - repeat - if endfile then - ch := chr($1A) - else - ch := gnb(finp); - if (ch = chr($1A)) or (ch = chr($FF)) then - begin {eof} - ch := ' '; - endfile := true; - exit - end; {eof} - ch := chr(ord(ch) & $7F); {strip hi bit} - until ch <> chr($0A); {skip over line feeds} - if ch = chr($0D) then - begin {eoln} - if newinputline then - blankline := true - else - newinputline := true; - column := 0; - inputline := inputline + 1; - if not formatting then - newline(0); - ch := ' '; - end {eoln} - else - begin {normal} - column := column + 1; - if not formatting then - writea(ch); - if ch = chr(tab) then - column := column + tabinterval - (column mod tabinterval); - end {normal} - end {getchar} ; - -{$p---------------* - | Error Handling | - *----------------*} - - - procedure lineoverflow; - - begin {token too long for output line, note it} - flushbuffer; - overflows := overflows + 1; - if overflows = 1 then - firstoverflow := currentline - 1; - if not silentmode then - begin - writeln(' '); {put following message on separate line} - writeln('Warning - token too wide for output: ', 'input line ', - inputline: 1, ', output line ', currentline - 1: 1); - end {not silentmode} ; - end; {lineoverflow} - - - procedure comentoverflow; - - begin {block comment too long for output line, note it} - comoverflows := comoverflows + 1; - if comoverflows = 1 then - firstcomoverflow := currentline; - if not silentmode then - begin - writeln(' '); {put following message on separate line} - writeln('Warning - comment too wide for output: ', - 'input line ', inputline: 1, ', output line ', - currentline: 1); - end {not silentmode} ; - end; {comentoverflow} - - - procedure abort(line: integer; - kind: abortkind); - - {the argument 'line' is not used in CP/M version} - - begin {abort formatting} - flushsymbol; - newformatting := false; - formatting := false; - if not silentmode then - begin - writeln(' '); - if kind = syntax then - writeln('Syntax error: input line ', inputline: 1, - ', output line ', currentline - 2: 1) - else if kind = nesting then - writeln('Too many levels: input line ', inputline: 1, - ', output line', currentline - 1: 1) - else - writeln('Bad comment: input line ', inputline: 1, - ', output line ', currentline - 1: 1); - end {not silentmode} ; - writea(ch); - while not endfile do - getchar; - flushbuffer; - finaldata; - @hlt; - end; {abort} - -{$p-----------------------* - | Get input/output files | - *------------------------*} - - - procedure getfiles; - - var - name: string; - ch: char; - - - procedure gname; - - var - i: integer; - - begin {gname} - name := ''; - i := 1; - while (i <= length(clinearg)) and (clinearg[i] = ' ') do - i := i + 1; {skip leading blanks} - while (i <= length(clinearg)) and (clinearg[i] <> ' ') do - begin {copy up to next blank} - ch := clinearg[i]; - i := i + 1; - if ch in ['a'..'z'] then - ch := chr(ord(ch) - $20); {ensure upper case} - name := concat(name, ch); - end; - if i > 1 then {remove name} - delete(clinearg, 1, i - 1); - end {gname} ; - - - procedure usage(str: string); - - begin {print error message and abort} - writeln(str); - writeln('Usage: pasmat infile outfile options'); - @hlt - end {usage} ; - - begin {getfiles} - gname; - assign(finp, name); - reset(finp); - if ioresult = 255 then - usage(concat('Unable to open ', name, ' for input')); - gname; - if not cpmname(name) then - usage(concat('Illegal CP/M name: ', name)); - assign(fout, name); - rewrite(fout); - if ioresult = 255 then - usage(concat('Unable to open ', name, ' for output')); - end; {getfiles} - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMFILEIO.SRC b/software/CPM/CPM22_MTPUG_10/PMFILEIO.SRC deleted file mode 100644 index 4ffcc0b..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMFILEIO.SRC +++ /dev/null @@ -1,284 +0,0 @@ -{*-------------------------------------------* - | Pasmat - All Direct I/O is in this Module | - *-------------------------------------------*} -{$K0} {$K7} {$K12} {$K14} {$K15} -module pmfileio; - {$L-} - {$I PMDEFS.INC} - {$L+} - - var - finp: file of packed array [0..ibufsize] of char; - fout: text; - - external procedure @hlt; - {check file name for legality} - external function cpmname(str: string): boolean; - {pasmat entry points} - external procedure flushsymbol; - external procedure newline(indent: lineindex); - -{$p----------------------------* - | Terminate and Print Message | - *-----------------------------*} - - - procedure finaldata; - - var - fstatus: integer; - - begin {print summary data} - if not silentmode then - begin - if (overflows > 0) or (comoverflows > 0) then - writeln; - writeln(inputline - 1: 1, ' lines input, ', currentline: 1, - ' lines output'); - if overflows = 1 then - writeln('Token too wide for output at output line ', - firstoverflow: 1) - else if overflows > 1 then - writeln('Token too wide for output in ', overflows: 1, - ' places, first at output line ', firstoverflow: 1); - if comoverflows = 1 then - writeln('Comment too wide for output at output line ', - firstcomoverflow: 1) - else if comoverflows > 1 then - writeln('Comment too wide for output in ', comoverflows: 1, - ' places, first at output line ', firstcomoverflow: - 1); - end; - close(fout, fstatus); - if fstatus = 255 then - writeln('Unable to close output file'); - end; {finaldata} -{$p-----------------* - | Character output | - *------------------*} - - - procedure writea(ch: char); - - var - i: lineindex; - - begin {Write a character to the output buffer. If necessary (which - it always is after the buffer is filled), write the - previous contents of the buffer} - charcount := charcount + 1; - oldest := charcount mod bufsize; - with unwritten[oldest] do - begin - if charcount > bufsize then - if actionis = graphic then - write(fout, character) - else if actionis = spaces then - begin - for i := 1 to spacing do - write(fout, ' '); - end - else {actionis = beginline} - begin - if outputline > 1 then {not initial begin} - begin - writeln(fout); - end; - outputline := outputline + 1; - for i := 1 to spacing div tabinterval do - write(fout, chr(tab)); - for i := 1 to spacing mod tabinterval do - write(fout, ' '); - end; - actionis := graphic; - character := ch; - writecol := writecol + 1; - if ch = chr(tab) then - writecol := writecol + tabinterval - (writecol mod - tabinterval); - end; {with} - end; {writea} - - - procedure flushbuffer; - - var - i: 0..bufsize; - - begin {flush any unwritten buffer} - for i := 1 to bufsize do - writea(' '); - charcount := 0; - writeln(fout); - end; {flushbuffer} - -{$P----------------* - | Character Input | - *-----------------*} - - - procedure getchar; - - begin {read next character from input file} - repeat - if endfile then - ch := chr($1A) - else - ch := gnb(finp); - if (ch = chr($1A)) or (ch = chr($FF)) then - begin {eof} - ch := ' '; - endfile := true; - exit - end; {eof} - ch := chr(ord(ch) & $7F); {strip hi bit} - until ch <> chr($0A); {skip over line feeds} - if ch = chr($0D) then - begin {eoln} - if newinputline then - blankline := true - else - newinputline := true; - column := 0; - inputline := inputline + 1; - if not formatting then - newline(0); - ch := ' '; - end {eoln} - else - begin {normal} - column := column + 1; - if not formatting then - writea(ch); - if ch = chr(tab) then - column := column + tabinterval - (column mod tabinterval); - end {normal} - end {getchar} ; - -{$p---------------* - | Error Handling | - *----------------*} - - - procedure lineoverflow; - - begin {token too long for output line, note it} - flushbuffer; - overflows := overflows + 1; - if overflows = 1 then - firstoverflow := currentline - 1; - if not silentmode then - begin - writeln(' '); {put following message on separate line} - writeln('Warning - token too wide for output: ', 'input line ', - inputline: 1, ', output line ', currentline - 1: 1); - end {not silentmode} ; - end; {lineoverflow} - - - procedure comentoverflow; - - begin {block comment too long for output line, note it} - comoverflows := comoverflows + 1; - if comoverflows = 1 then - firstcomoverflow := currentline; - if not silentmode then - begin - writeln(' '); {put following message on separate line} - writeln('Warning - comment too wide for output: ', - 'input line ', inputline: 1, ', output line ', - currentline: 1); - end {not silentmode} ; - end; {comentoverflow} - - - procedure abort(line: integer; - kind: abortkind); - - {the argument 'line' is not used in CP/M version} - - begin {abort formatting} - flushsymbol; - newformatting := false; - formatting := false; - if not silentmode then - begin - writeln(' '); - if kind = syntax then - writeln('Syntax error: input line ', inputline: 1, - ', output line ', currentline - 2: 1) - else if kind = nesting then - writeln('Too many levels: input line ', inputline: 1, - ', output line', currentline - 1: 1) - else - writeln('Bad comment: input line ', inputline: 1, - ', output line ', currentline - 1: 1); - end {not silentmode} ; - writea(ch); - while not endfile do - getchar; - flushbuffer; - finaldata; - @hlt; - end; {abort} - -{$p-----------------------* - | Get input/output files | - *------------------------*} - - - procedure getfiles; - - var - name: string; - ch: char; - - - procedure gname; - - var - i: integer; - - begin {gname} - name := ''; - i := 1; - while (i <= length(clinearg)) and (clinearg[i] = ' ') do - i := i + 1; {skip leading blanks} - while (i <= length(clinearg)) and (clinearg[i] <> ' ') do - begin {copy up to next blank} - ch := clinearg[i]; - i := i + 1; - if ch in ['a'..'z'] then - ch := chr(ord(ch) - $20); {ensure upper case} - name := concat(name, ch); - end; - if i > 1 then {remove name} - delete(clinearg, 1, i - 1); - end {gname} ; - - - procedure usage(str: string); - - begin {print error message and abort} - writeln(str); - writeln('Usage: pasmat infile outfile options'); - @hlt - end {usage} ; - - begin {getfiles} - gname; - assign(finp, name); - reset(finp); - if ioresult = 255 then - usage(concat('Unable to open ', name, ' for input')); - gname; - if not cpmname(name) then - usage(concat('Illegal CP/M name: ', name)); - assign(fout, name); - rewrite(fout); - if ioresult = 255 then - usage(concat('Unable to open ', name, ' for output')); - end; {getfiles} - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMINIT.PAS b/software/CPM/CPM22_MTPUG_10/PMINIT.PAS deleted file mode 100644 index ec26e02..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMINIT.PAS +++ /dev/null @@ -1,220 +0,0 @@ -{*-----------------------* - | Pasmat Initialization | - *-----------------------*} -{$K0} {$K2} {$K7} {$K12} {$K13} {$K14} {$K15} -module pminit; - {$L-} - {$I PMDEFS.INC} - {$L+} -{$p-------------------------* - | Initialize Set Constants | - *--------------------------*} - - - procedure init1sets; - - begin {initialize set constants, part 1} - stdsyms := [abslutesy, andsy, arraysy, beginsy, casesy, constsy, - divsy, dosy, downtosy, elsesy, endsy, externsy, filesy, - forsy, forwardsy, funcsy, gotosy, ifsy, insy, - intruptsy, labelsy, modsy, modendsy, modulesy, nilsy, - notsy, ofsy, orsy, othwisesy, packedsy, procsy, - programsy, recordsy, repeatsy, setsy, stringsy, thensy, - tosy, typesy, untilsy, varsy, whilesy, withsy, plus, - minus, mult, divide, becomes, period, comma, semicolon, - colon, equal, notequal, lessthan, lessequal, - greatequal, greatthan, pointer, subrange, apostrophy, - openparen, closeparen, openbrack, closebrack, - identifier, number, stringcon, coment, textend, - dummysy]; - {constants used by putsym} - spacebefore := [abslutesy, andsy, divsy, dosy, downtosy, insy, - intruptsy, modsy, ofsy, orsy, thensy, tosy, plus, - minus, mult, divide, becomes, equal, notequal, - lessthan, lessequal, greatequal, greatthan]; - spaceafter := [abslutesy, andsy, arraysy, casesy, divsy, downtosy, - externsy, filesy, forsy, funcsy, gotosy, ifsy, insy, - intruptsy, modsy, modendsy, modulesy, notsy, ofsy, - orsy, othwisesy, packedsy, procsy, programsy, tosy, - untilsy, whilesy, withsy, plus, minus, mult, divide, - becomes, comma, semicolon, colon, equal, notequal, - lessthan, lessequal, greatequal, greatthan, coment]; - alphanumerics := [abslutesy..withsy, identifier, number]; - digits := ['0'..'9']; - letters := ['a'..'z', 'A'..'Z', '_', '@']; - progset := [programsy, modulesy]; - end {init1sets} ; - - - procedure init2sets; - - begin {initialize set constants, part 2} - headingbegsys := [labelsy, constsy, typesy, varsy, procsy, funcsy, - externsy]; - blockbegsys := headingbegsys + [beginsy]; - statset := [beginsy, ifsy, casesy, whilesy, repeatsy, forsy, - withsy, gotosy, number, identifier]; - cnstnts := [number, identifier, stringcon, plus, minus, nilsy]; - exprbegsys := cnstnts + [notsy, nilsy, openbrack, openparen]; - relops := [equal, notequal, lessthan, lessequal, greatthan, - greatequal, insy]; - arithops := [plus, minus, mult, divide, divsy, modsy]; - typebegsys := cnstnts + [pointer, setsy, recordsy, filesy, - arraysy, openparen, stringsy]; - validdirectives := ['b', 'B', 'c', 'C', 'f', 'F', 'l', 'L', 'o', - 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', - 't', 'T', 'u', 'U']; - end {init2sets} ; -{$p--------------------------* - | initialize reserved words | - *---------------------------*} - - - procedure init1resvwrd; - - begin {[s=2] initialize reserved word length indices into reserved - word array for length keyed search} - reslen[2].lowindex := 1; reslen[2].hiindex := 6; - reslen[3].lowindex := 7; reslen[3].hiindex := 15; - reslen[4].lowindex := 17; reslen[4].hiindex := 23; - reslen[5].lowindex := 31; reslen[5].hiindex := 36; - reslen[6].lowindex := 37; reslen[6].hiindex := 43; - reslen[7].lowindex := 45; reslen[7].hiindex := 46; - reslen[8].lowindex := 47; reslen[8].hiindex := 49; - reslen[9].lowindex := 51; reslen[9].hiindex := 53; - end {[s=1] init1resvwrd} ; - - - procedure init2resvwrd; - - begin {[s=2] initialize reserved word array} - resvwrd[1] := 'do '; ressymbol[1] := dosy; - resvwrd[2] := 'if '; ressymbol[2] := ifsy; - resvwrd[3] := 'in '; ressymbol[3] := insy; - resvwrd[4] := 'of '; ressymbol[4] := ofsy; - resvwrd[5] := 'or '; ressymbol[5] := orsy; - resvwrd[6] := 'to '; ressymbol[6] := tosy; - resvwrd[7] := 'and '; ressymbol[7] := andsy; - resvwrd[8] := 'div '; ressymbol[8] := divsy; - resvwrd[9] := 'end '; ressymbol[9] := endsy; - resvwrd[10] := 'for '; ressymbol[10] := forsy; - resvwrd[11] := 'mod '; ressymbol[11] := modsy; - resvwrd[12] := 'nil '; ressymbol[12] := nilsy; - resvwrd[13] := 'not '; ressymbol[13] := notsy; - resvwrd[14] := 'set '; ressymbol[14] := setsy; - resvwrd[15] := 'var '; ressymbol[15] := varsy; - {resvwrd[16] := '*********'; ressymbol[16] := dummysy; } - resvwrd[17] := 'case '; ressymbol[17] := casesy; - resvwrd[18] := 'else '; ressymbol[18] := elsesy; - resvwrd[19] := 'file '; ressymbol[19] := filesy; - resvwrd[20] := 'goto '; ressymbol[20] := gotosy; - resvwrd[21] := 'then '; ressymbol[21] := thensy; - resvwrd[22] := 'type '; ressymbol[22] := typesy; - resvwrd[23] := 'with '; ressymbol[23] := withsy; - {resvwrd[24] := '*********'; ressymbol[24] := dummysy; } - {resvwrd[25] := '*********'; ressymbol[25] := dummysy; } - {resvwrd[26] := '*********'; ressymbol[26] := dummysy; } - {resvwrd[27] := '*********'; ressymbol[27] := dummysy; } - end {[s=1] init2resvwrd} ; - - - procedure init3resvwrd; - - begin {[s=2] initialize reserved word array} - {resvwrd[28] := '*********'; ressymbol[28] := dummysy; } - {resvwrd[29] := '*********'; ressymbol[29] := dummysy; } - {resvwrd[30] := '*********'; ressymbol[30] := dummysy; } - resvwrd[31] := 'array '; ressymbol[31] := arraysy; - resvwrd[32] := 'begin '; ressymbol[32] := beginsy; - resvwrd[33] := 'const '; ressymbol[33] := constsy; - resvwrd[34] := 'label '; ressymbol[34] := labelsy; - resvwrd[35] := 'until '; ressymbol[35] := untilsy; - resvwrd[36] := 'while '; ressymbol[36] := whilesy; - resvwrd[37] := 'downto '; ressymbol[37] := downtosy; - resvwrd[38] := 'modend '; ressymbol[38] := modendsy; - resvwrd[39] := 'module '; ressymbol[39] := modulesy; - resvwrd[40] := 'packed '; ressymbol[40] := packedsy; - resvwrd[41] := 'record '; ressymbol[41] := recordsy; - resvwrd[42] := 'repeat '; ressymbol[42] := repeatsy; - resvwrd[43] := 'string '; ressymbol[43] := stringsy; - {resvwrd[44] := '*********'; ressymbol[44] := dummysy; } - resvwrd[45] := 'forward '; ressymbol[45] := forwardsy; - resvwrd[46] := 'program '; ressymbol[46] := programsy; - resvwrd[47] := 'absolute '; ressymbol[47] := abslutesy; - resvwrd[48] := 'external '; ressymbol[48] := externsy; - resvwrd[49] := 'function '; ressymbol[49] := funcsy; - {resvwrd[50] := '*********'; ressymbol[50] := dummysy; } - resvwrd[51] := 'interrupt'; ressymbol[51] := intruptsy; - resvwrd[52] := 'otherwise'; ressymbol[52] := othwisesy; - resvwrd[53] := 'procedure'; ressymbol[53] := procsy; - end {[s=1] init3resvwrd} ; -{$p-----------* - | initialize | - *------------*} - - - procedure initialize; - - var - p: integer; - c: char; {induction var} - - begin {initialize all global variables} - linenumber := - 1; {not used in this version} - init1sets; - init2sets; - for c := chr(0) to chr(127) do - begin - lowercase[c] := c; - uppercase[c] := c; - end; - for c := 'A' to 'Z' do - begin - lowercase[c] := chr(ord(c) + ord('a') - ord('A')); - uppercase[chr(ord(c) + ord('a') - ord('A'))] := c; - end; - outlinelen := defaultoutline; - tabspaces := defaulttabspaces; - continuespaces := (tabspaces + 1) div 2; - comentspaces := defaultcomentspaces; - indentlevel := 0; - onehalfline := outlinelen div 2; - fiveeighthline := (5 * outlinelen) div 8; - threefourthline := (3 * outlinelen) div 4; - statsperline := 1; - for p := 1 to outlinelen do - symbol[p] := ' '; - symlen := 0; - indent := 0; - statindent := 0; - writecol := 0; - column := 0; - outputline := 1; - currentline := 0; - inputline := 1; - newinputline := true; - blankline := false; - charcount := 0; - sym := period; - symbolbreak := 0; - lastsym := period; - symwritten := false; - ch := ' '; - doubleperiod := false; - ucreswords := false {'R' in options} ; - ucidents := false {'U' in options} ; - litcopy := false {'L' in options} ; - portabilitymode := false {'P' in options} ; - bunching := false {'B' in options} ; - silentmode := false; {'Q' in options} ; - formatting := true; - newformatting := true; - overflows := 0; - comoverflows := 0; - init1resvwrd; - init2resvwrd; - init3resvwrd; - end {initialize} ; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMINIT.SRC b/software/CPM/CPM22_MTPUG_10/PMINIT.SRC deleted file mode 100644 index ec26e02..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMINIT.SRC +++ /dev/null @@ -1,220 +0,0 @@ -{*-----------------------* - | Pasmat Initialization | - *-----------------------*} -{$K0} {$K2} {$K7} {$K12} {$K13} {$K14} {$K15} -module pminit; - {$L-} - {$I PMDEFS.INC} - {$L+} -{$p-------------------------* - | Initialize Set Constants | - *--------------------------*} - - - procedure init1sets; - - begin {initialize set constants, part 1} - stdsyms := [abslutesy, andsy, arraysy, beginsy, casesy, constsy, - divsy, dosy, downtosy, elsesy, endsy, externsy, filesy, - forsy, forwardsy, funcsy, gotosy, ifsy, insy, - intruptsy, labelsy, modsy, modendsy, modulesy, nilsy, - notsy, ofsy, orsy, othwisesy, packedsy, procsy, - programsy, recordsy, repeatsy, setsy, stringsy, thensy, - tosy, typesy, untilsy, varsy, whilesy, withsy, plus, - minus, mult, divide, becomes, period, comma, semicolon, - colon, equal, notequal, lessthan, lessequal, - greatequal, greatthan, pointer, subrange, apostrophy, - openparen, closeparen, openbrack, closebrack, - identifier, number, stringcon, coment, textend, - dummysy]; - {constants used by putsym} - spacebefore := [abslutesy, andsy, divsy, dosy, downtosy, insy, - intruptsy, modsy, ofsy, orsy, thensy, tosy, plus, - minus, mult, divide, becomes, equal, notequal, - lessthan, lessequal, greatequal, greatthan]; - spaceafter := [abslutesy, andsy, arraysy, casesy, divsy, downtosy, - externsy, filesy, forsy, funcsy, gotosy, ifsy, insy, - intruptsy, modsy, modendsy, modulesy, notsy, ofsy, - orsy, othwisesy, packedsy, procsy, programsy, tosy, - untilsy, whilesy, withsy, plus, minus, mult, divide, - becomes, comma, semicolon, colon, equal, notequal, - lessthan, lessequal, greatequal, greatthan, coment]; - alphanumerics := [abslutesy..withsy, identifier, number]; - digits := ['0'..'9']; - letters := ['a'..'z', 'A'..'Z', '_', '@']; - progset := [programsy, modulesy]; - end {init1sets} ; - - - procedure init2sets; - - begin {initialize set constants, part 2} - headingbegsys := [labelsy, constsy, typesy, varsy, procsy, funcsy, - externsy]; - blockbegsys := headingbegsys + [beginsy]; - statset := [beginsy, ifsy, casesy, whilesy, repeatsy, forsy, - withsy, gotosy, number, identifier]; - cnstnts := [number, identifier, stringcon, plus, minus, nilsy]; - exprbegsys := cnstnts + [notsy, nilsy, openbrack, openparen]; - relops := [equal, notequal, lessthan, lessequal, greatthan, - greatequal, insy]; - arithops := [plus, minus, mult, divide, divsy, modsy]; - typebegsys := cnstnts + [pointer, setsy, recordsy, filesy, - arraysy, openparen, stringsy]; - validdirectives := ['b', 'B', 'c', 'C', 'f', 'F', 'l', 'L', 'o', - 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', - 't', 'T', 'u', 'U']; - end {init2sets} ; -{$p--------------------------* - | initialize reserved words | - *---------------------------*} - - - procedure init1resvwrd; - - begin {[s=2] initialize reserved word length indices into reserved - word array for length keyed search} - reslen[2].lowindex := 1; reslen[2].hiindex := 6; - reslen[3].lowindex := 7; reslen[3].hiindex := 15; - reslen[4].lowindex := 17; reslen[4].hiindex := 23; - reslen[5].lowindex := 31; reslen[5].hiindex := 36; - reslen[6].lowindex := 37; reslen[6].hiindex := 43; - reslen[7].lowindex := 45; reslen[7].hiindex := 46; - reslen[8].lowindex := 47; reslen[8].hiindex := 49; - reslen[9].lowindex := 51; reslen[9].hiindex := 53; - end {[s=1] init1resvwrd} ; - - - procedure init2resvwrd; - - begin {[s=2] initialize reserved word array} - resvwrd[1] := 'do '; ressymbol[1] := dosy; - resvwrd[2] := 'if '; ressymbol[2] := ifsy; - resvwrd[3] := 'in '; ressymbol[3] := insy; - resvwrd[4] := 'of '; ressymbol[4] := ofsy; - resvwrd[5] := 'or '; ressymbol[5] := orsy; - resvwrd[6] := 'to '; ressymbol[6] := tosy; - resvwrd[7] := 'and '; ressymbol[7] := andsy; - resvwrd[8] := 'div '; ressymbol[8] := divsy; - resvwrd[9] := 'end '; ressymbol[9] := endsy; - resvwrd[10] := 'for '; ressymbol[10] := forsy; - resvwrd[11] := 'mod '; ressymbol[11] := modsy; - resvwrd[12] := 'nil '; ressymbol[12] := nilsy; - resvwrd[13] := 'not '; ressymbol[13] := notsy; - resvwrd[14] := 'set '; ressymbol[14] := setsy; - resvwrd[15] := 'var '; ressymbol[15] := varsy; - {resvwrd[16] := '*********'; ressymbol[16] := dummysy; } - resvwrd[17] := 'case '; ressymbol[17] := casesy; - resvwrd[18] := 'else '; ressymbol[18] := elsesy; - resvwrd[19] := 'file '; ressymbol[19] := filesy; - resvwrd[20] := 'goto '; ressymbol[20] := gotosy; - resvwrd[21] := 'then '; ressymbol[21] := thensy; - resvwrd[22] := 'type '; ressymbol[22] := typesy; - resvwrd[23] := 'with '; ressymbol[23] := withsy; - {resvwrd[24] := '*********'; ressymbol[24] := dummysy; } - {resvwrd[25] := '*********'; ressymbol[25] := dummysy; } - {resvwrd[26] := '*********'; ressymbol[26] := dummysy; } - {resvwrd[27] := '*********'; ressymbol[27] := dummysy; } - end {[s=1] init2resvwrd} ; - - - procedure init3resvwrd; - - begin {[s=2] initialize reserved word array} - {resvwrd[28] := '*********'; ressymbol[28] := dummysy; } - {resvwrd[29] := '*********'; ressymbol[29] := dummysy; } - {resvwrd[30] := '*********'; ressymbol[30] := dummysy; } - resvwrd[31] := 'array '; ressymbol[31] := arraysy; - resvwrd[32] := 'begin '; ressymbol[32] := beginsy; - resvwrd[33] := 'const '; ressymbol[33] := constsy; - resvwrd[34] := 'label '; ressymbol[34] := labelsy; - resvwrd[35] := 'until '; ressymbol[35] := untilsy; - resvwrd[36] := 'while '; ressymbol[36] := whilesy; - resvwrd[37] := 'downto '; ressymbol[37] := downtosy; - resvwrd[38] := 'modend '; ressymbol[38] := modendsy; - resvwrd[39] := 'module '; ressymbol[39] := modulesy; - resvwrd[40] := 'packed '; ressymbol[40] := packedsy; - resvwrd[41] := 'record '; ressymbol[41] := recordsy; - resvwrd[42] := 'repeat '; ressymbol[42] := repeatsy; - resvwrd[43] := 'string '; ressymbol[43] := stringsy; - {resvwrd[44] := '*********'; ressymbol[44] := dummysy; } - resvwrd[45] := 'forward '; ressymbol[45] := forwardsy; - resvwrd[46] := 'program '; ressymbol[46] := programsy; - resvwrd[47] := 'absolute '; ressymbol[47] := abslutesy; - resvwrd[48] := 'external '; ressymbol[48] := externsy; - resvwrd[49] := 'function '; ressymbol[49] := funcsy; - {resvwrd[50] := '*********'; ressymbol[50] := dummysy; } - resvwrd[51] := 'interrupt'; ressymbol[51] := intruptsy; - resvwrd[52] := 'otherwise'; ressymbol[52] := othwisesy; - resvwrd[53] := 'procedure'; ressymbol[53] := procsy; - end {[s=1] init3resvwrd} ; -{$p-----------* - | initialize | - *------------*} - - - procedure initialize; - - var - p: integer; - c: char; {induction var} - - begin {initialize all global variables} - linenumber := - 1; {not used in this version} - init1sets; - init2sets; - for c := chr(0) to chr(127) do - begin - lowercase[c] := c; - uppercase[c] := c; - end; - for c := 'A' to 'Z' do - begin - lowercase[c] := chr(ord(c) + ord('a') - ord('A')); - uppercase[chr(ord(c) + ord('a') - ord('A'))] := c; - end; - outlinelen := defaultoutline; - tabspaces := defaulttabspaces; - continuespaces := (tabspaces + 1) div 2; - comentspaces := defaultcomentspaces; - indentlevel := 0; - onehalfline := outlinelen div 2; - fiveeighthline := (5 * outlinelen) div 8; - threefourthline := (3 * outlinelen) div 4; - statsperline := 1; - for p := 1 to outlinelen do - symbol[p] := ' '; - symlen := 0; - indent := 0; - statindent := 0; - writecol := 0; - column := 0; - outputline := 1; - currentline := 0; - inputline := 1; - newinputline := true; - blankline := false; - charcount := 0; - sym := period; - symbolbreak := 0; - lastsym := period; - symwritten := false; - ch := ' '; - doubleperiod := false; - ucreswords := false {'R' in options} ; - ucidents := false {'U' in options} ; - litcopy := false {'L' in options} ; - portabilitymode := false {'P' in options} ; - bunching := false {'B' in options} ; - silentmode := false; {'Q' in options} ; - formatting := true; - newformatting := true; - overflows := 0; - comoverflows := 0; - init1resvwrd; - init2resvwrd; - init3resvwrd; - end {initialize} ; - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMPARSE.PAS b/software/CPM/CPM22_MTPUG_10/PMPARSE.PAS deleted file mode 100644 index 755eeb7..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMPARSE.PAS +++ /dev/null @@ -1,1087 +0,0 @@ -{*---------------------------------* - | Pasmat Recursive Descent Parser | - *---------------------------------*} -{$K0} {$K2} {$K7} {$K12} {$K13} {$K14} {$K15} -(* {$S+} {$Q2} *) -module pmparse; - {$L-} - {$I PMDEFS.INC} - {$L+} - - external procedure abort(line: integer; - kind: abortkind); - external procedure bunch(start: collog; - var success: boolean); - external procedure bunchstatement(start: collog); - external procedure checksym(desired: symbols; - line: integer); - external procedure getsym; - external procedure indentplus(delta: integer; - line: integer); - external procedure logsymbolstart(var log: collog); - external procedure nextonnewline(spacing, delta: integer); - external procedure nextsym; - external procedure printline(indent: integer); - external procedure putsym; - external procedure setsymbolbreak; - external procedure space(n: integer); - external procedure undent; - -{$p----------------* - | Identifier list | - *-----------------*} - - - procedure identlist; - - begin {scan a list of identifiers separated by commas} - while sym = identifier do - begin - nextsym; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; - end; {identlist} -{$p---------* - | Constant | - *----------*} - - - procedure cnstnt; - - begin {scan a constant} - if (sym = plus) or (sym = minus) then - nextsym; - if not (sym in (cnstnts - [plus, minus])) then - abort(linenumber, syntax); - nextsym; - end; {cnstnt} -{$p---------* - | Variable | - *----------*} - - - procedure variable; - - begin {scan off a variable, doesn't check much} - while sym in [identifier, period, pointer, openbrack] do - begin - if sym = openbrack then - begin - nextsym; - exprlist; - checksym(closebrack, linenumber); - end - else - nextsym; - end; - end; {variable} -{$p--------------* - | Constant list | - *---------------*} - - - procedure constlist; - - begin {scan a list of constants, as for case labels} - while sym in cnstnts do - begin - cnstnt; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; - end; {constlist} -{$p-------* - | Factor | - *--------*} - - - procedure factor; - - begin {scan a factor in an expression, ignores precedence} - if sym = openparen then - begin - setsymbolbreak; - nextsym; - expression; - checksym(closeparen, linenumber); - end - else if sym = openbrack then - begin {set expression} - setsymbolbreak; - nextsym; - while sym in exprbegsys do - begin - exprlist; - if sym = subrange then - nextsym; - end; - checksym(closebrack, linenumber); - end - else if sym = identifier then - begin - variable; - if sym = openparen then - begin - if writecol <= threefourthline then - indentplus(writecol - indent, linenumber) - else - indentplus(0, linenumber); - nextsym; - exprlist; - checksym(closeparen, linenumber); - undent; - end - end - else - cnstnt; - end; {factor} -{$p-----------* - | Expression | - *------------*} - - - procedure expression; - - var - exprbroken: boolean; {break point already found} - - begin {scan an expression} - exprbroken := false; - while sym in exprbegsys do - begin - if sym in [plus, minus, notsy] then - nextsym; - if (sym = plus) or (sym = minus) or (sym = notsy) then - nextsym; - factor; - if (sym = andsy) or (sym = orsy) then - begin - nextsym; - setsymbolbreak; - exprbroken := true; - end - else if sym in relops then - begin - nextsym; - if not exprbroken and (writecol > fiveeighthline) then - begin - setsymbolbreak; - exprbroken := true; - end; - end - else if sym in arithops then - begin - nextsym; - if not exprbroken and (writecol > threefourthline) then - begin - setsymbolbreak; - exprbroken := true; - end; - end; - end; {while} - end; {expression} -{$p----------------* - | Expression list | - *-----------------*} - - - procedure exprlist; - - begin {scan a list of expressions} - while sym in exprbegsys do - begin - expression; - if (sym = comma) or (sym = colon) then - begin - nextsym; - setsymbolbreak; - end; - end; - end; {exprlist} -{$p--------------------------* - | Statement List (statlist) | - *---------------------------*} - - - procedure statlist; - - var - statterms: setofsyms; - statstart: collog; - firststat: boolean; - - begin {process a list of statements} - statterms := statset + [semicolon]; - firststat := true; - repeat - logsymbolstart(statstart); - statement; - {note: may or may not have semicolon} - if (sym = semicolon) and not symwritten then - putsym; - if (statsperline > 1) and not firststat then - bunchstatement(statstart); - {split like this so following comments don't screw up} - if sym = semicolon then - getsym; - firststat := false; - until not (sym in statterms); - end; {statelist} -{$p---------------------------* - | Compound statement (begin) | - *----------------------------*} - - - procedure dobegin(procblock: boolean); - - var - trim: integer; {amount to indent} - - begin {handle a begin - end block, indenting if requested by - setting procblock true} - if procblock then - trim := tabspaces - else - trim := 0; - nextonnewline(0, trim); - statlist; - undent; - printline(indent); - checksym(endsy, linenumber); - end; {dobegin} -{$p------------------------------* - | Assignment and Procedure Call | - *-------------------------------*} - - - procedure doassigncall; - - begin {either assignment or call} - printline(indent); - indentplus(continuespaces, linenumber); - variable; - if sym = becomes then - begin - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(0, linenumber); - expression; - undent; - end - else if sym = openparen then - begin - nextsym; - if writecol <= threefourthline then - indentplus(writecol - indent, linenumber) - else - indentplus(0, linenumber); - exprlist; - undent; - checksym(closeparen, linenumber); - end; - if sym = semicolon then - putsym; - undent; - end; {doassigncall} -{$p---------------* - | Goto statement | - *----------------*} - - - procedure dogoto; - - begin {goto statement} - printline(indent); - nextsym; - checksym(number, linenumber); - if sym = semicolon then - putsym; - end; {dogoto} -{$p----------------* - | While statement | - *-----------------*} - - - procedure dowhile; - - begin {while statement} - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - expression; - checksym(dosy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - statement; - undent; - end; {dowhile} -{$p---------------* - | With statement | - *----------------*} - - - procedure dowith; - - begin {withstatement} - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - exprlist; - checksym(dosy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - statement; - undent; - end; {dowith} -{$p-------------* - | If statement | - *--------------*} - - - procedure doif(prevelse: boolean {set if previous sym was else} ); - - var - ifstart: collog; {start of if statement} - startline, endline: integer; {statement lines} - successful: boolean; {bunching went} - - begin {if statement} - if not prevelse then - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - startline := currentline; - expression; - checksym(thensy, linenumber); - undent; - indentplus(tabspaces, linenumber); - endline := currentline; - logsymbolstart(ifstart); - statement; - if bunching and (startline = endline) then - bunch(ifstart, successful); - undent; - statindent := indent; - if sym = elsesy then - begin - printline(indent); - nextsym; - if sym = ifsy then - doif(true) - else - begin - indentplus(tabspaces, linenumber); - logsymbolstart(ifstart); - statement; - if bunching then - bunch(ifstart, successful); - undent; - end; - end; - end; {doif} -{$p---------------* - | Case statement | - *----------------*} - - - procedure docase; - - var - casestart: collog; {start of case} - successful: boolean; {bunching successful} - labstart, labend: integer; {label list lines} - - begin {casestatement} - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - expression; - checksym(ofsy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - while not (sym in [endsy, elsesy, othwisesy]) do - begin - if sym in cnstnts then - begin - printline(indent); - labstart := currentline; - constlist; - checksym(colon, linenumber); - labend := currentline; - indentplus(tabspaces, linenumber); - logsymbolstart(casestart); - statement; - if bunching and (labstart = labend) then - bunch(casestart, successful); - undent; - statindent := indent; - end; {if sym in constants} - if sym = semicolon then - nextsym; - if not (sym in (cnstnts + [endsy, semicolon, elsesy, - othwisesy])) then - abort(linenumber, syntax); - end; {while} - if (sym = othwisesy) or (sym = elsesy) then - begin - nextonnewline(0, tabspaces); - statlist; - undent; - end; - printline(indent); - checksym(endsy, linenumber); - undent; - end; {docase} -{$p-----------------* - | Repeat statement | - *------------------*} - - - procedure dorepeat; - - begin {repeat statement} - nextonnewline(0, tabspaces); - statlist; - undent; - statindent := indent; - printline(indent); - checksym(untilsy, linenumber); - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - expression; - if sym = semicolon then - putsym; - undent; - end; {dorepeat} -{$p--------------* - | For statement | - *---------------*} - - - procedure dofor; - - begin {for statement} - nextonnewline(0, continuespaces); - checksym(identifier, linenumber); - checksym(becomes, linenumber); - expression; - if (sym <> tosy) and (sym <> downtosy) then - abort(linenumber, syntax); - nextsym; - expression; - checksym(dosy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statement; - undent; - end; {dofor} -{$p----------* - | Statement | - *-----------*} - - - procedure statement; - - begin {handle a (possibly empty) statement} - statindent := indent; - if sym = number then - begin - indentplus( - tabspaces, linenumber); - printline(indent); - nextsym; - checksym(colon, linenumber); - undent; - end; - if sym in (statset - [number]) then - case sym of - beginsy: - dobegin(false); - casesy: - docase; - forsy: - dofor; - gotosy: - dogoto; - identifier: - doassigncall; - ifsy: - doif(false); - repeatsy: - dorepeat; - whilesy: - dowhile; - withsy: - dowith; - end; {case} - statindent := indent; - end; {statement} -{$p----------------------* - | Formal Parameter List | - *-----------------------*} - - - procedure parameters; - - begin {format a formal parameter list: if they start less than - halfway across the page, they are all lined up with the - first parameter, on successive lines. If they start more - than halfway across the page, they begin on the next line, - indented double the usual (arbitrary)} - if writecol > onehalfline then - printline(indent + 2 * tabspaces); - nextsym; - indentplus(writecol - indent, linenumber); - while sym in [identifier, funcsy, procsy, varsy] do - begin - if sym <> identifier then - nextsym; - if sym <> identifier then - abort(linenumber, syntax); - indentplus(continuespaces, linenumber); - identlist; - undent; - if sym = colon then - begin {not proc or func} - nextsym; - if sym = stringsy then - stringtype {overly permissive} - else if sym = arraysy then - arraytype {overly permissive} - else - checksym(identifier, linenumber) - end; - if sym = semicolon then - begin - nextsym; - printline(indent); - end; - end; - checksym(closeparen, linenumber); - undent; - end; {parameters} -{$p-----------* - | Field list | - *------------*} - - - procedure fieldlist; - - var - invarpart: boolean; {true if there was an invarient part} - - begin {scan field list of type specification } - invarpart := false; - while sym = identifier do - begin - invarpart := true; - indentplus(continuespaces, linenumber); - identlist; - checksym(colon, linenumber); - undent; - scantype; - if sym = semicolon then - nextsym; - if sym = identifier then - printline(indent); - end; - if sym = casesy then - begin {case} - if invarpart then - printline(indent); - nextsym; - indentplus(continuespaces, linenumber); - checksym(identifier, linenumber); - if sym = colon then - begin - nextsym; - checksym(identifier, linenumber); - end; - checksym(ofsy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - printline(indent); - repeat {variant part} - constlist; - checksym(colon, linenumber); - indentplus(tabspaces, linenumber); - statindent := indent; - printline(indent); - checksym(openparen, linenumber); - indentplus(1, linenumber); {compensate for paren} - fieldlist; - undent; - checksym(closeparen, linenumber); - undent; - statindent := indent; - if sym = semicolon then - nextsym; - if (sym <> endsy) and (sym <> closeparen) then - printline(indent); - until not (sym in cnstnts); - undent; - statindent := indent; - end {case} - end; {fieldlist} -{$p------------* - | Record type | - *-------------*} - - - procedure recordtype(packedstart: collog); - - begin {handle a record type, includes a kluge to move "packed" down - to the next line} - indentplus(tabspaces, linenumber); - with packedstart do - if formatting and (logchar <> 0) and (charcount - - logchar < bufsize) then - with unwritten[logchar mod bufsize] do - begin {note that this kluge assumes the logged point has - become a space so it can be changed to a newline} - actionis := beginline; - spacing := indent; - writecol := indent + writecol - logcol; - currentline := currentline + 1; - end - else - printline(indent); - nextsym; - indentplus(tabspaces, linenumber); - statindent := indent; - printline(indent); - fieldlist; - undent; - printline(indent); - checksym(endsy, linenumber); - undent; - end; {recordtype} -{$p-----------* - | Array type | - *------------*} - - - procedure arraytype; - - begin {format an array type} - indentplus(tabspaces, linenumber); - nextsym; - setsymbolbreak; - checksym(openbrack, linenumber); - while sym in cnstnts do - begin - cnstnt; - if sym = subrange then - begin - nextsym; - cnstnt; - end; - if sym = colon then - begin {for conformant arrays} - nextsym; - checksym(identifier, linenumber) - end; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; {while} - checksym(closebrack, linenumber); - checksym(ofsy, linenumber); - scantype; - undent; - end; {arraytype} -{$P------------* - | String type | - *-------------*} - - - procedure stringtype; - - begin {format a string type} - nextsym; - if sym = openbrack then - begin {optional size '[n]'} - nextsym; - cnstnt; - checksym(closebrack, linenumber) - end - end; -{$p-----------------* - | Enumeration type | - *------------------*} - - - procedure enumtype; - - begin {handle an enumeration type, align to the right of the - opening parenthesis if there is room, otherwise use normal - continuation} - nextsym; - if writecol <= threefourthline then - indentplus(writecol - indent, linenumber) - else - indentplus(continuespaces, linenumber); - identlist; - checksym(closeparen, linenumber); - undent; - end; {enumtype} -{$p----------* - | Scan type | - *-----------*} - - - procedure scantype; - - var - packedstart: collog; - - begin {scan a type, formatting differs for each one} - indentplus(continuespaces, linenumber); - if sym = externsy then - nextsym - else if sym = abslutesy then - begin {absolute [ nnn ] or absolute [ nnn : mmm ]} - nextsym; - checksym(openbrack, linenumber); - cnstnt; - if sym = colon then - begin - nextsym; - cnstnt - end; - checksym(closebrack, linenumber); - space(1); - end; - if sym = packedsy then - begin {mark start of 'packed' - must actually be a space} - logsymbolstart(packedstart); - nextsym - end - else - packedstart.logchar := 0; - undent; - if not (sym in typebegsys) then - abort(linenumber, syntax); - case sym of - openparen: - enumtype; - arraysy: - arraytype; - stringsy: - stringtype; - filesy: - begin - nextsym; {untyped file is ok} - if sym = ofsy then - begin - nextsym; - scantype - end - end; - setsy: - begin - nextsym; - checksym(ofsy, linenumber); - scantype - end; - identifier, number, plus, minus, stringcon: - begin {simple or subrange} - cnstnt; - if sym = subrange then - begin - nextsym; - cnstnt; - end; - end; - pointer: - begin - nextsym; - scantype; - end; - recordsy: - recordtype(packedstart); - end; {case} - statindent := indent; - end; {scantype} -{$p------------------* - | Label Declaration | - *-------------------*} - - - procedure dolabel; - - begin {label declaration} - nextonnewline(1, tabspaces); - printline(indent); - while sym = number do - begin - nextsym; - if sym = comma then - nextsym; - end; {while} - checksym(semicolon, linenumber); - undent; - statindent := indent; - end; {dolabel} -{$p---------------------* - | Constant Declaration | - *----------------------*} - - - procedure doconst; - - var - conststart: collog; {start of particular declaration} - firstconst: boolean; {first constant in decl} - - begin {constant declaration} - nextonnewline(1, tabspaces); - firstconst := true; - while sym = identifier do - begin - logsymbolstart(conststart); - printline(indent); - nextsym; - checksym(equal, linenumber); - cnstnt; - if sym = semicolon then - putsym - else - abort(linenumber, syntax); - if (statsperline > 1) and not firstconst then - bunchstatement(conststart); - nextsym; {split so comments format right} - firstconst := false; - end; {while} - undent; - statindent := indent; - end; {doconst} -{$p-----------------* - | Type Declaration | - *------------------*} - - - procedure dotype; - - begin {typedeclaration} - nextonnewline(1, tabspaces); - while sym = identifier do - begin - printline(indent); - nextsym; - checksym(equal, linenumber); - scantype; - checksym(semicolon, linenumber); - end; {while} - undent; - statindent := indent; - end; {dotype} -{$p----------------* - | Var Declaration | - *-----------------*} - - - procedure dovar; - - begin {var declaration} - nextonnewline(1, tabspaces); - while (sym = identifier) do - begin - printline(indent); - indentplus(continuespaces, linenumber); - if sym <> identifier then - abort(linenumber, syntax); - identlist; - checksym(colon, linenumber); - undent; - scantype; - checksym(semicolon, linenumber); - end; {while} - undent; - statindent := indent; - end; {dovar} -{$P---------------------------* - | Procedure/Function Heading | - *----------------------------*} - - - procedure doprochead; - - var - startsym: symbols; - - begin {process procedure or function heading} - if sym = externsy then - begin {optional 'external'} - nextonnewline(0, continuespaces); - if sym = openbrack then {optional '[n]'} - begin - nextsym; - cnstnt; - checksym(closebrack, linenumber) - end; - startsym := sym; - nextsym - end - else - begin - startsym := sym; - nextonnewline(2, continuespaces) - end; - if sym = intruptsy then - begin {optional 'interrupt [n]'} - nextsym; - checksym(openbrack, linenumber); - cnstnt; - checksym(closebrack, linenumber); - space(1) - end; - checksym(identifier, linenumber); - if sym = openparen then - parameters; - if startsym = funcsy then - begin - checksym(colon, linenumber); - checksym(identifier, linenumber) - end; - checksym(semicolon, linenumber); - undent; - end; - -{$p----------------------* - | Procedure Declaration | - *-----------------------*} - - - procedure doprocedure; - - begin {procedure} - doprochead; - indentplus(tabspaces, linenumber); - if sym = forwardsy then - begin - printline(indent); - nextsym; - end - else if sym in blockbegsys then - doblock - else - abort(linenumber, syntax); - if sym = semicolon then - begin - putsym; - undent; - statindent := indent; - nextsym; - end - else - abort(linenumber, syntax); - end; {doprocedure} -{$p--------* - | Program | - *---------*} - - - procedure doprogram; - - var - doingmodule: boolean; {this is a module} - - begin {program or module} - doingmodule := (sym = modulesy); - nextonnewline(0, continuespaces); - checksym(identifier, linenumber); - if sym = openparen then - begin - nextsym; - while sym = identifier do - begin - nextsym; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; - checksym(closeparen, linenumber); - end; - checksym(semicolon, linenumber); - undent; - indentplus(tabspaces, linenumber); - doblock; - undent; - if doingmodule then - begin - if sym = semicolon then - nextsym; - if sym = modendsy then - nextonnewline(1, indent) - else - abort(linenumber, syntax); - end {final end for module} ; - checksym(period, linenumber); - end; {doprogram} -{$p------* - | Block | - *-------*} - - - procedure doblock; - - begin {scan a block, including types, etc} - statindent := indent; - while sym in headingbegsys do - begin {declarations} - case sym of - labelsy: - dolabel; - constsy: - doconst; - typesy: - dotype; - varsy: - dovar; - procsy, funcsy: - doprocedure; - externsy: - doprochead; - end; {case} - statindent := indent; - end; {while} - if sym = beginsy then - begin - blankline := true; - dobegin(true); - end; - end; {doblock} - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/PMPARSE.SRC b/software/CPM/CPM22_MTPUG_10/PMPARSE.SRC deleted file mode 100644 index 7179989..0000000 --- a/software/CPM/CPM22_MTPUG_10/PMPARSE.SRC +++ /dev/null @@ -1,1082 +0,0 @@ -{*---------------------------------* - | Pasmat Recursive Descent Parser | - *---------------------------------*} -{$K0} {$K2} {$K7} {$K12} {$K13} {$K14} {$K15} -{$S+} {$Q2} -module pmparse; - {$L-} - {$I PMDEFS.INC} - {$L+} - - external procedure abort(line: integer; - kind: abortkind); - external procedure bunch(start: collog; - var success: boolean); - external procedure bunchstatement(start: collog); - external procedure checksym(desired: symbols; - line: integer); - external procedure getsym; - external procedure indentplus(delta: integer; - line: integer); - external procedure logsymbolstart(var log: collog); - external procedure nextonnewline(spacing, delta: integer); - external procedure nextsym; - external procedure printline(indent: integer); - external procedure putsym; - external procedure setsymbolbreak; - external procedure space(n: integer); - external procedure undent; - -{$p----------------* - | Identifier list | - *-----------------*} - - - procedure identlist; - - begin {scan a list of identifiers separated by commas} - while sym = identifier do - begin - nextsym; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; - end; {identlist} -{$p---------* - | Constant | - *----------*} - - - procedure cnstnt; - - begin {scan a constant} - if (sym = plus) or (sym = minus) then - nextsym; - if not (sym in (cnstnts - [plus, minus])) then - abort(linenumber, syntax); - nextsym; - end; {cnstnt} -{$p---------* - | Variable | - *----------*} - - - procedure variable; - - begin {scan off a variable, doesn't check much} - while sym in [identifier, period, pointer, openbrack] do - begin - if sym = openbrack then - begin - nextsym; - exprlist; - checksym(closebrack, linenumber); - end - else - nextsym; - end; - end; {variable} -{$p--------------* - | Constant list | - *---------------*} - - - procedure constlist; - - begin {scan a list of constants, as for case labels} - while sym in cnstnts do - begin - cnstnt; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; - end; {constlist} -{$p-------* - | Factor | - *--------*} - - - procedure factor; - - begin {scan a factor in an expression, ignores precedence} - if sym = openparen then - begin - setsymbolbreak; - nextsym; - expression; - checksym(closeparen, linenumber); - end - else if sym = openbrack then - begin {set expression} - setsymbolbreak; - nextsym; - while sym in exprbegsys do - begin - exprlist; - if sym = subrange then - nextsym; - end; - checksym(closebrack, linenumber); - end - else if sym = identifier then - begin - variable; - if sym = openparen then - begin - if writecol <= threefourthline then - indentplus(writecol - indent, linenumber) - else - indentplus(0, linenumber); - nextsym; - exprlist; - checksym(closeparen, linenumber); - undent; - end - end - else - cnstnt; - end; {factor} -{$p-----------* - | Expression | - *------------*} - - - procedure expression; - - var - exprbroken: boolean; {break point already found} - - begin {scan an expression} - exprbroken := false; - while sym in exprbegsys do - begin - if sym in [plus, minus, notsy] then - nextsym; - if (sym = plus) or (sym = minus) or (sym = notsy) then - nextsym; - factor; - if (sym = andsy) or (sym = orsy) then - begin - nextsym; - setsymbolbreak; - exprbroken := true; - end - else if sym in relops then - begin - nextsym; - if not exprbroken and (writecol > fiveeighthline) then - begin - setsymbolbreak; - exprbroken := true; - end; - end - else if sym in arithops then - begin - nextsym; - if not exprbroken and (writecol > threefourthline) then - begin - setsymbolbreak; - exprbroken := true; - end; - end; - end; {while} - end; {expression} -{$p----------------* - | Expression list | - *-----------------*} - - - procedure exprlist; - - begin {scan a list of expressions} - while sym in exprbegsys do - begin - expression; - if (sym = comma) or (sym = colon) then - begin - nextsym; - setsymbolbreak; - end; - end; - end; {exprlist} -{$p--------------------------* - | Statement List (statlist) | - *---------------------------*} - - - procedure statlist; - - var - statterms: setofsyms; - statstart: collog; - firststat: boolean; - - begin {process a list of statements} - statterms := statset + [semicolon]; - firststat := true; - repeat - logsymbolstart(statstart); - statement; - {note: may or may not have semicolon} - if (sym = semicolon) and not symwritten then - putsym; - if (statsperline > 1) and not firststat then - bunchstatement(statstart); - {split like this so following comments don't screw up} - if sym = semicolon then - getsym; - firststat := false; - until not (sym in statterms); - end; {statelist} -{$p---------------------------* - | Compound statement (begin) | - *----------------------------*} - - - procedure dobegin(procblock: boolean); - - var - trim: integer; {amount to indent} - - begin {handle a begin - end block, indenting if requested by - setting procblock true} - if procblock then - trim := tabspaces - else - trim := 0; - nextonnewline(0, trim); - statlist; - undent; - printline(indent); - checksym(endsy, linenumber); - end; {dobegin} -{$p------------------------------* - | Assignment and Procedure Call | - *-------------------------------*} - - - procedure doassigncall; - - begin {either assignment or call} - printline(indent); - indentplus(continuespaces, linenumber); - variable; - if sym = becomes then - begin - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(0, linenumber); - expression; - undent; - end - else if sym = openparen then - begin - nextsym; - if writecol <= threefourthline then - indentplus(writecol - indent, linenumber) - else - indentplus(0, linenumber); - exprlist; - undent; - checksym(closeparen, linenumber); - end; - if sym = semicolon then - putsym; - undent; - end; {doassigncall} -{$p---------------* - | Goto statement | - *----------------*} - - - procedure dogoto; - - begin {goto statement} - printline(indent); - nextsym; - checksym(number, linenumber); - if sym = semicolon then - putsym; - end; {dogoto} -{$p----------------* - | While statement | - *-----------------*} - - - procedure dowhile; - - begin {while statement} - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - expression; - checksym(dosy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - statement; - undent; - end; {dowhile} -{$p---------------* - | With statement | - *----------------*} - - - procedure dowith; - - begin {withstatement} - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - exprlist; - checksym(dosy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - statement; - undent; - end; {dowith} -{$p-------------* - | If statement | - *--------------*} - - - procedure doif(prevelse: boolean {set if previous sym was else} ); - - var - ifstart: collog; {start of if statement} - startline, endline: integer; {statement lines} - successful: boolean; {bunching went} - - begin {if statement} - if not prevelse then - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - startline := currentline; - expression; - checksym(thensy, linenumber); - undent; - indentplus(tabspaces, linenumber); - endline := currentline; - logsymbolstart(ifstart); - statement; - if bunching and (startline = endline) then - bunch(ifstart, successful); - undent; - statindent := indent; - if sym = elsesy then - begin - printline(indent); - nextsym; - if sym = ifsy then - doif(true) - else - begin - indentplus(tabspaces, linenumber); - logsymbolstart(ifstart); - statement; - if bunching then - bunch(ifstart, successful); - undent; - end; - end; - end; {doif} -{$p---------------* - | Case statement | - *----------------*} - - - procedure docase; - - var - casestart: collog; {start of case} - successful: boolean; {bunching successful} - labstart, labend: integer; {label list lines} - - begin {casestatement} - printline(indent); - nextsym; - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - expression; - checksym(ofsy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - while not (sym in [endsy, elsesy, othwisesy]) do - begin - if sym in cnstnts then - begin - printline(indent); - labstart := currentline; - constlist; - checksym(colon, linenumber); - labend := currentline; - indentplus(tabspaces, linenumber); - logsymbolstart(casestart); - statement; - if bunching and (labstart = labend) then - bunch(casestart, successful); - undent; - statindent := indent; - end; {if sym in constants} - if sym = semicolon then - nextsym; - if not (sym in (cnstnts + [endsy, semicolon, elsesy, - othwisesy])) then - abort(linenumber, syntax); - end; {while} - if (sym = othwisesy) or (sym = elsesy) then - begin - nextonnewline(0, tabspaces); - statlist; - undent; - end; - printline(indent); - checksym(endsy, linenumber); - undent; - end; {docase} -{$p-----------------* - | Repeat statement | - *------------------*} - - - procedure dorepeat; - - begin {repeat statement} - nextonnewline(0, tabspaces); - statlist; - undent; - statindent := indent; - printline(indent); - checksym(untilsy, linenumber); - if writecol < threefourthline then - indentplus(writecol - indent + 1, linenumber) - else - indentplus(continuespaces, linenumber); - expression; - if sym = semicolon then - putsym; - undent; - end; {dorepeat} -{$p--------------* - | For statement | - *---------------*} - - - procedure dofor; - - begin {for statement} - nextonnewline(0, continuespaces); - checksym(identifier, linenumber); - checksym(becomes, linenumber); - expression; - if (sym <> tosy) and (sym <> downtosy) then - abort(linenumber, syntax); - nextsym; - expression; - checksym(dosy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statement; - undent; - end; {dofor} -{$p----------* - | Statement | - *-----------*} - - - procedure statement; - - begin {handle a (possibly empty) statement} - statindent := indent; - if sym = number then - begin - indentplus( - tabspaces, linenumber); - printline(indent); - nextsym; - checksym(colon, linenumber); - undent; - end; - if sym in (statset - [number]) then - case sym of - beginsy: - dobegin(false); - casesy: - docase; - forsy: - dofor; - gotosy: - dogoto; - identifier: - doassigncall; - ifsy: - doif(false); - repeatsy: - dorepeat; - whilesy: - dowhile; - withsy: - dowith; - end; {case} - statindent := indent; - end; {statement} -{$p----------------------* - | Formal Parameter List | - *-----------------------*} - - - procedure parameters; - - begin {format a formal parameter list: if they start less than - halfway across the page, they are all lined up with the - first parameter, on successive lines. If they start more - than halfway across the page, they begin on the next line, - indented double the usual (arbitrary)} - if writecol > onehalfline then - printline(indent + 2 * tabspaces); - nextsym; - indentplus(writecol - indent, linenumber); - while sym in [identifier, funcsy, procsy, varsy] do - begin - if sym <> identifier then - nextsym; - if sym <> identifier then - abort(linenumber, syntax); - indentplus(continuespaces, linenumber); - identlist; - undent; - if sym = colon then - begin {not proc or func} - nextsym; - if sym = stringsy then - stringtype {overly permissive} - else if sym = arraysy then - arraytype {overly permissive} - else - checksym(identifier, linenumber) - end; - if sym = semicolon then - begin - nextsym; - printline(indent); - end; - end; - checksym(closeparen, linenumber); - undent; - end; {parameters} -{$p-----------* - | Field list | - *------------*} - - - procedure fieldlist; - - var - invarpart: boolean; {true if there was an invarient part} - - begin {scan field list of type specification } - invarpart := false; - while sym = identifier do - begin - invarpart := true; - indentplus(continuespaces, linenumber); - identlist; - checksym(colon, linenumber); - undent; - scantype; - if sym = semicolon then - nextsym; - if sym = identifier then - printline(indent); - end; - if sym = casesy then - begin {case} - if invarpart then - printline(indent); - nextsym; - indentplus(continuespaces, linenumber); - checksym(identifier, linenumber); - if sym = colon then - begin - nextsym; - checksym(identifier, linenumber); - end; - checksym(ofsy, linenumber); - undent; - indentplus(tabspaces, linenumber); - statindent := indent; - printline(indent); - repeat {variant part} - constlist; - checksym(colon, linenumber); - indentplus(tabspaces, linenumber); - statindent := indent; - printline(indent); - checksym(openparen, linenumber); - indentplus(1, linenumber); {compensate for paren} - fieldlist; - undent; - checksym(closeparen, linenumber); - undent; - statindent := indent; - if sym = semicolon then - nextsym; - if (sym <> endsy) and (sym <> closeparen) then - printline(indent); - until not (sym in cnstnts); - undent; - statindent := indent; - end {case} - end; {fieldlist} -{$p------------* - | Record type | - *-------------*} - - - procedure recordtype(packedstart: collog); - - begin {handle a record type, includes a kluge to move "packed" down - to the next line} - indentplus(tabspaces, linenumber); - with packedstart do - if formatting and (logchar <> 0) and (charcount - - logchar < bufsize) then - with unwritten[logchar mod bufsize] do - begin {note that this kluge assumes the logged point has - become a space so it can be changed to a newline} - actionis := beginline; - spacing := indent; - writecol := indent + writecol - logcol; - currentline := currentline + 1; - end - else - printline(indent); - nextsym; - indentplus(tabspaces, linenumber); - statindent := indent; - printline(indent); - fieldlist; - undent; - printline(indent); - checksym(endsy, linenumber); - undent; - end; {recordtype} -{$p-----------* - | Array type | - *------------*} - - - procedure arraytype; - - begin {format an array type} - indentplus(tabspaces, linenumber); - nextsym; - setsymbolbreak; - checksym(openbrack, linenumber); - while sym in cnstnts do - begin - cnstnt; - if sym = subrange then - begin - nextsym; - cnstnt; - end; - if sym = colon then - begin {for conformant arrays} - nextsym; - checksym(identifier, linenumber) - end; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; {while} - checksym(closebrack, linenumber); - checksym(ofsy, linenumber); - scantype; - undent; - end; {arraytype} -{$P------------* - | String type | - *-------------*} - - - procedure stringtype; - - begin {format a string type} - nextsym; - if sym = openbrack then - begin {optional size '[n]'} - nextsym; - cnstnt; - checksym(closebrack, linenumber) - end - end; -{$p-----------------* - | Enumeration type | - *------------------*} - - - procedure enumtype; - - begin {handle an enumeration type, align to the right of the - opening parenthesis if there is room, otherwise use normal - continuation} - nextsym; - if writecol <= threefourthline then - indentplus(writecol - indent, linenumber) - else - indentplus(continuespaces, linenumber); - identlist; - checksym(closeparen, linenumber); - undent; - end; {enumtype} -{$p----------* - | Scan type | - *-----------*} - - - procedure scantype; - - var - packedstart: collog; - - begin {scan a type, formatting differs for each one} - indentplus(continuespaces, linenumber); - if sym = externsy then - nextsym - else if sym = abslutesy then - begin - nextsym; - checksym(openbrack, linenumber); - cnstnt; - checksym(closebrack, linenumber); - space(1); - end; - if sym = packedsy then - begin {mark start of 'packed' - must actually be a space} - logsymbolstart(packedstart); - nextsym - end - else - packedstart.logchar := 0; - undent; - if not (sym in typebegsys) then - abort(linenumber, syntax); - case sym of - openparen: - enumtype; - arraysy: - arraytype; - stringsy: - stringtype; - filesy: - begin - nextsym; {untyped file is ok} - if sym = ofsy then - begin - nextsym; - scantype - end - end; - setsy: - begin - nextsym; - checksym(ofsy, linenumber); - scantype - end; - identifier, number, plus, minus, stringcon: - begin {simple or subrange} - cnstnt; - if sym = subrange then - begin - nextsym; - cnstnt; - end; - end; - pointer: - begin - nextsym; - scantype; - end; - recordsy: - recordtype(packedstart); - end; {case} - statindent := indent; - end; {scantype} -{$p------------------* - | Label Declaration | - *-------------------*} - - - procedure dolabel; - - begin {label declaration} - nextonnewline(1, tabspaces); - printline(indent); - while sym = number do - begin - nextsym; - if sym = comma then - nextsym; - end; {while} - checksym(semicolon, linenumber); - undent; - statindent := indent; - end; {dolabel} -{$p---------------------* - | Constant Declaration | - *----------------------*} - - - procedure doconst; - - var - conststart: collog; {start of particular declaration} - firstconst: boolean; {first constant in decl} - - begin {constant declaration} - nextonnewline(1, tabspaces); - firstconst := true; - while sym = identifier do - begin - logsymbolstart(conststart); - printline(indent); - nextsym; - checksym(equal, linenumber); - cnstnt; - if sym = semicolon then - putsym - else - abort(linenumber, syntax); - if (statsperline > 1) and not firstconst then - bunchstatement(conststart); - nextsym; {split so comments format right} - firstconst := false; - end; {while} - undent; - statindent := indent; - end; {doconst} -{$p-----------------* - | Type Declaration | - *------------------*} - - - procedure dotype; - - begin {typedeclaration} - nextonnewline(1, tabspaces); - while sym = identifier do - begin - printline(indent); - nextsym; - checksym(equal, linenumber); - scantype; - checksym(semicolon, linenumber); - end; {while} - undent; - statindent := indent; - end; {dotype} -{$p----------------* - | Var Declaration | - *-----------------*} - - - procedure dovar; - - begin {var declaration} - nextonnewline(1, tabspaces); - while (sym = identifier) do - begin - printline(indent); - indentplus(continuespaces, linenumber); - if sym <> identifier then - abort(linenumber, syntax); - identlist; - checksym(colon, linenumber); - undent; - scantype; - checksym(semicolon, linenumber); - end; {while} - undent; - statindent := indent; - end; {dovar} -{$P---------------------------* - | Procedure/Function Heading | - *----------------------------*} - - - procedure doprochead; - - var - startsym: symbols; - - begin {process procedure or function heading} - if sym = externsy then - begin {optional 'external'} - nextonnewline(0, continuespaces); - if sym = openbrack then {optional '[n]'} - begin - nextsym; - cnstnt; - checksym(closebrack, linenumber) - end; - startsym := sym; - nextsym - end - else - begin - startsym := sym; - nextonnewline(2, continuespaces) - end; - if sym = intruptsy then - begin {optional 'interrupt [n]'} - nextsym; - checksym(openbrack, linenumber); - cnstnt; - checksym(closebrack, linenumber); - space(1) - end; - checksym(identifier, linenumber); - if sym = openparen then - parameters; - if startsym = funcsy then - begin - checksym(colon, linenumber); - checksym(identifier, linenumber) - end; - checksym(semicolon, linenumber); - undent; - end; - -{$p----------------------* - | Procedure Declaration | - *-----------------------*} - - - procedure doprocedure; - - begin {procedure} - doprochead; - indentplus(tabspaces, linenumber); - if sym = forwardsy then - begin - printline(indent); - nextsym; - end - else if sym in blockbegsys then - doblock - else - abort(linenumber, syntax); - if sym = semicolon then - begin - putsym; - undent; - statindent := indent; - nextsym; - end - else - abort(linenumber, syntax); - end; {doprocedure} -{$p--------* - | Program | - *---------*} - - - procedure doprogram; - - var - doingmodule: boolean; {this is a module} - - begin {program or module} - doingmodule := (sym = modulesy); - nextonnewline(0, continuespaces); - checksym(identifier, linenumber); - if sym = openparen then - begin - nextsym; - while sym = identifier do - begin - nextsym; - if sym = comma then - begin - nextsym; - setsymbolbreak; - end; - end; - checksym(closeparen, linenumber); - end; - checksym(semicolon, linenumber); - undent; - indentplus(tabspaces, linenumber); - doblock; - undent; - if doingmodule then - begin - if sym = semicolon then - nextsym; - if sym = modendsy then - nextonnewline(1, indent) - else - abort(linenumber, syntax); - end {final end for module} ; - checksym(period, linenumber); - end; {doprogram} -{$p------* - | Block | - *-------*} - - - procedure doblock; - - begin {scan a block, including types, etc} - statindent := indent; - while sym in headingbegsys do - begin {declarations} - case sym of - labelsy: - dolabel; - constsy: - doconst; - typesy: - dotype; - varsy: - dovar; - procsy, funcsy: - doprocedure; - externsy: - doprochead; - end; {case} - statindent := indent; - end; {while} - if sym = beginsy then - begin - blankline := true; - dobegin(true); - end; - end; {doblock} - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM22_MTPUG_10/RNB.SRC b/software/CPM/CPM22_MTPUG_10/RNB.SRC deleted file mode 100644 index 77901d9..0000000 --- a/software/CPM/CPM22_MTPUG_10/RNB.SRC +++ /dev/null @@ -1,114 +0,0 @@ -module rnbmodule; - - const - cr = $0D; - lf = $0A; - bs = $08; - - {$I B:FIBDEF.LIB} - - var - @lfb: external ^fib; - resultio: external integer; - - external function @bdos(func: integer; parm: word): integer; - external procedure @dflt; - -{ Purpose: Read N bytes from a file pointed to by @lfb - N is specified by @lfb^.iosize - update: 14 Mar 82, H. Lucas, correct eof/eoln problem - last update: 13 Aug 82, S. Clamage, correct eof problem } - - {$E-} - - - procedure nu_sect; - - var - i: integer; - - begin - with @lfb^ do - begin - fsecinx := 0; - i := @bdos(26, wrd(addr(fsector))); { set dma } - resultio := @bdos(20, wrd(addr(fcb))); { read sector } - if resultio <> 0 then - begin - nosectrs := true; - bufidx := 0 - end - end - end; - - {$E+} - - - procedure @rnb; - - var - dstptr: ^byte; - n, i: integer; - - begin - with @lfb^ do - begin - dstptr := fbufadr; - - if option = fconio then { con:, do an echoing read } - begin - dstptr^ := chr(@bdos(1, wrd(0))); { read a char with - echo } - if dstptr^ = cr then { echo cr with crlf } - i := @bdos(2, wrd(lf)) - else if dstptr^ = bs then { echo bs with sp/bs } - begin - i := @bdos(2, wrd(' ')); - i := @bdos(2, wrd(bs)) - end; - exit - end; { con: } - - if option = ftrmio then { kbd: do a non-echo read } - begin - repeat { read a char with no echo } - dstptr^ := chr(@bdos(6, wrd($FF))); - until dstptr^ <> 0; - exit - end; { kbd: } - - if option = fauxio then { rdr: } - begin - dstptr^ := chr(@bdos(3, wrd(0))); { read rdr: } - exit - end; { rdr: } - - if nosectrs then - begin - feof := true; - exit - end; { nosectrs } - - for n := 1 to iosize do - begin - if fsecinx = 128 then - nu_sect; { need new sector } - if nosectrs then - begin { end of file } - dstptr^ := chr($FF); - @dflt; - exit - end; {nosectrs} - dstptr^ := fsector[fsecinx]; - fsecinx := fsecinx + 1; - dstptr := dstptr + 1 - end; { for } - if @lfb^.fsecinx = 128 then { why is this needed? } - nu_sect; - @lfb^.bufidx := 0; { so gnb works } - @dflt; { to protect user data from i/o clobber } - end; { with } - end; { @rnb } - -modend . - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/ACK.PLI b/software/CPM/CPM23_PLI/ACK.PLI deleted file mode 100644 index 968d773..0000000 --- a/software/CPM/CPM23_PLI/ACK.PLI +++ /dev/null @@ -1,27 +0,0 @@ -ack: - procedure options(main,stack(2000)); - dcl - (m,maxm,n,maxn) fixed; - put skip list('Type max m,n: '); - get list(maxm,maxn); - put skip - list(' ',(decimal(n,4) do n=0 to maxn)); - do m = 0 to maxm; - put skip list(decimal(m,4),':'); - do n = 0 to maxn; - put list(decimal(ackermann(m,n),4)); - end; - end; - stop; - - ackermann: - procedure(m,n) returns(fixed) recursive; - dcl (m,n) fixed; - if m = 0 then - return(n+1); - if n = 0 then - return(ackermann(m-1,1)); - return(ackermann(m-1,ackermann(m,n-1))); - end ackermann; - end ack; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/ACKTST.PLI b/software/CPM/CPM23_PLI/ACKTST.PLI deleted file mode 100644 index 1a0c398..0000000 --- a/software/CPM/CPM23_PLI/ACKTST.PLI +++ /dev/null @@ -1,40 +0,0 @@ -ack: - procedure options(main,stack(2000)); - dcl - (m,n) fixed, - (maxm,maxn) fixed, - ncalls decimal(6), - (curstack, stacksize) fixed, - stksiz entry returns(fixed); - - put skip list('Type max m,n: '); - get list(maxm,maxn); - do m = 0 to maxm; - do n = 0 to maxn; - ncalls = 0; - curstack = 0; - stacksize = 0; - put edit - ('Ack(',m,',',n,')=',ackermann(m,n), - ncalls,' Calls,',stacksize,' Stack Bytes') - (skip,a,2(f(2),a),f(6),f(7),a,f(4),a); - end; - end; - stop; - - ackermann: - procedure(m,n) returns(fixed) recursive; - dcl - (m,n) fixed; - ncalls = ncalls + 1; - curstack = stksiz(); - if curstack > stacksize then - stacksize = curstack; - if m = 0 then - return(n+1); - if n = 0 then - return(ackermann(m-1,1)); - return(ackermann(m-1,ackermann(m,n-1))); - end ackermann; - end ack; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/ALLTST.PLI b/software/CPM/CPM23_PLI/ALLTST.PLI deleted file mode 100644 index 8ddda16..0000000 --- a/software/CPM/CPM23_PLI/ALLTST.PLI +++ /dev/null @@ -1,33 +0,0 @@ -alltst: - proc options(main); - /* assembly language interface to - dynamic storage allocation module */ - dcl - totwds returns(fixed(15)), - maxwds returns(fixed(15)), - allwds entry(fixed(15)) returns(ptr); - - dcl - allreq fixed(15), - memptr ptr, - meminx fixed(15), - memory (0:0) bit(16) based(memptr); - - do while('1'b); - put edit (totwds(),' Total Words Available', - maxwds(),' Maximum Segment Size', - 'Allocation Size? ') - (2(skip,f(6),a),skip,a); - get list(allreq); - memptr = allwds(allreq); - put edit('Allocated',allreq, - ' Words at ',unspec(memptr)) - (skip,a,f(6),a,b4); - - /* clear memory as example */ - do meminx = 0 to allreq-1; - memory(meminx) = '0000'b4; - end; - end; - end alltst; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/CALL.PLI b/software/CPM/CPM23_PLI/CALL.PLI deleted file mode 100644 index 0a467a0..0000000 --- a/software/CPM/CPM23_PLI/CALL.PLI +++ /dev/null @@ -1,26 +0,0 @@ -call: - proc options(main); - dcl - f (3) entry (float) returns (float) variable, - g entry (float) returns (float); - dcl - i fixed, x float; - - f(1) = sin; - f(2) = g; - f(3) = h; - - do i = 1 to 3; - put skip list('Type x '); - get list(x); - put list('f(',i,')=',f(i)(x)); - end; - stop; - - h: - proc(x) returns (float); - dcl x float; - return (2*x + 1); - end h; - end call; - \ No newline at end of file diff --git a/software/CPM/CPM23_PLI/CHESS.PLI b/software/CPM/CPM23_PLI/CHESS.PLI deleted file mode 100644 index b28e2f7..0000000 --- a/software/CPM/CPM23_PLI/CHESS.PLI +++ /dev/null @@ -1,731 +0,0 @@ -chess: procedure options(main); - -/**************************************************************** -* * -* This program has served as a timing test case throughout * -* the PL/I development. We expect that this program will be * -* extensively changed as various programmers work with it - * -* if you make any great improvements, let us know and we'll * -* send your updated version with our next release (you'll * -* also go in line in the list below, for eternal fame). * -* Feel free to distribute this program, or altered versions * -* thereof, but please keep the list of names intact. Oh, by * -* the way, CHESS currently plays against itself, and reads a * -* value to determine the search depth (don't make the value * -* too large, or you'll wait quite a while for the moves). * -* * -* Programmer Address Date * -* ---------- ------------------- ------ * -* JWB Digital Research 3/79 * -* * -* * -* (P.S., in its current state, this program takes 1:58 to * -* compile on a 4-mhz Z-80 with a hard disk attached, and 1:45 * -* if the $Q compile toggle is enabled.) * -****************************************************************/ - - declare (white initial (1), none initial (0), black initial (-1)) - static fixed (1); - - declare (empty_square initial (0), illegal_square initial (1), - white_pawn initial (2), white_knight initial (3), - white_bishop initial (4), white_rook initial (5), - white_queen initial (6), white_king initial (7), - black_pawn initial (8), black_knight initial (9), - black_bishop initial (10), black_rook initial (11), - black_queen initial (12), black_king initial (13)) - static fixed (4); - - declare piece_value (0 : 13) static fixed initial - (0,0,100,290,310,500,900,8000,-100,-290,-310,-500,-900,-8000); - - declare piece_picture (0 : 13) static char (4) varying initial - (' |','___|',' P |',' N |',' B |',' R |',' Q |',' K |', - '

    mi#rsd-mG! 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 3 THEN N = 3 REM ONLY THREE OPTIONS - PRINT "THE CURSOR WAS POSITIONED AT: "; X.AXIS,Y.AXIS - PRINT "YOU SELECTED OPTION: "; N - PRINT "THE TERMINATING KEY WAS: "; A$ - KEY% = PAUSE - - REM MENTION "GRAPHIC OPEN" STATEMENT - - GOPEN: CLEAR - SET COLOR 1 - SET CHARACTER HEIGHT 0 - GRAPHIC PRINT AT (0,90): "GRAPHIC OPEN STATEMENT" - GRAPHIC PRINT AT (0,50): \ - "THE GRAPHIC OPEN HAS NO DEMONSTRATION" - KEY% = PAUSE - - REM DEMONSTRATE CENTERING AND JUSTIFICATION - - GPRT: CLEAR - SET WINDOW 0,1,0,1 - SET CHARACTER HEIGHT 0 - GRAPHIC PRINT AT (0,.9): "GRAPHIC PRINT STATEMENT" - SET JUSTIFY 0,0 - GRAPHIC PRINT AT (.5,.5): "BEGINS AT CENTER" - KEY% = PAUSE - SET JUSTIFY .5,0 - GRAPHIC PRINT AT (.5,.3): "THIS IS CENTERED" - KEY% = PAUSE - SET JUSTIFY .5,.5 - GRAPHIC PRINT AT (.5,.3): "THIS IS CENTERED" - KEY% = PAUSE - SET JUSTIFY 1.0,1.0 - GRAPHIC PRINT AT (.5,.5): "ENDS AT CENTER" - KEY% = PAUSE - JUST: CLEAR - SET JUSTIFY 0,0 - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - GRAPHIC PRINT AT (0,90): "JUSTIFY STATEMENT" - PLOT (20,80),(20,20),(80,20) - PLOT (15,40),(20,40) - PLOT (15,60),(20,60) - PLOT (15,80),(20,80) - PLOT (40,15),(40,20) - PLOT (60,15),(60,20) - PLOT (80,15),(80,20) - SET JUSTIFY 1,.5 - GRAPHIC PRINT AT (14,20): "20" - GRAPHIC PRINT AT (14,40): "40" - GRAPHIC PRINT AT (14,60): "60" - GRAPHIC PRINT AT (14,80): "80" - SET JUSTIFY .5,1 - GRAPHIC PRINT AT (20,14): "20" - GRAPHIC PRINT AT (40,14): "40" - GRAPHIC PRINT AT (60,14): "60" - GRAPHIC PRINT AT (80,14): "80" - KEY% = PAUSE - - REM EXHIBIT VARIATION OF LINE STYLE - - STYL: CLEAR - SET JUSTIFY 0,0 - SET WINDOW 0,1,0,1 - GRAPHIC PRINT AT (0,.9): "LINE STYLE STATEMENT" - SET LINE STYLE 3 - SET JUSTIFY 1,0 - GRAPHIC PRINT AT (.5,.5): "Sign here" - PLOT (0.5,0.5),(0.8,0.5) - KEY% = PAUSE - - REM ILLUSTRATE VARIATION IN SIZE OF MARKERS - - MHIGH: CLEAR - SET WINDOW 0,1,0,1 - SET CHARACTER HEIGHT 0 - SET LINE STYLE 1 - SET JUSTIFY 0,0 - GRAPHIC PRINT AT (0,.9): "MARKER HEIGHT STATEMENT" - DIM MX(5) - DIM MY(5) - MX(0) = .3 : MY(0) = .7 - MX(1) = .7 : MY(1) = .7 - SET MARKER HEIGHT .1 - MAT MARKER 1: MX,MY - SET WINDOW 0,100,0,100 - MX(0) = 30 : MY(0) = 50 - MX(1) = 70 : MY(1) = 50 - SET MARKER HEIGHT 15 - MAT MARKER 1: MX,MY - SET MARKER HEIGHT 0 - ASK MARKER HEIGHT MK - PRINT "MINIMUM MARKER HEIGHT IS = "; MK - KEY% = PAUSE - - REM DEMONSTRATE ALL MARKER SHAPES - - MTYPE: CLEAR - SET WINDOW 0,1,0,1 - SET MARKER HEIGHT 0 - GRAPHIC PRINT AT (0,.9): "MARKER TYPE STATEMENT" - MX(0) = .5 : MY(0) = .7 - FOR I.INT% = 1 TO 5 - SET MARKER TYPE I.INT% - MAT MARKER 0: MX,MY - MY(0) = MY(0) - .1 - NEXT I.INT% - KEY% = PAUSE - - REM DEMONSTRATE FILLED POLYGON - - MFILL: CLEAR - SET LINE STYLE 1 - SET JUSTIFY 0,0 - GRAPHIC PRINT AT (0,.9): "MAT FILL STATEMENT" - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - SET COLOR 1 - DIM X.ARRAY(10) - DIM Y.ARRAY(10) - X.ARRAY(0) = 40 : Y.ARRAY(0) = 10 - X.ARRAY(1) = 35 : Y.ARRAY(1) = 25 - X.ARRAY(2) = 50 : Y.ARRAY(2) = 40 - X.ARRAY(3) = 65 : Y.ARRAY(3) = 25 - X.ARRAY(4) = 60 : Y.ARRAY(4) = 10 - MAT FILL 4: X.ARRAY,Y.ARRAY - KEY% = PAUSE - - REM ILLUSTRATE POSITIONING OF MARKERS VIA AN ARRAY - - MMARK: CLEAR - SET WINDOW 0,100,0,100 - GRAPHIC PRINT AT (0,90): "MAT MARKER STATEMENT" - SET MARKER HEIGHT 0 - SET MARKER TYPE 1 - SET COLOR 1 - MAT MARKER 4: X.ARRAY,Y.ARRAY - KEY% = PAUSE - - REM DEMONSTRATE DRAWING POLYGON OUTLINE VIA AN ARRAY - - MPLOT: CLEAR - GRAPHIC PRINT AT (0,90): "MAT PLOT STATEMENT" - SET COLOR 1 - SET WINDOW 0,1,0,1 - SET CHARACTER HEIGHT 0 - FOR I.INT% = 0 TO 4 - X.ARRAY(I.INT%) = .01 * X.ARRAY(I.INT%) - Y.ARRAY(I.INT%) = .01 * Y.ARRAY(I.INT%) - NEXT I.INT% - X.ARRAY(5) = .40 : Y.ARRAY(5) = .10 - SET BEAM "OFF" - MAT PLOT 4: X.ARRAY,Y.ARRAY - KEY% = PAUSE - CLEAR - MAT PLOT 5: X.ARRAY,Y.ARRAY - KEY% = PAUSE - - REM DO POLYGON VIA "PLOT" STATEMENTS - - PLT: CLEAR - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - SET COLOR 1 - GRAPHIC PRINT AT (0,90): "PLOT STATEMENT" - PLOT (40,10),(35,25); - SET COLOR 2 - PLOT (35,25),(50,40); - SET LINE STYLE 2 - PLOT (50,40),(65,25); - SET LINE STYLE 1 - SET COLOR 3 - PLOT (65,25),(60,10),(40,10) - KEY% = PAUSE - - REM EXERCISE ARBITRARY POSITIONING OF GRAPHIC BEAM - - POSIT: CLEAR - GRAPHIC PRINT AT (0,90): "POSITION STATEMENT" - SET BEAM "OFF" - SET POSITION 50,50 - SET POSITION 50,100 - SET BEAM "ON" - SET POSITION 0,0 - SET POSITION 50,50 - KEY% = PAUSE - - REM SHOW ALL LINE STYLES - - STCNT: CLEAR - GRAPHIC PRINT AT (0,90): "STYLE COUNT STATEMENT" - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - ASK STYLE COUNT ST% - PRINT "THE NUMBER OF LINE STYLES IS: "; ST% - FOR I.INT% = 1 TO ST% - SET LINE STYLE I.INT% - SET BEAM "OFF" - PLOT (10*I.INT%,10),(10*I.INT%,90) - NEXT I.INT% - KEY% = PAUSE - SET LINE STYLE 1 - - REM DEMONSTRATE ROTATION OF TEXT - - ANGEL: CLEAR - GRAPHIC PRINT AT (0,90): "TEXT ANGLE STATEMENT" - SET WINDOW 0,1,0,1 - SET CHARACTER HEIGHT 0 - PI = 3.1415926 - RAD = PI*2 - DEG = RAD/360 - FOR I.INT% = 90 TO 360 STEP 90 - SET TEXT ANGLE I.INT%*DEG - GRAPHIC PRINT AT (.5,.5): "ROTATE ME" - NEXT I.INT% - KEY% = PAUSE - SET TEXT ANGLE 0 - - REM ILLUSTRATE EFFECT OF VARYING VIEWPORT - - VYOU: CLEAR - GRAPHIC PRINT AT (0,.9): "VIEWPORT STATEMENT" - X.ARRAY(0) = 0 : Y.ARRAY(0) = 0 - X.ARRAY(1) = 0 : Y.ARRAY(1) = 100 - X.ARRAY(2) = 100 : Y.ARRAY(2) = 100 - X.ARRAY(3) = 100 : Y.ARRAY(3) = 0 - X.ARRAY(4) = 0 : Y.ARRAY(4) = 0 - SET VIEWPORT 0,1,0,1 - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - MAT PLOT 4: X.ARRAY,Y.ARRAY - SET VIEWPORT .1,.9,.1,.9 - MAT PLOT 4: X.ARRAY,Y.ARRAY - SET VIEWPORT .2,.8,.2,.8 - MAT PLOT 4: X.ARRAY,Y.ARRAY - SET VIEWPORT .3,.5,.3,.5 - MAT PLOT 4: X.ARRAY,Y.ARRAY - SET VIEWPORT .5,.7,.5,.7 - MAT PLOT 4: X.ARRAY,Y.ARRAY - KEY% = PAUSE - - REM ILLUSTRATE EFFECT OF VARYING WINDOW - - WINDW: CLEAR - SET VIEWPORT 0,1,0,1 - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - GRAPHIC PRINT AT (0,90): "WINDOW STATEMENT" - PLOT (0,0),(60,60),(60,0),(0,0) - SET WINDOW 0,200,0,200 - SET CHARACTER HEIGHT 0 - PLOT (0,0),(60,60),(60,0),(0,0) - SET VIEWPORT 0,.5,.5,1.0 - PLOT (0,0),(60,60),(60,0),(0,0) - KEY% = PAUSE - - REM FINISH DEMONSTRATION AND END PROGRAM - - FIN: CLEAR - SET WINDOW 0,100,0,100 - SET CHARACTER HEIGHT 0 - SET VIEWPORT 0,1,0,1 - SET COLOR 1 - FOR I.INT% = 1 TO CT% - SET COLOR I.INT% - MAT PLOT 5: X.ARRAY,Y.ARRAY - SET VIEWPORT .01*I.INT%,1-(I.INT%*.01), \ - .01*I.INT%,1-(I.INT%*.01) - NEXT I.INT% - SET JUSTIFY .5,.5 - SET COLOR 1 - SET VIEWPORT 0,1,0,1 - GRAPHIC PRINT AT (50,50): "THANKS FOR THE VIEWING" - KEY% = PAUSE - STOP - END -  \ No newline at end of file diff --git a/software/CPM/CPM06_COBOL80_v20/GRAPHCOM.BAS b/software/CPM/CPM06_COBOL80_v20/GRAPHCOM.BAS deleted file mode 100644 index 86ac41c..0000000 --- a/software/CPM/CPM06_COBOL80_v20/GRAPHCOM.BAS +++ /dev/null @@ -1,4 +0,0 @@ -COMMON ?VIEW(2),?WIND(2),?P(2),?P1(2),?KAPU(2) -COMMON ?PTSI%(1),?PTSO%(1),?CONT%(1),?INTI%(1),?INTO%(1) -COMMON ?VWTX(2),?RVIW(2),?VX(1),?XN,?YN,?XW,?YW - \ No newline at end of file diff --git a/software/CPM/CPM06_COBOL80_v20/GRAPHR.BAS b/software/CPM/CPM06_COBOL80_v20/GRAPHR.BAS deleted file mode 100644 index 6704471..0000000 --- a/software/CPM/CPM06_COBOL80_v20/GRAPHR.BAS +++ /dev/null @@ -1,321 +0,0 @@ -REM THIS IS A DEMONSTRATION PROGRAM FOR DRAWING -REM PIE AND BAR CHARTS. -REM -REM PROGRAM NAME: GRAPHR.BAS -REM - %INCLUDE GRAPHCOM.BAS - GRAPHIC OPEN 1 - CLEAR - - REM If the device supports color fill, MAT FILL - REM statements are used. Otherwise, MAT PLOT - REM is used to draw figures. - -IN.FL: INPUT "DOES THIS DEVICE SUPPORT COLOR FILL? Y/N: ";FILL.FLG$ - IF FILL.FLG$ = "Y" OR FILL.FLG$ = "N" THEN GOTO OK.FL - PRINT "ENTER Y OR N, PLEASE" - GOTO IN.FL -OK.FL: PRINT "THANK-YOU" - - REM Initialize the arrays used for drawing the - REM slices in the pie chart. Two 100 element arrays - REM are constructed for drawing a full circle. Each - REM point in the arrays then represents one percent. - - PRINT "CALCULATING OCCURRING --- PLEASE WAIT" - DIM X.ARRAY(100) - DIM Y.ARRAY(100) - DIM A.ARRAY(72) - DIM B.ARRAY(72) - A.ARRAY(0) = .5 - B.ARRAY(0) = .5 - L.CIR = 0 - FOR I.ANGLE = 0 TO 6.28-.0628 STEP .0628 - X.ARRAY(L.CIR) = .5 + (.5 * COS(I.ANGLE)) - Y.ARRAY(L.CIR) = .5 + (.5 * SIN(I.ANGLE)) - L.CIR = L.CIR + 1 - NEXT I.ANGLE - - REM Close the circle - - X.ARRAY(L.CIR) = X.ARRAY(0) - Y.ARRAY(L.CIR) = Y.ARRAY(0) - GOTO START.IT - - REM This function draws a slice beginning at the - REM point represented by BEG.PER and extending - REM through PER.CENT points. The color is set to - REM COL.OR and the ASCII.ID prints as an identifier - REM for the slice. - - REM The function extracts the points from X.ARRAY - REM and Y.ARRAY and places them in A.ARRAY and - REM B.ARRAY. MAT FILL and MAT PLOT always begin - REM drawing at the first elements of the arrays, so - REM the slice must be extracted from the arrays. - - REM The function makes provision for slices that - REM exceed 71 points. MAT FILL and MAT PLOT allow - REM a maximum element number of 72. - -DEF DRAW.SLICE (BEG.PER,PER.CENT,COL.OR,ASCII.ID) - REAL BEG.PER,PER.CENT,COL.OR - STRING ASCII.ID - L.CIR = 1 - SET COLOR COL.OR - OVR.FLOW = 0 - - REM Setup for slices greater than 71 percent. - - IF PER.CENT > 71 THEN SAVE.PER = 71:OVR.FLOW = 1\ - ELSE SAVE.PER = PER.CENT - - REM Extract points from circle array. - -BAK.UP: FOR CNT.ER = BEG.PER TO BEG.PER + SAVE.PER - IN.DEX = CNT.ER - IF CNT.ER > 100 THEN IN.DEX = CNT.ER - 100 - A.ARRAY(L.CIR) = X.ARRAY(IN.DEX) - B.ARRAY(L.CIR) = Y.ARRAY(IN.DEX) - L.CIR = L.CIR + 1 - NEXT CNT.ER - - REM OVER.FLOW is 1 for a more than 71 percent slice. - - IF OVR.FLOW <> 1 THEN GOTO OVER.A - - REM FILL.FLG$ is "N" for non-color-fill devices. - - IF FILL.FLG$ = "N" THEN MAT PLOT L.CIR-1: A.ARRAY,B.ARRAY\ - ELSE MAT FILL L.CIR-1: A.ARRAY,B.ARRAY - OVR.FLOW = 0 - BEG.PER = BEG.PER + 71 - SAVE.PER = PER.CENT - 71 - IF FILL.FLG$ = "N" THEN L.CIR = 0 ELSE L.CIR = 1 - GOTO BAK.UP -OVER.A: A.ARRAY(0) = .5 - B.ARRAY(0) = .5 - - REM The slice must be closed for MAT PLOT. MAT FILL - REM closes automatically. - - IF FILL.FLG$ = "N" THEN\ - A.ARRAY(L.CIR) = .5: \ - B.ARRAY(L.CIR) = .5: \ - MAT PLOT L.CIR: A.ARRAY,B.ARRAY \ - ELSE \ - MAT FILL L.CIR-1: A.ARRAY,B.ARRAY - - REM Expand the viewport for printing the slice ID. - REM The minimum character height is used to adjust - REM the window so the slice ID will appear outside - REM the slice perimeter. - - SET VIEWPORT 1.0-Y.AXIS,1,0,1 - ADJ.IT = MIN.HGT/1.45 - SET WINDOW -ADJ.IT,1+ADJ.IT,-ADJ.IT,1+ADJ.IT - - REM MID.PT is the center elements in the slice. This - REM is the position where the ID is printed. - - MID.PT = INT(BEG.PER+(PER.CENT/2)) - X.AXIS = X.ARRAY(MID.PT) - Y.AXIS = Y.ARRAY(MID.PT) - GRAPHIC PRINT AT (X.AXIS,Y.AXIS): ASCII.ID - SET WINDOW 0,1,0,1 - RETURN -FEND - - REM The first portion of the program allows entry - REM of up to 9 slices. Enter the item number (1-9) - REM and press the return key. Then type the slice - REM description (up to 6 characters), the dollar - REM value of the slice, and the color code for - REM the slice. - - REM The following entries are a good sample: - - REM 1 - REM RENT,550,1 - REM 2 - REM FOOD,450,2 - REM 3 - REM CAR,225,3 - REM 4 - REM OTHER,750,4 - - REM This sets up a graph of four items--rent of - REM $550 in color 1, food for $450 in color 2, etc. - - REM Terminate the input by typing 0 in response - REM to the ITEM NUMBER(0 TO FINISH): prompt. - - REM After the 0 entry, the program calculates the - REM percentages and prints a listing of the entries. - - REM Corrections may be made by entering the - REM item number to be corrected and inputting - REM the correct data. - -START.IT: PRINT - DIM ITM.DESC$(9) - DIM ITM.VALUE(9) - DIM ITM.COLOR(9) - DIM ITM.PERC(9) -GO.A: PRINT "ENTER AN ITEM NUMBER FROM 1 TO 9 TO ADD OR CHANGE" - PRINT - PRINT "THEN ENTER--DESCRIPTION,AMOUNT,COLOR,RETURN" - PRINT - PRINT " DESCRIPTION IS THE SLICE DESCRIPTION" - PRINT " AMOUNT IS THE QUANTITY/AMOUNT OF THE SLICE" - PRINT " COLOR IS THE COLOR NUMBER TO USE FOR THE SLICE" - PRINT " RETURN MEANS TO PRESS THE RETURN KEY" - PRINT - PRINT "THE FIELDS ARE SEPARATED BY COMMAS" - PRINT -IN.IT: INPUT "ITEM NUMBER(0 TO FINISH): "; ITM.NUMBER% - IF ITM.NUMBER% = 0 THEN GOTO PRT.EM - IF ITM.NUMBER% > 0 AND ITM.NUMBER% < 10 THEN GOTO OKAY.IN - PRINT "THE ITEM NUMBER MUST BE FROM 1 TO 9" - GOTO IN.IT -OKAY.IN: IF ITM.VALUE(ITM.NUMBER%) = 0 THEN GOTO NEW.IN - PRINT ITM.DESC$(ITM.NUMBER%),ITM.VALUE(ITM.NUMBER%), - PRINT ITM.COLOR(ITM.NUMBER%) -NEW.IN: INPUT "DESC,AMOUNT,COLOR: ";DESC.IN$,VAL.IN,CLR.IN% - ITM.DESC$(ITM.NUMBER%) = DESC.IN$ - ITM.VALUE(ITM.NUMBER%) = VAL.IN - ITM.COLOR(ITM.NUMBER%) = CLR.IN% - PRINT - GOTO IN.IT -PRT.EM: TOT.VAL = 0 - - REM Calculate the total for percentages. - - FOR CNT.R = 1 TO 9 - TOT.VAL = TOT.VAL + ITM.VALUE(CNT.R) - NEXT CNT.R - PRINT - - REM Print the item list with percentages. - - FOR CNT.R = 1 TO 9 - IF ITM.VALUE(CNT.R) <> 0 THEN\ - ITM.PERC(CNT.R) = ITM.VALUE(CNT.R)/TOT.VAL:\ - ITM.PERC(CNT.R) = INT((100*ITM.PERC(CNT.R))+.5):\ - PRINT CNT.R;"-";ITM.DESC$(CNT.R),ITM.VALUE(CNT.R),:\ - PRINT ITM.COLOR(CNT.R);" ";ITM.PERC(CNT.R);"%" - NEXT CNT.R - PRINT:PRINT "TOTAL VALUE: ";TOT.VAL - PRINT:INPUT "DRAW THE GRAPH? ";Y.N$ - IF Y.N$ <> "Y" THEN GOTO IN.IT - CLEAR - BEG.PER = 0 - - REM THE MINIMUM CHARACTER HEIGHT FOR THE DEVICE - REM IS USED TO ESTABLISH A BORDER AROUND THE CIRCLE - REM WHERE THE SLICE ID (THE ITEM NUMBER) CAN BE - REM PRINTED. - - SET CHARACTER HEIGHT 0 - ASK CHARACTER HEIGHT MIN.HGT - MIN.HGT = 2 * MIN.HGT - FOR CNT.R = 1 TO 9 - IF ITM.VALUE(CNT.R) = 0 THEN GOTO NXT.CNT - - REM Determine the aspect ratio and square the device. - REM A border is left around the viewport for the - REM slice ID. The viewport is set to the right - REM of the device. - - ASK DEVICE X.AXIS,Y.AXIS - SET VIEWPORT 1-Y.AXIS+MIN.HGT,1-MIN.HGT,MIN.HGT,1-MIN.HGT - DESC.IN$ = ITM.DESC$(CNT.R) - VAL.IN = ITM.VALUE(CNT.R) - CLR.IN% = ITM.COLOR(CNT.R) - PER.CENT = ITM.PERC(CNT.R) - CALL DRAW.SLICE (BEG.PER,PER.CENT,CLR.IN%,STR$(CNT.R)) - BEG.PER = BEG.PER + PER.CENT - SET VIEWPORT 0,1,0,1 - S.1$ = DESC.IN$+" "+STR$(PER.CENT)+"%" - GRAPHIC PRINT AT (0,1-(CNT.R/10)):S.1$ -NXT.CNT: NEXT CNT.R - - REM Is the graph filled? The percentage calculation - REM can be less than 100 percent due to roundoff. - - IF BEG.PER >= 100 THEN GOTO BAR.A - PER.CENT = 100 - BEG.PER - DESC.IN$ = " " - ASK DEVICE X.AXIS,Y.AXIS - SET VIEWPORT 1-Y.AXIS+MIN.HGT,1-MIN.HGT,MIN.HGT,1-MIN.HGT - CALL DRAW.SLICE (BEG.PER,PER.CENT,CLR.IN%,DESC.IN$) - - REM This routine draws a simple bar chart of the - REM data. The window range is set to 1/3 greater - REM than the largest item in the array. This - REM technique makes the largest bar draw across - REM 75% of the viewport. - -BAR.A: KEY%=CONCHAR% - DIM BAR.X(4) - DIM BAR.Y(4) - SET VIEWPORT 0,1,0,1 - SET WINDOW 0,1,0,1 - SET CHARACTER HEIGHT 0 - ASK CHARACTER HEIGHT MIN.HGT - CLEAR - SET JUSTIFY .5,0 - SET COLOR 1 - GRAPHIC PRINT AT (.5,.99-MIN.HGT):"BAR CHART" - SET JUSTIFY 0,0 - MAX.VAL = 0 - - REM Determine the maximum percentage. - - FOR CNT.R = 1 TO 9 - IF MAX.VAL < ITM.PERC(CNT.R) THEN\ - MAX.VAL = ITM.PERC(CNT.R) - NEXT CNT.R - MAX.VAL = 1.33 * MAX.VAL - - REM Scale the window. The X axis is 1/3 larger - REM than the largest item to be graphed. - REM The Y axis is scaled to 10 lines. - - SET WINDOW 0,MAX.VAL,0,10 - SET CHARACTER HEIGHT 0 - ASK CHARACTER HEIGHT MIN.HGT - - REM Draw the items. - - FOR CNT.R = 1 TO 9 - IF ITM.VALUE(CNT.R) = 0 THEN GOTO NXT.A - SET COLOR ITM.COLOR(CNT.R) - P.LINE = 10 - CNT.R - S.1$ = ITM.DESC$(CNT.R)+"-"+STR$(ITM.PERC(CNT.R))+"%" - IF ITM.VALUE(CNT.R) <> ITM.PERC(CNT.R) THEN\ - S.1$ = S.1$+" $"+STR$(ITM.VALUE(CNT.R)) - GRAPHIC PRINT AT (0,P.LINE): S.1$ - - REM Setup the BAR.X and BAR.Y arrays to draw the - REM bar. MAX.VAL is the percentage for the item. - REM The window scaling automatically scales the - REM bar. No special calculations are required. - - MAX.VAL = ITM.PERC(CNT.R) - TOP = P.LINE - .1 - BOT = TOP - .4 - BAR.Y(0) = BOT - BAR.Y(1) = TOP - BAR.X(2) = MAX.VAL - BAR.Y(2) = TOP - BAR.X(3) = MAX.VAL - BAR.Y(3) = BOT - BAR.Y(4) = BOT - IF FILL.FLG$ = "N" THEN MAT PLOT 4: BAR.X,BAR.Y\ - ELSE MAT FILL 3: BAR.X,BAR.Y -NXT.A: NEXT CNT.R - KEY% = CONCHAR% - STOP - END - \ No newline at end of file diff --git a/software/CPM/CPM06_COBOL80_v20/GSXPREP.BAS b/software/CPM/CPM06_COBOL80_v20/GSXPREP.BAS deleted file mode 100644 index 42fbd9a..0000000 --- a/software/CPM/CPM06_COBOL80_v20/GSXPREP.BAS +++ /dev/null @@ -1,16 +0,0 @@ -100 REM GSXPREP.BAS -110 REM -120 REM -130 REM -140 GSX%=&H30 -150 POKE GSX%+0, -160 POKE GSX%+1,&H59 -170 POKE GSX%+2,&HE -180 POKE GSX%+3,115 -190 POKE GSX%+4,&HC3 -200 POKE GSX%+5,&H5 -210 POKE GSX%+6,&H0 -220 NEW -SX%+1,&H59 -170 POKE GSX%+2,&HE -180 \ No newline at end of file diff --git a/software/CPM/CPM06_COBOL80_v20/LIB.COM b/software/CPM/CPM06_COBOL80_v20/LIB.COM deleted file mode 100644 index 21be8c1d0c7613a4b51415adebed34f17030d39a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 R;>Bgy<%P9;kI8rV`yVlW@A3cu diff --git a/software/CPM/CPM06_COBOL80_v20/LINK.COM b/software/CPM/CPM06_COBOL80_v20/LINK.COM deleted file mode 100644 index fe55743188f001935a6c15837f891e9c8f821d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15744 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 n$iiCI*3s0^zOW7N0d4q_sTS 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 | - | | - | | - | Explanation: The CHAIN statement can load two types | - | of programs - an overlay program generated by the | - | linker, or a directly executable file. CHAIN can | - | load files generated by languages other than CBASIC. | - | However, before you chain to an overlay file, the | - | linker must create that overlay and the root | - | program at the same time. | - | | - | The filespec can be a string expression, a variable, | - | or a constant. CB80 assumes a filetype of .OVL and | - | CB86 assumes a filetype of .OVR if you do not | - | specify otherwise in the filespec. | - | | - | When a program chains to a second program, all open | - | files in the original program are closed and all | - | data is reinitialized to 0. Refer to the | - | Programming Guide for more information on chaining | - | modules and programs. | - | | - | | - | Examples: CHAIN "B:AVERAGES" | - | | - | CHAIN NEW.PROG$ | - | | - | TOTALS$ = "ACCOUNTS.OVL" | - | | - | CHAIN CDRIVE$ + TOTAL$ | - | | - | | - | | - | | - | | - | Page 4 | - | | - ---------------------------------------------------------------- - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------- - | CBASIC Compiler (CB80) READ.ME File Notes DATE$ Function | - | | - | | - | | - | DATE$ Function (NEW!) | - | =============================================== | - | | - | The DATE$ function returns a string indicating the | - | current year, month, and day set through the | - | operating system. | - | | - | | - | Syntax: a$ = DATE$ | - | | - | | - | Explanation: DATE$ returns a six character string | - | in the form YYMMDD. YY is the last two digits of | - | a year reference, such as 84 for 1984. MM is one | - | of twelve digit combinations representing the | - | month such as 02 for February or 11 for November. | - | DD is one of thirty-one digit combinations | - | representing the day of the month. The string that | - | DATE$ returns is undefined if the operating system | - | is set to a date later than December 31, 1999 or | - | earlier than January 1, 1978. | - | | - | If your operating system does not support time and | - | date functions, the CBASIC DATE$ function returns | - | a string consisting of six blanks. Refer to your | - | operating system manuals to see if your operating | - | system supports time and date functions. | - | | - | | - | Example: CURRDATE$ = DATE$ | - | PRINT "Today's date is: "; CURRDATE$ | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | Page 5 | - | | - ---------------------------------------------------------------- - - - - - - - - - - - - - - - - - ---------------------------------------------------------------- - | CBASIC Compiler (CB80) READ.ME File Notes TIME$ Function | - | | - | | - | | - | TIME$ Function (NEW!) | - | ================================================ | - | | - | The TIME$ function returns a string indicating the | - | current time of day. | - | | - | | - | Syntax: a$ = TIME$ | - | | - | | - | Explanation: TIME$ returns a six character string | - | of the form HHMMSS. HH is one of 24 digit | - | combinations representing the hour, such as 06 for | - | 6:00 AM or 15 for 3:00 PM. MM is one of sixty | - | digit combinations representing the minute. SS is | - | one of sixty digit combinations representing the | - | second. | - | | - | If your operating system does not support time and | - | date functions, the CBASIC TIME$ function returns a | - | string consisting of six blanks. Refer to your | - | operating system manuals to see if your operating | - | system supports time and date functions. | - | | - | | - | Example: CURRTIME$ = TIME$ | - | PRINT "The current time is: "; CURRTIME$ | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | | - | Page 6 | - | | - ---------------------------------------------------------------- - - - - - - - - - - - - - - - - - ---------------------------------------------------------------- - | CBASIC Compiler (CB80) READ.ME File Notes Graphics Errors | - | | - | | - | | - | Graphics Extension Error Messages (NEW!) | - | ================================================ | - | | - | The following error messages indicate compilation | - | errors that can occur during compilation of a | - | graphics statement in a program. Compilation | - | continues after the error is recorded. | - | | - | Error numbers 180 through 240 inclusive are | - | reserved for use with the CBASIC Compiler | - | graphics extention. | - | | - | | - | Error Meaning | - | | - | 180 A left parenthesis is missing. A left | - | parenthesis is inserted. | - | | - | 181 A right parenthesis is missing. A right | - | parenthesis is inserted. | - | | - | 182 A comma is missing in a PLOT statement. | - | A comma is inserted. | - | | - | 183 The keyword STYLE is missing in a SET or | - | ASK statement. STYLE is inserted. | - | | - | 184 A comma is missing in a SET statement. A | - | comma is inserted. | - | | - | 185 The keyword HEIGHT is missing in a SET or | - | ASK CHARACTER statement. HEIGHT is | - | inserted. | - | | - | 186 The keyword ANGLE is missing in a SET or | - | ASK TEXT statement. ANGLE is inserted. | - | | - | 187 A comma is missing in a SET or ASK WINDOW | - | statement. A comma is inserted. | - | | - | | - | | - | Page 7 | - | | - ---------------------------------------------------------------- - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------- - | CBASIC Compiler (CB80) READ.ME File Notes Graphics Errors | - | | - | | - | | - | 188 A comma is missing in a SET or ASK | - | VIEWPORT statement. A comma is inserted. | - | | - | 189 The keyword PAGE is missing in a SET | - | statement. PAGE is inserted. | - | | - | 190 Not used. | - | | - | 191 The keyword COUNT is missing in a ASK | - | STYLE statement. COUNT is inserted. | - | | - | 192 A comma is missing in an ASK statement. | - | A comma is inserted. | - | | - | 193 Not used. | - | | - | 194 Not used. | - | | - | 195 The keyword COUNT is missing in a SET | - | COLOR statement. COLOR is inserted. | - | | - | 196 Not used. | - | | - | 197 Not used. | - | | - | 198 Not used. | - | | - | 199 Not used. | - | | - | 200 Not used. | - | | - | 201 Not used. | - | | - | 202 Not used. | - | | - | | - | | - | | - | | - | | - | | - | | - | Page 8 | - | | - ---------------------------------------------------------------- - - - - - - - - - - - - - - - - - ---------------------------------------------------------------- - | CBASIC Compiler (CB80) READ.ME File Notes Graphics Errors | - | | - | | - | | - | 203 A comma is missing in an GRAPHIC statement. | - | A comma is inserted. | - | | - | 204 The keyword following GRAPHIC is unexpected. | - | INPUT is inserted. | - | | - | 205 A left parenthesis is missing in a GRAPHIC | - | statement. A left parenthesis is inserted. | - | | - | 206 A right parenthesis is missing in a GRAPHIC | - | statement. A right parenthesis is inserted. | - | | - | 207 A colon is missing in a GRAPHIC statement. | - | A colon is inserted. | - | | - | 208 The variable in an ASK statement is of type | - | real or string. An integer variable is | - | required. | - | | - | 209 The variable in an ASK statement is of type | - | integer or string. A real variable is | - | required. | - | | - | 210 The variable in an ASK statement is of type | - | integer or real. A string variable is | - | required. | - | | - | 211 Not used. | - | | - | 212 Not used. | - | | - | 213 Not used. | - | | - | 214 Not used. | - | | - | 215 Not used. | - | | - | | - | | - | | - | | - | | - | Page 9 | - | | - ---------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------- - | CBASIC Compiler (CB80) READ.ME File Notes Graphics Errors | - | | - | | - | | - | 216 A comma is missing in a GRAPHIC statement. | - | A comma is inserted. | - | | - | 217 The variable in a MAT statement is of type | - | integer or string. A real variable is | - | required. | - | | - | 218 Not used. | - | | - | 219 Not used. | - | | - | 220 Not used. | - | | - | 221 The keyword following MAT is unexpected. | - | FILL is inserted. | - | | - | 222 A colon is missing in a MAT statement. A colon | - | is inserted. | - | | - | 223 An identifier is missing in a MAT statement. | - | An identifier is inserted. | - | | - | 224 A comma is missing in a MAT statement. A | - | comma is inserted. | - | | - | | - | | - | | - | VVVVVVV | - | VVVVV | - | VVV | - | VVV | - | VVV | - | VVVVV | - | VVV | - | V | - | | - | END OF READ.ME FILE | - | | - | | - | | - | | - | Page 10 | - | | - ---------------------------------------------------------------- \ No newline at end of file diff --git a/software/CPM/CPM06_COBOL80_v20/TSTCIR.BAS b/software/CPM/CPM06_COBOL80_v20/TSTCIR.BAS deleted file mode 100644 index 716542d..0000000 --- a/software/CPM/CPM06_COBOL80_v20/TSTCIR.BAS +++ /dev/null @@ -1,46 +0,0 @@ -REM DEMONSTRATION PROGRAM FOR CIRCLE DRAWING FUNCTIONS -REM -REM PROGRAM NAME: TSTCIR.BAS -REM - %INCLUDE GRAPHCOM.BAS - %INCLUDE CIRCOM.BAS - GRAPHIC OPEN 1 - CLEAR - PRINT "COMPUTING" - CALL BEG.CIR - PRINT "ENDED" - CALL PLOT.CIR - KEY% = CONCHAR% REM WAIT FOR KEYBOARD - -REM SCALE THE WINDOW TO DRAW A PROPERLY PROPORTIONED CIRCLE - - ASK DEVICE X.AXIS,Y.AXIS - PRINT X.AXIS,Y.AXIS - SET WINDOW 0,X.AXIS/Y.AXIS,0,1 - CALL PLOT.CIR - KEY%=CONCHAR% - CALL FILL.CIR - KEY%=CONCHAR% - -REM CHANGE THE VIEWPORT TO REPOSITION THE CIRCLE - - SET VIEWPORT 0,.5,0,.5 REM LOWER LEFT QUARTER - CLEAR - CALL PLOT.CIR - KEY%=CONCHAR% - - SET VIEWPORT .5,1,0,.5 REM LOWER RIGHT QUARTER - CALL PLOT.CIR - KEY%=CONCHAR% - - SET VIEWPORT 0,.5,.5,1 REM UPPER LEFT QUARTER - CALL PLOT.CIR - KEY%=CONCHAR% - - SET VIEWPORT .5,1,.5,1 REM UPPER RIGHT QUARTER - CALL PLOT.CIR - KEY%=CONCHAR% - - STOP - END - \ No newline at end of file diff --git a/software/CPM/CPM07_COBOL80/CALL.ASM b/software/CPM/CPM07_COBOL80/CALL.ASM deleted file mode 100644 index 3300152..0000000 --- a/software/CPM/CPM07_COBOL80/CALL.ASM +++ /dev/null @@ -1,23 +0,0 @@ -; Program "Call" called by "Testcall"; this is assembler version; -; compare with functionally equivalent COBOL version. - - cseg - - ldax b ; read first param: A = text length -loop: - dcr a ; count down length - rm ; finished - push psw - ldax d ; next byte from second param = text - inx d - push d - mov e,a - mvi c,6 ; CP/M function code - call 5 ; call CP/M to send character - pop d - pop psw - jmp loop - -; End of demonstration program "Call" - -end diff --git a/software/CPM/CPM07_COBOL80/CALL.CBL b/software/CPM/CPM07_COBOL80/CALL.CBL deleted file mode 100644 index b452a83..0000000 --- a/software/CPM/CPM07_COBOL80/CALL.CBL +++ /dev/null @@ -1,26 +0,0 @@ -000000****************************************************************** -000000* -000000* Program "Call" called by "Testcall"; this is COBOL version; -000000* compare with functionally equivalent assembler version. -000000* -000000****************************************************************** -000000 Working-storage section. -000000 01 temp pic 9(2) comp. -000000 01 text-buffer value space. -000000 02 tbuf-table pic x occurs 80. -000000 Linkage section. -000000 01 mess-text. -000000 02 mtex-table pic x occurs 80. -000000 01 mess-size pic 9(2) comp. -000000 Procedure division using mess-size,mess-text. -000000 l. -000000 move 0 to temp perform move-byte until temp = mess-size. -000000 display text-buffer. -000000 exit program. -000000 move-byte. -000000 add 1 to temp move mtex-table (temp) to tbuf-table (temp). -000000****************************************************************** -000000* -000000* End of demonstration program "Call" -000000* -000000****************************************************************** diff --git a/software/CPM/CPM07_COBOL80/CALL.INT b/software/CPM/CPM07_COBOL80/CALL.INT deleted file mode 100644 index 68c2a2026129993c3cd01f106c5fb786d0dc79af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmY#T7zMaPfPv}%e+C9dB?bnD1|Vh-VGIOO*gyk=0$A9}+22Zm5y)nY0P-7v7^tfq zL}3F6U7l9BoiS8pLW4d1+&%sMTwQVcfCwcx^%9i8V>nZ+f&$Z81%(C93=NDu%8VYr z7#WpdoVs7Y*gMa}w3aFMh64kGG7}He+M^dfF#KguIk2F?pK(DwW6!V8j7nE;xG*xz zaAaU?^PdGI+x-_PFvT)3-nhE%#)(ltR0uHG5v7b|MGQ=!?Dij&eg89tF>o-V-~a$_MF&*? diff --git a/software/CPM/CPM07_COBOL80/CLI b/software/CPM/CPM07_COBOL80/CLI deleted file mode 100644 index d38280256e8becc25e10c80bcf06584a6290a0f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2816 zcmeHJPiSLB82`SRB+X|3RIwHn592EA3tO^nR}gYB&zG&u+V-W1hKdIp+r$Q&c3 zMBEJ`F37U3%O0esfd?K$_UQRpQt_ZzLM`v0;6-?>mmqjajq#h8x3$z=Pm2h-PchH~=*1hY_4t-JMz!gf|^G%(y_3ae>B7`bq1u>h9G3 z)=I_i?#6$*^2rCzFNXPoITIJURw%4?HRF|RdB z^{B{bjY?ExwF{;C(n?`1I`H{SrCz9sO1@kW)uJd8gQ!>cwxjJy4}^OgfqxvPWGa`+ zrp&p6W~2d4yz(?ocM*@@9$f6w>HQv@?(euD;g}qs*bTe# zQTF;RIi$v?CwGHC%VGAJHN3tkT78HqvaP-5Ii-Z3r=TjOWNd-?O9c*_mp7xm0;m#9}eu6_ssE@EzLC zHVh$mzVf;qTLppK@pTWo(^>y+h^wgyZxbij#V^=<81AvH6+n!<1sX;+dY!O+60c(9 z>mK`wq-$!9q^-^&OG5w8gx1n<6e46m4Of+Bk9}iI&gxLUp7A0|qWZ@l@NOLjt3ZTHXTN9}&x zx|2kt`u$W#{Lp+~@9JO(*aXH06)o5iDrt^^jdoDlz!_nkA8tAthH-QZBRHxGCFFeb ze{GoKW9$i@Wv_87DEYfQ8r-=TzQTxlZuQmkt&cepAJcUJovy)WVq<}RpB 80 -000000 GO TO CLI-OVF. -000000* -000000* COMMAND LINE NOW CREATED, CHAIN TO THE NEXT PROGRAM. THIS -000000* IS DONE BY SETTING A COMMAND LINE FOR THE RTS TO EXECUTE. -000000* -000000 LOADER. -000000 CALL POKE-CLI USING SUB2, OUTPUT-CLI. -000000 PERFORM CLEAR-LINES. -000000 DISPLAY "Loading ..." at 0201. -000000 DISPLAY LOW-VALUE AT 0301. -000000 IF DRIVE = SPACE -000000 CALL CHAIN USING PROG-NAME -000000 ELSE -000000 CALL CHAIN USING PROG-AREA. -000000* -000000/***************************************************************** -000000* * -000000* SUPPORT CLI ROUTINES, USED TO MANIPULATE THE FIELDS BEFORE * -000000* CONTROL IS TRANSFERRED TO A SUPPORT PROGRAM. * -000000* * -000000****************************************************************** -000000* -000000 SWITCH-SET. -000000 MOVE SPACE TO SWITCHES. -000000 DISPLAY "Switches:" AT 0201. -000000 ACCEPT SWITCHES AT 0211. -000000 INSPECT SWITCHES REPLACING -000000 ALL "(" BY SPACE -000000 ALL ")" BY SPACE. -000000 GO TO LOOP. -000000* -000000 DRIVE-SET. -000000 DISPLAY "Enter Drive:" AT 0201. -000000 ACCEPT DRIVE AT 0214. -000000 GO TO LOOP. -000000* -000000 EXITING. -000000 DISPLAY "Returning to CP/M" AT 0201. -000000 DISPLAY LOW-VALUE AT 0301. -000000 STOP RUN. -000000* -000000/***************************************************************** -000000* * -000000* WORK ROUTINES USED TO MANIPULATE THE SCREEN. * -000000* * -000000****************************************************************** -000000* -000000 CLI-OVF. -000000 PERFORM CLEAR-LINES. -000000 DISPLAY "Command buffer overflow" AT 0301. -000000 GO TO LOOP. -000000* -000000 CLEAR-LINES. -000000 MOVE SPACE TO WORK-AREA. -000000 DISPLAY WORK-AREA AT 0201. -000000 DISPLAY WORK-AREA AT 0301. -000000* -000000 TRANSFER-BUFFER. -000000 ADD 1 TO SUB1. -000000 ADD 1 TO SUB2. -000000 MOVE WORK-BYTE (SUB1) TO TEMP. -000000 IF TEMP NOT = 32 -000000 MOVE SUB2 TO SUB2-SAV -000000 MOVE TEMP TO OUT-BYTE (SUB2). -000000 IF SUB1 < TMAX -000000 GO TO TRANSFER-BUFFER. -000000 MOVE SUB2-SAV TO SUB2. -000000 ADD 1 TO SUB2. -000000* diff --git a/software/CPM/CPM07_COBOL80/CLI.COM b/software/CPM/CPM07_COBOL80/CLI.COM deleted file mode 100644 index 08e83e6dcaee3ee1e6b17c4de209a28272ad2a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25085 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 diff --git a/software/CPM/CPM07_COBOL80/COBOL.COM b/software/CPM/CPM07_COBOL80/COBOL.COM deleted file mode 100644 index f9e131bc7b4430c63559934672973ec870e8fec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34583 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 64 alternate keys -Illegal ORGANIZATION/ACCESS/KEY combination -Unrecognized phrase in SELECT clause -RERUN clause syntax error -SAME AREA clause syntax error -Missing or illegal file-name -DATA DIVISION missing -PROCEDURE DIVISION missing or unknown statement -Program collating sequence not defined -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -'.' missing -DIVISION missing -SECTION missing -File-name not specified in SELECT stmt or invalid CD name -RECORD SIZE integer missing or line sequential rec > 1024 bytes -Illegal level no (01-49),01 level reqd,or level hierarachy wrong -FD, CD or SD qualification syntax error -WORKING-STORAGE missing -PROCEDURE DIVISION missing or unknown statement -Data description qualifier or '.' missing -Incompatible PICTURE clause and qualifiers -BLANK illegal with non-numeric data-item -PICTURE clause too long -VALUE with non-elementary item,wrong data-type or value truncated -VALUE in error or illegal for PICTURE type -Non-elementary item has FILLER/SYNC/JUST/BLANK clause -Preceding item at this level has > 8192 bytes or 0 bytes -REDEFINES of unequal fields or different levels -Data storage exceeds 64K bytes -Compiler error; consult Technical Support -Data description qualifier inappropriate or repeated -REDEFINES data-name not declared -USAGE must be COMP,DISPLAY or INDEX -SIGN must be LEADING or TRAILING -SYNCHRONIZED must be LEFT or RIGHT -JUSTIFIED must be RIGHT -BLANK must be ZERO -OCCURS must be numeric, non-zero, unsigned or DEPENDING -VALUE must be literal, numeric literal or figurative constant -PICTURE string has illegal precedence or illegal char -INDEXED data-name missing or already declared -Numeric-edited PICTURE string is too large -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Unrecognized verb -IF....ELSE mismatch -Operand has wrong data-type, is not declared or '.' missing -Procedure not unique -Procedure name same as data-name -Name required -Wrong combination of data-types -Conditional statement not allowed in this context -Malformed subscript -ACCEPT/DISPLAY wrong or Communications syntax incorrect -Illegal syntax used with I-O verb -Invalid arithmetic statement -Invalid arithmetic expression -Compiler error; consult Technical Support -Invalid conditional expression -IF stmts nested too deep, or too many AFTERs in PERFORM stmt -Incorrect structure of PROCEDURE DIVISION -Reserved word missing or incorrectly used -Too many subscripts in one statement (internal buffer overflow) -Too many operands in one statement -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Inter-segment procedure name duplication -Unterminated condition at end of source -Operand has wrong data-type or not declared -Procedure name undeclared -INDEX data-name declared twice -Bad cursor control : illegal AT clause -KEY declaration missing or illegal -STATUS declaration missing -Bad STATUS record -Undefined inter-segment reference or error in ALTERed para -PROCEDURE DIVISION in error -USING parameter not declared in LINKAGE SECTION -USING parameter not level 01 or 77 -USING parameter used twice in parameter list -FD missing -Compiler error; consult Technical Support -Incorrect structure of PROCEDURE DIVISION -Compiler error; consult Technical Support -Compiler error; consult Technical Support -Too many operands in one statement diff --git a/software/CPM/CPM07_COBOL80/COBOL.I51 b/software/CPM/CPM07_COBOL80/COBOL.I51 deleted file mode 100644 index c7bf8fbe0bdc49e47d402bb7b937c2796ba7922f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 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