wok-next view memtest/stuff/unpack.S @ rev 13269
memtest: compression (-76K)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Aug 19 08:06:36 2012 +0200 (2012-08-19) |
parents | |
children | 1d5a6d3ed1f5 |
line source
1 #define TOP 0x8FF00
2 #define SYSTEM 0x10000
3 #define SETUP 4
5 .text
6 .code16
7 .org 0
9 .globl _start
10 _start:
11 pushf
12 pushw %cs
13 call getip
14 getip:
15 pushal
16 movw $0, %bx // packed sizes
17 movw %sp, %bp
18 #define START_IP 32(%bp)
19 pushw %ds
20 pushw %es
21 subw $getip-_start, START_IP
23 cld
24 pushw %cs
25 popw %ds
26 movw $TOP/16, %ax
27 movw %ax, %es
28 subw %bx, %ax // moved packed data
29 movw START_IP, %si
30 movw $moved-_start, %di
31 addw %si, %di
32 pushw %ds // save setup seg
33 pushw %es // moved
34 pushw %di // unpack code
35 movw %si, %di
36 movw $end-_start, %cx
37 rep
38 movsb // move upack code to $TOP
39 pushw %si // data offset
40 movw %ax, %es
41 movw $SETUP*512, %cx
42 subw $SETUP*32, %bx
43 xorw %si, %si
44 xorw %di, %di
45 rep
46 movsb // move header part
47 pushw $SYSTEM/16
48 popw %ds
49 movlp:
50 xorw %si, %si
51 movw $8, %cx
52 rep
53 movsw // move system part
54 subw $16, %di
55 movw %ds, %cx
56 incw %cx
57 movw %cx, %ds
58 movw %es, %cx
59 incw %cx
60 movw %cx, %es
61 decw %bx
62 jns movlp
63 popw %si // data offset
64 movw %ax, %ds
65 retf
67 moved:
68 popw %es // restore setup seg
69 movw START_IP, %di
70 call unpack // unpack setup
71 pushw $SYSTEM/16
72 popw %es
73 xorw %di,%di
74 call unpack // unpack system
75 popw %es
76 popw %ds
77 popal
78 iret
80 unpack:
81 #include "unlz4.S"
83 end: