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: