home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Go64!
/
Go64_1999-06_1999_CSW_Side_A.d64
/
1581cp50.zip
/
SRC
/
FRMHEADR.C
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-13
|
6KB
|
173 lines
/*
* cOPYRIGHT (c) 1998, 1999 wOLFGANG mOSER
*
* tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
* IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
* THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2, OR (AT YOUR OPTION)
* ANY LATER VERSION.
*
* tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
* merchantability OR fitness for a particular purpose. sEE THE
* gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
*
* yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
* ALONG WITH THIS PROGRAM (SEE THE FILE copying); IF NOT, WRITE TO THE
* fREE sOFTWARE fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
*/
/*
* cOMMODORE cbm 1581 FLOPPY DISK COPY UTIL FOR pc'S, frmheadr.c
*
* wOLFGANG mOSER <WOMO@MINDLESS.COM>
* HTTP://WWW.GM.FH-KOELN.DE/{$7e}WOMO (UP TO dEZEMBER 1999)
*
*
* bASIC INFORMATIONS FROM dAN fANDRICH <DAN@FCH.WIMSEY.BC.CA>.
* hIS README OF THE CBMFS-0.3 DRIVER FOR lINUX EXPLAINED ME, WHAT THE
* DIFFERENCE BETWEEN A dos FORMATTED 800 KB DISK AND A cbm 1581 DISK IS.
* (CHECK: HTTP://VANBC.WIMSEY.COM/{$7e}DANF/SOFTWARE/)
*
*
* bASIC IMPLEMENTATIONS BY cIRIACO gARC{CBM-K}A DE cELIS <CIRI@GUI.UVA.ES>
* hIS UTIL 765dEBUG, vERSION 5.0 IS GREAT FOR LEARNING DMA BASED
* DIRECT FLOPPY DISK CONTROLLER PROGRAMMING.
* (CHECK: FTP://FTP.GUI.UVA.ES/PUB/PC/2M/765D50SR.ZIP)
*
* cHECK OUT FOR HIS FLOPPY DISK UTILS 2m AND 2mgui, THE LAST WORDS
* IN IMPROVING FLOPPY DISK STORAGE CAPACITY.
* HTTP://WWW.GUI.UVA.ES/2M, FTP://FTP.GUI.UVA.ES/PUB/PC/2M
*
*
* fOR ADDITIONAL INFORMATIONS TO fdc PROGRAMMING CHECK:
* HTTP://DEVELOPER.INTEL.COM/DESIGN/PERIPHRL/DATASHTS/290468.HTM
* AND GET THE INTEL 82078 chmos sINGLE-cHIP fLOPPY dISK cONTROLLER
* pdf DOCUMENT:
* HTTP://WWW.INTEL.NL/DESIGN/PERIPHRL/DATASHTS/29047403.PDF
* nATIONAL sEMICONDUCTOR HAS ALSO SOME PAGES ABOUT THEIR pc
* COMPATIBLE CONTROLLERS:
* HTTP://WWW.NATIONAL.COM/PF/dp/dp8473.HTML
* HTTP://WWW.NATIONAL.COM/PF/dp/dp8477b.HTML
*
* aNOTHER GOOD SOURCE FOR FLOPPY DISK CONTROLLER PROGRAMMING INFORMATION
* ARE THE LINUX KERNAL SOURCES, YOU COULD HAVE A LOOK INTO:
* HTTP://WWW.CS.UTEXAS.EDU/USERS/PETERSON/LINUX/INCLUDE/LINUX/FDREG.H
* HTTP://WWW.CS.UTEXAS.EDU/USERS/PETERSON/LINUX/DRIVERS/BLOCK/FLOPPY.C
*/
#INCLUDE "FRMHEADR.H"
CONST UNSIGNED CHAR d81_bam[]={$7b}
2, 4, 1, 40, 3, 68, 0, 49, 53, 56, 49, 32, 67, 79, 80, 89,
32, 70, 79, 82, 77, 65, 84,160,160, 48, 48,160, 51, 68,160,160,
1,225, 0, 40, 2, 68,187, 48, 48,192, 1, 7, 0, 1,232,255,
36,240, 1, 2,255, 0,255, 68,187, 48, 48,192, 1, 7, 0, 1,
232,255, 40, 1, 3,255, 0,255, 4, 16,252, 0 {$7d};
CONST UNSIGNED CHAR d2m_bam[]={$7b}
2, 3, 2, 2,254, 0, 1, 34, 72, 0, 49, 53, 56, 49, 32, 67,
79, 80, 89, 32, 70, 79, 82, 77, 65, 84,160,160, 48, 48,160, 49,
72,160,160, 2, 1, 0, 1, 1, 2,222, 0, 72,183, 48, 48,192,
0, 25, 2, 25, 0, 31, 3, 31,217,255, 0,255, 3, 5,252, 0
{$7d};
CONST UNSIGNED CHAR d2m_sys[]={$7b}
2, 5, 4, 5, 4,255, 0, 4, 53,255, 0, 0, 4, 52,255, 0,
12, 4, 52,255, 0,128, 4, 52,255, 0, 0, 1, 1, 4, 10, 0,
67, 77, 68, 32, 70, 68, 32, 83, 69, 82, 73, 69, 83, 4, 1, 32,
5, 1,254, 0, 1, 1,255, 0, 0, 83, 89, 83, 84, 69, 77, 4,
8,160, 4, 11, 0, 1, 0, 0, 80, 65, 82, 84, 73, 84, 73, 79,
78, 32, 49, 4, 3,160, 4, 7, 0, 12,128, 4,190, 0, 1, 2,
4,252, 0, 1, 3, 4,253, 0,255, 5, 28,252, 0 {$7d};
VOID DErle(CONST UNSIGNED CHAR *IN, INT SIZE, UNSIGNED CHAR HUGE *OUT){$7b}
INT I, JUMP[5];
UNSIGNED CHAR SIGNS[5], MAXs, C;
UNSIGNED LONG INT LEN;
ENUM JMPcONSTS{$7b}
wRONG=-1,
sUBST=5,
pOW1=1,
pOW2=2,
pOW3=3,
pOW4=4
{$7d};
C=*IN++;
SIZE--;
FOR(I=4;I>=0;--I) JUMP[I]=wRONG;
IF(C){$7b}
MAXs=(C&0X07)+((C&0X10)?1:0);
FOR(I=0;I<MAXs;++I) SIGNS[I]=*IN++, SIZE--;
FOR(;I<5;I++) SIGNS[I]=*SIGNS;
IF(C&0X10) JUMP[MAXs-1]=sUBST;
FOR(I=MAXs-((C&0X10)?2:1);I>=0;--I) JUMP[I]=MAXs-((C&0X10)?1:0)-I;
{$7d}
FOR(;SIZE>0;SIZE--){$7b}
C=*IN++;
// IF C IS IN SIGNS
FOR(I=MAXs-1;I>=0;--I) IF(SIGNS[I]==C) BREAK;
IF(I>=0){$7b}// C IS IN SIGNS
SWITCH(JUMP[I]){$7b}
DEFAULT:
CASE wRONG:
RETURN;
CASE sUBST:
*OUT++=*IN++, SIZE--;
BREAK;
CASE pOW4:
CASE pOW3:
CASE pOW2:
CASE pOW1:
FOR(LEN=0UL,I=JUMP[I];I>0;--I) LEN<<=8, LEN{$7c}=*IN++, SIZE--;
C=*IN++, SIZE--;
FOR(LEN+=2;LEN;--LEN) *OUT++=C;
{$7d}
{$7d}
ELSE *OUT++=C;
{$7d}
{$7d}
// CREATE AN EMPTY cmd fd2000 STYLE bam
//
// INPUT: BUFFER:A POINTER TO THE BUFFER LOCATION,
//WHERE THE bam SHOULD BE CREATED (0X2400 BYTES)
// OUTPUT: NONE
//
VOID fd2000CREATEbam(UNSIGNED CHAR HUGE *BUFFER){$7b}
DErle(d2m_bam,SIZEOF(d2m_bam), BUFFER);
{$7d}
// CREATE A cmd fd2000 STYLE SYSTEM PARTITION
//
// INPUT: BUFFER:A POINTER TO THE BUFFER LOCATION,
//WHERE THE PARTITION SHOULD BE CREATED (0X0C00 BYTES)
// OUTPUT: NONE
//
VOID fd2000CREATEsys(UNSIGNED CHAR HUGE *BUFFER){$7b}
DErle(d2m_sys, SIZEOF(d2m_sys), BUFFER);
{$7d}
// CREATE AN EMPTY cbm 1581 STYLE bam
//
// INPUT: BUFFER:A POINTER TO THE BUFFER LOCATION,
//WHERE THE bam SHOULD BE CREATED (0X400 BYTES)
// OUTPUT: NONE
//
VOID c1581CREATEbam(UNSIGNED CHAR HUGE *BUFFER){$7b}
INT I;
UNSIGNED CHAR HUGE *P1;
DErle(d81_bam, SIZEOF(d81_bam), BUFFER);
P1=BUFFER+0X110;
FOR(I=0X26;I>=0;--I){$7b}
*P1=*(P1+0X100)=0X28;
P1+=6;
{$7d}
{$7d}