--- qemu/roms/seabios/src/cdrom.c 2018/04/24 18:27:19 1.1.1.3 +++ qemu/roms/seabios/src/cdrom.c 2018/04/24 19:23:50 1.1.1.5 @@ -18,7 +18,6 @@ ****************************************************************/ struct drive_s *cdemu_drive_gf VAR16VISIBLE; -u8 *cdemu_buf_fl VAR16VISIBLE; static int cdemu_read(struct disk_op_s *op) @@ -33,7 +32,7 @@ cdemu_read(struct disk_op_s *op) int count = op->count; op->count = 0; - u8 *cdbuf_fl = GET_GLOBAL(cdemu_buf_fl); + u8 *cdbuf_fl = GET_GLOBAL(bounce_buf_fl); if (op->lba & 3) { // Partial read of first block. @@ -109,21 +108,18 @@ cdemu_setup(void) { if (!CONFIG_CDROM_EMU) return; - cdemu_drive_gf = NULL; - cdemu_buf_fl = NULL; - if (!Drives.cdcount) + if (!CDCount) + return; + if (bounce_buf_init() < 0) return; struct drive_s *drive_g = malloc_fseg(sizeof(*drive_g)); - u8 *buf = malloc_low(CDROM_SECTOR_SIZE); - if (!drive_g || !buf) { + if (!drive_g) { warn_noalloc(); free(drive_g); - free(buf); return; } cdemu_drive_gf = drive_g; - cdemu_buf_fl = buf; memset(drive_g, 0, sizeof(*drive_g)); drive_g->type = DTYPE_CDEMU; drive_g->blksize = DISK_SECTOR_SIZE; @@ -243,12 +239,13 @@ atapi_is_ready(struct disk_op_s *op) } int -cdrom_boot(int cdid) +cdrom_boot(struct drive_s *drive_g) { struct disk_op_s dop; + int cdid = getDriveId(EXTTYPE_CD, drive_g); memset(&dop, 0, sizeof(dop)); - dop.drive_g = getDrive(EXTTYPE_CD, cdid); - if (!dop.drive_g) + dop.drive_g = drive_g; + if (!dop.drive_g || cdid < 0) return 1; int ret = atapi_is_ready(&dop);