/* * 86Box A hypervisor and IBM PC system emulator that specializes in * running old operating systems and software designed for IBM * PC systems and compatibles from 1981 through fairly recent * system designs based on the PCI bus. * * This file is part of the 86Box distribution. * * Definitions for the ROM image handler. * * * * Author: Fred N. van Kempen, * Copyright 2018,2019 Fred N. van Kempen. */ #ifndef EMU_ROM_H # define EMU_ROM_H #define FLAG_INT 1 #define FLAG_INV 2 #define FLAG_AUX 4 #define FLAG_REP 8 #define bios_load_linear(a, b, c, d) bios_load(a, NULL, b, c, d, 0) #define bios_load_linearr(a, b, c, d) bios_load(a, NULL, b, c, d, FLAG_REP) #define bios_load_aux_linear(a, b, c, d) bios_load(a, NULL, b, c, d, FLAG_AUX) #define bios_load_linear_inverted(a, b, c, d) bios_load(a, NULL, b, c, d, FLAG_INV) #define bios_load_aux_linear_inverted(a, b, c, d) bios_load(a, NULL, b, c, d, FLAG_INV | FLAG_AUX) #define bios_load_interleaved(a, b, c, d, e) bios_load(a, b, c, d, e, FLAG_INT) #define bios_load_interleavedr(a, b, c, d, e) bios_load(a, b, c, d, e, FLAG_INT | FLAG_REP) #define bios_load_aux_interleaved(a, b, c, d, e) bios_load(a, b, c, d, e, FLAG_INT | FLAG_AUX) typedef struct { uint8_t *rom; int sz; uint32_t mask; mem_mapping_t mapping; } rom_t; extern uint8_t rom_read(uint32_t addr, void *p); extern uint16_t rom_readw(uint32_t addr, void *p); extern uint32_t rom_readl(uint32_t addr, void *p); extern FILE *rom_fopen(char *fn, char *mode); extern int rom_getfile(char *fn, char *s, int size); extern int rom_present(char *fn); extern int rom_load_linear_oddeven(char *fn, uint32_t addr, int sz, int off, uint8_t *ptr); extern int rom_load_linear(char *fn, uint32_t addr, int sz, int off, uint8_t *ptr); extern int rom_load_interleaved(char *fnl, char *fnh, uint32_t addr, int sz, int off, uint8_t *ptr); extern uint8_t bios_read(uint32_t addr, void *priv); extern uint16_t bios_readw(uint32_t addr, void *priv); extern uint32_t bios_readl(uint32_t addr, void *priv); extern int bios_load(char *fn1, char *fn2, uint32_t addr, int sz, int off, int flags); extern int bios_load_linear_combined(char *fn1, char *fn2, int sz, int off); extern int bios_load_linear_combined2(char *fn1, char *fn2, char *fn3, char *fn4, char *fn5, int sz, int off); extern int bios_load_linear_combined2_ex(char *fn1, char *fn2, char *fn3, char *fn4, char *fn5, int sz, int off); extern int rom_init(rom_t *rom, char *fn, uint32_t address, int size, int mask, int file_offset, uint32_t flags); extern int rom_init_oddeven(rom_t *rom, char *fn, uint32_t address, int size, int mask, int file_offset, uint32_t flags); extern int rom_init_interleaved(rom_t *rom, char *fn_low, char *fn_high, uint32_t address, int size, int mask, int file_offset, uint32_t flags); #endif /*EMU_ROM_H*/