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

linld: add iso support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jan 08 20:15:35 2021 +0000 (2021-01-08)
parents 3d19917d3a03
children 5c1ce90eb1d6
rev   line source
pascal@19515 1 ;***************************************************************
pascal@19515 2 ;****** This file is distributed under GPL
pascal@19515 3 ;***************************************************************
pascal@19515 4 ideal
pascal@21984 5 %PAGESIZE 1000
pascal@19515 6 %crefref
pascal@19515 7 %noincl
pascal@19515 8 %nomacs
pascal@19636 9 ifdef NO386
pascal@19636 10 p8086
pascal@19636 11 else
pascal@19515 12 p386
pascal@19636 13 endif
pascal@19515 14
pascal@23996 15 group DGROUP _TEXT
pascal@19515 16 assume cs:DGROUP,ds:DGROUP
pascal@19515 17
pascal@19515 18 segment _TEXT byte public use16 'CODE'
pascal@19515 19
pascal@19515 20 ;***************************************************************
pascal@19515 21 ;void enable_a20_xmm();
pascal@19515 22 ;***************************************************************
pascal@19515 23 global _enable_a20_xmm:near
pascal@19515 24 proc _enable_a20_xmm near
pascal@19515 25
pascal@19515 26 mov ah,03h ;global enable a20
pascal@19515 27 call xmm_driver ;
pascal@19515 28 mov ah,05h ;local enable a20
pascal@19515 29 ;jmp xmm_driver ;
pascal@19515 30
pascal@19515 31 endp _enable_a20_xmm
pascal@19515 32
pascal@19515 33 ;***************************************************************
pascal@19515 34 ;Call xmm driver addr or 0 if no xmm
pascal@20142 35 ;void xmm_driver(ah)
pascal@19515 36 ;***************************************************************
pascal@19515 37 proc xmm_driver near
pascal@19515 38
pascal@21757 39 push ax ; save cmd
pascal@20142 40 mov ax,4300h ; installation check in al
pascal@19515 41 int 2fh
pascal@23996 42 mov bx,offset @@xmm_fail
pascal@23996 43 push cs
pascal@19515 44 pop es
pascal@19515 45 cmp al,80h
pascal@19515 46 jne @@err
pascal@20142 47 mov ax,4310h ; get driver address in es:bx
pascal@19515 48 int 2fh
pascal@19515 49 @@err:
pascal@21757 50 pop ax ; restore cmd
pascal@23996 51
pascal@23996 52 push cs ; call far
pascal@23996 53 call @@jmp_esbx
pascal@20142 54 dec ax ; Z=1=OK
pascal@19515 55 ret
pascal@23996 56
pascal@23996 57 @@jmp_esbx:
pascal@23996 58 push es ; \
pascal@23996 59 push bx ; > jmp far es:bx
pascal@23996 60 retf ; /
pascal@23996 61
pascal@23996 62 @@xmm_fail:
pascal@19538 63 xor ax,ax
pascal@19538 64 cwd
pascal@19538 65 retf
pascal@19538 66
pascal@19515 67 endp xmm_driver
pascal@19515 68
pascal@23992 69 ifdef WITH_XMM_ALLOC
pascal@22007 70 include "himem.inc"
pascal@20142 71
pascal@19515 72 ;***************************************************************
pascal@23992 73 ;_fastcall void xmm_alloc(si:struct image_himem *m)
pascal@19515 74 ;***************************************************************
pascal@20528 75 global @xmm_alloc$qp11image_himem:near
pascal@20528 76 proc @xmm_alloc$qp11image_himem near
pascal@19515 77
pascal@19515 78 ifndef NO386
pascal@23992 79 mov edx,[(image_himem si).size] ; m->size
pascal@20142 80 ;dec edx
pascal@19515 81 shr edx,10 ; to Kb
pascal@20486 82 inc edx
pascal@20486 83 mov ah,89h ;allocate blk of EDX kilobytes
pascal@19515 84 else
pascal@20142 85 ;mov ax,-1
pascal@20142 86 ;cwd
pascal@23992 87 ;add ax,[word (image_himem si).size] ; lo m->size
pascal@23992 88 ;adc dx,[word (image_himem si+2).size] ; hi m->size
pascal@23992 89 les ax,[dword (image_himem si).size] ; m->size
pascal@20142 90 mov cl,16-10
pascal@21791 91 extrn N_LXLSH@ES:near
pascal@21791 92 call N_LXLSH@ES
pascal@20486 93 inc dx
pascal@20486 94 mov ah,9h ;allocate blk of DX kilobytes (<64Mb)
pascal@19515 95 endif
pascal@19515 96 call xmm_driver ;
pascal@19538 97 jnz @@goerr
pascal@19515 98 ;now: dx=handle of the blk
pascal@19515 99 mov ah,0Ch ;lock blk
pascal@19515 100 call xmm_driver ;
pascal@19515 101 ;now: dx:bx=addr of blk
pascal@19515 102 xchg ax,bx
pascal@19538 103 @@goerr:
pascal@19538 104 jnz @@err
pascal@20142 105 mov [word (image_himem bx).buf],ax ; lo m->buf
pascal@20142 106 mov [word (image_himem bx+2).buf],dx ; hi m->buf
pascal@19515 107 @@err:
pascal@19538 108 ret
pascal@19538 109
pascal@20528 110 endp @xmm_alloc$qp11image_himem
pascal@23992 111 endif
pascal@19515 112
pascal@19515 113 ends _TEXT
pascal@19515 114
pascal@19515 115 end
pascal@19515 116
pascal@19515 117 ;###### END OF FILE ############################################