Removed obsolete INT 13 hard disk emulation.
This commit is contained in:
parent
a479b55cc9
commit
c9aa6dc3a9
3 changed files with 1 additions and 157 deletions
|
|
@ -4,7 +4,7 @@ CC = gcc.exe
|
||||||
WINDRES = windres.exe
|
WINDRES = windres.exe
|
||||||
CFLAGS = -O3 -march=i686 -fomit-frame-pointer
|
CFLAGS = -O3 -march=i686 -fomit-frame-pointer
|
||||||
OBJ = 386.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o \
|
OBJ = 386.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o \
|
||||||
config.o cpu.o dac.o device.o dma.o ega.o fdc.o harddisk.o \
|
config.o cpu.o dac.o device.o dma.o ega.o fdc.o \
|
||||||
headland.o i430vx.o ide.o io.o jim.o keyboard.o keyboard_amstrad.o keyboard_at.o \
|
headland.o i430vx.o ide.o io.o jim.o keyboard.o keyboard_amstrad.o keyboard_at.o \
|
||||||
keyboard_olim24.o keyboard_xt.o lpt.o mcr.o mem.o model.o \
|
keyboard_olim24.o keyboard_xt.o lpt.o mcr.o mem.o model.o \
|
||||||
mouse.o mouse_ps2.o mouse_serial.o neat.o nvr.o olivetti_m24.o \
|
mouse.o mouse_ps2.o mouse_serial.o neat.o nvr.o olivetti_m24.o \
|
||||||
|
|
|
||||||
155
src/harddisk.c
155
src/harddisk.c
|
|
@ -1,155 +0,0 @@
|
||||||
/*Due to the lack of a real hard disc BIOS (other than the WD ST-506 one in MESS),
|
|
||||||
I wrote this. It's better as it can handle bigger discs, but is (potentially)
|
|
||||||
less compatible.*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ibm.h"
|
|
||||||
|
|
||||||
extern int output;
|
|
||||||
void inithdc()
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
hdc[0].f=romfopen("hdc.img","rb+");
|
|
||||||
if (!hdc[0].f)
|
|
||||||
{
|
|
||||||
hdc[0].f=romfopen("hdc.img","wb");
|
|
||||||
putc(0,hdc[0].f);
|
|
||||||
fclose(hdc[0].f);
|
|
||||||
hdc[0].f=romfopen("hdc.img","rb+");
|
|
||||||
}
|
|
||||||
// hdc[0].spt=16;
|
|
||||||
// hdc[0].hpc=5;
|
|
||||||
// hdc[0].tracks=977;
|
|
||||||
|
|
||||||
hdc[1].f=romfopen("hdd.img","rb+");
|
|
||||||
if (!hdc[1].f)
|
|
||||||
{
|
|
||||||
hdc[1].f=romfopen("hdd.img","wb");
|
|
||||||
putc(0,hdc[1].f);
|
|
||||||
fclose(hdc[1].f);
|
|
||||||
hdc[1].f=romfopen("hdd.img","rb+");
|
|
||||||
}
|
|
||||||
// hdc[1].spt=32;
|
|
||||||
// hdc[1].hpc=16;
|
|
||||||
// hdc[1].tracks=447;
|
|
||||||
}
|
|
||||||
|
|
||||||
void int13hdc()
|
|
||||||
{
|
|
||||||
int drv=DL&1;
|
|
||||||
int track,head,sector;
|
|
||||||
uint32_t addr;
|
|
||||||
int c,d;
|
|
||||||
uint8_t buf[512];
|
|
||||||
fullspeed();
|
|
||||||
// ram[0x475]=2;
|
|
||||||
// printf("INT 13 HDC %04X %04X %04X %04X %04X:%04X\n",AX,BX,CX,DX,CS,pc);
|
|
||||||
switch (AH)
|
|
||||||
{
|
|
||||||
case 0: /*Reset disk system*/
|
|
||||||
AH=0;
|
|
||||||
flags&=~C_FLAG;
|
|
||||||
break;
|
|
||||||
case 2: /*Read sectors into memory*/
|
|
||||||
// printf("Read %i sectors to %04X:%04X\n",AL,es>>4,BX);
|
|
||||||
// if (es==0xf940) output=3;
|
|
||||||
track=CH|((CL&0xC0)<<2);
|
|
||||||
sector=(CL&63)-1;
|
|
||||||
head=DH;
|
|
||||||
addr=((((track*hdc[drv].hpc)+head)*hdc[drv].spt)+sector)*512;
|
|
||||||
// printf("Read track %i head %i sector %i addr %08X HPC %i SPT %i %08X\n",track,head,sector,addr,hdc[drv].hpc,hdc[drv].spt,old8);
|
|
||||||
fseek(hdc[drv].f,addr,SEEK_SET);
|
|
||||||
for (c=0;c<AL;c++)
|
|
||||||
{
|
|
||||||
fread(buf,512,1,hdc[drv].f);
|
|
||||||
for (d=0;d<512;d++)
|
|
||||||
{
|
|
||||||
writemembl(es+BX+(c*512)+d,buf[d]/*getc(hdc[drv].f)*/);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AH=0;
|
|
||||||
flags&=~C_FLAG;
|
|
||||||
readflash=1;
|
|
||||||
break;
|
|
||||||
case 3: /*Write sectors*/
|
|
||||||
track=CH|((CL&0xC0)<<2);
|
|
||||||
sector=(CL&63)-1;
|
|
||||||
head=DH;
|
|
||||||
addr=((((track*hdc[drv].hpc)+head)*hdc[drv].spt)+sector)*512;
|
|
||||||
fseek(hdc[drv].f,addr,SEEK_SET);
|
|
||||||
for (c=0;c<AL;c++)
|
|
||||||
{
|
|
||||||
for (d=0;d<512;d++)
|
|
||||||
{
|
|
||||||
putc(readmembl(es+BX+(c*512)+d),hdc[drv].f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AH=0;
|
|
||||||
flags&=~C_FLAG;
|
|
||||||
readflash=1;
|
|
||||||
break;
|
|
||||||
case 4: /*Verify sectors*/
|
|
||||||
AH=0; /*We don't actually do anything here*/
|
|
||||||
flags&=~C_FLAG;
|
|
||||||
break;
|
|
||||||
case 8: /*Get drive parameters*/
|
|
||||||
AH=0;
|
|
||||||
CH=hdc[drv].tracks&255;
|
|
||||||
CL=hdc[drv].spt;
|
|
||||||
CL|=((hdc[drv].tracks>>2)&0xC0);
|
|
||||||
// printf("Drive params - %02X %02X %i %i\n",CL,CH,hdc[drv].tracks,hdc[drv].spt);
|
|
||||||
DH=hdc[drv].hpc-1;
|
|
||||||
DL=2;
|
|
||||||
flags&=~C_FLAG;
|
|
||||||
break;
|
|
||||||
case 0x10: /*Check drive ready*/
|
|
||||||
AH=0;
|
|
||||||
flags&=~C_FLAG;
|
|
||||||
break;
|
|
||||||
case 0x18: /*Set media type*/
|
|
||||||
AH=1;
|
|
||||||
flags|=C_FLAG;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
AH=1;
|
|
||||||
flags|=C_FLAG;
|
|
||||||
// printf("Bad HDC int 13 %04X\n",AX);
|
|
||||||
// dumpregs();
|
|
||||||
// exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char tempbuf[512*63];
|
|
||||||
void resizedrive(int drv)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
int c,d,e;
|
|
||||||
// char temp[512*63];
|
|
||||||
if (!drv)
|
|
||||||
{
|
|
||||||
fflush(hdc[0].f);
|
|
||||||
if (hdc[0].f) fclose(hdc[0].f);
|
|
||||||
f=romfopen("hdc.img","wb");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fflush(hdc[1].f);
|
|
||||||
if (hdc[1].f) fclose(hdc[1].f);
|
|
||||||
f=romfopen("hdd.img","wb");
|
|
||||||
}
|
|
||||||
memset(tempbuf,0,512*63);
|
|
||||||
for (c=0;c<hdc[drv].tracks;c++)
|
|
||||||
{
|
|
||||||
for (d=0;d<hdc[drv].hpc;d++)
|
|
||||||
{
|
|
||||||
// for (e=0;e<hdc[drv].spt;e++)
|
|
||||||
// {
|
|
||||||
fwrite(tempbuf,512*hdc[drv].spt,1,f);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
if (!drv) hdc[0].f=romfopen("hdc.img","rb+");
|
|
||||||
else hdc[1].f=romfopen("hdd.img","rb+");
|
|
||||||
}
|
|
||||||
1
src/pc.c
1
src/pc.c
|
|
@ -220,7 +220,6 @@ void initpc()
|
||||||
//loadfont();
|
//loadfont();
|
||||||
loadnvr();
|
loadnvr();
|
||||||
sound_init();
|
sound_init();
|
||||||
inithdc();
|
|
||||||
resetide();
|
resetide();
|
||||||
ioctl_open(cdrom_drive);
|
ioctl_open(cdrom_drive);
|
||||||
model_init();
|
model_init();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue