add directory study
This commit is contained in:
312
study/hardware/Floppy/floppy/FDDIO.CPP
Normal file
312
study/hardware/Floppy/floppy/FDDIO.CPP
Normal file
@@ -0,0 +1,312 @@
|
||||
#ifdef __cplusplus
|
||||
#define __CPPARGS ...
|
||||
#else
|
||||
#define __CPPARGS
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <conio.h>
|
||||
#include <dos.h>
|
||||
|
||||
#define CYL 0
|
||||
|
||||
typedef struct _DPT_
|
||||
{
|
||||
unsigned char srt_hut;
|
||||
unsigned char dma_hlt;
|
||||
unsigned char motor_w;
|
||||
unsigned char sec_size;
|
||||
unsigned char eot;
|
||||
unsigned char gap_rw;
|
||||
unsigned char dtl;
|
||||
unsigned char gap_f;
|
||||
unsigned char fill_char;
|
||||
unsigned char hst;
|
||||
unsigned char mot_start;
|
||||
} DPT;
|
||||
|
||||
DPT far *get_dpt(void);
|
||||
void fdc_out(unsigned char byte);
|
||||
int fdc_inp(void);
|
||||
void int_wait(void);
|
||||
void dma_init(void far *);
|
||||
void tdelay(int cnt);
|
||||
void interrupt IRQ6 (__CPPARGS);
|
||||
void interrupt (*oldIRQ6) (__CPPARGS);
|
||||
|
||||
char buffer[512];
|
||||
|
||||
static int IRQ=0;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
unsigned i;
|
||||
long l;
|
||||
char status[7], main_status;
|
||||
DPT _far *fdpt;
|
||||
FILE *sect;
|
||||
|
||||
printf("\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB> <20><><EFBFBD><EFBFBD>"
|
||||
"\n (C)<29><EFBFBD><E0AEAB> <20>., 1995\n");
|
||||
|
||||
oldIRQ6 = _dos_getvect (8+6);
|
||||
_dos_setvect (8+6, IRQ6);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> 䠩<>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㤥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0>
|
||||
// ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ᠬ<><E1A0AC><EFBFBD> <20><>ࢮ<EFBFBD><E0A2AE> ᥪ<><E1A5AA><EFBFBD><EFBFBD> <20><>᪥<EFBFBD><E1AAA5>
|
||||
sect = fopen("!sector.dat","wb+");
|
||||
|
||||
// <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><> ⠡<><E2A0A1><EFBFBD><EFBFBD>
|
||||
// <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
fdpt = get_dpt();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>砥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1AAAE><EFBFBD><EFBFBD> <20>:
|
||||
// <20><>। <20>⨬ ࠧ<><E0A0A7>蠥<EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>
|
||||
_enable();
|
||||
outp(0x3F2, 0x1C);
|
||||
|
||||
// <20>믮<EFBFBD><EBAFAE>塞 <20><><EFBFBD><EFBFBD>প<EFBFBD> <20><><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD>
|
||||
tdelay(18);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>祭.\t\t");
|
||||
printf("<EFBFBD>᭮<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD>: %02.2X\n",inp(0x3F4));
|
||||
|
||||
// <20><>। <20>⥭<EFBFBD><E2A5AD><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>室<EFBFBD><E5AEA4><EFBFBD> <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>㦭<EFBFBD><E3A6AD> <20><><EFBFBD><E0AEA6>, <20> <20><>襬 <20><><EFBFBD>砥 <20><><EFBFBD>
|
||||
// <20><><EFBFBD><E0AEA6> <20> <20><><EFBFBD><EFBFBD> CYL
|
||||
|
||||
// <20>뤠<EFBFBD><EBA4A0> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD>"
|
||||
fdc_out(0xf);
|
||||
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD>" <20>ॡ<EFBFBD><E0A5A1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC>:
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0AEA6>.
|
||||
// <20><> ࠡ<>⠥<EFBFBD> <20> <20>㫥<EFBFBD><E3ABA5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20>:,
|
||||
// <20><><EFBFBD>⮬<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD> ࠢ<><E0A0A2> 0, <20><><EFBFBD>ன - CYL
|
||||
fdc_out(0);
|
||||
fdc_out(CYL);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
printf("\n<<<<3C><><EFBFBD><EFBFBD><EFBFBD>>>> \t\t");
|
||||
printf("<EFBFBD>᭮<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD>: %02.2X\n",inp(0x3F4));
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>襭<EFBFBD><E8A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>樨
|
||||
int_wait();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>প<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>樮<EFBFBD><E6A8AE><EFBFBD><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tdelay(1);
|
||||
|
||||
// <20><><EFBFBD> <20><EFBFBD>ન १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// "<22><><EFBFBD><EFBFBD><EFBFBD>" <20>뤠<EFBFBD><EBA4A0> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// "<22>⥭<EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>"
|
||||
|
||||
// <20>뢮<EFBFBD><EBA2AE><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD>
|
||||
// ST0 <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0AEA6> <20><> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// "<22><><EFBFBD><EFBFBD><EFBFBD>" PCN
|
||||
fdc_out(0x8);
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>:\t");
|
||||
printf(" ST0: %02.2X, \t", fdc_inp());
|
||||
printf("PCN: %02.2X\n", fdc_inp());
|
||||
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>㡮<EFBFBD><E3A1AE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⨪<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20>뤠<EFBFBD><EBA4A0> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// "<22>⥭<EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD>", <20>뢮<EFBFBD><EBA2AE><EFBFBD>
|
||||
// ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> ST3
|
||||
fdc_out(4);
|
||||
fdc_out(0);
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD>:\t ST3: %02.2X\n",fdc_inp());
|
||||
|
||||
// <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1AAAE><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 500 <20><><EFBFBD><EFBFBD><EFBFBD>/<2F>
|
||||
outp(0x3F7, 0);
|
||||
|
||||
// <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>אַ<EFBFBD><EFACAE>
|
||||
// <20><><EFBFBD><EFBFBD>㯠 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dma_init((void far *)buffer);
|
||||
|
||||
// <20>뤠<EFBFBD><EBA4A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22>⥭<EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||
fdc_out(0x66);
|
||||
fdc_out(0x0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
||||
|
||||
fdc_out(CYL); // 樫<><E6A8AB><EFBFBD><EFBFBD> CYL
|
||||
fdc_out(0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
||||
fdc_out(1); // <20><><EFBFBD><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> - 1
|
||||
|
||||
// <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><>孨<EFBFBD><E5ADA8>᪨<EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><E1AAAE><EFBFBD><EFBFBD>, <20><>६ <20><> <20><> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>.
|
||||
// <20><><EFBFBD> ⠪<><E2A0AA> <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD>:
|
||||
// - ࠧ<><E0A0A7><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD>;
|
||||
// - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><E0AEA6>;
|
||||
// - ࠧ<><E0A0A7><EFBFBD> <20><EFBFBD><E0AEAC><EFBFBD>⪠;
|
||||
// - <20><> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD><EFBFBD> <20><><EFBFBD>⮢
|
||||
fdc_out(fdpt->sec_size);
|
||||
fdc_out(fdpt->eot);
|
||||
fdc_out(fdpt->gap_rw);
|
||||
fdc_out(fdpt->dtl);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>襭<EFBFBD><E8A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>樨
|
||||
int_wait();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> <20> <20>뢮<EFBFBD><EBA2AE><EFBFBD> <20><> <20><>࠭ <20><><EFBFBD><EFBFBD><EFBFBD> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>樨 "<22>⥭<EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||
printf("\n<<<<3C>⥭<EFBFBD><E2A5AD> ᥪ<><E1A5AA><EFBFBD><EFBFBD>>>> \n");
|
||||
printf(" <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> (ST0,ST1,ST2,C,H,R,N):\n");
|
||||
|
||||
for(i=0; i<7; i++) printf("%02.2X\t", (char) fdc_inp());
|
||||
printf("\n");
|
||||
|
||||
// <20>뢮<EFBFBD><EBA2AE><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> <20> 䠩<>
|
||||
for(i=0; i<512; i++) fputc(buffer[i],sect);
|
||||
fclose(sect);
|
||||
|
||||
// <20>몫<EFBFBD>砥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
outp(0x3F2, 0xC);
|
||||
|
||||
_dos_setvect (8+6, oldIRQ6);
|
||||
}
|
||||
|
||||
// <20>뢮<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD> <20><><EFBFBD><E1AAAE><EFBFBD><EFBFBD>
|
||||
void fdc_out(unsigned char parm)
|
||||
{
|
||||
asm mov dx,3F4h // <20><><EFBFBD><EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD>
|
||||
loop_fdc_out:
|
||||
|
||||
asm in al,dx
|
||||
asm test al,80h // <20><EFBFBD><E0AEA2>塞 <20><>⮢<EFBFBD><E2AEA2><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm jz loop_fdc_out // <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
|
||||
asm inc dx // <20>뢮<EFBFBD><EBA2AE><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm mov al, parm // <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
asm out dx, al
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><E1AAAE><EFBFBD><EFBFBD>
|
||||
int fdc_inp(void)
|
||||
{
|
||||
asm mov dx,3F4h // <20><><EFBFBD><EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD>
|
||||
loop_fdc_inp:
|
||||
asm in al,dx
|
||||
asm test al,80h // <20><EFBFBD><E0AEA2>塞 <20><>⮢<EFBFBD><E2AEA2><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm jz loop_fdc_inp // <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
|
||||
asm inc dx // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0>
|
||||
asm in al, dx // <20> ॣ<><E0A5A3><EFBFBD><EFBFBD> AX
|
||||
return _AL;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
void int_wait (void) {
|
||||
_enable();
|
||||
while (IRQ==0) {};
|
||||
IRQ = 0;
|
||||
}
|
||||
|
||||
void interrupt IRQ6 (__CPPARGS) {
|
||||
IRQ = 1;
|
||||
outportb (0x20, 0x20);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>אַ<EFBFBD><EFACAE> <20><><EFBFBD><EFBFBD>㯠 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void dma_init(void far *buf)
|
||||
{
|
||||
unsigned long f_adr;
|
||||
unsigned sg, of;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 24-ࠧ<>來<EFBFBD><EFA4AD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
f_adr = ((unsigned long)FP_SEG(buf) << 4)
|
||||
+ (unsigned long)FP_OFF(buf);
|
||||
|
||||
// <20><><EFBFBD>饯<EFBFBD>塞 <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
// <20> ᬥ饭<E1ACA5><E9A5AD>
|
||||
sg = (f_adr >> 16) & 0xff;
|
||||
of = f_adr & 0xffff;
|
||||
|
||||
// <20><> <20>६<EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC><EFBFBD><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><>אַ<EFBFBD><EFACAE>
|
||||
// <20><><EFBFBD><EFBFBD>㯠 <20><><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>
|
||||
_disable();
|
||||
asm mov al,46h // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⥭<EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
asm out 12,al // <20><><EFBFBD><EFBFBD><EFBFBD> <20>ਣ<EFBFBD><E0A8A3><EFBFBD><EFBFBD>-㪠<><E3AAA0>⥫<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20> 16-ࠧ<>來묨 <20><><EFBFBD>⠬<EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>騩 <20><><EFBFBD><EFBFBD>, <20>뢮<EFBFBD><EBA2AE><EFBFBD><EFBFBD><EFBFBD> <20> 16-ࠧ<>來<EFBFBD><EFA4AD>
|
||||
// <20><><EFBFBD><EFBFBD> <20>㤥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD>訩
|
||||
|
||||
asm out 11,al // <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD> ०<><E0A5A6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
|
||||
asm mov ax,of // <20><><EFBFBD>饭<EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>訩 <20><><EFBFBD><EFBFBD>
|
||||
asm out 4,al
|
||||
asm mov al,ah // <20><><EFBFBD>饭<EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>訩 <20><><EFBFBD><EFBFBD>
|
||||
asm out 4,al
|
||||
|
||||
asm mov ax,sg // <20><><EFBFBD><EFBFBD><EFBFBD> <20><>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
asm out 81h,al
|
||||
|
||||
asm mov ax,511 // <20><><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm out 5,al
|
||||
asm mov al,ah
|
||||
asm out 5,al
|
||||
|
||||
asm mov al,2 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
asm out 10,al
|
||||
|
||||
// <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD>,
|
||||
// ࠧ<><E0A0A7>蠥<EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>.
|
||||
_enable();
|
||||
}
|
||||
|
||||
/**
|
||||
* get_dpt
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><E1ABA8> <20><><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
*
|
||||
* <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><> ⠡<><E2A0A1><EFBFBD><EFBFBD>
|
||||
* <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
*
|
||||
**/
|
||||
|
||||
DPT far *get_dpt(void)
|
||||
{
|
||||
void far * far *ptr;
|
||||
|
||||
ptr = (void far * far *)MK_FP(0x0, 0x78);
|
||||
return(DPT far*)(*ptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* tdelay
|
||||
*
|
||||
* <20><>ନ<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>প<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ⠩<><E2A0A9><EFBFBD><EFBFBD>.
|
||||
*
|
||||
* <20> <20><><EFBFBD><EFBFBD><EFBFBD>⢥ <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20>㭪樨 <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD> <20><><EFBFBD><EFBFBD>প<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢥ <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>,
|
||||
* <20><><EFBFBD><EFBFBD>㯠<EFBFBD><E3AFA0><EFBFBD><EFBFBD> <20><> ⠩<><E2A0A9><EFBFBD><EFBFBD> (⠩<><E2A0A9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20> <20><><EFBFBD><EFBFBD> ᥪ㭤<E1A5AA> <20>ਬ<EFBFBD>୮ 18 <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>)
|
||||
*
|
||||
**/
|
||||
|
||||
void tdelay(int cnt)
|
||||
{
|
||||
asm push bx
|
||||
asm push dx
|
||||
asm push si
|
||||
|
||||
asm mov si, cnt
|
||||
asm mov ah, 0
|
||||
asm int 1ah
|
||||
asm mov bx, dx
|
||||
asm add bx, si
|
||||
|
||||
delay_loop:
|
||||
asm int 1ah
|
||||
asm cmp dx, bx
|
||||
asm jne delay_loop
|
||||
|
||||
asm pop si
|
||||
asm pop dx
|
||||
asm pop bx
|
||||
}
|
||||
Reference in New Issue
Block a user