From e1d6f35d7ddce3e08fb961dd4ae0fc0cd9a6c729 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Mon, 22 Feb 2021 10:34:03 +0100 Subject: [PATCH] MMODEM - Xmodem file transfer. --- build/misc.tcl | 5 +++++ build/timestamps.txt | 2 ++ doc/_info_/mmodem.order | 27 +++++++++++++++++++++++++++ doc/programs.md | 1 + src/gz/mmodem.181 | Bin 0 -> 34072 bytes 5 files changed, 35 insertions(+) create mode 100755 doc/_info_/mmodem.order create mode 100644 src/gz/mmodem.181 diff --git a/build/misc.tcl b/build/misc.tcl index 683cc38e..b16cbd76 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -452,6 +452,11 @@ respond "*" ":link sys;ts mailt,sys2;ts emacs\r" # rmtdev respond "*" ":midas device;atsign rmtdev_gz;rmtdev\r" +expect ":KILL" + +# mmodem +respond "*" ":midas sys3; ts mmodem_gz; mmodem\r" +expect ":KILL" # Compile ADVENT and dump it out with DECUUO. respond "*" ":cwd games\r" diff --git a/build/timestamps.txt b/build/timestamps.txt index 29e2aab3..92774af2 100644 --- a/build/timestamps.txt +++ b/build/timestamps.txt @@ -665,6 +665,7 @@ gsb/ttyvar.17 197801021617.41 gt40/bootvt.s09 197202050000.00 gt40/vt07.bin29 197508150459.59 gz/macn80.mid 198305040113.01 +gz/mmodem.181 198511261837.46 humor/alices.pdp10 198505170252.01 humor/dover.poem 198106270542.08 humor/jargon.68 198308110614.15 @@ -771,6 +772,7 @@ _info_/meter.info 197501110133.04 info/micros.9 198509132154.55 info/midas.archiv 197811170857.23 _info_/migs.order 197610292236.59 +_info_/mmodem.order 198309251915.04 _info_/muscom.order 197610050148.10 _info_/musrun.order 197610050143.17 _info_/name.info 197503250817.09 diff --git a/doc/_info_/mmodem.order b/doc/_info_/mmodem.order new file mode 100755 index 00000000..65e424ad --- /dev/null +++ b/doc/_info_/mmodem.order @@ -0,0 +1,27 @@ +MMODEM is the ITS companion to the CP/M 'MODEM' file transfer program. + +Usage: +:MMODEM xx filename + +where xx is one of: +S - send file. MMODEM figures out whether it is an ascii or a COM file +SA - send ascii file +SC - send COM file +SH - send HEX file. The file is 'comified' in core before being sent +SM - send MACN80 output file. The file is 'comified' in core before being sent +R - receive file. MMODEM guesses format (ascii/COM) by file type, or asks you +RA - receive ascii file +RC - receive COM file +RZ - receive ascii file containing ^Z's. Normally ^Z is treated as end of file + With this option, only trailing ^Zs are ignored. +RAC,RCC,RZC - like RA,RC,RZ but using CRC's instead of checksums. + +Also available: +SB - send random binary file (4 8-bit bytes per PDP-10 word, left-justified). +RB - receive random binary file. +RBC - receive random binary file using CRC's instead of checksums. +Note that the non-ascii files on the CPM; directory are *not* random binary +files, they are COM files. Use SC/RC for those. + +Mail bugs, questions, feature requests to BUG-MMODEM@MC. + diff --git a/doc/programs.md b/doc/programs.md index 114d95ac..08a3d60b 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -227,6 +227,7 @@ - MINSKY TRON, display hack translated from the PDP-1. - MLDEV/MLSLV, allows access to remote systems as devices (e.g. DB:). - MLIFE, Mike Speciner's Conway Life. +- MMODEM, Xmodem file transfer. - MODEMS, modems dragon. - MONIT, lightweight ATSIGN HACTRN replacement without debugging support. - MSEND, send to many users. diff --git a/src/gz/mmodem.181 b/src/gz/mmodem.181 new file mode 100644 index 0000000000000000000000000000000000000000..f7b49ab7285b0cec839fba163ea517791730823e GIT binary patch literal 34072 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 m__U*2sfKnH6sv%SSlYPvEG$YaNeB& literal 0 HcmV?d00001