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: