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