Код:
.NLIST
.INCLUDE /DSMAC.MAC/
.INCLUDE /MYMAC.MAC/
.LIST
MODULE NAME=<TEST>, REL=<SH>, VER=<01>, LIBR=<LZSA1UnPack>, COMM=<LZSA1 UnPacker>
EXPORT QUALIFIED ULZSA1
PROCEDURE ULZSA1
BEGIN
LET Counter+1 :B= #0
LOOP
LET R0 := #0
LET R0 :B= R0 SET.BY (R1)+
LET R5 := R0
LET R0 := R0 OFF.BY #^C<160>
IF RESULT IS NE THEN ; if literal
LET R0 := R0 R.SHIFT 4
IF R0 EQ #7 THEN
CALL RIDLNG
ON.ERROR LEAVE LOOP
END
LET Counter+0 :B= R0
THRU R3 := Counter
LET (R2)+ :B= (R1)+
END
END
LET Offset+0 :B= (R1)+
LET Offset+1 :B= #377
LET R0 :B= R5
IF RESULT IS MI THEN ; LongOffset
LET Offset+1 :B= (R1)+
END
LET R0 := R0 OFF.BY #^C<17> + #3
IF R0 EQ #18. THEN
CALL RIDLNG
ON.ERROR LEAVE LOOP
END
LET Counter+0 :B= R0
LET R4 := R1
LET R1 := Offset + R2
THRU R3 := Counter
LET (R2)+ :B= (R1)+
END
LET R1 := R4
END
RETURN
END ULZSA1
PROCEDURE RIDLNG
BEGIN
CLR R4
LET R4 :B= R4 SET.BY (R1)+
LET R0 := R0 + R4
IF RESULT IS CS THEN
LET Counter+1 :B= R0
LET R0 :B= (R1)+
IFB Counter+1 EQ #0 THEN
LET Counter+0 :B= R0
LET Counter+1 :B= (R1)+
LET CARRY := OFF
IFB Counter+1 EQ #0 THEN
LET CARRY := ON
END
END
END
RETURN
END RIDLNG
Counter: .BLKW 0
Offset: .BLKW 0
END TEST
.END
Возможно ошибся с выходом из RIDLNG... Но пока на одно слово меньше 
- - - Добавлено - - -
Пардон, забыл одну команду, что бы сделать полноценный библиотечный модуль