diff --git a/build/misc.tcl b/build/misc.tcl index c303bd78..afe46f36 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -1533,3 +1533,7 @@ expect ":KILL" # IBMASC respond "*" ":midas sys3;ts ibmasc_sysen1;ibmasc\r" expect ":KILL" + +# NEWDEC +respond "*" ":midas sys3;ts newdec_sysen1;newdec\r" +expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index eff5a577..320424e7 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -195,6 +195,7 @@ - MUNCH, TV-munching square. - NAME, shows logged in users and locations, aka FINGER. - NETIME, network time dragon. +- NEWDEC, DECtape converter. - NICNAM/NICWHO, look up someone in the Arpanet directory. - NIMLIN, a game of unknown features. - NODIPS, SUDS wirelister (without DIP definitions). diff --git a/src/sysen1/newdec.18 b/src/sysen1/newdec.18 new file mode 100755 index 00000000..a4b1208e --- /dev/null +++ b/src/sysen1/newdec.18 @@ -0,0 +1,143 @@ + TITLE DEC-MAC TAPE CONVERTER + +;THIS PROGRAM IS STARTED AT LOCATION GO +;AND TYPES "?" AFTER WHICH YOU ANSWER WITH A DIGIT 0-8 +;THE DRIVE (OR 0 IF ALREADY ON DISK) OF A NEW FMT DECTAPE +;AND WRITES THE ENTIRE TAPE ONTO THE DISK AS FILE +;.TEMP. .FILE. IT THEN GROVELS OVER THE CRAP AND +;PRODUCES UP TO 22 FILES ON THE DISK BY THE SAME NAME +;AND EXTENSION AS THE ORIGINAL DEC TAPE. IT +;ALSO CLEANS THE COB-WEBBS OUT OF THE DISK DRIVE. + +;IF FOR SOME REASON THE FILE .TEMP. .FILE. ALREADY +;EXISTS, START THE PROGRAM AT LOCATION FDIR +; OR INDICATE DRIVE "0" + + +UTIC==1 +UTOC==2 +TYI==3 +TYO==4 + +A=1 +B=2 +C=3 +D=4 +P=5 + +GO: .OPEN TYI,[SIXBIT / TTY/] + .VALUE [ASCIZ /TYI?/] + .OPEN TYO,[SIXBIT / !TTY/] + .VALUE [ASCIZ /TYO?/] + .IOT TYO,["?] + .IOT TYI,A + SUBI A,"0 ;CHAR ZERO + JUMPL A,.-3 + CAILE A,8 ;NUM 0-8 OK + JRST .-5 + JUMPE A,FDIR ;0 MEANS DSK + .UBLAT A, + .VALUE [ASCIZ /UBLAT?/] + DPB A,[400,,TPI] + .OPEN UTIC,TPI + .VALUE [ASCIZ /TPI?/] + .OPEN UTOC,TPO + .VALUE [ASCIZ /TPO?/] + MOVEI A,111 +GO1: MOVE B,[-2000,,BUF] + .IOT UTIC,B + MOVE B,[-2000,,BUF] + .IOT UTOC,B + SOJG A,GO1 + .CLOSE UTIC, + .CLOSE UTOC, + MOVE A,TPI + .UDISMT A, + JFCL [ASCIZ /UNF?/] +FDIR: MOVEI P,PDL + PUSHJ P,OPEN + MOVEI A,100. + PUSHJ P,GETBLK + MOVE A,[BUF,,FILDIR] + BLT A,FILDIR+177 + MOVEI A,0 +FDIR1: SKIPE FILDIR+83.(A) + PUSHJ P,READ + CAIGE A,21. + AOJA A,FDIR1 + .VALUE [ASCIZ /:KILL /] + +READ: PUSH P,A + MOVE B,FILDIR+83.(A) + MOVEM B,UTOCO+1 + HLLZ B,FILDIR+105.(A) + SKIPN B + MOVSI B,(SIXBIT /@/) + MOVEM B,UTOCO+2 + MOVEI D,0 + MOVE B,[440500,,FILDIR] + AOS A ;LOC 0 => FILE 1 +RD2: ILDB C,B + AOS D + CAMN C,A + JRST FOUND + CAIL D,576. + .VALUE [ASCIZ /BLK?/] + JRST RD2 + + +FOUND: MOVE A,D + .OPEN UTOC,UTOCO + .VALUE [ASCIZ /OUT?/] + PUSHJ P,GETBLK + LDB A,[101200,,BUF] + CAME A,D +GET: PUSHJ P,GETBLK + LDB A,[700,,BUF] + MOVNS A + MOVSS A + HRRI A,BUF+1 + .IOT UTOC,A + HLRZ A,BUF + JUMPN A,GET + .CLOSE UTOC, + POP P,A + POPJ P, + +OPEN: .OPEN UTIC,UTICO + .VALUE [ASCIZ /TEMP?/] + POPJ P, + +GETBLK: +READBK: PUSH P,A + SOS A + IMULI A,200 + .ACCESS UTIC,A + MOVE A,[-200,,BUF] + .IOT UTIC,A + POP P,A + POPJ P, + + +UTICO: SIXBIT / &DSK/ + SIXBIT /.TEMP./ + SIXBIT /.FILE./ + +UTOCO: SIXBIT / 'DSK/ + 0 + 0 + +PDL: BLOCK 69 +BUF: BLOCK 2000 +FILDIR: BLOCK 200 + +TPI: SIXBIT / &UT0/ + SIXBIT /FOO/ + SIXBIT /BAR/ + +TPO: SIXBIT / 'DSK/ + SIXBIT /.TEMP./ + SIXBIT /.FILE./ + +END GO +  ð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`Áƒ \ No newline at end of file