Hex Artifact Content
Not logged in

Artifact ad1f9336c3316aa19de15cf847a3b3c473bbcc1d:


0000: 2f 2f 20 44 72 69 76 65 72 20 66 6f 72 20 74 68  // Driver for th
0010: 65 20 43 46 20 43 61 72 64 20 6f 6e 20 74 68 65  e CF Card on the
0020: 20 62 72 65 61 64 62 6f 61 72 64 0a 0a 2f 2f 20   breadboard..// 
0030: 64 65 66 69 6e 65 73 20 66 6f 72 20 74 68 65 20  defines for the 
0040: 43 46 20 63 61 72 64 20 72 65 67 69 73 74 65 72  CF card register
0050: 73 0a 09 63 66 72 65 67 73 20 3d 20 30 78 66 65  s..cfregs = 0xfe
0060: 30 30 0a 09 63 66 64 61 74 61 20 3d 20 63 66 72  00..cfdata = cfr
0070: 65 67 73 20 2b 20 30 0a 09 63 66 65 72 72 20 20  egs + 0..cferr  
0080: 3d 20 63 66 72 65 67 73 20 2b 20 31 09 2f 2f 20  = cfregs + 1.// 
0090: 72 64 0a 09 63 66 66 65 61 74 20 3d 20 63 66 72  rd..cffeat = cfr
00a0: 65 67 73 20 2b 20 31 09 2f 2f 20 77 72 0a 09 63  egs + 1.// wr..c
00b0: 66 63 6e 74 20 20 3d 20 63 66 72 65 67 73 20 2b  fcnt  = cfregs +
00c0: 20 32 0a 09 63 66 6c 62 61 30 20 3d 20 63 66 72   2..cflba0 = cfr
00d0: 65 67 73 20 2b 20 33 0a 09 63 66 6c 62 61 31 20  egs + 3..cflba1 
00e0: 3d 20 63 66 72 65 67 73 20 2b 20 34 0a 09 63 66  = cfregs + 4..cf
00f0: 6c 62 61 32 20 3d 20 63 66 72 65 67 73 20 2b 20  lba2 = cfregs + 
0100: 35 0a 09 63 66 6c 62 61 33 20 3d 20 63 66 72 65  5..cflba3 = cfre
0110: 67 73 20 2b 20 36 0a 09 63 66 73 74 61 74 20 3d  gs + 6..cfstat =
0120: 20 63 66 72 65 67 73 20 2b 20 37 09 2f 2f 20 72   cfregs + 7.// r
0130: 64 0a 09 63 66 63 6d 64 20 20 3d 20 63 66 72 65  d..cfcmd  = cfre
0140: 67 73 20 2b 20 37 09 2f 2f 20 77 72 0a 0a 2f 2f  gs + 7.// wr..//
0150: 20 64 65 66 69 6e 65 73 20 66 6f 72 20 43 46 20   defines for CF 
0160: 63 61 72 64 20 63 6f 6d 6d 61 6e 64 73 20 69 6e  card commands in
0170: 20 75 70 70 65 72 20 62 79 74 65 0a 09 53 45 54   upper byte..SET
0180: 46 45 41 54 20 3d 20 30 78 65 66 30 30 09 2f 2f  FEAT = 0xef00.//
0190: 20 73 65 74 20 66 65 61 74 75 72 65 0a 09 52 44   set feature..RD
01a0: 53 45 43 54 20 20 3d 20 30 78 32 30 30 30 09 2f  SECT  = 0x2000./
01b0: 2f 20 72 65 61 64 20 73 65 63 74 6f 72 0a 09 57  / read sector..W
01c0: 52 53 45 43 54 20 20 3d 20 30 78 33 30 30 30 09  RSECT  = 0x3000.
01d0: 2f 2f 20 77 72 69 74 65 20 73 65 63 74 6f 72 0a  // write sector.
01e0: 09 49 44 45 4e 54 20 20 20 3d 20 30 78 65 63 30  .IDENT   = 0xec0
01f0: 30 09 2f 2f 20 69 64 65 6e 74 69 66 79 20 64 72  0.// identify dr
0200: 69 76 65 0a 09 42 59 54 45 4d 4f 44 20 3d 20 30  ive..BYTEMOD = 0
0210: 78 30 31 30 30 09 2f 2f 20 38 20 62 69 74 20 61  x0100.// 8 bit a
0220: 63 63 65 73 73 20 6d 6f 64 65 0a 09 0a 2f 2f 20  ccess mode...// 
0230: 64 65 66 69 6e 65 73 20 66 6f 72 20 73 74 61 74  defines for stat
0240: 75 73 20 62 69 74 73 0a 09 45 52 52 20 20 20 20  us bits..ERR    
0250: 20 3d 20 30 78 30 31 30 30 09 2f 2f 20 65 72 72   = 0x0100.// err
0260: 6f 72 20 63 6f 6e 64 69 74 69 6f 6e 0a 09 44 52  or condition..DR
0270: 51 20 20 20 20 20 3d 20 30 78 30 38 30 30 09 2f  Q     = 0x0800./
0280: 2f 20 64 61 74 61 20 72 65 71 75 65 73 74 0a 0a  / data request..
0290: 2f 2f 20 69 6d 61 67 65 20 76 65 63 74 6f 72 73  // image vectors
02a0: 20 6c 65 66 74 20 62 65 68 69 6e 64 20 62 79 20   left behind by 
02b0: 62 6f 6f 74 20 6c 6f 61 64 65 72 0a 09 63 66 64  boot loader..cfd
02c0: 73 6b 30 09 3d 20 30 78 66 66 30 30 09 2f 2f 20  sk0.= 0xff00.// 
02d0: 62 61 73 65 20 73 65 63 74 6f 72 20 6f 66 20 44  base sector of D
02e0: 53 4b 30 20 69 6d 61 67 65 20 28 33 32 20 62 69  SK0 image (32 bi
02f0: 74 29 0a 09 63 66 64 73 6b 31 20 20 3d 20 30 78  t)..cfdsk1  = 0x
0300: 66 66 30 34 09 2f 2f 20 62 61 73 65 20 73 65 63  ff04.// base sec
0310: 74 6f 72 20 6f 66 20 44 53 4b 31 20 69 6d 61 67  tor of DSK1 imag
0320: 65 20 28 33 32 20 62 69 74 29 0a 0a 2f 2f 20 61  e (32 bit)..// a
0330: 72 67 75 6d 65 6e 74 73 20 74 6f 20 63 66 5f 63  rguments to cf_c
0340: 61 72 64 5f 72 64 2c 20 63 66 5f 63 61 72 64 5f  ard_rd, cf_card_
0350: 77 72 0a 09 64 65 76 09 3d 20 32 32 0a 09 62 6c  wr..dev.= 22..bl
0360: 6b 6e 6f 09 3d 20 32 34 0a 09 61 64 64 72 09 3d  kno.= 24..addr.=
0370: 20 32 36 0a 09 77 63 6f 75 6e 74 09 3d 20 32 38   26..wcount.= 28
0380: 0a 0a 09 2e 74 65 78 74 0a 0a 2f 2f 20 53 65 65  ....text..// See
0390: 6b 20 64 69 73 6b 20 62 6c 6f 63 6b 0a 73 65 65  k disk block.see
03a0: 6b 3a 0a 31 3a 09 6d 6f 76 62 09 40 63 66 73 74  k:.1:.movb.@cfst
03b0: 61 74 2c 72 30 09 2f 2f 20 77 61 69 74 20 63 61  at,r0.// wait ca
03c0: 72 64 20 72 65 61 64 79 0a 09 6a 6c 74 09 31 62  rd ready..jlt.1b
03d0: 0a 09 6c 69 09 72 32 2c 63 66 64 73 6b 30 09 2f  ..li.r2,cfdsk0./
03e0: 2f 20 73 74 61 72 74 69 6e 67 20 73 65 63 74 6f  / starting secto
03f0: 72 20 6f 66 20 64 73 6b 30 20 69 6d 61 67 65 0a  r of dsk0 image.
0400: 09 6d 6f 76 09 40 64 65 76 28 62 70 29 2c 72 30  .mov.@dev(bp),r0
0410: 0a 09 6a 65 71 09 31 66 0a 09 6c 69 09 72 32 2c  ..jeq.1f..li.r2,
0420: 63 66 64 73 6b 31 09 2f 2f 20 73 74 61 72 74 69  cfdsk1.// starti
0430: 6e 67 20 73 65 63 74 6f 72 20 6f 66 20 64 73 6b  ng sector of dsk
0440: 31 20 69 6d 61 67 65 0a 31 3a 09 6d 6f 76 09 40  1 image.1:.mov.@
0450: 62 6c 6b 6e 6f 28 62 70 29 2c 72 31 09 2f 2f 20  blkno(bp),r1.// 
0460: 72 65 71 75 65 73 74 65 64 20 73 65 63 74 6f 72  requested sector
0470: 20 6e 75 6d 62 65 72 0a 09 6d 6f 76 09 28 72 32   number..mov.(r2
0480: 29 2b 2c 72 30 09 2f 2f 20 61 64 64 20 73 74 61  )+,r0.// add sta
0490: 72 74 20 74 6f 20 72 65 71 75 65 73 74 65 64 20  rt to requested 
04a0: 74 6f 20 67 65 74 0a 09 61 09 28 72 32 29 2c 72  to get..a.(r2),r
04b0: 31 09 09 2f 2f 20 20 20 33 32 20 62 69 74 20 4c  1..//   32 bit L
04c0: 42 41 20 6f 66 20 72 65 71 2e 20 73 65 63 74 6f  BA of req. secto
04d0: 72 0a 09 6a 6e 63 20 20 20 20 20 31 66 0a 09 69  r..jnc     1f..i
04e0: 6e 63 09 72 30 0a 31 3a 09 6d 6f 76 62 09 72 31  nc.r0.1:.movb.r1
04f0: 2c 40 63 66 6c 62 61 31 09 2f 2f 20 6d 6f 76 65  ,@cflba1.// move
0500: 20 74 68 65 20 4c 42 41 20 74 6f 20 74 68 65 20   the LBA to the 
0510: 43 46 20 43 61 72 64 0a 09 73 77 70 62 09 72 31  CF Card..swpb.r1
0520: 09 09 2f 2f 20 20 20 20 72 65 67 69 73 74 65 72  ..//    register
0530: 73 20 61 6e 64 20 73 65 74 20 74 72 61 6e 73 66  s and set transf
0540: 65 72 0a 09 6d 6f 76 62 09 72 31 2c 40 63 66 6c  er..movb.r1,@cfl
0550: 62 61 30 09 2f 2f 20 20 20 20 6c 65 6e 67 74 68  ba0.//    length
0560: 20 74 6f 20 31 20 73 65 63 74 6f 72 0a 09 61 6e   to 1 sector..an
0570: 64 69 09 72 30 2c 30 78 30 66 66 66 0a 09 6f 72  di.r0,0x0fff..or
0580: 69 09 72 30 2c 30 78 65 30 30 30 0a 09 6d 6f 76  i.r0,0xe000..mov
0590: 62 09 72 30 2c 40 63 66 6c 62 61 33 0a 09 73 77  b.r0,@cflba3..sw
05a0: 70 62 09 72 30 0a 09 6d 6f 76 62 09 72 30 2c 40  pb.r0..movb.r0,@
05b0: 63 66 6c 62 61 32 0a 09 6c 69 09 72 30 2c 30 78  cflba2..li.r0,0x
05c0: 30 31 30 30 0a 09 6d 6f 76 62 09 72 30 2c 40 63  0100..movb.r0,@c
05d0: 66 63 6e 74 0a 09 62 09 28 72 31 31 29 0a 0a 2f  fcnt..b.(r11)../
05e0: 2f 20 52 65 61 64 20 35 31 32 20 62 79 74 65 20  / Read 512 byte 
05f0: 62 6c 6f 63 6b 20 66 72 6f 6d 20 74 68 65 20 43  block from the C
0600: 46 20 43 61 72 64 0a 72 64 62 6c 6f 63 6b 3a 0a  F Card.rdblock:.
0610: 31 3a 09 6d 6f 76 62 09 40 63 66 73 74 61 74 2c  1:.movb.@cfstat,
0620: 72 30 09 2f 2f 20 77 61 69 74 20 63 61 72 64 20  r0.// wait card 
0630: 72 65 61 64 79 0a 09 6a 6c 74 09 31 62 0a 09 6c  ready..jlt.1b..l
0640: 69 09 72 30 2c 52 44 53 45 43 54 09 2f 2f 20 69  i.r0,RDSECT.// i
0650: 73 73 75 65 20 72 65 61 64 20 63 6f 6d 6d 61 6e  ssue read comman
0660: 64 0a 09 6d 6f 76 62 09 72 30 2c 40 63 66 63 6d  d..movb.r0,@cfcm
0670: 64 0a 31 3a 09 6d 6f 76 62 09 40 63 66 73 74 61  d.1:.movb.@cfsta
0680: 74 2c 72 30 09 2f 2f 20 77 61 69 74 20 63 61 72  t,r0.// wait car
0690: 64 20 72 65 61 64 79 0a 09 6d 6f 76 62 09 72 30  d ready..movb.r0
06a0: 2c 72 31 0a 09 6a 6c 74 09 31 62 0a 09 61 6e 64  ,r1..jlt.1b..and
06b0: 69 09 72 30 2c 44 52 51 09 09 2f 2f 20 61 6e 64  i.r0,DRQ..// and
06c0: 20 64 61 74 61 20 72 65 61 64 79 0a 09 6a 65 71   data ready..jeq
06d0: 09 31 62 0a 09 61 6e 64 69 09 72 31 2c 45 52 52  .1b..andi.r1,ERR
06e0: 09 09 2f 2f 20 63 68 65 63 6b 20 66 6f 72 20 65  ..// check for e
06f0: 72 72 6f 72 0a 09 6a 6e 65 09 32 66 0a 0a 09 6c  rror..jne.2f...l
0700: 69 09 72 31 32 2c 30 78 30 30 63 30 20 20 20 20  i.r12,0x00c0    
0710: 20 20 2f 2f 20 44 4d 41 43 20 62 61 73 65 20 61    // DMAC base a
0720: 64 64 72 0a 09 74 62 09 33 31 09 09 2f 2f 20 44  ddr..tb.31..// D
0730: 4d 41 43 20 70 72 65 73 65 6e 74 3f 0a 09 6a 6e  MAC present?..jn
0740: 65 20 20 20 20 20 31 66 09 09 2f 2f 20 2d 3e 20  e     1f..// -> 
0750: 6e 6f 0a 09 73 62 7a 09 33 30 09 09 2f 2f 20 73  no..sbz.30..// s
0760: 65 74 20 72 65 61 64 20 6d 6f 64 65 0a 09 6c 64  et read mode..ld
0770: 63 72 20 20 20 20 72 31 30 2c 30 09 09 2f 2f 20  cr    r10,0..// 
0780: 44 6f 20 44 4d 41 20 74 72 61 6e 73 66 65 72 0a  Do DMA transfer.
0790: 09 61 69 09 72 31 30 2c 35 31 32 0a 09 6a 6d 70  .ai.r10,512..jmp
07a0: 09 32 66 0a 0a 31 3a 09 6c 69 09 72 31 2c 35 31  .2f..1:.li.r1,51
07b0: 32 2f 34 09 2f 2f 20 43 50 55 20 74 72 61 6e 73  2/4.// CPU trans
07c0: 66 65 72 0a 31 3a 09 6d 6f 76 62 09 40 63 66 64  fer.1:.movb.@cfd
07d0: 61 74 61 2c 28 72 31 30 29 2b 0a 09 6d 6f 76 62  ata,(r10)+..movb
07e0: 09 40 63 66 64 61 74 61 2c 28 72 31 30 29 2b 0a  .@cfdata,(r10)+.
07f0: 09 6d 6f 76 62 09 40 63 66 64 61 74 61 2c 28 72  .movb.@cfdata,(r
0800: 31 30 29 2b 0a 09 6d 6f 76 62 09 40 63 66 64 61  10)+..movb.@cfda
0810: 74 61 2c 28 72 31 30 29 2b 0a 09 64 65 63 09 72  ta,(r10)+..dec.r
0820: 31 0a 09 6a 6e 65 09 31 62 0a 0a 32 3a 09 6d 6f  1..jne.1b..2:.mo
0830: 76 62 09 40 63 66 65 72 72 2c 72 32 09 2f 2f 20  vb.@cferr,r2.// 
0840: 66 65 74 63 68 20 65 72 72 6f 72 20 63 6f 64 65  fetch error code
0850: 0a 09 73 72 6c 09 72 32 2c 38 0a 09 62 09 28 72  ..srl.r2,8..b.(r
0860: 31 31 29 0a 0a 2f 2f 20 72 65 61 64 20 27 77 63  11)..// read 'wc
0870: 6f 75 6e 74 27 20 77 6f 72 64 73 20 66 72 6f 6d  ount' words from
0880: 20 27 64 65 76 27 20 73 74 61 72 74 69 6e 67 20   'dev' starting 
0890: 61 74 20 27 62 6c 6b 6e 6f 27 20 74 6f 20 27 61  at 'blkno' to 'a
08a0: 64 64 72 27 0a 09 2e 67 6c 6f 62 6c 09 5f 62 6b  ddr'...globl._bk
08b0: 72 65 61 64 0a 5f 62 6b 72 65 61 64 3a 0a 09 6d  read._bkread:..m
08c0: 6f 76 20 20 20 20 20 72 31 31 2c 72 30 0a 09 62  ov     r11,r0..b
08d0: 6c 20 20 20 20 20 20 40 63 73 76 0a 09 6d 6f 76  l      @csv..mov
08e0: 09 40 77 63 6f 75 6e 74 28 62 70 29 2c 72 39 0a  .@wcount(bp),r9.
08f0: 09 73 72 6c 09 72 39 2c 38 0a 09 6a 65 71 09 32  .srl.r9,8..jeq.2
0900: 66 0a 09 6d 6f 76 09 40 61 64 64 72 28 62 70 29  f..mov.@addr(bp)
0910: 2c 72 31 30 0a 31 3a 09 62 6c 09 40 73 65 65 6b  ,r10.1:.bl.@seek
0920: 0a 09 62 6c 09 40 72 64 62 6c 6f 63 6b 0a 09 6a  ..bl.@rdblock..j
0930: 6e 65 09 32 66 0a 09 69 6e 63 09 40 62 6c 6b 6e  ne.2f..inc.@blkn
0940: 6f 28 62 70 29 0a 09 64 65 63 09 72 39 0a 09 6a  o(bp)..dec.r9..j
0950: 6e 65 09 31 62 0a 09 63 6c 72 09 72 32 0a 32 3a  ne.1b..clr.r2.2:
0960: 09 62 09 40 63 72 65 74 0a 0a 2f 2f 20 77 72 69  .b.@cret..// wri
0970: 74 65 20 35 31 32 20 62 79 74 65 20 62 6c 6f 63  te 512 byte bloc
0980: 6b 20 74 6f 20 74 68 65 20 43 46 20 43 61 72 64  k to the CF Card
0990: 0a 77 72 62 6c 6f 63 6b 3a 0a 31 3a 09 6d 6f 76  .wrblock:.1:.mov
09a0: 62 09 40 63 66 73 74 61 74 2c 72 30 09 2f 2f 20  b.@cfstat,r0.// 
09b0: 77 61 69 74 20 63 61 72 64 20 72 65 61 64 79 0a  wait card ready.
09c0: 09 6a 6c 74 09 31 62 0a 09 6c 69 09 72 30 2c 57  .jlt.1b..li.r0,W
09d0: 52 53 45 43 54 09 2f 2f 20 69 73 73 75 65 20 72  RSECT.// issue r
09e0: 65 61 64 20 63 6f 6d 6d 61 6e 64 0a 09 6d 6f 76  ead command..mov
09f0: 62 09 72 30 2c 40 63 66 63 6d 64 0a 31 3a 09 6d  b.r0,@cfcmd.1:.m
0a00: 6f 76 62 09 40 63 66 73 74 61 74 2c 72 30 09 2f  ovb.@cfstat,r0./
0a10: 2f 20 77 61 69 74 20 63 61 72 64 20 72 65 61 64  / wait card read
0a20: 79 0a 09 6a 6c 74 09 31 62 0a 09 61 6e 64 69 09  y..jlt.1b..andi.
0a30: 72 30 2c 44 52 51 09 09 2f 2f 20 61 6e 64 20 64  r0,DRQ..// and d
0a40: 61 74 61 20 72 65 61 64 79 0a 09 6a 65 71 09 31  ata ready..jeq.1
0a50: 62 0a 09 6c 69 09 72 31 32 2c 30 78 30 30 63 30  b..li.r12,0x00c0
0a60: 09 2f 2f 20 44 4d 41 43 20 62 61 73 65 20 61 64  .// DMAC base ad
0a70: 64 72 65 73 73 0a 09 74 62 09 33 31 09 09 2f 2f  dress..tb.31..//
0a80: 20 44 4d 41 43 20 70 72 65 73 65 6e 74 3f 0a 09   DMAC present?..
0a90: 6a 6e 65 09 31 66 09 09 2f 2f 20 2d 3e 20 6e 6f  jne.1f..// -> no
0aa0: 0a 09 73 62 6f 09 33 30 09 09 2f 2f 20 77 72 69  ..sbo.30..// wri
0ab0: 74 65 20 6d 6f 64 65 0a 09 6c 64 63 72 09 72 31  te mode..ldcr.r1
0ac0: 30 2c 30 09 09 2f 2f 20 73 74 61 72 74 20 44 4d  0,0..// start DM
0ad0: 41 20 74 72 61 6e 73 66 65 72 0a 09 61 69 09 72  A transfer..ai.r
0ae0: 31 30 2c 35 31 32 0a 09 6a 6d 70 09 32 66 0a 0a  10,512..jmp.2f..
0af0: 31 3a 09 6c 69 09 72 31 2c 35 31 32 2f 34 09 2f  1:.li.r1,512/4./
0b00: 2f 20 43 50 55 20 74 72 61 6e 73 66 65 72 0a 31  / CPU transfer.1
0b10: 3a 09 6d 6f 76 62 09 28 72 31 30 29 2b 2c 40 63  :.movb.(r10)+,@c
0b20: 66 64 61 74 61 0a 09 6d 6f 76 62 09 28 72 31 30  fdata..movb.(r10
0b30: 29 2b 2c 40 63 66 64 61 74 61 0a 09 6d 6f 76 62  )+,@cfdata..movb
0b40: 09 28 72 31 30 29 2b 2c 40 63 66 64 61 74 61 0a  .(r10)+,@cfdata.
0b50: 09 6d 6f 76 62 09 28 72 31 30 29 2b 2c 40 63 66  .movb.(r10)+,@cf
0b60: 64 61 74 61 0a 09 64 65 63 09 72 31 0a 09 6a 6e  data..dec.r1..jn
0b70: 65 09 31 62 0a 0a 32 3a 09 6d 6f 76 62 09 40 63  e.1b..2:.movb.@c
0b80: 66 73 74 61 74 2c 72 30 09 2f 2f 20 63 68 65 63  fstat,r0.// chec
0b90: 6b 20 66 6f 72 20 65 72 72 6f 72 0a 09 61 6e 64  k for error..and
0ba0: 69 09 72 30 2c 45 52 52 0a 09 6a 65 71 09 31 66  i.r0,ERR..jeq.1f
0bb0: 0a 09 6d 6f 76 62 09 40 63 66 65 72 72 2c 72 32  ..movb.@cferr,r2
0bc0: 09 2f 2f 20 66 65 74 63 68 20 65 72 72 6f 72 20  .// fetch error 
0bd0: 63 6f 64 65 0a 09 73 72 6c 09 72 32 2c 38 0a 31  code..srl.r2,8.1
0be0: 3a 09 62 09 28 72 31 31 29 0a 0a 2f 2f 20 77 72  :.b.(r11)..// wr
0bf0: 69 74 65 20 27 77 63 6f 75 6e 74 27 20 77 6f 72  ite 'wcount' wor
0c00: 64 73 20 66 72 6f 6d 20 27 61 64 64 72 27 20 74  ds from 'addr' t
0c10: 6f 20 27 64 65 76 27 20 73 74 61 72 74 69 6e 67  o 'dev' starting
0c20: 20 61 74 20 27 62 6c 6b 6e 6f 27 0a 09 2e 67 6c   at 'blkno'...gl
0c30: 6f 62 6c 09 5f 62 6b 77 72 69 74 65 0a 5f 62 6b  obl._bkwrite._bk
0c40: 77 72 69 74 65 3a 0a 09 6d 6f 76 20 20 20 20 20  write:..mov     
0c50: 72 31 31 2c 72 30 0a 09 62 6c 20 20 20 20 20 20  r11,r0..bl      
0c60: 40 63 73 76 0a 09 6d 6f 76 09 40 77 63 6f 75 6e  @csv..mov.@wcoun
0c70: 74 28 62 70 29 2c 72 39 0a 09 73 72 6c 09 72 39  t(bp),r9..srl.r9
0c80: 2c 38 0a 09 6a 65 71 09 32 66 0a 09 6d 6f 76 09  ,8..jeq.2f..mov.
0c90: 40 61 64 64 72 28 62 70 29 2c 72 31 30 0a 31 3a  @addr(bp),r10.1:
0ca0: 09 62 6c 09 40 73 65 65 6b 0a 09 62 6c 09 40 77  .bl.@seek..bl.@w
0cb0: 72 62 6c 6f 63 6b 0a 09 6a 6e 65 09 32 66 0a 09  rblock..jne.2f..
0cc0: 69 6e 63 09 40 62 6c 6b 6e 6f 28 62 70 29 0a 09  inc.@blkno(bp)..
0cd0: 64 65 63 09 72 39 0a 09 6a 6e 65 09 31 62 0a 09  dec.r9..jne.1b..
0ce0: 63 6c 72 09 72 32 0a 32 3a 09 62 09 40 63 72 65  clr.r2.2:.b.@cre
0cf0: 74 0a 0a 2f 2f 20 69 6e 69 74 20 43 46 20 63 61  t..// init CF ca
0d00: 72 64 2c 20 73 65 74 20 38 2d 62 69 74 20 6d 6f  rd, set 8-bit mo
0d10: 64 65 0a 09 2e 67 6c 6f 62 6c 09 5f 62 6b 69 6e  de...globl._bkin
0d20: 69 74 0a 5f 62 6b 69 6e 69 74 3a 0a 31 3a 09 6d  it._bkinit:.1:.m
0d30: 6f 76 62 09 40 63 66 73 74 61 74 2c 72 30 0a 09  ovb.@cfstat,r0..
0d40: 6a 6c 74 09 31 62 0a 09 6d 6f 76 62 09 40 7a 65  jlt.1b..movb.@ze
0d50: 72 6f 2c 40 63 66 6c 62 61 33 0a 09 6c 69 09 72  ro,@cflba3..li.r
0d60: 30 2c 42 59 54 45 4d 4f 44 0a 09 6d 6f 76 62 09  0,BYTEMOD..movb.
0d70: 72 30 2c 40 63 66 66 65 61 74 0a 09 6c 69 09 72  r0,@cffeat..li.r
0d80: 30 2c 53 45 54 46 45 41 54 0a 09 6d 6f 76 62 09  0,SETFEAT..movb.
0d90: 72 30 2c 40 63 66 63 6d 64 0a 09 62 09 28 72 31  r0,@cfcmd..b.(r1
0da0: 31 29 0a 09 0a 09 2e 64 61 74 61 0a 7a 65 72 6f  1).....data.zero
0db0: 3a 09 30 0a                                      :.0.