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

perl: force arch
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Oct 26 10:09:53 2018 +0200 (2018-10-26)
parents c0625ff5d49b
children f0d71e920c5a
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@19636 8 ifdef NO386
pascal@19636 9 p8086
pascal@19636 10 else
pascal@19515 11 p386
pascal@19636 12 endif
pascal@19515 13
pascal@19515 14 group DGROUP _TEXT,_BSS
pascal@19515 15 assume cs:DGROUP,ds:DGROUP
pascal@19515 16
pascal@19515 17 segment _BSS byte public use16 'BSS'
pascal@19515 18
pascal@19515 19 xmm_handler dd ?
pascal@19515 20
pascal@19515 21 ends _BSS
pascal@19515 22
pascal@19515 23 segment _TEXT byte public use16 'CODE'
pascal@19515 24
pascal@19515 25 ;***************************************************************
pascal@19515 26 ;void enable_a20_xmm();
pascal@19515 27 ;***************************************************************
pascal@19515 28 global _enable_a20_xmm:near
pascal@19515 29 proc _enable_a20_xmm near
pascal@19515 30
pascal@19515 31 mov ah,03h ;global enable a20
pascal@19515 32 call xmm_driver ;
pascal@19515 33 mov ah,05h ;local enable a20
pascal@19515 34 ;jmp xmm_driver ;
pascal@19515 35
pascal@19515 36 endp _enable_a20_xmm
pascal@19515 37
pascal@19515 38 ;***************************************************************
pascal@19515 39 ;Call xmm driver addr or 0 if no xmm
pascal@20142 40 ;void xmm_driver(ah)
pascal@19515 41 ;***************************************************************
pascal@19515 42 proc xmm_driver near
pascal@19515 43
pascal@19876 44 push si
pascal@19876 45 mov si,offset xmm_handler
pascal@19636 46 ifndef NO386
pascal@20142 47 cmp [dword si],0
pascal@19636 48 else
pascal@20426 49 mov cx,[word si]
pascal@20426 50 or cx,[word si+2]
pascal@19636 51 endif
pascal@19515 52 jne @@gotit
pascal@19515 53
pascal@19515 54 xchg ax,cx ; save cmd
pascal@20142 55 mov ax,4300h ; installation check in al
pascal@19515 56 int 2fh
pascal@19515 57 mov bx,offset xmm_fail
pascal@19515 58 push cs
pascal@19515 59 pop es
pascal@19515 60 cmp al,80h
pascal@19515 61 jne @@err
pascal@20142 62 mov ax,4310h ; get driver address in es:bx
pascal@19515 63 int 2fh
pascal@19515 64 @@err:
pascal@19515 65 xchg ax,cx ; restore cmd
pascal@20426 66 mov [si],bx
pascal@20426 67 mov [si+2],es
pascal@19515 68 @@gotit:
pascal@20426 69 call [dword si] ; far ptr [si]
pascal@20142 70 dec ax ; Z=1=OK
pascal@19876 71 pop si
pascal@19515 72 ret
pascal@19538 73 xmm_fail:
pascal@19538 74 xor ax,ax
pascal@19538 75 cwd
pascal@19538 76 retf
pascal@19538 77
pascal@19515 78 endp xmm_driver
pascal@19515 79
pascal@19515 80
pascal@20142 81 struc image_himem ;struct image_himem {
pascal@20142 82 fd dw ? ; 0 int fd;
pascal@20142 83 fallback dd ? ; 2 u32 fallback;
pascal@20142 84 size dd ? ; 6 u32 size;
pascal@20142 85 remaining dd ? ;10 u32 remaining;
pascal@20142 86 buf dd ? ;14 u32 buf;
pascal@20142 87 bufv dw ? ;18 u32 *bufv;
pascal@20142 88 errmsg dw ? ;20 char *errmsg;
pascal@20142 89 chunk_size dd ? ;22 u32 chunk_size;
pascal@20142 90 next_chunk dw ? ;26 void (*next_chunk)(struct image_himem *);
pascal@20142 91 state dw ? ;28 u16 state;
pascal@20142 92 fd2close dw ? ;30 u16 fd2close;
pascal@20142 93 ends ;};
pascal@20142 94
pascal@19515 95 ;***************************************************************
pascal@19538 96 ;void xmm_alloc(struct image_himem *m)
pascal@19515 97 ;***************************************************************
pascal@19515 98 global _xmm_alloc:near
pascal@19515 99 proc _xmm_alloc near
pascal@19515 100
pascal@20486 101 ret ; TO BE FIXED
pascal@19538 102 pop ax
pascal@19515 103 pop bx
pascal@19538 104 push bx
pascal@19538 105 push ax
pascal@19515 106 ifndef NO386
pascal@20142 107 mov edx,[(image_himem bx).size] ; m->size
pascal@20142 108 ;dec edx
pascal@19515 109 shr edx,10 ; to Kb
pascal@20486 110 inc edx
pascal@20486 111 mov ah,89h ;allocate blk of EDX kilobytes
pascal@19515 112 else
pascal@20142 113 ;mov ax,-1
pascal@20142 114 ;cwd
pascal@20142 115 ;add ax,[word (image_himem bx).size] ; lo m->size
pascal@20142 116 ;adc dx,[word (image_himem bx+2).size] ; hi m->size
pascal@20142 117 mov ax,[word (image_himem bx).size] ; lo m->size
pascal@20142 118 mov dx,[word (image_himem bx+2).size] ; hi m->size
pascal@20142 119 mov cl,16-10
pascal@20142 120 extrn N_LXLSH@:near
pascal@20142 121 call N_LXLSH@
pascal@20486 122 inc dx
pascal@20486 123 mov ah,9h ;allocate blk of DX kilobytes (<64Mb)
pascal@19515 124 endif
pascal@19538 125 push bx
pascal@19515 126 call xmm_driver ;
pascal@19538 127 jnz @@goerr
pascal@19515 128 ;now: dx=handle of the blk
pascal@19515 129 mov ah,0Ch ;lock blk
pascal@19515 130 call xmm_driver ;
pascal@19515 131 ;now: dx:bx=addr of blk
pascal@19515 132 xchg ax,bx
pascal@19538 133 @@goerr:
pascal@19538 134 pop bx
pascal@19538 135 jnz @@err
pascal@20142 136 mov [word (image_himem bx).buf],ax ; lo m->buf
pascal@20142 137 mov [word (image_himem bx+2).buf],dx ; hi m->buf
pascal@19515 138 @@err:
pascal@19538 139 ret
pascal@19538 140
pascal@19515 141 endp _xmm_alloc
pascal@19515 142
pascal@19515 143 ends _TEXT
pascal@19515 144
pascal@19515 145 end
pascal@19515 146
pascal@19515 147 ;###### END OF FILE ############################################