get one bit from bit stream */
| 3791 | |
| 3792 | /* get one bit from bit stream */ |
| 3793 | static uae_u32 getonebit(drive *drv, uae_u16 *mfmbuf, int mfmpos, int *inc) |
| 3794 | { |
| 3795 | uae_u16 *buf; |
| 3796 | |
| 3797 | if (inc) |
| 3798 | *inc = 1; |
| 3799 | |
| 3800 | #ifdef FLOPPYBRIDGE |
| 3801 | if (drv && drv->bridge) { |
| 3802 | drv->tracklen = drv->bridge->maxMFMBitPosition(); // this shouldnt happen |
| 3803 | return drv->bridge->getMFMBit(mfmpos) ? 1 : 0; |
| 3804 | } |
| 3805 | #endif |
| 3806 | |
| 3807 | if (inc && nextbit(drv) == 2) { |
| 3808 | // 2us -> 4us |
| 3809 | int b1 = getonebit(NULL, mfmbuf, mfmpos, NULL); |
| 3810 | int b2 = getonebit(NULL, mfmbuf, (mfmpos + 1) % drv->tracklen, NULL); |
| 3811 | if (!b1 && b2) { |
| 3812 | *inc = 3; |
| 3813 | return 1; |
| 3814 | } |
| 3815 | if (b1 && !b2) { |
| 3816 | *inc = 2; |
| 3817 | return 1; |
| 3818 | } |
| 3819 | if (b1 && b2) { |
| 3820 | *inc = 3; |
| 3821 | return 1; |
| 3822 | } |
| 3823 | *inc = 2; |
| 3824 | return 0; |
| 3825 | } |
| 3826 | buf = &mfmbuf[mfmpos >> 4]; |
| 3827 | return (buf[0] & (1 << (15 - (mfmpos & 15)))) ? 1 : 0; |
| 3828 | } |
| 3829 | |
| 3830 | void dumpdisk (const TCHAR *name) |
| 3831 | { |
no test coverage detected