|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* ! 26: * Copyright 1993 NeXT Computer, Inc. ! 27: * All rights reserved. ! 28: * ! 29: * Harness for calling protected-mode BIOS functions. ! 30: */ ! 31: ! 32: #import <machdep/i386/asm.h> ! 33: #import <assym.h> ! 34: ! 35: #define data32 .byte 0x66 ! 36: #define addr32 .byte 0x67 ! 37: ! 38: #define O_INT 0 ! 39: #define O_EAX 4 ! 40: #define O_EBX 8 ! 41: #define O_ECX 12 ! 42: #define O_EDX 16 ! 43: #define O_EDI 20 ! 44: #define O_ESI 24 ! 45: #define O_EBP 28 ! 46: #define O_CS 32 ! 47: #define O_DS 34 ! 48: #define O_ES 36 ! 49: #define O_FLG 40 ! 50: #define O_ADDR 44 ! 51: ! 52: .data ! 53: .align 2 ! 54: save_es: ! 55: .long 0 ! 56: save_eax: ! 57: .long 0 ! 58: save_edx: ! 59: .long 0 ! 60: save_flag: ! 61: .long 0 ! 62: new_eax: ! 63: .long 0 ! 64: new_edx: ! 65: .long 0 ! 66: ! 67: .text ! 68: ENTRY(_bios32) ! 69: enter $0,$0 ! 70: pushal ! 71: push %es ! 72: push %fs ! 73: push %gs ! 74: pushf ! 75: ! 76: movl 8(%ebp), %edx // address of save area ! 77: ! 78: movw O_CS(%edx), %ax ! 79: movw %ax, save_seg ! 80: movl O_ADDR(%edx), %eax ! 81: movl %eax, save_addr ! 82: movl O_EBX(%edx), %ebx ! 83: movl O_ECX(%edx), %ecx ! 84: movl O_EDI(%edx), %edi ! 85: movl O_ESI(%edx), %esi ! 86: movl O_EBP(%edx), %ebp ! 87: movl %edx, save_edx ! 88: movl O_EAX(%edx), %eax ! 89: movl %eax, new_eax ! 90: movl O_EDX(%edx), %eax ! 91: movl %eax, new_edx ! 92: movw O_DS(%edx), %ax ! 93: pushw %ax ! 94: ! 95: movl new_eax, %eax ! 96: mov new_edx, %edx ! 97: popw %ds ! 98: ! 99: cli ! 100: .byte 0x9A // far jmp ! 101: save_addr: ! 102: .long 0 ! 103: save_seg: ! 104: .word 0 ! 105: ! 106: pushf ! 107: mov $KDSSEL, %eax ! 108: mov %ax, %ds ! 109: ! 110: ! 111: movl %eax, save_eax ! 112: popl %eax ! 113: movw %ax, save_flag ! 114: movw %es, %ax ! 115: movw %ax, save_es ! 116: ! 117: movl %edx, new_edx // save new edx before clobbering ! 118: movl save_edx, %edx ! 119: movl new_edx, %eax // now move it into buffer ! 120: movl %eax, O_EDX(%edx) ! 121: movl save_eax, %eax ! 122: movl %eax, O_EAX(%edx) ! 123: movw save_es, %ax ! 124: movw %ax, O_ES(%edx) ! 125: movw save_flag, %ax ! 126: movw %ax, O_FLG(%edx) ! 127: movl %ebx, O_EBX(%edx) ! 128: movl %ecx, O_ECX(%edx) ! 129: movl %edi, O_EDI(%edx) ! 130: movl %esi, O_ESI(%edx) ! 131: movl %ebp, O_EBP(%edx) ! 132: ! 133: popf ! 134: pop %gs ! 135: pop %fs ! 136: pop %es ! 137: ! 138: popal ! 139: leave ! 140: ! 141: ret ! 142: ! 143:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.