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

linld: add quick boot switch (again)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Feb 19 18:33:17 2021 +0000 (2021-02-19)
parents bc4b94310a29
children 61df94a0fa43
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 p8086
pascal@19515 10
pascal@23996 11 group DGROUP _TEXT
pascal@19515 12 assume cs:DGROUP,ds:DGROUP
pascal@19515 13
pascal@19515 14 segment _TEXT byte public use16 'CODE'
pascal@19515 15
pascal@19515 16 ;***************************************************************
pascal@19515 17 ;void enable_a20_xmm();
pascal@19515 18 ;***************************************************************
pascal@19515 19 global _enable_a20_xmm:near
pascal@19515 20 proc _enable_a20_xmm near
pascal@19515 21
pascal@24013 22 mov ch,03h ;global enable a20
pascal@19515 23 call xmm_driver ;
pascal@24013 24 mov ch,05h ;local enable a20
pascal@19515 25 ;jmp xmm_driver ;
pascal@19515 26
pascal@19515 27 endp _enable_a20_xmm
pascal@19515 28
pascal@19515 29 ;***************************************************************
pascal@24013 30 ;Call xmm driver addr (success: ax=1)
pascal@20142 31 ;void xmm_driver(ah)
pascal@19515 32 ;***************************************************************
pascal@19515 33 proc xmm_driver near
pascal@19515 34
pascal@24013 35 pop bx ; \
pascal@24013 36 push cs ; fake far call
pascal@24013 37 push bx ; /
pascal@20142 38 mov ax,4300h ; installation check in al
pascal@19515 39 int 2fh
pascal@19515 40 cmp al,80h
pascal@24013 41 jne @@xmm_fail
pascal@20142 42 mov ax,4310h ; get driver address in es:bx
pascal@19515 43 int 2fh
pascal@24013 44 xchg ax,cx ; restore cmd
pascal@23996 45
pascal@24013 46 push es ; jmp far es:bx
pascal@24013 47 push bx ; avoid 08h 0Fh 12h and 8Fh functions using bx
pascal@23996 48 @@xmm_fail:
pascal@19538 49 retf
pascal@19538 50
pascal@19515 51 endp xmm_driver
pascal@19515 52
pascal@23992 53 ifdef WITH_XMM_ALLOC
pascal@22007 54 include "himem.inc"
pascal@20142 55
pascal@19515 56 ;***************************************************************
pascal@23992 57 ;_fastcall void xmm_alloc(si:struct image_himem *m)
pascal@19515 58 ;***************************************************************
pascal@20528 59 global @xmm_alloc$qp11image_himem:near
pascal@20528 60 proc @xmm_alloc$qp11image_himem near
pascal@19515 61
pascal@23999 62 extrn _cmdnum:dword
pascal@23999 63 skip_alloc = (byte _cmdnum+16)
pascal@24013 64 LARGE_XMM_ALLOC = 1
pascal@24013 65 ifdef LARGE_XMM_ALLOC
pascal@24013 66 mov ch,89h ;allocate blk of EDX kilobytes
pascal@24014 67 test [skip_alloc],ch
pascal@23999 68 jne @@err
pascal@24013 69 extrn _cpu386:byte
pascal@24013 70 test [_cpu386],ch
pascal@24013 71 je @@not386
pascal@24013 72 p386
pascal@23992 73 mov edx,[(image_himem si).size] ; m->size
pascal@20142 74 ;dec edx
pascal@19515 75 shr edx,10 ; to Kb
pascal@20486 76 inc edx
pascal@24013 77 call xmm_driver ;
pascal@24013 78 dec ax ; Z=OK
pascal@24013 79 jz @@gotit
pascal@24013 80 @@not386:
pascal@24013 81 mov cl,16-10
pascal@19515 82 else
pascal@24013 83 mov cl,16-10
pascal@24013 84 test [skip_alloc],cl ; 06h & ('*'=2Ah) = 02h
pascal@24013 85 jne @@err
pascal@24013 86 endif
pascal@24013 87 p8086
pascal@20142 88 ;mov ax,-1
pascal@20142 89 ;cwd
pascal@23992 90 ;add ax,[word (image_himem si).size] ; lo m->size
pascal@23992 91 ;adc dx,[word (image_himem si+2).size] ; hi m->size
pascal@23992 92 les ax,[dword (image_himem si).size] ; m->size
pascal@21791 93 extrn N_LXLSH@ES:near
pascal@21791 94 call N_LXLSH@ES
pascal@20486 95 inc dx
pascal@24013 96 mov ch,9h ;allocate blk of DX kilobytes (<64Mb)
pascal@19515 97 call xmm_driver ;
pascal@24013 98 dec ax ; Z=OK
pascal@23999 99 jnz @@err
pascal@24013 100 @@gotit:
pascal@19515 101 ;now: dx=handle of the blk
pascal@24013 102 mov ch,0Ch ;lock blk
pascal@19515 103 call xmm_driver ;
pascal@19515 104 ;now: dx:bx=addr of blk
pascal@24013 105 ;dec ax ; Z=OK
pascal@24013 106 ;jnz @@err
pascal@23999 107 mov [word (image_himem si).buf],bx ; lo m->buf
pascal@23999 108 mov [word (image_himem si+2).buf],dx ; hi m->buf
pascal@19515 109 @@err:
pascal@19538 110 ret
pascal@19538 111
pascal@20528 112 endp @xmm_alloc$qp11image_himem
pascal@23992 113 endif
pascal@19515 114
pascal@19515 115 ends _TEXT
pascal@19515 116
pascal@19515 117 end
pascal@19515 118
pascal@19515 119 ;###### END OF FILE ############################################