wok annotate linld/stuff/src/XMM.ASM @ rev 19538

linld: add 'linld <kernel> <cmdline>' syntax
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Dec 02 12:37:59 2016 +0100 (2016-12-02)
parents bb42796dcd3b
children 76087975885f
rev   line source
pascal@19515 1 ;***************************************************************
pascal@19515 2 ;****** This file is distributed under GPL
pascal@19515 3 ;***************************************************************
pascal@19515 4 ideal
pascal@19515 5 %crefref
pascal@19515 6 %noincl
pascal@19515 7 %nomacs
pascal@19515 8 p386
pascal@19515 9
pascal@19515 10 group DGROUP _TEXT,_BSS
pascal@19515 11 assume cs:DGROUP,ds:DGROUP
pascal@19515 12
pascal@19515 13 segment _BSS byte public use16 'BSS'
pascal@19515 14
pascal@19515 15 global xmm_handler:dword
pascal@19515 16 xmm_handler dd ?
pascal@19515 17
pascal@19515 18 ends _BSS
pascal@19515 19
pascal@19515 20 segment _TEXT byte public use16 'CODE'
pascal@19515 21
pascal@19515 22 ;***************************************************************
pascal@19515 23 ;void enable_a20_xmm();
pascal@19515 24 ;***************************************************************
pascal@19515 25 global _enable_a20_xmm:near
pascal@19515 26 proc _enable_a20_xmm near
pascal@19515 27
pascal@19515 28 mov ah,03h ;global enable a20
pascal@19515 29 call xmm_driver ;
pascal@19515 30 mov ah,05h ;local enable a20
pascal@19515 31 ;jmp xmm_driver ;
pascal@19515 32
pascal@19515 33 endp _enable_a20_xmm
pascal@19515 34
pascal@19515 35 ;***************************************************************
pascal@19515 36 ;Call xmm driver addr or 0 if no xmm
pascal@19515 37 ;void xmm_driver()
pascal@19515 38 ;***************************************************************
pascal@19515 39 global xmm_driver:near
pascal@19515 40 proc xmm_driver near
pascal@19515 41
pascal@19515 42 cmp [xmm_handler],0
pascal@19515 43 jne @@gotit
pascal@19515 44
pascal@19515 45 xchg ax,cx ; save cmd
pascal@19515 46 mov ax,4300h
pascal@19515 47 int 2fh
pascal@19515 48 mov bx,offset xmm_fail
pascal@19515 49 push cs
pascal@19515 50 pop es
pascal@19515 51 cmp al,80h
pascal@19515 52 jne @@err
pascal@19515 53 mov ax,4310h
pascal@19515 54 int 2fh
pascal@19515 55 @@err:
pascal@19515 56 xchg ax,cx ; restore cmd
pascal@19515 57 push es
pascal@19515 58 push bx
pascal@19515 59 pop [xmm_handler]
pascal@19515 60 @@gotit:
pascal@19515 61 call [xmm_handler]
pascal@19515 62 ret
pascal@19538 63 xmm_fail:
pascal@19538 64 xor ax,ax
pascal@19538 65 cwd
pascal@19538 66 retf
pascal@19538 67
pascal@19515 68 endp xmm_driver
pascal@19515 69
pascal@19515 70
pascal@19515 71 ;***************************************************************
pascal@19538 72 ;void xmm_alloc(struct image_himem *m)
pascal@19538 73 ;struct image_himem {
pascal@19538 74 ; 0 int fd;
pascal@19538 75 ; 2 u32 fallback;
pascal@19538 76 ; 6 u32 size;
pascal@19538 77 ;10 u32 remaining;
pascal@19538 78 ;14 u32 buf;
pascal@19538 79 ;18 u32 *bufv;
pascal@19538 80 ;20 char *errmsg;
pascal@19538 81 ;22 u32 chunk_size;
pascal@19538 82 ;26 void (*next_chunk)(struct image_himem *);
pascal@19538 83 ;28 u16 state;
pascal@19538 84 ;30 u16 fd2close;
pascal@19538 85 ;};
pascal@19515 86 ;***************************************************************
pascal@19515 87 global _xmm_alloc:near
pascal@19515 88 proc _xmm_alloc near
pascal@19515 89
pascal@19538 90 pop ax
pascal@19515 91 pop bx
pascal@19538 92 push bx
pascal@19538 93 push ax
pascal@19515 94 ifndef NO386
pascal@19538 95 mov edx,[bx+6] ; m->size
pascal@19515 96 dec edx
pascal@19515 97 shr edx,10 ; to Kb
pascal@19515 98 else
pascal@19538 99 mov ax,[bx+6] ; lo m->size
pascal@19538 100 mov dx,[bx+8] ; hi m->size
pascal@19515 101 sub ax,1
pascal@19515 102 sbb dx,0
pascal@19515 103 mov cx,10
pascal@19515 104 @@tokblp:
pascal@19515 105 shr dx,1
pascal@19515 106 rcr ax,1
pascal@19515 107 loop @@tokblp
pascal@19515 108 endif
pascal@19515 109 inc dx
pascal@19538 110 push bx
pascal@19515 111 mov ah,09h ;allocate blk
pascal@19515 112 call xmm_driver ;
pascal@19515 113 dec ax
pascal@19538 114 jnz @@goerr
pascal@19515 115 ;now: dx=handle of the blk
pascal@19515 116 mov ah,0Ch ;lock blk
pascal@19515 117 call xmm_driver ;
pascal@19515 118 dec ax
pascal@19515 119 ;now: dx:bx=addr of blk
pascal@19515 120 xchg ax,bx
pascal@19538 121 @@goerr:
pascal@19538 122 pop bx
pascal@19538 123 jnz @@err
pascal@19538 124 mov [bx+14],ax ; lo m->buf
pascal@19538 125 mov [bx+16],dx ; hi m->buf
pascal@19515 126 @@err:
pascal@19538 127 ret
pascal@19538 128
pascal@19515 129 endp _xmm_alloc
pascal@19515 130
pascal@19515 131 ends _TEXT
pascal@19515 132
pascal@19515 133 end
pascal@19515 134
pascal@19515 135 ;###### END OF FILE ############################################