wok annotate linld/stuff/tobzimage.S @ rev 19203
linld/tobzimage: add realmode_switch support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jun 11 15:57:21 2016 +0200 (2016-06-11) |
parents | 19a9e131dc09 |
children | 1c8a113c536a |
rev | line source |
---|---|
pascal@19203 | 1 #define REALMODE_SWITCH |
pascal@19203 | 2 #define SHUTDOWNDOS |
pascal@19203 | 3 |
pascal@18228 | 4 .code16 |
pascal@18228 | 5 .org 0 |
pascal@18228 | 6 |
pascal@19203 | 7 #define CODE32_START 0x100000 |
pascal@18228 | 8 jmp start |
pascal@18228 | 9 .ascii "HdrS" |
pascal@18228 | 10 .word 0x200 # version |
pascal@18228 | 11 .long 0 # realmode_swtch |
pascal@18228 | 12 .word 0x1000 # start_sys_seg |
pascal@18228 | 13 .word kernel_version |
pascal@18228 | 14 .byte 0 # type of loader |
pascal@18228 | 15 .byte 1 # loadflags |
pascal@18228 | 16 .word 0x8000 # setup_move_size |
pascal@19203 | 17 .long CODE32_START # code32_start |
pascal@18228 | 18 .long 0 # ramdisk_image |
pascal@18228 | 19 .long 0 # ramdisk_size |
pascal@18228 | 20 .long 0 # bootsect_kludge |
pascal@18228 | 21 .word 0 # heap_end_ptr 2.01+, patched by bootloader |
pascal@19203 | 22 |
pascal@18228 | 23 start: |
pascal@19203 | 24 cli |
pascal@19203 | 25 cld |
pascal@18228 | 26 pushf |
pascal@18228 | 27 pushw %cs |
pascal@18228 | 28 pushw $0 |
pascal@18228 | 29 pushaw |
pascal@19203 | 30 xorw %di, %di |
pascal@19203 | 31 .byte 0x66, 0xC7, 0x05 # movl $?, (%di) |
pascal@18229 | 32 rep |
pascal@18229 | 33 movsw |
pascal@18229 | 34 popaw |
pascal@18229 | 35 iret |
pascal@19203 | 36 pushw %ds |
pascal@18228 | 37 pushw %di |
pascal@19203 | 38 #ifdef REALMODE_SWITCH |
pascal@19203 | 39 movw $0x0208, %si |
pascal@19203 | 40 lodsw |
pascal@19203 | 41 orw (%si), %ax |
pascal@19203 | 42 jz norealmode_switch |
pascal@19203 | 43 lcallw *-2(%si) |
pascal@19203 | 44 norealmode_switch: |
pascal@19203 | 45 #endif |
pascal@19203 | 46 |
pascal@19203 | 47 #ifdef SHUTDOWNDOS |
pascal@19203 | 48 xorw %si, %si |
pascal@19203 | 49 movw %sp, loadsp19+0x201 |
pascal@19203 | 50 movw %si, %ds # %ds = 0 |
pascal@19203 | 51 pushl 4(%si) |
pascal@19203 | 52 cmpw $0xF000, 6(%si) |
pascal@19203 | 53 jnb notdos |
pascal@19203 | 54 movw $step19, 4(%si) |
pascal@19203 | 55 movw %cs, 6(%si) |
pascal@19203 | 56 pushfw |
pascal@19203 | 57 popw %ax |
pascal@19203 | 58 incb %ah # set TF |
pascal@19203 | 59 pushw %ax |
pascal@19203 | 60 popfw |
pascal@19203 | 61 ljmp *4*0x19(%si) |
pascal@19203 | 62 stepagain19: |
pascal@19203 | 63 iret |
pascal@19203 | 64 step19: |
pascal@19203 | 65 pushw %si |
pascal@19203 | 66 pushw %ds |
pascal@19203 | 67 movw %sp, %si |
pascal@19203 | 68 ldsw %ss:4(%si), %si |
pascal@19203 | 69 cmpw $0x19CD, (%si) |
pascal@19203 | 70 popw %ds |
pascal@19203 | 71 popw %si |
pascal@19203 | 72 jne stepagain19 |
pascal@19203 | 73 xorw %si, %si |
pascal@19203 | 74 mov %si, %ds |
pascal@19203 | 75 popl 4*0x19(%si) |
pascal@19203 | 76 notdos: |
pascal@19203 | 77 loadsp19: |
pascal@19203 | 78 movw $0, %bp |
pascal@19203 | 79 leaw -4(%bp), %sp |
pascal@19203 | 80 popl 4(%si) |
pascal@19203 | 81 pushw %ss |
pascal@19203 | 82 popw %ds |
pascal@19203 | 83 #endif |
pascal@19203 | 84 |
pascal@19203 | 85 // xorw %si, %si |
pascal@18228 | 86 movw $9, %cx |
pascal@18228 | 87 z1: |
pascal@19203 | 88 pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
pascal@18228 | 89 loop z1 |
pascal@18228 | 90 movw $0x9301, %ax |
pascal@19203 | 91 cwd |
pascal@19203 | 92 pushw %ax # 9301 |
pascal@19203 | 93 pushw %cx # 0000 |
pascal@19203 | 94 pushw %dx # FFFF |
pascal@19203 | 95 pushw %cx # 0000 |
pascal@18228 | 96 movb 0x216, %al |
pascal@19203 | 97 pushw %ax # 93xx |
pascal@19203 | 98 pushw %cx # 0000 |
pascal@19203 | 99 pushw %dx # FFFF |
pascal@18228 | 100 movb $8, %cl |
pascal@18228 | 101 z2: |
pascal@19203 | 102 pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 |
pascal@18228 | 103 loop z2 |
pascal@19203 | 104 movw $0x200, %di |
pascal@18228 | 105 movw -12(%di), %dx |
pascal@19203 | 106 pushw %ss |
pascal@19203 | 107 popw %es |
pascal@19203 | 108 movw %sp, %si |
pascal@18228 | 109 mvlp: |
pascal@18228 | 110 movw $0x8000, %cx |
pascal@18228 | 111 movb $0x87, %ah |
pascal@18228 | 112 int $0x15 |
pascal@18228 | 113 incw 20(%si) |
pascal@18228 | 114 incw 28(%si) |
pascal@18229 | 115 subw $0x1000, %dx |
pascal@18228 | 116 ja mvlp |
pascal@19203 | 117 addw $48, %sp |
pascal@19203 | 118 decb -15(%di) |
pascal@19203 | 119 sysmoved: |
pascal@18228 | 120 movw $0x400, %si |
pascal@18228 | 121 xorw %cx, %cx |
pascal@18228 | 122 movb -15(%di), %ch |
pascal@18228 | 123 lret |
pascal@19203 | 124 endcode: |
pascal@19203 | 125 |
pascal@19203 | 126 .org 256 |
pascal@18228 | 127 kernel_version: |
pascal@18228 | 128 .asciz "zImage" |
pascal@18228 | 129 .org 512 |
pascal@18228 | 130 oldsetup: |
pascal@18228 | 131 |
pascal@19203 | 132 |
pascal@19203 | 133 |