PCem
changeset 7:41678958f2e8
Removed obsolete INT 13 hard disk emulation.
| author | TomW |
|---|---|
| date | Sun Jul 07 13:26:46 2013 +0100 |
| parents | 83ee72aa1453 |
| children | d53edbb92515 |
| files | src/Makefile.mingw src/harddisk.c src/pc.c |
| diffstat | 3 files changed, 1 insertions(+), 157 deletions(-) [+] |
line diff
1.1 --- a/src/Makefile.mingw Sun Jul 07 12:05:53 2013 +0100 1.2 +++ b/src/Makefile.mingw Sun Jul 07 13:26:46 2013 +0100 1.3 @@ -4,7 +4,7 @@ 1.4 WINDRES = windres.exe 1.5 CFLAGS = -O3 -march=i686 -fomit-frame-pointer 1.6 OBJ = 386.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o \ 1.7 - config.o cpu.o dac.o device.o dma.o ega.o fdc.o harddisk.o \ 1.8 + config.o cpu.o dac.o device.o dma.o ega.o fdc.o \ 1.9 headland.o i430vx.o ide.o io.o jim.o keyboard.o keyboard_amstrad.o keyboard_at.o \ 1.10 keyboard_olim24.o keyboard_xt.o lpt.o mcr.o mem.o model.o \ 1.11 mouse.o mouse_ps2.o mouse_serial.o neat.o nvr.o olivetti_m24.o \
2.1 --- a/src/harddisk.c Sun Jul 07 12:05:53 2013 +0100 2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 2.3 @@ -1,155 +0,0 @@ 2.4 -/*Due to the lack of a real hard disc BIOS (other than the WD ST-506 one in MESS), 2.5 - I wrote this. It's better as it can handle bigger discs, but is (potentially) 2.6 - less compatible.*/ 2.7 -#include <stdio.h> 2.8 -#include <string.h> 2.9 -#include "ibm.h" 2.10 - 2.11 -extern int output; 2.12 -void inithdc() 2.13 -{ 2.14 - return; 2.15 - hdc[0].f=romfopen("hdc.img","rb+"); 2.16 - if (!hdc[0].f) 2.17 - { 2.18 - hdc[0].f=romfopen("hdc.img","wb"); 2.19 - putc(0,hdc[0].f); 2.20 - fclose(hdc[0].f); 2.21 - hdc[0].f=romfopen("hdc.img","rb+"); 2.22 - } 2.23 -// hdc[0].spt=16; 2.24 -// hdc[0].hpc=5; 2.25 -// hdc[0].tracks=977; 2.26 - 2.27 - hdc[1].f=romfopen("hdd.img","rb+"); 2.28 - if (!hdc[1].f) 2.29 - { 2.30 - hdc[1].f=romfopen("hdd.img","wb"); 2.31 - putc(0,hdc[1].f); 2.32 - fclose(hdc[1].f); 2.33 - hdc[1].f=romfopen("hdd.img","rb+"); 2.34 - } 2.35 -// hdc[1].spt=32; 2.36 -// hdc[1].hpc=16; 2.37 -// hdc[1].tracks=447; 2.38 -} 2.39 - 2.40 -void int13hdc() 2.41 -{ 2.42 - int drv=DL&1; 2.43 - int track,head,sector; 2.44 - uint32_t addr; 2.45 - int c,d; 2.46 - uint8_t buf[512]; 2.47 - fullspeed(); 2.48 -// ram[0x475]=2; 2.49 -// printf("INT 13 HDC %04X %04X %04X %04X %04X:%04X\n",AX,BX,CX,DX,CS,pc); 2.50 - switch (AH) 2.51 - { 2.52 - case 0: /*Reset disk system*/ 2.53 - AH=0; 2.54 - flags&=~C_FLAG; 2.55 - break; 2.56 - case 2: /*Read sectors into memory*/ 2.57 -// printf("Read %i sectors to %04X:%04X\n",AL,es>>4,BX); 2.58 -// if (es==0xf940) output=3; 2.59 - track=CH|((CL&0xC0)<<2); 2.60 - sector=(CL&63)-1; 2.61 - head=DH; 2.62 - addr=((((track*hdc[drv].hpc)+head)*hdc[drv].spt)+sector)*512; 2.63 -// 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); 2.64 - fseek(hdc[drv].f,addr,SEEK_SET); 2.65 - for (c=0;c<AL;c++) 2.66 - { 2.67 - fread(buf,512,1,hdc[drv].f); 2.68 - for (d=0;d<512;d++) 2.69 - { 2.70 - writemembl(es+BX+(c*512)+d,buf[d]/*getc(hdc[drv].f)*/); 2.71 - } 2.72 - } 2.73 - AH=0; 2.74 - flags&=~C_FLAG; 2.75 - readflash=1; 2.76 - break; 2.77 - case 3: /*Write sectors*/ 2.78 - track=CH|((CL&0xC0)<<2); 2.79 - sector=(CL&63)-1; 2.80 - head=DH; 2.81 - addr=((((track*hdc[drv].hpc)+head)*hdc[drv].spt)+sector)*512; 2.82 - fseek(hdc[drv].f,addr,SEEK_SET); 2.83 - for (c=0;c<AL;c++) 2.84 - { 2.85 - for (d=0;d<512;d++) 2.86 - { 2.87 - putc(readmembl(es+BX+(c*512)+d),hdc[drv].f); 2.88 - } 2.89 - } 2.90 - AH=0; 2.91 - flags&=~C_FLAG; 2.92 - readflash=1; 2.93 - break; 2.94 - case 4: /*Verify sectors*/ 2.95 - AH=0; /*We don't actually do anything here*/ 2.96 - flags&=~C_FLAG; 2.97 - break; 2.98 - case 8: /*Get drive parameters*/ 2.99 - AH=0; 2.100 - CH=hdc[drv].tracks&255; 2.101 - CL=hdc[drv].spt; 2.102 - CL|=((hdc[drv].tracks>>2)&0xC0); 2.103 -// printf("Drive params - %02X %02X %i %i\n",CL,CH,hdc[drv].tracks,hdc[drv].spt); 2.104 - DH=hdc[drv].hpc-1; 2.105 - DL=2; 2.106 - flags&=~C_FLAG; 2.107 - break; 2.108 - case 0x10: /*Check drive ready*/ 2.109 - AH=0; 2.110 - flags&=~C_FLAG; 2.111 - break; 2.112 - case 0x18: /*Set media type*/ 2.113 - AH=1; 2.114 - flags|=C_FLAG; 2.115 - break; 2.116 - 2.117 - default: 2.118 - AH=1; 2.119 - flags|=C_FLAG; 2.120 -// printf("Bad HDC int 13 %04X\n",AX); 2.121 -// dumpregs(); 2.122 -// exit(-1); 2.123 - } 2.124 -} 2.125 - 2.126 -char tempbuf[512*63]; 2.127 -void resizedrive(int drv) 2.128 -{ 2.129 - FILE *f; 2.130 - int c,d,e; 2.131 -// char temp[512*63]; 2.132 - if (!drv) 2.133 - { 2.134 - fflush(hdc[0].f); 2.135 - if (hdc[0].f) fclose(hdc[0].f); 2.136 - f=romfopen("hdc.img","wb"); 2.137 - } 2.138 - else 2.139 - { 2.140 - fflush(hdc[1].f); 2.141 - if (hdc[1].f) fclose(hdc[1].f); 2.142 - f=romfopen("hdd.img","wb"); 2.143 - } 2.144 - memset(tempbuf,0,512*63); 2.145 - for (c=0;c<hdc[drv].tracks;c++) 2.146 - { 2.147 - for (d=0;d<hdc[drv].hpc;d++) 2.148 - { 2.149 -// for (e=0;e<hdc[drv].spt;e++) 2.150 -// { 2.151 - fwrite(tempbuf,512*hdc[drv].spt,1,f); 2.152 -// } 2.153 - } 2.154 - } 2.155 - fclose(f); 2.156 - if (!drv) hdc[0].f=romfopen("hdc.img","rb+"); 2.157 - else hdc[1].f=romfopen("hdd.img","rb+"); 2.158 -}
