1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-16 21:01:16 +00:00
Files
PDP-10.its/src/gren/crc.70
2018-06-26 06:55:12 +02:00

400 lines
5.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;-*-Midas-*-
TITLE :CRC - Cyclic Redundancy Check
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Algorithm:
;;;
;;; CRC=0
;;; DO UNTIL EOF
;;; BEGIN
;;; C=<next char>
;;; TEMP=LSH(CRC,1)
;;; CRC=OR(AND(NOT(377), TEMP)
;;; AND(377, C+TEMP))
;;; IF SIZE(CRC)>16bits THEN CRC=XOR(120227,CRC)
;;; END
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
A=1 ;General Porpoise
B=2
C=3
D=4
E=5
F=6
T1=7
T2=10
T3=11
T4=12
P=17
Call=PUSHJ P,
Return=POPJ P,
TTYo==1
DSKi==2
PDLEN==15
JCLEN==10
;;
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;
DEFINE SYSCAL OP,ARGS
.CALL [SETZ ? SIXBIT /OP/ ? ARGS ((SETZ))]
TERMIN
DEFINE TYPE &STRING
MOVEI T1,<.LENGTH STRING>
MOVE T2,[440700,,[ASCII STRING]]
SYSCAL SIOT,[%CLIMM,,TTYo ? T2 ? T1]
.LOSE %LSSYS
TERMIN
Define DBP ac
Add ac,[70000,,]
Skipge ac
Sub ac,[430000,,1]
Termin
;;
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;
BEGIN: MOVE P,PDLIST
SYSCAL OPEN,[%CLBIT,,.UAO ? %Climm,,TTYo ? [Sixbit /TTY/]]
.LOSE %LSSYS
setzm ftype
.BREAK 12,[..rJCL,,JCLBUF]
MOVE E,[440700,,JCLBUF]
SKIPE JCLBUF
JRST PARSE
TYPE "Give the file in JCL. Switches allowed:
/A - file is ascii
/B - file is 8-bit binary
/C - file is in 'COM' format"
JRST DIE
PARSE: SETZB T2,T4
MOVE T3,[440600,,T2]
PARTAG: ILDB T1,E
CAIE T1,^C
CAIN T1,^M
JRST MATCH
SKIPE QUOTE
JRST NDELIM
CAIE T1,^Q
JRST NQUOTE
SETOM QUOTE
JRST PARTAG
NQUOTE: CAIE T1,":
CAIN T1,";
JRST MATCH
CAIE T1,40
CAIN T1,",
JRST MATCH
caie t1,"/
jrst ndelim
ildb t1,e
cail t1,"a
subi t1,"a-"A
movem t1,ftype
caie t1,"A
cain t1,"B
jrst partag
cain t1,"C
jrst partag
move a,t1
TYPE "Unknown switch /"
.iot ttyo,a
jrst die
NDELIM: CAIL T4,6
JRST PARTAG
CAIL T1,140
SUBI T1,40
SUBI T1,40
IDPB T1,T3
SETZM QUOTE
AOJA T4,PARTAG
MATCH: Jumpe T2,DEFALT
CAIE T1,":
Jrst NilDev
Movem T2,Device
Jrst Parse
NilDev: Caie T1,";
Jrst NilSna
Movem T2,Sname
Jrst Parse
NilSna: MOVEI T3,FN2
SKIPN FN1
MOVEI T3,FN1
MOVEM T2,@T3
CAIN T1,40
JRST PARSE
DEFALT: SKIPN SNAME
.SUSET [.rHSNAME,,SNAME]
SKIPN FN1
.Suset [.rXuname,,FN1]
OPEN: SYSCAL OPEN,[%CLBIT,,.uii
%CLIMM,,DSKi
DEVICE ? FN1 ? FN2 ? SNAME]
JRST NOFILE
Type " File: "
Call FilTyp
Syscal FILLEN,[%Climm,,DSKi ? %Clout,,Fillen]
.Lose %LsSys
Move T1,Fillen
Idivi T1,2000
Skipe T2
Aoj T1, ;c(T1) pages long (rounded)
Movss T1
Movns T1
Movei T2,Death ;absolutely the last loc in this job
Idivi T2,2000
Skipe T3
Aoj T2, ;c(T2) is where we map into
Hrr T1,T2 ;-Len,,Loc
Imuli T2,2000
Add T2,[(E)]
Movem T2,MapPtr
Syscal CORBLK,[%Climm,,%Cbprv ;Get fresh pages
%Climm,,%Jself
T1
%Climm,,%Jsnew]
Jrst NoMap
Hrli T3,444400
Hrr T3,MapPtr
Move T2,Fillen
Syscal SIOT,[%Climm,,DSKi ? T3 ? T2] ;Inhale file
.Lose %LsSys
Setz E,
Type "î Type: "
move t1,ftype
cain t1,"A
jrst ascmap
Move T1,@MapPtr
Came T1,[Sixbit /DSK8/]
skipe ftype
Jrst COMMAP
ascmap: Hrli E,350700
Hrr E,MapPtr
Add E,Fillen
Move T1,Fillen
Imuli T1,5
Crock: DBP E
Ldb T2,E
skipe t2 ;Nulls are padding as well (e.g. FTP) -gz
Cain T2,^C
Soja T1,Crock
Movem T1,Fillen
Move D,T1
Hrli E,440700
Hrr E,MapPtr
Type "ASCII text"
LOOP: Ildb B,E
MOVE C,A
LSH C,1
ADD B,C
ANDI B,377
ANDCMI C,377
IOR C,B
MOVEM C,A
CAIG A,177777
JRST .+3
ANDI A,177777
XORI A,120227
Sojn D,Loop
Jrst Spill
COMMAP: Setom COM
Move T1,@MapPtr
came t1,[sixbit/DSK8/]
Jrst BINMAP
Type "COM binary"
Move T1,Fillen
Soj T1, ;account for header
Move D,T1
Imuli T1,4 ;# chars
Movem T1,Fillen
aoja E,COMFIL
BINMAP: movns COM
Type "TWENEX binary"
move T1,Fillen
move D,T1
imuli T1,4
movem T1,Fillen
; Jrst COMFIL
COMFIL: setz T4, ;Compute fill to sector bdry, in words -gz
move T1,D
andi T1,37
jumpe T1,CLOOPi
movei T4,32.
sub T4,T1
CLOOPi: Move T1,@MapPtr
cloopj: Movei T2,4
Move T3,[441000,,T1]
CLOOP: Ildb B,T3
Move C,A
Lsh C,1
Add B,C
Andi B,377
Andcmi C,377
IOr C,B
Movem C,A
Caig A,177777
Jrst Next
Andi A,177777
Xori A,120227
Next: Sojn T2,CLoop
Aoj E,
Sojg D,Cloopi
setz T1, ;Zero-fill to sector bdry -gz
sojge T4,cloopj
Spill: TYPE "îLength: "
MOVE T1,Fillen
CALL DECTYP
TYPE " characters"
MOVE E,Fillen
IDIVI E,128.
Jumpe E,Padp
Type " = "
MOVE T1,E
CALL DECTYP
TYPE " sectors"
Jumpe F,TYPCRC
TYPE " plus "
Move T1,F
Call DecTyp
Padp: Skipe COM
Jrst TypCRC
Type " (and "
MOVEI T1,128.
SUBB T1,F
CALL DECTYP
Type " pads)"
PADTAG: MOVE C,A
MOVEI B,^Z
LSH C,1
ADD B,C
ANDI B,377
ANDCMI C,377
IOR C,B
MOVEM C,A
CAIG A,177777
JRST .+3
ANDI A,177777
XORI A,120227
SOJN F,PADTAG
TYPCRC: TYPE "î CRC: "
MOVE T1,A
CALL HEXTYP
Type " hex"
JRST DIE
NOFILE: TYPE "No such file: "
Call FilTyp
Jrst Die
NoMap: Type "îCan't get fresh pages?"
Jrst Die
DIE: .LOGOUT 1,
;;
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;
6TYPE: SETZ T2,
ROTC T1,6
ADDI T2,40
.IOT TTYo,T2
JUMPN T1,6TYPE
RETURN
HEXTYP: MOVE T2,[200400,,T1]
MOVEI T3,4 ;4 chars/word
HEXTAG: ILDB T4,T2
CAILE T4,9.
ADDI T4,7
ADDI T4,60
.IOT TTYo,T4
SOJN T3,HEXTAG
RETURN
DECTYP: SETZ T3,
DECTAG: IDIVI T1,10.
PUSH P,T2
AOJ T3,
JUMPN T1,DECTAG
TAGNO2: POP P,T1
ADDI T1,60
.IOT TTYo,T1
SOJN T3,TAGNO2
RETURN
FILTYP: MOVE T1,DEVICE
CALL 6TYPE
.IOT TTYo,[":]
MOVE T1,SNAME
CALL 6TYPE
.IOT TTYo,[";]
MOVE T1,FN1
CALL 6TYPE
.IOT TTYo,[" ]
MOVE T1,FN2
CALL 6TYPE
RETURN
;;
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;
PDLIST: -PDLEN,,PDLIST
BLOCK PDLEN
JCLBUF: BLOCK JCLEN
-1
DEVICE: SIXBIT /DSK/
SNAME: 0
FN1: 0
FN2: Sixbit />/
QUOTE: 0
COM: 0
Fillen: 0
MapPtr: 0
FType: 0
;;
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;
VARIAB
CONSTA
DEATH: 0 ;The final stop... *bwa ha ha*
END BEGIN