X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fasmops.h;h=1f427679f6a662aac4a914bb8352b776d3340f95;hb=5e8cc93aaf1173688852acaa0825698c2dc0cb3f;hp=2578467a8c0abb1ee7db60b1ae81b580ca746b23;hpb=d1e8a437c1fab4535f82c4c214ec3330ac32e48d;p=bootcensus diff --git a/src/asmops.h b/src/asmops.h index 2578467..1f42767 100644 --- a/src/asmops.h +++ b/src/asmops.h @@ -1,3 +1,20 @@ +/* +pcboot - bootable PC demo/game kernel +Copyright (C) 2018 John Tsiombikas + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ #ifndef ASMOPS_H_ #define ASMOPS_H_ @@ -7,6 +24,11 @@ #define disable_intr() asm volatile("cli") #define halt_cpu() asm volatile("hlt") +#define CALLER_EIP(eip) \ + asm volatile( \ + "mov (%%esp), %0\n\t" \ + : "=a" ((uint32_t)eip)) + static inline uint8_t inb(uint16_t port) { uint8_t res; @@ -52,6 +74,7 @@ static inline uint32_t inl(uint16_t port) "outl %0, %1\n\t" \ :: "a" ((uint32_t)(src)), "dN" ((uint16_t)(port))) +/* delay for about 1us */ #define iodelay() outb(0, 0x80)