ZXNet эхоконференция «code.zx»


тема: Упаковать данные пеpедаваемые викоммником в одном блоке X-MODEM



от: Aleksandr Majorov
кому: Kirill Frolov
дата: 25 May 1999

Хаюшки, Kirill!

Once in morning 24-05-99 09:20:28 somebody Kirill Frolov has
written to All about 'Упаковать данные пеpедаваемые викоммником в
одном блоке X-MODEM'.

[ ]
KF> Решил я сжимать пеpедаваемые данные в дpайвеpе модема для ММД.
[ ]
KF> Может есть быстpый способ найти стpоку для всяких LZ... методов, только
KF> не следует забывать, что у меня всего 261 байт ?

вот, чем могу - помогу ;-)

сразу говорю - я ни за что не отвечаю - это делал не я ;-)))

Вот п/п которую писал хакер Крис для драйвера,
посмотри может чем поможет...
===================================================

; PACK HL - START
; BC - LEN
; Портит hl,de,bc,af,ix
; При возврате C=1
; блок не запаковался :(( hl,bc портит.
; C=0 то запаковался
; HL - Start пакованного блока
; BC - Len


; DEPACK HL - START
; BC - LEN
; C=1 ERROR
; C=0 HL - адрес распаченного блока
; BC - длина блока

DEPACK_ADR EQU #4800
PACK_ADR EQU #5000

ORG 25000
DI
LD HL,MODUL
LD BC,EMOD-MODUL
CALL PACK
NOP
CALL DEPACK
JR $
NOP
RET

MODUL
DB "1234567890"
DB "1234567890"
DB "1234567890"
DB "1234567890"
DS 50
DB "Hello all!!! "
DB "This is pack-modul!"
EMOD


PACK PUSH BC
LD DE,PACK_ADR+300
ADD HL,BC
DEC HL
LD A,(HL): LD (DE),A
DEC DE: DEC HL: DEC BC
XOR A
LD (DE),A: DEC DE: LD (DE),A
LL40C1 PUSH HL: PUSH BC
LD A,B: OR A: JR NZ,LL40CE
LD A,C: CP #42: JR C,LL40D0
LL40CE LD C,#42
LL40D0 LD B,C
LD A,(HL)
JP LL40D9

LL40D5 CP (HL): JP NZ,LL40DC
LL40D9 DEC HL
DJNZ LL40D5

LL40DC LD A,C: SUB B
POP BC: POP HL
CP #03: JP C,LL4106
LD (LL40FD),A
CP #0A: JP NC,LL40F4
CCF: CALL LL41CA
JP C,LL410E
LL40F4 LD A,(DE): OR A: JP Z,LL40FA
DEC DE
LL40FA LD A,(HL): LD (DE),A
LL40FD EQU $+1 : LD A,3
PUSH HL
LD L,C: LD C,A
ADD A,#3D
JP LL4128

LL4106 LD A,3: CALL LL41CA
JP C,LL4138

LL410E PUSH HL
LD A,(DE): OR A: JP Z,LL4115
DEC DE
LL4115 LD HL,#12
DEC HL: DEC HL
LD A,L: LD (DE),A
LD A,(LL4224)
LD L,C: LD C,A: ADD A,5
RRCA: RRCA: RRCA: RRCA
OR H
LL4128 DEC DE
LD H,B: LD B,0
LD (DE),A: DEC DE
SBC HL,BC
EX (SP),HL: SBC HL,BC
LD A,B
POP BC
JP LL4143

LL4138 LD A,(DE)
INC A: AND #3F: JP NZ,LL4141
DEC DE: INC A
LL4141 LDD
LL4143 LD (DE),A
LD A,B: OR C: JP NZ,LL40C1

LD A,(DE)
OR A: JR Z,$+3: DEC DE
LD HL,PACK_ADR+300+1
OR A: SBC HL,DE
POP BC
PUSH HL
OR A: SBC HL,BC
POP HL
CCF: RET C ;HЕ ЗАПОКОВАЛОСЬ
EX DE,HL
PUSH HL: PUSH DE

PUSH DE: POP BC
MASK CALL CRC16
LD (PACK_ADR+300+1),HL
POP BC: POP HL
INC BC: INC BC
OR A
RET

CRC16 PUSH HL: POP IX
LD HL,0
N_END LD D,(IX): LD E,D
ADD HL,DE
JR NC,NCR
DEC H: INC L
NCR INC IX
DEC BC
LD A,B: OR C: JP NZ,N_END
RET

LL41CA LD (LL4240),A
SBC A,0
PUSH HL: PUSH DE: PUSH BC
LD (LL4224),A
EX DE,HL
LD HL,4: SBC HL,BC
JP NC,LL423C
LD HL,#1001: SBC HL,BC
LD H,B: LD L,C
JP NC,LL41EC
LD BC,#1002
OR A
LL41EC SBC HL,BC
DEC BC: DEC BC
LD (LL4201),HL
LD H,D: LD L,E
DEC HL: DEC HL
LL41F7 LD A,(DE)
CPDR
JP PO,LL423C
PUSH BC: PUSH DE: PUSH HL
LL4201 EQU $+1: LD HL,0
ADD HL,BC
EX (SP),HL: POP BC
PUSH HL
LD A,B: OR A: JP NZ,LL4212
LD A,C: CP 10: JP C,LL4214
LL4212 LD C,10
LL4214 LD B,C
JP LL421E

LL4218 LD A,(DE): CP (HL)
JP NZ,LL4221
DEC HL
LL421E DEC DE: DJNZ LL4218

LL4221 LD A,C: SUB B
LL4224 EQU $+1: CP 2
JP C,LL4236
JP Z,LL4245
EX DE,HL
SBC HL,DE
LD (LL4115+1),HL
LD (LL4224),A
CP 10
LL4236 POP HL
POP DE
POP BC
JP C,LL41F7
LL423C LD A,(LL4224)
LL4240 EQU $+1: CP 3
POP BC: POP DE: POP HL
RET

LL4245 POP HL: POP DE: POP BC
JP LL41F7

;***************************************

DEPACK PUSH HL: PUSH BC
DEC BC: DEC BC
CALL CRC16
LD E,(IX+0): LD D,(IX+1)
OR A: SBC HL,DE
POP BC: POP HL
RET C

LD DE,DEPACK_ADR

LL4268 INC HL
LL4269 LD A,(HL)
BIT 7,A: JR Z,LL4287
AND #0F: LD B,A
RLD: SUB 5: LD C,A
INC HL: PUSH HL
LD A,E: SUB (HL): LD L,A
LD A,D: SBC A,B: LD H,A
DEC HL: DEC HL
LD B,0
LL4282 LDIR
POP HL
JR LL4268

LL4287 INC HL
OR A: JR Z,LL429F
BIT 6,A: JR NZ,LL4294
LD C,A
LDIR
JR LL4269

LL4294 SUB #3E: LD C,A
LD A,(HL)
PUSH HL
LD H,D: LD L,E: INC DE
LD (HL),A
JR LL4282

LL429F LDI
LD HL,DEPACK_ADR
PUSH HL
EX DE,HL
OR A: SBC HL,DE
PUSH HL: POP BC
POP HL
OR A
RET
===================================================


А вот сорец из драйвера для EMS:
===================================================
PACK PUSH BC: PUSH IX
LD HL,(MOD_BUFF2)
LD DE,PKADR
LD IX,PKADR
LD (IX+0),#80

PACK1 LD A,B: OR C: JR Z,PACK2
LD A,(IX+0): CP #7F: JR C,PACK5
PUSH DE: POP IX
LD (IX+0),#FF
INC DE
PACK5 PUSH BC
DEC BC: DEC BC: DEC BC
BIT 7,B
POP BC
JR NZ,PACK3
LD A,(HL): INC HL
CP (HL): JR NZ,PACK3-1
INC HL
CP (HL): JR NZ,PACK3-2
INC HL
BIT 7,(IX+0): JR NZ,PACK6

PUSH DE: POP IX
INC DE
PACK6 LD (DE),A
LD (IX+0),#80
INC DE
EX AF,AF'
DEC BC: DEC BC
PACK4 DEC BC: LD A,B: OR C: JR Z,PACK2
LD A,(IX+0): INC A: JR Z,PACK1
EX AF,AF'
CP (HL): JR NZ,PACK1
INC HL
EX AF,AF'
INC (IX+0)
JR PACK4

DEC HL: DEC HL
PACK3 INC (IX+0)
LDI
JR PACK1

PACK2 EX DE,HL
LD DE,PKADR
OR A: SBC HL,DE
POP IX: POP BC
PUSH HL
OR A: SBC HL,BC: JR C,PACK7
POP HL
RET

PACK7 POP BC
RET

UNPACK LD DE,PKADR
LD BC,(BLOCK_LEN)
LD HL,(MOD_BUFF2)
UNPACK1 LD A,(DE)
INC DE
DEC BC
BIT 7,B
RET NZ
BIT 7,A
JR NZ,UNPACK2
INC A
UNPACK4 EX AF,AF'
LD A,(DE)
LD (HL),A
DEC BC
BIT 7,B
RET NZ
INC HL
INC DE
EX AF,AF'
DEC A
JR NZ,UNPACK4
JR UNPACK1

UNPACK2 DEC BC
BIT 7,B
RET NZ
PUSH BC
SUB #80-3
LD B,A
LD A,(DE)
INC DE
UNPACK3 LD (HL),A
INC HL
DJNZ UNPACK3
POP BC
JR UNPACK1
===================================================

Hу вот и все *MAS* с кувалдой




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Others - Двенадцать приёмов литературной полемики или Пособие по газетным дискуссиям.
Help - помощь по игре Dyna Blasters.
Вступление - Газете исполнился год.
Анекдоты - По традиции - сразy к делy!
Анонс - Eternity Industry.

В этот день...   4 мая