home *** CD-ROM | disk | FTP | other *** search
/ Go64! / Go64_1999-06_1999_CSW_Side_A.d64 / 1581cp50.zip / SRC / FRMHEADR.C < prev    next >
C/C++ Source or Header  |  1999-05-13  |  6KB  |  173 lines

  1. /*
  2.  
  3.  * cOPYRIGHT (c) 1998, 1999 wOLFGANG mOSER
  4.  
  5.  *
  6.  
  7.  * tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  8.  
  9.  * IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
  10.  
  11.  * THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2, OR (AT YOUR OPTION)
  12.  
  13.  * ANY LATER VERSION.
  14.  
  15.  *
  16.  
  17.  * tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
  18.  
  19.  * BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
  20.  
  21.  * merchantability OR fitness for a particular purpose.  sEE THE
  22.  
  23.  * gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
  24.  
  25.  *
  26.  
  27.  * yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
  28.  
  29.  * ALONG WITH THIS PROGRAM (SEE THE FILE copying); IF NOT, WRITE TO THE
  30.  
  31.  * fREE sOFTWARE fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
  32.  
  33.  */
  34.  
  35.  
  36.  
  37. /*
  38.  
  39.  * cOMMODORE cbm 1581 FLOPPY DISK COPY UTIL FOR pc'S, frmheadr.c
  40.  
  41.  *
  42.  
  43.  * wOLFGANG mOSER <WOMO@MINDLESS.COM>
  44.  
  45.  *   HTTP://WWW.GM.FH-KOELN.DE/{$7e}WOMO (UP TO dEZEMBER 1999)
  46.  
  47.  *
  48.  
  49.  *
  50.  
  51.  * bASIC INFORMATIONS FROM dAN fANDRICH <DAN@FCH.WIMSEY.BC.CA>.
  52.  
  53.  *   hIS README OF THE CBMFS-0.3 DRIVER FOR lINUX EXPLAINED ME, WHAT THE
  54.  
  55.  *   DIFFERENCE BETWEEN A dos FORMATTED 800 KB DISK AND A cbm 1581 DISK IS.
  56.  
  57.  *   (CHECK: HTTP://VANBC.WIMSEY.COM/{$7e}DANF/SOFTWARE/)
  58.  
  59.  *
  60.  
  61.  *
  62.  
  63.  * bASIC IMPLEMENTATIONS BY cIRIACO gARC{CBM-K}A DE cELIS <CIRI@GUI.UVA.ES>
  64.  
  65.  *   hIS UTIL 765dEBUG, vERSION 5.0 IS GREAT FOR LEARNING DMA BASED
  66.  
  67.  *   DIRECT FLOPPY DISK CONTROLLER PROGRAMMING.
  68.  
  69.  *   (CHECK: FTP://FTP.GUI.UVA.ES/PUB/PC/2M/765D50SR.ZIP)
  70.  
  71.  *
  72.  
  73.  * cHECK OUT FOR HIS FLOPPY DISK UTILS 2m AND 2mgui, THE LAST WORDS
  74.  
  75.  * IN IMPROVING FLOPPY DISK STORAGE CAPACITY.
  76.  
  77.  *   HTTP://WWW.GUI.UVA.ES/2M, FTP://FTP.GUI.UVA.ES/PUB/PC/2M
  78.  
  79.  *
  80.  
  81.  *
  82.  
  83.  * fOR ADDITIONAL INFORMATIONS TO fdc PROGRAMMING CHECK:
  84.  
  85.  *     HTTP://DEVELOPER.INTEL.COM/DESIGN/PERIPHRL/DATASHTS/290468.HTM
  86.  
  87.  *   AND GET THE INTEL 82078 chmos sINGLE-cHIP fLOPPY dISK cONTROLLER
  88.  
  89.  *   pdf DOCUMENT:
  90.  
  91.  *     HTTP://WWW.INTEL.NL/DESIGN/PERIPHRL/DATASHTS/29047403.PDF
  92.  
  93.  *   nATIONAL sEMICONDUCTOR HAS ALSO SOME PAGES ABOUT THEIR pc
  94.  
  95.  *   COMPATIBLE CONTROLLERS:
  96.  
  97.  *     HTTP://WWW.NATIONAL.COM/PF/dp/dp8473.HTML
  98.  
  99.  *     HTTP://WWW.NATIONAL.COM/PF/dp/dp8477b.HTML
  100.  
  101.  *
  102.  
  103.  * aNOTHER GOOD SOURCE FOR FLOPPY DISK CONTROLLER PROGRAMMING INFORMATION
  104.  
  105.  * ARE THE LINUX KERNAL SOURCES, YOU COULD HAVE A LOOK INTO:
  106.  
  107.  *     HTTP://WWW.CS.UTEXAS.EDU/USERS/PETERSON/LINUX/INCLUDE/LINUX/FDREG.H
  108.  
  109.  *     HTTP://WWW.CS.UTEXAS.EDU/USERS/PETERSON/LINUX/DRIVERS/BLOCK/FLOPPY.C
  110.  
  111.  */
  112.  
  113.  
  114.  
  115. #INCLUDE "FRMHEADR.H"
  116.  
  117.  
  118.  
  119. CONST UNSIGNED CHAR d81_bam[]={$7b}
  120.  
  121.      2,  4,  1, 40,  3, 68,  0, 49, 53, 56, 49, 32, 67, 79, 80, 89,
  122.  
  123.     32, 70, 79, 82, 77, 65, 84,160,160, 48, 48,160, 51, 68,160,160,
  124.  
  125.      1,225,  0, 40,  2, 68,187, 48, 48,192,  1,  7,  0,  1,232,255,
  126.  
  127.     36,240,  1,  2,255,  0,255, 68,187, 48, 48,192,  1,  7,  0,  1,
  128.  
  129.    232,255, 40,  1,  3,255,  0,255,  4, 16,252,  0 {$7d};
  130.  
  131.  
  132.  
  133. CONST UNSIGNED CHAR d2m_bam[]={$7b}
  134.  
  135.      2,  3,  2,  2,254,  0,  1, 34, 72,  0, 49, 53, 56, 49, 32, 67,
  136.  
  137.     79, 80, 89, 32, 70, 79, 82, 77, 65, 84,160,160, 48, 48,160, 49,
  138.  
  139.     72,160,160,  2,  1,  0,  1,  1,  2,222,  0, 72,183, 48, 48,192,
  140.  
  141.      0, 25,  2, 25,  0, 31,  3, 31,217,255,  0,255,  3,  5,252,  0
  142.  
  143.     {$7d};
  144.  
  145.  
  146.  
  147. CONST UNSIGNED CHAR d2m_sys[]={$7b}
  148.  
  149.      2,  5,  4,  5,  4,255,  0,  4, 53,255,  0,  0,  4, 52,255,  0,
  150.  
  151.     12,  4, 52,255,  0,128,  4, 52,255,  0,  0,  1,  1,  4, 10,  0,
  152.  
  153.     67, 77, 68, 32, 70, 68, 32, 83, 69, 82, 73, 69, 83,  4,  1, 32,
  154.  
  155.      5,  1,254,  0,  1,  1,255,  0,  0, 83, 89, 83, 84, 69, 77,  4,
  156.  
  157.      8,160,  4, 11,  0,  1,  0,  0, 80, 65, 82, 84, 73, 84, 73, 79,
  158.  
  159.     78, 32, 49,  4,  3,160,  4,  7,  0, 12,128,  4,190,  0,  1,  2,
  160.  
  161.      4,252,  0,  1,  3,  4,253,  0,255,  5, 28,252,  0 {$7d};
  162.  
  163.  
  164.  
  165. VOID DErle(CONST UNSIGNED CHAR *IN, INT SIZE, UNSIGNED CHAR HUGE *OUT){$7b}
  166.  
  167. INT I, JUMP[5];
  168.  
  169.    UNSIGNED CHAR SIGNS[5], MAXs, C;
  170.  
  171.    UNSIGNED LONG INT LEN;
  172.  
  173.    ENUM JMPcONSTS{$7b}
  174.  
  175.    wRONG=-1,
  176.  
  177.       sUBST=5,
  178.  
  179.       pOW1=1,
  180.  
  181.       pOW2=2,
  182.  
  183.       pOW3=3,
  184.  
  185.       pOW4=4
  186.  
  187.    {$7d};
  188.  
  189.  
  190.  
  191. C=*IN++;
  192.  
  193. SIZE--;
  194.  
  195. FOR(I=4;I>=0;--I) JUMP[I]=wRONG;
  196.  
  197.  
  198.  
  199.    IF(C){$7b}
  200.  
  201.    MAXs=(C&0X07)+((C&0X10)?1:0);
  202.  
  203.       FOR(I=0;I<MAXs;++I) SIGNS[I]=*IN++, SIZE--;
  204.  
  205. FOR(;I<5;I++) SIGNS[I]=*SIGNS;
  206.  
  207.  
  208.  
  209. IF(C&0X10) JUMP[MAXs-1]=sUBST;
  210.  
  211.       FOR(I=MAXs-((C&0X10)?2:1);I>=0;--I) JUMP[I]=MAXs-((C&0X10)?1:0)-I;
  212.  
  213.       {$7d}
  214.  
  215.  
  216.  
  217.    FOR(;SIZE>0;SIZE--){$7b}
  218.  
  219.    C=*IN++;
  220.  
  221.    // IF C IS IN SIGNS
  222.  
  223.    FOR(I=MAXs-1;I>=0;--I) IF(SIGNS[I]==C) BREAK;
  224.  
  225.       IF(I>=0){$7b}// C IS IN SIGNS
  226.  
  227.       SWITCH(JUMP[I]){$7b}
  228.  
  229. DEFAULT:
  230.  
  231. CASE wRONG:
  232.  
  233.                RETURN;
  234.  
  235. CASE sUBST:
  236.  
  237.             *OUT++=*IN++, SIZE--;
  238.  
  239.                BREAK;
  240.  
  241. CASE pOW4:
  242.  
  243. CASE pOW3:
  244.  
  245. CASE pOW2:
  246.  
  247. CASE pOW1:
  248.  
  249. FOR(LEN=0UL,I=JUMP[I];I>0;--I) LEN<<=8, LEN{$7c}=*IN++, SIZE--;
  250.  
  251. C=*IN++, SIZE--;
  252.  
  253. FOR(LEN+=2;LEN;--LEN) *OUT++=C;
  254.  
  255.          {$7d}
  256.  
  257.       {$7d}
  258.  
  259.       ELSE *OUT++=C;
  260.  
  261.    {$7d}
  262.  
  263. {$7d}
  264.  
  265.  
  266.  
  267. // CREATE AN EMPTY cmd fd2000 STYLE bam
  268.  
  269. //
  270.  
  271. // INPUT:  BUFFER:A POINTER TO THE BUFFER LOCATION,
  272.  
  273. //WHERE THE bam SHOULD BE CREATED (0X2400 BYTES)
  274.  
  275. // OUTPUT: NONE
  276.  
  277. //
  278.  
  279. VOID fd2000CREATEbam(UNSIGNED CHAR HUGE *BUFFER){$7b}
  280.  
  281. DErle(d2m_bam,SIZEOF(d2m_bam), BUFFER);
  282.  
  283. {$7d}
  284.  
  285.  
  286.  
  287. // CREATE A cmd fd2000 STYLE SYSTEM PARTITION
  288.  
  289. //
  290.  
  291. // INPUT:  BUFFER:A POINTER TO THE BUFFER LOCATION,
  292.  
  293. //WHERE THE PARTITION SHOULD BE CREATED (0X0C00 BYTES)
  294.  
  295. // OUTPUT: NONE
  296.  
  297. //
  298.  
  299. VOID fd2000CREATEsys(UNSIGNED CHAR HUGE *BUFFER){$7b}
  300.  
  301. DErle(d2m_sys, SIZEOF(d2m_sys), BUFFER);
  302.  
  303. {$7d}
  304.  
  305.  
  306.  
  307. // CREATE AN EMPTY cbm 1581 STYLE bam
  308.  
  309. //
  310.  
  311. // INPUT:  BUFFER:A POINTER TO THE BUFFER LOCATION,
  312.  
  313. //WHERE THE bam SHOULD BE CREATED (0X400 BYTES)
  314.  
  315. // OUTPUT: NONE
  316.  
  317. //
  318.  
  319. VOID c1581CREATEbam(UNSIGNED CHAR HUGE *BUFFER){$7b}
  320.  
  321. INT I;
  322.  
  323.    UNSIGNED CHAR HUGE *P1;
  324.  
  325.  
  326.  
  327. DErle(d81_bam, SIZEOF(d81_bam), BUFFER);
  328.  
  329.  
  330.  
  331.    P1=BUFFER+0X110;
  332.  
  333.    FOR(I=0X26;I>=0;--I){$7b}
  334.  
  335. *P1=*(P1+0X100)=0X28;
  336.  
  337.       P1+=6;
  338.  
  339.       {$7d}
  340.  
  341. {$7d}
  342.  
  343.  
  344.  
  345.