[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Apple GCR 5x3 nibblizing question



Eric J. Rothfus wrote:
Anyone out there know the details of nibblizing
for the very early Apple 5x3 GCR?  There's
a description in "Beneath Apple Dos" (BAD) but it is
rather weak, and not very precise.

Googled around a bit and here's what I found:


http://alfter.us/aal.shtml

Look down until you find:

AAL.8105.BXY
This issue contains articles on a hi-res SCRN function for Applesoft, conquering paddle jitter, a shift-key modification, the 6502 programming model and a commented listing of DOS 3.2.1 from $B800 through $BCFF.

Get the file DOS321.B800BCFF.  It has the code of interest, and more.

To make it easy, here is just the code that does what you want:


 1000  *      .LIF
 1010  *---------------------------------
 1020  *      DOS 3.2.1 $B800 - $BCFF
 1030  *---------------------------------
 1040         .OR $B800
 1050         .TA $0800
 1060  *---------------------------------
 1070  BUF.PNTR   .EQ $3E,3F
 1080  CURRENT.TRACK       .EQ $0478
 1090  *---------------------------------
 1100  *      DISK CONTROLLER ADDRESSES
 1110  *---------------------------------
 1120  PHOFF  .EQ $C080    PHASE-OFF
 1130  PHON   .EQ $C081    PHASE-ON
 1140  MTROFF .EQ $C088    MOTOR OFF
 1150  MTRON  .EQ $C089    MOTOR ON
 1160  DRV0EN .EQ $C08A    DRIVE 0 ENABLE
 1170  DRV1EN .EQ $C08B    DRIVE 1 ENABLE
 1180  Q6L    .EQ $C08C    SET Q6 LOW
 1190  Q6H    .EQ $C08D    SET Q6 HIGH
 1200  Q7L    .EQ $C08E    SET Q7 LOW
 1210  Q7H    .EQ $C08F    SET Q7 HIGH
 1220  *
 1230  *      Q6    Q7     USE OF Q6 AND Q7 LINES
 1240  *     ----  ----    ----------------------
 1250  *     LOW   LOW     READ (DISK TO SHIFT REGISTER)
 1260  *     LOW   HIGH    WRITE (SHIFT REGISTER TO DISK)
 1270  *     HIGH  LOW     SENSE WRITE PROTECT
 1280  *     HIGH  HIGH    LOAD SHIFT REGISTER FROM DATA BUS
 1290         .PG
 1300  *---------------------------------
 1310  *      CONVERT 256 BYTES TO 410 5-BIT NYBBLES
 1320  *---------------------------------
 1330  PRE.NYBBLE
 1340         LDX #50      51 BYTES PER SECTION
 1350         LDY #0       INDEX INTO 256-BYTE BUFFER
 1360  *---BUFFER PART 1, SECTION 1-----
 1370  .1     LDA (BUF.PNTR),Y  GET BYTE FROM BUFFER
 1380         STA $26      SAVE HERE FOR LOWER 3 BITS
 1390         LSR          USE TOP 5 BITS
 1400         LSR
 1410         LSR
 1420         STA RWTS.BUFFER.1.1,X
 1430  *---BUFFER PART 1, SECTION 2-----
 1440         INY          NEXT REAL BYTE
 1450         LDA (BUF.PNTR),Y  GET BYTE FROM BUFFER
 1460         STA $27      SAVE HERE FOR LOWER 3 BITS
 1470         LSR          USE TOP 5 BITS
 1480         LSR
 1490         LSR
 1500         STA RWTS.BUFFER.1.2,X
 1510  *---BUFFER PART 1, SECTION 3-----
 1520         INY          NEXT REAL BYTE
 1530         LDA (BUF.PNTR),Y  GET BYTE FROM BUFFER
 1540         STA $2A      SAVE FOR LOWER 3 BITS
 1550         LSR
 1560         LSR          USE TOP 5 BITS
 1570         LSR
 1580         STA RWTS.BUFFER.1.3,X
 1590  *---BUFFER PART 1, SECTION 4-----
 1600         INY          NEXT REAL BYTE
 1610         LDA (BUF.PNTR),Y  GET BYTE FROM BUFFER
 1620         LSR          USE TOP 5 BITS
 1630         ROL $2A      BIT 0 INTO $2A
 1640         LSR
 1650         ROL $27      BIT 1 INTO $27
 1660         LSR
 1670         ROL $26      BIT 2 INTO $26
 1680         STA RWTS.BUFFER.1.4,X
 1690  *---BUFFER PART 1, SECTION 5-----
 1700         INY          NEXT REAL BYTE
 1710         LDA (BUF.PNTR),Y  GET BYTE FROM BUFFER
 1720         LSR          USE TOP 5 BITS
 1730         ROL $2A      BIT 0 INTO $2A
 1740         LSR
 1750         ROL $27      BIT 1 INTO $27
 1760         LSR          HOLD BIT 2 IN CARRY-BIT
 1770         STA RWTS.BUFFER.1.5,X
 1780  *---BUFFER PART 2, SECTION 0-----
 1790         LDA $26      APPEND BIT 2 TO $26
 1800         ROL
 1810         AND #$1F     5-BIT MASK
 1820         STA RWTS.BUFFER.2.1,X
 1830  *---BUFFER PART 2, SECTION 1-----
 1840         LDA $27
 1850         AND #$1F
 1860         STA RWTS.BUFFER.2.2,X
 1870  *---BUFFER PART 2, SECTION 2-----
 1880         LDA $2A
 1890         AND #$1F
 1900         STA RWTS.BUFFER.2.3,X
 1910  *---------------------------------
 1920         INY          NEXT REAL BYTE
 1930         DEX          NEXT BYTE IN EACH SECTION
 1940         BPL .1       LOOP UNTIL EACH SECTION FULL
 1950  *---------------------------------
 1960         LDA (BUF.PNTR),Y  GET LAST REAL BYTE
 1970         TAX
 1980         AND #7       USE LOWER 3 BITS
 1990         STA RWTS.BUFFER.2.4
 2000         TXA          NOW GET 5 UPPER BITS
 2010         LSR
 2020         LSR
 2030         LSR
 2040         STA RWTS.BUFFER.1.6
 2050         RTS