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