floppyrom.a65

     1:  
     2:          .setcpu "6502"
     3:  
     4:  .include "../asm6502.inc"
     5:  .include "../macros.inc"
     6:  .include "../petscii.inc"
     7:  
     8:  .include "defines.inc"
     9:  
    10:  .include "memory.inc"
    11:  
    12:  .include "errorcodes.inc"
    13:  
    14:  
    15:  .macro SET_WPSW_DIRTY_NO_CR
    16:    .if CompileDrive >= DRIVE_1571_05
    17:          jsr     PATCH_WPSW
    18:          nop
    19:    .else
    20:          lda     #$01
    21:          sta     WPSW
    22:    .endif
    23:  .endmacro
    24:  
    25:  .macro SET_WPSW_DIRTY
    26:    .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
    27:          jsr     PATCH_WPSW
    28:          nop
    29:    .else
    30:          lda     #$01
    31:          sta     WPSW
    32:    .endif
    33:  .endmacro
    34:  
    35:  ; convert a decimal value (in X) into (packed) BCD (in A)
    36:  ;
    37:  ; the algorithm is simple:
    38:  ; decrement X and increment A until X is zero
    39:  ; as decimal mode is set, A will count up in BCD.
    40:  ; As the decimal mode does not affect dex, X will
    41:  ; be incremented in binary
    42:  ;
    43:  .macro CONVERT_BIN_TO_BCD_PARTIAL
    44:  @Next:
    45:          cpx     #$00
    46:          beq     @Done
    47:          clc
    48:          adc     #$01
    49:          dex
    50:          jmp     @Next
    51:  @Done:
    52:  .endmacro
    53:  
    54:  .macro CONVERT_BIN_TO_BCD
    55:          lda     #$00
    56:          sed
    57:          CONVERT_BIN_TO_BCD_PARTIAL
    58:  .endmacro
    59:  
    60:  .if CompileDrive >= DRIVE_1570
    61:          * = $8000
    62:  
    63:  L8000:
    64:          .byte   DRIVE_8000
    65:  L8001:
    66:          .byte   DRIVE_8001
    67:  
    68:  L8002:
    69:  .if CompileDrive >= DRIVE_1571CR_01
    70:          .byte   "S/W BY DAVID G SIRACUSA",$0D
    71:          .byte   "5710 BY C. HAUCK",$0D
    72:          .byte   "1986",$0D
    73:  .else
    74:          .byte   "S/W - DAVID G SIRACUSA",$0D
    75:          .byte   "H/W - GREG BERLIN",$0D
    76:          .byte   "1985",$0D
    77:  .endif
    78:  
    79:  U0CommandPatch157x:
    80:          lda     CMDSIZ
    81:          cmp     #$03
    82:          bcc     @OriginalUxCommand
    83:          lda     CMDBUF + 2
    84:          sta     HINIB
    85:          and     #$1F
    86:          tax
    87:          asl     a
    88:          tay
    89:          lda     L808E,y
    90:          sta     IP
    91:          lda     L808E + 1,y
    92:          sta     IP + 1
    93:          cpx     #$1E
    94:          beq     @L8056
    95:          lda     VBC_PAUNBUF1
    96:          and     #VBC_PA1_20
    97:          beq     @OriginalUxCommand
    98:  @L8056:
    99:          lda     BITCNT
   100:          and     #$EB
   101:          sta     BITCNT
   102:          lda     L806E,x
   103:          sta     CMDBUF + 2
   104:  .if CompileDrive >= DRIVE_1571_05
   105:          jmp     LAAE7
   106:  .else
   107:          jmp     (IP)
   108:  .endif
   109:  @OriginalUxCommand:
   110:          lda     #<AddressesUxCommands
   111:          sta     USRJMP
   112:          lda     #>AddressesUxCommands
   113:          sta     USRJMP + 1
   114:  L806D:
   115:          rts
   116:  
   117:  L806E:
   118:          .byte   $80,$81,$90,$91,$B0,$B1,$F0,$F1
   119:          .byte   $00,$01,$B0,$01,$00,$01,$00,$01
   120:          .byte   $80,$81,$90,$91,$B0,$B1,$F0,$F1
   121:          .byte   $00,$01,$B0,$01,$00,$01,$00,$80
   122:  
   123:  L808E:
   124:          .addr   L8371
   125:          .addr   L837F
   126:          .addr   L83EC
   127:          .addr   L83F8
   128:          .addr   L848B
   129:          .addr   L837F
   130:          .addr   L84B7
   131:          .addr   L84B7
   132:          .addr   L84F1
   133:          .addr   L84F1
   134:          .addr   L8517
   135:          .addr   L837F
   136:          .addr   L856B
   137:          .addr   L837F
   138:          .addr   L85A5
   139:          .addr   L85A5
   140:          .addr   L8371
   141:          .addr   L837F
   142:          .addr   L83EC
   143:          .addr   L83F8
   144:          .addr   L848B
   145:          .addr   L837F
   146:          .addr   L84B7
   147:          .addr   L84B7
   148:          .addr   L806D
   149:          .addr   L806D
   150:          .addr   L8517
   151:          .addr   L837F
   152:          .addr   L806D
   153:          .addr   L806D
   154:          .addr   L8FE5
   155:          .addr   L9080
   156:  L80CE:
   157:          sei                                     ; disallow interrupts --> blocking job loop
   158:          lda     #$00
   159:          sta     ATNPND
   160:          sta     LSNACT
   161:          sta     TLKACT
   162:          ldx     #$45
   163:          txs
   164:          jsr     L81B2
   165:          lda     #$80
   166:          sta     EIOFLG
   167:          sta     ATNMOD
   168:          jsr     ClearClockOut
   169:          jsr     SetDataOut
   170:          lda     VBC_PB1
   171:          ora     #VBC_PB1_1540_ATNA
   172:          sta     VBC_PB1
   173:  L80F1:
   174:          lda     VBC_PB1
   175:          bpl     L815A
   176:          and     #VBC_PB1_1540_CLOCKIN
   177:          bne     L80F1
   178:  L80FA:
   179:          jsr     L82CA
   180:          cmp     #$3F
   181:          bne     L810D
   182:          lda     BITCNT
   183:          and     #$BF
   184:          sta     BITCNT
   185:          lda     #$00
   186:          sta     LSNACT
   187:          beq     L811B
   188:  L810D:
   189:          cmp     #$5F
   190:          bne     L811E
   191:          lda     BITCNT
   192:          and     #$BF
   193:          sta     BITCNT
   194:          lda     #$00
   195:          sta     TLKACT
   196:  L811B:
   197:          jmp     L8192
   198:  L811E:
   199:          cmp     TLKADR
   200:          bne     L812C
   201:          lda     #$01
   202:          sta     TLKACT
   203:          lda     #$00
   204:          sta     LSNACT
   205:          beq     L8155
   206:  L812C:
   207:          cmp     LSNADR
   208:          bne     L813A
   209:          lda     #$01
   210:          sta     LSNACT
   211:          lda     #$00
   212:          sta     TLKACT
   213:          beq     L8155
   214:  L813A:
   215:          tax
   216:          and     #$60
   217:          cmp     #$60
   218:          bne     L818D
   219:          txa
   220:          sta     ORGSA
   221:          and     #$0F
   222:          sta     SA
   223:          lda     ORGSA
   224:          and     #$F0
   225:          cmp     #$E0
   226:          bne     L8192
   227:          cli                                     ; allow processing of job loop
   228:          jsr     LDAC0
   229:          sei                                     ; disallow interrupts --> blocking job loop
   230:  L8155:
   231:          bit     VBC_PB1
   232:          bmi     L80FA
   233:  L815A:
   234:          lda     #$00
   235:          sta     ATNMOD
   236:          lda     VBC_PB1
   237:          and     # ~ VBC_PB1_1540_ATNA
   238:          sta     VBC_PB1
   239:          lda     LSNACT
   240:          beq     L8177
   241:          bit     BITCNT
   242:          bvc     L8171
   243:          jsr     L8199
   244:  L8171:
   245:          jsr     L8342
   246:          jmp     MainLoopEntry1570
   247:  L8177:
   248:          lda     TLKACT
   249:          beq     L818A
   250:          jsr     ClearDataOut
   251:          jsr     SetClockOut
   252:          jsr     LA483
   253:          jsr     L81EA
   254:          jsr     LA483
   255:  L818A:
   256:          jmp     L8366
   257:  L818D:
   258:          lda     #VBC_PB1_1540_ATNA
   259:          sta     VBC_PB1
   260:  L8192:
   261:          bit     VBC_PB1
   262:          bpl     L815A
   263:          bmi     L8192
   264:  L8199:
   265:          jsr     TestATN
   266:          jsr     ReadIecBusIn
   267:          and     #VBC_PB1_1540_CLOCKIN
   268:          bne     L8199
   269:          jsr     L81CE
   270:          lda     #$00
   271:          sta     CIA_SDR
   272:          lda     #CIA_ICR_B_SP
   273:  L81AD:
   274:          bit     CIA_ICR
   275:          beq     L81AD
   276:  
   277:  L81B2:
   278:          php
   279:          sei                                     ; disallow interrupts --> blocking job loop
   280:          lda     CIA_CRA
   281:          and     # ~ CIA_CRA_B_SP_OUTPUT
   282:          sta     CIA_CRA
   283:  
   284:          lda     VBC_PAUNBUF1
   285:          and     # ~ VBC_PA1_02
   286:          sta     VBC_PAUNBUF1
   287:  
   288:  .if CompileDrive >= DRIVE_1571_05
   289:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_SP
   290:  .else
   291:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_TOD
   292:  .endif
   293:          sta     CIA_ICR
   294:          bit     CIA_ICR
   295:          plp
   296:          rts
   297:  
   298:  L81CE:
   299:          php
   300:          sei                                     ; disallow interrupts --> blocking job loop
   301:          lda     VBC_PAUNBUF1
   302:          ora     #VBC_PA1_02
   303:          sta     VBC_PAUNBUF1
   304:          lda     CIA_CRA
   305:          ora     #CIA_CRA_B_SP_OUTPUT
   306:          sta     CIA_CRA
   307:          lda     #CIA_ICR_B_SP
   308:          sta     CIA_ICR
   309:          bit     CIA_ICR
   310:          plp
   311:          rts
   312:  L81EA:
   313:          sei                                     ; disallow interrupts --> blocking job loop
   314:          jsr     LD0EB
   315:          bcs     L81F6
   316:  L81F0:
   317:          ldx     LINDX
   318:          lda     CHNRDY,x
   319:          bmi     L81F7
   320:  L81F6:
   321:          rts
   322:  L81F7:
   323:          jsr     TestATN
   324:          jsr     ReadIecBusIn
   325:          and     #VBC_PB1_1540_DATAIN
   326:          php
   327:          jsr     ClearClockOut
   328:          plp
   329:          beq     L8218
   330:  L8206:
   331:          jsr     TestATN
   332:          jsr     ReadIecBusIn
   333:          and     #VBC_PB1_1540_DATAIN
   334:          bne     L8206
   335:          ldx     LINDX
   336:          lda     CHNRDY,x
   337:          and     #$08
   338:          bne     L822C
   339:  L8218:
   340:          jsr     TestATN
   341:          jsr     ReadIecBusIn
   342:          and     #VBC_PB1_1540_DATAIN
   343:          bne     L8218
   344:  L8222:
   345:          jsr     TestATN
   346:          jsr     ReadIecBusIn
   347:          and     #VBC_PB1_1540_DATAIN
   348:          beq     L8222
   349:  L822C:
   350:          jsr     SetClockOut
   351:          jsr     TestATN
   352:          jsr     ReadIecBusIn
   353:          and     #VBC_PB1_1540_DATAIN
   354:          bne     L822C
   355:          bit     BITCNT
   356:          bvc     L8276
   357:          lda     VBC_PAUNBUF1
   358:          ora     #VBC_PA1_02
   359:          sta     VBC_PAUNBUF1
   360:          lda     CIA_CRA
   361:          ora     #CIA_CRA_B_SP_OUTPUT
   362:          sta     CIA_CRA
   363:          bit     CIA_ICR
   364:          ldx     LINDX
   365:          lda     L023E,x
   366:          sta     CIA_SDR
   367:  L8258:
   368:          lda     CIA_ICR
   369:          and     #$08
   370:          beq     L8258
   371:          lda     CIA_CRA
   372:          and     # ~ CIA_CRA_B_SP_OUTPUT
   373:          sta     CIA_CRA
   374:          lda     VBC_PAUNBUF1
   375:          and     # ~ VBC_PA1_02
   376:          sta     VBC_PAUNBUF1
   377:  .if CompileDrive >= DRIVE_1571_05
   378:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_SP
   379:  .else
   380:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_TOD
   381:  .endif
   382:          sta     CIA_ICR
   383:          bne     L82B2
   384:  L8276:
   385:          lda     #$08
   386:          sta     CONT
   387:  L827A:
   388:          jsr     ReadIecBusIn
   389:          and     #VBC_PB1_1540_DATAIN
   390:          bne     L82C4
   391:  L8281:
   392:          ldx     LINDX
   393:          lda     L023E,x
   394:          ror     a
   395:          sta     L023E,x
   396:          bcs     L8291
   397:          jsr     SetDataOut
   398:          bne     L8294
   399:  L8291:
   400:          jsr     ClearDataOut
   401:  L8294:
   402:          jsr     LA47E
   403:          lda     DRVTRK + 1
   404:  .if CompileDrive >= DRIVE_1571_05
   405:          bne     L829E
   406:  .else
   407:          bne     L8281
   408:  .endif
   409:          jsr     LA483
   410:  L829E:
   411:          jsr     ClearClockOut
   412:          jsr     LA47E
   413:          lda     DRVTRK + 1
   414:          bne     L82AB
   415:          jsr     LA483
   416:  L82AB:
   417:          jsr     LFEFB
   418:          dec     CONT
   419:          bne     L827A
   420:  L82B2:
   421:          jsr     TestATN
   422:          jsr     ReadIecBusIn
   423:          and     #VBC_PB1_1540_DATAIN
   424:          beq     L82B2
   425:          cli                                     ; allow processing of job loop
   426:          jsr     LD3AA
   427:          sei                                     ; disallow interrupts --> blocking job loop
   428:          jmp     L81F0
   429:  L82C4:
   430:          jmp     L8362
   431:  L82C7:
   432:          bit     CIA_ICR
   433:  L82CA:
   434:          lda     #$08
   435:          sta     CONT
   436:  L82CE:
   437:          jsr     TestATN
   438:          jsr     ReadIecBusIn
   439:          and     #VBC_PB1_1540_CLOCKIN
   440:          bne     L82CE
   441:          jsr     ClearDataOut
   442:          lda     #$01
   443:  L82DD:
   444:          bit     VBC_PB1
   445:          bne     L82DD
   446:  .if CompileDrive >= DRIVE_1571_05
   447:          jsr     LAA76
   448:  .else
   449:          sta     VBC_T1HC1
   450:  .endif
   451:  L82E5:
   452:          jsr     TestATN
   453:          lda     VBC_IFR1
   454:          and     #$40
   455:          bne     L82F8
   456:          jsr     ReadIecBusIn
   457:          and     #VBC_PB1_1540_CLOCKIN
   458:          beq     L82E5
   459:          bne     L8311
   460:  L82F8:
   461:          jsr     SetDataOut
   462:          ldx     #$18
   463:  L82FD:
   464:          dex
   465:          bne     L82FD
   466:          jsr     ClearDataOut
   467:  L8303:
   468:          jsr     TestATN
   469:          jsr     ReadIecBusIn
   470:          and     #VBC_PB1_1540_CLOCKIN
   471:          beq     L8303
   472:          lda     #$00
   473:          sta     EIOFLG
   474:  L8311:
   475:          lda     VBC_PB1
   476:          eor     #VBC_PB1_1540_DATAIN
   477:          tax
   478:          lda     CIA_ICR
   479:          and     #CIA_ICR_B_SP
   480:          beq     L8326
   481:          lda     CIA_SDR
   482:          sta     DATA
   483:          jmp     L833C
   484:  L8326:
   485:          txa
   486:          lsr     a
   487:          and     #$02
   488:          bne     L8311
   489:          ror     DATA
   490:  L832E:
   491:          jsr     TestATN
   492:          jsr     ReadIecBusIn
   493:          and     #VBC_PB1_1540_CLOCKIN
   494:          beq     L832E
   495:          dec     CONT
   496:          bne     L8311
   497:  L833C:
   498:          jsr     SetDataOut
   499:          lda     DATA
   500:          rts
   501:  L8342:
   502:          sei                                     ; disallow interrupts --> blocking job loop
   503:          jsr     LD107
   504:          bcs     L834D
   505:          lda     CHNRDY,x
   506:          ror     a
   507:          bcs     L8358
   508:  L834D:
   509:          lda     ORGSA
   510:          and     #$F0
   511:          cmp     #$F0
   512:          beq     L8358
   513:          jmp     L8366
   514:  L8358:
   515:          jsr     L82C7
   516:          cli                                     ; allow processing of job loop
   517:          jsr     LCFB7
   518:          jmp     L8342
   519:  L8362:
   520:          lda     #$00
   521:          sta     BITCNT
   522:  L8366:
   523:          lda     #0
   524:          sta     VBC_PB1
   525:  MainLoopEntry1570:
   526:          jsr     L81B2
   527:          jmp     MainLoopEntry
   528:  L8371:
   529:          sta     CMD
   530:          sta     AF
   531:          lda     VBC_IFR1
   532:          lsr     a
   533:          bcc     L8394
   534:          ldx     #$0B
   535:          .byte   ASM_BIT3
   536:  L837F:
   537:          ldx     #$4F
   538:  L8381:
   539:          jsr     L85E9
   540:  L8384:
   541:          jsr     L8581
   542:  L8387:
   543:          cpx     #$02
   544:          bcs     L838C
   545:          rts
   546:  L838C:
   547:          txa
   548:          and     #$0F
   549:          ldx     #$00
   550:          jmp     LE60A
   551:  L8394:
   552:          jsr     L81CE
   553:          bit     AS
   554:          bpl     L83A0
   555:          lda     #$09
   556:          jmp     L86E6
   557:  L83A0:
   558:          jsr     LC63D
   559:  L83A3:
   560:          cli                                     ; allow processing of job loop
   561:          lda     HINIB
   562:          and     #$20
   563:          bne     L83D0
   564:          lda     CMDBUF + 3
   565:          sta     TRACK0
   566:          lda     CMDBUF + 4
   567:          sta     SECTOR0
   568:          ldx     #$00
   569:          lda     AF
   570:          sta     JOBS0,x
   571:          jsr     L865E
   572:          sei                                     ; disallow interrupts --> blocking job loop
   573:          jsr     L85E9
   574:          bit     HINIB
   575:          bvs     L83C9
   576:          cpx     #$02
   577:          bcs     L8381
   578:  L83C9:
   579:          jsr     L85F9
   580:          lda     HINIB
   581:          bmi     L83DD
   582:  L83D0:
   583:          ldy     #$00
   584:  L83D2:
   585:          lda     BUFFER0,y
   586:          sta     CTRACK
   587:          jsr     L85F9
   588:          iny
   589:          bne     L83D2
   590:  L83DD:
   591:          dec     CMDBUF + 5
   592:          beq     L83E8
   593:          jsr     L861E
   594:          jmp     L83A3
   595:  L83E8:
   596:          cli                                     ; allow processing of job loop
   597:          jmp     L85AF
   598:  L83EC:
   599:          sta     CMD
   600:          lda     VBC_IFR1
   601:          lsr     a
   602:          bcc     L8402
   603:          ldx     #$0B
   604:          .byte   ASM_BIT3
   605:  L83F8:
   606:          ldx     #$4F
   607:          stx     CTRACK
   608:          lda     HINIB
   609:          ora     #$08
   610:          sta     HINIB
   611:  L8402:
   612:          bit     AS
   613:          bpl     L840B
   614:          lda     #$0A
   615:          jmp     L86E6
   616:  L840B:
   617:          jsr     LC63D
   618:          lda     HINIB
   619:          bmi     L843B
   620:  L8412:
   621:          sei                                     ; disallow interrupts --> blocking job loop
   622:          ldy     #$00
   623:  L8415:
   624:          lda     VBC_PB1
   625:          eor     #VBC_PB1_1540_CLOCKOUT
   626:          bit     CIA_ICR
   627:          sta     VBC_PB1
   628:  L8420:
   629:          lda     VBC_PB1
   630:          bpl     L8428
   631:          jsr     TestATN
   632:  L8428:
   633:          lda     CIA_ICR
   634:          and     #CIA_ICR_B_SP
   635:          beq     L8420
   636:          lda     CIA_SDR
   637:          sta     BUFFER0,y
   638:          iny
   639:          bne     L8415
   640:          jsr     ClearClockOut
   641:  L843B:
   642:          cli                                     ; allow processing of job loop
   643:          lda     HINIB
   644:          and     #$20
   645:          bne     L8479
   646:          lda     HINIB
   647:          and     #$08
   648:          beq     L844D
   649:          ldx     CTRACK
   650:          jmp     L8381
   651:  L844D:
   652:          lda     CMDBUF + 3
   653:          sta     TRACK0
   654:          lda     CMDBUF + 4
   655:          sta     SECTOR0
   656:          ldx     #$00
   657:          lda     #$90
   658:          sta     JOBS0,x
   659:          jsr     L865E
   660:          sei                                     ; disallow interrupts --> blocking job loop
   661:          jsr     L81CE
   662:          jsr     L85E9
   663:          jsr     L85F9
   664:          jsr     L86A0
   665:          jsr     L81B2
   666:          cli                                     ; allow processing of job loop
   667:          bit     HINIB
   668:          bvs     L8479
   669:          cpx     #$02
   670:          bcs     L8484
   671:  L8479:
   672:          dec     CMDBUF + 5
   673:          beq     L8487
   674:          jsr     L861E
   675:          jmp     L8412
   676:  L8484:
   677:          jmp     L838C
   678:  L8487:
   679:          cli                                     ; allow processing of job loop
   680:          jmp     L85AF
   681:  L848B:
   682:          lda     CMDBUF + 2
   683:          and     #$01
   684:          bne     L84B2
   685:          lda     #$01
   686:          sta     VBC_IFR1
   687:          lda     #$05
   688:          jsr     L86E6
   689:          ldx     L01B0
   690:          cpx     #$02
   691:          bcc     L84B4
   692:          ldx     #$00
   693:          stx     AS
   694:          lda     #$B0
   695:  .if CompileDrive >= DRIVE_1571_05
   696:          jsr     LC075
   697:  .else
   698:          sta     CMD
   699:  .endif
   700:          sta     JOBS0,x
   701:          jsr     L865E
   702:          .byte   ASM_BIT3
   703:  L84B2:
   704:          ldx     #$4F
   705:  L84B4:
   706:          jmp     L8381
   707:  L84B7:
   708:          lda     CMDBUF + 2
   709:          and     #$01
   710:          bne     L84E9
   711:          lda     CMDBUF + 3
   712:          bpl     L84C8
   713:          lda     #$08
   714:          jmp     L86E6
   715:  L84C8:
   716:          lda     #$00
   717:          sta     AS
   718:          sta     NODRV
   719:          lda     CMDBUF + 4
   720:          sta     DiskID0
   721:          lda     CMDBUF + 5
   722:          sta     DiskID0 + 1
   723:          jsr     LD307
   724:          lda     #$01
   725:          sta     TRACK
   726:          lda     #$FF
   727:          sta     JOBRTN
   728:  .if CompileDrive = DRIVE_1571_03
   729:          jsr     LA989
   730:  .else
   731:          jsr     LAA4D
   732:  .endif
   733:          tax
   734:          .byte   ASM_BIT3
   735:  L84E9:
   736:          ldx     #$4F
   737:          jsr     L85E9
   738:          jmp     L8387
   739:  L84F1:
   740:          sei                                     ; disallow interrupts --> blocking job loop
   741:          bit     HINIB
   742:          bpl     L8500
   743:          jsr     L81CE
   744:          lda     BYTE
   745:          sta     CTRACK
   746:          jmp     L85F9
   747:  L8500:
   748:          ldx     CMDSIZ
   749:          cpx     #$04
   750:          bcs     L8511
   751:          ldx     #$0E
   752:          jsr     L85E9
   753:          lda     #ERRORCODE_31_SYNTAX_ERROR
   754:          jmp     GenerateErrorMessage
   755:          ; --------------
   756:  
   757:  L8511:
   758:          lda     CMDBUF + 3
   759:          sta     BYTE
   760:          rts
   761:  L8517:
   762:          jsr     L848B
   763:          bit     AS
   764:          bpl     L8566
   765:          lda     #$0D
   766:          jsr     L86E6
   767:          ldx     L01B0
   768:          cpx     #$02
   769:          bcs     L8532
   770:          jsr     L8961
   771:          jsr     L8986
   772:          txa
   773:          pha
   774:  L8532:
   775:          sei                                     ; disallow interrupts --> blocking job loop
   776:          jsr     L81CE
   777:          lda     AS
   778:          sta     CTRACK
   779:          jsr     L85F9
   780:          ldx     L01B0
   781:          cpx     #$02
   782:          bcs     L8567
   783:          lda     MYPA
   784:          sta     CTRACK
   785:          jsr     L85F9
   786:          lda     NMIFLG
   787:          sta     CTRACK
   788:          jsr     L85F9
   789:          lda     ACLSTP
   790:          sta     CTRACK
   791:          jsr     L85F9
   792:          lda     RSTEPS
   793:          sta     CTRACK
   794:          jsr     L85F9
   795:          pla
   796:          sta     CTRACK
   797:  .if CompileDrive >= DRIVE_1571_05
   798:          jmp     LAAC5
   799:  .else
   800:          jsr     L85F9
   801:  .endif
   802:  L8566:
   803:          rts
   804:  L8567:
   805:          pla
   806:          jmp     L838C
   807:  L856B:
   808:          bit     HINIB
   809:          bpl     L8596
   810:          bit     HINIB
   811:          bvc     L8581
   812:          lda     VBC_IFR1
   813:          lsr     a
   814:          bcc     L8581
   815:          lda     AS
   816:          and     #$F0
   817:          ora     #$0B
   818:          sta     AS
   819:  L8581:
   820:          sei                                     ; disallow interrupts --> blocking job loop
   821:          jsr     L81CE
   822:          lda     AS
   823:          sta     CTRACK
   824:          jsr     L85F9
   825:          lda     #ERRORCODE_00_OK
   826:          sta     ERWORD
   827:          jsr     L81B2
   828:          cli                                     ; allow processing of job loop
   829:          rts
   830:  L8596:
   831:          lda     CMDBUF + 3
   832:          sta     AS
   833:          bit     HINIB
   834:          bvc     L85A4
   835:          lda     #$01
   836:          sta     VBC_IFR1
   837:  L85A4:
   838:          rts
   839:  L85A5:
   840:          ldx     #$0E
   841:          jsr     L85E9
   842:          lda     #ERRORCODE_31_SYNTAX_ERROR
   843:          jmp     GenerateErrorMessage
   844:          ; --------------
   845:  
   846:  L85AF:
   847:          lda     CMDSIZ
   848:          cmp     #$07
   849:          bcc     L85E8
   850:          lda     TRACK0
   851:          tay
   852:          sbc     #$01
   853:          asl     a
   854:          sta     MINSTP
   855:          cpy     #$24
   856:          php
   857:          ldy     CMDBUF + 6
   858:          sty     DRVTRK
   859:          dey
   860:          sty     NMIFLG
   861:          cpy     #$23
   862:          ror     a
   863:          plp
   864:          and     #$80
   865:          bcc     L85DC
   866:          bmi     L85E5
   867:          clc
   868:          lda     NMIFLG
   869:          adc     #$23
   870:          sta     NMIFLG
   871:          bmi     L85E5
   872:  L85DC:
   873:          bpl     L85E5
   874:          sec
   875:          lda     NMIFLG
   876:          sbc     #$23
   877:          sta     NMIFLG
   878:  L85E5:
   879:          jmp     L87BA
   880:  L85E8:
   881:          rts
   882:  L85E9:
   883:          stx     CTRACK
   884:          lda     AS
   885:          and     #$F0
   886:          ora     CTRACK
   887:          sta     AS
   888:          sta     CTRACK
   889:          rts
   890:  L85F6:
   891:          jsr     TestATN
   892:  L85F9:
   893:          lda     VBC_PB1
   894:          cmp     VBC_PB1
   895:          bne     L85F9
   896:          and     #$FF
   897:          bmi     L85F6
   898:          eor     BITCNT
   899:          and     #$04    ; VBC_PB1_1540_CLOCKIN?
   900:          beq     L85F9
   901:          lda     CTRACK
   902:  .if CompileDrive >= DRIVE_1571_05
   903:          jmp     LAB10
   904:  .else
   905:          sta     CIA_SDR
   906:  .endif
   907:          lda     BITCNT
   908:          eor     #$04
   909:          sta     BITCNT
   910:          lda     #CIA_ICR_B_SP
   911:  L8618:
   912:          bit     CIA_ICR
   913:          beq     L8618
   914:          rts
   915:  
   916:  L861E:
   917:          lda     CMDBUF + 3
   918:          cmp     #$24
   919:          bcc     L8627
   920:          sbc     #$23
   921:  L8627:
   922:          tax
   923:          lda     L9409 + 34,x
   924:          tax
   925:          dex
   926:          stx     CTRACK
   927:          clc
   928:          lda     CMDBUF + 4
   929:          adc     BYTE
   930:          cmp     CTRACK
   931:          bcc     L8643
   932:          sbc     CTRACK
   933:          beq     L8641
   934:          sec
   935:          sbc     #$01
   936:          .byte   ASM_BIT3
   937:  L8641:
   938:          lda     CTRACK
   939:  L8643:
   940:          sta     CMDBUF + 4
   941:          lda     #$88
   942:          sta     AF
   943:          rts
   944:  L864B:
   945:          ldx     JOBNUM
   946:          php
   947:          cli                                     ; allow processing of job loop
   948:          jsr     L9FB6
   949:          cmp     #$02
   950:          bcc     L865B
   951:          jsr     L8683
   952:          lda     JOBS0,x
   953:  L865B:
   954:          tax
   955:          plp
   956:          rts
   957:  L865E:
   958:          ldx     #$00
   959:          php
   960:          sei                                     ; disallow interrupts --> blocking job loop
   961:          lda     VDC_PB2
   962:          ora     #VDC_PB2_DRIVE0LED
   963:          sta     VDC_PB2
   964:          cli                                     ; allow processing of job loop
   965:          jsr     L9FB6
   966:          cmp     #$02
   967:          bcc     L8675
   968:          jsr     L8683
   969:  L8675:
   970:          sei                                     ; disallow interrupts --> blocking job loop
   971:          lda     VDC_PB2
   972:          and     # ~ VDC_PB2_DRIVELEDS
   973:          sta     VDC_PB2
   974:          lda     JOBS0,x
   975:          tax
   976:          plp
   977:          rts
   978:  L8683:
   979:          lda     #$FF
   980:          sta     JOBRTN
   981:          stx     JOBNUM
   982:          lda     CMDBUF + 2
   983:          sta     AF
   984:          sta     CMD
   985:          sta     LSTJOB,x
   986:  .if CompileDrive >= DRIVE_1571_05
   987:          sta     JOBS0,x
   988:  .else
   989:          sta     JOBS0
   990:  .endif
   991:          jsr     L9FB6
   992:          jmp     LD599
   993:  L869D:
   994:          jsr     TestATN
   995:  L86A0:
   996:          lda     VBC_PB1
   997:          cmp     VBC_PB1
   998:          bne     L86A0
   999:          and     #$FF
  1000:          bmi     L869D
  1001:          eor     BITCNT
  1002:          and     #$04    ; VBC_PB1_1540_CLOCKIN?
  1003:          beq     L86A0
  1004:          lda     BITCNT
  1005:          eor     #$04
  1006:          sta     BITCNT
  1007:          rts
  1008:  L86B9:
  1009:          .byte   $00,$15,$00,$00,$00,$15,$00,$BC
  1010:          .byte   $34,$DE,$FE,$DC,$15,$15,$00
  1011:  L86C8:
  1012:          .addr   L89EC
  1013:          .addr   L89EF
  1014:          .addr   L89FD
  1015:          .addr   L8A03
  1016:          .addr   L8A08
  1017:          .addr   L8A09
  1018:          .addr   L87BA
  1019:          .addr   L8A86
  1020:          .addr   L8C57
  1021:          .addr   L8D67
  1022:          .addr   L8DF6
  1023:  .if CompileDrive >= DRIVE_1571CR
  1024:          .addr   LACC7
  1025:          .addr   LAD2E
  1026:          .addr   LAD93
  1027:  .else
  1028:          .addr   L8EC6
  1029:          .addr   L8F18
  1030:          .addr   L8F5F
  1031:  .endif
  1032:          .addr   L89B3
  1033:  
  1034:  L86E6:
  1035:          sei                                     ; disallow interrupts --> blocking job loop
  1036:          pha
  1037:          tax
  1038:          lda     L86B9,x
  1039:          sta     ACTJOB
  1040:          lda     AS
  1041:          ora     #$80
  1042:          sta     AS
  1043:          asl     ACTJOB
  1044:          bcc     L86FD
  1045:          lda     CMDBUF + 3
  1046:          sta     NMIFLG
  1047:  L86FD:
  1048:          asl     ACTJOB
  1049:          bcc     L8706
  1050:          lda     CMDBUF + 4
  1051:          sta     SECTR
  1052:  L8706:
  1053:          asl     ACTJOB
  1054:          bcc     L871B
  1055:          lda     VDC_PB2
  1056:          and     #VDC_PB2_WRITEPROTECT
  1057:          bne     L871B
  1058:          lda     HINIB
  1059:          ora     #$08
  1060:          sta     HINIB
  1061:          ldx     #$08
  1062:          stx     CTRACK
  1063:  L871B:
  1064:          asl     ACTJOB
  1065:          bcc     L8722
  1066:          jsr     L8794
  1067:  L8722:
  1068:          asl     ACTJOB
  1069:          bcc     L8729
  1070:          jsr     L87BA
  1071:  L8729:
  1072:          asl     ACTJOB
  1073:          bcc     L8730
  1074:          jsr     L87B0
  1075:  L8730:
  1076:          jsr     L8954
  1077:          asl     ACTJOB
  1078:          bcc     L873A
  1079:          jsr     L892A
  1080:  L873A:
  1081:          lda     #$00
  1082:          pla
  1083:          asl     a
  1084:          tax
  1085:          lda     L86C8,x
  1086:          sta     T0
  1087:          lda     L86C8 + 1,x
  1088:          sta     T1
  1089:  .if CompileDrive >= DRIVE_1571CR_01
  1090:          jsr     L877C
  1091:  .endif
  1092:          jsr     L8761
  1093:          jsr     LF98F
  1094:  .if CompileDrive >= DRIVE_1571CR_01
  1095:          jsr     L8788
  1096:  .endif
  1097:          ldx     L01B0
  1098:          cpx     #$02
  1099:          php
  1100:          asl     ACTJOB
  1101:          bcs     L875F
  1102:          plp
  1103:          bcc     L8760
  1104:          jmp     L838C
  1105:  L875F:
  1106:          plp
  1107:  L8760:
  1108:          rts
  1109:  
  1110:  L8761:
  1111:          jmp     (T0)
  1112:  
  1113:  L8764:
  1114:          php
  1115:          sei                                     ; disallow interrupts --> blocking job loop
  1116:          lda     VDC_PB2
  1117:          ora     #VDC_PB2_DRIVE0MOTOR
  1118:          sta     VDC_PB2
  1119:          plp
  1120:          rts
  1121:  L8770:
  1122:          php
  1123:          sei                                     ; disallow interrupts --> blocking job loop
  1124:          lda     VDC_PB2
  1125:          and     # ~ VDC_PB2_DRIVE0MOTOR
  1126:          sta     VDC_PB2
  1127:          plp
  1128:          rts
  1129:  L877C:
  1130:          php
  1131:          sei                                     ; disallow interrupts --> blocking job loop
  1132:          lda     VDC_PB2
  1133:          ora     #VDC_PB2_DRIVE0LED
  1134:          sta     VDC_PB2
  1135:          plp
  1136:          rts
  1137:  L8788:
  1138:          php
  1139:          sei                                     ; disallow interrupts --> blocking job loop
  1140:          lda     VDC_PB2
  1141:          and     # ~ VDC_PB2_DRIVELEDS
  1142:          sta     VDC_PB2
  1143:          plp
  1144:          rts
  1145:  L8794:
  1146:          php
  1147:          sei                                     ; disallow interrupts --> blocking job loop
  1148:          lda     DRVST
  1149:  .if CompileDrive >= DRIVE_1571_05
  1150:          bmi     L87A2
  1151:          and     #$30
  1152:          beq     L87A4
  1153:          lda     #$20
  1154:  .else
  1155:          cmp     #$20
  1156:          beq     L87AA
  1157:          lda     CMDBUF + 2
  1158:          and     #$01
  1159:          sta     CDRIVE
  1160:          jsr     L8764
  1161:          lda     #$A0
  1162:  .endif
  1163:          sta     DRVST
  1164:  
  1165:  .if CompileDrive >= DRIVE_1571_05
  1166:  L87A2:
  1167:          plp
  1168:  .else
  1169:  L87AA:
  1170:          lda     #$32
  1171:          sta     ACLTIM
  1172:          plp
  1173:  .endif
  1174:          rts
  1175:  .if CompileDrive >= DRIVE_1571_05
  1176:  L87A4:
  1177:          plp
  1178:          sta     CDRIVE
  1179:          jmp     LF97E
  1180:   .if CompileDrive >= DRIVE_1571CR_01
  1181:   .else
  1182:          FillNOP 6
  1183:   .endif
  1184:  .endif
  1185:  L87B0:
  1186:          php
  1187:          cli                                     ; allow processing of job loop
  1188:  L87B2:
  1189:          lda     DRVST
  1190:          cmp     #$20
  1191:          bne     L87B2
  1192:          plp
  1193:          rts
  1194:  L87BA:
  1195:          php
  1196:          cli                                     ; allow processing of job loop
  1197:          lda     NMIFLG
  1198:          asl     a
  1199:          cmp     MINSTP
  1200:          beq     L87DD
  1201:  L87C3:
  1202:          lda     NMIFLG
  1203:          asl     a
  1204:          cmp     MINSTP
  1205:          beq     L87D8
  1206:          bcs     L87D2
  1207:          jsr     L87E7
  1208:          jmp     L87C3
  1209:  L87D2:
  1210:          jsr     L87DF
  1211:          jmp     L87C3
  1212:  L87D8:
  1213:  .if CompileDrive >= DRIVE_1571 .AND CompileDrive < DRIVE_1571CR
  1214:          ldy     #$10
  1215:  .else
  1216:          ldy     #$12
  1217:  .endif
  1218:          jsr     L8829
  1219:  L87DD:
  1220:          plp
  1221:          rts
  1222:  L87DF:
  1223:          lda     MINSTP
  1224:          clc
  1225:          adc     #$01
  1226:          jmp     L8814
  1227:  L87E7:
  1228:          ldy     #$63
  1229:  L87E9:
  1230:          lda     VBC_PAUNBUF1
  1231:          ror     a
  1232:          php
  1233:          lda     VBC_PAUNBUF1
  1234:          ror     a
  1235:          ror     a
  1236:          plp
  1237:          and     #$80
  1238:          bcc     L87FC
  1239:          bpl     L880F
  1240:          bmi     L87FE
  1241:  L87FC:
  1242:          bmi     L880F
  1243:  L87FE:
  1244:          dey
  1245:          bne     L87E9
  1246:          bcs     L880F
  1247:          lda     VDC_PB2
  1248:          and     #VDC_PB2_STEPPER
  1249:          bne     L880F
  1250:          lda     #$00
  1251:          sta     MINSTP
  1252:          rts
  1253:  L880F:
  1254:          lda     MINSTP
  1255:          sec
  1256:          sbc     #$01
  1257:  L8814:
  1258:          sta     MINSTP
  1259:          and     #$03
  1260:          sta     T0
  1261:          php
  1262:          sei                                     ; disallow interrupts --> blocking job loop
  1263:          lda     VDC_PB2
  1264:          and     # ~ VDC_PB2_STEPPER
  1265:          ora     T0
  1266:          sta     VDC_PB2
  1267:          plp
  1268:  .if CompileDrive >= DRIVE_1571CR
  1269:          ldy     #$05
  1270:  .elseif CompileDrive >= DRIVE_1571
  1271:          ldy     #$06
  1272:  .else
  1273:          ldy     #$08
  1274:  .endif
  1275:  L8829:
  1276:          jsr     L8830
  1277:          dey
  1278:          bne     L8829
  1279:          rts
  1280:  L8830:
  1281:          ldx     #$02
  1282:  .if CompileDrive >= DRIVE_1571_05
  1283:          lda     #$6F
  1284:  .else
  1285:          lda     #$00
  1286:  .endif
  1287:  L8834:
  1288:          adc     #$01
  1289:          bne     L8834
  1290:          dex
  1291:          bne     L8834
  1292:          rts
  1293:  
  1294:  .if CompileDrive >= DRIVE_1571CR
  1295:  .else
  1296:  
  1297:  L883C:
  1298:          nop
  1299:          lda     WD177x_STATUS
  1300:          lsr     a
  1301:          lsr     a
  1302:          lsr     a
  1303:          and     #$03
  1304:          tax
  1305:          lda     L8A82,x
  1306:          sta     L01B0
  1307:          tax
  1308:          rts
  1309:  L884E:
  1310:          pha
  1311:          jsr     L877C
  1312:          pla
  1313:          sta     WD177x_COMMAND
  1314:          lda     #$01
  1315:          nop
  1316:  L8859:
  1317:          bit     WD177x_STATUS
  1318:          beq     L8859
  1319:          jmp     LA47E
  1320:  L8861:
  1321:          jsr     L8788
  1322:          lda     #$01
  1323:  L8866:
  1324:          bit     WD177x_STATUS
  1325:          bne     L8866
  1326:          rts
  1327:  .endif
  1328:  
  1329:  L886C:
  1330:          lda     ACLSTP
  1331:          sec
  1332:          sbc     #$01
  1333:          sta     CTRACK
  1334:          lda     CMDBUF + 4
  1335:          clc
  1336:          adc     BYTE
  1337:          cmp     RSTEPS
  1338:          beq     L8884
  1339:          bcc     L8884
  1340:          sbc     RSTEPS
  1341:          clc
  1342:          adc     CTRACK
  1343:  L8884:
  1344:          sta     CMDBUF + 4
  1345:          rts
  1346:  L8888:
  1347:          ldy     #$00
  1348:          ldx     #$00
  1349:          lda     CMDBUF + 3
  1350:          and     #$3F
  1351:          sta     CMDBUF + 3
  1352:          sta     ACLSTP
  1353:          pha
  1354:          lda     CMDBUF + 7
  1355:          pha
  1356:          inc     CMDBUF + 4
  1357:  L889E:
  1358:          lda     CMDBUF + 3
  1359:          sta     CMDBUF + 11,y
  1360:          inc     CMDBUF + 3
  1361:          inx
  1362:          tya
  1363:          clc
  1364:          adc     CMDBUF + 4
  1365:          tay
  1366:          cpy     #$20
  1367:          bcs     L88BE
  1368:          cpy     CMDBUF + 7
  1369:          bcc     L88D1
  1370:          bne     L88CB
  1371:          cpx     CMDBUF + 7
  1372:          beq     L88CB
  1373:  L88BE:
  1374:          dec     CMDBUF + 4
  1375:          pla
  1376:          sta     CMDBUF + 7
  1377:          pla
  1378:          sta     CMDBUF + 3
  1379:          sec
  1380:          rts
  1381:  L88CB:
  1382:          tya
  1383:          sec
  1384:          sbc     CMDBUF + 7
  1385:          tay
  1386:  L88D1:
  1387:          cpx     CMDBUF + 7
  1388:          bne     L889E
  1389:          stx     MYPA
  1390:          dex
  1391:          txa
  1392:          clc
  1393:          adc     ACLSTP
  1394:          sta     RSTEPS
  1395:          cmp     ACLSTP
  1396:          bcc     L88BE
  1397:          pla
  1398:          sta     CMDBUF + 7
  1399:          pla
  1400:          sta     CMDBUF + 3
  1401:          dec     CMDBUF + 4
  1402:          clc
  1403:          rts
  1404:  L88F0:
  1405:          lda     L01B0
  1406:          pha
  1407:          ldy     #$00
  1408:  .if CompileDrive >= DRIVE_1571CR
  1409:  L88F8:
  1410:          lda     CMDBUF + 11,y
  1411:          sta     SECTR
  1412:          tya
  1413:          pha
  1414:          jsr     LAD2E
  1415:          pla
  1416:          tay
  1417:  .else
  1418:          sty     STAB
  1419:  L88F8:
  1420:          ldy     STAB
  1421:          lda     CMDBUF + 11,y
  1422:          sta     WD177x_SECTOR
  1423:          jsr     L8F18
  1424:  .endif
  1425:          ldx     L01B0
  1426:          cpx     #$02
  1427:          bcs     L8915
  1428:  .if CompileDrive >= DRIVE_1571CR
  1429:          iny
  1430:  .else
  1431:          inc     STAB
  1432:          ldy     STAB
  1433:  .endif
  1434:          cpy     CMDBUF + 7
  1435:          bne     L88F8
  1436:          clc
  1437:          .byte   ASM_BIT2
  1438:  L8915:
  1439:          sec
  1440:          pla
  1441:          sta     L01B0
  1442:  L891A:
  1443:          rts
  1444:  L891B:
  1445:          lda     CMDSIZ
  1446:          cmp     #$07
  1447:          bcc     L891A
  1448:          lda     CMDBUF + 6
  1449:          sta     NMIFLG
  1450:          jmp     L87BA
  1451:  L892A:
  1452:          lda     L01B0
  1453:          pha
  1454:  .if CompileDrive >= DRIVE_1571CR
  1455:          lda     REVCNT
  1456:          asl     a
  1457:          sta     TMP
  1458:  L88FF:
  1459:          jsr     L89E8
  1460:  .else
  1461:          jsr     L8A27
  1462:  .endif
  1463:          ldx     L01B0
  1464:          cpx     #$02
  1465:  .if CompileDrive >= DRIVE_1571CR
  1466:          bcc     L8923
  1467:          dec     TMP
  1468:          bne     L88FF
  1469:          jsr     L89EF
  1470:          lda     REVCNT
  1471:          asl     a
  1472:          sta     TMP
  1473:  L8915_CR:
  1474:          jsr     L89E8
  1475:  .else
  1476:          bcc     L8945
  1477:          jsr     L89EF
  1478:          jsr     L8A27
  1479:  .endif
  1480:          ldx     L01B0
  1481:          cpx     #$02
  1482:  .if CompileDrive >= DRIVE_1571CR
  1483:          bcc     L8923
  1484:          dec     TMP
  1485:          bne     L8915_CR
  1486:  .else
  1487:          bcs     L894F
  1488:  .endif
  1489:  L8923:
  1490:  L8945:
  1491:          lda     NMIFLG
  1492:          asl     a
  1493:          cmp     MINSTP
  1494:          beq     L894F
  1495:          jsr     L87BA
  1496:  L894F:
  1497:          pla
  1498:          sta     L01B0
  1499:          rts
  1500:  L8954:
  1501:          php
  1502:          sei                                     ; disallow interrupts --> blocking job loop
  1503:          lda     HINIB
  1504:          and     #$10
  1505:          cmp     #$10
  1506:          jsr     L93F3
  1507:          plp
  1508:          rts
  1509:  L8961:
  1510:          ldy     MYPA
  1511:          dey
  1512:          lda     #$FF
  1513:  L8966:
  1514:          cmp     CMDBUF + 11,y
  1515:          bcc     L896E
  1516:          lda     CMDBUF + 11,y
  1517:  L896E:
  1518:          dey
  1519:          bpl     L8966
  1520:          sta     ACLSTP
  1521:          ldy     MYPA
  1522:          dey
  1523:          lda     #$00
  1524:  L8978:
  1525:          cmp     CMDBUF + 11,y
  1526:          bcs     L8980
  1527:          lda     CMDBUF + 11,y
  1528:  L8980:
  1529:          dey
  1530:          bpl     L8978
  1531:          sta     RSTEPS
  1532:          rts
  1533:  L8986:
  1534:          ldx     MYPA
  1535:          ldy     #$00
  1536:  L898A:
  1537:          lda     CMDBUF + 11,y
  1538:          cmp     ACLSTP
  1539:          beq     L8996
  1540:          iny
  1541:          cpy     MYPA
  1542:          bne     L898A
  1543:  L8996:
  1544:          sty     AF
  1545:          lda     ACLSTP
  1546:          clc
  1547:          adc     #$01
  1548:          sta     CTRACK
  1549:          ldx     #$FF
  1550:  L89A1:
  1551:          lda     CMDBUF + 11,y
  1552:          cmp     CTRACK
  1553:          beq     L89B2
  1554:          inx
  1555:          iny
  1556:          cpy     MYPA
  1557:          bne     L89A1
  1558:          ldy     #$00
  1559:          beq     L89A1
  1560:  L89B2:
  1561:          rts
  1562:  
  1563:  L89B3:
  1564:          lda     T0
  1565:          pha
  1566:          php
  1567:          sei                                     ; disallow interrupts --> blocking job loop
  1568:  .if CompileDrive >= DRIVE_1571CR
  1569:  .else
  1570:          lda     WD177x_TRACK
  1571:          sta     WD177x_DATA
  1572:          lda     #$18
  1573:          jsr     L884E
  1574:          jsr     L8861
  1575:  .endif
  1576:          ldx     #$00
  1577:          ldy     #$80
  1578:          lda     WD177x_STATUS
  1579:  .if CompileDrive >= DRIVE_1571CR
  1580:          and     #$40
  1581:  .else
  1582:          and     #$02
  1583:  .endif
  1584:          sta     T0
  1585:  L89D1:
  1586:          lda     WD177x_STATUS
  1587:  .if CompileDrive >= DRIVE_1571CR
  1588:          and     #$40
  1589:  .else
  1590:          and     #$02
  1591:  .endif
  1592:          cmp     T0
  1593:          beq     L89DE
  1594:          plp
  1595:          jmp     L89E7
  1596:  L89DE:
  1597:          dex
  1598:          bne     L89D1
  1599:          dey
  1600:          bne     L89D1
  1601:          plp
  1602:          sec
  1603:          .byte   ASM_BIT2
  1604:  L89E7:
  1605:          clc
  1606:          pla
  1607:          sta     T0
  1608:          rts
  1609:  
  1610:  L89EC:
  1611:          jmp     RESET
  1612:  
  1613:  L89EF:
  1614:          lda     #$B4
  1615:          sta     MINSTP
  1616:          lda     #$00
  1617:  .if CompileDrive >= DRIVE_1571CR
  1618:  .else
  1619:          sta     WD177x_TRACK
  1620:  .endif
  1621:          sta     NMIFLG
  1622:          jmp     L87BA
  1623:  L89FD:
  1624:          lda     VDC_PB2
  1625:          and     #VDC_PB2_WRITEPROTECT
  1626:          rts
  1627:  L8A03:
  1628:          sty     NMIFLG
  1629:          stx     MINSTP
  1630:          rts
  1631:  L8A08:
  1632:          rts
  1633:  L8A09:
  1634:          jsr     L89EF
  1635:  
  1636:  .if CompileDrive >= DRIVE_1571CR
  1637:          jsr     L89E8
  1638:          lda     L8A7E,x
  1639:  .else
  1640:          jsr     L89B3
  1641:          bcs     L8A20
  1642:          jsr     L8A27
  1643:          lda     L8A7E,x
  1644:  .endif
  1645:  
  1646:          sta     MYPA
  1647:          sta     RSTEPS
  1648:          lda     #$01
  1649:          sta     ACLSTP
  1650:          rts
  1651:  
  1652:  .if CompileDrive >= DRIVE_1571CR
  1653:  L89E8:
  1654:          jsr     LABEC
  1655:  .else
  1656:  L8A20:
  1657:          lda     #$0D
  1658:          sta     L01B0
  1659:          bne     L8A65
  1660:  L8A27:
  1661:          lda     #$00
  1662:          sta     RLINDX
  1663:          sta     WORK
  1664:          lda     #$C8
  1665:          jsr     L884E
  1666:          ldx     #$00
  1667:          ldy     #$06
  1668:  L8A37:
  1669:          lda     WD177x_STATUS
  1670:          and     #$03
  1671:          lsr     a
  1672:          bcc     L8A4A
  1673:          beq     L8A37
  1674:          lda     WD177x_DATA
  1675:          sta     STAB,x
  1676:          inx
  1677:          dey
  1678:          bne     L8A37
  1679:  L8A4A:
  1680:          jsr     L8861
  1681:          jsr     L883C
  1682:  .endif
  1683:  
  1684:          lda     STAB
  1685:          asl     a
  1686:          sta     MINSTP
  1687:          lda     STAB + 3
  1688:  L8A57:
  1689:          and     #$03
  1690:          tax
  1691:          lda     L8A72,x
  1692:          sta     RLINDX
  1693:          lda     L8A76,x
  1694:          sta     WORK
  1695:  L8A65:
  1696:          lda     AS
  1697:          and     #$80
  1698:          ora     L01B0
  1699:          ora     L8A7A,x
  1700:          sta     AS
  1701:  .if CompileDrive >= DRIVE_1571CR
  1702:          stx     L01B5
  1703:  .endif
  1704:          rts
  1705:  L8A72:
  1706:          .byte   $7F,$FF,$FF,$FF
  1707:  L8A76:
  1708:          .byte   $01,$01,$02,$04
  1709:  L8A7A:
  1710:          .byte   $00,$10,$20,$30
  1711:  L8A7E:
  1712:          .byte   $1A,$10,$09,$05
  1713:  
  1714:  .if CompileDrive >= DRIVE_1571CR
  1715:  .else
  1716:  L8A82:
  1717:          .byte   $01,$09,$02,$03
  1718:  .endif
  1719:  
  1720:  L8A86:
  1721:  
  1722:  .if CompileDrive >= DRIVE_1571CR
  1723:          bit     WD177x_STATUS
  1724:          bvc     L8A86
  1725:  L8A25_CR:
  1726:          bit     WD177x_STATUS
  1727:          bvs     L8A25_CR
  1728:          bit     L01B4
  1729:          bmi     L8A32
  1730:          lda     #$28
  1731:          .byte   ASM_BIT3
  1732:  L8A32:
  1733:          lda     #$29
  1734:          sta     WD177x_COMMAND
  1735:          lda     WD177x_STATUS
  1736:          ora     #$02
  1737:          sta     WD177x_COMMAND
  1738:          lda     #$4E
  1739:          sta     WD177x_SECTOR
  1740:  .else
  1741:          lda     #$F8
  1742:          jsr     L884E
  1743:  .endif
  1744:          bit     HINIB
  1745:          bvc     L8AF1
  1746:          ldx     #$50
  1747:  .if CompileDrive >= DRIVE_1571CR
  1748:  .else
  1749:  L8A91:
  1750:          lda     WD177x_STATUS
  1751:          and     #$03
  1752:          lsr     a
  1753:          bcc     L8AF9
  1754:          beq     L8A91
  1755:  .endif
  1756:          lda     #$4E
  1757:  .if CompileDrive >= DRIVE_1571CR
  1758:  L8A91:
  1759:          bit     WD177x_STATUS
  1760:          bpl     L8A91
  1761:          sta     WD177x_SECTOR
  1762:  .else
  1763:          sta     WD177x_DATA
  1764:  .endif
  1765:          dex
  1766:          bne     L8A91
  1767:          ldx     #$0C
  1768:  L8AA5:
  1769:  .if CompileDrive >= DRIVE_1571CR
  1770:  .else
  1771:          lda     WD177x_STATUS
  1772:          and     #$03
  1773:          lsr     a
  1774:          bcc     L8AF9
  1775:          beq     L8AA5
  1776:  .endif
  1777:          lda     #$00
  1778:  .if CompileDrive >= DRIVE_1571CR
  1779:  L8A5B:
  1780:          bit     WD177x_STATUS
  1781:          bpl     L8A5B
  1782:          sta     WD177x_SECTOR
  1783:  .else
  1784:          sta     WD177x_DATA
  1785:  .endif
  1786:          dex
  1787:  .if CompileDrive >= DRIVE_1571CR
  1788:          bne     L8A5B
  1789:          lda     WD177x_TRACK
  1790:          and     #$F8
  1791:          ora     CSG5710_4010 + 3
  1792:          sta     WD177x_TRACK
  1793:  
  1794:          lda     CSG5710_4010 + 1
  1795:  L8A74:
  1796:          bit     WD177x_STATUS
  1797:          bpl     L8A74
  1798:          sta     WD177x_SECTOR
  1799:          lda     WD177x_STATUS
  1800:          ora     #$04
  1801:          sta     WD177x_COMMAND
  1802:          ldx     #$02
  1803:  
  1804:          lda     CSG5710_4010 + 1
  1805:  L8A89:
  1806:          bit     WD177x_STATUS
  1807:          bpl     L8A89
  1808:          sta     WD177x_SECTOR
  1809:  .else
  1810:          bne     L8AA5
  1811:          ldx     #$03
  1812:  L8AB9:
  1813:          lda     WD177x_STATUS
  1814:          and     #$03
  1815:          lsr     a
  1816:          bcc     L8AF9
  1817:          beq     L8AB9
  1818:          lda     #$F6
  1819:          sta     WD177x_DATA
  1820:  .endif
  1821:          dex
  1822:  
  1823:  .if CompileDrive >= DRIVE_1571CR
  1824:          bne     L8A89
  1825:  .else
  1826:          bne     L8AB9
  1827:  L8ACB:
  1828:          lda     WD177x_STATUS
  1829:          and     #$03
  1830:          lsr     a
  1831:          bcc     L8AF9
  1832:          beq     L8ACB
  1833:  .endif
  1834:          lda     #$FC
  1835:  .if CompileDrive >= DRIVE_1571CR
  1836:  L8A96:
  1837:          bit     WD177x_STATUS
  1838:          bpl     L8A96
  1839:          sta     WD177x_SECTOR
  1840:          lda     WD177x_STATUS
  1841:          and     #$FB
  1842:          sta     WD177x_COMMAND
  1843:  .else
  1844:          sta     WD177x_DATA
  1845:  .endif
  1846:  
  1847:          ldx     #$32
  1848:  
  1849:  .if CompileDrive >= DRIVE_1571CR
  1850:  .else
  1851:          nop
  1852:  L8ADD:
  1853:          lda     WD177x_STATUS
  1854:          and     #$03
  1855:          lsr     a
  1856:          bcc     L8AF9
  1857:          beq     L8ADD
  1858:  .endif
  1859:          lda     #$4E
  1860:  
  1861:  .if CompileDrive >= DRIVE_1571CR
  1862:  L8AAA:
  1863:          bit     WD177x_STATUS
  1864:          bpl     L8AAA
  1865:          sta     WD177x_SECTOR
  1866:  .else
  1867:          sta     WD177x_DATA
  1868:  .endif
  1869:          dex
  1870:  .if CompileDrive >= DRIVE_1571CR
  1871:          bne     L8AAA
  1872:          beq     L8AC6
  1873:  L8AF1:
  1874:          ldx     #$3C
  1875:  .else
  1876:          bne     L8ADD
  1877:          beq     L8B05
  1878:  L8AF1:
  1879:          ldx     #$3C
  1880:  L8AF3:
  1881:          lda     WD177x_STATUS
  1882:          and     #$03
  1883:          lsr     a
  1884:  L8AF9:
  1885:          bcc     L8B23
  1886:          beq     L8AF3
  1887:  .endif
  1888:          lda     #$4E
  1889:  .if CompileDrive >= DRIVE_1571CR
  1890:  L8ABB:
  1891:          bit     WD177x_STATUS
  1892:          bpl     L8ABB
  1893:          sta     WD177x_SECTOR
  1894:  .else
  1895:          sta     WD177x_DATA
  1896:  .endif
  1897:          dex
  1898:  
  1899:  .if CompileDrive >= DRIVE_1571CR
  1900:          bne     L8ABB
  1901:  L8AC6:
  1902:          ldy     #$01
  1903:  L8AC8:
  1904:  .else
  1905:          bne     L8AF3
  1906:  L8B05:
  1907:          ldy     #$01
  1908:  L8B07:
  1909:          ldx     #$0C
  1910:  L8B09:
  1911:          lda     WD177x_STATUS
  1912:          and     #$03
  1913:          lsr     a
  1914:          bcc     L8B23
  1915:          beq     L8B09
  1916:  .endif
  1917:          lda     #$00
  1918:  .if CompileDrive >= DRIVE_1571CR
  1919:          ldx     #$0C
  1920:  L8ACC:
  1921:          bit     WD177x_STATUS
  1922:          bpl     L8ACC
  1923:          sta     WD177x_SECTOR
  1924:  .else
  1925:          sta     WD177x_DATA
  1926:  .endif
  1927:          dex
  1928:  .if CompileDrive >= DRIVE_1571CR
  1929:          bne     L8ACC
  1930:          lda     CSG5710_4010 + 0
  1931:  L8ADA:
  1932:          bit     WD177x_STATUS
  1933:          bpl     L8ADA
  1934:          sta     WD177x_SECTOR
  1935:          lda     WD177x_STATUS
  1936:          ora     #$14
  1937:          sta     WD177x_COMMAND
  1938:          lda     WD177x_TRACK
  1939:          and     #$F8
  1940:          ora     CSG5710_4010 + 2
  1941:          sta     WD177x_TRACK
  1942:          ldx     #$02
  1943:          lda     CSG5710_4010 + 0
  1944:  L8AFA:
  1945:          bit     WD177x_STATUS
  1946:          bpl     L8AFA
  1947:          sta     WD177x_SECTOR
  1948:  .else
  1949:          bne     L8B09
  1950:          ldx     #$03
  1951:  L8B1D:
  1952:          lda     WD177x_STATUS
  1953:          and     #$03
  1954:          lsr     a
  1955:  L8B23:
  1956:          bcc     L8B7C
  1957:          beq     L8B1D
  1958:          lda     #$F5
  1959:          sta     WD177x_DATA
  1960:  .endif
  1961:          dex
  1962:  
  1963:  .if CompileDrive >= DRIVE_1571CR
  1964:          bne     L8AFA
  1965:          lda     CSG5710_4010 + 5
  1966:  L8B08:
  1967:          bit     WD177x_STATUS
  1968:          bpl     L8B08
  1969:          sta     WD177x_SECTOR
  1970:          lda     WD177x_STATUS
  1971:          and     #$FB
  1972:          sta     WD177x_COMMAND
  1973:  .else
  1974:          bne     L8B1D
  1975:  L8B2F:
  1976:          lda     WD177x_STATUS
  1977:          and     #$03
  1978:          lsr     a
  1979:          bcc     L8B7C
  1980:          beq     L8B2F
  1981:          lda     #$FE
  1982:          sta     WD177x_DATA
  1983:  L8B3E:
  1984:          lda     WD177x_STATUS
  1985:          and     #$03
  1986:          lsr     a
  1987:          bcc     L8B7C
  1988:          beq     L8B3E
  1989:  .endif
  1990:  
  1991:          lda     L01B0
  1992:  
  1993:  .if CompileDrive >= DRIVE_1571CR
  1994:  L8B1B:
  1995:          bit     WD177x_STATUS
  1996:          bpl     L8B1B
  1997:          sta     WD177x_SECTOR
  1998:  .else
  1999:          sta     WD177x_DATA
  2000:  L8B4E:
  2001:          lda     WD177x_STATUS
  2002:          and     #$03
  2003:          lsr     a
  2004:          bcc     L8B7C
  2005:          beq     L8B4E
  2006:  .endif
  2007:  
  2008:          lda     HINIB
  2009:          and     #$10
  2010:          bne     L8B61
  2011:          lda     #$00
  2012:          .byte   ASM_BIT3
  2013:  L8B61:
  2014:          lda     #$01
  2015:  .if CompileDrive >= DRIVE_1571CR
  2016:  L8B2E:
  2017:          bit     WD177x_STATUS
  2018:          bpl     L8B2E
  2019:          sta     WD177x_SECTOR
  2020:  .else
  2021:          sta     WD177x_DATA
  2022:  L8B66:
  2023:          lda     WD177x_STATUS
  2024:          and     #$03
  2025:          lsr     a
  2026:          bcc     L8B7C
  2027:          beq     L8B66
  2028:  .endif
  2029:  
  2030:          lda     CMDBUF + 10,y
  2031:  
  2032:  .if CompileDrive >= DRIVE_1571CR
  2033:  L8B39:
  2034:          bit     WD177x_STATUS
  2035:          bpl     L8B39
  2036:          sta     WD177x_SECTOR
  2037:  .else
  2038:          sta     WD177x_DATA
  2039:  L8B76:
  2040:          lda     WD177x_STATUS
  2041:          and     #$03
  2042:          lsr     a
  2043:  L8B7C:
  2044:          bcc     L8BB1
  2045:          beq     L8B76
  2046:  .endif
  2047:  
  2048:          lda     CMDBUF + 5
  2049:  
  2050:  .if CompileDrive >= DRIVE_1571CR
  2051:  L8B44:
  2052:          bit     WD177x_STATUS
  2053:          bpl     L8B44
  2054:          sta     WD177x_SECTOR
  2055:  L8B4C:
  2056:          bit     WD177x_STATUS
  2057:          bpl     L8B4C
  2058:          sta     WD177x_SECTOR
  2059:          lda     WD177x_STATUS
  2060:          and     #$F7
  2061:          sta     WD177x_COMMAND
  2062:  L8B5C:
  2063:          bit     WD177x_STATUS
  2064:          bpl     L8B5C
  2065:          sta     WD177x_SECTOR
  2066:  .else
  2067:          sta     WD177x_DATA
  2068:  L8B86:
  2069:          lda     WD177x_STATUS
  2070:          and     #$03
  2071:          lsr     a
  2072:          bcc     L8BB1
  2073:          beq     L8B86
  2074:          lda     #$F7
  2075:          sta     WD177x_DATA
  2076:          ldx     #$16
  2077:  L8B97:
  2078:          lda     WD177x_STATUS
  2079:          and     #$03
  2080:          lsr     a
  2081:          bcc     L8BB1
  2082:          beq     L8B97
  2083:  .endif
  2084:  
  2085:          lda     #$4E
  2086:  
  2087:  .if CompileDrive >= DRIVE_1571CR
  2088:  L8B66_CR:
  2089:          bit        WD177x_STATUS
  2090:          bpl     L8B66_CR
  2091:          sta     WD177x_SECTOR
  2092:          lda     WD177x_STATUS
  2093:          ora     #$08
  2094:          sta     WD177x_COMMAND
  2095:          lda     #$4E
  2096:  L8B78:
  2097:          bit     WD177x_STATUS
  2098:          bpl     L8B78
  2099:          sta     WD177x_SECTOR
  2100:          lda     WD177x_STATUS
  2101:          and     #$EF
  2102:          sta     WD177x_COMMAND
  2103:          ldx     #$14
  2104:          lda     #$4E
  2105:  L8B8C:
  2106:          bit     WD177x_STATUS
  2107:          bpl     L8B8C
  2108:          sta     WD177x_SECTOR
  2109:  .else
  2110:          sta     WD177x_DATA
  2111:  .endif
  2112:  
  2113:          dex
  2114:  .if CompileDrive >= DRIVE_1571CR
  2115:          bne     L8B8C
  2116:  .else
  2117:          bne     L8B97
  2118:  .endif
  2119:  
  2120:          ldx     #$0C
  2121:  
  2122:  .if CompileDrive >= DRIVE_1571CR
  2123:  .else
  2124:  L8BAB:
  2125:          lda     WD177x_STATUS
  2126:          and     #$03
  2127:          lsr     a
  2128:  L8BB1:
  2129:          bcc     L8BEB
  2130:          beq     L8BAB
  2131:  .endif
  2132:          lda     #$00
  2133:  .if CompileDrive >= DRIVE_1571CR
  2134:  L8B9B:
  2135:          bit     WD177x_STATUS
  2136:          bpl     L8B9B
  2137:          sta     WD177x_SECTOR
  2138:  .else
  2139:          sta     WD177x_DATA
  2140:  .endif
  2141:          dex
  2142:  
  2143:  .if CompileDrive >= DRIVE_1571CR
  2144:          bne     L8B9B
  2145:          lda     CSG5710_4010 + 0
  2146:  L8BA9:
  2147:          bit     WD177x_STATUS
  2148:          bpl     L8BA9
  2149:          sta     WD177x_SECTOR
  2150:          lda     WD177x_STATUS
  2151:          ora     #$14
  2152:          sta     WD177x_COMMAND
  2153:          ldx     #$02
  2154:          lda     CSG5710_4010 + 0
  2155:  L8BBE:
  2156:          bit     WD177x_STATUS
  2157:          bpl     L8BBE
  2158:          sta     WD177x_SECTOR
  2159:  .else
  2160:          bne     L8BAB
  2161:          ldx     #$03
  2162:  L8BBF:
  2163:          lda     WD177x_STATUS
  2164:          and     #$03
  2165:          lsr     a
  2166:          bcc     L8BEB
  2167:          beq     L8BBF
  2168:          lda     #$F5
  2169:          sta     WD177x_DATA
  2170:  .endif
  2171:          dex
  2172:  
  2173:  .if CompileDrive >= DRIVE_1571CR
  2174:          bne     L8BBE
  2175:          lda     CSG5710_4010 + 4
  2176:  L8BCC:
  2177:          bit     WD177x_STATUS
  2178:          bpl     L8BCC
  2179:          sta     WD177x_SECTOR
  2180:  .else
  2181:          bne     L8BBF
  2182:  L8BD1:
  2183:          lda     WD177x_STATUS
  2184:          and     #$03
  2185:          lsr     a
  2186:          bcc     L8BEB
  2187:          beq     L8BD1
  2188:          lda     #$FB
  2189:          sta     WD177x_DATA
  2190:  .endif
  2191:          sty     T0
  2192:  
  2193:  .if CompileDrive >= DRIVE_1571CR
  2194:          lda     WD177x_STATUS
  2195:          and     #$FB
  2196:          sta     WD177x_COMMAND
  2197:  .endif
  2198:          ldy     WORK
  2199:  
  2200:  .if CompileDrive >= DRIVE_1571CR
  2201:  .else
  2202:          nop
  2203:  L8BE5:
  2204:          lda     WD177x_STATUS
  2205:          and     #$03
  2206:          lsr     a
  2207:  L8BEB:
  2208:          bcc     L8C4D
  2209:          beq     L8BE5
  2210:  .endif
  2211:  
  2212:          lda     CMDBUF + 10
  2213:  
  2214:  .if CompileDrive >= DRIVE_1571CR
  2215:  L8BE5:
  2216:          bit     WD177x_STATUS
  2217:          bpl     L8BE5
  2218:          sta     WD177x_SECTOR
  2219:  .else
  2220:          sta     WD177x_DATA
  2221:  .endif
  2222:          cpx     RLINDX
  2223:          beq     L8BFE
  2224:          inx
  2225:          jmp     L8BE5
  2226:  L8BFE:
  2227:          inx
  2228:          dey
  2229:  
  2230:  .if CompileDrive >= DRIVE_1571CR
  2231:          bne     L8BE5
  2232:  L8BF8:
  2233:          bit     WD177x_STATUS
  2234:          bpl     L8BF8
  2235:          sta     WD177x_SECTOR
  2236:          lda     WD177x_STATUS
  2237:          and     #$F7
  2238:          sta     WD177x_COMMAND
  2239:  L8C08:
  2240:          bit     WD177x_STATUS
  2241:          bpl     L8C08
  2242:          sta     WD177x_SECTOR
  2243:          lda     #$4E
  2244:  L8C12:
  2245:          bit     WD177x_STATUS
  2246:          bpl     L8C12
  2247:          sta     WD177x_SECTOR
  2248:          lda     WD177x_STATUS
  2249:          ora     #$08
  2250:          sta     WD177x_COMMAND
  2251:          lda     #$4E
  2252:  L8C24:
  2253:          bit     WD177x_STATUS
  2254:          bpl     L8C24
  2255:          sta     WD177x_SECTOR
  2256:          lda     WD177x_STATUS
  2257:          and     #$EF
  2258:          sta     WD177x_COMMAND
  2259:  .else
  2260:          bne     L8BE5
  2261:  L8C02:
  2262:          lda     WD177x_STATUS
  2263:          and     #$03
  2264:          lsr     a
  2265:          bcc     L8C4D
  2266:          beq     L8C02
  2267:          lda     #$F7
  2268:          sta     WD177x_DATA
  2269:  .endif
  2270:  
  2271:          ldy     CMDBUF + 5
  2272:          lda     L8C4F,y
  2273:          ldy     T0
  2274:          tax
  2275:  .if CompileDrive >= DRIVE_1571CR
  2276:          dex
  2277:  .else
  2278:  L8C1A:
  2279:          lda     WD177x_STATUS
  2280:          and     #$03
  2281:          lsr     a
  2282:          bcc     L8C4D
  2283:          beq     L8C1A
  2284:  .endif
  2285:          lda     #$4E
  2286:  .if CompileDrive >= DRIVE_1571CR
  2287:  L8C1A:
  2288:          bit     WD177x_STATUS
  2289:          bpl     L8C1A
  2290:          sta     WD177x_SECTOR
  2291:  .else
  2292:          sta     WD177x_DATA
  2293:  .endif
  2294:          dex
  2295:          bne     L8C1A
  2296:          cpy     CMDBUF + 7
  2297:  .if CompileDrive >= DRIVE_1571CR
  2298:  
  2299:          beq     L8C54
  2300:          iny
  2301:          jmp     L8AC8
  2302:  
  2303:  L8C54:
  2304:          bit     WD177x_STATUS
  2305:          bpl     L8C54
  2306:          sta     WD177x_SECTOR
  2307:          bit     WD177x_STATUS
  2308:          bvc     L8C67
  2309:          dey
  2310:          bne     L8C54
  2311:          dex
  2312:          bne     L8C54
  2313:  L8C67:
  2314:          lda     WD177x_STATUS
  2315:          and     #$DD
  2316:          sta     WD177x_COMMAND
  2317:          ldy     #$02
  2318:          jmp     L8829
  2319:  
  2320:  .else
  2321:  
  2322:          beq     L8C35
  2323:          iny
  2324:          jmp     L8B07
  2325:  L8C35:
  2326:          lda     WD177x_STATUS
  2327:          and     #$03
  2328:          lsr     a
  2329:          bcc     L8C48
  2330:          beq     L8C35
  2331:          clc
  2332:          lda     #$4E
  2333:          sta     WD177x_DATA
  2334:          jmp     L8C35
  2335:  L8C48:
  2336:          jsr     L8861
  2337:          clc
  2338:          .byte   ASM_BIT2
  2339:  L8C4D:
  2340:          sec
  2341:          rts
  2342:  .endif
  2343:  
  2344:  L8C4F:
  2345:          .byte   $07,$0C,$17,$2C
  2346:  L8C53:
  2347:          .byte   $1A,$10,$09,$05
  2348:  
  2349:  L8C57:
  2350:          lda     HINIB
  2351:          and     #$08
  2352:          beq     L8C64
  2353:          ldx     CTRACK
  2354:          stx     L01B0
  2355:          sec
  2356:          rts
  2357:  L8C64:
  2358:          jsr     LD307
  2359:          lda     CMDSIZ
  2360:          sec
  2361:          sbc     #$04
  2362:          tay
  2363:          beq     L8C90
  2364:          dey
  2365:          beq     L8C95
  2366:          lda     #$00
  2367:          sta     L01B0
  2368:          lda     CMDBUF + 5
  2369:          jsr     L8A57
  2370:          dey
  2371:          beq     L8CA2
  2372:          dey
  2373:          beq     L8CA7
  2374:          dey
  2375:          beq     L8CAD
  2376:          dey
  2377:          beq     L8CB5
  2378:          dey
  2379:          beq     L8CBA
  2380:          jmp     L8CBF
  2381:  L8C90:
  2382:          lda     #$00
  2383:          sta     CMDBUF + 4
  2384:  L8C95:
  2385:          lda     #$00
  2386:          sta     L01B0
  2387:          lda     #$01
  2388:          sta     CMDBUF + 5
  2389:          jsr     L8A57
  2390:  L8CA2:
  2391:          lda     #$27
  2392:          sta     CMDBUF + 6
  2393:  L8CA7:
  2394:          lda     L8C53,x
  2395:          sta     CMDBUF + 7
  2396:  L8CAD:
  2397:          lda     #$00
  2398:          sta     CMDBUF + 8
  2399:  .if CompileDrive >= DRIVE_1571CR
  2400:  .else
  2401:          sta     WD177x_TRACK
  2402:  .endif
  2403:  L8CB5:
  2404:          lda     #$00
  2405:          sta     CMDBUF + 9
  2406:  L8CBA:
  2407:          lda     #$E5
  2408:          sta     CMDBUF + 10
  2409:  L8CBF:
  2410:          jsr     L8CDE
  2411:          lda     L01B0
  2412:          cpx     #$02
  2413:          bcs     L8CDB
  2414:          lda     HINIB
  2415:          and     #$20
  2416:          beq     L8CDB
  2417:          lda     HINIB
  2418:          ora     #$10
  2419:          sta     HINIB
  2420:          jsr     L8954
  2421:          jsr     L8CDE
  2422:  L8CDB:
  2423:          jmp     L89EF
  2424:  L8CDE:
  2425:          jsr     L89B3
  2426:          bcs     L8D5F
  2427:  .if CompileDrive >= DRIVE_1571CR
  2428:  .else
  2429:          lda     #$01
  2430:          sta     VBC_IFR1
  2431:  .endif
  2432:          jsr     L89EF
  2433:          lda     CMDBUF + 8
  2434:          sta     L01B0
  2435:  .if CompileDrive >= DRIVE_1571CR
  2436:  .else
  2437:          sta     WD177x_TRACK
  2438:  .endif
  2439:          bit     CMDBUF + 3
  2440:          bvs     L8CFE
  2441:          jsr     L8888
  2442:          bcs     L8D5F
  2443:  L8CFE:
  2444:          lda     CMDBUF + 9
  2445:          and     #$7F
  2446:          beq     L8D0D
  2447:          clc
  2448:          adc     NMIFLG
  2449:          sta     NMIFLG
  2450:          jsr     L87BA
  2451:  L8D0D:
  2452:          sei                                     ; disallow interrupts --> blocking job loop
  2453:  .if CompileDrive >= DRIVE_1571CR
  2454:          jsr     L8A86
  2455:          jsr     L88F0
  2456:          bcs     L8D5F
  2457:  .else
  2458:          lda     VBC_IFR1
  2459:          lsr     a
  2460:          bcs     L8D5F
  2461:          jsr     L8A86
  2462:          bcs     L8D5F
  2463:          lda     VBC_IFR1
  2464:          lsr     a
  2465:          bcs     L8D5F
  2466:          jsr     L88F0
  2467:          bcs     L8D5F
  2468:          lda     VBC_IFR1
  2469:          lsr     a
  2470:          bcs     L8D5F
  2471:  .endif
  2472:          lda     L01B0
  2473:          cmp     CMDBUF + 6
  2474:          beq     L8D40
  2475:          inc     NMIFLG
  2476:  .if CompileDrive >= DRIVE_1571CR
  2477:  .else
  2478:          inc     WD177x_TRACK
  2479:  .endif
  2480:          inc     L01B0
  2481:          jsr     L87BA
  2482:          jmp     L8D0D
  2483:  L8D40:
  2484:          bit     HINIB
  2485:          bpl     L8D5C
  2486:          sec
  2487:          lda     CMDBUF + 6
  2488:          sbc     CMDBUF + 8
  2489:          cmp     #$27
  2490:          bcs     L8D5C
  2491:          inc     NMIFLG
  2492:          jsr     L87BA
  2493:          ldx     #$1C
  2494:  .if CompileDrive >= DRIVE_1571_05
  2495:          jsr     LC07F
  2496:          FillNOP 3
  2497:  .else
  2498:          jsr     L9D63
  2499:          jsr     LFE00
  2500:  .endif
  2501:  L8D5C:
  2502:          ldx     #$00
  2503:          .byte   ASM_BIT3
  2504:  L8D5F:
  2505:          ldx     #$06
  2506:          stx     L01B0
  2507:          jmp     L85E9
  2508:  L8D67:
  2509:          lda     HINIB
  2510:          and     #$20
  2511:          bne     L8DC6
  2512:  .if CompileDrive >= DRIVE_1571CR
  2513:          lda     REVCNT
  2514:          asl     a
  2515:          sta     TMP
  2516:  L8D75:
  2517:          jsr     L8EC6
  2518:          jsr     LAC9C
  2519:          bcs     L8DD1
  2520:          jsr     LAC38
  2521:          bcs     L8DC8
  2522:  .else
  2523:          lda     #$03
  2524:          sta     BUFPNT + 1
  2525:  .endif
  2526:          ldy     #$00
  2527:  .if CompileDrive >= DRIVE_1571CR
  2528:  .else
  2529:          sty     BUFPNT
  2530:  .endif
  2531:          ldx     WORK
  2532:  .if CompileDrive >= DRIVE_1571CR
  2533:  L8D89:
  2534:          bit     WD177x_TRACK
  2535:          bpl     L8D89
  2536:          lda     WD177x_SECTOR
  2537:  .else
  2538:          lda     CMDBUF + 3
  2539:          sta     WD177x_TRACK
  2540:          lda     CMDBUF + 4
  2541:          sta     WD177x_SECTOR
  2542:          lda     #$88
  2543:          jsr     L884E
  2544:          nop
  2545:  L8D89:
  2546:          lda     WD177x_STATUS
  2547:          and     #$03
  2548:          lsr     a
  2549:          bcc     L8DAB
  2550:          and     #$01
  2551:          beq     L8D89
  2552:          lda     WD177x_DATA
  2553:  .endif
  2554:          sta     (BUFPNT),y
  2555:          cpy     RLINDX
  2556:          beq     L8DA2
  2557:          iny
  2558:          bne     L8D89
  2559:  L8DA2:
  2560:          iny
  2561:          dex
  2562:          beq     L8DAB
  2563:          inc     BUFPNT + 1
  2564:          jmp     L8D89
  2565:  
  2566:  .if CompileDrive >= DRIVE_1571CR
  2567:  L8DAB:
  2568:          bit     WD177x_TRACK
  2569:          bpl     L8DAB
  2570:          lda     WD177x_SECTOR
  2571:  L8DA9:
  2572:          bit     WD177x_TRACK
  2573:          bpl     L8DA9
  2574:          lda     WD177x_SECTOR
  2575:          lda     #$18
  2576:          sta     WD177x_TRACK
  2577:  L8DB6:
  2578:          bit     WD177x_TRACK
  2579:          bpl     L8DB6
  2580:          lda     WD177x_SECTOR
  2581:          lda     WD177x_TRACK
  2582:          and     #$20
  2583:          beq     L8DCF
  2584:          ldx     #$05
  2585:          .byte   ASM_BIT3
  2586:  L8DC8:
  2587:          ldx     #$03
  2588:          dec     TMP
  2589:          bne     L8D75
  2590:          .byte   ASM_BIT3
  2591:  L8DCF:
  2592:          ldx     #$00
  2593:  L8DD1:
  2594:          jsr     L85E9
  2595:  
  2596:  .else
  2597:  
  2598:  L8DAB:
  2599:          jsr     L8861
  2600:          jsr     L883C
  2601:          jsr     L85E9
  2602:          bit     HINIB
  2603:          bvs     L8DBF
  2604:  .endif
  2605:          cpx     #$02
  2606:          bcc     L8DBF
  2607:  .if CompileDrive >= DRIVE_1571CR
  2608:          bit     HINIB
  2609:          bvs     L8DBF
  2610:  .endif
  2611:          jmp     L8384
  2612:  L8DBF:
  2613:          jsr     L85F9
  2614:          lda     HINIB
  2615:  
  2616:  .if CompileDrive >= DRIVE_1571CR
  2617:          bmi     L8DE8
  2618:  L8DC6:
  2619:          jsr     L8EC6
  2620:  .else
  2621:          bmi     L8DE8
  2622:  L8DC6:
  2623:          lda     #$03
  2624:          sta     BUFPNT + 1
  2625:          ldy     #$00
  2626:          sty     BUFPNT
  2627:          ldx     WORK
  2628:  .endif
  2629:  L8DD0:
  2630:          lda     (BUFPNT),y
  2631:          sta     CTRACK
  2632:          jsr     L85F9
  2633:          cpy     RLINDX
  2634:          beq     L8DDF
  2635:          iny
  2636:          bne     L8DD0
  2637:  L8DDF:
  2638:          iny
  2639:          dex
  2640:          beq     L8DE8
  2641:          inc     BUFPNT + 1
  2642:          jmp     L8DD0
  2643:  L8DE8:
  2644:          dec     CMDBUF + 5
  2645:          beq     L8DF3
  2646:          jsr     L886C
  2647:          jmp     L8D67
  2648:  L8DF3:
  2649:          jmp     L891B
  2650:  L8DF6:
  2651:  .if CompileDrive >= DRIVE_1571CR
  2652:          jsr     L8EC6
  2653:  .else
  2654:          lda     #$03
  2655:          sta     BUFPNT + 1
  2656:          ldy     #$00
  2657:          sty     BUFPNT
  2658:          ldx     WORK
  2659:  .endif
  2660:          lda     HINIB
  2661:          bmi     L8E34
  2662:  L8E04:
  2663:          lda     VBC_PB1
  2664:          eor     #VBC_PB1_1540_CLOCKOUT
  2665:          bit     CIA_ICR
  2666:          sta     VBC_PB1
  2667:  L8E0F:
  2668:          lda     VBC_PB1
  2669:          bpl     L8E17
  2670:          jsr     TestATN
  2671:  L8E17:
  2672:          lda     CIA_ICR
  2673:          and     #CIA_ICR_B_SP
  2674:          beq     L8E0F
  2675:          lda     CIA_SDR
  2676:          sta     (BUFPNT),y
  2677:          cpy     RLINDX
  2678:          beq     L8E2B
  2679:          iny
  2680:          bne     L8E04
  2681:  L8E2B:
  2682:          iny
  2683:          dex
  2684:          beq     L8E34
  2685:          inc     BUFPNT + 1
  2686:          jmp     L8E04
  2687:  L8E34:
  2688:          lda     HINIB
  2689:          and     #$20
  2690:  
  2691:  .if CompileDrive >= DRIVE_1571CR
  2692:          beq     L8E4F
  2693:          jmp     L8EB7
  2694:  L8E4F:
  2695:  .else
  2696:          bne     L8EB7
  2697:  .endif
  2698:          lda     HINIB
  2699:          and     #$08
  2700:          beq     L8E45
  2701:          ldx     CTRACK
  2702:          jmp     L8381
  2703:  L8E45:
  2704:  .if CompileDrive >= DRIVE_1571CR
  2705:          jsr     L8EC6
  2706:          jsr     LAC9C
  2707:          bcc     L8E65
  2708:          jmp     L8F41
  2709:  L8E65:
  2710:          jsr     LACB9
  2711:          bit     L01B4
  2712:          bmi     L8E70
  2713:          lda     #$28
  2714:          .byte   ASM_BIT3
  2715:  L8E70:
  2716:          lda     #$29
  2717:          sta     WD177x_COMMAND
  2718:          lda     #$00
  2719:          sta     WD177x_SECTOR
  2720:          lda     WD177x_STATUS
  2721:          ora     #$02
  2722:          sta     WD177x_COMMAND
  2723:          ldx     #$0C
  2724:  L8E84:
  2725:          lda     #$00
  2726:  L8E86:
  2727:          bit     WD177x_STATUS
  2728:          bpl     L8E86
  2729:          sta     WD177x_SECTOR
  2730:          dex
  2731:          bne     L8E84
  2732:          lda     CSG5710_4010 + 0
  2733:  L8E94:
  2734:          bit     WD177x_STATUS
  2735:          bpl     L8E94
  2736:          sta     WD177x_SECTOR
  2737:          lda     WD177x_STATUS
  2738:          ora     #$14
  2739:          sta     WD177x_COMMAND
  2740:          lda     WD177x_TRACK
  2741:          and     #$F8
  2742:          ora     CSG5710_4010 + 2
  2743:          sta     WD177x_TRACK
  2744:          ldx     #$02
  2745:          lda     CSG5710_4010 + 0
  2746:  L8EB4:
  2747:          bit     WD177x_STATUS
  2748:          bpl     L8EB4
  2749:          sta     WD177x_SECTOR
  2750:          dex
  2751:          bne     L8EB4
  2752:          lda     CSG5710_4010 + 4
  2753:  L8EC2_CR:
  2754:          bit        WD177x_STATUS
  2755:          bpl     L8EC2_CR
  2756:          sta     WD177x_SECTOR
  2757:          lda     WD177x_STATUS
  2758:          and     #$FB
  2759:          sta     WD177x_COMMAND
  2760:  .else
  2761:          lda     #$03
  2762:          sta     BUFPNT + 1
  2763:  .endif
  2764:          ldy     #$00
  2765:  .if CompileDrive >= DRIVE_1571CR
  2766:  .else
  2767:          sty     BUFPNT
  2768:  .endif
  2769:          ldx     WORK
  2770:  .if CompileDrive >= DRIVE_1571CR
  2771:  L8E66:
  2772:          lda     (BUFPNT),y
  2773:  L8ED8:
  2774:          bit     WD177x_STATUS
  2775:          bpl     L8ED8
  2776:  .else
  2777:          lda     CMDBUF + 3
  2778:          sta     WD177x_TRACK
  2779:          lda     CMDBUF + 4
  2780:  .endif
  2781:          sta     WD177x_SECTOR
  2782:  
  2783:  .if CompileDrive >= DRIVE_1571CR
  2784:  .else
  2785:          lda     VBC_IFR1
  2786:          lsr     a
  2787:          bcs     L8E93
  2788:          lda     #$A8
  2789:          jsr     L884E
  2790:  L8E66:
  2791:          lda     WD177x_STATUS
  2792:          and     #$03
  2793:          lsr     a
  2794:          bcc     L8E93
  2795:          and     #$01
  2796:          beq     L8E66
  2797:          lda     (BUFPNT),y
  2798:          sta     WD177x_DATA
  2799:  .endif
  2800:  
  2801:          cpy     RLINDX
  2802:          beq     L8E7F
  2803:          iny
  2804:          bne     L8E66
  2805:  L8E7F:
  2806:          iny
  2807:          dex
  2808:          beq     L8E88
  2809:          inc     BUFPNT + 1
  2810:          jmp     L8E66
  2811:  .if CompileDrive >= DRIVE_1571CR
  2812:  L8E88:
  2813:          bit     WD177x_STATUS
  2814:          bpl     L8E88
  2815:          sta     WD177x_SECTOR
  2816:          lda     WD177x_STATUS
  2817:          and     #$F7
  2818:          sta     WD177x_COMMAND
  2819:  L8F01:
  2820:          bit     WD177x_STATUS
  2821:          bpl     L8F01
  2822:          sta     WD177x_SECTOR
  2823:  L8F09:
  2824:          bit     WD177x_STATUS
  2825:          bpl     L8F09
  2826:          sta     WD177x_SECTOR
  2827:  L8F11:
  2828:          bit     WD177x_STATUS
  2829:          bpl     L8F11
  2830:          sta     WD177x_SECTOR
  2831:          lda     WD177x_STATUS
  2832:          and     #$EF
  2833:          sta     WD177x_COMMAND
  2834:  L8F21:
  2835:          bit     WD177x_STATUS
  2836:          bpl     L8F21
  2837:          sta     WD177x_SECTOR
  2838:          lda     WD177x_STATUS
  2839:          and     #$CD
  2840:          sta     WD177x_COMMAND
  2841:          ldy     #$02
  2842:          jsr     L8829
  2843:          ldx     #$00
  2844:          bit     L01B4
  2845:          bvs     L8F43_CR
  2846:          jsr     LACC7
  2847:          .byte   ASM_BIT3
  2848:  L8F41:
  2849:          ldx     #$07
  2850:  L8F43_CR:
  2851:          stx        L01B0
  2852:          jsr     L81CE
  2853:  .else
  2854:  L8E88:
  2855:          lda     VBC_IFR1
  2856:          lsr     a
  2857:          bcs     L8E93
  2858:   .if CompileDrive >= DRIVE_1571_05
  2859:          jsr     PATCH_INIT_CSG5710
  2860:   .else
  2861:          jsr     L8EC6
  2862:   .endif
  2863:          bcc     L8E9A
  2864:  L8E93:
  2865:          jsr     L81CE
  2866:          ldx     #$07
  2867:          bne     L8EA0
  2868:  L8E9A:
  2869:          jsr     L81CE
  2870:          jsr     L883C
  2871:  L8EA0:
  2872:          stx     L01B0
  2873:  .endif
  2874:          jsr     L85E9
  2875:          jsr     L85F9
  2876:          jsr     L86A0
  2877:          jsr     L81B2
  2878:          bit     HINIB
  2879:          bvs     L8EB7
  2880:          cpx     #$02
  2881:          bcs     L8EC5
  2882:  L8EB7:
  2883:          dec     CMDBUF + 5
  2884:          beq     L8EC2
  2885:          jsr     L886C
  2886:          jmp     L8DF6
  2887:  L8EC2:
  2888:          jmp     L891B
  2889:  L8EC5:
  2890:          rts
  2891:  L8EC6:
  2892:          lda     #$03
  2893:          sta     BUFPNT + 1
  2894:          ldy     #$00
  2895:          sty     BUFPNT
  2896:  .if CompileDrive >= DRIVE_1571CR
  2897:  .else
  2898:          ldx     WORK
  2899:  .endif
  2900:          lda     CMDBUF + 3
  2901:  .if CompileDrive >= DRIVE_1571CR
  2902:          sta     NMIFLG
  2903:  .else
  2904:          sta     WD177x_TRACK
  2905:  .endif
  2906:          lda     CMDBUF + 4
  2907:  
  2908:  .if CompileDrive >= DRIVE_1571CR
  2909:          sta     SECTR
  2910:          eor     #$FF
  2911:          sta     STAB + 2
  2912:  .else
  2913:          sta     WD177x_SECTOR
  2914:          lda     #$88
  2915:          jsr     L884E
  2916:  L8EE1:
  2917:          lda     WD177x_STATUS
  2918:          and     #$03
  2919:          lsr     a
  2920:          bcc     L8F05
  2921:          and     #$01
  2922:          beq     L8EE1
  2923:          lda     WD177x_DATA
  2924:          cmp     (BUFPNT),y
  2925:          bne     L8F05
  2926:          cpy     RLINDX
  2927:          beq     L8EFC
  2928:          iny
  2929:          bne     L8EE1
  2930:  L8EFC:
  2931:          iny
  2932:          dex
  2933:          beq     L8F10
  2934:          inc     BUFPNT + 1
  2935:          jmp     L8EE1
  2936:  L8F05:
  2937:          lda     #$D0
  2938:          sta     WD177x_COMMAND
  2939:          jsr     LA483
  2940:          ldx     #$07
  2941:          .byte   ASM_BIT3
  2942:  L8F10:
  2943:          ldx     #$00
  2944:          stx     L01B0
  2945:          jmp     L8861
  2946:  L8F18:
  2947:          lda     #$03
  2948:          sta     BUFPNT + 1
  2949:          ldy     #$00
  2950:          sty     BUFPNT
  2951:  .endif
  2952:  
  2953:          ldx     WORK
  2954:  
  2955:  .if CompileDrive >= DRIVE_1571CR
  2956:  .else
  2957:   .if CompileDrive >= DRIVE_1571_05
  2958:   .else
  2959:          ldy     RLINDX
  2960:   .endif
  2961:          lda     #$88
  2962:          jsr     L884E
  2963:  L8F2A:
  2964:          lda     WD177x_STATUS
  2965:          and     #$03
  2966:          lsr     a
  2967:          bcc     L8F4C
  2968:          and     #$01
  2969:          beq     L8F2A
  2970:          lda     WD177x_DATA
  2971:          cmp     CMDBUF + 10
  2972:          bne     L8F4C
  2973:   .if CompileDrive >= DRIVE_1571_05
  2974:          cpy     RLINDX
  2975:          beq     L8F43
  2976:          iny
  2977:          bne     L8F2A
  2978:  L8F43:
  2979:          iny
  2980:   .else
  2981:          dey
  2982:          bpl     L8F2A
  2983:   .endif
  2984:          dex
  2985:          beq     L8F57
  2986:   .if CompileDrive >= DRIVE_1571_05
  2987:   .else
  2988:          ldy     RLINDX
  2989:   .endif
  2990:          inc     BUFPNT + 1
  2991:          jmp     L8F2A
  2992:  L8F4C:
  2993:          lda     #$D0
  2994:          sta     WD177x_COMMAND
  2995:          jsr     LA483
  2996:          ldx     #$07
  2997:          .byte   ASM_BIT3
  2998:  L8F57:
  2999:          ldx     #$00
  3000:          stx     L01B0
  3001:          jmp     L8861
  3002:  L8F5F:
  3003:          php
  3004:          sei                                     ; disallow interrupts --> blocking job loop
  3005:          jsr     L89EF
  3006:          bit     HINIB
  3007:          bpl     L8F70
  3008:          lda     CMDBUF + 3
  3009:          sta     NMIFLG
  3010:          jsr     L87BA
  3011:  L8F70:
  3012:          lda     #$00
  3013:          sta     MYPA
  3014:          jsr     L8A27
  3015:          ldx     L01B0
  3016:          cpx     #$02
  3017:          bcs     L8F9D
  3018:          lda     STAB + 2
  3019:          sta     ICMD
  3020:  L8F82:
  3021:          jsr     L8A27
  3022:          lda     STAB + 2
  3023:          ldy     MYPA
  3024:          sta     CMDBUF + 11,y
  3025:          inc     MYPA
  3026:          cpy     #$1F
  3027:          bcs     L8F9D
  3028:          cmp     ICMD
  3029:          bne     L8F82
  3030:          lda     STAB
  3031:          sta     NMIFLG
  3032:          ldx     #$00
  3033:          .byte   ASM_BIT3
  3034:  L8F9D:
  3035:          ldx     #$02
  3036:          stx     L01B0
  3037:          plp
  3038:  .endif
  3039:          rts
  3040:  
  3041:          FillUntil $8FA4
  3042:  
  3043:  L8FA4:
  3044:          lda     CMDBUF + 4
  3045:          sta     SECINC
  3046:          rts
  3047:  L8FAA:
  3048:          lda     CMDBUF + 4
  3049:          sta     REVCNT
  3050:          rts
  3051:  L8FB0:
  3052:          jmp     L924E
  3053:  L8FB3:
  3054:          sei                                     ; disallow interrupts --> blocking job loop
  3055:          lda     VBC_PAUNBUF1
  3056:          and     #VBC_PA1_20
  3057:          bne     L9021
  3058:          lda     CMDBUF + 4
  3059:          cmp     #$31
  3060:          beq     L8FD4
  3061:          cmp     #$30
  3062:          bne     L9021
  3063:          lda     VBC_PAUNBUF1
  3064:          and     # ~ VBC_PA1_04
  3065:          sta     VBC_PAUNBUF1
  3066:          cli                                     ; allow processing of job loop
  3067:          bit     HINIB
  3068:          bpl     L8FE1
  3069:          rts
  3070:  L8FD4:
  3071:  .if CompileDrive >= DRIVE_1571
  3072:          lda     VBC_PAUNBUF1
  3073:  .else
  3074:          jmp     L9021
  3075:  .endif
  3076:          ora     #VBC_PA1_04
  3077:          sta     VBC_PAUNBUF1
  3078:          cli                                     ; allow processing of job loop
  3079:          bit     HINIB
  3080:          bmi     L8FE4
  3081:  L8FE1:
  3082:          jmp     LD042
  3083:  L8FE4:
  3084:          rts
  3085:  L8FE5:
  3086:          ldx     CMDSIZ
  3087:          cpx     #$04
  3088:          bcc     L9021
  3089:          lda     CMDBUF + 3
  3090:          cmp     #$53
  3091:          beq     L8FA4
  3092:          cmp     #$52
  3093:          beq     L8FAA
  3094:          cmp     #$54
  3095:          beq     L8FB0
  3096:          cmp     #$4D
  3097:          beq     L9026
  3098:          cmp     #$48
  3099:          beq     L8FB3
  3100:  .if CompileDrive >= DRIVE_1571CR
  3101:          jmp     LABA7
  3102:  .elseif CompileDrive >= DRIVE_1571_05
  3103:          jmp     LAA86
  3104:  .else
  3105:          tay
  3106:          cpy     #$04
  3107:  .endif
  3108:  L9006:
  3109:          bcc     L9021
  3110:          cpy     #$1F
  3111:          bcs     L9021
  3112:          lda     #$40
  3113:          sta     TLKADR
  3114:          lda     #$20
  3115:          sta     LSNADR
  3116:          tya
  3117:          clc
  3118:          adc     TLKADR
  3119:          sta     TLKADR
  3120:          tya
  3121:          clc
  3122:          adc     LSNADR
  3123:          sta     LSNADR
  3124:          rts
  3125:  L9021:
  3126:          lda     #ERRORCODE_31_SYNTAX_ERROR
  3127:          jmp     GenerateErrorMessage
  3128:          ; ------------
  3129:  
  3130:  L9026:
  3131:          sei                                     ; disallow interrupts --> blocking job loop
  3132:          lda     CMDBUF + 4
  3133:          cmp     #$31
  3134:          beq     L904E
  3135:          cmp     #$30
  3136:          bne     L9021
  3137:          lda     VBC_PAUNBUF1
  3138:          and     # ~ VBC_PA1_20
  3139:          sta     VBC_PAUNBUF1
  3140:          jsr     LA483
  3141:          jsr     LFF82
  3142:          lda     FLGMODE1570
  3143:          ora     #$80
  3144:          sta     FLGMODE1570
  3145:          cli                                     ; allow processing of job loop
  3146:          bit     HINIB
  3147:          bpl     L907C
  3148:          rts
  3149:  L904E:
  3150:          lda     VBC_PAUNBUF1
  3151:          ora     #VBC_PA1_20
  3152:          sta     VBC_PAUNBUF1
  3153:          jsr     LA483
  3154:          lda     #$DE
  3155:          sta     VIRQJOB1570
  3156:          lda     #$9D
  3157:          sta     VIRQJOB1570 + 1
  3158:          lda     #$40
  3159:          sta     VDC_T1HL2
  3160:          sta     VDC_T1HC2
  3161:          lda     FLGMODE1570
  3162:          and     #$7F
  3163:          sta     FLGMODE1570
  3164:          lda     #$00
  3165:          sta     NXTST
  3166:          cli                                     ; allow processing of job loop
  3167:          bit     HINIB
  3168:          bmi     L907F
  3169:  L907C:
  3170:          jmp     LD042
  3171:  L907F:
  3172:          rts
  3173:  L9080:
  3174:          jsr     L81CE
  3175:          jsr     L91EA
  3176:          bcs     L90E7
  3177:          jsr     LC63D
  3178:          lda     NODRV
  3179:          bne     L90E7
  3180:          lda     BITCNT
  3181:          ora     #$81
  3182:          sta     BITCNT
  3183:          jsr     L91CA
  3184:          lda     CMDBUF
  3185:          cmp     #$2A
  3186:          bne     L90AE
  3187:          lda     PRGTRK
  3188:          beq     L90AE
  3189:          pha
  3190:          lda     PRGSEC
  3191:          sta     FILSEC
  3192:          pla
  3193:          jmp     L90EC
  3194:  L90AE:
  3195:          lda     #$00
  3196:          tay
  3197:          tax
  3198:          sta     LSTDRV
  3199:          sta     FILTBL
  3200:          jsr     LC312
  3201:          lda     F2CNT
  3202:          pha
  3203:          lda     #$01
  3204:          sta     F2CNT
  3205:          lda     #$FF
  3206:          sta     R0
  3207:          jsr     LC44F
  3208:          pla
  3209:          sta     F2CNT
  3210:          lda     BITCNT
  3211:          and     #$7F
  3212:          sta     BITCNT
  3213:          bit     HINIB
  3214:          bmi     L90DF
  3215:  .if CompileDrive >= DRIVE_1571_05
  3216:          jsr     LAA5B
  3217:          FillNOP 1
  3218:  .elseif CompileDrive >= DRIVE_1571
  3219:          lda     PATTYP
  3220:          cmp     #$02
  3221:  .else
  3222:          jsr     LAA5B
  3223:          FillNOP 1
  3224:  .endif
  3225:          bne     L90E4
  3226:  L90DF:
  3227:          lda     FILTRK
  3228:          bne     L90EC
  3229:  L90E4:
  3230:          ldx     #$02
  3231:          .byte   ASM_BIT3
  3232:  L90E7:
  3233:          ldx     #$0F
  3234:          jmp     L91AD
  3235:  L90EC:
  3236:          sta     PRGTRK
  3237:          pha
  3238:          jsr     L91DA
  3239:          pla
  3240:          ldx     L02B0
  3241:          sta     TRACK0,x
  3242:          lda     FILSEC
  3243:          sta     PRGSEC
  3244:          sta     SECTOR0,x
  3245:          lda     #$80
  3246:          sta     CMDBUF + 2
  3247:          sta     AF
  3248:  L9107:
  3249:          cli                                     ; allow processing of job loop
  3250:          ldx     JOBNUM
  3251:          lda     AF
  3252:          sta     JOBS0,x
  3253:          jsr     L864B
  3254:          cpx     #$02
  3255:          bcc     L9118
  3256:          jmp     L9199
  3257:  L9118:
  3258:          sei                                     ; disallow interrupts --> blocking job loop
  3259:          ldy     #$00
  3260:          lda     (DIRBUF),y
  3261:          beq     L914E
  3262:          lda     BITCNT
  3263:          and     #$FE
  3264:          sta     BITCNT
  3265:          jsr     L9228
  3266:          ldy     #$02
  3267:  L912A:
  3268:          lda     (DIRBUF),y
  3269:          tax
  3270:          jsr     L9228
  3271:          iny
  3272:          bne     L912A
  3273:          ldx     L02B0
  3274:          lda     (DIRBUF),y
  3275:          cmp     TRACK0,x
  3276:          beq     L913F
  3277:          ldy     #$80
  3278:          .byte   ASM_BIT3
  3279:  L913F:
  3280:          ldy     #$88
  3281:          sty     AF
  3282:          sta     TRACK0,x
  3283:          ldy     #$01
  3284:          lda     (DIRBUF),y
  3285:          sta     SECTOR0,x
  3286:          jmp     L9107
  3287:  L914E:
  3288:          ldx     #$1F
  3289:          jsr     L9228
  3290:          lda     #$01
  3291:          bit     BITCNT
  3292:          beq     L9177
  3293:          tay
  3294:          lda     (DIRBUF),y
  3295:          sec
  3296:          sbc     #$03
  3297:          sta     CTRACK
  3298:          tax
  3299:          jsr     L9228
  3300:          iny
  3301:          lda     (DIRBUF),y
  3302:          tax
  3303:          jsr     L9228
  3304:          iny
  3305:          lda     (DIRBUF),y
  3306:          tax
  3307:          jsr     L9228
  3308:          ldy     #$04
  3309:          bne     L9184
  3310:  L9177:
  3311:          ldy     #$01
  3312:          lda     (DIRBUF),y
  3313:          tax
  3314:          dex
  3315:          stx     CTRACK
  3316:          jsr     L9228
  3317:          ldy     #$02
  3318:  L9184:
  3319:          lda     (DIRBUF),y
  3320:          tax
  3321:          jsr     L9228
  3322:          iny
  3323:          dec     CTRACK
  3324:          bne     L9184
  3325:          lda     #$00
  3326:          sta     SA
  3327:          jsr     LDAC0
  3328:          jmp     CommandEnd
  3329:  L9199:
  3330:          sei                                     ; disallow interrupts --> blocking job loop
  3331:          stx     CTRACK
  3332:          jsr     L9228
  3333:          lda     #$00
  3334:          sta     SA
  3335:          jsr     LDAC0
  3336:          ldx     JOBNUM
  3337:          lda     CTRACK
  3338:          jmp     LE60A
  3339:  L91AD:
  3340:          sei                                     ; disallow interrupts --> blocking job loop
  3341:          stx     CTRACK
  3342:          ldx     #$02
  3343:          jsr     L9228
  3344:          lda     #$00
  3345:          sta     SA
  3346:          jsr     LDAC0
  3347:          lda     CTRACK
  3348:          cmp     #$02
  3349:          beq     L91C5
  3350:          lda     #$74
  3351:          .byte   ASM_BIT3
  3352:  L91C5:
  3353:          lda     #ERRORCODE_62_FILE_NOT_FOUND
  3354:          jmp     GenerateErrorMessage
  3355:          ; -------------
  3356:  
  3357:  L91CA:
  3358:          lda     #$00
  3359:          sta     SA
  3360:          lda     #$01
  3361:          jsr     LD1E2
  3362:          tax
  3363:          lda     TableHighBytesOfBuffers,x
  3364:          sta     DIRBUF + 1
  3365:          rts
  3366:  L91DA:
  3367:          lda     DIRBUF + 1
  3368:          sec
  3369:          sbc     #$03
  3370:          sta     JOBNUM
  3371:          asl     a
  3372:          sta     L02B0
  3373:          lda     #$00
  3374:          sta     DIRBUF
  3375:          rts
  3376:  L91EA:
  3377:          ldy     #$03
  3378:          lda     CMDSIZ
  3379:          sec
  3380:          sbc     #$03
  3381:          sta     CMDSIZ
  3382:          lda     CMDBUF + 4
  3383:          cmp     #$3A
  3384:          bne     L920A
  3385:          lda     CMDBUF + 3
  3386:          tax
  3387:          and     #$30
  3388:          cmp     #$30
  3389:          bne     L920A
  3390:          cpx     #$31
  3391:          beq     L9226
  3392:  L920A:
  3393:          lda     CMDBUF + 3
  3394:          cmp     #$3A
  3395:          bne     L9215
  3396:          dec     CMDSIZ
  3397:          iny
  3398:  L9215:
  3399:          ldx     #$00
  3400:  L9217:
  3401:          lda     CMDBUF,y
  3402:          sta     CMDBUF,x
  3403:          iny
  3404:          inx
  3405:          cpx     CMDSIZ
  3406:          bne     L9217
  3407:          clc
  3408:          .byte   ASM_BIT2
  3409:  L9226:
  3410:          sec
  3411:          rts
  3412:  L9228:
  3413:          lda     VBC_PB1
  3414:          cmp     VBC_PB1
  3415:          bne     L9228
  3416:          and     #$FF
  3417:          bmi     L924B
  3418:          eor     BITCNT
  3419:          and     #$04    ; VBC_PB1_1540_CLOCKIN?
  3420:          beq     L9228
  3421:          stx     CIA_SDR
  3422:          lda     BITCNT
  3423:          eor     #$04
  3424:          sta     BITCNT
  3425:          lda     #CIA_ICR_B_SP
  3426:  L9245:
  3427:          bit     CIA_ICR
  3428:          beq     L9245
  3429:          rts
  3430:  
  3431:  L924B:
  3432:          jmp     ProcessBus1570
  3433:  
  3434:  L924E:
  3435:          php
  3436:          sei                                     ; disallow interrupts --> blocking job loop
  3437:          ldx     #$00
  3438:          stx     JOBS0
  3439:          stx     JOBS1
  3440:          lda     #$03
  3441:          sta     IP
  3442:          tay
  3443:          lda     #$80
  3444:          sta     IP + 1
  3445:  L925F:
  3446:          lda     (IP),y
  3447:          sta     JOBS2
  3448:          ldx     #$08
  3449:  L9265:
  3450:          lda     JOBS2
  3451:          and     #$01
  3452:          sta     JOBS3
  3453:          lda     JOBS1
  3454:          bpl     L9271
  3455:          inc     JOBS3
  3456:  L9271:
  3457:          ror     a
  3458:          bcc     L9276
  3459:          inc     JOBS3
  3460:  L9276:
  3461:          ror     a
  3462:          ror     a
  3463:          ror     a
  3464:          bcc     L927D
  3465:          inc     JOBS3
  3466:  L927D:
  3467:          lda     JOBS0
  3468:          rol     a
  3469:          rol     a
  3470:          bcc     L9285
  3471:          inc     JOBS3
  3472:  L9285:
  3473:          ror     JOBS3
  3474:          rol     JOBS0
  3475:          rol     JOBS1
  3476:          ror     JOBS2
  3477:          dex
  3478:          bne     L9265
  3479:          inc     IP
  3480:          bne     L925F
  3481:          inc     IP + 1
  3482:          bne     L925F
  3483:          dey
  3484:          dey
  3485:          dey
  3486:          lda     JOBS0
  3487:          cmp     L8000
  3488:          bne     L92B3
  3489:          lda     JOBS1
  3490:          cmp     L8001
  3491:          bne     L92B3
  3492:          sty     JOBS0
  3493:          sty     JOBS1
  3494:          sty     JOBS2
  3495:          sty     JOBS3
  3496:          plp
  3497:          rts
  3498:  L92B3:
  3499:          ldx     #$03
  3500:          stx     T0
  3501:          jmp     PostFailError
  3502:  L92BA:
  3503:          tsx
  3504:          stx     SAVSP
  3505:          bit     VDC_T1LC2
  3506:          lda     VDC_PCR2
  3507:          ora     #$0E
  3508:          sta     VDC_PCR2
  3509:  L92C8:
  3510:          ldy     #$05
  3511:  L92CA:
  3512:          lda     JOBS0,y
  3513:          bmi     L92D5
  3514:          dey
  3515:          bpl     L92CA
  3516:          jmp     L99CA
  3517:  L92D5:
  3518:          cmp     #$88
  3519:          bne     L92DC
  3520:          jmp     L960D
  3521:  L92DC:
  3522:          cmp     #$D0
  3523:          bne     L92E3
  3524:          jmp     L93A2
  3525:  L92E3:
  3526:          and     #$01
  3527:          beq     L92EE
  3528:          sty     JOBN
  3529:          lda     #$0F
  3530:          jmp     L99B5
  3531:  L92EE:
  3532:          tax
  3533:          cmp     CDRIVE
  3534:          beq     L92FB
  3535:          sta     CDRIVE
  3536:          jsr     LF97E
  3537:          jmp     L99CA
  3538:  L92FB:
  3539:          lda     DRVST
  3540:          bmi     L9302
  3541:          asl     a
  3542:          bpl     L9305
  3543:  L9302:
  3544:          jmp     L99CA
  3545:  L9305:
  3546:          lda     #$20
  3547:          sta     DRVST
  3548:          ldy     #$05
  3549:          sty     JOBN
  3550:  L930D:
  3551:          jsr     L93D1
  3552:          bmi     L932C
  3553:  L9312:
  3554:          dec     JOBN
  3555:          bpl     L930D
  3556:          ldy     NXTJOB
  3557:          jsr     L93D3
  3558:          lda     NXTRK
  3559:          sta     STEPS
  3560:          asl     STEPS
  3561:          lda     #$60
  3562:          sta     DRVST
  3563:          lda     (HDRPNT),y
  3564:          sta     DRVTRK
  3565:          jmp     L99CA
  3566:  L932C:
  3567:          and     #$01
  3568:          cmp     CDRIVE
  3569:          bne     L9312
  3570:          lda     DRVTRK
  3571:          beq     L9368
  3572:          lda     DRVTRK
  3573:          cmp     #$24
  3574:          php
  3575:          lda     (HDRPNT),y
  3576:          cmp     #$24
  3577:          ror     a
  3578:          plp
  3579:          and     #$80
  3580:          bcc     L9350
  3581:          bmi     L9358
  3582:          lda     DRVTRK
  3583:          sbc     #$23
  3584:          sta     DRVTRK
  3585:          jmp     L9358
  3586:  L9350:
  3587:          bpl     L9358
  3588:          lda     DRVTRK
  3589:          adc     #$23
  3590:          sta     DRVTRK
  3591:  L9358:
  3592:          sec
  3593:          lda     (HDRPNT),y
  3594:          sbc     DRVTRK
  3595:          beq     L9368
  3596:          sta     NXTRK
  3597:          lda     JOBN
  3598:          sta     NXTJOB
  3599:          jmp     L9312
  3600:  L9368:
  3601:          ldx     #$04
  3602:          lda     (HDRPNT),y
  3603:          sta     TRACC
  3604:          cmp     #$24
  3605:          tay
  3606:          jsr     L93F3
  3607:          tya
  3608:          bcc     L9379
  3609:          sbc     #$23
  3610:  L9379:
  3611:          tax
  3612:  .if CompileDrive >= DRIVE_1571_05
  3613:          lda     LC04C - 1,x
  3614:  .else
  3615:          lda     L9408,x
  3616:  .endif
  3617:          sta     SECTR
  3618:          lda     VDC_PB2
  3619:          and     # ~ VDC_PB2_BITRATE
  3620:          ora     SECTR
  3621:          sta     VDC_PB2
  3622:          lda     L9409 + 34,x
  3623:          sta     SECTR
  3624:          lda     JOB
  3625:          cmp     #$40
  3626:          beq     L93B0
  3627:          cmp     #$60
  3628:          beq     L93A2
  3629:          cmp     #$70
  3630:          beq     L939F
  3631:          jmp     L944F
  3632:  L939F:
  3633:          jmp     L9B29
  3634:  L93A2:
  3635:          lda     JOBN
  3636:          clc
  3637:          adc     #$03
  3638:          sta     BUFPNT + 1
  3639:          lda     #$00
  3640:          sta     BUFPNT
  3641:          jmp     (BUFPNT)
  3642:  L93B0:
  3643:          lda     #$60
  3644:          sta     DRVST
  3645:          lda     VDC_PB2
  3646:          and     # ~ VDC_PB2_STEPPER
  3647:          sta     VDC_PB2
  3648:          lda     #$A4
  3649:          sta     STEPS
  3650:          lda     L01B1
  3651:          bmi     L93C8
  3652:          lda     #$01
  3653:          .byte   ASM_BIT3
  3654:  L93C8:
  3655:          lda     #$24
  3656:          sta     DRVTRK
  3657:          lda     #$01
  3658:          jmp     L99B5
  3659:  L93D1:
  3660:          ldy     JOBN
  3661:  L93D3:
  3662:          lda     JOBS0,y
  3663:          pha
  3664:          bpl     L93ED
  3665:          and     #$78
  3666:          sta     JOB
  3667:          tya
  3668:          asl     a
  3669:          adc     #$06
  3670:          sta     HDRPNT
  3671:          lda     #$00
  3672:          sta     HDRPNT + 1
  3673:          tya
  3674:          clc
  3675:          adc     #$03
  3676:          sta     BUFPNT + 1
  3677:  L93ED:
  3678:          ldy     #$00
  3679:          sty     BUFPNT
  3680:          pla
  3681:          rts
  3682:  L93F3:
  3683:          bcs     L93F8
  3684:          lda     #$00
  3685:          .byte   ASM_BIT3
  3686:  L93F8:
  3687:          lda     #$84
  3688:          sta     L01B1
  3689:          lda     VBC_PAUNBUF1
  3690:          and     # ~ VBC_PA1_04
  3691:          ora     L01B1
  3692:          sta     VBC_PAUNBUF1
  3693:  L9408:
  3694:          rts
  3695:  L9409:
  3696:          .byte   $60,$60,$60,$60,$60,$60,$60,$60
  3697:          .byte   $60,$60,$60,$60,$60,$60,$60,$60
  3698:          .byte   $60,$40,$40,$40,$40,$40,$40,$40
  3699:          .byte   $20,$20,$20,$20,$20,$20,$00,$00
  3700:          .byte   $00,$00,$00
  3701:  L942C:
  3702:          .byte   $15,$15,$15,$15,$15,$15,$15,$15
  3703:          .byte   $15,$15,$15,$15,$15,$15,$15,$15
  3704:          .byte   $15,$13,$13,$13,$13,$13,$13,$13
  3705:          .byte   $12,$12,$12,$12,$12,$12,$11,$11
  3706:          .byte   $11,$11,$11
  3707:  L944F:
  3708:          lda     #$5A
  3709:          sta     TMP
  3710:  L9453:
  3711:          jsr     L9754
  3712:  L9456:
  3713:          bit     VBC_PAUNBUF1
  3714:          bmi     L9456
  3715:          lda     VDC_PA2
  3716:          cmp     #$52
  3717:          bne     L94A0
  3718:          sta     STAB,y
  3719:          iny
  3720:  L9466:
  3721:          bit     VBC_PAUNBUF1
  3722:          bmi     L9466
  3723:          lda     VDC_PA2
  3724:          sta     STAB,y
  3725:          iny
  3726:          cpy     #$08
  3727:          bne     L9466
  3728:          jsr     L952F
  3729:          ldy     #$04
  3730:          lda     #$00
  3731:  L947D:
  3732:          eor     HEADER,y
  3733:          dey
  3734:          bpl     L947D
  3735:          cmp     #$00
  3736:          bne     L94B7
  3737:          lda     HEADER + 2
  3738:          sta     DRVTRK
  3739:          lda     JOB
  3740:          cmp     #$30
  3741:          beq     L94A9
  3742:          lda     DiskID0
  3743:          cmp     HEADER
  3744:          bne     L94B4
  3745:          lda     DiskID0 + 1
  3746:          cmp     HEADER + 1
  3747:          bne     L94B4
  3748:          jmp     L94BC
  3749:  L94A0:
  3750:          dec     TMP
  3751:          bne     L9453
  3752:          lda     #$02
  3753:          jsr     L99B5
  3754:  L94A9:
  3755:          lda     HEADER
  3756:          sta     DiskID0
  3757:          lda     HEADER + 1
  3758:          sta     DiskID0 + 1
  3759:  L94B1:
  3760:          lda     #$01
  3761:          .byte   ASM_BIT3
  3762:  L94B4:
  3763:          lda     #$0B
  3764:          .byte   ASM_BIT3
  3765:  L94B7:
  3766:          lda     #$09
  3767:          jmp     L99B5
  3768:  L94BC:
  3769:          lda     #$7F
  3770:          sta     CSECT
  3771:          lda     HEADER + 3
  3772:          clc
  3773:          adc     #$02
  3774:          cmp     SECTR
  3775:          bcc     L94CB
  3776:          sbc     SECTR
  3777:  L94CB:
  3778:          sta     NEXTS
  3779:          ldx     #$05
  3780:          stx     JOBN
  3781:          ldx     #$FF
  3782:  L94D3:
  3783:          jsr     L93D1
  3784:          bpl     L951B
  3785:          and     #$01
  3786:          cmp     CDRIVE
  3787:          bne     L951B
  3788:          ldy     #$00
  3789:          lda     (HDRPNT),y
  3790:          cmp     TRACC
  3791:          bne     L951B
  3792:          lda     JOB
  3793:          cmp     #$60
  3794:          beq     L94F8
  3795:          ldy     #$01
  3796:          sec
  3797:          lda     (HDRPNT),y
  3798:          sbc     NEXTS
  3799:          bpl     L94F8
  3800:          clc
  3801:          adc     SECTR
  3802:  L94F8:
  3803:          cmp     CSECT
  3804:          bcs     L951B
  3805:          pha
  3806:          lda     JOB
  3807:          beq     L9516
  3808:          pla
  3809:  .if CompileDrive >= DRIVE_1571_05
  3810:          cmp     #$04
  3811:  .else
  3812:          cmp     #$09
  3813:  .endif
  3814:          bcc     L951B
  3815:  .if CompileDrive >= DRIVE_1571_05
  3816:          cmp     #$08
  3817:  .else
  3818:          cmp     #$0C
  3819:  .endif
  3820:          bcs     L951B
  3821:  L950A:
  3822:          sta     CSECT
  3823:          lda     JOBN
  3824:          tax
  3825:          clc
  3826:          adc     #$03
  3827:          sta     BUFPNT + 1
  3828:          bne     L951B
  3829:  L9516:
  3830:          pla
  3831:          cmp     #$06
  3832:          bcc     L950A
  3833:  L951B:
  3834:          dec     JOBN
  3835:          bpl     L94D3
  3836:          txa
  3837:          bpl     L9525
  3838:          jmp     L99CA
  3839:  L9525:
  3840:          stx     JOBN
  3841:          jsr     L93D1
  3842:          lda     JOB
  3843:          jmp     L9606
  3844:  L952F:
  3845:          lda     BUFPNT
  3846:          pha
  3847:          lda     BUFPNT + 1
  3848:          pha
  3849:          lda     #$24
  3850:          sta     BUFPNT
  3851:          lda     #$00
  3852:          sta     BUFPNT + 1
  3853:          lda     #$00
  3854:          sta     GCRPNT
  3855:          jsr     L98D9
  3856:          lda     BTAB + 3
  3857:          sta     HEADER + 2
  3858:          lda     BTAB + 2
  3859:          sta     HEADER + 3
  3860:          lda     BTAB + 1
  3861:          sta     HEADER + 4
  3862:          jsr     L98D9
  3863:          lda     BTAB
  3864:          sta     HEADER + 1
  3865:          lda     BTAB + 1
  3866:          sta     HEADER
  3867:          pla
  3868:          sta     BUFPNT + 1
  3869:          pla
  3870:          sta     BUFPNT
  3871:          rts
  3872:  empty9562:
  3873:  
  3874:          FillUntil $9600
  3875:  
  3876:  L9600:
  3877:          jsr     L970F
  3878:          jmp     L9754
  3879:  L9606:
  3880:          cmp     #$00
  3881:          beq     L960D
  3882:          jmp     L976E
  3883:  L960D:
  3884:          jsr     L9600
  3885:  L9610:
  3886:          bit     VBC_PAUNBUF1
  3887:          bmi     L9610
  3888:          lda     VDC_PA2
  3889:          tax
  3890:          lda     LA00D,x
  3891:          sta     BTAB
  3892:          txa
  3893:          and     #$07
  3894:          sta     BTAB + 1
  3895:  L9623:
  3896:          bit     VBC_PAUNBUF1
  3897:          bmi     L9623
  3898:          lda     VDC_PA2
  3899:          sta     BTAB + 2
  3900:          and     #$C0
  3901:          ora     BTAB + 1
  3902:          tax
  3903:          lda     L9F0D,x
  3904:          ora     BTAB
  3905:          pha
  3906:          jmp     L9667
  3907:  L963B:
  3908:          bit     VBC_PAUNBUF1
  3909:          bmi     L963B
  3910:          lda     VDC_PA2
  3911:          tax
  3912:          lda     LA00D,x
  3913:          sta     BTAB
  3914:          txa
  3915:          and     #$07
  3916:          sta     BTAB + 1
  3917:  L964E:
  3918:          bit     VBC_PAUNBUF1
  3919:          bmi     L964E
  3920:          lda     VDC_PA2
  3921:          sta     BTAB + 2
  3922:          and     #$C0
  3923:          ora     BTAB + 1
  3924:          tax
  3925:          lda     L9F0D,x
  3926:          ora     BTAB
  3927:          sta     (BUFPNT),y
  3928:          iny
  3929:          beq     L96D7
  3930:  L9667:
  3931:          lda     BTAB + 2
  3932:          tax
  3933:          lda     LA10D,x
  3934:          sta     BTAB
  3935:          txa
  3936:          and     #$01
  3937:          sta     BTAB + 2
  3938:  L9674:
  3939:          bit     VBC_PAUNBUF1
  3940:          bmi     L9674
  3941:          lda     VDC_PA2
  3942:          sta     BTAB + 3
  3943:          and     #$F0
  3944:          ora     BTAB + 2
  3945:          tax
  3946:          lda     L9F0D + 2,x
  3947:          ora     BTAB
  3948:          sta     (BUFPNT),y
  3949:          iny
  3950:          lda     BTAB + 3
  3951:          and     #$0F
  3952:          sta     BTAB + 3
  3953:  L9691:
  3954:          bit     VBC_PAUNBUF1
  3955:          bmi     L9691
  3956:          lda     VDC_PA2
  3957:          sta     CHKSUM
  3958:          and     #$80
  3959:          ora     BTAB + 3
  3960:          tax
  3961:          lda     L9F0D + 16,x
  3962:          sta     BTAB
  3963:          lda     CHKSUM
  3964:          tax
  3965:          lda     LA20D,x
  3966:          ora     BTAB
  3967:          sta     (BUFPNT),y
  3968:          iny
  3969:          txa
  3970:          and     #$03
  3971:          sta     CHKSUM
  3972:  L96B5:
  3973:          bit     VBC_PAUNBUF1
  3974:          bmi     L96B5
  3975:          lda     VDC_PA2
  3976:          sta     BTAB + 1
  3977:          and     #$E0
  3978:          ora     CHKSUM
  3979:          tax
  3980:          lda     L9F0D + 29,x
  3981:          sta     BTAB
  3982:          lda     BTAB + 1
  3983:          tax
  3984:          lda     LA30D,x
  3985:          ora     BTAB
  3986:          sta     (BUFPNT),y
  3987:          iny
  3988:          jmp     L963B
  3989:  L96D7:
  3990:          lda     BTAB + 2
  3991:          tax
  3992:          lda     LA10D,x
  3993:          sta     BTAB
  3994:          txa
  3995:          and     #$01
  3996:          sta     BTAB + 2
  3997:  L96E4:
  3998:          bit     VBC_PAUNBUF1
  3999:          bmi     L96E4
  4000:          lda     VDC_PA2
  4001:          and     #$F0
  4002:          ora     BTAB + 2
  4003:          tax
  4004:          lda     L9F0D + 2,x
  4005:          ora     BTAB
  4006:          sta     BTAB + 1
  4007:          pla
  4008:          cmp     DBID
  4009:          bne     L9707
  4010:          jsr     LF5E9
  4011:          cmp     BTAB + 1
  4012:          beq     L970A
  4013:          lda     #$05
  4014:          .byte   ASM_BIT3
  4015:  L9707:
  4016:          lda     #$04
  4017:          .byte   ASM_BIT3
  4018:  L970A:
  4019:          lda     #$01
  4020:          jmp     L99B5
  4021:  L970F:
  4022:          lda     DiskID0
  4023:          sta     HEADER
  4024:          lda     DiskID0 + 1
  4025:          sta     HEADER + 1
  4026:          ldy     #$00
  4027:          lda     (HDRPNT),y
  4028:          sta     HEADER + 2
  4029:          iny
  4030:          lda     (HDRPNT),y
  4031:          sta     HEADER + 3
  4032:          lda     #$00
  4033:          eor     HEADER
  4034:          eor     HEADER + 1
  4035:          eor     HEADER + 2
  4036:          eor     HEADER + 3
  4037:          sta     HEADER + 4
  4038:          jsr     LF934
  4039:          lda     #$5A
  4040:          sta     TMP
  4041:  L9735:
  4042:          jsr     L9754
  4043:  L9738:
  4044:          lda     STAB,y
  4045:  L973B:
  4046:          bit     VBC_PAUNBUF1
  4047:          bmi     L973B
  4048:          cmp     VDC_PA2
  4049:          bne     L974B
  4050:          iny
  4051:          cpy     #$08
  4052:          bne     L9738
  4053:          rts
  4054:  L974B:
  4055:          dec     TMP
  4056:          bne     L9735
  4057:          lda     #$02
  4058:          jmp     L99B5
  4059:  L9754:
  4060:          ldx     #$0F
  4061:          ldy     #$00
  4062:  L9758:
  4063:          bit     VDC_PB2
  4064:          bpl     L9768
  4065:          dey
  4066:          bne     L9758
  4067:          dex
  4068:          bne     L9758
  4069:          lda     #$03
  4070:          jmp     L99B5
  4071:  L9768:
  4072:          lda     VDC_PA2
  4073:          ldy     #$00
  4074:          rts
  4075:  L976E:
  4076:          cmp     #$10
  4077:          beq     L9775
  4078:          jmp     L9898
  4079:  L9775:
  4080:          jsr     LF5E9
  4081:          sta     CHKSUM
  4082:          lda     VDC_PB2
  4083:          and     #VDC_PB2_WRITEPROTECT
  4084:          bne     L9786
  4085:          lda     #$08
  4086:          jmp     L99B5
  4087:  L9786:
  4088:          jsr     LF78F
  4089:          jsr     L970F
  4090:          ldy     #$09
  4091:  L978E:
  4092:          bit     VBC_PAUNBUF1
  4093:          bmi     L978E
  4094:          bit     VDC_PB2
  4095:          dey
  4096:          bne     L978E
  4097:          lda     #$FF
  4098:          sta     VDC_DDRA2
  4099:          lda     VDC_PCR2
  4100:          and     #$1F
  4101:          ora     #$C0
  4102:          sta     VDC_PCR2
  4103:          lda     #$FF
  4104:          ldy     #$05
  4105:          sta     VDC_PA2
  4106:  L97AF:
  4107:          bit     VBC_PAUNBUF1
  4108:          bmi     L97AF
  4109:          bit     VDC_PB2
  4110:          dey
  4111:          bne     L97AF
  4112:          ldy     #$BB
  4113:  L97BC:
  4114:          lda     NODRV + 1,y
  4115:  L97BF:
  4116:          bit     VBC_PAUNBUF1
  4117:          bmi     L97BF
  4118:          sta     VDC_PA2
  4119:          iny
  4120:          bne     L97BC
  4121:  L97CA:
  4122:          lda     (BUFPNT),y
  4123:  L97CC:
  4124:          bit     VBC_PAUNBUF1
  4125:          bmi     L97CC
  4126:          sta     VDC_PA2
  4127:          iny
  4128:          bne     L97CA
  4129:  L97D7:
  4130:          bit     VBC_PAUNBUF1
  4131:          bmi     L97D7
  4132:          lda     VDC_PCR2
  4133:          ora     #$E0
  4134:          sta     VDC_PCR2
  4135:          lda     #$00
  4136:          sta     VDC_DDRA2
  4137:          jsr     L97F9
  4138:          ldy     JOBN
  4139:  .if CompileDrive >= DRIVE_1571_05
  4140:          jmp     LAAAD
  4141:  .else
  4142:          lda     JOBS0,y
  4143:  .endif
  4144:          eor     #$30
  4145:          sta     JOBS0,y
  4146:          jmp     L944F
  4147:  L97F9:
  4148:          lda     #$00
  4149:          sta     SAVPNT
  4150:          sta     BUFPNT
  4151:          sta     NXTPNT
  4152:          lda     BUFPNT + 1
  4153:          sta     NXTBF
  4154:          lda     #$01
  4155:          sta     BUFPNT + 1
  4156:          sta     SAVPNT + 1
  4157:          lda     #$BB
  4158:          sta     GCRPNT
  4159:          sta     BYTCNT
  4160:          jsr     L98D9
  4161:          lda     BTAB
  4162:          sta     BID
  4163:          ldy     BYTCNT
  4164:          lda     BTAB + 1
  4165:          sta     (SAVPNT),y
  4166:          iny
  4167:          lda     BTAB + 2
  4168:          sta     (SAVPNT),y
  4169:          iny
  4170:          lda     BTAB + 3
  4171:          sta     (SAVPNT),y
  4172:          iny
  4173:          sty     BYTCNT
  4174:  L982B:
  4175:          jsr     L98D9
  4176:          ldy     BYTCNT
  4177:          lda     BTAB
  4178:          sta     (SAVPNT),y
  4179:          iny
  4180:          lda     BTAB + 1
  4181:          sta     (SAVPNT),y
  4182:          iny
  4183:          beq     L984A
  4184:          lda     BTAB + 2
  4185:          sta     (SAVPNT),y
  4186:          iny
  4187:          lda     BTAB + 3
  4188:          sta     (SAVPNT),y
  4189:          iny
  4190:          sty     BYTCNT
  4191:          bne     L982B
  4192:  L984A:
  4193:          lda     BTAB + 2
  4194:          sta     (BUFPNT),y
  4195:          iny
  4196:          lda     BTAB + 3
  4197:          sta     (BUFPNT),y
  4198:          iny
  4199:          sty     BYTCNT
  4200:  L9856:
  4201:          jsr     L98D9
  4202:          ldy     BYTCNT
  4203:          lda     BTAB
  4204:          sta     (BUFPNT),y
  4205:          iny
  4206:          lda     BTAB + 1
  4207:          sta     (BUFPNT),y
  4208:          iny
  4209:          lda     BTAB + 2
  4210:          sta     (BUFPNT),y
  4211:          iny
  4212:          lda     BTAB + 3
  4213:          sta     (BUFPNT),y
  4214:          iny
  4215:          sty     BYTCNT
  4216:          cpy     #$BB
  4217:          bcc     L9856
  4218:          lda     #$45
  4219:          sta     SAVPNT
  4220:          lda     BUFPNT + 1
  4221:          sta     SAVPNT + 1
  4222:          ldy     #$BA
  4223:  L987F:
  4224:          lda     (BUFPNT),y
  4225:          sta     (SAVPNT),y
  4226:          dey
  4227:          bne     L987F
  4228:          lda     (BUFPNT),y
  4229:          sta     (SAVPNT),y
  4230:          ldx     #$BB
  4231:  L988C:
  4232:          lda     NODRV + 1,x
  4233:          sta     (BUFPNT),y
  4234:          iny
  4235:          inx
  4236:          bne     L988C
  4237:          stx     GCRFLG
  4238:          rts
  4239:  L9898:
  4240:          cmp     #$20
  4241:          beq     L989E
  4242:          bne     L98CE
  4243:  L989E:
  4244:          jsr     LF5E9
  4245:          sta     CHKSUM
  4246:          jsr     LF78F
  4247:          jsr     L9600
  4248:          ldy     #$BB
  4249:  L98AB:
  4250:          lda     NODRV + 1,y
  4251:  L98AE:
  4252:          bit     VBC_PAUNBUF1
  4253:          bmi     L98AE
  4254:          eor     VDC_PA2
  4255:          bne     L98D4
  4256:          iny
  4257:          bne     L98AB
  4258:  L98BB:
  4259:          lda     (BUFPNT),y
  4260:  L98BD:
  4261:          bit     VBC_PAUNBUF1
  4262:          bmi     L98BD
  4263:          eor     VDC_PA2
  4264:          bne     L98D4
  4265:          iny
  4266:          cpy     #$FD
  4267:          bne     L98BB
  4268:          beq     L98D1
  4269:  L98CE:
  4270:          jsr     L970F
  4271:  L98D1:
  4272:          lda     #$01
  4273:          .byte   ASM_BIT3
  4274:  L98D4:
  4275:          lda     #$07
  4276:          jmp     L99B5
  4277:  L98D9:
  4278:          ldy     GCRPNT
  4279:          lda     (BUFPNT),y
  4280:          sta     GTAB
  4281:          and     #$07
  4282:          sta     GTAB + 1
  4283:          iny
  4284:          bne     L98EC
  4285:          lda     NXTBF
  4286:          sta     BUFPNT + 1
  4287:          ldy     NXTPNT
  4288:  L98EC:
  4289:          lda     (BUFPNT),y
  4290:          sta     GTAB + 2
  4291:          and     #$C0
  4292:          ora     GTAB + 1
  4293:          sta     GTAB + 1
  4294:          lda     GTAB + 2
  4295:          and     #$01
  4296:          sta     GTAB + 3
  4297:          iny
  4298:          lda     (BUFPNT),y
  4299:          tax
  4300:          and     #$F0
  4301:          ora     GTAB + 3
  4302:          sta     GTAB + 3
  4303:          txa
  4304:          and     #$0F
  4305:          sta     GTAB + 4
  4306:          iny
  4307:          lda     (BUFPNT),y
  4308:          sta     GTAB + 5
  4309:          and     #$80
  4310:          ora     GTAB + 4
  4311:          sta     GTAB + 4
  4312:          lda     GTAB + 5
  4313:          and     #$03
  4314:          sta     GTAB + 6
  4315:          iny
  4316:          bne     L9927
  4317:          lda     NXTBF
  4318:          sta     BUFPNT + 1
  4319:          ldy     NXTPNT
  4320:          sty     BUFPNT
  4321:  L9927:
  4322:          lda     (BUFPNT),y
  4323:          sta     GTAB + 7
  4324:          and     #$E0
  4325:          ora     GTAB + 6
  4326:          sta     GTAB + 6
  4327:          iny
  4328:          sty     GCRPNT
  4329:          ldx     GTAB
  4330:          lda     LA00D,x
  4331:          ldx     GTAB + 1
  4332:          ora     L9F0D,x
  4333:          sta     BTAB
  4334:          ldx     GTAB + 2
  4335:          lda     LA10D,x
  4336:          ldx     GTAB + 3
  4337:          ora     L9F0D + 2,x
  4338:          sta     BTAB + 1
  4339:          ldx     GTAB + 4
  4340:          lda     L9F0D + 16,x
  4341:          ldx     GTAB + 5
  4342:          ora     LA20D,x
  4343:          sta     BTAB + 2
  4344:          ldx     GTAB + 6
  4345:          lda     L9F0D + 29,x
  4346:          ldx     GTAB + 7
  4347:          ora     LA30D,x
  4348:          sta     BTAB + 3
  4349:          rts
  4350:  L9965:
  4351:          lda     #$00
  4352:          sta     GCRPNT
  4353:          sta     SAVPNT
  4354:          sta     BYTCNT
  4355:          lda     #$01
  4356:          sta     NXTBF
  4357:          lda     #$BA
  4358:          sta     NXTPNT
  4359:          lda     BUFPNT + 1
  4360:          sta     SAVPNT + 1
  4361:          jsr     L98D9
  4362:          lda     BTAB
  4363:          sta     BID
  4364:          ldy     BYTCNT
  4365:          lda     BTAB + 1
  4366:          sta     (SAVPNT),y
  4367:          iny
  4368:          lda     BTAB + 2
  4369:          sta     (SAVPNT),y
  4370:          iny
  4371:          lda     BTAB + 3
  4372:          sta     (SAVPNT),y
  4373:          iny
  4374:  L9991:
  4375:          sty     BYTCNT
  4376:          jsr     L98D9
  4377:          ldy     BYTCNT
  4378:          lda     BTAB
  4379:          sta     (SAVPNT),y
  4380:          iny
  4381:          beq     L99B0
  4382:          lda     BTAB + 1
  4383:          sta     (SAVPNT),y
  4384:          iny
  4385:          lda     BTAB + 2
  4386:          sta     (SAVPNT),y
  4387:          iny
  4388:          lda     BTAB + 3
  4389:          sta     (SAVPNT),y
  4390:          iny
  4391:          bne     L9991
  4392:  L99B0:
  4393:          lda     SAVPNT + 1
  4394:          sta     BUFPNT + 1
  4395:          rts
  4396:  L99B5:
  4397:          ldy     JOBN
  4398:          sta     JOBS0,y
  4399:          lda     GCRFLG
  4400:          beq     L99C1
  4401:          jsr     L97F9
  4402:  L99C1:
  4403:          jsr     LF98F
  4404:          ldx     SAVSP
  4405:          txs
  4406:          jmp     L92C8
  4407:  L99CA:
  4408:          lda     VDC_T1HL2
  4409:          sta     VDC_T1HC2
  4410:          lda     VDC_PB2
  4411:          and     #VDC_PB2_WRITEPROTECT
  4412:          cmp     LWPT
  4413:          sta     LWPT
  4414:          bne     L99E2
  4415:          lda     CNTMOTOR1570
  4416:          bne     L99F0
  4417:          beq     L99FE
  4418:  L99E2:
  4419:          lda     #$FF
  4420:          sta     CNTMOTOR1570
  4421:          jsr     L8764
  4422:  
  4423:          SET_WPSW_DIRTY_NO_CR
  4424:  
  4425:          bne     L99FE
  4426:  L99F0:
  4427:          dec     CNTMOTOR1570
  4428:          bne     L99FE
  4429:          lda     DRVST
  4430:          cmp     #$00
  4431:          bne     L99FE
  4432:          jsr     L8770
  4433:  L99FE:
  4434:          lda     PHASE
  4435:          beq     L9A18
  4436:          cmp     #$02
  4437:          bne     L9A0E
  4438:          lda     #$00
  4439:          sta     PHASE
  4440:          beq     L9A18
  4441:  L9A0E:
  4442:          sta     STEPS
  4443:          lda     #$02
  4444:          sta     PHASE
  4445:          jmp     L9A56
  4446:  L9A18:
  4447:          ldx     CDRIVE
  4448:          bmi     L9A23
  4449:          lda     DRVST
  4450:          tay
  4451:          cmp     #$20
  4452:          bne     L9A26
  4453:  L9A23:
  4454:  .if CompileDrive >= DRIVE_1571_05
  4455:          jmp     L9AC6
  4456:  .else
  4457:          jmp     L9AC9
  4458:  .endif
  4459:  L9A26:
  4460:          dec     ACLTIM
  4461:          bne     L9A46
  4462:          tya
  4463:          bpl     L9A31
  4464:          and     #$7F
  4465:          sta     DRVST
  4466:  L9A31:
  4467:          and     #$10
  4468:          beq     L9A46
  4469:          dec     GCRERR
  4470:          bne     L9A46
  4471:          jsr     L8770
  4472:          lda     #$FF
  4473:          sta     CDRIVE
  4474:          lda     #$00
  4475:          sta     DRVST
  4476:          beq     L9A23
  4477:  L9A46:
  4478:          tya
  4479:          and     #$40
  4480:          bne     L9A4E
  4481:  .if CompileDrive >= DRIVE_1571_05
  4482:          jmp     L9AC6
  4483:  .else
  4484:          jmp     L9AC9
  4485:  .endif
  4486:  L9A4E:
  4487:          lda     NXTST
  4488:          bne     L9AA2
  4489:          lda     STEPS
  4490:          beq     L9A99
  4491:  L9A56:
  4492:          lda     STEPS
  4493:          bpl     L9AB3
  4494:          tya
  4495:          pha
  4496:          ldy     #$63
  4497:  L9A5E:
  4498:          lda     VBC_PAUNBUF1
  4499:          ror     a
  4500:          php
  4501:          lda     VBC_PAUNBUF1
  4502:          ror     a
  4503:          ror     a
  4504:          plp
  4505:          and     #$80
  4506:          bcc     L9A71
  4507:          bpl     L9A8C
  4508:          bmi     L9A73
  4509:  L9A71:
  4510:          bmi     L9A8C
  4511:  L9A73:
  4512:          dey
  4513:          bne     L9A5E
  4514:          bcs     L9A8C
  4515:          lda     ADRSED
  4516:          bne     L9A8C
  4517:          lda     VDC_PB2
  4518:          and     #VDC_PB2_STEPPER
  4519:          bne     L9A8C
  4520:          pla
  4521:          tay
  4522:          lda     #$00
  4523:          sta     STEPS
  4524:  .if CompileDrive >= DRIVE_1571_05
  4525:          jmp     L9AC6
  4526:  .else
  4527:          jmp     L9AC9
  4528:  .endif
  4529:  L9A8C:
  4530:          pla
  4531:          tay
  4532:          inc     STEPS
  4533:          lda     VDC_PB2
  4534:          sec
  4535:          sbc     #$01
  4536:          jmp     L9ABB
  4537:  L9A99:
  4538:          lda     #$02
  4539:          sta     ACLTIM
  4540:          sta     NXTST
  4541:  .if CompileDrive >= DRIVE_1571_05
  4542:          jmp     L9AC6
  4543:  .else
  4544:          jmp     L9AC9
  4545:  .endif
  4546:  L9AA2:
  4547:          dec     ACLTIM
  4548:  .if CompileDrive >= DRIVE_1571_05
  4549:          bne     L9AC6
  4550:  .else
  4551:          bne     L9AC9
  4552:  .endif
  4553:          lda     DRVST
  4554:          and     #$BF
  4555:          sta     DRVST
  4556:          lda     #$00
  4557:          sta     NXTST
  4558:  .if CompileDrive >= DRIVE_1571_05
  4559:          jmp     L9AC6
  4560:  .else
  4561:          jmp     L9AC9
  4562:  .endif
  4563:  L9AB3:
  4564:          dec     STEPS
  4565:          lda     VDC_PB2
  4566:          clc
  4567:          adc     #$01
  4568:  L9ABB:
  4569:          and     #$03
  4570:          sta     TMP
  4571:          lda     VDC_PB2
  4572:  .if CompileDrive >= DRIVE_1571_05
  4573:          jmp     LC038
  4574:          nop
  4575:  L9AC6:
  4576:          jmp     LC03F
  4577:  .else
  4578:          and     # ~ VDC_PB2_STEPPER
  4579:          ora     TMP
  4580:          sta     VDC_PB2
  4581:  .endif
  4582:  L9AC9:
  4583:          rts
  4584:  L9ACA:
  4585:          .byte   $21,$22,$23,$24,$25,$26,$27,$28,$29
  4586:  L9AD3:
  4587:          .byte   $02,$02,$04,$06,$08,$08,$0B,$13,$16
  4588:  L9ADC:
  4589:          ldy     #$00
  4590:          ldx     #$1C
  4591:          jsr     L9D63
  4592:          jsr     L9B73
  4593:          jsr     LFE00
  4594:          ldy     #$FF
  4595:  L9AEB:
  4596:          ldx     #$FF
  4597:  L9AED:
  4598:          bit     VDC_PB2
  4599:          bpl     L9AFD
  4600:          dex
  4601:          bne     L9AED
  4602:          dey
  4603:          bne     L9AEB
  4604:  L9AF8:
  4605:          lda     #$02
  4606:          jmp     L9D59
  4607:  L9AFD:
  4608:          ldy     #$00
  4609:          ldx     #$00
  4610:  L9B01:
  4611:          bit     VDC_PB2
  4612:          bpl     L9B01
  4613:  L9B06:
  4614:          lda     VDC_PB2
  4615:          iny
  4616:          bne     L9B0D
  4617:          inx
  4618:  L9B0D:
  4619:          and     #VDC_PB2_SYNC
  4620:          bne     L9B06
  4621:          lda     #$00
  4622:          sta     HINIB
  4623:          txa
  4624:          ldx     #$08
  4625:  L9B18:
  4626:          cmp     L9ACA,x
  4627:          beq     L9B22
  4628:          dex
  4629:          bpl     L9B18
  4630:          bmi     L9AF8
  4631:  L9B22:
  4632:          lda     L9AD3,x
  4633:          sta     BUFFER3 + 38
  4634:          rts
  4635:  L9B29:
  4636:          lda     FTNUM
  4637:          bpl     L9B58
  4638:          lda     #$60
  4639:          sta     DRVST
  4640:          lda     L01B2
  4641:          bne     L9B39
  4642:          lda     #$01
  4643:          .byte   ASM_BIT3
  4644:  L9B39:
  4645:          lda     #$24
  4646:          sta     DRVTRK
  4647:          sta     FTNUM
  4648:          cmp     #$24
  4649:          jsr     L93F3
  4650:          lda     #$A4
  4651:          sta     STEPS
  4652:          lda     VDC_PB2
  4653:          and     # ~ VDC_PB2_STEPPER
  4654:          sta     VDC_PB2
  4655:          lda     #$0A
  4656:          sta     BUFFER3 + 32
  4657:          jmp     L99CA
  4658:  L9B58:
  4659:          ldy     #$00
  4660:          lda     (HDRPNT),y
  4661:          cmp     FTNUM
  4662:          beq     L9B67
  4663:          lda     FTNUM
  4664:          sta     (HDRPNT),y
  4665:          jmp     L99CA
  4666:  L9B67:
  4667:          lda     VDC_PB2
  4668:          and     #VDC_PB2_WRITEPROTECT
  4669:          bne     L9B89
  4670:          lda     #$08
  4671:          jmp     L9D51
  4672:  L9B73:
  4673:          ldx     #$14
  4674:          lda     #$FF
  4675:  L9B77:
  4676:          bit     VBC_PAUNBUF1
  4677:          bmi     L9B77
  4678:          sta     VDC_PA2
  4679:          bit     VDC_PB2
  4680:          dey
  4681:          bne     L9B77
  4682:          dex
  4683:          bne     L9B77
  4684:          rts
  4685:  L9B89:
  4686:          lda     HINIB
  4687:          bpl     L9B90
  4688:          jsr     L9ADC
  4689:  L9B90:
  4690:          lda     BUFFER3 + 38
  4691:          clc
  4692:          lda     #$03
  4693:          sta     HDRPNT + 1
  4694:          lda     #$00
  4695:          sta     HDRPNT
  4696:          sta     BUFFER3 + 40
  4697:          ldy     #$00
  4698:  L9BA1:
  4699:          lda     HBID
  4700:          sta     (HDRPNT),y
  4701:          iny
  4702:          lda     #$00
  4703:          sta     (HDRPNT),y
  4704:          iny
  4705:          lda     BUFFER3 + 40
  4706:          sta     (HDRPNT),y
  4707:          iny
  4708:          lda     FTNUM
  4709:          sta     (HDRPNT),y
  4710:          iny
  4711:          lda     DiskID0 + 1
  4712:          sta     (HDRPNT),y
  4713:          iny
  4714:          lda     DiskID0
  4715:          sta     (HDRPNT),y
  4716:          iny
  4717:          lda     #$0F
  4718:          sta     (HDRPNT),y
  4719:          iny
  4720:          sta     (HDRPNT),y
  4721:          iny
  4722:          tya
  4723:          pha
  4724:          ldx     #$07
  4725:          lda     #$00
  4726:          sta     CHKSUM
  4727:  L9BD0:
  4728:          dey
  4729:          lda     (HDRPNT),y
  4730:          eor     CHKSUM
  4731:          sta     CHKSUM
  4732:          dex
  4733:          bne     L9BD0
  4734:          sta     (HDRPNT),y
  4735:          pla
  4736:          tay
  4737:          inc     BUFFER3 + 40
  4738:          lda     BUFFER3 + 40
  4739:          cmp     SECTR
  4740:          bcc     L9BA1
  4741:          lda     #$03
  4742:          sta     BUFPNT + 1
  4743:          jsr     LFE30
  4744:          ldy     #$BA
  4745:  L9BF1:
  4746:          lda     (HDRPNT),y
  4747:          ldx     #$45
  4748:          stx     HDRPNT
  4749:          sta     (HDRPNT),y
  4750:          ldx     #$00
  4751:          stx     HDRPNT
  4752:          dey
  4753:          cpy     #$FF
  4754:          bne     L9BF1
  4755:          ldy     #$44
  4756:  L9C04:
  4757:          lda     L01BB,y
  4758:          sta     (HDRPNT),y
  4759:          dey
  4760:          bpl     L9C04
  4761:          clc
  4762:          lda     #$03
  4763:          adc     #$02
  4764:          sta     BUFPNT + 1
  4765:          lda     #$00
  4766:          tay
  4767:  L9C16:
  4768:          sta     (BUFPNT),y
  4769:          iny
  4770:          bne     L9C16
  4771:          jsr     LF5E9
  4772:          sta     CHKSUM
  4773:          jsr     LF78F
  4774:          lda     #$00
  4775:          sta     ACTJOB
  4776:          ldx     #$06
  4777:          jsr     L9D63
  4778:  L9C2C:
  4779:          ldy     #$05
  4780:  L9C2E:
  4781:          bit     VBC_PAUNBUF1
  4782:          bmi     L9C2E
  4783:          lda     #$FF
  4784:          sta     VDC_PA2
  4785:          bit     VDC_PB2
  4786:          dey
  4787:          bne     L9C2E
  4788:          ldx     #$0A
  4789:          ldy     ACTJOB
  4790:  L9C42:
  4791:          bit     VBC_PAUNBUF1
  4792:          bmi     L9C42
  4793:          lda     (HDRPNT),y
  4794:          sta     VDC_PA2
  4795:          bit     VDC_PB2
  4796:          iny
  4797:          dex
  4798:          bne     L9C42
  4799:          ldy     #$09
  4800:  L9C55:
  4801:          bit     VBC_PAUNBUF1
  4802:          bmi     L9C55
  4803:          lda     #$55
  4804:          sta     VDC_PA2
  4805:          bit     VDC_PB2
  4806:          dey
  4807:          bne     L9C55
  4808:          lda     #$FF
  4809:          ldy     #$05
  4810:  L9C69:
  4811:          bit     VBC_PAUNBUF1
  4812:          bmi     L9C69
  4813:          sta     VDC_PA2
  4814:          bit     VDC_PB2
  4815:          dey
  4816:          bne     L9C69
  4817:          ldy     #$BB
  4818:  L9C79:
  4819:          bit     VBC_PAUNBUF1
  4820:          bmi     L9C79
  4821:          lda     NODRV + 1,y
  4822:          sta     VDC_PA2
  4823:          bit     VDC_PB2
  4824:          iny
  4825:          bne     L9C79
  4826:  L9C8A:
  4827:          bit     VBC_PAUNBUF1
  4828:          bmi     L9C8A
  4829:          lda     (BUFPNT),y
  4830:          sta     VDC_PA2
  4831:          bit     VDC_PB2
  4832:          iny
  4833:          bne     L9C8A
  4834:          lda     #$55
  4835:          ldy     BUFFER3 + 38
  4836:  L9C9F:
  4837:          bit     VBC_PAUNBUF1
  4838:          bmi     L9C9F
  4839:          sta     VDC_PA2
  4840:          bit     VDC_PB2
  4841:          dey
  4842:          bne     L9C9F
  4843:          lda     ACTJOB
  4844:          clc
  4845:          adc     #$0A
  4846:          sta     ACTJOB
  4847:          dec     BUFFER3 + 40
  4848:          beq     L9CBC
  4849:          jmp     L9C2C
  4850:  L9CBC:
  4851:          bit     VBC_PAUNBUF1
  4852:          bmi     L9CBC
  4853:          bit     VDC_PB2
  4854:  L9CC4:
  4855:          bit     VBC_PAUNBUF1
  4856:          bmi     L9CC4
  4857:          bit     VDC_PB2
  4858:          jsr     LFE00
  4859:          lda     #$C8
  4860:          sta     BUFFER3 + 35
  4861:  L9CD4:
  4862:          lda     #$00
  4863:          sta     ACTJOB
  4864:          lda     SECTR
  4865:          sta     BUFFER3 + 40
  4866:  L9CDD:
  4867:          jsr     L9754
  4868:          ldx     #$0A
  4869:          ldy     ACTJOB
  4870:  L9CE4:
  4871:          lda     (HDRPNT),y
  4872:  L9CE6:
  4873:          bit     VBC_PAUNBUF1
  4874:          bmi     L9CE6
  4875:          cmp     VDC_PA2
  4876:          bne     L9CFE
  4877:          iny
  4878:          dex
  4879:          bne     L9CE4
  4880:          clc
  4881:          lda     ACTJOB
  4882:          adc     #$0A
  4883:          sta     ACTJOB
  4884:          jmp     L9D08
  4885:  L9CFE:
  4886:          dec     BUFFER3 + 35
  4887:          bne     L9CD4
  4888:          lda     #$06
  4889:          jmp     L9D51
  4890:  L9D08:
  4891:          jsr     L9754
  4892:          ldy     #$BB
  4893:  L9D0D:
  4894:          lda     NODRV + 1,y
  4895:  L9D10:
  4896:          bit     VBC_PAUNBUF1
  4897:          bmi     L9D10
  4898:          cmp     VDC_PA2
  4899:          bne     L9CFE
  4900:          iny
  4901:          bne     L9D0D
  4902:  L9D1D:
  4903:          lda     (BUFPNT),y
  4904:  L9D1F:
  4905:          bit     VBC_PAUNBUF1
  4906:          bmi     L9D1F
  4907:          cmp     VDC_PA2
  4908:          bne     L9CFE
  4909:          iny
  4910:          bne     L9D1D
  4911:          dec     BUFFER3 + 40
  4912:          bne     L9CDD
  4913:          inc     FTNUM
  4914:          lda     FTNUM
  4915:          bit     L01B1
  4916:          bmi     L9D3D
  4917:          cmp     #$24
  4918:          .byte   ASM_BIT3
  4919:  L9D3D:
  4920:          cmp     #$47
  4921:          bcs     L9D44
  4922:          jmp     L99CA
  4923:  L9D44:
  4924:          lda     #$FF
  4925:          sta     FTNUM
  4926:          lda     #$00
  4927:          sta     GCRFLG
  4928:          lda     #$01
  4929:          jmp     L99B5
  4930:  L9D51:
  4931:          dec     BUFFER3 + 32
  4932:          beq     L9D59
  4933:          jmp     L99CA
  4934:  L9D59:
  4935:          ldy     #$FF
  4936:          sty     FTNUM
  4937:          iny
  4938:          sty     GCRFLG
  4939:          jmp     L99B5
  4940:  L9D63:
  4941:          lda     VDC_PCR2
  4942:          and     #$1F
  4943:          ora     #$C0
  4944:          sta     VDC_PCR2
  4945:          lda     #$FF
  4946:          sta     VDC_DDRA2
  4947:          lda     #$55
  4948:          ldy     #$00
  4949:  L9D76:
  4950:          bit     VBC_PAUNBUF1
  4951:          bmi     L9D76
  4952:          bit     VDC_PB2
  4953:          sta     VDC_PA2
  4954:          dey
  4955:          bne     L9D76
  4956:          dex
  4957:          bne     L9D76
  4958:          rts
  4959:  L9D88:
  4960:          pha
  4961:          txa
  4962:          pha
  4963:          tya
  4964:          pha
  4965:          lda     CIA_ICR
  4966:          and     #CIA_ICR_B_SP
  4967:          beq     L9DBA
  4968:          bit     FLGMODE1570
  4969:          bmi     L9DBA
  4970:          lda     VBC_PAUNBUF1
  4971:          ora     #VBC_PA1_20
  4972:          sta     VBC_PAUNBUF1
  4973:          lda     #$DE
  4974:          sta     VIRQJOB1570
  4975:          lda     #$9D
  4976:          sta     VIRQJOB1570 + 1
  4977:          lda     #$40
  4978:          sta     VDC_T1HL2
  4979:          sta     VDC_T1HC2
  4980:          lda     #$00
  4981:          sta     NXTST
  4982:          jmp     L9DEA
  4983:  L9DBA:
  4984:          lda     VBC_IFR1
  4985:          and     #$02
  4986:          beq     L9DC4
  4987:          jsr     SetATNPending                   ; Set the ATN pending flag to mark that the bus must be processed
  4988:  L9DC4:
  4989:          lda     VDC_IFR2
  4990:          asl     a
  4991:          bpl     L9DCD
  4992:          jsr     LF2B0
  4993:  L9DCD:
  4994:          tsx
  4995:          lda     L0104,x
  4996:          and     #$10
  4997:          beq     L9DD8
  4998:          jsr     LF2B0
  4999:  L9DD8:
  5000:          pla
  5001:          tay
  5002:          pla
  5003:          tax
  5004:          pla
  5005:          rti
  5006:  L9DDE:
  5007:          pha
  5008:          txa
  5009:          pha
  5010:          tya
  5011:          pha
  5012:          lda     CIA_ICR
  5013:          and     #CIA_ICR_B_SP
  5014:          beq     L9DF2
  5015:  L9DEA:
  5016:          lda     BITCNT
  5017:          ora     #$40
  5018:          sta     BITCNT
  5019:          bne     L9E14
  5020:  L9DF2:
  5021:          lda     VBC_IFR1
  5022:          and     #$02
  5023:          beq     L9E00
  5024:          bit     VBC_PA1
  5025:          lda     #$01
  5026:          sta     ATNPND
  5027:  L9E00:
  5028:          tsx
  5029:          lda     L0104,x
  5030:          and     #$10
  5031:          beq     L9E0B
  5032:          jsr     L92BA
  5033:  L9E0B:
  5034:          lda     VDC_IFR2
  5035:          asl     a
  5036:          bpl     L9E14
  5037:          jsr     L92BA
  5038:  L9E14:
  5039:          pla
  5040:          tay
  5041:          pla
  5042:          tax
  5043:          pla
  5044:          rti
  5045:  empty9e1a:
  5046:  
  5047:          FillUntil $9F09
  5048:  
  5049:          .byte   $08,$00,$01,$FF
  5050:  
  5051:  L9F0D:
  5052:          .byte   $0C,$04,$05,$FF,$FF,$02,$03,$FF
  5053:          .byte   $0F,$06,$07,$FF,$09,$0A,$0B,$FF
  5054:          .byte   $0D,$0E,$80,$FF,$00,$00,$10,$40
  5055:          .byte   $FF,$20,$C0,$60,$40,$A0,$50,$E0
  5056:          .byte   $FF,$FF,$FF,$02,$20,$08,$30,$FF
  5057:          .byte   $FF,$00,$F0,$FF,$60,$01,$70,$FF
  5058:          .byte   $FF,$FF,$90,$03,$A0,$0C,$B0,$FF
  5059:          .byte   $FF,$04,$D0,$FF,$E0,$05,$80,$FF
  5060:          .byte   $90,$FF,$08,$0C,$FF,$0F,$09,$0D
  5061:          .byte   $80,$02,$FF,$FF,$FF,$03,$FF,$FF
  5062:          .byte   $00,$FF,$FF,$0F,$FF,$0F,$FF,$FF
  5063:          .byte   $10,$06,$FF,$FF,$FF,$07,$00,$20
  5064:          .byte   $A0,$FF,$FF,$06,$FF,$09,$FF,$FF
  5065:          .byte   $C0,$0A,$FF,$FF,$FF,$0B,$FF,$FF
  5066:          .byte   $40,$FF,$FF,$07,$FF,$0D,$FF,$FF
  5067:          .byte   $50,$0E,$FF,$FF,$FF,$FF,$10,$30
  5068:          .byte   $B0,$FF,$00,$04,$02,$06,$0A,$0E
  5069:          .byte   $80,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5070:          .byte   $20,$FF,$08,$09,$80,$10,$C0,$50
  5071:          .byte   $30,$30,$F0,$70,$90,$B0,$D0,$FF
  5072:          .byte   $FF,$FF,$00,$0A,$FF,$FF,$FF,$FF
  5073:          .byte   $F0
  5074:  L9FB6:
  5075:          brk
  5076:          nop
  5077:  L9FB8:
  5078:          lda     JOBS0,x
  5079:          bmi     L9FB8
  5080:          rts
  5081:  
  5082:  L9FBD:
  5083:          .byte   $60,$FF,$01,$0B,$FF,$FF,$FF,$FF
  5084:          .byte   $70,$FF,$FF,$FF,$FF,$FF,$C0,$F0
  5085:          .byte   $D0,$FF,$01,$05,$03,$07,$0B,$FF
  5086:          .byte   $90,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5087:          .byte   $A0,$FF,$0C,$0D,$FF,$FF,$FF,$FF
  5088:          .byte   $B0,$FF,$FF,$FF,$FF,$FF,$40,$60
  5089:          .byte   $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF
  5090:          .byte   $D0,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5091:          .byte   $E0,$FF,$05,$FF,$FF,$FF,$FF,$FF
  5092:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$50,$70
  5093:  LA00D:
  5094:          .byte   $0C,$04,$05,$FF,$FF,$02,$03,$FF
  5095:          .byte   $0F,$06,$07,$FF,$09,$0A,$0B,$FF
  5096:          .byte   $0D,$0E,$80,$FF,$00,$00,$10,$40
  5097:          .byte   $FF,$20,$C0,$60,$40,$A0,$50,$E0
  5098:          .byte   $FF,$FF,$FF,$02,$20,$08,$30,$30
  5099:          .byte   $30,$00,$F0,$FF,$60,$01,$70,$FF
  5100:          .byte   $FF,$FF,$90,$03,$A0,$0C,$B0,$FF
  5101:          .byte   $FF,$04,$D0,$FF,$E0,$05,$80,$FF
  5102:          .byte   $90,$FF,$08,$0C,$FF,$0F,$09,$0D
  5103:          .byte   $80,$80,$80,$80,$80,$80,$80,$80
  5104:          .byte   $00,$00,$00,$00,$00,$00,$00,$00
  5105:          .byte   $10,$10,$10,$10,$10,$10,$10,$10
  5106:          .byte   $A0,$FF,$FF,$06,$FF,$09,$FF,$FF
  5107:          .byte   $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0
  5108:          .byte   $40,$40,$40,$40,$40,$40,$40,$40
  5109:          .byte   $50,$50,$50,$50,$50,$50,$50,$50
  5110:          .byte   $B0,$FF,$00,$04,$02,$06,$0A,$0E
  5111:          .byte   $80,$80,$80,$80,$80,$80,$80,$80
  5112:          .byte   $20,$20,$20,$20,$20,$20,$20,$20
  5113:          .byte   $30,$30,$30,$30,$30,$30,$30,$30
  5114:          .byte   $FF,$FF,$00,$0A,$0A,$0A,$0A,$0A
  5115:          .byte   $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0
  5116:          .byte   $60,$60,$60,$60,$60,$60,$60,$60
  5117:          .byte   $70,$70,$70,$70,$70,$70,$70,$70
  5118:          .byte   $D0,$FF,$01,$05,$03,$07,$0B,$FF
  5119:          .byte   $90,$90,$90,$90,$90,$90,$90,$90
  5120:          .byte   $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0
  5121:          .byte   $B0,$B0,$B0,$B0,$B0,$B0,$B0,$B0
  5122:          .byte   $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF
  5123:          .byte   $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0
  5124:          .byte   $E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0
  5125:          .byte   $05,$05,$05,$05,$05,$05,$50,$70
  5126:  
  5127:  LA10D:
  5128:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5129:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5130:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  5131:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  5132:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  5133:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  5134:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  5135:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  5136:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5137:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5138:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  5139:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  5140:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  5141:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  5142:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  5143:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  5144:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5145:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5146:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  5147:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  5148:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  5149:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  5150:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  5151:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  5152:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5153:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5154:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  5155:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  5156:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  5157:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  5158:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  5159:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  5160:  
  5161:  LA20D:
  5162:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5163:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5164:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5165:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5166:          .byte   $FF,$FF,$FF,$FF,$08,$08,$08,$08
  5167:          .byte   $00,$00,$00,$00,$01,$01,$01,$01
  5168:          .byte   $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C
  5169:          .byte   $04,$04,$04,$04,$05,$05,$05,$05
  5170:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5171:          .byte   $02,$02,$02,$02,$03,$03,$03,$03
  5172:          .byte   $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F
  5173:          .byte   $06,$06,$06,$06,$07,$07,$07,$07
  5174:          .byte   $FF,$FF,$FF,$FF,$09,$09,$09,$09
  5175:          .byte   $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B
  5176:          .byte   $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D
  5177:          .byte   $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF
  5178:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5179:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5180:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5181:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5182:          .byte   $FF,$FF,$FF,$FF,$08,$08,$08,$08
  5183:          .byte   $00,$00,$00,$00,$01,$01,$01,$01
  5184:          .byte   $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C
  5185:          .byte   $04,$04,$04,$04,$05,$05,$05,$05
  5186:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5187:          .byte   $02,$02,$02,$02,$03,$03,$03,$03
  5188:          .byte   $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F
  5189:          .byte   $06,$06,$06,$06,$07,$07,$07,$07
  5190:          .byte   $FF,$FF,$FF,$FF,$09,$09,$09,$09
  5191:          .byte   $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B
  5192:          .byte   $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D
  5193:          .byte   $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF
  5194:  
  5195:  LA30D:
  5196:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5197:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5198:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5199:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5200:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5201:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5202:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5203:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5204:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5205:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5206:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5207:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5208:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5209:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5210:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5211:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5212:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5213:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5214:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5215:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5216:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5217:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5218:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5219:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5220:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5221:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5222:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5223:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5224:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  5225:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  5226:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  5227:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  5228:  
  5229:  LA40D:
  5230:          lda     #MAXTRACK_DOUBLESIDED + 1
  5231:          sta     MAXTRACK_ADJUSTED
  5232:          lda     #$03
  5233:          jsr     LD6D3
  5234:          ldx     #$03
  5235:          lda     #$00
  5236:          sta     L01B2
  5237:          lda     #$F0
  5238:          sta     HINIB
  5239:          sta     JOBS0,x
  5240:          jsr     L9FB6
  5241:          cmp     #$02
  5242:          bcs     LA470
  5243:          ldy     #$03
  5244:  LA42D:
  5245:          lda     #$01
  5246:          sta     TRACK3
  5247:          lda     #$00
  5248:          sta     SECTOR3
  5249:          lda     #$80
  5250:          sta     JOBS0,x
  5251:          jsr     L9FB6
  5252:          cmp     #$02
  5253:          bcc     LA445
  5254:          dey
  5255:          bpl     LA42D
  5256:          bcs     LA470
  5257:  LA445:
  5258:  .if CompileDrive >= DRIVE_1571
  5259:          lda     #$01
  5260:  .else
  5261:          rts
  5262:          nop
  5263:  .endif
  5264:          sta     L01B2
  5265:          lda     #$F0
  5266:          sta     HINIB
  5267:          sta     JOBS0,x
  5268:          jsr     L9FB6
  5269:          cmp     #$02
  5270:          bcs     LA470
  5271:          ldy     #$03
  5272:  LA459:
  5273:          lda     #$24
  5274:          sta     TRACK3
  5275:          lda     #$00
  5276:          sta     SECTOR3
  5277:          lda     #$80
  5278:          sta     JOBS0,x
  5279:          jsr     L9FB6
  5280:          cmp     #$02
  5281:          bcs     LA46D
  5282:          rts
  5283:  LA46D:
  5284:          dey
  5285:          bpl     LA459
  5286:  LA470:
  5287:          ldx     #$00
  5288:          bit     JOBRTN
  5289:          stx     JOBRTN
  5290:          bpl     LA47B
  5291:          rts
  5292:  LA47B:
  5293:          jmp     LE60A
  5294:  LA47E:
  5295:          txa
  5296:          ldx     #$05
  5297:          bne     LA486
  5298:  LA483:
  5299:          txa
  5300:          ldx     #$0D
  5301:  LA486:
  5302:          dex
  5303:          bne     LA486
  5304:          tax
  5305:          rts
  5306:  LA48B:
  5307:          lda     BMPNT
  5308:          sta     TMP1570
  5309:          lda     BMPNT + 1
  5310:          sta     TMP1570 + 1
  5311:          rts
  5312:  
  5313:  LA496:
  5314:          lda     TMP1570
  5315:          sta     BMPNT
  5316:          lda     TMP1570 + 1
  5317:          sta     BMPNT + 1
  5318:          rts
  5319:          ; --------------------
  5320:  
  5321:  LA4A1:
  5322:          ldx     DRVNUM
  5323:  
  5324:          lda     a:NODRV,x
  5325:          beq     LA4AD
  5326:          lda     #ERRORCODE_74_DRIVE_NOT_READY
  5327:  .if CompileDrive >= DRIVE_1571_05
  5328:          jsr     LE645
  5329:  .else
  5330:          jsr     LE648
  5331:  .endif
  5332:  LA4AD:
  5333:          jsr     LF119
  5334:          jsr     LF0DF
  5335:  .if CompileDrive >= DRIVE_1571_05
  5336:          jmp     LA4C2
  5337:  .else
  5338:          lda     WBAM
  5339:  .endif
  5340:          beq     LA4BF
  5341:          ora     #$80
  5342:          sta     WBAM
  5343:          bne     LA4C2
  5344:  LA4BF:
  5345:          jsr     LA58D
  5346:  LA4C2:
  5347:          jsr     LA48B
  5348:          jsr     LA534
  5349:          lda     TRACK
  5350:          sec
  5351:          sbc     #$24
  5352:          tay
  5353:          lda     (BMPNT),y
  5354:          pha
  5355:          jsr     LA496
  5356:          pla
  5357:          rts
  5358:  .if CompileDrive >= DRIVE_1571_05
  5359:          .byte   "DAVID G. SIRACUSA"
  5360:  .elseif CompileDrive >= DRIVE_1571
  5361:  .else
  5362:          FillUntil $A4DD
  5363:          .byte   "STEVE LAM",$0D
  5364:  .endif
  5365:  
  5366:          FillUntil $A4E7
  5367:  
  5368:  LA4E7:
  5369:          lda     TRACK
  5370:          sec
  5371:          sbc     #$24
  5372:          tay
  5373:          lda     SECTOR
  5374:          lsr     a
  5375:          lsr     a
  5376:          lsr     a
  5377:          clc
  5378:          adc     LA5DB,y
  5379:          tay
  5380:          lda     SECTOR
  5381:          and     #$07
  5382:          tax
  5383:          lda     L0146,y
  5384:          and     LEFE9,x
  5385:          php
  5386:          lda     L0146,y
  5387:          plp
  5388:          rts
  5389:  LA508:
  5390:          jsr     LA48B
  5391:          jsr     LA534
  5392:          lda     TRACK
  5393:          sec
  5394:          sbc     #$24
  5395:          tay
  5396:          clc
  5397:          lda     (BMPNT),y
  5398:          adc     #$01
  5399:          sta     (BMPNT),y
  5400:          jmp     LA496
  5401:  LA51E:
  5402:          jsr     LA48B
  5403:          jsr     LA534
  5404:          lda     TRACK
  5405:          sec
  5406:          sbc     #$24
  5407:          tay
  5408:          sec
  5409:          lda     (BMPNT),y
  5410:          sbc     #$01
  5411:          sta     (BMPNT),y
  5412:          jmp     LA496
  5413:  LA534:
  5414:          ldx     #$0D
  5415:          lda     BUF0,x
  5416:          and     #$0F
  5417:          tax
  5418:          lda     TableHighBytesOfBuffers,x
  5419:          sta     BMPNT + 1
  5420:          lda     #$DD
  5421:          sta     BMPNT
  5422:          rts
  5423:  LA545:
  5424:          lda     T0
  5425:          pha
  5426:  .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
  5427:          jsr     LAB8D
  5428:  .endif
  5429:          lda     TRACK
  5430:          sec
  5431:          sbc     #$24
  5432:          tay
  5433:          pha
  5434:  .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
  5435:  .else
  5436:          jsr     LA48B
  5437:  .endif
  5438:          jsr     LA534
  5439:          lda     (BMPNT),y
  5440:          pha
  5441:          lda     #$00
  5442:          sta     T0
  5443:          lda     #$01
  5444:          sta     BMPNT + 1
  5445:          lda     LA5DB,y
  5446:          clc
  5447:          adc     #$46
  5448:          sta     BMPNT
  5449:          ldy     #$02
  5450:  LA56A:
  5451:          ldx     #$07
  5452:  LA56C:
  5453:          lda     (BMPNT),y
  5454:          and     LEFE9,x
  5455:          beq     LA575
  5456:          inc     T0
  5457:  LA575:
  5458:          dex
  5459:          bpl     LA56C
  5460:          dey
  5461:          bpl     LA56A
  5462:          pla
  5463:          cmp     T0
  5464:          beq     LA585
  5465:          lda     #ERRORCODE_71_DIR_ERROR
  5466:          jsr     LE645
  5467:  LA585:
  5468:          pla
  5469:          tay
  5470:          pla
  5471:          sta     T0
  5472:          jmp     LA496
  5473:  LA58D:
  5474:          lda     VBC_PAUNBUF1
  5475:          and     #VBC_PA1_20
  5476:          bne     LA597
  5477:  LA594:
  5478:          jmp     LD58A
  5479:  LA597:
  5480:          lda     MAXTRACK_ADJUSTED
  5481:          cmp     #MAXTRACK_SINGLESIDED + 2
  5482:          bcc     LA594
  5483:          ldx     JOBNUM
  5484:          lda     LSTJOB,x
  5485:          pha
  5486:          jsr     LD58A
  5487:          jsr     LA48B
  5488:          jsr     LEF3A
  5489:          jsr     LF008
  5490:          lda     JOBNUM
  5491:          asl     a
  5492:          tax
  5493:          lda     #$35
  5494:          sta     TRACK0,x
  5495:          ldy     #$68
  5496:  LA5BA:
  5497:          lda     L0146,y
  5498:          sta     (BMPNT),y
  5499:          dey
  5500:          bpl     LA5BA
  5501:          jsr     LA496
  5502:          jsr     LD58A
  5503:          lda     JOBNUM
  5504:          asl     a
  5505:          tax
  5506:          lda     LFE85
  5507:          sta     TRACK0,x
  5508:          jsr     LD586
  5509:          pla
  5510:          ldx     JOBNUM
  5511:          sta     LSTJOB,x
  5512:          rts
  5513:  LA5DB:
  5514:          .byte   $00,$03,$06,$09,$0C,$0F,$12,$15
  5515:          .byte   $18,$1B,$1E,$21,$24,$27,$2A,$2D
  5516:          .byte   $30,$33,$36,$39,$3C,$3F,$42,$45
  5517:          .byte   $48,$4B,$4E,$51,$54,$57,$5A,$5D
  5518:          .byte   $60,$63,$66
  5519:  LA5FE:
  5520:          lda     VBC_PAUNBUF1
  5521:          and     #VBC_PA1_20
  5522:          beq     LA614
  5523:          ldy     #$00
  5524:          ldx     #$00
  5525:          lda     #$01
  5526:          sta     FILTBL
  5527:          jsr     LC312
  5528:          jmp     LE7A8
  5529:  LA614:
  5530:          lda     #$8D
  5531:          jsr     SearchInCmdline
  5532:          jmp     LE7A8
  5533:  
  5534:  Patch1570CallToParseCommandBufferAndExecuteCommand:
  5535:          jsr     ParseCommandBufferAndExecuteCommand
  5536:          jsr     L81B2
  5537:          lda     BITCNT
  5538:          and     #$7F
  5539:          sta     BITCNT
  5540:          jmp     END_Patch1570CallToParseCommandBufferAndExecuteCommand
  5541:          ; -----------------
  5542:  
  5543:  LA62B:
  5544:          lda     #$FF
  5545:          sta     ACLTIM
  5546:          lda     #$06
  5547:          sta     GCRERR
  5548:          rts
  5549:  LA634:
  5550:          bne     LA63D
  5551:          lda     CNTMOTOR1570
  5552:          bne     LA64B
  5553:          beq     LA657
  5554:  LA63D:
  5555:          lda     #$FF
  5556:          sta     CNTMOTOR1570
  5557:          jsr     L8764
  5558:          SET_WPSW_DIRTY
  5559:          bne     LA657
  5560:  LA64B:
  5561:          dec     CNTMOTOR1570
  5562:          bne     LA657
  5563:          lda     DRVST
  5564:          bne     LA657
  5565:          jsr     L8770
  5566:  LA657:
  5567:          jmp     LF9B1
  5568:  
  5569:  PATCH_INIT_BC_1570:
  5570:          lda     #VBC_PB1_1540_DATAOUT
  5571:          sta     VBC_PB1
  5572:          lda     #VBC_PA1_20
  5573:          sta     VBC_PA1
  5574:  .if CompileDrive >= DRIVE_1571CR
  5575:          jmp     PATCH_INIT_CSG5710
  5576:  .else
  5577:          jmp     PATCH_INIT_BC_1570_END
  5578:  .endif
  5579:          ; --------------------------------
  5580:  
  5581:  LA667:
  5582:          lda     VBC_PAUNBUF1
  5583:          and     #VBC_PA1_20
  5584:          bne     LA671
  5585:  LA66E:
  5586:          jmp     LD586
  5587:          ; ----------------------------
  5588:  
  5589:  LA671:
  5590:          lda     MAXTRACK_ADJUSTED
  5591:          cmp     #MAXTRACK_SINGLESIDED + 2
  5592:          bcc     LA66E
  5593:          jsr     LA48B
  5594:          lda     #$00
  5595:          sta     BMPNT
  5596:          ldx     JOBNUM
  5597:          lda     TableHighBytesOfBuffers,x
  5598:          sta     BMPNT + 1
  5599:          lda     #$FF
  5600:  .if CompileDrive >= DRIVE_1571_05
  5601:          jmp     PATCH_LAB72
  5602:  PATCH_LAB72_END:
  5603:  
  5604:  .else
  5605:          sta     JOBRTN
  5606:  .endif
  5607:          lda     JOBNUM
  5608:          asl     a
  5609:          tax
  5610:          lda     #$35
  5611:          sta     TRACK0,x
  5612:          jsr     LD586
  5613:          cmp     #$02
  5614:          ror     a
  5615:          and     #$80
  5616:          eor     #$80
  5617:          sta     L01AF
  5618:          bpl     LA6AC
  5619:          ldy     #$68
  5620:  LA6A4:
  5621:          lda     (BMPNT),y
  5622:          sta     L0146,y
  5623:          dey
  5624:          bpl     LA6A4
  5625:  LA6AC:
  5626:          lda     #$FF
  5627:          sta     JOBRTN
  5628:  
  5629:  LA6B1:
  5630:          lda     JOBNUM
  5631:          asl     a
  5632:          tax
  5633:          lda     LFE85
  5634:          sta     TRACK0,x
  5635:          jsr     LD586
  5636:          cmp     #$02
  5637:          bcc     LA6D1
  5638:          tax
  5639:          lda     #MAXTRACK_SINGLESIDED + 1
  5640:          sta     MAXTRACK_ADJUSTED
  5641:          jsr     LA496
  5642:          txa
  5643:          jsr     LE60A
  5644:          jmp     LD644
  5645:  LA6D1:
  5646:          ldy     #$03
  5647:          lda     (BMPNT),y
  5648:          and     L01AF
  5649:          bmi     LA6DD
  5650:          lda     #$24
  5651:          .byte   ASM_BIT3
  5652:  LA6DD:
  5653:          lda     #MAXTRACK_DOUBLESIDED + 1
  5654:          sta     MAXTRACK_ADJUSTED
  5655:  
  5656:  .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
  5657:          jmp     LAB24
  5658:  .else
  5659:          jmp     LA496
  5660:  .endif
  5661:  LA6E5:
  5662:          jsr     LD58C
  5663:          pha
  5664:          cmp     #$02
  5665:          bcs     LA736
  5666:          lda     VBC_PAUNBUF1
  5667:          and     #VBC_PA1_20
  5668:          beq     LA736
  5669:          lda     #MAXTRACK_DOUBLESIDED + 1
  5670:          sta     MAXTRACK_ADJUSTED
  5671:          lda     #$FF
  5672:          sta     JOBRTN
  5673:          lda     HEADER
  5674:          pha
  5675:          lda     HEADER + 1
  5676:          pha
  5677:          lda     JOBNUM
  5678:          asl     a
  5679:          tax
  5680:          lda     #$35
  5681:          sta     TRACK0,x
  5682:          lda     #$B0
  5683:  .if CompileDrive >= DRIVE_1571_05
  5684:          jsr     LAADE
  5685:  .else
  5686:          jsr     LD58C
  5687:  .endif
  5688:          cmp     #$02
  5689:          pla
  5690:          tay
  5691:          pla
  5692:          tax
  5693:          bcs     LA724
  5694:          cpx     HEADER
  5695:          bne     LA724
  5696:          cpy     HEADER + 1
  5697:          bne     LA724
  5698:          lda     #$47
  5699:          .byte   ASM_BIT3
  5700:  LA724:
  5701:          lda     #MAXTRACK_SINGLESIDED + 1
  5702:          sta     MAXTRACK_ADJUSTED
  5703:          sty     HEADER + 1
  5704:          stx     HEADER
  5705:          lda     JOBNUM
  5706:          asl     a
  5707:          tax
  5708:          lda     LFE85
  5709:          sta     TRACK0,x
  5710:  LA736:
  5711:          pla
  5712:          rts
  5713:  LA738:
  5714:          jsr     LEF3A
  5715:          lda     VBC_PAUNBUF1
  5716:          and     #VBC_PA1_20
  5717:          beq     LA74C
  5718:          lda     #$00
  5719:          ldy     #$68
  5720:  LA746:
  5721:          sta     L0146,y
  5722:          dey
  5723:          bpl     LA746
  5724:  LA74C:
  5725:          jmp     LF008
  5726:  LA74F:
  5727:          pha
  5728:          lda     VBC_PAUNBUF1
  5729:          and     #VBC_PA1_20
  5730:          beq     LA75F
  5731:          pla
  5732:          cmp     #$24
  5733:          bcc     LA760
  5734:          sbc     #$23
  5735:          .byte   ASM_BIT2
  5736:  LA75F:
  5737:          pla
  5738:  LA760:
  5739:          ldx     LFED6
  5740:          rts
  5741:  
  5742:  LA764:
  5743:          jsr     LF005
  5744:          lda     VBC_PAUNBUF1
  5745:          and     #VBC_PA1_20
  5746:          bne     LA771
  5747:          lda     #$24
  5748:          .byte   ASM_BIT3
  5749:  LA771:
  5750:          lda     #MAXTRACK_DOUBLESIDED + 1
  5751:          sta     MAXTRACK_ADJUSTED
  5752:  
  5753:          jmp     LEE43
  5754:  LA779:
  5755:          lda     VBC_PAUNBUF1
  5756:          and     #VBC_PA1_20
  5757:          bne     LA783
  5758:          jmp     LC8C6
  5759:  LA783:
  5760:          jmp     LA40D
  5761:  
  5762:  LA786:
  5763:          lda     VBC_PA1
  5764:          and     # ~ VBC_PA1_20
  5765:          sta     VBC_PA1
  5766:  
  5767:          jsr     LA483
  5768:  
  5769:          ; also initialize the CIA
  5770:  
  5771:          lda     #CIA_ICR_BW_UNSET | ~ CIA_ICR_BW_SET
  5772:          sta     CIA_ICR
  5773:  
  5774:  .if CompileDrive >= DRIVE_1571CR
  5775:  .else
  5776:          lda     #CIA_CRA_B_ONESHOT
  5777:          sta     CIA_CRA
  5778:  ;       lda     #CIA_CRB_B_ONESHOT      ; same as CIA_CRA_B_ONESHOT, thus, it can be ommitted
  5779:          sta     CIA_CRB
  5780:          lda     #>$0006
  5781:          sta     CIA_TAHI
  5782:          lda     #<$0006
  5783:          sta     CIA_TALO
  5784:  
  5785:          lda     #CIA_CRA_B_START
  5786:          sta     CIA_CRA
  5787:  .endif
  5788:  
  5789:          jsr     L81B2
  5790:          jmp     TestATN
  5791:  
  5792:          FillUntil $A7B3
  5793:  
  5794:  ProcessBus1570:
  5795:  .if CompileDrive = DRIVE_1571_03
  5796:          lda     VBC_PAUNBUF1
  5797:  .else
  5798:          jsr     LAA62
  5799:  .endif
  5800:          and     #VBC_PA1_20
  5801:          beq     LA7BD
  5802:          jmp     L80CE
  5803:  LA7BD:
  5804:          jmp     ProcessBus
  5805:  
  5806:  PATCH_ShortReset:
  5807:          ; this is the actual patch
  5808:          sei                                     ; disallow interrupts --> blocking job loop
  5809:  
  5810:          ldx     #<SP_END                        ; set SP to $0145
  5811:          txs
  5812:  
  5813:          jmp     PATCH_ShortReset_END            ; return to the short reset routine
  5814:  
  5815:  LA7C7:
  5816:  .if CompileDrive >= DRIVE_1571
  5817:          lda     VBC_PAUNBUF1
  5818:  .else
  5819:          jmp     LA7CE
  5820:  .endif
  5821:          and     #VBC_PA1_20
  5822:  LA7CC:
  5823:          bne     LA7D7
  5824:  LA7CE:
  5825:          ldy     #$03
  5826:          lda     #$00
  5827:          sta     (BMPNT),y
  5828:          jmp     LEEB7
  5829:  LA7D7:
  5830:          lda     MAXTRACK_ADJUSTED
  5831:          cmp     #MAXTRACK_SINGLESIDED + 2
  5832:          bcc     LA7CE
  5833:          ldy     #$01
  5834:          ldx     #$00
  5835:  LA7E2:
  5836:          cpy     #$12
  5837:          beq     LA81A
  5838:          txa
  5839:          pha
  5840:          lda     #$00
  5841:          sta     T0
  5842:          sta     T1
  5843:          sta     T2
  5844:          lda     L9409 + 34,y
  5845:          tax
  5846:  LA7F4:
  5847:          sec
  5848:          rol     T0
  5849:          rol     T1
  5850:          rol     T2
  5851:          dex
  5852:          bne     LA7F4
  5853:          pla
  5854:          tax
  5855:          lda     T0
  5856:          sta     L0146,x
  5857:          lda     T1
  5858:          sta     L0147,x
  5859:          lda     T2
  5860:          sta     L0148,x
  5861:          inx
  5862:          inx
  5863:          inx
  5864:          cpx     #$33
  5865:          bne     LA81A
  5866:          inx
  5867:          inx
  5868:          inx
  5869:          iny
  5870:  LA81A:
  5871:          iny
  5872:          cpy     #$24
  5873:          bcc     LA7E2
  5874:          jsr     LEEB7
  5875:          ldy     #$03
  5876:          lda     #$80
  5877:          sta     (BMPNT),y
  5878:          ldy     #$FF
  5879:          ldx     #$22
  5880:  LA82C:
  5881:          lda     L942C,x
  5882:          sta     (BMPNT),y
  5883:          dey
  5884:          dex
  5885:          bpl     LA82C
  5886:          ldy     #$EE
  5887:          lda     #$00
  5888:          sta     (BMPNT),y
  5889:          jmp     LD075
  5890:  LA83E:
  5891:          lda     VBC_PAUNBUF1
  5892:          and     #VBC_PA1_20
  5893:          bne     LA84B
  5894:  LA845:
  5895:          jsr     LEFCF
  5896:          jmp     LEF62
  5897:  LA84B:
  5898:          lda     TRACK
  5899:          cmp     #$24
  5900:          bcc     LA845
  5901:          jsr     LA4A1
  5902:          jsr     LA4E7
  5903:          bne     LA872
  5904:          ora     LEFE9,x
  5905:          sta     L0146,y
  5906:          jsr     LEF88
  5907:          jsr     LA508
  5908:          lda     TRACK
  5909:          cmp     #$35
  5910:          beq     LA873
  5911:          lda     DRVNUM
  5912:          asl     a
  5913:          tax
  5914:          jmp     LEF7F
  5915:  LA872:
  5916:          sec
  5917:  LA873:
  5918:          rts
  5919:  LA874:
  5920:          lda     VBC_PAUNBUF1
  5921:          and     #VBC_PA1_20
  5922:          bne     LA881
  5923:  LA87B:
  5924:          jsr     LEFCF
  5925:          jmp     LEF96
  5926:  LA881:
  5927:          lda     TRACK
  5928:          cmp     #$24
  5929:          bcc     LA87B
  5930:          jsr     LA4A1
  5931:          jsr     LA4E7
  5932:          beq     LA8A8
  5933:          eor     LEFE9,x
  5934:          sta     L0146,y
  5935:          jsr     LEF88
  5936:          jsr     LA51E
  5937:          lda     TRACK
  5938:          cmp     #$35
  5939:          beq     LA8A8
  5940:          lda     DRVNUM
  5941:          asl     a
  5942:          tax
  5943:          jmp     LEFB2
  5944:  LA8A8:
  5945:          rts
  5946:  LA8A9:
  5947:          lda     VBC_PAUNBUF1
  5948:          and     #VBC_PA1_20
  5949:          bne     LA8B6
  5950:  LA8B0:
  5951:          jsr     LF011
  5952:          jmp     LF1FD
  5953:  LA8B6:
  5954:          lda     TRACK
  5955:          cmp     #$24
  5956:          bcc     LA8B0
  5957:          jsr     LA4A1
  5958:          jsr     LA545
  5959:          lda     L942C,y
  5960:          sta     LSTSEC
  5961:  LA8C8:
  5962:          lda     SECTOR
  5963:          cmp     LSTSEC
  5964:          bcs     LA8D8
  5965:          jsr     LA4E7
  5966:          bne     LA8DA
  5967:          inc     SECTOR
  5968:          bne     LA8C8
  5969:  LA8D8:
  5970:          lda     #$00
  5971:  LA8DA:
  5972:          rts
  5973:  LA8DB:
  5974:          lda     VBC_PAUNBUF1
  5975:          and     #VBC_PA1_20
  5976:          bne     LA8E8
  5977:  LA8E2:
  5978:          lda     T0
  5979:          pha
  5980:          jmp     LF130
  5981:  LA8E8:
  5982:          lda     TRACK
  5983:          cmp     #$24
  5984:          bcc     LA8E2
  5985:          cmp     #$35
  5986:          beq     LA900
  5987:          lda     T0
  5988:          pha
  5989:          jsr     LA4A1
  5990:          tay
  5991:          pla
  5992:          sta     T0
  5993:          tya
  5994:          jmp     LF138
  5995:  LA900:
  5996:          lda     #$00
  5997:          jmp     LF138
  5998:  LA905:
  5999:          lda     VBC_PAUNBUF1
  6000:          and     #VBC_PA1_20
  6001:          bne     LA912
  6002:  LA90C:
  6003:          jsr     LF011
  6004:          jmp     LF1C7
  6005:  LA912:
  6006:          lda     TRACK
  6007:          cmp     #$24
  6008:          bcc     LA90C
  6009:          jsr     LA4A1
  6010:          jmp     LF1C9
  6011:  LA91E:
  6012:          lda     VBC_PAUNBUF1
  6013:          and     #VBC_PA1_20
  6014:          bne     LA92B
  6015:  LA925:
  6016:          jsr     LF011
  6017:          jmp     LF1E2
  6018:  LA92B:
  6019:          lda     TRACK
  6020:          cmp     #$24
  6021:          bcc     LA925
  6022:          jsr     LA4A1
  6023:          jmp     LF1E4
  6024:  LA937:
  6025:          lda     VBC_PAUNBUF1
  6026:          and     #VBC_PA1_20
  6027:          bne     LA941
  6028:  LA93E:
  6029:          jmp     LF220
  6030:  LA941:
  6031:          lda     MAXTRACK_ADJUSTED
  6032:          cmp     #MAXTRACK_SINGLESIDED + 2
  6033:          bcc     LA93E
  6034:          lda     TRACK
  6035:          cmp     #$24
  6036:          bcc     LA93E
  6037:          jmp     LA545
  6038:  LA951:
  6039:          sta     NDBL,x
  6040:          lda     VBC_PAUNBUF1
  6041:          and     #VBC_PA1_20
  6042:          beq     LA97E
  6043:          lda     MAXTRACK_ADJUSTED
  6044:          cmp     #MAXTRACK_SINGLESIDED + 2
  6045:          bcc     LA97E
  6046:          jsr     LA48B
  6047:          jsr     LA534
  6048:          ldy     #$22
  6049:          lda     NDBL
  6050:  LA96D:
  6051:          clc
  6052:          adc     (BMPNT),y
  6053:          sta     NDBL
  6054:          bcc     LA978
  6055:          inc     NDBH
  6056:  LA978:
  6057:          dey
  6058:          bpl     LA96D
  6059:          jmp     LA496
  6060:  LA97E:
  6061:          rts
  6062:  LA97F:
  6063:          sta     RECL,x
  6064:          sta     RECH,x
  6065:          lda     #$00
  6066:          sta     LSTCHR,x
  6067:          rts
  6068:  LA989:
  6069:          jsr     LA40D
  6070:          ldy     #$00
  6071:          sty     JOBRTN
  6072:          rts
  6073:  
  6074:  emptya992:
  6075:          FillUntil $A99D
  6076:  
  6077:  LA99D:
  6078:          lda     #$00
  6079:          sta     a:NODRV,x
  6080:          jmp     LC1B7
  6081:  LA9A5:
  6082:          tya
  6083:          sta     a:NODRV,x
  6084:          jmp     LC664
  6085:  LA9AC:
  6086:          lda     VBC_PAUNBUF1
  6087:          and     #VBC_PA1_20
  6088:          beq     LA9B6
  6089:          jmp     L815A
  6090:  LA9B6:
  6091:          jmp     LE8D7
  6092:  LA9B9:
  6093:          pha
  6094:          stx     JOBNUM
  6095:          lda     VBC_PAUNBUF1
  6096:          and     #VBC_PA1_20
  6097:          beq     LA9D2
  6098:          bit     BITCNT
  6099:          bpl     LA9D2
  6100:          lda     BITCNT
  6101:          and     #$7F
  6102:          sta     BITCNT
  6103:          pla
  6104:          tax
  6105:          jmp     L9199
  6106:  LA9D2:
  6107:          jmp     LE60D
  6108:  
  6109:  LA9D5:
  6110:          pha
  6111:          lda     VBC_PAUNBUF1
  6112:          and     #VBC_PA1_20
  6113:          beq     @LA9F4
  6114:          bit     BITCNT
  6115:          bpl     @LA9F4
  6116:          lda     BITCNT
  6117:          and     #$7F
  6118:          sta     BITCNT
  6119:          sei                                     ; disallow interrupts --> blocking job loop
  6120:          ldx     #$02
  6121:          jsr     L9228
  6122:          lda     #$00
  6123:          sta     SA
  6124:          jsr     LDAC0
  6125:  @LA9F4:
  6126:          pla
  6127:          jmp     LE645
  6128:  LA9F8:
  6129:          lda     #$00
  6130:          sta     DRVST
  6131:          lda     VDC_PCR2
  6132:          jmp     LF266
  6133:  
  6134:  READ_CMDBUF_BUT_SPECIAL_CASE_U0:
  6135:          ; first, check if the command is "U0"
  6136:          lda     CMDBUF
  6137:          cmp     #'U'
  6138:          bne     @NoU0                   ; first char is not 'U' --> read next char from command buffer
  6139:          lda     CMDBUF + 1
  6140:          cmp     #'0'
  6141:          beq     @ReturnAsc_NUL          ; 2nd char is '0' --> it is 'U0' --> return ASC_NUL.
  6142:  @NoU0:
  6143:          ; read next char from command buffer
  6144:          lda     CMDBUF,y
  6145:  
  6146:          .byte   ASM_BIT3
  6147:  
  6148:  @ReturnAsc_NUL:
  6149:          lda     #$00
  6150:          rts
  6151:  
  6152:  LAA17:
  6153:          ldx     DRVNUM
  6154:          lda     a:NODRV,x
  6155:          rts
  6156:  LAA1D:
  6157:          sta     WPSW,x
  6158:          sta     a:NODRV,x
  6159:          jmp     LD075
  6160:  LAA25:
  6161:          ldx     DRVNUM
  6162:          lda     a:NODRV,x
  6163:          jmp     LF01B
  6164:          ; -----------------
  6165:  
  6166:          ; before executing the U command, make sure it is not
  6167:          ; the IRQ vector.
  6168:          ; The 6502 would behave erratically, as the IRQ requires
  6169:          ; the stack to contain a status register, which it will not
  6170:          ; have in the case of a JMP (or JSR, which was used to call
  6171:          ; us).
  6172:          ; Thus, in this case, execute a BRK instead.
  6173:          ;
  6174:  Patch1570ExecutionOfUCommand:
  6175:  
  6176:          ; compare address of U command
  6177:  
  6178:          lda     IP
  6179:          cmp     #<IRQ
  6180:          bne     @NoIRQVector
  6181:          lda     IP + 1
  6182:          cmp     #>IRQ
  6183:          bne     @NoIRQVector
  6184:  
  6185:          ; if we reach here, it is the IRQ vector
  6186:          ; call it via BRK
  6187:          brk
  6188:          nop
  6189:  
  6190:          rts
  6191:  
  6192:  @NoIRQVector:
  6193:          jmp     (IP)
  6194:          ; -----------------
  6195:  
  6196:  .if CompileDrive >= DRIVE_1571_05
  6197:  LAA3F:
  6198:          cmp     #$02
  6199:          bcc     LAA4A
  6200:          cmp     #$0F
  6201:          beq     LAA4A
  6202:          jmp     LD36B
  6203:  LAA4A:
  6204:          jmp     LD373
  6205:  LAA4D:
  6206:          sta     FTNUM
  6207:          jsr     L877C
  6208:          jsr     LA989
  6209:          pha
  6210:          jsr     L8788
  6211:          pla
  6212:          rts
  6213:  LAA5B:
  6214:          lda     PATTYP
  6215:          and     #$07
  6216:          cmp     #$02
  6217:          rts
  6218:  LAA62:
  6219:          lda     VBC_PAUNBUF1
  6220:          bit     VBC_PA1
  6221:          rts
  6222:  LAA69:
  6223:          lda     VBC_PAUNBUF1
  6224:          and     #VBC_PA1_20
  6225:          bne     LAA73
  6226:          jmp     LEEB7
  6227:  LAA73:
  6228:          jmp     LA7CC
  6229:  LAA76:
  6230:          lda     #$02
  6231:          sta     VBC_T1HC1
  6232:          rts
  6233:  
  6234:  PATCH_INIT_CSG5710:
  6235:  .if CompileDrive >= DRIVE_1571CR
  6236:          lda     #$FB
  6237:          sta     CSG5710_4010 + 4
  6238:          lda     #$FE
  6239:          sta     CSG5710_4010 + 5
  6240:          lda     #$A1
  6241:          sta     CSG5710_4010 + 0
  6242:          lda     #$C2
  6243:          sta     CSG5710_4010 + 1
  6244:          lda     #$0A
  6245:          sta     CSG5710_4010 + 6
  6246:          lda     #$14
  6247:          sta     CSG5710_4010 + 7
  6248:          lda     #$02
  6249:          sta     CSG5710_4010 + 2
  6250:          lda     #$03
  6251:          sta     CSG5710_4010 + 3
  6252:          lda     #$40
  6253:          sta     L01B4
  6254:          jmp     PATCH_INIT_BC_1570_END
  6255:  LAAAD:
  6256:          lda     L01B3
  6257:          bne     LAAB6
  6258:  .else
  6259:          lda     L01B3
  6260:          bne     LAA84
  6261:          jmp     L8EC6
  6262:  LAA84:
  6263:          clc
  6264:          rts
  6265:  
  6266:  LAA86:
  6267:          tay
  6268:          cmp     #$56
  6269:          bne     LAAA8
  6270:          sei                                     ; disallow interrupts --> blocking job loop
  6271:          lda     VBC_PAUNBUF1
  6272:          and     #VBC_PA1_20
  6273:          bne     LAA96
  6274:  LAA93:
  6275:          jmp     L9021
  6276:  LAA96:
  6277:          lda     CMDBUF + 4
  6278:          cmp     #$31
  6279:          beq     LAAA1
  6280:          cmp     #$30
  6281:          bne     LAA93
  6282:  LAAA1:
  6283:          and     #$CF
  6284:          sta     L01B3
  6285:          cli                                     ; allow processing of job loop
  6286:          rts
  6287:  LAAA8:
  6288:          cpy     #$04
  6289:          jmp     L9006
  6290:  LAAAD:
  6291:          lda     L01B3
  6292:          bne     LAAB6
  6293:  .endif
  6294:          lda     JOBS0,y
  6295:          .byte   ASM_BIT3
  6296:  LAAB6:
  6297:          lda     #$30
  6298:          eor     #$30
  6299:          sta     JOBS0,y
  6300:          bne     LAAC2
  6301:          jmp     L99B5
  6302:  LAAC2:
  6303:          jmp     L944F
  6304:  LAAC5:
  6305:          jsr     L85F9
  6306:          lda     #$20
  6307:          bit     HINIB
  6308:          beq     LAADD
  6309:          ldy     #$00
  6310:  LAAD0:
  6311:          lda     CMDBUF + 11,y
  6312:          sta     CTRACK
  6313:          jsr     L85F9
  6314:          iny
  6315:          cpy     MYPA
  6316:          bne     LAAD0
  6317:  LAADD:
  6318:          rts
  6319:  LAADE:
  6320:          ldx     JOBNUM
  6321:          ora     #$08
  6322:          sta     JOBS0,x
  6323:          jmp     L9FB6
  6324:  LAAE7:
  6325:          jsr     LAAED
  6326:          jmp     CommandEnd
  6327:  LAAED:
  6328:          jmp     (IP)
  6329:  LAAF0:
  6330:          cmp     #$03
  6331:          bcs     LAAF9
  6332:          lda     #ERRORCODE_72_DISK_FULL
  6333:          jsr     SetErrorCode
  6334:  LAAF9:
  6335:          lda     #$01
  6336:          rts
  6337:  Convert_Bin_To_BCD_Patch_157x:
  6338:          php
  6339:          sei                                     ; disallow interrupts --> blocking job loop
  6340:  
  6341:          CONVERT_BIN_TO_BCD
  6342:  
  6343:          plp
  6344:          jmp     OutputBCDIntoBUFTABERR
  6345:  
  6346:  LAB10:
  6347:          php
  6348:          sei                                     ; disallow interrupts --> blocking job loop
  6349:          sta     CIA_SDR
  6350:          lda     BITCNT
  6351:          eor     #$04
  6352:          sta     BITCNT
  6353:          lda     #CIA_ICR_B_SP
  6354:  LAB1D:
  6355:          bit     CIA_ICR
  6356:          beq     LAB1D
  6357:          plp
  6358:          rts
  6359:  
  6360:  LAB24:
  6361:          lda     BAM + 11
  6362:          cmp     #$25
  6363:          bcc     LAB6F
  6364:          lda     T0
  6365:          pha
  6366:          lda     TRACK
  6367:          pha
  6368:          ldy     #$00
  6369:          sty     TRACK
  6370:  LAB35:
  6371:          lda     #$00
  6372:          sta     T0
  6373:          lda     #$01
  6374:          sta     BMPNT + 1
  6375:          lda     LA5DB,y
  6376:          clc
  6377:          adc     #$46
  6378:          sta     BMPNT
  6379:          ldy     #$02
  6380:  LAB47:
  6381:          ldx     #$07
  6382:  LAB49:
  6383:          lda     (BMPNT),y
  6384:          and     LEFE9,x
  6385:          beq     LAB52
  6386:          inc     T0
  6387:  LAB52:
  6388:          dex
  6389:          bpl     LAB49
  6390:          dey
  6391:          bpl     LAB47
  6392:          jsr     LA534
  6393:          lda     T0
  6394:          ldy     TRACK
  6395:          sta     (BMPNT),y
  6396:          inc     TRACK
  6397:          ldy     TRACK
  6398:          cpy     #$23
  6399:          bcc     LAB35
  6400:          pla
  6401:          sta     TRACK
  6402:          pla
  6403:          sta     T0
  6404:  LAB6F:
  6405:          jmp     LA496
  6406:          ; --------------
  6407:  
  6408:  PATCH_LAB72:
  6409:          sta     JOBRTN
  6410:          pha
  6411:          lda     L01B6
  6412:          beq     LAB84
  6413:          lda     #$00
  6414:          sta     L01B6
  6415:          pla
  6416:          jmp     PATCH_LAB72_END
  6417:          ; --------------
  6418:  
  6419:  LAB84:
  6420:          lda     #$80
  6421:          sta     L01AF
  6422:          pla
  6423:          jmp     LA6B1
  6424:          ; --------------
  6425:  
  6426:  LAB8D:
  6427:          jsr     LA48B
  6428:          jsr     LAB24
  6429:          jmp     LA48B
  6430:  
  6431:  PATCH_WPSW:
  6432:          lda     #$01
  6433:          sta     WPSW
  6434:          sta     L01B6
  6435:          rts
  6436:  
  6437:  .if CompileDrive >= DRIVE_1571CR
  6438:  .else
  6439:  LA667_PATCH:
  6440:          lda     #$01
  6441:          sta     L01B6
  6442:          jmp     LA667
  6443:          ; ---------------------
  6444:  .endif
  6445:  
  6446:  LABA6:
  6447:          lda     #$01
  6448:          sta     WPSW
  6449:          sta     L01B6
  6450:          jmp     LD042
  6451:  
  6452:   .if CompileDrive >= DRIVE_1571CR
  6453:  
  6454:  LABA7:
  6455:          tay
  6456:          cmp     #$56
  6457:          bne     LABDF
  6458:          sei                                     ; disallow interrupts --> blocking job loop
  6459:          lda     VBC_PAUNBUF1
  6460:          and     #VBC_PA1_20
  6461:          bne     LABB7
  6462:  LABB4:
  6463:          jmp     L9021
  6464:  LABB7:
  6465:          lda     CMDBUF + 4
  6466:          cmp     #$31
  6467:          beq     LABC2
  6468:          cmp     #$30
  6469:          bne     LABB4
  6470:  LABC2:
  6471:          and     #$CF
  6472:          sta     L01B3
  6473:          pha
  6474:          lda     L01B4
  6475:          and     #$BF
  6476:          sta     L01B4
  6477:          pla
  6478:          asl     a
  6479:          asl     a
  6480:          asl     a
  6481:          asl     a
  6482:          asl     a
  6483:          asl     a
  6484:          ora     L01B4
  6485:          sta     L01B4
  6486:          cli                                     ; allow processing of job loop
  6487:          rts
  6488:  LABDF:
  6489:          cpy     #$04
  6490:          jmp     L9006
  6491:  
  6492:  LA667_PATCH:
  6493:          lda     #$01
  6494:          sta     L01B6
  6495:          jmp     LA667
  6496:          ; ---------------------
  6497:  
  6498:  LABEC:
  6499:          lda     #$5A
  6500:  LABEE:
  6501:          pha
  6502:          jsr     LAC38
  6503:          pla
  6504:          tay
  6505:          bcs     LAC02
  6506:          lda     WD177x_SECTOR
  6507:          cmp     CSG5710_4010 + 5
  6508:          beq     LAC0C
  6509:          dey
  6510:          tya
  6511:          bne     LABEE
  6512:  LAC02:
  6513:          ldx     #$03
  6514:          .byte   ASM_BIT3
  6515:  LAC05:
  6516:          ldx     #$09
  6517:          stx     L01B0
  6518:          sec
  6519:          rts
  6520:  LAC0C:
  6521:          ldx     #$00
  6522:  LAC0E:
  6523:          bit     WD177x_TRACK
  6524:          bpl     LAC0E
  6525:          lda     WD177x_SECTOR
  6526:          sta     STAB,x
  6527:          inx
  6528:          cpx     #$06
  6529:          bcc     LAC0E
  6530:          lda     #$18
  6531:          sta     WD177x_TRACK
  6532:  LAC22:
  6533:          bit     WD177x_TRACK
  6534:          bpl     LAC22
  6535:          lda     WD177x_SECTOR
  6536:          lda     WD177x_TRACK
  6537:          and     #$20
  6538:          bne     LAC05
  6539:          ldx     #$00
  6540:          stx     L01B0
  6541:          clc
  6542:          rts
  6543:  LAC38:
  6544:          lda     CSG5710_5
  6545:          and     #$7F
  6546:          sta     CSG5710_5
  6547:          lda     L01B4
  6548:          and     #$20
  6549:          asl     a
  6550:          asl     a
  6551:          ora     CSG5710_5
  6552:          sta     CSG5710_5
  6553:          lda     #$00
  6554:          sta     WD177x_TRACK
  6555:          lda     CSG5710_4010 + 0
  6556:          sta     CSG5710_4
  6557:          lda     CSG5710_4010 + 6
  6558:          sta     WD177x_DATA
  6559:          lda     #$10
  6560:          sta     WD177x_TRACK
  6561:          lda     WD177x_SECTOR
  6562:          nop
  6563:          nop
  6564:          nop
  6565:          ldx     #$00
  6566:          ldy     #$32
  6567:  LAC6D:
  6568:          bit     WD177x_TRACK
  6569:          bvs     LAC7A
  6570:          dex
  6571:          bne     LAC6D
  6572:          dey
  6573:          bne     LAC6D
  6574:          sec
  6575:          rts
  6576:  LAC7A:
  6577:          ldy     #$00
  6578:          nop
  6579:          nop
  6580:          nop
  6581:          nop
  6582:          nop
  6583:          nop
  6584:          lda     WD177x_SECTOR
  6585:          nop
  6586:          nop
  6587:          nop
  6588:          nop
  6589:          nop
  6590:          nop
  6591:  LAC8B:
  6592:          bit     WD177x_TRACK
  6593:          bpl     LAC8B
  6594:          lda     WD177x_SECTOR
  6595:          iny
  6596:          bvs     LAC8B
  6597:          cpy     #$03
  6598:          bne     LAC38
  6599:          clc
  6600:          rts
  6601:  LAC9C:
  6602:          lda     #$B4
  6603:  LAC9E:
  6604:          pha
  6605:          jsr     LABEC
  6606:          pla
  6607:          tay
  6608:          php
  6609:          lda     STAB + 2
  6610:          cmp     SECTR
  6611:          beq     LACB7
  6612:          plp
  6613:          dey
  6614:          tya
  6615:          bne     LAC9E
  6616:          ldx     #$02
  6617:          stx     L01B0
  6618:          sec
  6619:          rts
  6620:  LACB7:
  6621:          plp
  6622:          rts
  6623:  LACB9:
  6624:          ldx     #$16
  6625:  LACBB:
  6626:          bit     WD177x_TRACK
  6627:          bpl     LACBB
  6628:          lda     WD177x_SECTOR
  6629:          dex
  6630:          bne     LACBB
  6631:          rts
  6632:  LACC7:
  6633:          lda     REVCNT
  6634:          asl     a
  6635:          sta     TMP
  6636:  LACCC:
  6637:          jsr     L8EC6
  6638:          jsr     LAC9C
  6639:          bcs     LAD21
  6640:          jsr     LAC38
  6641:          bcs     LAD21
  6642:          ldy     #$00
  6643:          ldx     WORK
  6644:  LACDD:
  6645:          bit     WD177x_TRACK
  6646:          bpl     LACDD
  6647:          lda     WD177x_SECTOR
  6648:          cmp     (BUFPNT),y
  6649:          bne     LAD21
  6650:          cpy     RLINDX
  6651:          beq     LACF1
  6652:          iny
  6653:          bne     LACDD
  6654:  LACF1:
  6655:          iny
  6656:          dex
  6657:          beq     LACFA
  6658:          inc     BUFPNT + 1
  6659:          jmp     LACDD
  6660:  LACFA:
  6661:          bit     WD177x_TRACK
  6662:          bpl     LACFA
  6663:          lda     WD177x_SECTOR
  6664:  LAD02:
  6665:          bit     WD177x_TRACK
  6666:          bpl     LAD02
  6667:          lda     WD177x_SECTOR
  6668:          lda     #$18
  6669:          sta     WD177x_TRACK
  6670:  LAD0F:
  6671:          bit     WD177x_TRACK
  6672:          bpl     LAD0F
  6673:          lda     WD177x_SECTOR
  6674:          lda     WD177x_TRACK
  6675:          and     #$20
  6676:          beq     LAD28
  6677:          ldx     #$05
  6678:          .byte   ASM_BIT3
  6679:  LAD21:
  6680:          ldx     #$07
  6681:          dec     TMP
  6682:          bne     LACCC
  6683:          .byte   ASM_BIT3
  6684:  LAD28:
  6685:          ldx     #$00
  6686:          stx     L01B0
  6687:          rts
  6688:  LAD2E:
  6689:          lda     REVCNT
  6690:          asl     a
  6691:          sta     TMP
  6692:  LAD33:
  6693:          jsr     LAC9C
  6694:          bcs     LAD86
  6695:          jsr     LAC38
  6696:          bcs     LAD86
  6697:          ldy     #$00
  6698:          ldx     WORK
  6699:  LAD41:
  6700:          bit     WD177x_TRACK
  6701:          bpl     LAD41
  6702:          lda     WD177x_SECTOR
  6703:          cmp     CMDBUF + 10
  6704:          bne     LAD86
  6705:          cpy     RLINDX
  6706:          beq     LAD56
  6707:          iny
  6708:          bne     LAD41
  6709:  LAD56:
  6710:          iny
  6711:          dex
  6712:          beq     LAD5F
  6713:          inc     BUFPNT + 1
  6714:          jmp     LAD41
  6715:  LAD5F:
  6716:          bit     WD177x_TRACK
  6717:          bpl     LAD5F
  6718:          lda     WD177x_SECTOR
  6719:  LAD67:
  6720:          bit     WD177x_TRACK
  6721:          bpl     LAD67
  6722:          lda     WD177x_SECTOR
  6723:          lda     #$18
  6724:          sta     WD177x_TRACK
  6725:  LAD74:
  6726:          bit     WD177x_TRACK
  6727:          bpl     LAD74
  6728:          lda     WD177x_SECTOR
  6729:          lda     WD177x_TRACK
  6730:          and     #$20
  6731:          beq     LAD8D
  6732:          ldx     #$05
  6733:          .byte   ASM_BIT3
  6734:  LAD86:
  6735:          ldx     #$07
  6736:          dec     TMP
  6737:          bne     LAD33
  6738:          .byte   ASM_BIT3
  6739:  LAD8D:
  6740:          ldx     #$00
  6741:          stx     L01B0
  6742:          rts
  6743:  LAD93:
  6744:          php
  6745:          sei                                     ; disallow interrupts --> blocking job loop
  6746:          jsr     L89EF
  6747:          bit     HINIB
  6748:          bpl     LADA4
  6749:          lda     CMDBUF + 3
  6750:          sta     NMIFLG
  6751:          jsr     L87BA
  6752:  LADA4:
  6753:          lda     #$00
  6754:          sta     MYPA
  6755:          jsr     L89E8
  6756:          ldx     L01B0
  6757:          cpx     #$02
  6758:          bcs     LADD1
  6759:          lda     STAB + 2
  6760:          sta     ICMD
  6761:  LADB6:
  6762:          jsr     L89E8
  6763:          lda     STAB + 2
  6764:          ldy     MYPA
  6765:          sta     CMDBUF + 11,y
  6766:          inc     MYPA
  6767:          cpy     #$1F
  6768:          bcs     LADD1
  6769:          cmp     ICMD
  6770:          bne     LADB6
  6771:          lda     STAB
  6772:          sta     NMIFLG
  6773:          ldx     #$00
  6774:          .byte   ASM_BIT3
  6775:  LADD1:
  6776:          ldx     #$02
  6777:          stx     L01B0
  6778:          plp
  6779:          rts
  6780:   .endif
  6781:  .elseif CompileDrive >= DRIVE_1571
  6782:  .else
  6783:  LAA3F:
  6784:          cmp     #$02
  6785:          bcc     LAA4A
  6786:          cmp     #$0F
  6787:          beq     LAA4A
  6788:          jmp     LD36B
  6789:  LAA4A:
  6790:          jmp     LD373
  6791:  LAA4D:
  6792:          sta     FTNUM
  6793:          jsr     L877C
  6794:          jsr     LA989
  6795:          pha
  6796:          jsr     L8788
  6797:          pla
  6798:          rts
  6799:  LAA5B:
  6800:          lda     PATTYP
  6801:          and     #$07
  6802:          cmp     #$02
  6803:          rts
  6804:  LAA62:
  6805:          lda     VBC_PAUNBUF1
  6806:          bit     VBC_PA1
  6807:          rts
  6808:  .endif
  6809:  
  6810:          FillUntil $BF00
  6811:  
  6812:          jmp     L9D88
  6813:          jmp     L9DDE
  6814:          jmp     LF2B0
  6815:          jmp     L92BA
  6816:          jmp     LF393
  6817:          jmp     L93D1
  6818:          jmp     LF969
  6819:          jmp     L99B5
  6820:          jmp     LFE00
  6821:          jmp     LF934
  6822:          jmp     LF556
  6823:          jmp     L9754
  6824:          jmp     LF8E0
  6825:          jmp     L9965
  6826:          jmp     LF5E9
  6827:          jmp     LF7E6
  6828:          jmp     L98D9
  6829:          jmp     LA483
  6830:          jmp     LFEF3
  6831:          jmp     LA47E
  6832:          jmp     LF005
  6833:          jmp     LF0D1
  6834:          jmp     ParseCommandBufferAndExecuteCommand
  6835:          jmp     SearchInCmdline
  6836:          jmp     LC2B3
  6837:          jmp     LC2DC
  6838:          jmp     L86E6
  6839:          jmp     L8764
  6840:          jmp     L8770
  6841:  .if CompileDrive >= DRIVE_1571_05
  6842:          lda     L808E
  6843:  .else
  6844:          jmp     L808E
  6845:  .endif
  6846:          jmp     LCF1E
  6847:          jmp     LD7B4
  6848:          jmp     LDAC0
  6849:          jmp     LE60A
  6850:          jmp     L9080
  6851:          jmp     L924E
  6852:          jmp     LF259
  6853:          jmp     LF99C
  6854:          jmp     L99CA
  6855:          ; ------------
  6856:  
  6857:          ; @@@ TODO This is no routine, what do they want here?
  6858:  
  6859:  .if CompileDrive >= DRIVE_1571_05
  6860:          lda     $FE95
  6861:  .else
  6862:          jmp     $FE95
  6863:  .endif
  6864:  
  6865:  emptybf78:
  6866:  
  6867:          FillUntil $bf96
  6868:          .byte   $C8,$86
  6869:          FillUntil $C000
  6870:  
  6871:  .else
  6872:          * = $C000
  6873:  .endif
  6874:  
  6875:  .macro WRITE_55_TIMES times
  6876:          lda     VDC_PCR2
  6877:          and     # ~ VIA_PCR_B_CB2_MASK
  6878:          ora     #VIA_PCR_B_CB2_OUTPUT_LOW
  6879:          sta     VDC_PCR2
  6880:  
  6881:          lda     #$FF
  6882:          sta     VDC_DDRA2
  6883:  
  6884:          lda     #$55
  6885:          sta     VDC_PA2
  6886:  
  6887:          ldx     #>times
  6888:          ldy     #<times
  6889:  :
  6890:  bvc     :-
  6891:          clv
  6892:          dey
  6893:  bne     :-
  6894:          dex
  6895:  bne     :-
  6896:  .endmacro
  6897:  
  6898:  LC000:
  6899:          .byte   DRIVE_CHKSUM_C000
  6900:  
  6901:  .if CompileDrive >= DRIVE_1571_05
  6902:  
  6903:          .byte "(C)1985 COMMODORE ELECTRONICS LTD., "
  6904:          .byte "ALL RIGHTS RESERVED"
  6905:  
  6906:  LC038:
  6907:          and     # ~ VDC_PB2_STEPPER
  6908:          ora     TMP
  6909:          sta     VDC_PB2
  6910:  LC03F:
  6911:          lda     VDC_PCR2
  6912:          and     # ~ VIA_PCR_B_CA2_INPUT_NEG
  6913:          sta     VDC_PCR2
  6914:          rts
  6915:  
  6916:  LC048:
  6917:          .byte   $29,$1F,$19,$12
  6918:  
  6919:  LC04C:
  6920:          FillCount 17,$60
  6921:          FillCount 7,'@'
  6922:          .byte "      "
  6923:          FillCount 11,0
  6924:  
  6925:  LC075:
  6926:          sta     CMD
  6927:          pha
  6928:          lda     #$01
  6929:          sta     TRACK0,x
  6930:          pla
  6931:          rts
  6932:          ; -------------
  6933:  
  6934:  LC07F:
  6935:          sei                                     ; disallow interrupts --> blocking job loop
  6936:          lda     VDC_PCR2
  6937:          ora     #VIA_PCR_B_CA2_OUTPUT_HIGH
  6938:          sta     VDC_PCR2
  6939:          jsr     L9D63
  6940:          jsr     LFE00
  6941:          lda     VDC_PCR2
  6942:          and     # ~ VIA_PCR_B_CA2_OUTPUT_HIGH
  6943:          sta     VDC_PCR2
  6944:          cli                                     ; allow processing of job loop
  6945:          rts
  6946:  
  6947:  .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
  6948:  
  6949:          .byte   DRIVE_CHKSUM_C001
  6950:  
  6951:   .if CompileDrive = DRIVE_1541C_03
  6952:          .byte   "COPYRIGHT (C)1982,1985,1987 COMMODORE ELECTRONICS, LTD.",$0D
  6953:          .byte   "ALL RIGHTS RESERVED",$0D
  6954:   .endif
  6955:  
  6956:  LC002:
  6957:          WRITE_55_TIMES $0300
  6958:          rts
  6959:  
  6960:          ; --------------
  6961:  
  6962:  LC024:
  6963:          ldy     LINDX
  6964:  .if CompileDrive >= DRIVE_1541C_03
  6965:          jmp     LD3EE
  6966:  .else
  6967:          jmp     LD3DE
  6968:  .endif
  6969:  LC029:
  6970:          sta     RECL,x
  6971:          sta     RECH,x
  6972:          lda     #$00
  6973:          sta     LSTCHR,x
  6974:          rts
  6975:  Convert_Bin_To_BCD_Patch_154x:
  6976:          php
  6977:          sei                                     ; disallow interrupts --> blocking job loop
  6978:  
  6979:          CONVERT_BIN_TO_BCD
  6980:  
  6981:          plp
  6982:          jmp     OutputBCDIntoBUFTABERR
  6983:  
  6984:  LC047:
  6985:          cmp     #$03
  6986:          bcs     LC050
  6987:          lda     #ERRORCODE_72_DISK_FULL
  6988:          jsr     SetErrorCode
  6989:  LC050:
  6990:          lda     #$01
  6991:  LC052:
  6992:          rts
  6993:  
  6994:  .if CompileDrive = DRIVE_1541C_02
  6995:  
  6996:  LC048:
  6997:          .byte   $29,$1F,$19,$12
  6998:  
  6999:          .byte   "COPYRIGHT (C)1985 COMMODORE ELECTRONICS, LTD.",$0D
  7000:          .byte   "ALL RIGHTS RESERVED",$0D
  7001:  .endif
  7002:  
  7003:  .endif
  7004:  
  7005:          FillUntil $C100
  7006:  
  7007:  LC100:
  7008:          sei                                     ; disallow interrupts --> blocking job loop
  7009:          lda     # ~ VDC_PB2_DRIVELEDS           ; get port value with all LEDs switched off
  7010:          and     VDC_PB2
  7011:          pha                                     ; remember port value
  7012:          lda     DRVNUM                          ; current drive number
  7013:          beq     @IsDrive0                       ; drive 0 --> swithc on LED for drive 0
  7014:  
  7015:          ; if we reach here, the LED for drive 1 has to be switched on.
  7016:          ; note that the device does not have a drive 1, the code here should never be reached
  7017:  
  7018:          pla                                     ; get mask of port
  7019:          ora     #VDC_PB2_DRIVE1LED              ; switch on LED for drive 1 (not existing)
  7020:          bne     @StoreLedState                  ; uncond.: store the mask to switch LED on
  7021:  
  7022:  @IsDrive0:
  7023:          pla                                     ; get mask of port
  7024:          ora     #VDC_PB2_DRIVE0LED              ; switch on LED for drive 0
  7025:  @StoreLedState:
  7026:          sta     VDC_PB2                         ; store LED mask to switch the LED on
  7027:          cli                                     ; allow processing of job loop
  7028:          rts
  7029:          ; ---------------------------
  7030:  
  7031:  ; Switch on LED of drive 0
  7032:  ; UNUSED!
  7033:  
  7034:          sei                                     ; disallow interrupts --> blocking job loop
  7035:          lda     #VDC_PB2_DRIVE0LED              ; mask for LED for drive 0
  7036:          ora     VDC_PB2                         ; set bit on port
  7037:          sta     VDC_PB2                         ; and switch on the LED
  7038:          cli                                     ; allow processing of job loop
  7039:          rts
  7040:          ; ---------------------
  7041:  
  7042:  LC123:
  7043:          lda     #ERRORCODE_00_OK
  7044:          sta     ERWORD
  7045:          sta     ERLED
  7046:          rts
  7047:  
  7048:  LC12C:
  7049:          sei                                     ; disallow interrupts --> blocking job loop
  7050:          txa
  7051:          pha
  7052:          lda     #ERRORCODE_50_RECORD_NOT_PRESENT
  7053:          sta     ERWORD
  7054:          ldx     #$00
  7055:          lda     DriveLEDMasks,x
  7056:          sta     ERLED
  7057:          ora     VDC_PB2
  7058:          sta     VDC_PB2
  7059:          pla
  7060:          tax
  7061:          cli                                     ; allow processing of job loop
  7062:          rts
  7063:          ; -------------
  7064:  
  7065:  ; This function parses the command buffer and executes the command
  7066:  ; specified there.
  7067:  ;
  7068:  ParseCommandBufferAndExecuteCommand:
  7069:  
  7070:          ; @@@ TODO initializations
  7071:  
  7072:          lda     #$00
  7073:          sta     WBAM
  7074:          lda     LSTDRV
  7075:          sta     DRVNUM
  7076:  
  7077:          jsr     SetNoError                      ; delete error status
  7078:  
  7079:          ; check secondary address to determine if this is a command
  7080:          ; or something else
  7081:          ;
  7082:          lda     ORGSA
  7083:          bpl     @IsCommand                      ; LISTEN or TALK --> branch
  7084:  
  7085:          ; if we reach here, it was an OPEN (0xE0 | SECADR) or CLOSE (0xF0 | SECADR).
  7086:          ; thus, check which channel is to be opened or closed
  7087:  
  7088:          and     #MASK_SA                        ; mask out IEC bits
  7089:          cmp     #IEC_COMMAND_ERROR_CHANNEL      ; compare to command channel/error channel
  7090:          beq     @IsCommand                      ; yes -> branch, process the command
  7091:          jmp     LD7B4
  7092:          ; ------------
  7093:  
  7094:  @IsCommand:
  7095:          jsr     LC2B3
  7096:          ; returns with Y=0
  7097:  
  7098:          ; get the first character from the command
  7099:          lda     (BUFTABCMD),y
  7100:          sta     CHAR                            ; remember it
  7101:  
  7102:          ; test if the command is in the list of commands
  7103:          ldx     #CmdChars_END - CmdChars - 1    ; number of commands - 1
  7104:  @TestNextCommand:
  7105:          lda     CmdChars,x
  7106:          cmp     CHAR
  7107:          beq     @FoundCommand                   ; the char is correct, we found it!
  7108:          dex
  7109:          bpl     @TestNextCommand                ; if we still have commands to test, loop
  7110:  
  7111:          ; we did not find the command, return with 31,SYNTAX ERROR,00,00
  7112:          lda     #ERRORCODE_31_SYNTAX_ERROR
  7113:          jmp     GenerateErrorMessage
  7114:          ; --------------
  7115:  
  7116:  @FoundCommand:
  7117:          stx     CMDNUM                          ; remember the number (index) of the command
  7118:          ; is the command a command with more than one file name?
  7119:          cpx     #CmdChars_With2Files - CmdChars + 1
  7120:          bcc     @ExecuteCommand                 ; no, skip processing of two filenames
  7121:  
  7122:          jsr     LC1EE                           ; @@@ TODO process two file names
  7123:  
  7124:  @ExecuteCommand:
  7125:  
  7126:          ldx     CMDNUM                          ; get command index
  7127:  
  7128:          ; get address of command from table
  7129:          lda     CmdAddresses_Low,x
  7130:          sta     T0
  7131:          lda     CmdAddresses_High,x
  7132:          sta     T1
  7133:  
  7134:          ; execute command
  7135:          jmp     (T0)
  7136:          ; ----------------
  7137:  
  7138:          ; End of command execution
  7139:          ; A command that ends will jump here in order
  7140:          ; to complete the operation.
  7141:          ;
  7142:  CommandEnd:
  7143:          lda     #$00
  7144:          sta     WBAM
  7145:  LC199:
  7146:          lda     ERWORD
  7147:          bne     GenerateErrorMessage
  7148:          ldy     #$00
  7149:          tya                                     ; A = ERRORCODE_00_OK
  7150:          sty     TRACK
  7151:  LC1A3:
  7152:          sty     SECTOR
  7153:          sty     BUFTABCMD
  7154:          jsr     SetErrorCode
  7155:          jsr     LC123
  7156:  LC1AD:
  7157:          lda     DRVNUM
  7158:          sta     LSTDRV
  7159:          tax
  7160:  .if CompileDrive >= DRIVE_1570
  7161:          jmp     LA99D
  7162:          FillNOP 1
  7163:  .elseif CompileDrive >= DRIVE_1541C_02
  7164:          jmp     LFFB8
  7165:          FillNOP 1
  7166:  .else
  7167:          lda     #$00
  7168:          sta     NODRV,x
  7169:  .endif
  7170:  
  7171:  LC1B7:
  7172:          jsr     ClearCMDBUF
  7173:          jmp     LD4DA
  7174:          ; ----------------
  7175:  
  7176:  ; clear the command buffer
  7177:  ; by overwriting it with 0
  7178:  ;
  7179:  ClearCMDBUF:
  7180:          ldy     #CMDBUF_End - CMDBUF
  7181:          lda     #0
  7182:  :
  7183:          sta     CMDBUF,y
  7184:          dey
  7185:  bpl     :-
  7186:          rts
  7187:  
  7188:  ; ----------------------------------------------
  7189:  ; generate an error message with error code in A
  7190:  ; track and sector are both 0.
  7191:  ; ----------------------------------------------
  7192:  
  7193:  GenerateErrorMessage:
  7194:          ldy     #$00
  7195:          sty     TRACK
  7196:          sty     SECTOR
  7197:  .if CompileDrive >= DRIVE_1570
  7198:          jmp     LA9D5
  7199:          ; --- contains jmp LE645 at the end
  7200:  .else
  7201:          jmp     LE645
  7202:  .endif
  7203:          ; ----------------
  7204:  
  7205:  LC1D1:
  7206:          ldx     #$00
  7207:          stx     FILTBL
  7208:          lda     #$3A
  7209:          jsr     SearchInCmdline
  7210:          beq     LC1E2
  7211:          dey
  7212:          dey
  7213:          sty     FILTBL
  7214:  LC1E2:
  7215:          jmp     LC368
  7216:          ; ----------------
  7217:  
  7218:  LC1E5:
  7219:          ldy     #$00
  7220:          ldx     #$00
  7221:          lda     #$3A
  7222:          jmp     SearchInCmdline
  7223:          ; ----------------
  7224:  
  7225:  LC1EE:
  7226:          jsr     LC1E5
  7227:          bne     LC1F8
  7228:  LC1F3:
  7229:          lda     #ERRORCODE_34_SYNTAX_ERROR
  7230:          jmp     GenerateErrorMessage
  7231:          ; ----------------
  7232:  
  7233:  LC1F8:
  7234:          dey
  7235:          dey
  7236:          sty     FILTBL
  7237:          txa
  7238:          bne     LC1F3
  7239:  LC200:
  7240:          lda     #$3D
  7241:          jsr     SearchInCmdline
  7242:          txa
  7243:          beq     LC20A
  7244:          lda     #$40
  7245:  LC20A:
  7246:          ora     #$21
  7247:          sta     IMAGE
  7248:          inx
  7249:          stx     F1CNT
  7250:          stx     F2CNT
  7251:          lda     PATFLG
  7252:          beq     LC228
  7253:          lda     #$80
  7254:          ora     IMAGE
  7255:          sta     IMAGE
  7256:          lda     #$00
  7257:          sta     PATFLG
  7258:  LC228:
  7259:          tya
  7260:          beq     LC254
  7261:          sta     FILTBL,x
  7262:          lda     F1CNT
  7263:          sta     F2PTR
  7264:          lda     #$8D
  7265:          jsr     SearchInCmdline
  7266:          inx
  7267:          stx     F2CNT
  7268:          dex
  7269:          lda     PATFLG
  7270:          beq     LC245
  7271:          lda     #$08
  7272:  LC245:
  7273:          cpx     F1CNT
  7274:          beq     LC24C
  7275:          ora     #$04
  7276:  LC24C:
  7277:          ora     #$03
  7278:          eor     IMAGE
  7279:          sta     IMAGE
  7280:  LC254:
  7281:          lda     IMAGE
  7282:          ldx     CMDNUM
  7283:          and     CmdSyntaxFlags - 8,x
  7284:          bne     LC260
  7285:          rts
  7286:  LC260:
  7287:          sta     ERWORD
  7288:          lda     #ERRORCODE_30_SYNTAX_ERROR
  7289:          jmp     GenerateErrorMessage
  7290:          ; ----------------
  7291:  
  7292:  ; search for a specific character in the input buffer
  7293:  ; Input:
  7294:  ; A: The charter to search
  7295:  ; X: number of comma-separated parameter to start with
  7296:  ; Y: Pointer into the input buffer from where to search
  7297:  ;
  7298:  ; Return:
  7299:  ; A: Pointer into the input buffer after the character found
  7300:  ; Y: Same as A
  7301:  ; X: Number of commas in command line before the character which was searched
  7302:  ; ZF: set if character was not found
  7303:  
  7304:  SearchInCmdline:
  7305:          sta     CHAR                                    ; remember the character to search
  7306:  @SearchLoop:
  7307:          cpy     CMDSIZ                                  ; is the complete buffer read?
  7308:          bcs     @BufferExceeded                         ; yes --> done
  7309:  
  7310:          lda     (BUFTABCMD),y                           ; read next character
  7311:          iny
  7312:          cmp     CHAR                                    ; is it the character which is searched for?
  7313:          beq     @FoundChar                              ; yes --> done
  7314:  
  7315:          cmp     #'*'
  7316:          beq     @FoundWildcard                          ; '*' found --> mark 'wildcard'
  7317:          cmp     #'?'
  7318:          bne     @NoWildcard                             ; '?' found --> mark 'wildcard'
  7319:  @FoundWildcard:
  7320:          inc     PATFLG                                  ; remember: Found a wildcard
  7321:  @NoWildcard:
  7322:          cmp     #','                                    ; comma?
  7323:          bne     @SearchLoop                             ; no --> nothing found --> try next char
  7324:  
  7325:          ; a comma has been found
  7326:          tya
  7327:          sta     FILTBL + 1,x                            ; store the position of the comma
  7328:  
  7329:          lda     PATFLG                                  ; did we find any wildcards yet?
  7330:          and     # ~ PATTYP_WILDCARD
  7331:          beq     @NoWildcardYet                          ; no --> that's it
  7332:  
  7333:          lda     #PATTYP_WILDCARD
  7334:          sta     PATTYP,x                                ; remember that his paramter contained a wildcard
  7335:          sta     PATFLG                                  ; remember that the command line contained a wildcard
  7336:  
  7337:  @NoWildcardYet:
  7338:          inx                                             ; proceed to next comma-separated parameter
  7339:          cpx     #$04                                    ; already 4 paramters processed?
  7340:          bcc     @SearchLoop                             ; no, try the next one
  7341:  
  7342:          ; if we reach here directly (not via a branch/jump), we have more than
  7343:          ; 4 comma-separated parameters.
  7344:          ; Thus, we cannot process this, is we do not have as much space
  7345:  
  7346:  @BufferExceeded:
  7347:          ldy     #$00                                    ; marker: character not found
  7348:  
  7349:  @FoundChar:
  7350:          lda     CMDSIZ                                  ; store the position of the "last" parameter (empty)
  7351:          sta     FILTBL + 1,x                            ; into the table of parameter begins
  7352:  
  7353:          lda     PATFLG                                  ; did we have wildcards?
  7354:          and     # ~ PATTYP_WILDCARD
  7355:          beq     @DidNotHaveWildcards                    ; no --> done
  7356:  
  7357:          lda     #PATTYP_WILDCARD                        ; store that there were wildcards in the command line
  7358:          sta     PATTYP,x
  7359:  
  7360:  @DidNotHaveWildcards:
  7361:          tya                                             ; position of the character searched into A
  7362:                                                          ; if nothing was found, set Z = 0
  7363:          rts                                             ; done
  7364:  
  7365:  LC2B3:
  7366:          ; remove trailing CR (at most, 2)
  7367:  
  7368:          ldy     BUFTABCMD               ; length of command
  7369:          beq     QuitRemovingTrailingCR                  ; == 0 --> done, there cannot be a CR
  7370:          dey
  7371:          beq     @QuitUndoDecrement      ; == 1 --> done, do NOT remove the CR
  7372:  
  7373:          ; read the last byte of the command
  7374:  
  7375:  .if CompileDrive >= DRIVE_1570
  7376:          ; lda CMDBUF,y IFF current command is not 'U0'; else, returns 0.
  7377:          jsr     READ_CMDBUF_BUT_SPECIAL_CASE_U0
  7378:  .else
  7379:          lda     CMDBUF,y
  7380:  .endif
  7381:          cmp     #ASC_CR                 ; CR?
  7382:          beq     QuitRemovingTrailingCR  ; yes --> done, do NOT undo the DEY
  7383:  
  7384:          ; check another byte for CR
  7385:          dey
  7386:  
  7387:          ; read the (now) last byte of the command
  7388:  
  7389:  .if CompileDrive >= DRIVE_1570
  7390:          ; lda CMDBUF,y IFF current command is not 'U0'; else, returns 0.
  7391:          jsr     READ_CMDBUF_BUT_SPECIAL_CASE_U0
  7392:  .else
  7393:          lda     CMDBUF,y
  7394:  .endif
  7395:          cmp     #ASC_CR                 ; CR?
  7396:          beq     QuitRemovingTrailingCR  ; yes --> done, do NOT undo the DEY
  7397:  
  7398:          iny                             ; undo the last DEY as this was not a CR
  7399:  @QuitUndoDecrement:
  7400:          iny                             ; undo the DEY in order to get the length of the command string
  7401:  QuitRemovingTrailingCR:
  7402:          sty     CMDSIZ                  ; store the length of the command
  7403:  
  7404:          cpy     #CMDBUF_End2 - CMDBUF   ; compare length of the command with maximum length of the buffer
  7405:          ldy     #$FF                    ; preset error code for the case that the command does not fit
  7406:                                          ; this is also the return value if an error occurred
  7407:          bcc     LC2DC                   ; does it fit into the command buffer? --> branch
  7408:  
  7409:          sty     CMDNUM                  ; set command to illegal
  7410:  
  7411:          ; output 32,SYNTAX ERROR, as the command is too long
  7412:          ; @@@TODO can this happen? If the test above fails, then the command already overwrite
  7413:          ; part of our memory, didn't it?
  7414:          lda     #ERRORCODE_32_SYNTAX_ERROR
  7415:          jmp     GenerateErrorMessage
  7416:          ; ----------------
  7417:  
  7418:  ; @@@TODO init buffers, variables, ...
  7419:  ;
  7420:  LC2DC:
  7421:          ldy     #$00            ; return value: no error
  7422:          tya
  7423:          sta     BUFTABCMD
  7424:          sta     REC
  7425:          sta     TYPE
  7426:          sta     TYPFLG
  7427:          sta     F1PTR
  7428:          sta     F2PTR
  7429:          sta     F1CNT
  7430:          sta     F2CNT
  7431:          sta     PATFLG
  7432:          sta     ERWORD          ; ERRORCODE_00_OK
  7433:          ldx     #$05
  7434:  @LC2FD:
  7435:          sta     F2PTR,x
  7436:          sta     RELPTR,x
  7437:          sta     ENTSEC + 4,x
  7438:          sta     ENTIND + 4,x
  7439:          sta     FILDRV + 4,x
  7440:          sta     FILTBL + 5,x
  7441:          sta     FILTRK + 4,x
  7442:          dex
  7443:          bne     @LC2FD
  7444:          rts
  7445:  
  7446:  LC312:
  7447:          lda     F2CNT
  7448:          sta     F1CNT
  7449:          lda     #$01
  7450:          sta     F2CNT
  7451:          sta     F2PTR
  7452:  LC320:
  7453:          ldy     LSTDRV
  7454:          ldx     #$00
  7455:  @LC325:
  7456:          stx     F1PTR
  7457:          lda     FILTBL,x
  7458:          jsr     @LC33C
  7459:          ldx     F1PTR
  7460:          sta     FILTBL,x
  7461:          tya
  7462:          sta     FILDRV,x
  7463:          inx
  7464:          cpx     F2CNT
  7465:          bcc     @LC325
  7466:          rts
  7467:  @LC33C:
  7468:          tax
  7469:          ldy     #$00
  7470:          lda     #$3A
  7471:          cmp     CMDBUF + 1,x
  7472:          beq     @LC352
  7473:          cmp     CMDBUF,x
  7474:          bne     @LC361
  7475:          inx
  7476:  @LC34C:
  7477:          tya
  7478:  @LC34D:
  7479:          and     #$01
  7480:  @LC34F:
  7481:          tay
  7482:          txa
  7483:          rts
  7484:  @LC352:
  7485:          lda     CMDBUF,x
  7486:          inx
  7487:          inx
  7488:          cmp     #$30
  7489:          beq     @LC34D
  7490:          cmp     #$31
  7491:          beq     @LC34D
  7492:          bne     @LC34C
  7493:  @LC361:
  7494:          tya
  7495:          ora     #$80
  7496:          and     #$81
  7497:          bne     @LC34F
  7498:  LC368:
  7499:          lda     #$00
  7500:          sta     IMAGE
  7501:          ldy     FILTBL
  7502:  @LC370:
  7503:          lda     (BUFTABCMD),y
  7504:          jsr     CheckForValidDriveNumber
  7505:          bpl     @LC388
  7506:          iny
  7507:          cpy     CMDSIZ
  7508:          bcs     @LC383
  7509:          ldy     CMDSIZ
  7510:          dey
  7511:          bne     @LC370
  7512:  @LC383:
  7513:          dec     IMAGE
  7514:          lda     #$00
  7515:  @LC388:
  7516:          and     #$01
  7517:          sta     DRVNUM
  7518:          jmp     LC100
  7519:          ; ----------------
  7520:  
  7521:  LC38F:
  7522:          lda     DRVNUM
  7523:          eor     #$01
  7524:          and     #$01
  7525:          sta     DRVNUM
  7526:          rts
  7527:          ; ----------------
  7528:  
  7529:  LC398:
  7530:          ldy     #$00
  7531:          lda     F1CNT
  7532:          cmp     F2CNT
  7533:          beq     @LC3B8
  7534:          dec     F2CNT
  7535:          ldy     F2CNT
  7536:          lda     FILTBL,y
  7537:          tay
  7538:          lda     (BUFTABCMD),y
  7539:          ldy     #$04
  7540:  @LC3B0:
  7541:          cmp     LFEBB,y
  7542:          beq     @LC3B8
  7543:          dey
  7544:          bne     @LC3B0
  7545:  @LC3B8:
  7546:          tya
  7547:          sta     TYPFLG
  7548:          rts
  7549:          ; ----------------
  7550:  
  7551:  ;
  7552:  ; This function checks if the (PETSCII) character in A
  7553:  ; represents a valid drive number (0 or 1)
  7554:  ;
  7555:  ; Input:
  7556:  ;   A = PETSCII representation to check for 0 or 1
  7557:  ;
  7558:  ; Output:
  7559:  ;   A = $00 if A contained a representation for '0'
  7560:  ;   A = $01 if A contained a representation for '1'
  7561:  ;   A.7 set if A contained anything else
  7562:  ;
  7563:  CheckForValidDriveNumber:
  7564:          cmp     #'0'
  7565:          beq     @ValidDriveNumber
  7566:          cmp     #'1'
  7567:          beq     @ValidDriveNumber
  7568:          ora     #$80
  7569:  @ValidDriveNumber:
  7570:          and     #$81
  7571:          rts
  7572:          ; ----------------
  7573:  
  7574:  LC3CA:
  7575:          lda     #$00
  7576:          sta     T0
  7577:          sta     DRVFLG
  7578:          pha
  7579:          ldx     F2CNT
  7580:  @LC3D5:
  7581:          pla
  7582:          ora     T0
  7583:          pha
  7584:          lda     #$01
  7585:          sta     T0
  7586:          dex
  7587:          bmi     @LC3EF
  7588:          lda     FILDRV,x
  7589:          bpl     @LC3E8
  7590:          asl     T0
  7591:          asl     T0
  7592:  @LC3E8:
  7593:          lsr     a
  7594:          bcc     @LC3D5
  7595:          asl     T0
  7596:          bne     @LC3D5
  7597:  @LC3EF:
  7598:          pla
  7599:          tax
  7600:          lda     LC440 - 1,x
  7601:          pha
  7602:          and     #$03
  7603:          sta     DRVCNT
  7604:          pla
  7605:          asl     a
  7606:          bpl     @LC43C
  7607:          lda     FILDRV
  7608:  @LC400:
  7609:          and     #$01
  7610:          sta     DRVNUM
  7611:          lda     DRVCNT
  7612:          beq     @LC434
  7613:          jsr     LC63D
  7614:          beq     @LC420
  7615:          jsr     LC38F
  7616:          lda     #$00
  7617:          sta     DRVCNT
  7618:          jsr     LC63D
  7619:          beq     @LC439
  7620:  @LC41B:
  7621:          lda     #ERRORCODE_74_DRIVE_NOT_READY
  7622:          jsr     GenerateErrorMessage
  7623:  
  7624:  @LC420:
  7625:          jsr     LC38F
  7626:          jsr     LC63D
  7627:          php
  7628:          jsr     LC38F
  7629:          plp
  7630:          beq     @LC439
  7631:          lda     #$00
  7632:          sta     DRVCNT
  7633:          beq     @LC439
  7634:  @LC434:
  7635:          jsr     LC63D
  7636:          bne     @LC41B
  7637:  @LC439:
  7638:          jmp     LC100
  7639:  @LC43C:
  7640:          rol     a
  7641:          jmp     @LC400
  7642:          ; ----------------
  7643:  
  7644:  LC440:
  7645:          .byte   $00,$80,$41,$01,$01,$01,$01,$81
  7646:          .byte   $81,$81,$81,$42,$42,$42,$42
  7647:  
  7648:  LC44F:
  7649:          jsr     LC3CA
  7650:  @LC452:
  7651:          lda     #$00
  7652:          sta     DELIND
  7653:          jsr     LC5AC
  7654:          bne     @LC475
  7655:  @LC45C:
  7656:          dec     DRVCNT
  7657:          bpl     @LC462
  7658:          rts
  7659:  
  7660:  @LC462:
  7661:          lda     #$01
  7662:          sta     DRVFLG
  7663:          jsr     LC38F
  7664:          jsr     LC100
  7665:          jmp     @LC452
  7666:  @LC470:
  7667:          jsr     LC617
  7668:          beq     @LC485
  7669:  @LC475:
  7670:          jsr     LC4D8
  7671:          lda     FOUND
  7672:          beq     @LC47E
  7673:          rts
  7674:  @LC47E:
  7675:          lda     ENTFND
  7676:          bmi     @LC470
  7677:          bpl     @LC475
  7678:  @LC485:
  7679:          lda     FOUND
  7680:          beq     @LC45C
  7681:          rts
  7682:          ; ------------------
  7683:  
  7684:  LC48B:
  7685:          jsr     LC604
  7686:          beq     LC4AA
  7687:          bne     LC4BA
  7688:  LC492:
  7689:          lda     #$01
  7690:          sta     DRVFLG
  7691:          jsr     LC38F
  7692:          jsr     LC100
  7693:  LC49D:
  7694:          lda     #$00
  7695:          sta     DELIND
  7696:          jsr     LC5AC
  7697:          bne     LC4BA
  7698:          sta     FOUND
  7699:  LC4AA:
  7700:          lda     FOUND
  7701:          bne     LC4D7
  7702:          dec     DRVCNT
  7703:          bpl     LC492
  7704:          rts
  7705:          ; ------------------
  7706:  
  7707:  LC4B5:
  7708:          jsr     LC617
  7709:          beq     LC4AA
  7710:  LC4BA:
  7711:          jsr     LC4D8
  7712:          ldx     ENTFND
  7713:          bpl     @LC4C9
  7714:          lda     FOUND
  7715:          beq     LC4B5
  7716:          bne     LC4D7
  7717:  @LC4C9:
  7718:          lda     TYPFLG
  7719:          beq     LC4D7
  7720:          lda     PATTYP,x
  7721:          and     #$07
  7722:          cmp     TYPFLG
  7723:          bne     LC4B5
  7724:  LC4D7:
  7725:          rts
  7726:          ; ------------------
  7727:  
  7728:  LC4D8:
  7729:          ldx     #$FF
  7730:          stx     ENTFND
  7731:          inx
  7732:          stx     PATFLG
  7733:          jsr     LC589
  7734:          beq     LC4EC
  7735:  LC4E6:
  7736:          rts
  7737:  LC4E7:
  7738:          jsr     LC594
  7739:          bne     LC4E6
  7740:  LC4EC:
  7741:          lda     DRVNUM
  7742:          eor     FILDRV,x
  7743:          lsr     a
  7744:          bcc     @LC4FE
  7745:          and     #$40
  7746:          beq     LC4E7
  7747:          lda     #$02
  7748:          cmp     DRVCNT
  7749:          beq     LC4E7
  7750:  @LC4FE:
  7751:          lda     FILTBL,x
  7752:          tax
  7753:          jsr     LC6A6
  7754:          ldy     #$03
  7755:          jmp     @LC51D
  7756:  @LC50A:
  7757:          lda     CMDBUF,x
  7758:          cmp     (DIRBUF),y
  7759:          beq     @LC51B
  7760:          cmp     #$3F
  7761:          bne     LC4E7
  7762:          lda     (DIRBUF),y
  7763:          cmp     #$A0
  7764:          beq     LC4E7
  7765:  @LC51B:
  7766:          inx
  7767:          iny
  7768:  @LC51D:
  7769:          cpx     LIMIT
  7770:          bcs     @LC52B
  7771:          lda     CMDBUF,x
  7772:          cmp     #$2A
  7773:          beq     @LC535
  7774:          bne     @LC50A
  7775:  @LC52B:
  7776:          cpy     #$13
  7777:          bcs     @LC535
  7778:          lda     (DIRBUF),y
  7779:          cmp     #$A0
  7780:          bne     LC4E7
  7781:  @LC535:
  7782:          ldx     F2PTR
  7783:          stx     ENTFND
  7784:          lda     PATTYP,x
  7785:          and     #$80
  7786:          sta     PATFLG
  7787:          lda     INDEX
  7788:          sta     ENTIND,x
  7789:          lda     SECTOR
  7790:          sta     ENTSEC,x
  7791:          ldy     #$00
  7792:          lda     (DIRBUF),y
  7793:          iny
  7794:          pha
  7795:          and     #$40
  7796:          sta     T0
  7797:          pla
  7798:          and     # ~ $20
  7799:          bmi     @LC55C
  7800:          ora     #$20
  7801:  @LC55C:
  7802:          and     #$27
  7803:          ora     T0
  7804:          sta     T0
  7805:          lda     #$80
  7806:          and     PATTYP,x
  7807:          ora     T0
  7808:          sta     PATTYP,x
  7809:          lda     FILDRV,x
  7810:          and     #$80
  7811:          ora     DRVNUM
  7812:          sta     FILDRV,x
  7813:          lda     (DIRBUF),y
  7814:          sta     FILTRK,x
  7815:          iny
  7816:          lda     (DIRBUF),y
  7817:          sta     FILSEC,x
  7818:          lda     REC
  7819:          bne     LC589
  7820:          ldy     #$15
  7821:          lda     (DIRBUF),y
  7822:          sta     REC
  7823:  
  7824:  LC589:
  7825:          lda     #$FF
  7826:          sta     FOUND
  7827:          lda     F2CNT
  7828:          sta     F2PTR
  7829:  LC594:
  7830:          dec     F2PTR
  7831:          bpl     @LC59A
  7832:          rts
  7833:  
  7834:  @LC59A:
  7835:          ldx     F2PTR
  7836:          lda     PATTYP,x
  7837:          bmi     @LC5A6
  7838:          lda     FILTRK,x
  7839:          bne     LC594
  7840:  @LC5A6:
  7841:          lda     #$00
  7842:          sta     FOUND
  7843:          rts
  7844:          ; ------------------
  7845:  
  7846:  LC5AC:
  7847:          ldy     #$00
  7848:          sty     DELSEC
  7849:          dey
  7850:          sty     ENTFND
  7851:          lda     LFE85
  7852:          sta     TRACK
  7853:          lda     #$01
  7854:          sta     SECTOR
  7855:          sta     LSTBUF
  7856:          jsr     LD475
  7857:  LC5C4:
  7858:          lda     LSTBUF
  7859:          bne     @LC5CA
  7860:          rts
  7861:  @LC5CA:
  7862:          lda     #$07
  7863:          sta     FILCNT
  7864:          lda     #$00
  7865:          jsr     LD4F6
  7866:          sta     LSTBUF
  7867:  LC5D7:
  7868:          jsr     LD4E8
  7869:          dec     FILCNT
  7870:          ldy     #$00
  7871:          lda     (DIRBUF),y
  7872:          bne     @LC5FB
  7873:          lda     DELSEC
  7874:          bne     LC617
  7875:          jsr     LDE3B
  7876:          lda     SECTOR
  7877:          sta     DELSEC
  7878:          lda     DIRBUF
  7879:          ldx     DELIND
  7880:          sta     DELIND
  7881:          beq     LC617
  7882:          rts
  7883:          ; -----------------
  7884:  
  7885:  @LC5FB:
  7886:          ldx     #$01
  7887:          cpx     DELIND
  7888:          bne     LC62F
  7889:          beq     LC617
  7890:  LC604:
  7891:          lda     LFE85
  7892:          sta     TRACK
  7893:          lda     DIRSEC
  7894:          sta     SECTOR
  7895:          jsr     LD475
  7896:          lda     INDEX
  7897:          jsr     LD4C8
  7898:  LC617:
  7899:          lda     #$FF
  7900:          sta     ENTFND
  7901:          lda     FILCNT
  7902:          bmi     @LC629
  7903:          lda     #$20
  7904:          jsr     LD1C6
  7905:          jmp     LC5D7
  7906:          ; -----------------
  7907:  
  7908:  @LC629:
  7909:          jsr     LD44D
  7910:          jmp     LC5C4
  7911:  LC62F:
  7912:          lda     DIRBUF
  7913:          sta     INDEX
  7914:          jsr     LDE3B
  7915:          lda     SECTOR
  7916:          sta     DIRSEC
  7917:          rts
  7918:          ; -----------------
  7919:  
  7920:  LC63D:
  7921:          lda     AUTOFG
  7922:          bne     LC669
  7923:          ldx     DRVNUM
  7924:          lsr     WPSW,x
  7925:          bcc     LC669
  7926:          lda     #$FF
  7927:          sta     JOBRTN
  7928:          jsr     LD00E
  7929:          ldy     #$FF
  7930:          cmp     #$02
  7931:          beq     @LC65F
  7932:          cmp     #$03
  7933:          beq     @LC65F
  7934:          cmp     #$0F
  7935:          beq     @LC65F
  7936:          ldy     #$00
  7937:  @LC65F:
  7938:          ldx     DRVNUM
  7939:  .if CompileDrive >= DRIVE_1570
  7940:          jmp     LA9A5
  7941:  .elseif CompileDrive >= DRIVE_1541C_02
  7942:          jmp     LFFC0
  7943:  .else
  7944:          tya
  7945:          sta     NODRV,x
  7946:  .endif
  7947:  
  7948:  LC664:
  7949:          bne     LC669
  7950:          jsr     LD042
  7951:  LC669:
  7952:          ldx     DRVNUM
  7953:  .if CompileDrive >= DRIVE_1570
  7954:          jmp     LAA17
  7955:  .elseif CompileDrive >= DRIVE_1541C_02
  7956:          jmp     LFFAC
  7957:  .else
  7958:          lda     NODRV,x
  7959:          rts
  7960:  .endif
  7961:  
  7962:  LC66E:
  7963:          pha
  7964:          jsr     LC6A6
  7965:          jsr     @LC688
  7966:          pla
  7967:          sec
  7968:          sbc     STRSIZ
  7969:          tax
  7970:          beq     @LC687
  7971:          bcc     @LC687
  7972:          lda     #$A0
  7973:  @LC681:
  7974:          sta     (DIRBUF),y
  7975:          iny
  7976:          dex
  7977:          bne     @LC681
  7978:  @LC687:
  7979:          rts
  7980:          ; ---------------
  7981:  
  7982:  @LC688:
  7983:          tya
  7984:          asl     a
  7985:          tay
  7986:          lda     BUFTAB0,y
  7987:          sta     DIRBUF
  7988:          lda     BUFTAB0 + 1,y
  7989:          sta     DIRBUF + 1
  7990:          ldy     #$00
  7991:  @LC697:
  7992:          lda     CMDBUF,x
  7993:          sta     (DIRBUF),y
  7994:          iny
  7995:          beq     @LC6A5
  7996:          inx
  7997:          cpx     LIMIT
  7998:          bcc     @LC697
  7999:  @LC6A5:
  8000:          rts
  8001:          ; ---------------
  8002:  
  8003:  LC6A6:
  8004:          lda     #$00
  8005:          sta     STRSIZ
  8006:          txa
  8007:          pha
  8008:  @LC6AD:
  8009:          lda     CMDBUF,x
  8010:          cmp     #','
  8011:          beq     @LC6C8
  8012:          cmp     #'='
  8013:          beq     @LC6C8
  8014:          inc     STRSIZ
  8015:          inx
  8016:          lda     #$0F
  8017:          cmp     STRSIZ
  8018:          bcc     @LC6C8
  8019:          cpx     CMDSIZ
  8020:          bcc     @LC6AD
  8021:  @LC6C8:
  8022:          stx     LIMIT
  8023:          pla
  8024:          tax
  8025:          rts
  8026:          ; -------------------
  8027:  
  8028:  LC6CE:
  8029:          lda     SA
  8030:          pha
  8031:          lda     LINDX
  8032:          pha
  8033:          jsr     @LC6DE
  8034:          pla
  8035:          sta     LINDX
  8036:          pla
  8037:          sta     SA
  8038:          rts
  8039:          ; ----------------
  8040:  
  8041:  @LC6DE:
  8042:          lda     #$11
  8043:          sta     SA
  8044:          jsr     LD0EB
  8045:          jsr     LD4E8
  8046:          lda     ENTFND
  8047:          bpl     @LC6F7
  8048:          lda     DRVFLG
  8049:          bne     @LC6FC
  8050:          jsr     LC806
  8051:          clc
  8052:          rts
  8053:  
  8054:  @LC6F7:
  8055:          lda     DRVFLG
  8056:          beq     @LC71B
  8057:  @LC6FC:
  8058:          dec     DRVFLG
  8059:          bne     @LC70E
  8060:          dec     DRVFLG
  8061:          jsr     LC38F
  8062:          jsr     LC806
  8063:          sec
  8064:          jmp     LC38F
  8065:  @LC70E:
  8066:          lda     #$00
  8067:          sta     NBTEMP + 1
  8068:          sta     DRVFLG
  8069:          jsr     LC7B7
  8070:          sec
  8071:          rts
  8072:          ; ----------------
  8073:  
  8074:  @LC71B:
  8075:          ldx     #$18
  8076:          ldy     #$1D
  8077:          lda     (DIRBUF),y
  8078:          sta     NBTEMP + 1
  8079:          beq     @LC728
  8080:          ldx     #$16
  8081:  @LC728:
  8082:          dey
  8083:          lda     (DIRBUF),y
  8084:          sta     NBTEMP
  8085:          cpx     #$16
  8086:          beq     @LC73C
  8087:          cmp     #$0A
  8088:          bcc     @LC73C
  8089:          dex
  8090:          cmp     #$64
  8091:          bcc     @LC73C
  8092:          dex
  8093:  @LC73C:
  8094:          jsr     LC7AC
  8095:          lda     (DIRBUF),y
  8096:          pha
  8097:          asl     a
  8098:          bpl     @LC74A
  8099:          lda     #$3C
  8100:          sta     NAMBUF + 1,x
  8101:  @LC74A:
  8102:          pla
  8103:          and     #$0F
  8104:          tay
  8105:          lda     LFEC5,y
  8106:          sta     NAMBUF,x
  8107:          dex
  8108:          lda     LFEC0,y
  8109:          sta     NAMBUF,x
  8110:          dex
  8111:          lda     LFEBB,y
  8112:          sta     NAMBUF,x
  8113:          dex
  8114:          dex
  8115:          bcs     @LC76B
  8116:          lda     #$2A
  8117:          sta     NAMBUF + 1,x
  8118:  @LC76B:
  8119:          lda     #$A0
  8120:          sta     NAMBUF,x
  8121:          dex
  8122:          ldy     #$12
  8123:  @LC773:
  8124:          lda     (DIRBUF),y
  8125:          sta     NAMBUF,x
  8126:          dex
  8127:          dey
  8128:          cpy     #$03
  8129:          bcs     @LC773
  8130:          lda     #$22
  8131:          sta     NAMBUF,x
  8132:  @LC783:
  8133:          inx
  8134:          cpx     #$20
  8135:          bcs     @LC793
  8136:          lda     NAMBUF,x
  8137:          cmp     #$22
  8138:          beq     @LC793
  8139:          cmp     #$A0
  8140:          bne     @LC783
  8141:  @LC793:
  8142:          lda     #$22
  8143:          sta     NAMBUF,x
  8144:  @LC798:
  8145:          inx
  8146:          cpx     #$20
  8147:          bcs     @LC7A7
  8148:          lda     #$7F
  8149:          and     NAMBUF,x
  8150:          sta     NAMBUF,x
  8151:          bpl     @LC798
  8152:  @LC7A7:
  8153:          jsr     LC4B5
  8154:          sec
  8155:          rts
  8156:          ; -----------------
  8157:  
  8158:  LC7AC:
  8159:          ldy     #$1B
  8160:          lda     #$20
  8161:  @LC7B0:
  8162:          sta     L02B0,y
  8163:          dey
  8164:          bne     @LC7B0
  8165:          rts
  8166:          ; --------------
  8167:  
  8168:  LC7B7:
  8169:          jsr     LF119
  8170:          jsr     LF0DF
  8171:          jsr     LC7AC
  8172:          lda     #$FF
  8173:          sta     T0
  8174:          ldx     DRVNUM
  8175:          stx     NBTEMP
  8176:          lda     #$00
  8177:          sta     NBTEMP + 1
  8178:          ldx     JOBNUM
  8179:          lda     TableHighBytesOfBuffers,x
  8180:          sta     DIRBUF + 1
  8181:          lda     LFE85 + 3
  8182:          sta     DIRBUF
  8183:          ldy     #$16
  8184:          lda     (DIRBUF),y
  8185:          cmp     #$A0
  8186:          bne     @LC7ED
  8187:          lda     #$31
  8188:          .byte   ASM_BIT3
  8189:  @LC7E5:
  8190:          lda     (DIRBUF),y
  8191:          cmp     #$A0
  8192:          bne     @LC7ED
  8193:          lda     #$20
  8194:  @LC7ED:
  8195:          sta     NAMBUF + 2,y
  8196:          dey
  8197:          bpl     @LC7E5
  8198:          lda     #$12
  8199:          sta     NAMBUF
  8200:          lda     #$22
  8201:          sta     NAMBUF + 1
  8202:          sta     NAMBUF + 18
  8203:          lda     #$20
  8204:          sta     NAMBUF + 19
  8205:          rts
  8206:          ; --------------------
  8207:  
  8208:  LC806:
  8209:          jsr     LC7AC
  8210:          ldy     #$0B
  8211:  @LC80B:
  8212:          lda     TextBlocksFree,y
  8213:          sta     NAMBUF,y
  8214:          dey
  8215:          bpl     @LC80B
  8216:          jmp     LEF4D
  8217:          ; -------------------
  8218:  
  8219:  TextBlocksFree:
  8220:          .byte   "BLOCKS FREE."
  8221:  
  8222:  cmd_scratch:
  8223:          jsr     LC398
  8224:          jsr     LC320
  8225:          jsr     LC3CA
  8226:          lda     #$00
  8227:          sta     R0
  8228:          jsr     LC49D
  8229:          bmi     @LC872
  8230:  @LC835:
  8231:          jsr     LDDB7
  8232:          bcc     @LC86D
  8233:          ldy     #$00
  8234:          lda     (DIRBUF),y
  8235:          and     #$40
  8236:          bne     @LC86D
  8237:          jsr     LC8B6
  8238:          ldy     #$13
  8239:          lda     (DIRBUF),y
  8240:          beq     @LC855
  8241:          sta     TRACK
  8242:          iny
  8243:          lda     (DIRBUF),y
  8244:          sta     SECTOR
  8245:          jsr     LC87D
  8246:  @LC855:
  8247:          ldx     ENTFND
  8248:          lda     #$20
  8249:          and     PATTYP,x
  8250:          bne     @LC86B
  8251:          lda     FILTRK,x
  8252:          sta     TRACK
  8253:          lda     FILSEC,x
  8254:          sta     SECTOR
  8255:          jsr     LC87D
  8256:  @LC86B:
  8257:          inc     R0
  8258:  @LC86D:
  8259:          jsr     LC48B
  8260:          bpl     @LC835
  8261:  @LC872:
  8262:          lda     R0
  8263:          sta     TRACK
  8264:          lda     #ERRORCODE_01_FILES_SCRATCHED
  8265:          ldy     #$00
  8266:          jmp     LC1A3
  8267:          ; ------------------
  8268:  
  8269:  LC87D:
  8270:          jsr     LEF5F
  8271:          jsr     LD475
  8272:          jsr     LF119
  8273:          lda     BUF0,x
  8274:          cmp     #$FF
  8275:          beq     @LC894
  8276:          lda     WBAM
  8277:          ora     #$40
  8278:          sta     WBAM
  8279:  @LC894:
  8280:          lda     #$00
  8281:          jsr     LD4C8
  8282:          jsr     LD156
  8283:          sta     TRACK
  8284:          jsr     LD156
  8285:          sta     SECTOR
  8286:          lda     TRACK
  8287:          bne     @LC8AD
  8288:          jsr     LEEF4
  8289:          jmp     LD227
  8290:  @LC8AD:
  8291:          jsr     LEF5F
  8292:          jsr     LD44D
  8293:          jmp     @LC894
  8294:          ; ------------
  8295:  
  8296:  LC8B6:
  8297:          ldy     #$00
  8298:          tya
  8299:          sta     (DIRBUF),y
  8300:          jsr     LDE5E
  8301:          jmp     LD599
  8302:          ; ---------------
  8303:  
  8304:  cmd_duplicate:
  8305:  Error31SyntaxError:
  8306:          lda     #ERRORCODE_31_SYNTAX_ERROR
  8307:          jmp     GenerateErrorMessage
  8308:          ; ----------------
  8309:  
  8310:  LC8C6:
  8311:          lda     #ASM_JMP
  8312:          sta     BUFFER3
  8313:          lda     #<LFAC7
  8314:          sta     BUFFER3 + 1
  8315:          lda     #>LFAC7
  8316:          sta     BUFFER3 + 2
  8317:          lda     #$03
  8318:          jsr     LD6D3
  8319:          lda     DRVNUM
  8320:          ora     #$E0
  8321:          sta     JOBS3
  8322:  @LC8E0:
  8323:          lda     JOBS3
  8324:          bmi     @LC8E0
  8325:          cmp     #$02
  8326:          bcc     @LC8EF
  8327:          lda     #$03
  8328:          ldx     #$00
  8329:          jmp     LE60A
  8330:  @LC8EF:
  8331:          rts
  8332:          ; ---------------
  8333:  
  8334:  cmd_copy:
  8335:          lda     #$E0
  8336:          sta     BUFUSE
  8337:          jsr     LF0D1
  8338:          jsr     LF119
  8339:          lda     #$FF
  8340:          sta     BUF0,x
  8341:          lda     #$0F
  8342:          sta     LINUSE
  8343:          jsr     LC1E5
  8344:          bne     @LC90C
  8345:          jmp     Error31SyntaxError
  8346:  @LC90C:
  8347:          jsr     LC1F8
  8348:          jsr     LC320
  8349:          lda     IMAGE
  8350:          and     #'U'
  8351:          bne     LC928
  8352:          ldx     FILTBL
  8353:          lda     CMDBUF,x
  8354:          cmp     #'*'
  8355:          bne     LC928
  8356:  
  8357:  Error30SyntaxError:
  8358:          lda     #ERRORCODE_30_SYNTAX_ERROR
  8359:          jmp     GenerateErrorMessage
  8360:          ; ----------------
  8361:  
  8362:  LC928:
  8363:          lda     IMAGE
  8364:          and     #$D9
  8365:          bne     Error30SyntaxError
  8366:          jmp     @LC952
  8367:          lda     #$00
  8368:          sta     REC
  8369:          sta     DRVCNT
  8370:          sta     FILTRK
  8371:          sta     FILTRK + 1
  8372:          lda     FILDRV + 1
  8373:          and     #$01
  8374:          sta     DRVNUM
  8375:          ora     #$01
  8376:          sta     DELSEC
  8377:          lda     FILTBL + 1
  8378:          sta     FILTBL
  8379:          rts
  8380:          ; ----------------
  8381:  
  8382:  @LC952:
  8383:          jsr     LC44F
  8384:          lda     F2CNT
  8385:          cmp     #$03
  8386:          bcc     @LC9A1
  8387:          lda     FILDRV
  8388:          cmp     FILDRV + 1
  8389:          bne     @LC9A1
  8390:          lda     ENTIND
  8391:          cmp     ENTIND + 1
  8392:          bne     @LC9A1
  8393:          lda     ENTSEC
  8394:          cmp     ENTSEC + 1
  8395:          bne     @LC9A1
  8396:          jsr     LCACC
  8397:          lda     #$01
  8398:          sta     F2PTR
  8399:          jsr     LC9FA
  8400:          jsr     LD125
  8401:          beq     @LC982
  8402:          cmp     #$02
  8403:          bne     @LC987
  8404:  @LC982:
  8405:          lda     #ERRORCODE_64_FILE_TYPE_MISMATCH
  8406:          jsr     GenerateErrorMessage
  8407:  @LC987:
  8408:          lda     #$12
  8409:          sta     SA
  8410:          lda     L023C
  8411:          sta     L023D
  8412:          lda     #$FF
  8413:          sta     L023C
  8414:          jsr     LDA2A
  8415:          ldx     #$02
  8416:          jsr     @LC9B9
  8417:          jmp     CommandEnd
  8418:  @LC9A1:
  8419:          jsr     @LC9A7
  8420:          jmp     CommandEnd
  8421:          ; ----------------
  8422:  
  8423:  @LC9A7:
  8424:          jsr     LCAE7
  8425:          lda     FILDRV
  8426:          and     #$01
  8427:          sta     DRVNUM
  8428:          jsr     LD486
  8429:          jsr     LD6E4
  8430:          ldx     F1CNT
  8431:  @LC9B9:
  8432:          stx     F2PTR
  8433:          jsr     LC9FA
  8434:          lda     #$11
  8435:          sta     SA
  8436:          jsr     LD0EB
  8437:          jsr     LD125
  8438:          bne     @LC9CE
  8439:          jsr     LCA53
  8440:  @LC9CE:
  8441:          lda     #$08
  8442:          sta     EIOFLG
  8443:          jmp     @LC9D8
  8444:  @LC9D5:
  8445:          jsr     LCF9B
  8446:  @LC9D8:
  8447:          jsr     LCA35
  8448:          lda     #$80
  8449:          jsr     LDDA6
  8450:          beq     @LC9D5
  8451:          jsr     LD125
  8452:          beq     @LC9EA
  8453:          jsr     LCF9B
  8454:  @LC9EA:
  8455:          ldx     F2PTR
  8456:          inx
  8457:          cpx     F2CNT
  8458:          bcc     @LC9B9
  8459:          lda     #$12
  8460:          sta     SA
  8461:          jmp     LDB02
  8462:          ; -----------------
  8463:  
  8464:  LC9FA:
  8465:          ldx     F2PTR
  8466:          lda     FILDRV,x
  8467:          and     #$01
  8468:          sta     DRVNUM
  8469:          lda     LFE85
  8470:          sta     TRACK
  8471:          lda     ENTSEC,x
  8472:          sta     SECTOR
  8473:          jsr     LD475
  8474:          ldx     F2PTR
  8475:          lda     ENTIND,x
  8476:          jsr     LD4C8
  8477:          ldx     F2PTR
  8478:          lda     PATTYP,x
  8479:          and     #$07
  8480:          sta     TYPE
  8481:          lda     #$00
  8482:          sta     REC
  8483:          jsr     LD9A0
  8484:          ldy     #$01
  8485:          jsr     LD125
  8486:          beq     @LCA31
  8487:          iny
  8488:  @LCA31:
  8489:          tya
  8490:          jmp     LD4C8
  8491:          ; --------------
  8492:  
  8493:  LCA35:
  8494:          lda     #$11
  8495:          sta     SA
  8496:  
  8497:  LCA39:
  8498:          jsr     LD39B
  8499:          sta     DATA
  8500:          ldx     LINDX
  8501:          lda     CHNRDY,x
  8502:          and     #$08
  8503:          sta     EIOFLG
  8504:          bne     @Rts
  8505:          jsr     LD125
  8506:          beq     @Rts
  8507:          lda     #$80
  8508:          jsr     LDD97
  8509:  @Rts:
  8510:          rts
  8511:          ; ----------------
  8512:  
  8513:  LCA53:
  8514:          jsr     LD1D3
  8515:          jsr     LE1CB
  8516:          lda     SSIND
  8517:          pha
  8518:          lda     SSNUM
  8519:          pha
  8520:          lda     #$12
  8521:          sta     SA
  8522:          jsr     LD107
  8523:          jsr     LD1D3
  8524:          jsr     LE1CB
  8525:          jsr     LE29C
  8526:          lda     SSIND
  8527:          sta     R1
  8528:          lda     SSNUM
  8529:          sta     R0
  8530:          lda     #$00
  8531:          sta     R2
  8532:          sta     RECPTR
  8533:          sta     RELPTR
  8534:          pla
  8535:          sta     SSNUM
  8536:          pla
  8537:          sta     SSIND
  8538:          jmp     LE33B
  8539:          ; ------------------
  8540:  
  8541:  cmd_rename:
  8542:          jsr     LC320
  8543:          lda     FILDRV + 1
  8544:          and     #$01
  8545:          sta     FILDRV + 1
  8546:          cmp     FILDRV
  8547:          beq     @LCA97
  8548:          ora     #$80
  8549:  @LCA97:
  8550:          sta     FILDRV
  8551:          jsr     LC44F
  8552:          jsr     LCAE7
  8553:          lda     FILDRV + 1
  8554:          and     #$01
  8555:          sta     DRVNUM
  8556:          lda     ENTSEC + 1
  8557:          sta     SECTOR
  8558:          jsr     LDE57
  8559:          jsr     LD599
  8560:          lda     ENTIND + 1
  8561:          clc
  8562:          adc     #$03
  8563:          jsr     LD4C8
  8564:          jsr     LDF93
  8565:          tay
  8566:          ldx     FILTBL
  8567:          lda     #$10
  8568:          jsr     LC66E
  8569:          jsr     LDE5E
  8570:          jsr     LD599
  8571:          jmp     CommandEnd
  8572:          ; --------------
  8573:  
  8574:  LCACC:
  8575:          lda     PATTYP + 1
  8576:          and     #$07
  8577:          sta     TYPE
  8578:          ldx     F2CNT
  8579:  @LCAD6:
  8580:          dex
  8581:          cpx     F1CNT
  8582:          bcc     @Rts
  8583:          lda     FILTRK,x
  8584:          bne     @LCAD6
  8585:          lda     #ERRORCODE_62_FILE_NOT_FOUND
  8586:          jmp     GenerateErrorMessage
  8587:          ; ----------------
  8588:  
  8589:  @Rts:
  8590:          rts
  8591:          ; ----------------
  8592:  
  8593:  LCAE7:
  8594:          jsr     LCACC
  8595:  @LCAEA:
  8596:          lda     FILTRK,x
  8597:          beq     @LCAF4
  8598:          lda     #ERRORCODE_63_FILE_EXISTS
  8599:          jmp     GenerateErrorMessage
  8600:          ; ----------------
  8601:  
  8602:  @LCAF4:
  8603:          dex
  8604:          bpl     @LCAEA
  8605:          rts
  8606:          ; ----------------
  8607:  
  8608:  ; execute memory functions (M-x)
  8609:  ;
  8610:  ; They are all of the form: M-<x><addr low><addr high>
  8611:  ;
  8612:  ; In particular, they are:
  8613:  ; M-R<addr low><addr high>            READ from <addr> 1 byte
  8614:  ; M-R<addr low><addr high><count>     READ from <addr> <count> byte
  8615:  ; M-W<addr low><addr high><count>...  WRITE to  <addr> <count> byte following the <count> byte
  8616:  ; M-E<addr low><addr high>...
  8617:  ;
  8618:  cmd_memory:
  8619:          ; check next character for '-'
  8620:          lda     CMDBUF + 1
  8621:          cmp     #'-'
  8622:          bne     @Error31SyntaxError     ; no '-' --> branch, output 31,SYNTAX ERROR     
  8623:  
  8624:          ; store the address low/high at T0/T0+1
  8625:          lda     CMDBUF + 3
  8626:          sta     T0
  8627:          lda     CMDBUF + 4
  8628:          sta     T0+1
  8629:  
  8630:          ; determine the exact command to execute
  8631:  
  8632:          ldy     #$00
  8633:          lda     CMDBUF + 2              ; get relevant command byte
  8634:  
  8635:          ; test for M-R
  8636:          cmp     #'R'
  8637:          beq     @cmd_memory_read        ; execute M-R
  8638:  
  8639:          jsr     NoOp                    ; contains only an RTS
  8640:  
  8641:          ; test for M-W
  8642:          cmp     #'W'
  8643:          beq     @cmd_memory_write       ; execute M-W
  8644:  
  8645:          ; test for M-E
  8646:          cmp     #'E'
  8647:          bne     @Error31SyntaxError     ; no M-E --> error, abort
  8648:  
  8649:          ; execute M-E by jumping to the address
  8650:          jmp     (T0)
  8651:  
  8652:  @cmd_memory_read:
  8653:          lda     (T0),y                  ; read the first byte at the given memory position
  8654:          sta     DATA                    ; remember it
  8655:  
  8656:          lda     CMDSIZ                  ; check the size of the M-R command
  8657:          cmp     #$06                    ; less than 6? (that is, no <count> was given?
  8658:          bcc     @OnlyOneByte            ; yes --> branch, we're done
  8659:  
  8660:          ldx     CMDBUF + 5              ; get the number of byte to read (<count>)
  8661:          dex                             ; minus 1, as we have already read one byte
  8662:          beq     @OnlyOneByte            ; there are null byte left --> branch, we're done
  8663:  
  8664:          ; if more than one byte is to be send, the remaining bytes are transferred
  8665:          ; as if these byte would by the error status (error channel). That is,
  8666:          ; the buffer to the error channel is set to the memory area.
  8667:          ;
  8668:          ; This approach has a problem, though: The handling of the error
  8669:          ; channel has some limitations:
  8670:          ; 1. no page crossing possible. You can even see it here, as only the low byte of
  8671:          ;    the end address can be written
  8672:          ; 2. On the page where the error channel is (page 2), we cannot read beyond the
  8673:          ;    start of the error channel buffer.
  8674:          ;    That's because the start of the "real" error buffer is hard-coded (cf. LD414).
  8675:          ;    If that address is reached, a new error message is generated.
  8676:          ;
  8677:          txa                             ; add count (-1, dex above) to start of buffer to read (only low byte)
  8678:          clc
  8679:          adc     T0
  8680:          inc     T0
  8681:          sta     LSTCHR + 5              ; store as last character (only low byte)
  8682:  
  8683:          lda     T0                      ; remember start of buffer
  8684:          sta     BUFTABERR               ; as start of error buffer
  8685:          lda     T0+1
  8686:          sta     BUFTABERR + 1
  8687:          jmp     LD443                   ; @@@TODO
  8688:          ; -------------------------
  8689:  
  8690:  @OnlyOneByte:
  8691:          jsr     LD0EB
  8692:          jmp     LD43A
  8693:          ; ------------------
  8694:  
  8695:  @Error31SyntaxError:
  8696:          lda     #ERRORCODE_31_SYNTAX_ERROR
  8697:          jmp     GenerateErrorMessage
  8698:          ; ----------------
  8699:  
  8700:  @cmd_memory_write:
  8701:  
  8702:          ; copy bytes from input buffer into destination
  8703:  
  8704:          ; when we enter here, y is 0.
  8705:  
  8706:          lda     CMDBUF + 6,y            ; get next byte
  8707:          sta     (T0),y                  ; store it into the destination
  8708:          iny                             ; increase offset into buffers
  8709:          cpy     CMDBUF + 5              ; are <count> byte copied?
  8710:          bcc     @cmd_memory_write       ; no --> branch, proceed with next byte
  8711:          rts
  8712:          ; ------------------
  8713:  
  8714:  
  8715:  ; Execute user (U) command
  8716:  ; 
  8717:  ; Commands have the form:
  8718:  ; Ux
  8719:  ; Ux:
  8720:  ; Ux:<SOMETHING>
  8721:  ; 
  8722:  ; x can be a digit (0-9) or a character.
  8723:  ;
  8724:  ; The user commands use a jump table to determine where each of them is executed.
  8725:  ; A not-so-well known fact of the user commands is that the jump table address
  8726:  ; can be redefined, so the jump table points to something else.
  8727:  ; In order to set the jump table back to the original value, the command 'U0'
  8728:  ; (that is, x=0 above) is used. In order to be able to do this, the U0 command is
  8729:  ; handled differently from the other U commands.
  8730:  ;
  8731:  ; Note that there is NO command to redefine the Ux vectors. Thus, in order to
  8732:  ; redefine the table, the vector (CMDUSER) has to be redefined "by hand".
  8733:  ;
  8734:  
  8735:  cmd_user:
  8736:          ldy     CMDBUF + 1              ; check for 'U0' command
  8737:          cpy     #'0'
  8738:          bne     NoU0Command             ; something else --> branch
  8739:  
  8740:          ; Special handling of U0 command
  8741:  
  8742:          ; U0 - initalize jump table for U commands
  8743:          ; (on the 1570 and 1571, the U0 command is also used for the special
  8744:          ; "fast serial" functions. That's why the command has to be patched for
  8745:          ; these devices.
  8746:  
  8747:  InitJumpTableForUxCommands:
  8748:  
  8749:  .if CompileDrive >= DRIVE_1570
  8750:  
  8751:          ; special handling on the 1570 and 1571 drives.
  8752:          ; if the routine finds out that it is not the special U0 command
  8753:          ; for fast serial, the equivalent of the ".else" path is executed
  8754:          ; on the 1570/1571, too.
  8755:          ;
  8756:          jmp     U0CommandPatch157x
  8757:          ; -------------------------
  8758:  
  8759:          FillNOP 6
  8760:  
  8761:  .else
  8762:  
  8763:          lda     #<AddressesUxCommands           ; store the default address of the U0
  8764:          sta     USRJMP                          ; jump table
  8765:          lda     #>AddressesUxCommands           ; into the location
  8766:          sta     USRJMP + 1
  8767:          rts
  8768:          ; -------------------------
  8769:  .endif
  8770:  
  8771:  NoU0Command:
  8772:          jsr     @ExecuteUxCommand               ; execute the user command
  8773:          jmp     CommandEnd                      ; back to command loop
  8774:          ; ------------------
  8775:  
  8776:  @ExecuteUxCommand:
  8777:          ; the command number is determined as follows (documented):
  8778:          ; U1, same as UA --> vector 0
  8779:          ; U2, same as UB --> vector 1
  8780:          ; ...
  8781:          ; U9, same as UI --> vector 8
  8782:          ; U:, same as UJ --> vector 9  (               same as NMI vector)
  8783:          ; U;, same as UK --> vector 10 (undocumented - same RESET vector)
  8784:          ; U<, same as UL --> vector 11 (undocumented - same IRQ vector, will crash)
  8785:          ;
  8786:          ; That is, the commands codes (in PETSCII) are $31..$3c (for 1, 2, ...)
  8787:          ; or $41..$4c (for A, B, ...).
  8788:          ; In order to get the command index, it is thus possible to get the value
  8789:          ; index = (PETSCII - 1) AND $0F
  8790:          ; with PETSCII being the PETSCII representation of the command byte.
  8791:          ; Note that this wil allow even other commands, and it will even work
  8792:          ; with lower and upper case bytes.
  8793:          ;
  8794:          dey                                     ; PETSCII of command minus 1
  8795:          tya
  8796:          and     #$0F                            ; now, A has the command index (s. large comment above)
  8797:          asl     a                               ; * 2 gives index into jump table
  8798:          tay
  8799:  
  8800:          ; get address from jump table into IP/IP+1
  8801:          lda     (USRJMP),y
  8802:          sta     IP
  8803:          iny
  8804:          lda     (USRJMP),y
  8805:          sta     IP + 1
  8806:  
  8807:  .if CompileDrive >= DRIVE_1570
  8808:          ; the 157x makes sure that the IRQ vector is called via BRK,
  8809:          ; not via JMP
  8810:          jmp     Patch1570ExecutionOfUCommand
  8811:  .else
  8812:          ; the 154x and 2031 do not care and execute everything.
  8813:          jmp     (IP)
  8814:  .endif
  8815:  
  8816:  LCB84:
  8817:          lda     LSTDRV
  8818:          sta     DRVNUM
  8819:          lda     SA
  8820:          pha
  8821:          jsr     LC63D
  8822:          pla
  8823:          sta     SA
  8824:          ldx     CMDSIZ
  8825:          dex
  8826:          bne     LCBA5
  8827:          lda     #$01
  8828:          jsr     LD1E2
  8829:          jmp     LCBF1
  8830:          ; ---------------
  8831:  Error70:
  8832:          lda     #ERRORCODE_70_NO_CHANNEL
  8833:          jmp     GenerateErrorMessage
  8834:          ; ----------------
  8835:  
  8836:  LCBA5:
  8837:          ldy     #$01
  8838:          jsr     CheckForAndSkipWhitespace
  8839:          ldx     FILSEC
  8840:          cpx     #$05
  8841:          bcs     Error70
  8842:          lda     #$00
  8843:          sta     T0
  8844:          sta     T1
  8845:          sec
  8846:  @LCBB8:
  8847:          rol     T0
  8848:          rol     T1
  8849:          dex
  8850:          bpl     @LCBB8
  8851:          lda     T0
  8852:          and     BUFUSE
  8853:          bne     Error70
  8854:          lda     T1
  8855:          and     BUFUSE + 1
  8856:          bne     Error70
  8857:          lda     T0
  8858:          ora     BUFUSE
  8859:          sta     BUFUSE
  8860:          lda     T1
  8861:          ora     BUFUSE + 1
  8862:          sta     BUFUSE + 1
  8863:          lda     #$00
  8864:          jsr     LD1E2
  8865:          ldx     LINDX
  8866:          lda     FILSEC
  8867:          sta     BUF0,x
  8868:          tax
  8869:          lda     DRVNUM
  8870:          sta     JOBS0,x
  8871:          sta     LSTJOB,x
  8872:  LCBF1:
  8873:          ldx     SA
  8874:          lda     LINTAB,x
  8875:          ora     #$40
  8876:          sta     LINTAB,x
  8877:          ldy     LINDX
  8878:          lda     #$FF
  8879:          sta     LSTCHR,y
  8880:          lda     #$89
  8881:          sta     CHNRDY,y
  8882:          lda     BUF0,y
  8883:          sta     L023E,y
  8884:          asl     a
  8885:          tax
  8886:          lda     #$01
  8887:          sta     BUFTAB0,x
  8888:          lda     #$0E
  8889:          sta     FILTYP,y
  8890:          jmp     CommandEnd
  8891:          ; -----------------
  8892:  
  8893:  ; Execute block (B) command
  8894:  ; 
  8895:  ; Commands have the form:
  8896:  ; B-x
  8897:  ; 
  8898:  ; x can be one of 'R', 'W', 'A', 'F', 'E', 'P'.
  8899:  ;
  8900:  ; This function does not check for more than that. Every command
  8901:  ; has to check its parameters individually.
  8902:  ;
  8903:  cmd_block:
  8904:          ldy     #$00                                    ; start search at first character
  8905:          ldx     #$00                                    ; start with first parameter
  8906:          lda     #'-'
  8907:          jsr     SearchInCmdline                         ; check for '-' as next char
  8908:          bne     cmd_block_found_dash                    ; found --> jump
  8909:  
  8910:          ; no dash ('-') --> return 31,SYNTAX ERROR
  8911:  
  8912:  Error31SyntaxError_2:
  8913:          lda     #ERRORCODE_31_SYNTAX_ERROR
  8914:          jmp     GenerateErrorMessage
  8915:          ; ----------------
  8916:  
  8917:  Error30SyntaxError_2:
  8918:          lda     #ERRORCODE_30_SYNTAX_ERROR
  8919:          jmp     GenerateErrorMessage
  8920:          ; ----------------
  8921:  
  8922:  cmd_block_found_dash:
  8923:          txa                                             ; get number of comma in command line
  8924:          bne     Error30SyntaxError_2                    ; not null --> error, because B-x does not allow comma
  8925:  
  8926:          ; check if this is a valid command, and if it is, which one
  8927:          ldx     #@CommandCharsTable_End - @CommandCharsTable - 1
  8928:          lda     CMDBUF,y                                ; read next character (the 'x' in 'B-x')
  8929:  @SearchCommandChar:
  8930:          cmp     @CommandCharsTable,x
  8931:          beq     @FoundChar
  8932:          dex
  8933:          bpl     @SearchCommandChar
  8934:          bmi     Error31SyntaxError_2                    ; command does not exist --> return 31,SYNTAX ERROR
  8935:          ; -----------------------
  8936:  
  8937:  @FoundChar:
  8938:          txa
  8939:          ora     #$80                                    ; @@@
  8940:          sta     CMDNUM
  8941:          jsr     ReadUpTo4NumericalParameter
  8942:  
  8943:          lda     CMDNUM                                  ; get the command number
  8944:          asl     a                                       ; convert it to an index into the command table (*2)
  8945:          tax
  8946:          lda     @CommandAddress + 1,x                   ; read address of command
  8947:          sta     T1
  8948:          lda     @CommandAddress,x
  8949:          sta     T0
  8950:          jmp     (T0)                                    ; execute command
  8951:          ; ------------------
  8952:  
  8953:          ; Table of possible 'B-x' commands, with x being one of:
  8954:  
  8955:  @CommandCharsTable:
  8956:          .byte   'A','F','R','W','E','P'
  8957:  @CommandCharsTable_End:
  8958:  
  8959:          ; The addresses of the 'B-x' commands, in the same order as in @CommandChars:
  8960:  @CommandAddress:
  8961:          .addr   cmd_block_allocate
  8962:          .addr   cmd_block_free
  8963:          .addr   cmd_block_read
  8964:          .addr   cmd_block_write
  8965:          .addr   cmd_block_execute
  8966:          .addr   cmd_buffer_pointer
  8967:  
  8968:  
  8969:  ; This function reads in up to 4 numerical parameters from the command line
  8970:  ;
  8971:  ; Returns:
  8972:  ;   F1CNT: The number of parameters
  8973:  ;   FILTRK + i: High byte of parameter i (with 0 <= i < F1CNT)
  8974:  ;   FILSEC + i: Low byte of parameter i (with 0 <= i < F1CNT)
  8975:  ;
  8976:  ReadUpTo4NumericalParameter:
  8977:          ldy     #$00                            ; position where to start searching
  8978:          ldx     #$00                            ; start with parameter 0
  8979:          lda     #':'
  8980:          jsr     SearchInCmdline                 ; check for a colon after the command
  8981:          bne     CheckForAndSkipWhitespace       ; no colon -> check for and skip whitespace
  8982:  
  8983:          ; there was no colon. Thus, restart command line processing directly after the 'B-x':
  8984:          ldy     #$03                            ; position read pointer after the 'B-x'
  8985:  
  8986:  CheckForAndSkipWhitespace:
  8987:          lda     CMDBUF,y                        ; get next char
  8988:          cmp     #' '
  8989:          beq     @SkipWhiteSpace                 ; space --> skip it
  8990:          cmp     #PETSCII_CRSR_RIGHT
  8991:          beq     @SkipWhiteSpace                 ; CRSR right --> skipt it
  8992:          cmp     #','
  8993:          bne     @NoMoreWhiteSpace               ; no comma -> we're done
  8994:  
  8995:  @SkipWhiteSpace:
  8996:          iny                                     ; advance to next char
  8997:          cpy     CMDSIZ                          ; already read the last char?
  8998:          bcc     CheckForAndSkipWhitespace       ; no --> check for next whitepsace
  8999:          rts                                     ; we are at the end of the buffer --> exit
  9000:          ; ----------------
  9001:  
  9002:  @NoMoreWhiteSpace:
  9003:          jsr     @ConvertParameterToBinary
  9004:          inc     F1CNT                           ; proceed to next parameter
  9005:          ldy     F2PTR                           ; get pointer to last read character
  9006:          cpx     #$04                            ; number of parameter < 4 + 1?
  9007:          bcc     @SkipWhiteSpace                 ; yes, try to get next parameter
  9008:          bcs     Error30SyntaxError_2            ; uncond. --> too many parameter
  9009:          ; --------------------
  9010:  
  9011:  @ConvertParameterToBinary:
  9012:          lda     #$00                            ; clear temporary storage
  9013:          sta     T0
  9014:          sta     T1
  9015:  
  9016:          sta     T3                              ; clear high byte of conversion
  9017:  
  9018:          ldx     #-1                             ; when converting the digits into a number, start with T0
  9019:  
  9020:  @ReadInCharacter:
  9021:          lda     CMDBUF,y                        ; get next char
  9022:  
  9023:          ; make sure it is one of '0', '1', ..., '9', ':', ';', '<', '=', '>', '?' (0x30..0x3F)
  9024:          ; @@@TODO: Why are ':' ... '?' allowed?
  9025:          cmp     #'?' + 1                        ; bigger than '?'?
  9026:          bcs     @NoDigit                        ; yes --> branch, no digit
  9027:          cmp     #'0'                            ; smaller than '0'?
  9028:          bcc     @NoDigit                        ; yes --> branch, no digit
  9029:          and     #$0F                            ; convert to hex digit
  9030:  
  9031:          ; move T0, T1, T2 to the right
  9032:          ; thus, rolling in the next digit
  9033:          ; at the end, T2 T1 T0 form a digital number
  9034:  
  9035:          pha
  9036:          lda     T1
  9037:          sta     T2
  9038:          lda     T0
  9039:          sta     T1
  9040:          pla
  9041:          sta     T0
  9042:  
  9043:          iny                                             ; proceed to next character
  9044:          cpy     CMDSIZ                                  ; already at the end of the buffer?
  9045:          bcc     @ReadInCharacter                        ; no, process the character
  9046:  
  9047:  @NoDigit:
  9048:          sty     F2PTR                                   ; remember read position in command line
  9049:  
  9050:          clc
  9051:          lda     #$00
  9052:  
  9053:          ; Now, T0 + 10 * T1 + 100 * T2 is the value of the digits given
  9054:          ; convert it into a binary number
  9055:  
  9056:  @NextDigit:
  9057:          inx                                     ; iterate through T0, T1, T2
  9058:          cpx     #3                              ; 3 digits already processed?
  9059:          bcs     @ConversionDone                 ; yes, conversion done
  9060:  
  9061:          ldy     T0,x                            ; get value of digit
  9062:  
  9063:          ; add the appropriate power of 10 as many times as the digits tells us
  9064:  @AddPowerOf10:
  9065:          dey
  9066:          bmi     @NextDigit
  9067:          adc     @PowersOf10,x                   ; add appropriate power of 10
  9068:          bcc     @AddPowerOf10                   ; no overflow --> add again
  9069:  
  9070:          ; there was an overflow, add to high byte
  9071:          clc                                     ; ??? @@@WHY Superfluous?
  9072:          inc     T3
  9073:          bne     @AddPowerOf10                   ; uncond., as three digits cannot exceed 16 bit
  9074:          ; ---------------
  9075:  
  9076:  @ConversionDone:
  9077:  
  9078:          ; store values for parameter x at FILTRK+x (HIGH) and FILSEC+x (LOW)
  9079:          pha
  9080:          ldx     F1CNT
  9081:          lda     T3
  9082:          sta     FILTRK,x
  9083:          pla
  9084:          sta     FILSEC,x
  9085:          rts
  9086:          ; -------------------
  9087:  
  9088:  @PowersOf10:
  9089:          .byte   1, 10, 100
  9090:  
  9091:  
  9092:  cmd_block_free:
  9093:          jsr     LCDF5
  9094:          jsr     LEF5F
  9095:          jmp     CommandEnd
  9096:          lda     #$01
  9097:          sta     WBAM
  9098:  
  9099:  
  9100:  cmd_block_allocate:
  9101:          jsr     LCDF5
  9102:          lda     SECTOR
  9103:          pha
  9104:          jsr     LF1FA
  9105:          beq     @LCD19
  9106:          pla
  9107:          cmp     SECTOR
  9108:          bne     @LCD2C
  9109:          jsr     LEF90
  9110:          jmp     CommandEnd
  9111:  @LCD19:
  9112:          pla
  9113:  @LCD1A:
  9114:          lda     #$00
  9115:          sta     SECTOR
  9116:          inc     TRACK
  9117:          lda     TRACK
  9118:          cmp     MAXTRACK_ADJUSTED
  9119:          bcs     Error65
  9120:          jsr     LF1FA
  9121:          beq     @LCD1A
  9122:  @LCD2C:
  9123:          lda     #ERRORCODE_65_NO_BLOCK
  9124:          jsr     LE645
  9125:  
  9126:  Error65:
  9127:          lda     #ERRORCODE_65_NO_BLOCK
  9128:          jsr     GenerateErrorMessage
  9129:  LCD36:
  9130:          jsr     LCDF2
  9131:          jmp     LD460
  9132:          ; -------------------
  9133:  
  9134:  LCD3C:
  9135:          jsr     LD12F
  9136:          lda     (BUFTAB0,x)
  9137:          rts
  9138:          ; ----------------
  9139:  
  9140:  LCD42:
  9141:          jsr     LCD36
  9142:          lda     #$00
  9143:          jsr     LD4C8
  9144:          jsr     LCD3C
  9145:          sta     LSTCHR,y
  9146:          lda     #$89
  9147:          sta     CHNRDY,y
  9148:          rts
  9149:  
  9150:  cmd_block_read:
  9151:          jsr     LCD42
  9152:          jsr     LD3EC
  9153:          jmp     CommandEnd
  9154:  
  9155:  CMD_U1:
  9156:          jsr     ReadUpTo4NumericalParameter
  9157:          jsr     LCD42
  9158:          lda     LSTCHR,y
  9159:          sta     L023E,y
  9160:          lda     #$FF
  9161:          sta     LSTCHR,y
  9162:          jmp     CommandEnd
  9163:  
  9164:  cmd_block_write:
  9165:          jsr     LCDF2
  9166:          jsr     LD4E8
  9167:          tay
  9168:          dey
  9169:          cmp     #$02
  9170:          bcs     @LCD81
  9171:          ldy     #$01
  9172:  @LCD81:
  9173:          lda     #$00
  9174:          jsr     LD4C8
  9175:          tya
  9176:          jsr     LCFF1
  9177:          txa
  9178:          pha
  9179:          jsr     LD464
  9180:          pla
  9181:          tax
  9182:  .if CompileDrive >= DRIVE_1570
  9183:          jsr     LFFAE
  9184:  .elseif CompileDrive >= DRIVE_1541C_02
  9185:          jsr     LC024
  9186:  .else
  9187:          jsr     LD3EE
  9188:  .endif
  9189:          jmp     CommandEnd
  9190:  
  9191:  CMD_U2:
  9192:          jsr     ReadUpTo4NumericalParameter
  9193:          jsr     LCDF2
  9194:          jsr     LD464
  9195:          jmp     CommandEnd
  9196:          ; ---------------
  9197:  
  9198:  cmd_block_execute:
  9199:          jsr     NoOp
  9200:          jsr     LCD36
  9201:  
  9202:          lda     #$00                                    ; low byte of buffer address (always 0)
  9203:          sta     T0
  9204:          ldx     JOBNUM                                  ; the buffer number which to execute
  9205:          lda     TableHighBytesOfBuffers,x               ; high byte of buffer address
  9206:          sta     T0+1
  9207:          jsr     @Execute
  9208:          jmp     CommandEnd
  9209:          ; ----------------
  9210:  
  9211:  @Execute:
  9212:          jmp     (T0)
  9213:          ; ----------------
  9214:  
  9215:  cmd_buffer_pointer:
  9216:          jsr     LCDD2
  9217:          lda     JOBNUM
  9218:          asl     a
  9219:          tax
  9220:          lda     FILSEC + 1
  9221:          sta     BUFTAB0,x
  9222:          jsr     LD12F
  9223:          jsr     LD3EE
  9224:          jmp     CommandEnd
  9225:          ; ------------------
  9226:  
  9227:  LCDD2:
  9228:          ldx     F1PTR
  9229:          inc     F1PTR
  9230:          lda     FILSEC,x
  9231:          tay
  9232:          dey
  9233:          dey
  9234:          cpy     #$0C
  9235:          bcc     @LCDE5
  9236:  @Err70NoChannel:
  9237:          lda     #ERRORCODE_70_NO_CHANNEL
  9238:          jmp     GenerateErrorMessage
  9239:          ; ----------------
  9240:  
  9241:  @LCDE5:
  9242:          sta     SA
  9243:          jsr     LD0EB
  9244:          bcs     @Err70NoChannel
  9245:          jsr     LDF93
  9246:          sta     JOBNUM
  9247:          rts
  9248:          ; ---------------
  9249:  
  9250:  LCDF2:
  9251:          jsr     LCDD2
  9252:  LCDF5:
  9253:          ldx     F1PTR
  9254:          lda     FILSEC,x
  9255:          and     #$01
  9256:          sta     DRVNUM
  9257:          lda     FILSEC + 2,x
  9258:          sta     SECTOR
  9259:          lda     FILSEC + 1,x
  9260:          sta     TRACK
  9261:          jsr     LD55F
  9262:          jmp     LC100
  9263:          ; --------------------
  9264:  
  9265:  LCE0E:
  9266:          jsr     @LCE2C
  9267:          jsr     LCE6E
  9268:          lda     ACCUM + 1
  9269:          sta     RELPTR
  9270:          jsr     LCE71
  9271:          inc     RELPTR
  9272:          inc     RELPTR
  9273:          lda     RESULT
  9274:          sta     SSNUM
  9275:          lda     ACCUM + 1
  9276:          asl     a
  9277:          clc
  9278:          adc     #$10
  9279:          sta     SSIND
  9280:          rts
  9281:          ; --------------------
  9282:  
  9283:  @LCE2C:
  9284:          jsr     LCED9
  9285:          sta     ACCUM + 3
  9286:          ldx     LINDX
  9287:          lda     RECL,x
  9288:          sta     ACCUM + 1
  9289:          lda     RECH,x
  9290:          sta     ACCUM + 2
  9291:          bne     @LCE41
  9292:          lda     ACCUM + 1
  9293:          beq     @LCE4C
  9294:  @LCE41:
  9295:          lda     ACCUM + 1
  9296:          sec
  9297:          sbc     #$01
  9298:          sta     ACCUM + 1
  9299:          bcs     @LCE4C
  9300:          dec     ACCUM + 2
  9301:  @LCE4C:
  9302:          lda     RS,x
  9303:          sta     T0
  9304:  @LCE50:
  9305:          lsr     T0
  9306:          bcc     @LCE57
  9307:          jsr     LCEED
  9308:  @LCE57:
  9309:          jsr     LCEE5
  9310:          lda     T0
  9311:          bne     @LCE50
  9312:          lda     RECPTR
  9313:          clc
  9314:          adc     RESULT
  9315:          sta     RESULT
  9316:          bcc     @LCE6D
  9317:          inc     RESULT + 1
  9318:          bne     @LCE6D
  9319:          inc     RESULT + 2
  9320:  @LCE6D:
  9321:          rts
  9322:          ; -------------------
  9323:  
  9324:  LCE6E:
  9325:          lda     #$FE
  9326:          .byte   ASM_BIT3
  9327:  LCE71:
  9328:          lda     #$78
  9329:          sta     T0
  9330:          ldx     #$03
  9331:  @LCE77:
  9332:          lda     ACCUM,x
  9333:          pha
  9334:          lda     R4,x
  9335:          sta     ACCUM,x
  9336:          pla
  9337:          sta     R4,x
  9338:          dex
  9339:          bne     @LCE77
  9340:          jsr     LCED9
  9341:  @LCE87:
  9342:          ldx     #$00
  9343:  @LCE89:
  9344:          lda     ACCUM + 1,x
  9345:          sta     ACCUM,x
  9346:          inx
  9347:          cpx     #$04
  9348:          bcc     @LCE89
  9349:          lda     #$00
  9350:          sta     ACCUM + 3
  9351:          bit     T0
  9352:          bmi     @LCEA3
  9353:          asl     ACCUM
  9354:          php
  9355:          lsr     ACCUM
  9356:          plp
  9357:          jsr     LCEE6
  9358:  @LCEA3:
  9359:          jsr     LCEED
  9360:          jsr     LCEE5
  9361:          bit     T0
  9362:          bmi     @LCEB0
  9363:          jsr     LCEE2
  9364:  @LCEB0:
  9365:          lda     ACCUM
  9366:          clc
  9367:          adc     ACCUM + 1
  9368:          sta     ACCUM + 1
  9369:          bcc     @LCEBF
  9370:          inc     ACCUM + 2
  9371:          bne     @LCEBF
  9372:          inc     ACCUM + 3
  9373:  @LCEBF:
  9374:          lda     ACCUM + 3
  9375:          ora     ACCUM + 2
  9376:          bne     @LCE87
  9377:          lda     ACCUM + 1
  9378:          sec
  9379:          sbc     T0
  9380:          bcc     @LCED8
  9381:          inc     RESULT
  9382:          bne     @LCED6
  9383:          inc     RESULT + 1
  9384:          bne     @LCED6
  9385:          inc     RESULT + 2
  9386:  @LCED6:
  9387:          sta     ACCUM + 1
  9388:  @LCED8:
  9389:          rts
  9390:          ; -----------------
  9391:  
  9392:  LCED9:
  9393:          lda     #$00
  9394:          sta     RESULT
  9395:          sta     RESULT + 1
  9396:          sta     RESULT + 2
  9397:          rts
  9398:          ; -----------------
  9399:  
  9400:  LCEE2:
  9401:          jsr     LCEE5
  9402:  LCEE5:
  9403:          clc
  9404:  LCEE6:
  9405:          rol     ACCUM + 1
  9406:          rol     ACCUM + 2
  9407:          rol     ACCUM + 3
  9408:          rts
  9409:          ; -----------------
  9410:  
  9411:  LCEED:
  9412:          clc
  9413:          ldx     #$FD
  9414:  @LCEF0:
  9415:          lda     RESULT + 3,x
  9416:          adc     ACCUM + 4,x
  9417:          sta     RESULT + 3,x
  9418:          inx
  9419:          bne     @LCEF0
  9420:          rts
  9421:  
  9422:  LCEFA:
  9423:          ldx     #$00
  9424:  :
  9425:          txa
  9426:          sta     LRUTBL,x
  9427:          inx
  9428:          cpx     #$04
  9429:  bne     :-
  9430:          lda     #$06
  9431:          sta     LRUTBL,x
  9432:          rts
  9433:          ; ---------------
  9434:  
  9435:  LCF09:
  9436:          ldy     #$04
  9437:          ldx     LINDX
  9438:  @LCF0D:
  9439:          lda     LRUTBL,y
  9440:          stx     LRUTBL,y
  9441:          cmp     LINDX
  9442:          beq     @Rts
  9443:          dey
  9444:          bmi     LCEFA
  9445:          tax
  9446:          jmp     @LCF0D
  9447:          ; ----------------
  9448:  
  9449:  @Rts:
  9450:          rts
  9451:          ; ----------------
  9452:  
  9453:  LCF1E:
  9454:          jsr     LCF09
  9455:          jsr     LDFB7
  9456:          bne     @LCF6C
  9457:          jsr     LD1D3
  9458:          jsr     LD28E
  9459:          bmi     Error70_2
  9460:          jsr     LDFC2
  9461:          lda     TRACK
  9462:          pha
  9463:          lda     SECTOR
  9464:          pha
  9465:          lda     #$01
  9466:          jsr     LD4F6
  9467:          sta     SECTOR
  9468:          lda     #$00
  9469:          jsr     LD4F6
  9470:          sta     TRACK
  9471:          beq     @LCF66
  9472:          jsr     LD125
  9473:          beq     @LCF57
  9474:          jsr     LDDAB
  9475:          bne     @LCF57
  9476:          jsr     LCF8C
  9477:          jmp     @LCF5D
  9478:          ; ----------------
  9479:  
  9480:  @LCF57:
  9481:          jsr     LCF8C
  9482:          jsr     LDE57
  9483:  @LCF5D:
  9484:          pla
  9485:          sta     SECTOR
  9486:          pla
  9487:          sta     TRACK
  9488:          jmp     @LCF6F
  9489:          ; ----------------
  9490:  
  9491:  @LCF66:
  9492:          pla
  9493:          sta     SECTOR
  9494:          pla
  9495:          sta     TRACK
  9496:  @LCF6C:
  9497:          jsr     LCF8C
  9498:  @LCF6F:
  9499:          jsr     LDF93
  9500:          tax
  9501:          jmp     LD599
  9502:          ; ----------------
  9503:  
  9504:  Error70_2:
  9505:          lda     #ERRORCODE_70_NO_CHANNEL
  9506:          jmp     GenerateErrorMessage
  9507:          ; ----------------
  9508:  
  9509:  LCF7B:
  9510:          jsr     LCF09
  9511:          jsr     LDFB7
  9512:          bne     @Rts
  9513:          jsr     LD28E
  9514:          bmi     Error70_2
  9515:          jsr     LDFC2
  9516:  @Rts:
  9517:          rts
  9518:          ; ----------------
  9519:  
  9520:  LCF8C:
  9521:          ldx     LINDX
  9522:          lda     BUF0,x
  9523:          eor     #$80
  9524:          sta     BUF0,x
  9525:          lda     BUF1,x
  9526:          eor     #$80
  9527:          sta     BUF1,x
  9528:          rts
  9529:          ; ----------------
  9530:  
  9531:  LCF9B:
  9532:          ldx     #$12
  9533:          stx     SA
  9534:          jsr     LD107
  9535:          jsr     LC100
  9536:          jsr     LD125
  9537:          bcc     @LCFAF
  9538:          lda     #$20
  9539:          jsr     LDD9D
  9540:  @LCFAF:
  9541:          lda     SA
  9542:          cmp     #$0F
  9543:          beq     LCFD8
  9544:          bne     LCFBF
  9545:          ; ----------------
  9546:  
  9547:  LCFB7:
  9548:          lda     ORGSA
  9549:          and     #$8F
  9550:          cmp     #$0F
  9551:          bcs     LCFD8
  9552:  LCFBF:
  9553:          jsr     LD125
  9554:          bcs     @LCFC9
  9555:          lda     DATA
  9556:          jmp     LD19D
  9557:          ; ----------------
  9558:  
  9559:  @LCFC9:
  9560:          bne     @LCFCE
  9561:          jmp     LE0AB
  9562:          ; ----------------
  9563:  
  9564:  @LCFCE:
  9565:          lda     DATA
  9566:          jsr     LCFF1
  9567:          ldy     LINDX
  9568:          jmp     LD3EE
  9569:          ; ----------------
  9570:  
  9571:  LCFD8:
  9572:          lda     #$04
  9573:          sta     LINDX
  9574:          jsr     LD4E8
  9575:          cmp     #$2A
  9576:          beq     @LCFE8
  9577:          lda     DATA
  9578:          jsr     LCFF1
  9579:  @LCFE8:
  9580:          lda     EIOFLG
  9581:          beq     @LCFED
  9582:          rts
  9583:          ; ----------------
  9584:  
  9585:  @LCFED:
  9586:          inc     CMDWAT
  9587:          rts
  9588:          ; ----------------
  9589:  
  9590:  
  9591:  LCFF1:
  9592:          pha
  9593:          jsr     LDF93
  9594:          bpl     LCFFD
  9595:          pla
  9596:          lda     #ERRORCODE_61_FILE_NOT_OPEN
  9597:          jmp     GenerateErrorMessage
  9598:          ; ----------------
  9599:  
  9600:  LCFFD:
  9601:          asl     a
  9602:          tax
  9603:          pla
  9604:          sta     (BUFTAB0,x)
  9605:          inc     BUFTAB0,x
  9606:          rts
  9607:          ; ----------------
  9608:  
  9609:  cmd_init:
  9610:          jsr     LC1D1
  9611:  .if CompileDrive >= DRIVE_1571_05
  9612:          jsr     LABA6
  9613:  .else
  9614:          jsr     LD042
  9615:  .endif
  9616:          jmp     CommandEnd
  9617:          ; ----------------
  9618:  
  9619:  LD00E:
  9620:          jsr     LF10F
  9621:          tay
  9622:          ldx     BUF0,y
  9623:          cpx     #$FF
  9624:          bne     @LD02C
  9625:          pha
  9626:          jsr     LD28E
  9627:          tax
  9628:          bpl     @LD024
  9629:          lda     #ERRORCODE_70_NO_CHANNEL
  9630:  .if CompileDrive >= DRIVE_1571_05
  9631:          jsr     LE645
  9632:  .else
  9633:          jsr     LE648
  9634:  .endif
  9635:  
  9636:  @LD024:
  9637:          pla
  9638:          tay
  9639:          txa
  9640:          ora     #$80
  9641:          sta     BUF0,y
  9642:  @LD02C:
  9643:          txa
  9644:          and     #$0F
  9645:          sta     JOBNUM
  9646:          ldx     #$00
  9647:          stx     SECTOR
  9648:          ldx     LFE85
  9649:          stx     TRACK
  9650:          jsr     LD6D3
  9651:          lda     #$B0
  9652:  
  9653:  .if CompileDrive >= DRIVE_1571
  9654:          jmp     LA6E5
  9655:  .else
  9656:          jmp     LD58C
  9657:  .endif
  9658:          ; ----------------
  9659:  
  9660:  LD042:
  9661:          jsr     LF0D1
  9662:          jsr     LD313
  9663:          jsr     LD00E
  9664:          ldx     DRVNUM
  9665:          lda     #$00
  9666:          sta     MDIRTY,x
  9667:          txa
  9668:          asl     a
  9669:          tax
  9670:          lda     HEADER
  9671:          sta     DiskID0,x
  9672:          lda     HEADER + 1
  9673:          sta     DiskID0 + 1,x
  9674:  .if CompileDrive >= DRIVE_1571_05
  9675:          jsr     LA667_PATCH
  9676:  .elseif CompileDrive >= DRIVE_1571
  9677:          jsr     LA667
  9678:  .else
  9679:          jsr     LD586
  9680:  .endif
  9681:          lda     JOBNUM
  9682:          asl     a
  9683:          tax
  9684:          lda     #$02
  9685:          sta     BUFTAB0,x
  9686:          lda     (BUFTAB0,x)
  9687:          ldx     DRVNUM
  9688:          sta     DSKVER,x
  9689:          lda     #$00
  9690:  .if CompileDrive >= DRIVE_1570
  9691:          jmp     LAA1D
  9692:          FillNOP 1
  9693:  .elseif CompileDrive >= DRIVE_1541C_02
  9694:          jmp     LFFC7
  9695:          FillNOP 1
  9696:  .else
  9697:          sta     WPSW,x
  9698:          sta     NODRV,x
  9699:  .endif
  9700:  LD075:
  9701:          jsr     LEF3A
  9702:          ldy     #$04
  9703:          lda     #$00
  9704:          tax
  9705:  LD07D:
  9706:          clc
  9707:          adc     (BMPNT),y
  9708:          bcc     LD083
  9709:          inx
  9710:  LD083:
  9711:          iny
  9712:          iny
  9713:          iny
  9714:          iny
  9715:          cpy     #$48
  9716:          beq     LD083
  9717:          cpy     #$90
  9718:          bne     LD07D
  9719:          pha
  9720:          txa
  9721:          ldx     DRVNUM
  9722:          sta     NDBH,x
  9723:          pla
  9724:  .if CompileDrive >= DRIVE_1571
  9725:          jmp     LA951
  9726:  .else
  9727:          sta     NDBL,x
  9728:  .endif
  9729:          rts
  9730:  LD09B:
  9731:          jsr     LD6D0
  9732:          jsr     LD0C3
  9733:          jsr     LD599
  9734:          jsr     LD137
  9735:          sta     TRACK
  9736:          jsr     LD137
  9737:          sta     SECTOR
  9738:          rts
  9739:  LD0AF:
  9740:          jsr     LD09B
  9741:          lda     TRACK
  9742:          bne     LD0B7
  9743:          rts
  9744:  LD0B7:
  9745:          jsr     LCF1E
  9746:          jsr     LD6D0
  9747:          jsr     LD0C3
  9748:          jmp     LCF1E
  9749:  LD0C3:
  9750:          lda     #$80
  9751:          bne     LD0C9
  9752:  LD0C7:
  9753:          lda     #$90
  9754:  LD0C9:
  9755:          sta     CMD
  9756:          jsr     LDF93
  9757:          tax
  9758:          jsr     LD506
  9759:          txa
  9760:          pha
  9761:          asl     a
  9762:          tax
  9763:          lda     #$00
  9764:          sta     BUFTAB0,x
  9765:          jsr     LD125
  9766:          cmp     #$04
  9767:          bcs     LD0E8
  9768:          inc     RECL,x
  9769:          bne     LD0E8
  9770:          inc     RECH,x
  9771:  LD0E8:
  9772:          pla
  9773:          tax
  9774:          rts
  9775:  LD0EB:
  9776:          lda     SA
  9777:          cmp     #$13
  9778:          bcc     LD0F3
  9779:          and     #$0F
  9780:  LD0F3:
  9781:          cmp     #$0F
  9782:          bne     LD0F9
  9783:          lda     #$10
  9784:  LD0F9:
  9785:          tax
  9786:          sec
  9787:          lda     LINTAB,x
  9788:          bmi     LD106
  9789:          and     #$0F
  9790:          sta     LINDX
  9791:          tax
  9792:          clc
  9793:  LD106:
  9794:          rts
  9795:  LD107:
  9796:          lda     SA
  9797:          cmp     #$13
  9798:          bcc     LD10F
  9799:          and     #$0F
  9800:  LD10F:
  9801:          tax
  9802:          lda     LINTAB,x
  9803:          tay
  9804:          asl     a
  9805:          bcc     LD121
  9806:          bmi     LD123
  9807:  LD119:
  9808:          tya
  9809:          and     #$0F
  9810:          sta     LINDX
  9811:          tax
  9812:          clc
  9813:          rts
  9814:  LD121:
  9815:          bmi     LD119
  9816:  LD123:
  9817:          sec
  9818:          rts
  9819:  LD125:
  9820:          ldx     LINDX
  9821:          lda     FILTYP,x
  9822:          lsr     a
  9823:          and     #$07
  9824:          cmp     #$04
  9825:          rts
  9826:  LD12F:
  9827:          jsr     LDF93
  9828:          asl     a
  9829:          tax
  9830:          ldy     LINDX
  9831:          rts
  9832:  LD137:
  9833:          jsr     LD12F
  9834:          lda     LSTCHR,y
  9835:          beq     LD151
  9836:          lda     (BUFTAB0,x)
  9837:          pha
  9838:          lda     BUFTAB0,x
  9839:          cmp     LSTCHR,y
  9840:          bne     LD14D
  9841:          lda     #$FF
  9842:          sta     BUFTAB0,x
  9843:  LD14D:
  9844:          pla
  9845:          inc     BUFTAB0,x
  9846:          rts
  9847:  LD151:
  9848:          lda     (BUFTAB0,x)
  9849:          inc     BUFTAB0,x
  9850:          rts
  9851:  LD156:
  9852:          jsr     LD137
  9853:          bne     LD191
  9854:          sta     DATA
  9855:          lda     LSTCHR,y
  9856:          beq     LD16A
  9857:          lda     #$80
  9858:          sta     CHNRDY,y
  9859:          lda     DATA
  9860:          rts
  9861:  LD16A:
  9862:          jsr     LCF1E
  9863:          lda     #$00
  9864:          jsr     LD4C8
  9865:          jsr     LD137
  9866:          cmp     #$00
  9867:          beq     LD192
  9868:          sta     TRACK
  9869:          jsr     LD137
  9870:          sta     SECTOR
  9871:          jsr     LCF1E
  9872:          jsr     LD1D3
  9873:          jsr     LD6D0
  9874:          jsr     LD0C3
  9875:          jsr     LCF1E
  9876:          lda     DATA
  9877:  LD191:
  9878:          rts
  9879:  LD192:
  9880:          jsr     LD137
  9881:          ldy     LINDX
  9882:          sta     LSTCHR,y
  9883:          lda     DATA
  9884:          rts
  9885:  LD19D:
  9886:          jsr     LCFF1
  9887:          beq     LD1A3
  9888:          rts
  9889:  LD1A3:
  9890:          jsr     LD1D3
  9891:          jsr     LF11E
  9892:          lda     #$00
  9893:          jsr     LD4C8
  9894:          lda     TRACK
  9895:          jsr     LCFF1
  9896:          lda     SECTOR
  9897:          jsr     LCFF1
  9898:          jsr     LD0C7
  9899:          jsr     LCF1E
  9900:          jsr     LD6D0
  9901:          lda     #$02
  9902:          jmp     LD4C8
  9903:  LD1C6:
  9904:          sta     T0
  9905:          jsr     LD4E8
  9906:          clc
  9907:          adc     T0
  9908:          sta     BUFTAB0,x
  9909:          sta     DIRBUF
  9910:          rts
  9911:  LD1D3:
  9912:          jsr     LDF93
  9913:          tax
  9914:          lda     LSTJOB,x
  9915:          and     #$01
  9916:          sta     DRVNUM
  9917:          rts
  9918:  LD1DF:
  9919:          sec
  9920:          bcs     LD1E3
  9921:  LD1E2:
  9922:          clc
  9923:  LD1E3:
  9924:          php
  9925:          sta     T0
  9926:          jsr     LD227
  9927:          jsr     LD37F
  9928:          sta     LINDX
  9929:          ldx     SA
  9930:          plp
  9931:          bcc     LD1F5
  9932:          ora     #$80
  9933:  LD1F5:
  9934:          sta     LINTAB,x
  9935:          and     #$3F
  9936:          tay
  9937:          lda     #$FF
  9938:          sta     BUF0,y
  9939:          sta     BUF1,y
  9940:          sta     SS,y
  9941:          dec     T0
  9942:          bmi     LD226
  9943:          jsr     LD28E
  9944:          bpl     LD217
  9945:  LD20F:
  9946:          jsr     LD25A
  9947:          lda     #ERRORCODE_70_NO_CHANNEL
  9948:          jmp     GenerateErrorMessage
  9949:          ; ----------------
  9950:  
  9951:  LD217:
  9952:          sta     BUF0,y
  9953:          dec     T0
  9954:          bmi     LD226
  9955:          jsr     LD28E
  9956:          bmi     LD20F
  9957:          sta     BUF1,y
  9958:  LD226:
  9959:          rts
  9960:  LD227:
  9961:          lda     SA
  9962:          cmp     #$0F
  9963:          bne     LD22E
  9964:          rts
  9965:  LD22E:
  9966:          ldx     SA
  9967:          lda     LINTAB,x
  9968:          cmp     #$FF
  9969:          beq     @LD259
  9970:          and     #$3F
  9971:          sta     LINDX
  9972:          lda     #$FF
  9973:          sta     LINTAB,x
  9974:          ldx     LINDX
  9975:          lda     #$00
  9976:          sta     CHNRDY,x
  9977:          jsr     LD25A
  9978:          ldx     LINDX
  9979:          lda     #$01
  9980:  @LD24D:
  9981:          dex
  9982:          bmi     @LD253
  9983:          asl     a
  9984:          bne     @LD24D
  9985:  @LD253:
  9986:          ora     LINUSE
  9987:          sta     LINUSE
  9988:  @LD259:
  9989:          rts
  9990:          ; ----------
  9991:  
  9992:  LD25A:
  9993:          ldx     LINDX
  9994:          lda     BUF0,x
  9995:          cmp     #$FF
  9996:          beq     @LD26B
  9997:          pha
  9998:          lda     #$FF
  9999:          sta     BUF0,x
 10000:          pla
 10001:          jsr     LD2F3
 10002:  @LD26B:
 10003:          ldx     LINDX
 10004:          lda     BUF1,x
 10005:          cmp     #$FF
 10006:          beq     @LD27C
 10007:          pha
 10008:          lda     #$FF
 10009:          sta     BUF1,x
 10010:          pla
 10011:          jsr     LD2F3
 10012:  @LD27C:
 10013:          ldx     LINDX
 10014:          lda     SS,x
 10015:          cmp     #$FF
 10016:          beq     @LD28D
 10017:          pha
 10018:          lda     #$FF
 10019:          sta     SS,x
 10020:          pla
 10021:          jsr     LD2F3
 10022:  @LD28D:
 10023:          rts
 10024:          ; ---------
 10025:  
 10026:  LD28E:
 10027:          tya
 10028:          pha
 10029:          ldy     #$01
 10030:          jsr     LD2BA
 10031:          bpl     LD2A3
 10032:          dey
 10033:          jsr     LD2BA
 10034:          bpl     LD2A3
 10035:          jsr     LD339
 10036:          tax
 10037:          bmi     LD2B6
 10038:  LD2A3:
 10039:          lda     JOBS0,x
 10040:          bmi     LD2A3
 10041:          lda     DRVNUM
 10042:          sta     JOBS0,x
 10043:          sta     LSTJOB,x
 10044:          txa
 10045:          asl     a
 10046:          tay
 10047:          lda     #$02
 10048:          sta     BUFTAB0,y
 10049:  LD2B6:
 10050:          pla
 10051:          tay
 10052:          txa
 10053:          rts
 10054:  LD2BA:
 10055:          ldx     #$07
 10056:  LD2BC:
 10057:          lda     BUFUSE,y
 10058:          and     LEFE9,x
 10059:          beq     LD2C8
 10060:          dex
 10061:          bpl     LD2BC
 10062:          rts
 10063:  LD2C8:
 10064:          lda     BUFUSE,y
 10065:          eor     LEFE9,x
 10066:          sta     BUFUSE,y
 10067:          txa
 10068:          dey
 10069:          bmi     LD2D8
 10070:          clc
 10071:          adc     #$08
 10072:  LD2D8:
 10073:          tax
 10074:  LD2D9:
 10075:          rts
 10076:  LD2DA:
 10077:          ldx     LINDX
 10078:          lda     BUF0,x
 10079:          bmi     LD2E9
 10080:          txa
 10081:          clc
 10082:          adc     #$07
 10083:          tax
 10084:          lda     BUF0,x
 10085:          bpl     LD2D9
 10086:  LD2E9:
 10087:          cmp     #$FF
 10088:          beq     LD2D9
 10089:          pha
 10090:          lda     #$FF
 10091:          sta     BUF0,x
 10092:          pla
 10093:  
 10094:  LD2F3:
 10095:          and     #$0F
 10096:          tay
 10097:          iny
 10098:          ldx     #$10
 10099:  LD2F9:
 10100:          ror     BUFUSE + 1
 10101:          ror     BUFUSE
 10102:          dey
 10103:          bne     LD303
 10104:          clc
 10105:  LD303:
 10106:          dex
 10107:          bpl     LD2F9
 10108:          rts
 10109:  LD307:
 10110:          lda     #$0E
 10111:          sta     SA
 10112:  LD30B:
 10113:          jsr     LD227
 10114:          dec     SA
 10115:          bne     LD30B
 10116:          rts
 10117:  
 10118:  LD313:
 10119:          lda     #$0E
 10120:          sta     SA
 10121:  LD317:
 10122:          ldx     SA
 10123:          lda     LINTAB,x
 10124:          cmp     #$FF
 10125:          beq     LD334
 10126:          and     #$3F
 10127:          sta     LINDX
 10128:          jsr     LDF93
 10129:          tax
 10130:          lda     LSTJOB,x
 10131:          and     #$01
 10132:          cmp     DRVNUM
 10133:          bne     LD334
 10134:          jsr     LD227
 10135:  LD334:
 10136:          dec     SA
 10137:          bpl     LD317
 10138:          rts
 10139:  LD339:
 10140:          lda     T0
 10141:          pha
 10142:          ldy     #$00
 10143:  LD33E:
 10144:          ldx     LRUTBL,y
 10145:          lda     BUF0,x
 10146:          bpl     LD348
 10147:          cmp     #$FF
 10148:          bne     LD35E
 10149:  LD348:
 10150:          txa
 10151:          clc
 10152:          adc     #$07
 10153:          tax
 10154:          lda     BUF0,x
 10155:          bpl     LD355
 10156:          cmp     #$FF
 10157:          bne     LD35E
 10158:  LD355:
 10159:          iny
 10160:          cpy     #$05
 10161:          bcc     LD33E
 10162:          ldx     #$FF
 10163:          bne     LD37A
 10164:  LD35E:
 10165:          stx     T0
 10166:          and     #$3F
 10167:          tax
 10168:  LD363:
 10169:          lda     JOBS0,x
 10170:          bmi     LD363
 10171:  .if CompileDrive >= DRIVE_1571_05
 10172:          jmp     LAA3F
 10173:          FillNOP 1
 10174:  .elseif CompileDrive >= DRIVE_1571
 10175:          cmp     #$02
 10176:          bcc     LD373
 10177:  .elseif CompileDrive >= DRIVE_1570
 10178:          jmp     LAA3F
 10179:          FillNOP 1
 10180:  .elseif CompileDrive >= DRIVE_1541C_02
 10181:          jmp     LFF91
 10182:          FillNOP 1
 10183:  .else
 10184:          cmp     #$02
 10185:          bcc     LD373
 10186:  .endif
 10187:  LD36B:
 10188:          ldx     T0
 10189:          cpx     #$07
 10190:          bcc     LD348
 10191:          bcs     LD355
 10192:  LD373:
 10193:          ldy     T0
 10194:          lda     #$FF
 10195:          sta     BUF0,y
 10196:  LD37A:
 10197:          pla
 10198:          sta     T0
 10199:          txa
 10200:          rts
 10201:  LD37F:
 10202:          ldy     #$00
 10203:          lda     #$01
 10204:  LD383:
 10205:          bit     LINUSE
 10206:          bne     LD391
 10207:          iny
 10208:          asl     a
 10209:          bne     LD383
 10210:          lda     #ERRORCODE_70_NO_CHANNEL
 10211:          jmp     GenerateErrorMessage
 10212:          ; ----------------
 10213:  
 10214:  LD391:
 10215:          eor     #$FF
 10216:          and     LINUSE
 10217:          sta     LINUSE
 10218:          tya
 10219:          rts
 10220:  LD39B:
 10221:          jsr     LD0EB
 10222:          jsr     LC100
 10223:          jsr     LD3AA
 10224:          ldx     LINDX
 10225:          lda     L023E,x
 10226:          rts
 10227:  LD3AA:
 10228:          ldx     LINDX
 10229:          jsr     LD125
 10230:          bne     LD3B4
 10231:          jmp     LE120
 10232:  LD3B4:
 10233:          lda     SA
 10234:          cmp     #$0F
 10235:          beq     LD414
 10236:          lda     CHNRDY,x
 10237:          and     #$08
 10238:          bne     LD3D3
 10239:          jsr     LD125
 10240:          cmp     #$07
 10241:          bne     LD3CE
 10242:          lda     #$89
 10243:          sta     CHNRDY,x
 10244:          jmp     LD3DE
 10245:  LD3CE:
 10246:          lda     #$00
 10247:          sta     CHNRDY,x
 10248:          rts
 10249:  LD3D3:
 10250:          lda     SA
 10251:          beq     LD409
 10252:          jsr     LD125
 10253:          cmp     #$04
 10254:          bcc     LD400
 10255:  LD3DE:
 10256:          jsr     LD12F
 10257:          lda     BUFTAB0,x
 10258:          cmp     LSTCHR,y
 10259:          bne     LD3EC
 10260:          lda     #$00
 10261:          sta     BUFTAB0,x
 10262:  LD3EC:
 10263:          inc     BUFTAB0,x
 10264:  LD3EE:
 10265:          lda     (BUFTAB0,x)
 10266:          sta     L023E,y
 10267:          lda     BUFTAB0,x
 10268:          cmp     LSTCHR,y
 10269:          bne     LD3FF
 10270:          lda     #$81
 10271:          sta     CHNRDY,y
 10272:  LD3FF:
 10273:          rts
 10274:  LD400:
 10275:          jsr     LD156
 10276:  LD403:
 10277:          ldx     LINDX
 10278:          sta     L023E,x
 10279:          rts
 10280:  LD409:
 10281:          lda     DIRLST
 10282:          beq     LD400
 10283:          jsr     LED67
 10284:          jmp     LD403
 10285:  LD414:
 10286:          jsr     LD4E8
 10287:          cmp     #<(ERRBUF - 1)
 10288:          bne     LD433
 10289:          lda     DIRBUF + 1
 10290:          cmp     #>(ERRBUF - 1)
 10291:          bne     LD433
 10292:          lda     #$0D
 10293:          sta     DATA
 10294:          jsr     LC123
 10295:          lda     #ERRORCODE_00_OK
 10296:          jsr     SetErrorCodeNoTS
 10297:          dec     BUFTABERR
 10298:          lda     #$80
 10299:          bne     LD445
 10300:  LD433:
 10301:          jsr     LD137
 10302:          sta     DATA
 10303:          bne     LD443
 10304:  LD43A:
 10305:          lda     #<(ERRBUF - 1)
 10306:          jsr     LD4C8
 10307:          lda     #$02                    ; @@@TODO >(ERRBUF - 1)???
 10308:          sta     BUFTAB0 + 1,x
 10309:  LD443:
 10310:          lda     #$88
 10311:  LD445:
 10312:          sta     CHNRDY + 5
 10313:          lda     DATA
 10314:          sta     L0243
 10315:          rts
 10316:  LD44D:
 10317:          jsr     LDF93
 10318:          asl     a
 10319:          tax
 10320:          lda     #$00
 10321:          sta     BUFTAB0,x
 10322:          lda     (BUFTAB0,x)
 10323:          beq     LD45F
 10324:          dec     BUFTAB0,x
 10325:          jmp     LD156
 10326:  LD45F:
 10327:          rts
 10328:  LD460:
 10329:          lda     #$80
 10330:          bne     LD466
 10331:  LD464:
 10332:          lda     #$90
 10333:  LD466:
 10334:          ora     DRVNUM
 10335:          sta     CMD
 10336:          lda     JOBNUM
 10337:          jsr     LD6D3
 10338:          ldx     JOBNUM
 10339:          jmp     LD593
 10340:  LD475:
 10341:          lda     #$01
 10342:  LD477:
 10343:          sta     TYPE
 10344:          lda     #$11
 10345:          sta     SA
 10346:          jsr     LDC46
 10347:          lda     #$02
 10348:          jmp     LD4C8
 10349:  LD486:
 10350:          lda     #$12
 10351:          sta     SA
 10352:          jmp     LDCDA
 10353:  LD48D:
 10354:          jsr     LDE3B
 10355:          lda     #$01
 10356:          sta     T0
 10357:          lda     SECINC
 10358:          pha
 10359:          lda     #$03
 10360:          sta     SECINC
 10361:          jsr     LF12D
 10362:          pla
 10363:          sta     SECINC
 10364:          lda     #$00
 10365:          jsr     LD4C8
 10366:          lda     TRACK
 10367:          jsr     LCFF1
 10368:          lda     SECTOR
 10369:          jsr     LCFF1
 10370:          jsr     LD0C7
 10371:          jsr     LD599
 10372:          lda     #$00
 10373:          jsr     LD4C8
 10374:  LD4BB:
 10375:          jsr     LCFF1
 10376:          bne     LD4BB
 10377:          jsr     LCFF1
 10378:          lda     #$FF
 10379:          jmp     LCFF1
 10380:  LD4C8:
 10381:          sta     T0
 10382:          jsr     LDF93
 10383:          asl     a
 10384:          tax
 10385:          lda     BUFTAB0 + 1,x
 10386:          sta     DIRBUF + 1
 10387:          lda     T0
 10388:          sta     BUFTAB0,x
 10389:          sta     DIRBUF
 10390:          rts
 10391:  LD4DA:
 10392:          lda     #$11
 10393:          sta     SA
 10394:          jsr     LD227
 10395:          lda     #$12
 10396:          sta     SA
 10397:          jmp     LD227
 10398:          ; -------------
 10399:  LD4E8:
 10400:          jsr     LDF93
 10401:  LD4EB:
 10402:          asl     a
 10403:          tax
 10404:          lda     BUFTAB0 + 1,x
 10405:          sta     DIRBUF + 1
 10406:          lda     BUFTAB0,x
 10407:          sta     DIRBUF
 10408:          rts
 10409:  LD4F6:
 10410:          sta     T2
 10411:          jsr     LDF93
 10412:          tax
 10413:          lda     TableHighBytesOfBuffers,x
 10414:          sta     T3
 10415:          ldy     #$00
 10416:          lda     (T2),y
 10417:          rts
 10418:  LD506:
 10419:          lda     LSTJOB,x
 10420:          and     #$01
 10421:          ora     CMD
 10422:  LD50E:
 10423:          pha
 10424:          stx     JOBNUM
 10425:          txa
 10426:          asl     a
 10427:          tax
 10428:          lda     SECTOR0,x
 10429:          sta     CMD
 10430:          lda     TRACK0,x
 10431:          beq     LD54A
 10432:          cmp     MAXTRACK_ADJUSTED
 10433:          bcs     LD54A
 10434:          tax
 10435:          pla
 10436:          pha
 10437:          and     #$F0
 10438:          cmp     #$90
 10439:          bne     LD57A
 10440:          pla
 10441:          pha
 10442:          lsr     a
 10443:          bcs     LD535
 10444:          lda     DSKVER
 10445:          bcc     LD538
 10446:  LD535:
 10447:          lda     DSKVER + 1
 10448:  LD538:
 10449:          beq     LD53F
 10450:          cmp     LFED5
 10451:          bne     LD572
 10452:  LD53F:
 10453:          txa
 10454:          jsr     LF24B
 10455:          cmp     CMD
 10456:          beq     LD54A
 10457:          bcs     LD57A
 10458:  LD54A:
 10459:          jsr     LD552
 10460:  LD54D:
 10461:          lda     #ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR
 10462:          jmp     LE645
 10463:  LD552:
 10464:          lda     JOBNUM
 10465:          asl     a
 10466:          tax
 10467:          lda     TRACK0,x
 10468:          sta     TRACK
 10469:          lda     SECTOR0,x
 10470:          sta     SECTOR
 10471:          rts
 10472:  LD55F:
 10473:          lda     TRACK
 10474:          beq     LD54D
 10475:          cmp     MAXTRACK_ADJUSTED
 10476:          bcs     LD54D
 10477:          jsr     LF24B
 10478:          cmp     SECTOR
 10479:          beq     LD54D
 10480:          bcc     LD54D
 10481:          rts
 10482:  LD572:
 10483:          jsr     LD552
 10484:          lda     #ERRORCODE_73_IDENTIFY
 10485:          jmp     LE645
 10486:  LD57A:
 10487:          ldx     JOBNUM
 10488:          pla
 10489:          sta     CMD
 10490:          sta     JOBS0,x
 10491:          sta     LSTJOB,x
 10492:          rts
 10493:  LD586:
 10494:          lda     #$80
 10495:          bne     LD58C
 10496:  LD58A:
 10497:          lda     #$90
 10498:  LD58C:
 10499:          ora     DRVNUM
 10500:          ldx     JOBNUM
 10501:  LD590:
 10502:          sta     CMD
 10503:  LD593:
 10504:          lda     CMD
 10505:          jsr     LD50E
 10506:  LD599:
 10507:          jsr     LD5A6
 10508:          bcs     LD599
 10509:          pha
 10510:          lda     #$00
 10511:          sta     JOBRTN
 10512:          pla
 10513:          rts
 10514:  LD5A6:
 10515:          lda     JOBS0,x
 10516:          bmi     LD5C4
 10517:          cmp     #$02
 10518:          bcc     LD5C2
 10519:          cmp     #$08
 10520:          beq     LD5BA
 10521:          cmp     #$0B
 10522:          beq     LD5BA
 10523:          cmp     #$0F
 10524:          bne     LD5C6
 10525:  LD5BA:
 10526:          bit     JOBRTN
 10527:          bmi     LD5C2
 10528:          jmp     LD63F
 10529:  LD5C2:
 10530:          clc
 10531:          rts
 10532:  LD5C4:
 10533:          sec
 10534:          rts
 10535:  LD5C6:
 10536:          tya
 10537:          pha
 10538:          lda     DRVNUM
 10539:          pha
 10540:          lda     LSTJOB,x
 10541:          and     #$01
 10542:          sta     DRVNUM
 10543:          tay
 10544:          lda     DriveLEDMasks,y
 10545:          sta     ERLED
 10546:          jsr     LD6A6
 10547:          cmp     #$02
 10548:          bcs     LD5E3
 10549:          jmp     LD66D
 10550:  LD5E3:
 10551:          lda     LSTJOB,x
 10552:          and     #$F0
 10553:          pha
 10554:          cmp     #$90
 10555:          bne     LD5F4
 10556:          lda     DRVNUM
 10557:          ora     #$B8
 10558:          sta     LSTJOB,x
 10559:  LD5F4:
 10560:          bit     REVCNT
 10561:          bvs     LD631
 10562:          lda     #$00
 10563:          sta     EPTR
 10564:          sta     TOFF
 10565:  LD600:
 10566:          ldy     EPTR
 10567:          lda     TOFF
 10568:          sec
 10569:          sbc     LFEDB,y
 10570:          sta     TOFF
 10571:          lda     LFEDB,y
 10572:  .if CompileDrive >= DRIVE_1570
 10573:          jsr     LFFA1
 10574:  .elseif CompileDrive = DRIVE_1541C_02
 10575:          jsr     LFF84
 10576:  .else
 10577:          jsr     LD676
 10578:  .endif
 10579:          inc     EPTR
 10580:          jsr     LD6A6
 10581:          cmp     #$02
 10582:          bcc     LD625
 10583:          ldy     EPTR
 10584:          lda     LFEDB,y
 10585:          bne     LD600
 10586:  LD625:
 10587:          lda     TOFF
 10588:  .if CompileDrive >= DRIVE_1570
 10589:          jsr     LFFA6
 10590:  .elseif CompileDrive = DRIVE_1541C_02
 10591:          jsr     LFF89
 10592:  .else
 10593:          jsr     LD676
 10594:  .endif
 10595:          lda     JOBS0,x
 10596:          cmp     #$02
 10597:          bcc     LD65C
 10598:  LD631:
 10599:          bit     REVCNT
 10600:          bpl     LD644
 10601:  LD635:
 10602:          pla
 10603:          cmp     #$90
 10604:          bne     LD63F
 10605:          ora     DRVNUM
 10606:          sta     LSTJOB,x
 10607:  LD63F:
 10608:          lda     JOBS0,x
 10609:          jsr     LE60A
 10610:  LD644:
 10611:          pla
 10612:          bit     JOBRTN
 10613:          bmi     LD66D
 10614:          pha
 10615:          lda     #$C0
 10616:          ora     DRVNUM
 10617:          sta     JOBS0,x
 10618:  LD651:
 10619:  .if CompileDrive >= DRIVE_1570
 10620:          jsr     L9FB6
 10621:          FillNOP 1
 10622:  .else
 10623:          lda     JOBS0,x
 10624:          bmi     LD651
 10625:  .endif
 10626:          jsr     LD6A6
 10627:          cmp     #$02
 10628:          bcs     LD635
 10629:  LD65C:
 10630:          pla
 10631:          cmp     #$90
 10632:          bne     LD66D
 10633:          ora     DRVNUM
 10634:          sta     LSTJOB,x
 10635:          jsr     LD6A6
 10636:          cmp     #$02
 10637:          bcs     LD63F
 10638:  LD66D:
 10639:          pla
 10640:          sta     DRVNUM
 10641:          pla
 10642:          tay
 10643:          lda     JOBS0,x
 10644:          clc
 10645:          rts
 10646:  LD676:
 10647:          cmp     #$00
 10648:          beq     LD692
 10649:          bmi     LD688
 10650:  LD67C:
 10651:          ldy     #$01
 10652:          jsr     LD693
 10653:          sec
 10654:          sbc     #$01
 10655:          bne     LD67C
 10656:          beq     LD692
 10657:  LD688:
 10658:          ldy     #$FF
 10659:          jsr     LD693
 10660:          clc
 10661:          adc     #$01
 10662:          bne     LD688
 10663:  LD692:
 10664:          rts
 10665:  LD693:
 10666:          pha
 10667:          tya
 10668:          ldy     DRVNUM
 10669:          sta     PHASE,y
 10670:  LD69A:
 10671:          cmp     PHASE,y
 10672:          beq     LD69A
 10673:          lda     #$00
 10674:          sta     PHASE,y
 10675:          pla
 10676:          rts
 10677:  LD6A6:
 10678:          lda     REVCNT
 10679:          and     #$3F
 10680:          tay
 10681:  LD6AB:
 10682:          lda     ERLED
 10683:          eor     VDC_PB2
 10684:          sta     VDC_PB2
 10685:          lda     LSTJOB,x
 10686:          sta     JOBS0,x
 10687:  LD6B9:
 10688:  .if CompileDrive >= DRIVE_1570
 10689:          jsr     L9FB6
 10690:          FillNOP 1
 10691:  .else
 10692:          lda     JOBS0,x
 10693:          bmi     LD6B9
 10694:  .endif
 10695:          cmp     #$02
 10696:          bcc     LD6C4
 10697:          dey
 10698:          bne     LD6AB
 10699:  LD6C4:
 10700:          pha
 10701:          lda     ERLED
 10702:          ora     VDC_PB2
 10703:          sta     VDC_PB2
 10704:          pla
 10705:          rts
 10706:  LD6D0:
 10707:          jsr     LDF93
 10708:  LD6D3:
 10709:          asl     a
 10710:          tay
 10711:          lda     TRACK
 10712:          sta     TRACK0,y
 10713:          lda     SECTOR
 10714:          sta     SECTOR0,y
 10715:          lda     DRVNUM
 10716:          asl     a
 10717:          tax
 10718:          rts
 10719:  LD6E4:
 10720:          lda     SA
 10721:          pha
 10722:          lda     LINDX
 10723:          pha
 10724:          lda     SECTOR
 10725:          pha
 10726:          lda     TRACK
 10727:          pha
 10728:          lda     #$11
 10729:          sta     SA
 10730:          jsr     LDE3B
 10731:          lda     TYPE
 10732:          pha
 10733:          lda     FILDRV
 10734:          and     #$01
 10735:          sta     DRVNUM
 10736:          ldx     JOBNUM
 10737:          eor     LSTJOB,x
 10738:          lsr     a
 10739:          bcc     LD715
 10740:          ldx     #$01
 10741:          stx     DELIND
 10742:          jsr     LC5AC
 10743:          beq     LD730
 10744:          bne     LD73D
 10745:  LD715:
 10746:          lda     DELSEC
 10747:          beq     LD726
 10748:          cmp     SECTOR
 10749:          beq     LD73D
 10750:          sta     SECTOR
 10751:          jsr     LD460
 10752:          jmp     LD73D
 10753:  LD726:
 10754:          lda     #$01
 10755:          sta     DELIND
 10756:          jsr     LC617
 10757:          bne     LD73D
 10758:  LD730:
 10759:          jsr     LD48D
 10760:          lda     SECTOR
 10761:          sta     DELSEC
 10762:          lda     #$02
 10763:          sta     DELIND
 10764:  LD73D:
 10765:          lda     DELIND
 10766:          jsr     LD4C8
 10767:          pla
 10768:          sta     TYPE
 10769:          cmp     #$04
 10770:          bne     LD74D
 10771:          ora     #$80
 10772:  LD74D:
 10773:          jsr     LCFF1
 10774:          pla
 10775:          sta     FILTRK
 10776:          jsr     LCFF1
 10777:          pla
 10778:          sta     FILSEC
 10779:          jsr     LCFF1
 10780:          jsr     LDF93
 10781:          tay
 10782:          lda     FILTBL
 10783:          tax
 10784:          lda     #$10
 10785:          jsr     LC66E
 10786:          ldy     #$10
 10787:          lda     #$00
 10788:  LD76F:
 10789:          sta     (DIRBUF),y
 10790:          iny
 10791:          cpy     #$1B
 10792:          bcc     LD76F
 10793:          lda     TYPE
 10794:          cmp     #$04
 10795:          bne     LD790
 10796:          ldy     #$10
 10797:          lda     TRKSS
 10798:          sta     (DIRBUF),y
 10799:          iny
 10800:          lda     SECSS
 10801:          sta     (DIRBUF),y
 10802:          iny
 10803:          lda     REC
 10804:          sta     (DIRBUF),y
 10805:  LD790:
 10806:          jsr     LD464
 10807:          pla
 10808:          sta     LINDX
 10809:          tax
 10810:          pla
 10811:          sta     SA
 10812:          lda     DELSEC
 10813:          sta     ENTSEC
 10814:          sta     DSEC,x
 10815:          lda     DELIND
 10816:          sta     ENTIND
 10817:          sta     DIND,x
 10818:          lda     TYPE
 10819:          sta     PATTYP
 10820:          lda     DRVNUM
 10821:          sta     FILDRV
 10822:          rts
 10823:  
 10824:  ; @@@TODO IEC OPEN (?) / CLOSE (?) / BOTH?
 10825:  LD7B4:
 10826:          lda     SA
 10827:          sta     TEMPSA
 10828:          jsr     LC2B3
 10829:          stx     CMDNUM
 10830:          ldx     CMDBUF
 10831:          lda     TEMPSA
 10832:          bne     LD7F3
 10833:          cpx     #$2A
 10834:          bne     LD7F3
 10835:          lda     PRGTRK
 10836:          beq     LD81C
 10837:          sta     TRACK
 10838:          lda     PRGDRV
 10839:          sta     DRVNUM
 10840:          sta     FILDRV
 10841:          lda     #$02
 10842:          sta     PATTYP
 10843:          lda     PRGSEC
 10844:          sta     SECTOR
 10845:          jsr     LC100
 10846:          jsr     LDC46
 10847:          lda     #$04
 10848:          ora     DRVNUM
 10849:  LD7EB:
 10850:          ldx     LINDX
 10851:          sta     FILTYP,y
 10852:          jmp     CommandEnd
 10853:  LD7F3:
 10854:          cpx     #$24
 10855:          bne     LD815
 10856:          lda     TEMPSA
 10857:          bne     LD7FF
 10858:          jmp     LDA55
 10859:  LD7FF:
 10860:          jsr     LC1D1
 10861:          lda     LFE85
 10862:          sta     TRACK
 10863:          lda     #$00
 10864:          sta     SECTOR
 10865:          jsr     LDC46
 10866:          lda     DRVNUM
 10867:          ora     #$02
 10868:          jmp     LD7EB
 10869:  LD815:
 10870:          cpx     #$23
 10871:          bne     LD82B
 10872:          jmp     LCB84
 10873:          ; ----------------
 10874:  
 10875:  LD81C:
 10876:          lda     #$02
 10877:          sta     TYPFLG
 10878:          lda     #$00
 10879:          sta     DRVNUM
 10880:          sta     LSTDRV
 10881:          jsr     LD042
 10882:  LD82B:
 10883:          jsr     LC1E5
 10884:          bne     LD834
 10885:          ldx     #$00
 10886:          beq     LD840
 10887:  LD834:
 10888:          txa
 10889:          beq     LD83C
 10890:          lda     #ERRORCODE_30_SYNTAX_ERROR
 10891:          jmp     GenerateErrorMessage
 10892:          ; ----------------
 10893:  
 10894:  LD83C:
 10895:          dey
 10896:          beq     LD840
 10897:          dey
 10898:  LD840:
 10899:          sty     FILTBL
 10900:          lda     #$8D
 10901:          jsr     SearchInCmdline
 10902:          inx
 10903:          stx     F2CNT
 10904:          jsr     LC312
 10905:          jsr     LC3CA
 10906:          jsr     LC49D
 10907:          ldx     #$00
 10908:          stx     REC
 10909:          stx     MODE
 10910:          stx     TYPE
 10911:          inx
 10912:          cpx     F1CNT
 10913:          bcs     LD876
 10914:          jsr     LDA09
 10915:          inx
 10916:          cpx     F1CNT
 10917:          bcs     LD876
 10918:          cpy     #$04
 10919:          beq     LD8B1
 10920:          jsr     LDA09
 10921:  LD876:
 10922:          ldx     TEMPSA
 10923:          stx     SA
 10924:          cpx     #$02
 10925:          bcs     LD891
 10926:          stx     MODE
 10927:          lda     #$40
 10928:          sta     WBAM
 10929:          lda     TYPE
 10930:          bne     LD8A7
 10931:          lda     #$02
 10932:          sta     TYPE
 10933:  LD891:
 10934:          lda     TYPE
 10935:          bne     LD8A7
 10936:          lda     PATTYP
 10937:          and     #$07
 10938:          sta     TYPE
 10939:          lda     FILTRK
 10940:          bne     LD8A7
 10941:          lda     #$01
 10942:          sta     TYPE
 10943:  LD8A7:
 10944:          lda     MODE
 10945:          cmp     #$01
 10946:          beq     LD8C6
 10947:          jmp     LD940
 10948:  LD8B1:
 10949:          ldy     FILTBL,x
 10950:          lda     CMDBUF,y
 10951:          sta     REC
 10952:          lda     FILTRK
 10953:          bne     LD876
 10954:          lda     #$01
 10955:          sta     MODE
 10956:          bne     LD876
 10957:  LD8C6:
 10958:          lda     PATTYP
 10959:          and     #$80
 10960:          tax
 10961:          bne     LD8E1
 10962:          lda     #$20
 10963:          bit     PATTYP
 10964:          beq     LD8D9
 10965:          jsr     LC8B6
 10966:          jmp     LD9E3
 10967:  LD8D9:
 10968:          lda     FILTRK
 10969:          bne     LD8E1
 10970:          jmp     LD9E3
 10971:  LD8E1:
 10972:          lda     CMDBUF
 10973:          cmp     #$40
 10974:          beq     LD8F5
 10975:          txa
 10976:          bne     Error33
 10977:          lda     #ERRORCODE_63_FILE_EXISTS
 10978:          jmp     GenerateErrorMessage
 10979:          ; ----------------
 10980:  
 10981:  Error33:
 10982:          lda     #ERRORCODE_33_SYNTAX_ERROR
 10983:          jmp     GenerateErrorMessage
 10984:          ; ----------------
 10985:  
 10986:  LD8F5:
 10987:          lda     PATTYP
 10988:          and     #$07
 10989:          cmp     TYPE
 10990:          bne     Error64
 10991:          cmp     #$04
 10992:          beq     Error64
 10993:          jsr     LDCDA
 10994:          lda     LINDX
 10995:          sta     WLINDX
 10996:          lda     #$11
 10997:          sta     SA
 10998:          jsr     LD0EB
 10999:          lda     INDEX
 11000:          jsr     LD4C8
 11001:          ldy     #$00
 11002:          lda     (DIRBUF),y
 11003:          ora     #$20
 11004:          sta     (DIRBUF),y
 11005:          ldy     #$1A
 11006:          lda     TRACK
 11007:          sta     (DIRBUF),y
 11008:          iny
 11009:          lda     SECTOR
 11010:          sta     (DIRBUF),y
 11011:          ldx     WLINDX
 11012:          lda     ENTSEC
 11013:          sta     DSEC,x
 11014:          lda     ENTIND
 11015:          sta     DIND,x
 11016:          jsr     LDE3B
 11017:          jsr     LD464
 11018:          jmp     LD9EF
 11019:  LD940:
 11020:          lda     FILTRK
 11021:          bne     LD94A
 11022:          lda     #ERRORCODE_62_FILE_NOT_FOUND
 11023:          jmp     GenerateErrorMessage
 11024:          ; ----------------
 11025:  
 11026:  LD94A:
 11027:          lda     MODE
 11028:          cmp     #$03
 11029:          beq     LD95C
 11030:          lda     #$20
 11031:          bit     PATTYP
 11032:          beq     LD95C
 11033:          lda     #ERRORCODE_60_WRITE_FILE_OPEN
 11034:          jmp     GenerateErrorMessage
 11035:          ; ----------------
 11036:  
 11037:  LD95C:
 11038:          lda     PATTYP
 11039:          and     #$07
 11040:          cmp     TYPE
 11041:          beq     LD96A
 11042:  Error64:
 11043:          lda     #ERRORCODE_64_FILE_TYPE_MISMATCH
 11044:          jmp     GenerateErrorMessage
 11045:          ; ----------------
 11046:  
 11047:  LD96A:
 11048:          ldy     #$00
 11049:          sty     F2PTR
 11050:          ldx     MODE
 11051:          cpx     #$02
 11052:          bne     LD990
 11053:          cmp     #$04
 11054:          beq     Error64
 11055:          lda     (DIRBUF),y
 11056:          and     #$4F
 11057:          sta     (DIRBUF),y
 11058:          lda     SA
 11059:          pha
 11060:          lda     #$11
 11061:          sta     SA
 11062:          jsr     LDE3B
 11063:          jsr     LD464
 11064:          pla
 11065:          sta     SA
 11066:  LD990:
 11067:          jsr     LD9A0
 11068:          lda     MODE
 11069:          cmp     #$02
 11070:          bne     LD9EF
 11071:          jsr     LDA2A
 11072:          jmp     CommandEnd
 11073:  LD9A0:
 11074:          ldy     #$13
 11075:          lda     (DIRBUF),y
 11076:          sta     TRKSS
 11077:          iny
 11078:          lda     (DIRBUF),y
 11079:          sta     SECSS
 11080:          iny
 11081:          lda     (DIRBUF),y
 11082:          ldx     REC
 11083:          sta     REC
 11084:          txa
 11085:          beq     LD9C3
 11086:          cmp     REC
 11087:          beq     LD9C3
 11088:          lda     #ERRORCODE_50_RECORD_NOT_PRESENT
 11089:          jsr     GenerateErrorMessage
 11090:  LD9C3:
 11091:          ldx     F2PTR
 11092:          lda     FILTRK,x
 11093:          sta     TRACK
 11094:          lda     FILSEC,x
 11095:          sta     SECTOR
 11096:          jsr     LDC46
 11097:          ldy     LINDX
 11098:          ldx     F2PTR
 11099:          lda     ENTSEC,x
 11100:          sta     DSEC,y
 11101:          lda     ENTIND,x
 11102:          sta     DIND,y
 11103:          rts
 11104:  LD9E3:
 11105:          lda     FILDRV
 11106:          and     #$01
 11107:          sta     DRVNUM
 11108:          jsr     LDCDA
 11109:          jsr     LD6E4
 11110:  LD9EF:
 11111:          lda     SA
 11112:          cmp     #$02
 11113:          bcs     LDA06
 11114:          jsr     LDE3E
 11115:          lda     TRACK
 11116:          sta     PRGTRK
 11117:          lda     DRVNUM
 11118:          sta     PRGDRV
 11119:          lda     SECTOR
 11120:          sta     PRGSEC
 11121:  LDA06:
 11122:          jmp     LC199
 11123:  LDA09:
 11124:          ldy     FILTBL,x
 11125:          lda     CMDBUF,y
 11126:          ldy     #$04
 11127:  LDA11:
 11128:          dey
 11129:          bmi     LDA1C
 11130:          cmp     LFEB2,y
 11131:          bne     LDA11
 11132:          sty     MODE
 11133:  LDA1C:
 11134:          ldy     #$05
 11135:  LDA1E:
 11136:          dey
 11137:          bmi     LDA29
 11138:          cmp     LFEB6,y
 11139:          bne     LDA1E
 11140:          sty     TYPE
 11141:  LDA29:
 11142:          rts
 11143:  LDA2A:
 11144:          jsr     LCA39
 11145:          lda     #$80
 11146:          jsr     LDDA6
 11147:          beq     LDA2A
 11148:          jsr     LDE95
 11149:          ldx     SECTOR
 11150:          inx
 11151:          txa
 11152:          bne     LDA42
 11153:          jsr     LD1A3
 11154:          lda     #$02
 11155:  LDA42:
 11156:          jsr     LD4C8
 11157:          ldx     LINDX
 11158:          lda     #$01
 11159:          sta     CHNRDY,x
 11160:          lda     #$80
 11161:          ora     LINDX
 11162:          ldx     SA
 11163:          sta     LINTAB,x
 11164:          rts
 11165:  LDA55:
 11166:          lda     #$0C
 11167:          sta     CMDNUM
 11168:          lda     #$00
 11169:          ldx     CMDSIZ
 11170:          dex
 11171:          beq     LDA6D
 11172:          dex
 11173:          bne     LDA86
 11174:          lda     CMDBUF + 1
 11175:          jsr     CheckForValidDriveNumber
 11176:          bmi     LDA86
 11177:  LDA6D:
 11178:          sta     FILDRV
 11179:          inc     F1CNT
 11180:          inc     F2CNT
 11181:          inc     FILTBL
 11182:          lda     #$80
 11183:          sta     PATTYP
 11184:          lda     #$2A
 11185:          sta     CMDBUF
 11186:          sta     CMDBUF + 1
 11187:          bne     LDA9E
 11188:  LDA86:
 11189:          jsr     LC1E5
 11190:          bne     LDA90
 11191:          jsr     LC2DC
 11192:          ldy     #$03
 11193:  LDA90:
 11194:          dey
 11195:          dey
 11196:          sty     FILTBL
 11197:          jsr     LC200
 11198:          jsr     LC398
 11199:          jsr     LC320
 11200:  LDA9E:
 11201:          jsr     LC3CA
 11202:          jsr     LC7B7
 11203:          jsr     LC49D
 11204:          jsr     LEC9E
 11205:          jsr     LD137
 11206:          ldx     LINDX
 11207:          sta     L023E,x
 11208:          lda     DRVNUM
 11209:          sta     LSTDRV
 11210:          ora     #$04
 11211:          sta     FILTYP,x
 11212:          lda     #$00
 11213:          sta     BUFTABCMD
 11214:          rts
 11215:  LDAC0:
 11216:          lda     #$00
 11217:          sta     WBAM
 11218:          lda     SA
 11219:          bne     LDAD4
 11220:          lda     #$00
 11221:          sta     DIRLST
 11222:          jsr     LD227
 11223:  LDAD1:
 11224:          jmp     LD4DA
 11225:  LDAD4:
 11226:          cmp     #$0F
 11227:          beq     LDAEC
 11228:          jsr     LDB02
 11229:          lda     SA
 11230:          cmp     #$02
 11231:          bcc     LDAD1
 11232:          lda     ERWORD
 11233:          bne     LDAE9
 11234:          jmp     CommandEnd
 11235:  LDAE9:
 11236:          jmp     LC1AD
 11237:  LDAEC:
 11238:          lda     #$0E
 11239:          sta     SA
 11240:  LDAF0:
 11241:          jsr     LDB02
 11242:          dec     SA
 11243:          bpl     LDAF0
 11244:          lda     ERWORD
 11245:          bne     LDAFF
 11246:          jmp     CommandEnd
 11247:  LDAFF:
 11248:          jmp     LC1AD
 11249:  LDB02:
 11250:          ldx     SA
 11251:          lda     LINTAB,x
 11252:          cmp     #$FF
 11253:          bne     LDB0C
 11254:          rts
 11255:  LDB0C:
 11256:          and     #$0F
 11257:          sta     LINDX
 11258:          jsr     LD125
 11259:          cmp     #$07
 11260:          beq     LDB26
 11261:          cmp     #$04
 11262:          beq     LDB2C
 11263:          jsr     LD107
 11264:          bcs     LDB29
 11265:          jsr     LDB62
 11266:          jsr     LDBA5
 11267:  LDB26:
 11268:          jsr     LEEF4
 11269:  LDB29:
 11270:          jmp     LD227
 11271:  LDB2C:
 11272:          jsr     LDDF1
 11273:          jsr     LCF1E
 11274:          jsr     LE1CB
 11275:          ldx     SSNUM
 11276:          stx     T4
 11277:          inc     T4
 11278:          lda     #$00
 11279:          sta     T1
 11280:          sta     T2
 11281:          lda     SSIND
 11282:          sec
 11283:          sbc     #$0E
 11284:          sta     T3
 11285:          jsr     LDF51
 11286:          ldx     LINDX
 11287:          lda     T1
 11288:          sta     RECL,x
 11289:          lda     T2
 11290:          sta     RECH,x
 11291:          lda     #$40
 11292:          jsr     LDDA6
 11293:          beq     LDB5F
 11294:          jsr     LDBA5
 11295:  LDB5F:
 11296:          jmp     LD227
 11297:  LDB62:
 11298:          ldx     LINDX
 11299:          lda     RECL,x
 11300:          ora     RECH,x
 11301:          bne     LDB76
 11302:          jsr     LD4E8
 11303:          cmp     #$02
 11304:          bne     LDB76
 11305:          lda     #$0D
 11306:          jsr     LCFF1
 11307:  LDB76:
 11308:          jsr     LD4E8
 11309:          cmp     #$02
 11310:          bne     LDB8C
 11311:          jsr     LCF1E
 11312:          ldx     LINDX
 11313:          lda     RECL,x
 11314:          bne     LDB88
 11315:          dec     RECH,x
 11316:  LDB88:
 11317:          dec     RECL,x
 11318:          lda     #$00
 11319:  LDB8C:
 11320:          sec
 11321:          sbc     #$01
 11322:          pha
 11323:          lda     #$00
 11324:          jsr     LD4C8
 11325:          jsr     LCFF1
 11326:          pla
 11327:          jsr     LCFF1
 11328:          jsr     LD0C7
 11329:          jsr     LD599
 11330:          jmp     LCF1E
 11331:  LDBA5:
 11332:          ldx     LINDX
 11333:          stx     WLINDX
 11334:          lda     SA
 11335:          pha
 11336:          lda     DSEC,x
 11337:          sta     SECTOR
 11338:          lda     DIND,x
 11339:          sta     INDEX
 11340:          lda     FILTYP,x
 11341:          and     #$01
 11342:          sta     DRVNUM
 11343:          lda     LFE85
 11344:          sta     TRACK
 11345:          jsr     LDF93
 11346:          pha
 11347:          sta     JOBNUM
 11348:          jsr     LD460
 11349:          ldy     #$00
 11350:          lda     TableHighBytesOfBuffers,x
 11351:          sta     R1
 11352:          lda     INDEX
 11353:          sta     R0
 11354:          lda     (R0),y
 11355:          and     #$20
 11356:          beq     LDC21
 11357:          jsr     LD125
 11358:          cmp     #$04
 11359:          beq     LDC29
 11360:          lda     (R0),y
 11361:          and     #$8F
 11362:          sta     (R0),y
 11363:          iny
 11364:          lda     (R0),y
 11365:          sta     TRACK
 11366:          sty     T2
 11367:          ldy     #$1B
 11368:          lda     (R0),y
 11369:          pha
 11370:          dey
 11371:          lda     (R0),y
 11372:          bne     LDC06
 11373:          sta     TRACK
 11374:          pla
 11375:          sta     SECTOR
 11376:          lda     #ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR
 11377:          jsr     LE645
 11378:  LDC06:
 11379:          pha
 11380:          lda     #$00
 11381:          sta     (R0),y
 11382:          iny
 11383:          sta     (R0),y
 11384:          pla
 11385:          ldy     T2
 11386:          sta     (R0),y
 11387:          iny
 11388:          lda     (R0),y
 11389:          sta     SECTOR
 11390:          pla
 11391:          sta     (R0),y
 11392:          jsr     LC87D
 11393:          jmp     LDC29
 11394:  LDC21:
 11395:          lda     (R0),y
 11396:          and     #$0F
 11397:          ora     #$80
 11398:          sta     (R0),y
 11399:  LDC29:
 11400:          ldx     WLINDX
 11401:          ldy     #$1C
 11402:          lda     RECL,x
 11403:          sta     (R0),y
 11404:          iny
 11405:          lda     RECH,x
 11406:          sta     (R0),y
 11407:          pla
 11408:          tax
 11409:          lda     #$90
 11410:          ora     DRVNUM
 11411:          jsr     LD590
 11412:          pla
 11413:          sta     SA
 11414:          jmp     LD107
 11415:  LDC46:
 11416:          lda     #$01
 11417:          jsr     LD1E2
 11418:          jsr     LDCB6
 11419:          lda     TYPE
 11420:          pha
 11421:          asl     a
 11422:          ora     DRVNUM
 11423:          sta     FILTYP,x
 11424:          jsr     LD09B
 11425:          ldx     LINDX
 11426:          lda     TRACK
 11427:          bne     LDC65
 11428:          lda     SECTOR
 11429:          sta     LSTCHR,x
 11430:  LDC65:
 11431:          pla
 11432:          cmp     #$04
 11433:          bne     LDCA9
 11434:          ldy     SA
 11435:          lda     LINTAB,y
 11436:          ora     #$40
 11437:          sta     LINTAB,y
 11438:          lda     REC
 11439:          sta     RS,x
 11440:          jsr     LD28E
 11441:          bpl     LDC81
 11442:          jmp     LD20F
 11443:  LDC81:
 11444:          ldx     LINDX
 11445:          sta     SS,x
 11446:          ldy     TRKSS
 11447:          sty     TRACK
 11448:          ldy     SECSS
 11449:          sty     SECTOR
 11450:          jsr     LD6D3
 11451:          jsr     LDE73
 11452:          jsr     LD599
 11453:  LDC98:
 11454:          ldx     LINDX
 11455:          lda     #$02
 11456:          sta     NR,x
 11457:          lda     #$00
 11458:          jsr     LD4C8
 11459:          jsr     LE153
 11460:          jmp     LDE3E
 11461:  LDCA9:
 11462:          jsr     LD156
 11463:          ldx     LINDX
 11464:          sta     L023E,x
 11465:          lda     #$88
 11466:          sta     CHNRDY,x
 11467:          rts
 11468:  LDCB6:
 11469:          ldx     LINDX
 11470:          lda     BUF0,x
 11471:          asl     a
 11472:  .if CompileDrive >= DRIVE_1570 .OR CompileDrive >= DRIVE_1541C_02
 11473:          bmi     LDCC3
 11474:  .endif
 11475:          tay
 11476:          lda     #$02
 11477:          sta     BUFTAB0,y
 11478:  LDCC3:
 11479:          lda     BUF1,x
 11480:          ora     #$80
 11481:          sta     BUF1,x
 11482:          asl     a
 11483:  .if CompileDrive >= DRIVE_1570 .OR CompileDrive >= DRIVE_1541C_02
 11484:          bmi     LDCD2
 11485:  .endif
 11486:          tay
 11487:          lda     #$02
 11488:          sta     BUFTAB0,y
 11489:  LDCD2:
 11490:          lda     #$00
 11491:          sta     RECL,x
 11492:  .if CompileDrive >= DRIVE_1570
 11493:          jmp     LA97F
 11494:          FillNOP 1
 11495:  .elseif CompileDrive >= DRIVE_1541C_02
 11496:          jmp     LC029
 11497:          FillNOP 1
 11498:  .else
 11499:          sta     RECH,x
 11500:          lda     #$00
 11501:          sta     LSTCHR,x
 11502:          rts
 11503:  .endif
 11504:  LDCDA:
 11505:          jsr     LF1A9
 11506:          lda     #$01
 11507:          jsr     LD1DF
 11508:          jsr     LD6D0
 11509:          jsr     LDCB6
 11510:          ldx     LINDX
 11511:          lda     TYPE
 11512:          pha
 11513:          asl     a
 11514:          ora     DRVNUM
 11515:          sta     FILTYP,x
 11516:          pla
 11517:          cmp     #$04
 11518:          beq     LDCFD
 11519:          lda     #$01
 11520:          sta     CHNRDY,x
 11521:          rts
 11522:  LDCFD:
 11523:          ldy     SA
 11524:          lda     LINTAB,y
 11525:          and     #$3F
 11526:          ora     #$40
 11527:          sta     LINTAB,y
 11528:          lda     REC
 11529:          sta     RS,x
 11530:          jsr     LD28E
 11531:          bpl     LDD16
 11532:          jmp     LD20F
 11533:  LDD16:
 11534:          ldx     LINDX
 11535:          sta     SS,x
 11536:          jsr     LDEC1
 11537:          jsr     LF11E
 11538:          lda     TRACK
 11539:          sta     TRKSS
 11540:          lda     SECTOR
 11541:          sta     SECSS
 11542:          ldx     LINDX
 11543:          lda     SS,x
 11544:          jsr     LD6D3
 11545:          lda     #$00
 11546:          jsr     LDEE9
 11547:          lda     #$00
 11548:          jsr     LDD8D
 11549:          lda     #$11
 11550:          jsr     LDD8D
 11551:          lda     #$00
 11552:          jsr     LDD8D
 11553:          lda     REC
 11554:          jsr     LDD8D
 11555:          lda     TRACK
 11556:          jsr     LDD8D
 11557:          lda     SECTOR
 11558:          jsr     LDD8D
 11559:          lda     #$10
 11560:          jsr     LDEE9
 11561:          jsr     LDE3E
 11562:          lda     TRACK
 11563:          jsr     LDD8D
 11564:          lda     SECTOR
 11565:          jsr     LDD8D
 11566:          jsr     LDE6C
 11567:          jsr     LD599
 11568:          lda     #$02
 11569:          jsr     LD4C8
 11570:          ldx     LINDX
 11571:          sec
 11572:          lda     #$00
 11573:          sbc     RS,x
 11574:          sta     NR,x
 11575:          jsr     LE2E2
 11576:          jsr     LDE19
 11577:          jsr     LDE5E
 11578:          jsr     LD599
 11579:          jsr     LEEF4
 11580:          jmp     LDC98
 11581:  LDD8D:
 11582:          pha
 11583:          ldx     LINDX
 11584:          lda     SS,x
 11585:          jmp     LCFFD
 11586:          bcc     LDD9D
 11587:  LDD97:
 11588:          ldx     LINDX
 11589:          ora     FILTYP,x
 11590:          bne     LDDA3
 11591:  LDD9D:
 11592:          ldx     LINDX
 11593:          eor     #$FF
 11594:          and     FILTYP,x
 11595:  LDDA3:
 11596:          sta     FILTYP,x
 11597:          rts
 11598:  LDDA6:
 11599:          ldx     LINDX
 11600:          and     FILTYP,x
 11601:          rts
 11602:  LDDAB:
 11603:          jsr     LDF93
 11604:          tax
 11605:          lda     LSTJOB,x
 11606:          and     #$F0
 11607:          cmp     #$90
 11608:          rts
 11609:  LDDB7:
 11610:          ldx     #$00
 11611:  LDDB9:
 11612:          stx     T2
 11613:          lda     LINTAB,x
 11614:          cmp     #$FF
 11615:          bne     LDDCA
 11616:  LDDC2:
 11617:          ldx     T2
 11618:          inx
 11619:          cpx     #$10
 11620:          bcc     LDDB9
 11621:          rts
 11622:  LDDCA:
 11623:          stx     T2
 11624:          and     #$3F
 11625:          tay
 11626:          lda     FILTYP,y
 11627:          and     #$01
 11628:          sta     T1
 11629:          ldx     ENTFND
 11630:          lda     FILDRV,x
 11631:          and     #$01
 11632:          cmp     T1
 11633:          bne     LDDC2
 11634:          lda     DSEC,y
 11635:          cmp     ENTSEC,x
 11636:          bne     LDDC2
 11637:          lda     DIND,y
 11638:          cmp     ENTIND,x
 11639:          bne     LDDC2
 11640:          clc
 11641:          rts
 11642:  
 11643:  LDDF1:
 11644:          jsr     LDF9E
 11645:          bvc     LDDFC
 11646:          jsr     LDE5E
 11647:          jsr     LD599
 11648:  LDDFC:
 11649:          rts
 11650:  LDDFD:
 11651:          jsr     LDE2B
 11652:          lda     TRACK
 11653:          sta     (DIRBUF),y
 11654:          iny
 11655:          lda     SECTOR
 11656:          sta     (DIRBUF),y
 11657:          jmp     LE105
 11658:  LDE0C:
 11659:          jsr     LDE2B
 11660:          lda     (DIRBUF),y
 11661:          sta     TRACK
 11662:          iny
 11663:          lda     (DIRBUF),y
 11664:          sta     SECTOR
 11665:          rts
 11666:  LDE19:
 11667:          jsr     LDE2B
 11668:          lda     #$00
 11669:          sta     (DIRBUF),y
 11670:          iny
 11671:          ldx     LINDX
 11672:          lda     NR,x
 11673:          tax
 11674:          dex
 11675:          txa
 11676:          sta     (DIRBUF),y
 11677:          rts
 11678:  LDE2B:
 11679:          jsr     LDF93
 11680:          asl     a
 11681:          tax
 11682:          lda     BUFTAB0 + 1,x
 11683:          sta     DIRBUF + 1
 11684:          lda     #$00
 11685:          sta     DIRBUF
 11686:          ldy     #$00
 11687:          rts
 11688:  LDE3B:
 11689:          jsr     LD0EB
 11690:  LDE3E:
 11691:          jsr     LDF93
 11692:          sta     JOBNUM
 11693:          asl     a
 11694:          tay
 11695:          lda     TRACK0,y
 11696:          sta     TRACK
 11697:          lda     SECTOR0,y
 11698:          sta     SECTOR
 11699:          rts
 11700:  LDE50:
 11701:          lda     #$90
 11702:          sta     CMD
 11703:          bne     LDE7F
 11704:  LDE57:
 11705:          lda     #$80
 11706:          sta     CMD
 11707:          bne     LDE7F
 11708:  LDE5E:
 11709:          lda     #$90
 11710:          sta     CMD
 11711:          bne     LDE8B
 11712:          lda     #$80
 11713:          sta     CMD
 11714:          bne     LDE8B
 11715:  LDE6C:
 11716:          lda     #$90
 11717:          sta     CMD
 11718:          bne     LDE75
 11719:  LDE73:
 11720:          lda     #$80
 11721:  LDE75:
 11722:          sta     CMD
 11723:          ldx     LINDX
 11724:          lda     SS,x
 11725:          tax
 11726:          bpl     LDE92
 11727:  LDE7F:
 11728:          jsr     LD6D0
 11729:          jsr     LDF93
 11730:          tax
 11731:          lda     DRVNUM
 11732:          sta     LSTJOB,x
 11733:  LDE8B:
 11734:          jsr     LE115
 11735:          jsr     LDF93
 11736:          tax
 11737:  LDE92:
 11738:          jmp     LD506
 11739:  LDE95:
 11740:          lda     #$00
 11741:          jsr     LD4C8
 11742:          jsr     LD137
 11743:          sta     TRACK
 11744:          jsr     LD137
 11745:          sta     SECTOR
 11746:          rts
 11747:  LDEA5:
 11748:          pha
 11749:          lda     #$00
 11750:          sta     T0
 11751:          sta     T2
 11752:          lda     TableHighBytesOfBuffers,y
 11753:          sta     T1
 11754:          lda     TableHighBytesOfBuffers,x
 11755:          sta     T3
 11756:          pla
 11757:          tay
 11758:          dey
 11759:  LDEB9:
 11760:          lda     (T0),y
 11761:          sta     (T2),y
 11762:          dey
 11763:          bpl     LDEB9
 11764:          rts
 11765:  LDEC1:
 11766:          tay
 11767:          lda     TableHighBytesOfBuffers,y
 11768:          sta     T1
 11769:          lda     #$00
 11770:          sta     T0
 11771:          tay
 11772:  LDECC:
 11773:          sta     (T0),y
 11774:          iny
 11775:          bne     LDECC
 11776:          rts
 11777:  LDED2:
 11778:          lda     #$00
 11779:          jsr     LDEDC
 11780:          ldy     #$02
 11781:          lda     (DIRBUF),y
 11782:          rts
 11783:  LDEDC:
 11784:          sta     DIRBUF
 11785:          ldx     LINDX
 11786:          lda     SS,x
 11787:          tax
 11788:          lda     TableHighBytesOfBuffers,x
 11789:          sta     DIRBUF + 1
 11790:          rts
 11791:  LDEE9:
 11792:          pha
 11793:          jsr     LDEDC
 11794:          pha
 11795:          txa
 11796:          asl     a
 11797:          tax
 11798:          pla
 11799:          sta     BUFTAB0 + 1,x
 11800:          pla
 11801:          sta     BUFTAB0,x
 11802:          rts
 11803:  LDEF8:
 11804:          jsr     LDF66
 11805:          bmi     LDF0B
 11806:          bvc     LDF12
 11807:          ldx     LINDX
 11808:          lda     SS,x
 11809:          jsr     LDF1B
 11810:          jsr     LDF66
 11811:          bpl     LDF12
 11812:  LDF0B:
 11813:          jsr     LE1CB
 11814:          bit     LFECE
 11815:          rts
 11816:  LDF12:
 11817:          lda     SSIND
 11818:          jsr     LDEE9
 11819:          bit     LFECD
 11820:          rts
 11821:  LDF1B:
 11822:          sta     JOBNUM
 11823:          lda     #$80
 11824:          bne     LDF25
 11825:          sta     JOBNUM
 11826:          lda     #$90
 11827:  LDF25:
 11828:          pha
 11829:          lda     FILTYP,x
 11830:          and     #$01
 11831:          sta     DRVNUM
 11832:          pla
 11833:          ora     DRVNUM
 11834:          sta     CMD
 11835:          lda     (DIRBUF),y
 11836:          sta     TRACK
 11837:          iny
 11838:          lda     (DIRBUF),y
 11839:          sta     SECTOR
 11840:          lda     JOBNUM
 11841:          jsr     LD6D3
 11842:          ldx     JOBNUM
 11843:          jmp     LD593
 11844:  LDF45:
 11845:          ldx     LINDX
 11846:          lda     SS,x
 11847:          jmp     LD4EB
 11848:  LDF4C:
 11849:          lda     #$78
 11850:          jsr     LDF5C
 11851:  LDF51:
 11852:          dex
 11853:          bpl     LDF4C
 11854:          lda     T3
 11855:          lsr     a
 11856:          jsr     LDF5C
 11857:          lda     T4
 11858:  LDF5C:
 11859:          clc
 11860:          adc     T1
 11861:          sta     T1
 11862:          bcc     LDF65
 11863:          inc     T2
 11864:  LDF65:
 11865:          rts
 11866:  LDF66:
 11867:          jsr     LDED2
 11868:          cmp     SSNUM
 11869:          bne     LDF7B
 11870:          ldy     SSIND
 11871:          lda     (DIRBUF),y
 11872:          beq     LDF77
 11873:          bit     LFECD
 11874:          rts
 11875:  LDF77:
 11876:          bit     LFECF
 11877:          rts
 11878:  LDF7B:
 11879:          lda     SSNUM
 11880:          cmp     #$06
 11881:          bcs     LDF8B
 11882:          asl     a
 11883:          tay
 11884:          lda     #$04
 11885:          sta     DIRBUF
 11886:          lda     (DIRBUF),y
 11887:          bne     LDF8F
 11888:  LDF8B:
 11889:          bit     LFED0
 11890:          rts
 11891:  LDF8F:
 11892:          bit     LFECE
 11893:          rts
 11894:  LDF93:
 11895:          ldx     LINDX
 11896:          lda     BUF0,x
 11897:          bpl     @LDF9B
 11898:          lda     BUF1,x
 11899:  @LDF9B:
 11900:          and     # ~ $40
 11901:          rts
 11902:          ; --------------
 11903:  
 11904:  LDF9E:
 11905:          ldx     LINDX
 11906:          stx     LBUSED
 11907:          lda     BUF0,x
 11908:          bpl     @LDFB0
 11909:          txa
 11910:          clc
 11911:          adc     #$07
 11912:          sta     LBUSED
 11913:          lda     BUF1,x
 11914:  @LDFB0:
 11915:          sta     T1
 11916:          and     #$1F
 11917:          bit     T1
 11918:          rts
 11919:          ; -----------------
 11920:  
 11921:  LDFB7:
 11922:          ldx     LINDX
 11923:          lda     BUF0,x
 11924:          bmi     @LDFBF
 11925:          lda     BUF1,x
 11926:  @LDFBF:
 11927:          cmp     #$FF
 11928:          rts
 11929:          ; -----------------
 11930:  
 11931:  LDFC2:
 11932:          ldx     LINDX
 11933:          ora     #$80
 11934:          ldy     BUF0,x
 11935:          bpl     @LDFCD
 11936:          sta     BUF0,x
 11937:          rts
 11938:  
 11939:  @LDFCD:
 11940:          sta     BUF1,x
 11941:          rts
 11942:          ; --------------
 11943:  
 11944:  LDFD0:
 11945:          lda     #$20
 11946:          jsr     LDD9D
 11947:          lda     #$80
 11948:          jsr     LDDA6
 11949:          bne     LE01D
 11950:          ldx     LINDX
 11951:          inc     RECL,x
 11952:          bne     @LDFE4
 11953:          inc     RECH,x
 11954:  @LDFE4:
 11955:          ldx     LINDX
 11956:          lda     NR,x
 11957:          beq     LE018
 11958:          jsr     LD4E8
 11959:          ldx     LINDX
 11960:          cmp     NR,x
 11961:          bcc     @LDFF6
 11962:          jsr     LE03C
 11963:  @LDFF6:
 11964:          ldx     LINDX
 11965:          lda     NR,x
 11966:          jsr     LD4C8
 11967:          lda     (BUFTAB0,x)
 11968:          sta     DATA
 11969:          lda     #$20
 11970:          jsr     LDD9D
 11971:          jsr     LE304
 11972:  
 11973:  LE009:
 11974:          pha
 11975:          bcc     LE034
 11976:          lda     #$00
 11977:          jsr     LD4F6
 11978:          bne     LE034
 11979:          pla
 11980:          cmp     #$02
 11981:          beq     LE02A
 11982:  LE018:
 11983:          lda     #$80
 11984:          jsr     LDD97
 11985:  LE01D:
 11986:          jsr     LD12F
 11987:          lda     BUFTAB0,x
 11988:          sta     LSTCHR,y
 11989:          lda     #$0D
 11990:          sta     DATA
 11991:          rts
 11992:          ; ----------------
 11993:  
 11994:  LE02A:
 11995:          jsr     LE035
 11996:          ldx     LINDX
 11997:          lda     #$00
 11998:          sta     NR,x
 11999:          rts
 12000:  LE034:
 12001:          pla
 12002:  LE035:
 12003:          ldx     LINDX
 12004:          sta     NR,x
 12005:          jmp     LE16E
 12006:  LE03C:
 12007:          jsr     LD1D3
 12008:          jsr     LDE95
 12009:          jsr     LDF9E
 12010:          bvc     @LE05D
 12011:          jsr     LDE5E
 12012:          jsr     LCF1E
 12013:          lda     #$02
 12014:          jsr     LD4C8
 12015:          jsr     LDDAB
 12016:          bne     @LE07B
 12017:          jsr     LDE57
 12018:          jmp     LD599
 12019:  
 12020:  @LE05D:
 12021:          jsr     LCF1E
 12022:          jsr     LDDAB
 12023:          bne     @LE06B
 12024:          jsr     LDE57
 12025:          jsr     LD599
 12026:  @LE06B:
 12027:          jsr     LDE95
 12028:          lda     TRACK
 12029:          beq     @LE07B
 12030:          jsr     LCF1E
 12031:          jsr     LDE57
 12032:          jsr     LCF1E
 12033:  @LE07B:
 12034:          rts
 12035:          ; -----------------
 12036:  
 12037:  LE07C:
 12038:          jsr     LE105
 12039:          jsr     LDF93
 12040:          asl     a
 12041:          tax
 12042:          lda     DATA
 12043:          sta     (BUFTAB0,x)
 12044:          ldy     BUFTAB0,x
 12045:          iny
 12046:          bne     @LE096
 12047:          ldy     LINDX
 12048:          lda     NR,y
 12049:          beq     @LE09E
 12050:          ldy     #$02
 12051:  @LE096:
 12052:          tya
 12053:          ldy     LINDX
 12054:          cmp     NR,y
 12055:          bne     @LE0A3
 12056:  @LE09E:
 12057:          lda     #$20
 12058:          jmp     LDD97
 12059:  @LE0A3:
 12060:          inc     BUFTAB0,x
 12061:          bne     @LE0AA
 12062:          jsr     LE03C
 12063:  @LE0AA:
 12064:          rts
 12065:          ; -----------------
 12066:  
 12067:  LE0AB:
 12068:          lda     #$A0
 12069:          jsr     LDDA6
 12070:          bne     LE0D9
 12071:  LE0B2:
 12072:          lda     DATA
 12073:          jsr     LE07C
 12074:          lda     EIOFLG
 12075:          beq     LE0C8
 12076:          rts
 12077:  LE0BC:
 12078:          lda     #$20
 12079:          jsr     LDDA6
 12080:          beq     LE0C8
 12081:          lda     #ERRORCODE_51_OVERFLOW_IN_RECORD
 12082:          sta     ERWORD
 12083:  LE0C8:
 12084:          jsr     LE0F3
 12085:          jsr     LE153
 12086:          lda     ERWORD
 12087:          beq     @LE0D6
 12088:          jmp     GenerateErrorMessage
 12089:          ; ----------------
 12090:  
 12091:  @LE0D6:
 12092:          jmp     SetNoError                      ; delete error status
 12093:          ; -----------------
 12094:  
 12095:  LE0D9:
 12096:          and     #$80
 12097:          bne     LE0E2
 12098:          lda     EIOFLG
 12099:          beq     LE0BC
 12100:          rts
 12101:  LE0E2:
 12102:          lda     DATA
 12103:          pha
 12104:          jsr     LE31C
 12105:          pla
 12106:          sta     DATA
 12107:          lda     #$80
 12108:          jsr     LDD9D
 12109:          jmp     LE0B2
 12110:  LE0F3:
 12111:          lda     #$20
 12112:          jsr     LDDA6
 12113:          bne     @LE104
 12114:          lda     #$00
 12115:          sta     DATA
 12116:          jsr     LE07C
 12117:          jmp     LE0F3
 12118:  @LE104:
 12119:          rts
 12120:  LE105:
 12121:          lda     #$40
 12122:          jsr     LDD97
 12123:          jsr     LDF9E
 12124:          ora     #$40
 12125:          ldx     LBUSED
 12126:          sta     BUF0,x
 12127:          rts
 12128:  LE115:
 12129:          jsr     LDF9E
 12130:          and     #$BF
 12131:          ldx     LBUSED
 12132:          sta     BUF0,x
 12133:          rts
 12134:  LE120:
 12135:          lda     #$80
 12136:          jsr     LDDA6
 12137:          bne     LE15E
 12138:          jsr     LD12F
 12139:          lda     BUFTAB0,x
 12140:          cmp     LSTCHR,y
 12141:          beq     LE153
 12142:          inc     BUFTAB0,x
 12143:          bne     LE13B
 12144:          jsr     LE03C
 12145:  LE138:
 12146:          jsr     LD12F
 12147:  LE13B:
 12148:          lda     (BUFTAB0,x)
 12149:  LE13D:
 12150:          sta     L023E,y
 12151:          lda     #$89
 12152:          sta     CHNRDY,y
 12153:          lda     BUFTAB0,x
 12154:          cmp     LSTCHR,y
 12155:          beq     LE14D
 12156:          rts
 12157:  LE14D:
 12158:          lda     #$81
 12159:          sta     CHNRDY,y
 12160:          rts
 12161:  LE153:
 12162:          jsr     LDFD0
 12163:          jsr     LD12F
 12164:          lda     DATA
 12165:          jmp     LE13D
 12166:  LE15E:
 12167:          ldx     LINDX
 12168:          lda     #$0D
 12169:          sta     L023E,x
 12170:          lda     #$81
 12171:          sta     CHNRDY,x
 12172:          lda     #ERRORCODE_50_RECORD_NOT_PRESENT
 12173:          jsr     GenerateErrorMessage
 12174:  LE16E:
 12175:          ldx     LINDX
 12176:          lda     NR,x
 12177:          sta     R1
 12178:          dec     R1
 12179:          cmp     #$02
 12180:          bne     LE17E
 12181:          lda     #$FF
 12182:          sta     R1
 12183:  LE17E:
 12184:          lda     RS,x
 12185:          sta     R2
 12186:          jsr     LD4E8
 12187:          ldx     LINDX
 12188:          cmp     R1
 12189:          bcc     LE1A4
 12190:          beq     LE1A4
 12191:          jsr     LCF1E
 12192:          jsr     LE1B2
 12193:          bcc     LE19D
 12194:          ldx     LINDX
 12195:          sta     LSTCHR,x
 12196:          jmp     LCF1E
 12197:  LE19D:
 12198:          jsr     LCF1E
 12199:          lda     #$FF
 12200:          sta     R1
 12201:  LE1A4:
 12202:          jsr     LE1B2
 12203:          bcs     LE1AC
 12204:          jsr     LD4E8
 12205:  LE1AC:
 12206:          ldx     LINDX
 12207:          sta     LSTCHR,x
 12208:          rts
 12209:  LE1B2:
 12210:          jsr     LDE2B
 12211:          ldy     R1
 12212:  LE1B7:
 12213:          lda     (DIRBUF),y
 12214:          bne     LE1C8
 12215:          dey
 12216:          cpy     #$02
 12217:          bcc     LE1C4
 12218:          dec     R2
 12219:          bne     LE1B7
 12220:  LE1C4:
 12221:          dec     R2
 12222:          clc
 12223:          rts
 12224:  LE1C8:
 12225:          tya
 12226:          sec
 12227:          rts
 12228:  LE1CB:
 12229:          jsr     LDED2
 12230:          sta     SSNUM
 12231:          lda     #$04
 12232:          sta     DIRBUF
 12233:          ldy     #$0A
 12234:          bne     LE1DC
 12235:  LE1D8:
 12236:          dey
 12237:          dey
 12238:          bmi     LE202
 12239:  LE1DC:
 12240:          lda     (DIRBUF),y
 12241:          beq     LE1D8
 12242:          tya
 12243:          lsr     a
 12244:          cmp     SSNUM
 12245:          beq     LE1EF
 12246:          sta     SSNUM
 12247:          ldx     LINDX
 12248:          lda     SS,x
 12249:          jsr     LDF1B
 12250:  LE1EF:
 12251:          ldy     #$00
 12252:          sty     DIRBUF
 12253:          lda     (DIRBUF),y
 12254:          bne     LE202
 12255:          iny
 12256:          lda     (DIRBUF),y
 12257:          tay
 12258:          dey
 12259:          sty     SSIND
 12260:          tya
 12261:          jmp     LDEE9
 12262:  LE202:
 12263:          lda     #ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR
 12264:          jsr     LE645
 12265:  cmd_position:
 12266:          jsr     LC2B3
 12267:          lda     CMDBUF + 1
 12268:          sta     SA
 12269:          jsr     LD0EB
 12270:          bcc     LE219
 12271:          lda     #ERRORCODE_70_NO_CHANNEL
 12272:          jsr     GenerateErrorMessage
 12273:  LE219:
 12274:          lda     #$A0
 12275:          jsr     LDD9D
 12276:          jsr     LD125
 12277:          beq     LE228
 12278:          lda     #ERRORCODE_64_FILE_TYPE_MISMATCH
 12279:          jsr     GenerateErrorMessage
 12280:  LE228:
 12281:          lda     FILTYP,x
 12282:          and     #$01
 12283:          sta     DRVNUM
 12284:          lda     CMDBUF + 2
 12285:          sta     RECL,x
 12286:          lda     CMDBUF + 3
 12287:          sta     RECH,x
 12288:          ldx     LINDX
 12289:          lda     #$89
 12290:          sta     CHNRDY,x
 12291:          lda     CMDBUF + 4
 12292:          beq     LE253
 12293:          sec
 12294:          sbc     #$01
 12295:          beq     LE253
 12296:          cmp     RS,x
 12297:          bcc     LE253
 12298:          lda     #ERRORCODE_51_OVERFLOW_IN_RECORD
 12299:          sta     ERWORD
 12300:          lda     #$00
 12301:  LE253:
 12302:          sta     RECPTR
 12303:          jsr     LCE0E
 12304:          jsr     LDEF8
 12305:          bvc     LE265
 12306:          lda     #$80
 12307:          jsr     LDD97
 12308:          jmp     LE15E
 12309:  LE265:
 12310:          jsr     LE275
 12311:          lda     #$80
 12312:          jsr     LDDA6
 12313:          beq     LE272
 12314:          jmp     LE15E
 12315:  LE272:
 12316:          jmp     CommandEnd
 12317:  LE275:
 12318:          jsr     LE29C
 12319:          lda     RELPTR
 12320:          jsr     LD4C8
 12321:          ldx     LINDX
 12322:          lda     RS,x
 12323:          sec
 12324:          sbc     RECPTR
 12325:          bcs     LE289
 12326:          jmp     LE202
 12327:  LE289:
 12328:          clc
 12329:          adc     RELPTR
 12330:          bcc     LE291
 12331:          adc     #$01
 12332:          sec
 12333:  LE291:
 12334:          jsr     LE009
 12335:          jmp     LE138
 12336:          lda     #ERRORCODE_51_OVERFLOW_IN_RECORD
 12337:          jsr     GenerateErrorMessage
 12338:  LE29C:
 12339:          lda     DIRBUF
 12340:          sta     R3
 12341:          lda     DIRBUF + 1
 12342:          sta     R4
 12343:          jsr     LE2D0
 12344:          bne     LE2AA
 12345:          rts
 12346:  LE2AA:
 12347:          jsr     LDDF1
 12348:          jsr     LDE0C
 12349:          lda     TRACK
 12350:          beq     LE2C2
 12351:          jsr     LE2D3
 12352:          bne     LE2BF
 12353:          jsr     LCF1E
 12354:          jmp     LD2DA
 12355:  LE2BF:
 12356:          jsr     LD2DA
 12357:  LE2C2:
 12358:          ldy     #$00
 12359:          lda     (R3),y
 12360:          sta     TRACK
 12361:          iny
 12362:          lda     (R3),y
 12363:          sta     SECTOR
 12364:          jmp     LD0AF
 12365:  LE2D0:
 12366:          jsr     LDE3E
 12367:  LE2D3:
 12368:          ldy     #$00
 12369:          lda     (R3),y
 12370:          cmp     TRACK
 12371:          beq     LE2DC
 12372:          rts
 12373:  LE2DC:
 12374:          iny
 12375:          lda     (R3),y
 12376:          cmp     SECTOR
 12377:          rts
 12378:  LE2E2:
 12379:          jsr     LDE2B
 12380:          ldy     #$02
 12381:          lda     #$00
 12382:  LE2E9:
 12383:          sta     (DIRBUF),y
 12384:          iny
 12385:          bne     LE2E9
 12386:          jsr     LE304
 12387:  LE2F1:
 12388:          sta     NR,x
 12389:          tay
 12390:          lda     #$FF
 12391:          sta     (DIRBUF),y
 12392:          jsr     LE304
 12393:          bcc     LE2F1
 12394:          bne     LE303
 12395:          lda     #$00
 12396:          sta     NR,x
 12397:  LE303:
 12398:          rts
 12399:  LE304:
 12400:          ldx     LINDX
 12401:          lda     NR,x
 12402:          sec
 12403:          beq     LE318
 12404:          clc
 12405:          adc     RS,x
 12406:          bcc     LE31B
 12407:          bne     LE318
 12408:          lda     #$02
 12409:          bit     LFECC
 12410:          rts
 12411:  LE318:
 12412:          adc     #$01
 12413:          sec
 12414:  LE31B:
 12415:          rts
 12416:  LE31C:
 12417:          jsr     LD1D3
 12418:          jsr     LE1CB
 12419:          jsr     LE29C
 12420:          jsr     LCF7B
 12421:          lda     SSIND
 12422:          sta     R1
 12423:          lda     SSNUM
 12424:          sta     R0
 12425:          lda     #$00
 12426:          sta     R2
 12427:          lda     #$00
 12428:          sta     RECPTR
 12429:          jsr     LCE0E
 12430:  LE33B:
 12431:          jsr     LEF4D
 12432:          ldy     LINDX
 12433:          ldx     RS,y
 12434:          dex
 12435:          txa
 12436:          clc
 12437:          adc     RELPTR
 12438:          bcc     LE355
 12439:          inc     SSIND
 12440:          inc     SSIND
 12441:          bne     LE355
 12442:          inc     SSNUM
 12443:          lda     #$10
 12444:          sta     SSIND
 12445:  LE355:
 12446:          lda     R1
 12447:          clc
 12448:          adc     #$02
 12449:          jsr     LDEE9
 12450:          lda     SSNUM
 12451:          cmp     #$06
 12452:          bcc     LE368
 12453:  LE363:
 12454:          lda     #ERRORCODE_52_FILE_TOO_LARGE
 12455:          jsr     GenerateErrorMessage
 12456:  LE368:
 12457:          lda     SSIND
 12458:          sec
 12459:          sbc     R1
 12460:          bcs     LE372
 12461:          sbc     #$0F
 12462:          clc
 12463:  LE372:
 12464:          sta     T3
 12465:          lda     SSNUM
 12466:          sbc     R0
 12467:          sta     T4
 12468:          ldx     #$00
 12469:          stx     T1
 12470:          stx     T2
 12471:          tax
 12472:          jsr     LDF51
 12473:          lda     T2
 12474:          bne     LE38F
 12475:          ldx     T1
 12476:          dex
 12477:          bne     LE38F
 12478:          inc     R2
 12479:  LE38F:
 12480:          cmp     NBTEMP + 1
 12481:          bcc     LE39D
 12482:          bne     LE363
 12483:          lda     NBTEMP
 12484:          cmp     T1
 12485:          bcc     LE363
 12486:  LE39D:
 12487:          lda     #$01
 12488:          jsr     LD4F6
 12489:          clc
 12490:          adc     #$01
 12491:          ldx     LINDX
 12492:          sta     NR,x
 12493:          jsr     LF11E
 12494:          jsr     LDDFD
 12495:          lda     R2
 12496:          bne     LE3C8
 12497:          jsr     LDE5E
 12498:  LE3B6:
 12499:          jsr     LCF1E
 12500:          jsr     LD6D0
 12501:          jsr     LF11E
 12502:          jsr     LDDFD
 12503:          jsr     LE2E2
 12504:          jmp     LE3D4
 12505:  LE3C8:
 12506:          jsr     LCF1E
 12507:          jsr     LD6D0
 12508:          jsr     LE2E2
 12509:          jsr     LDE19
 12510:  LE3D4:
 12511:          jsr     LDE5E
 12512:          jsr     LDE0C
 12513:          lda     TRACK
 12514:          pha
 12515:          lda     SECTOR
 12516:          pha
 12517:          jsr     LDE3E
 12518:          lda     SECTOR
 12519:          pha
 12520:          lda     TRACK
 12521:          pha
 12522:          jsr     LDF45
 12523:          tax
 12524:          bne     LE3F9
 12525:          jsr     LE44E
 12526:          lda     #$10
 12527:          jsr     LDEE9
 12528:          inc     R0
 12529:  LE3F9:
 12530:          pla
 12531:          jsr     LDD8D
 12532:          pla
 12533:          jsr     LDD8D
 12534:          pla
 12535:          sta     SECTOR
 12536:          pla
 12537:          sta     TRACK
 12538:          beq     LE418
 12539:          lda     R0
 12540:          cmp     SSNUM
 12541:          bne     LE3B6
 12542:          jsr     LDF45
 12543:          cmp     SSIND
 12544:          bcc     LE3B6
 12545:          beq     LE3C8
 12546:  LE418:
 12547:          jsr     LDF45
 12548:          pha
 12549:          lda     #$00
 12550:          jsr     LDEDC
 12551:          lda     #$00
 12552:          tay
 12553:          sta     (DIRBUF),y
 12554:          iny
 12555:          pla
 12556:          sec
 12557:          sbc     #$01
 12558:          sta     (DIRBUF),y
 12559:          jsr     LDE6C
 12560:          jsr     LD599
 12561:          jsr     LEEF4
 12562:          jsr     LCE0E
 12563:          jsr     LCF1E
 12564:          jsr     LDEF8
 12565:          bvs     LE444
 12566:          jmp     LE275
 12567:  LE444:
 12568:          lda     #$80
 12569:          jsr     LDD97
 12570:          lda     #ERRORCODE_50_RECORD_NOT_PRESENT
 12571:          jsr     GenerateErrorMessage
 12572:  LE44E:
 12573:          jsr     LF11E
 12574:          jsr     LCF1E
 12575:          jsr     LDDF1
 12576:          jsr     LDF93
 12577:          pha
 12578:          jsr     LDEC1
 12579:          ldx     LINDX
 12580:          lda     SS,x
 12581:          tay
 12582:          pla
 12583:          tax
 12584:          lda     #$10
 12585:          jsr     LDEA5
 12586:          lda     #$00
 12587:          jsr     LDEDC
 12588:          ldy     #$02
 12589:          lda     (DIRBUF),y
 12590:          pha
 12591:          lda     #$00
 12592:          jsr     LD4C8
 12593:          pla
 12594:          clc
 12595:          adc     #$01
 12596:          sta     (DIRBUF),y
 12597:          asl     a
 12598:          adc     #$04
 12599:          sta     R3
 12600:          tay
 12601:          sec
 12602:          sbc     #$02
 12603:          sta     R4
 12604:          lda     TRACK
 12605:          sta     R1
 12606:          sta     (DIRBUF),y
 12607:          iny
 12608:          lda     SECTOR
 12609:          sta     R2
 12610:          sta     (DIRBUF),y
 12611:          ldy     #$00
 12612:          tya
 12613:          sta     (DIRBUF),y
 12614:          iny
 12615:          lda     #$11
 12616:          sta     (DIRBUF),y
 12617:          lda     #$10
 12618:          jsr     LD4C8
 12619:          jsr     LDE50
 12620:          jsr     LD599
 12621:          ldx     LINDX
 12622:          lda     SS,x
 12623:          pha
 12624:          jsr     LDF9E
 12625:          ldx     LINDX
 12626:          sta     SS,x
 12627:          pla
 12628:          ldx     LBUSED
 12629:          sta     BUF0,x
 12630:          lda     #$00
 12631:          jsr     LD4C8
 12632:          ldy     #$00
 12633:          lda     TRACK
 12634:          sta     (DIRBUF),y
 12635:          iny
 12636:          lda     SECTOR
 12637:          sta     (DIRBUF),y
 12638:          jmp     LE4DE
 12639:  LE4D1:
 12640:          jsr     LDF93
 12641:          ldx     LINDX
 12642:          jsr     LDF1B
 12643:          lda     #$00
 12644:          jsr     LD4C8
 12645:  LE4DE:
 12646:          dec     R4
 12647:          dec     R4
 12648:          ldy     R3
 12649:          lda     R1
 12650:          sta     (DIRBUF),y
 12651:          iny
 12652:          lda     R2
 12653:          sta     (DIRBUF),y
 12654:          jsr     LDE5E
 12655:          jsr     LD599
 12656:          ldy     R4
 12657:          cpy     #$03
 12658:          bcs     LE4D1
 12659:          jmp     LCF1E
 12660:  
 12661:  ErrorCodeTable:
 12662:          .byte   ERRORCODE_00_OK
 12663:          htasc_floppy_error " OK"
 12664:  
 12665:          .byte   ERRORCODE_20_READ_ERROR
 12666:          .byte   ERRORCODE_21_READ_ERROR
 12667:          .byte   ERRORCODE_22_READ_ERROR
 12668:          .byte   ERRORCODE_23_READ_ERROR
 12669:          .byte   ERRORCODE_24_READ_ERROR
 12670:          .byte   ERRORCODE_27_READ_ERROR
 12671:          htasc_floppy_error .sprintf("READ%c", ERRORCODE_09_ERROR)
 12672:  
 12673:          .byte   ERRORCODE_52_FILE_TOO_LARGE
 12674:          htasc_floppy_error .sprintf("%c TOO LARGE", ERRORCODE_03_FILE)
 12675:  
 12676:          .byte   ERRORCODE_50_RECORD_NOT_PRESENT
 12677:          htasc_floppy_error .sprintf("%c%c PRESENT", ERRORCODE_0B_RECORD, ERRORCODE_06_NOT)
 12678:  
 12679:          .byte   ERRORCODE_51_OVERFLOW_IN_RECORD
 12680:          htasc_floppy_error .sprintf("OVERFLOW IN%c", ERRORCODE_0B_RECORD)
 12681:  
 12682:          .byte   ERRORCODE_25_WRITE_ERROR
 12683:          .byte   ERRORCODE_28_WRITE_ERROR
 12684:          htasc_floppy_error .sprintf("%c%c", ERRORCODE_0A_WRITE, ERRORCODE_09_ERROR)
 12685:  
 12686:          .byte   ERRORCODE_26_WRITE_PROTECT_ON
 12687:          htasc_floppy_error .sprintf("%c PROTECT ON", ERRORCODE_0A_WRITE)
 12688:  
 12689:          .byte   ERRORCODE_29_DISK_ID_MISMATCH
 12690:          htasc_floppy_error .sprintf("%c ID%c", ERRORCODE_08_DISK, ERRORCODE_05_MISMATCH)
 12691:  
 12692:          .byte   ERRORCODE_30_SYNTAX_ERROR
 12693:          .byte   ERRORCODE_31_SYNTAX_ERROR
 12694:          .byte   ERRORCODE_32_SYNTAX_ERROR
 12695:          .byte   ERRORCODE_33_SYNTAX_ERROR
 12696:          .byte   ERRORCODE_34_SYNTAX_ERROR
 12697:          htasc_floppy_error .sprintf("SYNTAX%c", ERRORCODE_09_ERROR)
 12698:  
 12699:          .byte   ERRORCODE_60_WRITE_FILE_OPEN
 12700:          htasc_floppy_error .sprintf("%c%c%c", ERRORCODE_0A_WRITE, ERRORCODE_03_FILE, ERRORCODE_04_OPEN)
 12701:  
 12702:          .byte   ERRORCODE_63_FILE_EXISTS
 12703:          htasc_floppy_error .sprintf("%c EXISTS", ERRORCODE_03_FILE)
 12704:  
 12705:          .byte   ERRORCODE_64_FILE_TYPE_MISMATCH
 12706:          htasc_floppy_error .sprintf("%c TYPE%c", ERRORCODE_03_FILE, ERRORCODE_05_MISMATCH)
 12707:  
 12708:          .byte   ERRORCODE_65_NO_BLOCK
 12709:          htasc_floppy_error "NO BLOCK"
 12710:  
 12711:          .byte   ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR
 12712:          .byte   ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR
 12713:          htasc_floppy_error "ILLEGAL TRACK OR SECTOR"
 12714:  
 12715:          .byte   ERRORCODE_61_FILE_NOT_OPEN
 12716:          htasc_floppy_error .sprintf("%c%c%c", ERRORCODE_03_FILE, ERRORCODE_06_NOT, ERRORCODE_04_OPEN)
 12717:  
 12718:          .byte   ERRORCODE_39_FILE_NOT_FOUND
 12719:          .byte   ERRORCODE_62_FILE_NOT_FOUND
 12720:          htasc_floppy_error .sprintf("%c%c%c", ERRORCODE_03_FILE, ERRORCODE_06_NOT, ERRORCODE_07_FOUND)
 12721:  
 12722:          .byte   ERRORCODE_01_FILES_SCRATCHED
 12723:          htasc_floppy_error .sprintf("%cS SCRATCHED", ERRORCODE_03_FILE)
 12724:  
 12725:          .byte   ERRORCODE_70_NO_CHANNEL
 12726:          htasc_floppy_error "NO CHANNEL"
 12727:  
 12728:          .byte   ERRORCODE_71_DIR_ERROR
 12729:          htasc_floppy_error .sprintf("DIR%c", ERRORCODE_09_ERROR)
 12730:  
 12731:          .byte   ERRORCODE_72_DISK_FULL
 12732:          htasc_floppy_error .sprintf("%c FULL", ERRORCODE_08_DISK)
 12733:  
 12734:          .byte   ERRORCODE_73_IDENTIFY
 12735:  .if CompileDrive >= DRIVE_1571CR
 12736:          htasc_floppy_error      "CBM DOS V3.1 1571"
 12737:  .elseif CompileDrive >= DRIVE_1571
 12738:          htasc_floppy_error      "CBM DOS V3.0 1571"
 12739:  .elseif CompileDrive >= DRIVE_1570
 12740:          htasc_floppy_error      "CBM DOS V3.0 1570"
 12741:  .elseif CompileDrive >= DRIVE_1541
 12742:          htasc_floppy_error      "CBM DOS V2.6 1541"
 12743:  .elseif CompileDrive >= DRIVE_1540
 12744:          htasc_floppy_error      "CBM DOS V2.6 V170"
 12745:  .else
 12746:          htasc_floppy_error      "CBM DOS V2.6 2031"
 12747:  .endif
 12748:  
 12749:          .byte   ERRORCODE_74_DRIVE_NOT_READY
 12750:          htasc_floppy_error      .sprintf("DRIVE%c READY", ERRORCODE_06_NOT)
 12751:  
 12752:          ; pseudo-errorcodes which are used for re-occuring words:
 12753:  
 12754:          .byte   ERRORCODE_09_ERROR
 12755:          htasc_floppy_error "ERROR"
 12756:  
 12757:          .byte   ERRORCODE_0A_WRITE
 12758:          htasc_floppy_error "WRITE"
 12759:  
 12760:          .byte   ERRORCODE_03_FILE
 12761:          htasc_floppy_error "FILE"
 12762:  
 12763:          .byte   ERRORCODE_04_OPEN
 12764:          htasc_floppy_error "OPEN"
 12765:  
 12766:          .byte   ERRORCODE_05_MISMATCH
 12767:          htasc_floppy_error "MISMATCH"
 12768:  
 12769:          .byte   ERRORCODE_06_NOT
 12770:          htasc_floppy_error "NOT"
 12771:  
 12772:          .byte   ERRORCODE_07_FOUND
 12773:          htasc_floppy_error "FOUND"
 12774:  
 12775:          .byte   ERRORCODE_08_DISK
 12776:          htasc_floppy_error "DISK"
 12777:  
 12778:          .byte   ERRORCODE_0B_RECORD
 12779:          htasc_floppy_error "RECORD"
 12780:  
 12781:  ErrorCodeTable_End:
 12782:  
 12783:  LE60A:
 12784:  .if CompileDrive >= DRIVE_1570
 12785:          jmp     LA9B9
 12786:  .else
 12787:          pha
 12788:          stx     JOBNUM
 12789:  .endif
 12790:  
 12791:  LE60D:
 12792:          txa
 12793:          asl     a
 12794:          tax
 12795:          lda     TRACK0,x
 12796:          sta     TRACK
 12797:          lda     SECTOR0,x
 12798:          sta     SECTOR
 12799:          pla
 12800:  
 12801:          ; map error code $02 - $10 to external error codes $20-$29:
 12802:          ; $10 --> $24
 12803:          ; $0F --> $74 DRIVE NOT READY
 12804:          ; everything else: $0X --> $2X - 2
 12805:          and     #$0F
 12806:          beq     @LE625
 12807:          cmp     #$0F
 12808:          bne     @LE627
 12809:          lda     #ERRORCODE_74_DRIVE_NOT_READY
 12810:          bne     @LE62D
 12811:  @LE625:
 12812:          lda     #(ERRORCODE_24_READ_ERROR + 2) ^ ERRORCODE_20_READ_ERROR
 12813:  @LE627:
 12814:          ora     #ERRORCODE_20_READ_ERROR        ; generate errorcode in range $20 .. $29
 12815:          tax
 12816:          dex
 12817:          dex
 12818:          txa
 12819:  @LE62D:
 12820:          pha
 12821:          lda     CMDNUM
 12822:          cmp     #$00
 12823:          bne     @LE644
 12824:          lda     #$FF
 12825:          sta     CMDNUM
 12826:          pla
 12827:          jsr     SetErrorCode
 12828:          jsr     LD042
 12829:          jmp     LE648
 12830:  @LE644:
 12831:          pla
 12832:  
 12833:  LE645:
 12834:          jsr     SetErrorCode
 12835:  LE648:
 12836:          jsr     ClearCMDBUF
 12837:          lda     #$00
 12838:          sta     WBAM
 12839:          jsr     LC12C
 12840:          jsr     LD4DA
 12841:          lda     #$00
 12842:          sta     BUFTABCMD
 12843:          ldx     #<SP_END
 12844:          txs
 12845:          lda     ORGSA
 12846:          and     #$0F
 12847:          sta     SA
 12848:          cmp     #$0F
 12849:          beq     LE698
 12850:          sei                                     ; disallow interrupts --> blocking job loop
 12851:          lda     LSNACT
 12852:          bne     LE688
 12853:          lda     TLKACT
 12854:          bne     LE680
 12855:          ldx     SA
 12856:          lda     LINTAB,x
 12857:          cmp     #$FF
 12858:          beq     LE698
 12859:          and     #$0F
 12860:          sta     LINDX
 12861:          jmp     LE68E
 12862:  LE680:
 12863:          jsr     LD0EB
 12864:  .if CompileDrive >= DRIVE_1541_05
 12865:          FillNOP 3
 12866:  .elseif CompileDrive >= DRIVE_1540
 12867:          jsr     LEA4E
 12868:  .else
 12869:          jsr     LEA7C
 12870:  .endif
 12871:          bne     LE68E
 12872:  LE688:
 12873:          jsr     LD107
 12874:  .if CompileDrive >= DRIVE_1541_05
 12875:          FillNOP 3
 12876:  .elseif CompileDrive >= DRIVE_1540
 12877:          jsr     LEA4E
 12878:  .else
 12879:          jsr     LEA85
 12880:  .endif
 12881:  LE68E:
 12882:          jsr     LD125
 12883:          cmp     #$04
 12884:          bcs     LE698
 12885:          jsr     LD227
 12886:  LE698:
 12887:  .if CompileDrive >= DRIVE_1570
 12888:          jmp     MainLoopEntry1570
 12889:          ; --------------------------
 12890:  .else
 12891:          jmp     MainLoopEntry
 12892:          ; --------------------------
 12893:  .endif
 12894:  
 12895:  OutputBinIntoBUFTABERR:
 12896:  
 12897:          tax
 12898:  
 12899:          ; convert decimal to ascii representation
 12900:          ; the original routine contained a bug:
 12901:          ; As it switches to decimal mode, the interrupts must be inhibited
 12902:          ; or some bad things could happen.
 12903:          ; the patches (which are identical, only located differently) 
 12904:          ; contain exactly the same code as the original one, only prepended
 12905:          ; with "php; sei" as header and "plp" as footer
 12906:          ;
 12907:  .if CompileDrive >= DRIVE_1571_05
 12908:  
 12909:          jmp     Convert_Bin_To_BCD_Patch_157x
 12910:          CONVERT_BIN_TO_BCD_PARTIAL      ; unused garbage from original routine
 12911:  
 12912:  .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 12913:  
 12914:          jmp     Convert_Bin_To_BCD_Patch_154x
 12915:          CONVERT_BIN_TO_BCD_PARTIAL      ; unused garbage from original routine
 12916:  
 12917:  .else
 12918:          CONVERT_BIN_TO_BCD
 12919:  .endif
 12920:  
 12921:  ; Output a BCD value in A into BUFTABERR (+ y), incrementing y by 2.
 12922:  ;
 12923:  OutputBCDIntoBUFTABERR:
 12924:          cld
 12925:  
 12926:  ; this seems to be a wrong calling point, but as D is always 0, it
 12927:  ; does not do any harm here.
 12928:  ;
 12929:  OutputBCDIntoBUFTABERR_NoCLD:
 12930:          tax                                     ; remember A for later (low nibble)
 12931:  
 12932:          ; extract high nibble by shifting 4 to the right
 12933:          lsr     a
 12934:          lsr     a
 12935:          lsr     a
 12936:          lsr     a
 12937:  
 12938:          ; output high nibble
 12939:          jsr     @OutputBCDDigitInA
 12940:  
 12941:          ; get back original value (for outputting the low nibble)
 12942:          txa
 12943:  
 12944:  @OutputBCDDigitInA:
 12945:          and     #$0F                    ; extract the low nibble
 12946:          ora     #'0'                    ; convert into ASCII
 12947:  
 12948:          ; store the value into BUFTABERR + y
 12949:          sta     (BUFTABERR),y
 12950:          iny
 12951:  
 12952:          rts
 12953:          ; ------------
 12954:  
 12955:  SetNoError:
 12956:          jsr     LC123
 12957:  
 12958:          lda     #$00            ; error code for: 00, OK,00,00
 12959:  
 12960:  SetErrorCodeNoTS:
 12961:          ldy     #$00
 12962:          sty     TRACK
 12963:          sty     SECTOR
 12964:  
 12965:  SetErrorCode:
 12966:          ; init error buffer address (in BUFTABERR) and write pointer (in Y)
 12967:          ldy     #$00
 12968:          ldx     #<ERRBUF
 12969:          stx     BUFTABERR
 12970:          ldx     #>ERRBUF
 12971:          stx     BUFTABERR + 1
 12972:  
 12973:          ; output value of A into BUFTABERR (in ASCII)
 12974:          jsr     OutputBCDIntoBUFTABERR_NoCLD
 12975:  
 12976:          ; add a comma into the buffer
 12977:          lda     #','
 12978:          sta     (BUFTABERR),y
 12979:          iny
 12980:  
 12981:          ; @@@ TODO
 12982:          lda     ERRBUF
 12983:          sta     L0243
 12984:  
 12985:          ; get back the error number
 12986:          ; (it was written into X in OutputBCDIntoBUFTABERR_NoCLD)
 12987:          txa
 12988:  
 12989:          ; output the error text for the error in A
 12990:          jsr     OutputErrorText
 12991:  
 12992:          ; add a comma into the buffer
 12993:          lda     #','
 12994:          sta     (BUFTABERR),y
 12995:          iny
 12996:  
 12997:          ; output track
 12998:          lda     TRACK
 12999:          jsr     OutputBinIntoBUFTABERR
 13000:  
 13001:          ; add a comma into the buffer
 13002:          lda     #','
 13003:          sta     (BUFTABERR),y
 13004:          iny
 13005:  
 13006:          ; output sector
 13007:          lda     SECTOR
 13008:          jsr     OutputBinIntoBUFTABERR
 13009:  
 13010:          ; calculate the end address of the error buffer output
 13011:          dey
 13012:          tya
 13013:          clc
 13014:          adc     #<ERRBUF
 13015:  
 13016:          ; @@@ TODO store the end address
 13017:          ; (at the channel?)
 13018:          ;
 13019:          sta     LSTCHR + 5
 13020:          inc     BUFTABERR
 13021:  
 13022:          ; @@@ TODO
 13023:          lda     #$88
 13024:          sta     CHNRDY + 5
 13025:          rts
 13026:          ; -------------------
 13027:  
 13028:  ; ----------------------------------------
 13029:  ; output the error text for the error in A
 13030:  ; into BUFTABERR + Y
 13031:  ; ----------------------------------------
 13032:  ;
 13033:  OutputErrorText:
 13034:          tax                     ; remember error code
 13035:  
 13036:          ; push word at R0 onto stack, as this function is called recursively
 13037:          lda     R0
 13038:          pha
 13039:          lda     R0+1            ; a.k.a. R1
 13040:          pha
 13041:  
 13042:          ; put base address of error codes into pointer at R0
 13043:          lda     #<ErrorCodeTable
 13044:          sta     R0
 13045:          lda     #>ErrorCodeTable
 13046:          sta     R0+1
 13047:          txa                     ; get back remembered error code
 13048:  
 13049:          ldx     #$00
 13050:  
 13051:  @CompareErrorCode:
 13052:          cmp     (R0,x)                          ; compare error code to error code in error table
 13053:          beq     @Found                          ; found the code? Then jump.
 13054:  
 13055:          pha                                     ; remember error code
 13056:  
 13057:          jsr     ReadCurrentByteFromErrorTableAndIncrementAfterwards
 13058:          bcc     @RetryTestIfNotEndOfTable       ; still more error codes here --> try next one
 13059:  
 13060:          ; if we reach here, the current entry in the table has ended.
 13061:          ; now, skip the error text and try the next entry.
 13062:  
 13063:  @SkipErrorText:
 13064:          jsr     ReadCurrentByteFromErrorTableAndIncrementAfterwards
 13065:          bcc     @SkipErrorText
 13066:  
 13067:  @RetryTestIfNotEndOfTable:
 13068:          ; check if we did not reach the end of the error table yet
 13069:  
 13070:          lda     R0+1                            ; check high byte
 13071:          cmp     #>ErrorCodeTable_End            ; lower than end of table?
 13072:          bcc     @CheckNextErrorCode             ; yes, branch --> retry finding the code
 13073:  
 13074:          bne     @ErrorTableExhausted            ; bigger than end of table --> table is exhausted, abort search --> branch
 13075:  
 13076:          lda     #<ErrorCodeTable_End            ; check low byte
 13077:          cmp     R0
 13078:          bcc     @ErrorTableExhausted            ; end of error table reached, abort search --> branch
 13079:  
 13080:  @CheckNextErrorCode:
 13081:          pla                                     ; get back the error code
 13082:          jmp     @CompareErrorCode               ; and retry finding the code
 13083:  
 13084:  @ErrorTableExhausted:
 13085:          pla                                     ; discard the error code, we did not find it
 13086:          jmp     @RestoreFromStackAndExit
 13087:  
 13088:  
 13089:  @Found:
 13090:  
 13091:          ; skip until first byte that has bit 7 set is reached.
 13092:          ; This way, skip other error codes and proceed to the error text.
 13093:          ;
 13094:  @SkipOtherErrorCodes:
 13095:          jsr     ReadNextByteFromErrorTable
 13096:          bcc     @SkipOtherErrorCodes            ; bit 7 unset --> branch, read next one
 13097:  
 13098:  @OutputNextCharacter:
 13099:          jsr     @OutputCharacterOrPseudoError   ; output the character or whole string into the buffer
 13100:          jsr     ReadNextByteFromErrorTable      ; get next byte of error table
 13101:          bcc     @OutputNextCharacter            ; bit 7 unset --> read next one
 13102:          jsr     @OutputCharacterOrPseudoError   ; output the last character or while string into the buffer
 13103:  
 13104:  @RestoreFromStackAndExit:
 13105:          ; restore pointer at R0 from stack
 13106:          pla
 13107:          sta     R0+1
 13108:          pla
 13109:          sta     R0
 13110:          rts
 13111:  
 13112:  ; -----------------------------
 13113:  @OutputCharacterOrPseudoError:
 13114:          cmp     #ERRORCODE_NO_PSEUDO    ; is this a real PETSCII character?
 13115:          bcs     @StoreCharacter         ; yes --> branch, store the character and proceed
 13116:  
 13117:          ; we have a pseudo error code
 13118:          ; thus, recall ourself recursively in order to fill the buffer with the pseudo error code
 13119:  
 13120:          tax                             ; remember pseudo error code
 13121:  
 13122:          lda     #' '                    ; add a blank
 13123:          sta     (BUFTABERR),y           ; into the error text buffere
 13124:          iny                             ; proceed error text pointer
 13125:  
 13126:          txa                             ; restore pseudo error code
 13127:          jsr     OutputErrorText         ; and output the error text into the buffer
 13128:  
 13129:          rts
 13130:  
 13131:  @StoreCharacter:
 13132:          sta     (BUFTABERR),y           ; store the character into the error buffer
 13133:          iny                             ; proceed pointer into error buffer
 13134:          rts                             ; done
 13135:  
 13136:  ; read the next byte from the error table
 13137:  ; for this, the pointer is advanced by one.
 13138:  ;
 13139:  ; C contains bit 7 of the read byte.
 13140:  ; The read byte has bit 7 cleared.
 13141:  ;
 13142:  ReadNextByteFromErrorTable:
 13143:          inc     R0
 13144:          bne     ReadCurrentByteFromErrorTable
 13145:          inc     R0+1
 13146:  
 13147:  ; read the current byte from the error table
 13148:  ;
 13149:  ; C contains bit 7 of the read byte.
 13150:  ; The read byte has bit 7 cleared.
 13151:  ;
 13152:  ReadCurrentByteFromErrorTable:
 13153:          lda     (R0,x)
 13154:          asl     a
 13155:          lda     (R0,x)
 13156:          and     #$7F
 13157:          rts
 13158:  
 13159:  ReadCurrentByteFromErrorTableAndIncrementAfterwards:
 13160:          jsr     ReadCurrentByteFromErrorTable
 13161:          inc     R0
 13162:          bne     @LE77E
 13163:          inc     R0+1
 13164:  @LE77E:
 13165:          rts
 13166:  
 13167:  
 13168:  LE77F:
 13169:  
 13170:  .if CompileDrive >= DRIVE_1540
 13171:  .else
 13172:  
 13173:          ; 2031
 13174:  
 13175:          lda     VBC_PB1
 13176:          ora     #VBC_PB1_2031_DAV
 13177:          sta     VBC_PB1
 13178:          lda     VBC_DDRB1
 13179:          and     # ~ VBC_PB1_2031_DAV
 13180:          sta     VBC_DDRB1
 13181:  
 13182:  .endif
 13183:          rts
 13184:  
 13185:  CheckAutostart:
 13186:  
 13187:  .if CompileDrive = DRIVE_1541C_03
 13188:          FillNOP 34
 13189:          rts
 13190:  .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 13191:          jmp     TestATN
 13192:          FillNOP 31
 13193:          rts
 13194:  .elseif CompileDrive >= DRIVE_1541_05
 13195:          rts
 13196:          FillNOP 33
 13197:          rts
 13198:  .elseif CompileDrive >= DRIVE_1540
 13199:          lda     VBC_PB1
 13200:          tax
 13201:          and     #VBC_PB1_1540_CLOCKIN
 13202:          beq     LE77F
 13203:          txa
 13204:          and     #VBC_PB1_1540_DATAIN
 13205:          beq     LE77F
 13206:          cli                                     ; allow processing of job loop
 13207:  LE78E:
 13208:          lda     VBC_PB1
 13209:          and     #VBC_PB1_1540_DATAIN | VBC_PB1_1540_CLOCKIN
 13210:          bne     LE78E
 13211:          inc     F2CNT
 13212:          inc     CMDSIZ
 13213:          lda     #$2A
 13214:          sta     CMDBUF
 13215:          jmp     LE7A8
 13216:  
 13217:  .else   ; 2031
 13218:          lda     VBC_PA1
 13219:          bne     LE77F
 13220:  
 13221:          lda     VBC_DDRB1
 13222:          ora     #VBC_PB1_2031_DAV
 13223:          sta     VBC_DDRB1
 13224:          lda     VBC_PB1
 13225:          ora     #VBC_PB1_2031_DAV
 13226:          sta     VBC_PB1
 13227:          lda     VBC_PB1
 13228:          and     #VBC_PB1_2031_NRFD
 13229:          beq     LE77F
 13230:          lda     VBC_PB1
 13231:          and     # ~ VBC_PB1_2031_DAV
 13232:          sta     VBC_PB1
 13233:          lda     VBC_PB1
 13234:          and     #VBC_PB1_2031_NRFD
 13235:          bne     LE77F
 13236:  LE7BB:
 13237:          lda     VBC_PA1
 13238:          beq     LE7BB
 13239:          inc     F2CNT
 13240:          inc     CMDSIZ
 13241:          lda     #$2A
 13242:          sta     CMDBUF
 13243:          jsr     LE77F
 13244:          jmp     LE7A8
 13245:  
 13246:  .endif
 13247:  
 13248:  cmd_ampersand:
 13249:  
 13250:  .if CompileDrive >= DRIVE_1570
 13251:          jmp     LA5FE
 13252:          FillNOP 2
 13253:  .else
 13254:          lda     #$8D
 13255:          jsr     SearchInCmdline
 13256:  .endif
 13257:  
 13258:  LE7A8:
 13259:          jsr     NoOp
 13260:          lda     F2CNT
 13261:          pha
 13262:          lda     #$01
 13263:          sta     F2CNT
 13264:          lda     #$FF
 13265:          sta     R0
 13266:          jsr     LC44F
 13267:          lda     FILTRK
 13268:          bne     @LE7C5
 13269:          lda     #ERRORCODE_39_FILE_NOT_FOUND
 13270:          jsr     GenerateErrorMessage
 13271:  @LE7C5:
 13272:          pla
 13273:          sta     F2CNT
 13274:          lda     FILTRK
 13275:          sta     TRACK
 13276:          lda     FILSEC
 13277:          sta     SECTOR
 13278:          lda     #$03
 13279:          jsr     LD477
 13280:  @LE7D8:
 13281:          lda     #$00
 13282:          sta     R1
 13283:          jsr     @LE839
 13284:          sta     R2
 13285:          jsr     @LE84B
 13286:          jsr     @LE839
 13287:          sta     R3
 13288:          jsr     @LE84B
 13289:          lda     R0
 13290:          beq     @LE7FA
 13291:          lda     R2
 13292:          pha
 13293:          lda     R3
 13294:          pha
 13295:          lda     #$00
 13296:          sta     R0
 13297:  @LE7FA:
 13298:          jsr     @LE839
 13299:          sta     R4
 13300:          jsr     @LE84B
 13301:  @LE802:
 13302:          jsr     @LE839
 13303:          ldy     #$00
 13304:          sta     (R2),y
 13305:          jsr     @LE84B
 13306:          lda     R2
 13307:          clc
 13308:          adc     #$01
 13309:          sta     R2
 13310:          bcc     @LE817
 13311:          inc     R3
 13312:  @LE817:
 13313:          dec     R4
 13314:          bne     @LE802
 13315:          jsr     LCA35
 13316:          lda     DATA
 13317:          cmp     R1
 13318:          beq     @LE82C
 13319:          jsr     LDE3E
 13320:          lda     #ERRORCODE_50_RECORD_NOT_PRESENT
 13321:          jsr     LE645
 13322:  @LE82C:
 13323:          lda     EIOFLG
 13324:          bne     @LE7D8
 13325:          pla
 13326:          sta     R3
 13327:          pla
 13328:          sta     R2
 13329:          jmp     (R2)
 13330:  @LE839:
 13331:          jsr     LCA35
 13332:          lda     EIOFLG
 13333:          bne     @LE848
 13334:          jsr     LDE3E
 13335:          lda     #ERRORCODE_51_OVERFLOW_IN_RECORD
 13336:          jsr     LE645
 13337:  @LE848:
 13338:          lda     DATA
 13339:          rts
 13340:  
 13341:  @LE84B:
 13342:          clc
 13343:          adc     R1
 13344:          adc     #$00
 13345:          sta     R1
 13346:          rts
 13347:  
 13348:  ; Set the ATN pending flag to mark that the bus must be processed
 13349:  ;
 13350:  SetATNPending:
 13351:          lda     VBC_PA1
 13352:  
 13353:          ; set the ATN pending flag to mark that the bus must be processed
 13354:  
 13355:          lda     #$01
 13356:          sta     ATNPND
 13357:          rts
 13358:  
 13359:  
 13360:  ; This routine is called after an ATN was issued by the bus controller.
 13361:  ; It processes the bus and gets the command from it.
 13362:  ;
 13363:  ProcessBus:
 13364:  
 13365:          sei                                     ; disallow interrupts --> blocking job loop
 13366:  
 13367:          ; clear the ATN pending flag (as we already entered this routine, we do not need it anymore
 13368:  
 13369:          lda     #$00
 13370:          sta     ATNPND
 13371:  
 13372:  .if CompileDrive >= DRIVE_1540
 13373:  
 13374:          sta     LSNACT
 13375:          sta     TLKACT
 13376:  
 13377:  .endif
 13378:  
 13379:          ; set the stack pointer, effectively clearing the stack
 13380:          ; (Thus, we will NOT return with an RTS)
 13381:          ;
 13382:          ldx     #<SP_END                        ; set SP to $0145
 13383:          txs
 13384:  
 13385:  .if CompileDrive >= DRIVE_1540
 13386:  
 13387:          lda     #$80
 13388:          sta     EIOFLG
 13389:          sta     ATNMOD
 13390:          jsr     ClearClockOut
 13391:          jsr     SetDataOut
 13392:  
 13393:          ; Acknowledge ATN by dropping DATA
 13394:          lda     VBC_PB1
 13395:          ora     #VBC_PB1_1540_ATNA
 13396:          sta     VBC_PB1
 13397:  
 13398:  @LE87B:
 13399:          lda     VBC_PB1
 13400:          bpl     LE8D7
 13401:          and     #VBC_PB1_1540_CLOCKIN
 13402:          bne     @LE87B
 13403:  
 13404:  @LE884:
 13405:          jsr     LE9C9
 13406:          cmp     #$3F
 13407:          bne     @LE891
 13408:          lda     #$00
 13409:          sta     LSNACT
 13410:          beq     LE902
 13411:  @LE891:
 13412:          cmp     #$5F
 13413:          bne     @LE89B
 13414:          lda     #$00
 13415:          sta     TLKACT
 13416:          beq     LE902
 13417:  @LE89B:
 13418:          cmp     TLKADR
 13419:          bne     @LE8A9
 13420:          lda     #$01
 13421:          sta     TLKACT
 13422:          lda     #$00
 13423:          sta     LSNACT
 13424:          beq     @LE8D2
 13425:  @LE8A9:
 13426:          cmp     LSNADR
 13427:          bne     @LE8B7
 13428:          lda     #$01
 13429:          sta     LSNACT
 13430:          lda     #$00
 13431:          sta     TLKACT
 13432:          beq     @LE8D2
 13433:  @LE8B7:
 13434:          tax
 13435:          and     #$60
 13436:          cmp     #$60
 13437:          bne     LE8FD
 13438:          txa
 13439:          sta     ORGSA
 13440:          and     #$0F
 13441:          sta     SA
 13442:          lda     ORGSA
 13443:          and     #$F0
 13444:          cmp     #$E0
 13445:          bne     LE902
 13446:          cli                                     ; allow processing of job loop
 13447:          jsr     LDAC0
 13448:          sei                                     ; disallow interrupts --> blocking job loop
 13449:  @LE8D2:
 13450:          bit     VBC_PB1
 13451:          bmi     @LE884
 13452:  
 13453:  LE8D7:
 13454:          lda     #$00
 13455:          sta     ATNMOD
 13456:          lda     VBC_PB1
 13457:          and     # ~ VBC_PB1_1540_ATNA
 13458:          sta     VBC_PB1
 13459:          lda     LSNACT
 13460:          beq     LE8ED
 13461:          jsr     LEA2E
 13462:   .if CompileDrive >= DRIVE_1570
 13463:          jmp     MainLoopEntry1570
 13464:          ; --------------------------
 13465:   .else
 13466:          jmp     MainLoopEntry
 13467:          ; --------------------------
 13468:   .endif
 13469:  
 13470:  LE8ED:
 13471:          lda     TLKACT
 13472:          beq     LE8FA
 13473:          jsr     ClearDataOut
 13474:          jsr     SetClockOut
 13475:          jsr     LE909
 13476:  LE8FA:
 13477:          jmp     LEA4E
 13478:  LE8FD:
 13479:          lda     #VBC_PB1_1540_ATNA
 13480:          sta     VBC_PB1
 13481:  LE902:
 13482:          bit     VBC_PB1
 13483:          bpl     LE8D7
 13484:          bmi     LE902
 13485:  LE909:
 13486:          sei                                     ; disallow interrupts --> blocking job loop
 13487:          jsr     LD0EB
 13488:          bcs     LE915
 13489:  LE90F:
 13490:          ldx     LINDX
 13491:          lda     CHNRDY,x
 13492:          bmi     LE916
 13493:  LE915:
 13494:          rts
 13495:          ; --------------
 13496:  
 13497:  LE916:
 13498:          jsr     TestATN
 13499:          jsr     ReadIecBusIn
 13500:          and     #VBC_PB1_1540_DATAIN
 13501:          php
 13502:          jsr     ClearClockOut
 13503:          plp
 13504:          beq     @LE937
 13505:  
 13506:  @LE925:
 13507:          jsr     TestATN
 13508:          jsr     ReadIecBusIn
 13509:          and     #VBC_PB1_1540_DATAIN
 13510:          bne     @LE925
 13511:          ldx     LINDX
 13512:          lda     CHNRDY,x
 13513:          and     #$08
 13514:          bne     @LE94B
 13515:  @LE937:
 13516:          jsr     TestATN
 13517:          jsr     ReadIecBusIn
 13518:          and     #VBC_PB1_1540_DATAIN
 13519:          bne     @LE937
 13520:  @LE941:
 13521:          jsr     TestATN
 13522:          jsr     ReadIecBusIn
 13523:          and     #VBC_PB1_1540_DATAIN
 13524:          beq     @LE941
 13525:  @LE94B:
 13526:          jsr     SetClockOut
 13527:          jsr     TestATN
 13528:          jsr     ReadIecBusIn
 13529:          and     #VBC_PB1_1540_DATAIN
 13530:          bne     @LE94B
 13531:          lda     #$08
 13532:          sta     CONT
 13533:  @LE95C:
 13534:          jsr     ReadIecBusIn
 13535:          and     #VBC_PB1_1540_DATAIN
 13536:          bne     @LE999
 13537:          ldx     LINDX
 13538:          lda     L023E,x
 13539:          ror     a
 13540:          sta     L023E,x
 13541:          bcs     @LE973
 13542:          jsr     SetDataOut
 13543:          bne     @LE976
 13544:  @LE973:
 13545:          jsr     ClearDataOut
 13546:  @LE976:
 13547:          jsr     ClearClockOut
 13548:   .if CompileDrive >= DRIVE_1541_01
 13549:          lda     DRVTRK + 1
 13550:          bne     @LE980
 13551:          jsr     LFEF3
 13552:  @LE980:
 13553:          jsr     LFEFB
 13554:   .else
 13555:          FillNOP 4
 13556:          jsr     SetClockOut
 13557:          jsr     ClearDataOut
 13558:   .endif
 13559:          dec     CONT
 13560:          bne     @LE95C
 13561:  @LE987:
 13562:          jsr     TestATN
 13563:          jsr     ReadIecBusIn
 13564:          and     #VBC_PB1_1540_DATAIN
 13565:          beq     @LE987
 13566:          cli                                     ; allow processing of job loop
 13567:          jsr     LD3AA
 13568:          sei                                     ; disallow interrupts --> blocking job loop
 13569:          jmp     LE90F
 13570:          ; ---------------------------------
 13571:  @LE999:
 13572:          jmp     LEA4E
 13573:          ; ---------------------------------
 13574:  
 13575:  ClearDataOut:
 13576:          lda     VBC_PB1
 13577:          and     # ~ VBC_PB1_1540_DATAOUT
 13578:          sta     VBC_PB1
 13579:          rts
 13580:          ; ---------------------------------
 13581:  
 13582:  SetDataOut:
 13583:          lda     VBC_PB1
 13584:          ora     #VBC_PB1_1540_DATAOUT
 13585:          sta     VBC_PB1
 13586:          rts
 13587:          ; ---------------------------------
 13588:  
 13589:  SetClockOut:
 13590:          lda     VBC_PB1
 13591:          ora     #VBC_PB1_1540_CLOCKOUT
 13592:          sta     VBC_PB1
 13593:          rts
 13594:          ; ---------------------------------
 13595:  
 13596:  ClearClockOut:
 13597:          lda     VBC_PB1
 13598:          and     # ~ VBC_PB1_1540_CLOCKOUT
 13599:          sta     VBC_PB1
 13600:          rts
 13601:          ; ---------------------------------
 13602:  
 13603:  ReadIecBusIn:
 13604:          lda     VBC_PB1
 13605:          cmp     VBC_PB1
 13606:          bne     ReadIecBusIn
 13607:          rts
 13608:          ; ---------------------------------
 13609:  
 13610:  LE9C9:
 13611:          lda     #$08
 13612:          sta     CONT
 13613:  @LE9CD:
 13614:          jsr     TestATN
 13615:          jsr     ReadIecBusIn
 13616:          and     #VBC_PB1_1540_CLOCKIN
 13617:          bne     @LE9CD
 13618:  
 13619:          jsr     ClearDataOut
 13620:  
 13621:          lda     #>$0100
 13622:   .if CompileDrive >= DRIVE_1541_05
 13623:          jmp     LFF20
 13624:   .else
 13625:          sta     VBC_T1HC1
 13626:   .endif
 13627:  LE9DF:
 13628:          jsr     TestATN
 13629:          lda     VBC_IFR1
 13630:          and     #VIA_IFR_B_T1
 13631:          bne     @LE9F2
 13632:          jsr     ReadIecBusIn
 13633:          and     #VBC_PB1_1540_CLOCKIN
 13634:          beq     LE9DF
 13635:          bne     @LEA0B
 13636:          ; ----------------------
 13637:  
 13638:  @LE9F2:
 13639:          jsr     SetDataOut
 13640:          ldx     #$0A
 13641:  @LE9F7:
 13642:          dex
 13643:          bne     @LE9F7
 13644:          jsr     ClearDataOut
 13645:  @LE9FD:
 13646:          jsr     TestATN
 13647:          jsr     ReadIecBusIn
 13648:          and     #VBC_PB1_1540_CLOCKIN
 13649:          beq     @LE9FD
 13650:          lda     #$00
 13651:          sta     EIOFLG
 13652:  @LEA0B:
 13653:          lda     VBC_PB1
 13654:   .if CompileDrive >= DRIVE_1541_02
 13655:          eor     #VBC_PB1_1540_DATAIN
 13656:          lsr     a
 13657:          and     #VBC_PB1_1540_CLOCKIN / 2
 13658:          bne     @LEA0B
 13659:          FillNOP 3
 13660:   .else
 13661:          and     #VBC_PB1_1540_CLOCKIN
 13662:          bne     @LEA0B
 13663:          lda     VBC_PB1
 13664:          eor     #VBC_PB1_1540_DATAIN
 13665:          lsr     a
 13666:   .endif
 13667:          ror     DATA
 13668:  @LEA1A:
 13669:          jsr     TestATN
 13670:          jsr     ReadIecBusIn
 13671:          and     #VBC_PB1_1540_CLOCKIN
 13672:          beq     @LEA1A
 13673:          dec     CONT
 13674:          bne     @LEA0B
 13675:          jsr     SetDataOut
 13676:          lda     DATA
 13677:          rts
 13678:          ; ---------------------------------------
 13679:  
 13680:  LEA2E:
 13681:          sei                                     ; disallow interrupts --> blocking job loop
 13682:          jsr     LD107
 13683:          bcs     @LEA39
 13684:          lda     CHNRDY,x
 13685:          ror     a
 13686:          bcs     @LEA44
 13687:  @LEA39:
 13688:          lda     ORGSA
 13689:          and     #$F0
 13690:          cmp     #$F0
 13691:          beq     @LEA44
 13692:          jmp     LEA4E
 13693:  @LEA44:
 13694:          jsr     LE9C9
 13695:          cli                                     ; allow processing of job loop
 13696:          jsr     LCFB7
 13697:          jmp     LEA2E
 13698:          ; ---------------
 13699:  
 13700:  LEA4E:
 13701:          lda     #0
 13702:          sta     VBC_PB1
 13703:   .if CompileDrive >= DRIVE_1570
 13704:          jmp     MainLoopEntry1570
 13705:          ; --------------------------
 13706:   .else
 13707:          jmp     MainLoopEntry
 13708:          ; --------------------------
 13709:   .endif
 13710:  
 13711:          ; @@@ TODO unused leftover
 13712:          jmp     ProcessBus
 13713:          ; --------------------------
 13714:  
 13715:  TSTATN:
 13716:  TestATN:
 13717:          lda     ATNMOD
 13718:          beq     @LEA63
 13719:          lda     VBC_PB1
 13720:          bpl     @LEA6B
 13721:  @LEA62:
 13722:          rts
 13723:  @LEA63:
 13724:          lda     VBC_PB1
 13725:          bpl     @LEA62
 13726:  
 13727:   .if CompileDrive >= DRIVE_1570
 13728:          jmp     ProcessBus1570
 13729:   .elseif CompileDrive >= DRIVE_1541C_02
 13730:          jmp     Patch_ClearPALatch_ProcessBus
 13731:   .else
 13732:          jmp     ProcessBus
 13733:   .endif
 13734:  
 13735:  @LEA6B:
 13736:  
 13737:   .if CompileDrive >= DRIVE_1570
 13738:          jmp     LA9AC
 13739:   .else
 13740:          jmp     LE8D7
 13741:   .endif
 13742:  
 13743:  .else
 13744:  
 13745:  ; 2031
 13746:  
 13747:          lda     #VBC_PB1_2031_DAV | VBC_PB1_2031_EOI |VBC_PB1_2031_NDAC
 13748:          ora     VBC_PB1
 13749:          and     # ~ (VBC_PB1_2031_TE | VBC_PB1_2031_NRFD)
 13750:          sta     VBC_PB1
 13751:  
 13752:          lda     #$00
 13753:          sta     VBC_DDRA1               ; PA (DIO) as input
 13754:  
 13755:          lda     #VBC_PB1_2031_ATNA | VBC_PB1_2031_NRFD | VBC_PB1_2031_NDAC | VBC_PB1_2031_TE
 13756:          sta     VBC_DDRB1
 13757:  
 13758:          lda     #$FF
 13759:          sta     VBC_PA1
 13760:  
 13761:  LE8AA:
 13762:          lda     VBC_PB1
 13763:          and     # ~ VBC_PB1_2031_NDAC
 13764:          ora     #VBC_PB1_2031_NRFD | VBC_PB1_2031_ATNA
 13765:          sta     VBC_PB1
 13766:  
 13767:  @LE8B4:
 13768:          bit     VBC_PB1
 13769:          bvc     @LE8BD                  ; DAV unset -> branch
 13770:          bmi     @LE8B4                  ; -ATN set (ATN unset) -> branch
 13771:          bpl     @LE93A                  ; -ATN unsert (ATN set) -> branch
 13772:          ; -----------------
 13773:  
 13774:  @LE8BD:
 13775:          lda     # ~ VBC_PB1_2031_NRFD
 13776:          and     VBC_PB1
 13777:          sta     VBC_PB1
 13778:          and     #VBC_PB1_2031_EOI
 13779:          sta     EIOFLG
 13780:          lda     VBC_PA1
 13781:          eor     #$FF
 13782:          sta     ICMD
 13783:          lda     #VBC_PB1_2031_NDAC
 13784:          ora     VBC_PB1
 13785:          sta     VBC_PB1
 13786:          ldy     #$00
 13787:          lda     ICMD
 13788:          and     #IEEE_LISTEN | IEEE_TALK
 13789:          cmp     #IEEE_TALK
 13790:          beq     @LE90B
 13791:          cmp     #IEEE_LISTEN
 13792:          beq     @LE8EC
 13793:          cmp     #IEEE_OPEN
 13794:          beq     @LE919
 13795:          bne     @LE932
 13796:          ; -------------------------
 13797:  
 13798:  @LE8EC:
 13799:          lda     ICMD
 13800:          cmp     LSNADR
 13801:          beq     @LE8FD
 13802:          cmp     #$3F
 13803:          bne     @LE8F8
 13804:          sty     LSNACT
 13805:  @LE8F8:
 13806:          sty     ADRSED
 13807:          jmp     @LE932
 13808:  
 13809:  @LE8FD:
 13810:          sta     LSNACT
 13811:          sty     TLKACT
 13812:  @LE901:
 13813:          lda     #$20
 13814:          sta     SA
 13815:          sta     ORGSA
 13816:          sta     ADRSED
 13817:          bne     @LE932
 13818:  @LE90B:
 13819:          sty     TLKACT
 13820:          lda     ICMD
 13821:          cmp     TLKADR
 13822:          bne     @LE8F8
 13823:          sta     TLKACT
 13824:          sty     LSNACT
 13825:          beq     @LE901
 13826:  @LE919:
 13827:          lda     ADRSED
 13828:          beq     @LE932
 13829:          lda     ICMD
 13830:          sta     ORGSA
 13831:          pha
 13832:          and     #$0F
 13833:          sta     SA
 13834:          pla
 13835:          and     #$F0
 13836:          cmp     #$E0
 13837:          bne     @LE932
 13838:          cli                                     ; allow processing of job loop
 13839:          jsr     LDAC0
 13840:          sei                                     ; disallow interrupts --> blocking job loop
 13841:  @LE932:
 13842:          bit     VBC_PB1
 13843:          bvc     @LE932
 13844:          jmp     LE8AA
 13845:  @LE93A:
 13846:          lda     LSNACT
 13847:          beq     @LE94C
 13848:          lda     # ~ (VBC_PB1_2031_ATNA | VBC_PB1_2031_NRFD)
 13849:          and     VBC_PB1
 13850:          sta     VBC_PB1
 13851:          jsr     LE960
 13852:          jmp     MainLoopEntry
 13853:          ; ---------------
 13854:  
 13855:  @LE94C:
 13856:          lda     # ~ (VBC_PB1_2031_ATNA | VBC_PB1_2031_NDAC)
 13857:          and     VBC_PB1
 13858:          ora     #VBC_PB1_2031_NDAC
 13859:          sta     VBC_PB1
 13860:          lda     TLKACT
 13861:          beq     @LE95D
 13862:          jsr     LEA0A
 13863:  @LE95D:
 13864:          jmp     MainLoopEntry
 13865:          ; ------------------
 13866:  
 13867:  LE960:
 13868:          sei                                     ; disallow interrupts --> blocking job loop
 13869:          lda     #VBC_PB1_2031_NRFD
 13870:          ora     VBC_PB1
 13871:          sta     VBC_PB1
 13872:  @LE969:
 13873:          bit     VBC_PB1
 13874:          bmi     LE998
 13875:          bvs     @LE969
 13876:          jsr     LD107
 13877:          bcs     @LE97A
 13878:          lda     CHNRDY,x
 13879:          ror     a
 13880:          bcs     LE9CD
 13881:  @LE97A:
 13882:          lda     ORGSA
 13883:          and     #$F0
 13884:          cmp     #$F0
 13885:          beq     LE9CD
 13886:          lda     SA
 13887:          cmp     #$01
 13888:          beq     LE99B
 13889:  @LE988:
 13890:          bit     VBC_PB1
 13891:          bmi     LE998
 13892:          bvc     @LE988
 13893:          lda     # ~ VBC_PB1_2031_NDAC
 13894:          and     VBC_PB1
 13895:          sta     VBC_PB1
 13896:          rts
 13897:  LE998:
 13898:          jmp     ProcessBus
 13899:          ; -----------------------
 13900:  
 13901:  LE99B:
 13902:          sei                                     ; disallow interrupts --> blocking job loop
 13903:          lda     # ~ VBC_PB1_2031_NRFD
 13904:          and     VBC_PB1
 13905:          sta     VBC_PB1
 13906:          lda     #VBC_PB1_2031_NDAC
 13907:          ora     VBC_PB1
 13908:          sta     VBC_PB1
 13909:  @LE9AC:
 13910:          bit     VBC_PB1
 13911:          bmi     LE998
 13912:          bvc     @LE9AC
 13913:          lda     VBC_PB1
 13914:          and     # ~ VBC_PB1_2031_NDAC
 13915:          sta     VBC_PB1
 13916:          lda     #VBC_PB1_2031_NRFD
 13917:          ora     VBC_PB1
 13918:          sta     VBC_PB1
 13919:  @LE9C3:
 13920:          bit     VBC_PB1
 13921:          bmi     LE998
 13922:          bvc     @LE9C3
 13923:          jmp     LE99B
 13924:          ; -------------------
 13925:  
 13926:  LE9CD:
 13927:          lda     # ~ VBC_PB1_2031_NRFD
 13928:          and     VBC_PB1
 13929:          sta     VBC_PB1
 13930:          and     #VBC_PB1_2031_EOI
 13931:          sta     EIOFLG
 13932:          lda     VBC_PA1
 13933:          eor     #$FF
 13934:          sta     DATA
 13935:          sei                                     ; disallow interrupts --> blocking job loop
 13936:          lda     #VBC_PB1_2031_NDAC
 13937:          ora     VBC_PB1
 13938:          sta     VBC_PB1
 13939:  LE9E9:
 13940:          bit     VBC_PB1
 13941:          bmi     LE998
 13942:          bvc     LE9E9
 13943:          lda     # ~ VBC_PB1_2031_NDAC
 13944:          and     VBC_PB1
 13945:          sta     VBC_PB1
 13946:          cli                                     ; allow processing of job loop
 13947:          jsr     LCFB7
 13948:          jmp     LE960
 13949:          ; --------------------------
 13950:  LE9FF:
 13951:          lda     #VBC_PB1_2031_DAV | VBC_PB1_2031_EOI
 13952:          ora     VBC_PB1
 13953:          sta     VBC_PB1
 13954:          jmp     MainLoopEntry
 13955:          ; --------------------------
 13956:  LEA0A:
 13957:          sei                                     ; disallow interrupts --> blocking job loop
 13958:          jsr     LD0EB
 13959:          bcs     LEA16
 13960:  LEA10:
 13961:          ldx     LINDX
 13962:          lda     CHNRDY,x
 13963:          bmi     LEA17
 13964:  LEA16:
 13965:          rts
 13966:  LEA17:
 13967:          lda     #VBC_PB1_2031_DAV | VBC_PB1_2031_TE | VBC_PB1_2031_EOI | VBC_PB1_2031_ATNA
 13968:          sta     VBC_DDRB1
 13969:          lda     #$FF
 13970:          sta     VBC_DDRA1
 13971:          lda     VBC_PB1
 13972:          ora     #VBC_PB1_2031_TE
 13973:          sta     VBC_PB1
 13974:          lda     #VBC_PB1_2031_NRFD
 13975:  LEA2B:
 13976:          bit     VBC_PB1
 13977:          bmi     LEA79
 13978:          beq     LEA2B
 13979:          lda     L023E,x
 13980:          eor     #$FF
 13981:          sta     VBC_PA1
 13982:          lda     CHNRDY,x
 13983:          ora     # ~ (VBC_PB1_2031_DAV | VBC_PB1_2031_EOI)
 13984:          and     VBC_PB1
 13985:          sta     VBC_PB1
 13986:  LEA44:
 13987:          lda     VBC_PB1
 13988:          bmi     LEA79
 13989:          and     #VBC_PB1_2031_NRFD | VBC_PB1_2031_NDAC
 13990:          cmp     #VBC_PB1_2031_NRFD | VBC_PB1_2031_NDAC
 13991:          beq     LE9FF
 13992:          and     #VBC_PB1_2031_NRFD
 13993:          bne     LEA44
 13994:          cli                                     ; allow processing of job loop
 13995:          jsr     LD3AA
 13996:          sei                                     ; disallow interrupts --> blocking job loop
 13997:          lda     #VBC_PB1_2031_NDAC
 13998:  LEA5A:
 13999:          bit     VBC_PB1
 14000:          bmi     LEA79
 14001:          beq     LEA5A
 14002:          lda     #$FF
 14003:          sta     VBC_PA1
 14004:          lda     #VBC_PB1_2031_DAV | VBC_PB1_2031_EOI
 14005:          ora     VBC_PB1
 14006:          sta     VBC_PB1
 14007:          lda     #VBC_PB1_2031_NDAC
 14008:  LEA70:
 14009:          bit     VBC_PB1
 14010:          bmi     LEA79
 14011:          bne     LEA70
 14012:          beq     LEA10
 14013:          ; -----------------
 14014:  
 14015:  LEA79:
 14016:          jmp     ProcessBus
 14017:  LEA7C:
 14018:          lda     VBC_PB1
 14019:          ora     #VBC_PB1_2031_DAV
 14020:          sta     VBC_PB1
 14021:          rts
 14022:  LEA85:
 14023:          lda     #VBC_PB1_2031_NRFD
 14024:          ora     VBC_PB1
 14025:          and     # ~ VBC_PB1_2031_ATNA
 14026:          sta     VBC_PB1
 14027:          rts
 14028:  .endif
 14029:  
 14030:  
 14031:  ; Power On Self Test (POST) failed, signal it with blinking LEDs
 14032:  ; This routine enters an endless loop. That is, the floppy
 14033:  ; is blocked until a RESET occurs
 14034:  ;
 14035:  ; This routine entry point is used to tell about a ZP failure
 14036:  ;
 14037:  PostFailErrorZP:
 14038:          ldx     #$00                    ; number of blinks to signal (-1; that is, 0 means 1 blink)
 14039:          .byte   ASM_BIT3
 14040:  
 14041:  ; The routine entry point if used to tell about any non-ZP failure.
 14042:  ; For this, the number of blinks to perform is given as an input
 14043:  ; in T0
 14044:  ;
 14045:  PostFailError:
 14046:          ldx     T0                      ; number of blinks to signal (-1; that is, T0 = 3 means 4 blinks)
 14047:  
 14048:          txs                             ; remember it in the SP
 14049:                                          ; we do not need SP anymore, as we will not return
 14050:                                          ; thus, this is not a problem
 14051:  PostFailErrorRestartSequence:
 14052:          tsx                             ; get number of blinks to signal back to X
 14053:  
 14054:  PostFailErrorLoop:
 14055:  
 14056:          ; switch on the LED of drive 0 (the only one)
 14057:  
 14058:          lda     #VDC_PB2_DRIVE0LED
 14059:          ora     VDC_PB2
 14060:  
 14061:  .macro PATCH_POSTFAILERROR
 14062:          sta     VDC_PB2
 14063:          sta     VDC_DDRB2
 14064:  .endmacro
 14065:  
 14066:  .if CompileDrive >= DRIVE_1540
 14067:          jmp     PATCH_PostFailError
 14068:  .else
 14069:          PATCH_POSTFAILERROR
 14070:  .endif
 14071:  
 14072:  PATCH_PostFailError_END:
 14073:          tya                             ; A = 0
 14074:  
 14075:          ; perform a delay so the LED blinking will be visible
 14076:  
 14077:  @DelayOuter:
 14078:          clc
 14079:  
 14080:  @DelayInner:
 14081:          adc     #$01
 14082:          bne     @DelayInner
 14083:  
 14084:          dey
 14085:          bne     @DelayOuter
 14086:  
 14087:          ; switch off the LED of drive 0 (the only one)
 14088:  
 14089:          lda     VDC_PB2
 14090:          and     # ~ VDC_PB2_DRIVELEDS
 14091:          sta     VDC_PB2
 14092:  
 14093:  @AdditionalEndDelay:
 14094:          tya                             ; A = 0
 14095:  
 14096:          ; perform a delay so the LED blinking will be visible
 14097:  
 14098:  @DelayOuter2:
 14099:          clc
 14100:  @DelayInner2:
 14101:          adc     #$01
 14102:          bne     @DelayInner2
 14103:  
 14104:          dey
 14105:          bne     @DelayOuter2
 14106:  
 14107:  
 14108:          ; find out if the have to blink some more
 14109:  
 14110:          dex                             ; decrement number of blinks to perform
 14111:          bpl     PostFailErrorLoop       ; >= 0 --> branch, there are still blinks to perform
 14112:  
 14113:          ; here, the counter reached -1. Do an additional delay for two complete blink cycles
 14114:          ; to make sure the additional delay is visible, to give an impression of blink counts
 14115:          ;
 14116:          cpx     #-4
 14117:          bne     @AdditionalEndDelay
 14118:          beq     PostFailErrorRestartSequence    ; restart the complete sequence
 14119:          ; --------------------
 14120:  
 14121:  
 14122:  ; This is the RESET routine of the 6502
 14123:  
 14124:  RESET:
 14125:          sei                             ; make sure we are not disturbed by interrupts
 14126:          cld             ; make sure we are not in decimal mode
 14127:  
 14128:          ; initialize the bus controller
 14129:  
 14130:          ldx     #INIT_VBC_DDRA1
 14131:  
 14132:  .if CompileDrive < DRIVE_1540
 14133:  
 14134:          ; in case of the 2031, set DIO1-8 to high if configured as outputs
 14135:  
 14136:          stx     VBC_PA1
 14137:  .endif
 14138:  
 14139:  .if CompileDrive >= DRIVE_1541_05
 14140:          jmp     PATCH_INIT_BC   ; set the DDR of port A, as well as DDR of port B
 14141:                                  ; (more patches for 1570/1571, and even more for 1571CR)
 14142:  .else
 14143:          stx     VBC_DDRA1       ; set the DDR of the port A
 14144:  .endif
 14145:  
 14146:  PATCH_INIT_BC_END:
 14147:          inx
 14148:  
 14149:  .if CompileDrive < DRIVE_1540
 14150:          ; the 2031 initialises its port lines here.
 14151:          ; It seems the 1540 "forgot" this; that's why the above patch PATCH_INIT_BC is needed in 1541-05 ROMs (and above)
 14152:  
 14153:          lda     #VBC_PB1_2031_NATN | VBC_PB1_2031_DAV | VBC_PB1_2031_EOI | VBC_PB1_2031_NDAC | VBC_PB1_2031_NRFD
 14154:          sta     VBC_PB1
 14155:  
 14156:          ; set DDR for outputs ports
 14157:  
 14158:          lda     #VBC_PB1_2031_ATNA | VBC_PB1_2031_TE | VBC_PB1_2031_HDSEL
 14159:          sta     VBC_DDRB1
 14160:  .endif
 14161:  
 14162:          ; test and clear zeropage memory
 14163:  
 14164:          ; equivalent of:
 14165:          ; for (uint8_t * i=0; i < 256; i++) {
 14166:          ;    *i = (uint8_t) i;
 14167:          ; }
 14168:          ; that is, store into every ZP location a number which is the same as its own address
 14169:  
 14170:          ldy     #$00
 14171:          ldx     #$00
 14172:  @PresetZPLocations:
 14173:          txa
 14174:          sta     $0,x
 14175:          inx
 14176:          bne     @PresetZPLocations
 14177:  
 14178:          ; now, check if every ZP location still holds the value just written
 14179:  @CheckZPLocation:
 14180:          txa
 14181:          cmp     $0,x                    ; is the value the one written in the loop above?
 14182:          bne     PostFailErrorZP         ; no -> ZP error -> jump, error blinking for error in ZP
 14183:  
 14184:          ; now, increment value 256 times, resulting in the same value because of wrap-around
 14185:  @Inc256Times:
 14186:          inc     $0,x
 14187:          iny
 14188:          bne     @Inc256Times
 14189:  
 14190:          ; check: Do we *still* hold the value from above?
 14191:          cmp     $0,x
 14192:          bne     PostFailErrorZP         ; no -> ZP error -> jump, error blinking for error in ZP
 14193:  
 14194:          sty     $0,x                    ; set ZP location to 0. (Y == 0 after the previous loop at @Inc256Times)
 14195:          lda     $0,x                    ; get back the value.
 14196:          bne     PostFailErrorZP         ; not 0 -> ZP error -> jump, error blinking for error in ZP
 14197:  
 14198:          inx                             ; test next ZP location
 14199:          bne     @CheckZPLocation        ; and proceed until all ZP locations have been checked.
 14200:  
 14201:  
 14202:          ; (X == 0)
 14203:  
 14204:          ; from here on, all ZP locations are initialised to 0.
 14205:  
 14206:          ; calculate ROM checksum(s)
 14207:          ;
 14208:          ; The details vary among the different drives, as there are different types of ROMs
 14209:          ; involved.
 14210:          ; the 2031/1540/1541 test $C000-$DFFF, and then $E000-$FFFF
 14211:          ;
 14212:          ; the 1570 and 1571 test $8002-$FFFF in one call.
 14213:          ; BUG: the 1571-03 ROM has a bug, it does not test the area $8002-$8101; thus, it only tests $8102-$FFFF
 14214:          ;
 14215:  @CheckNextROM:
 14216:          inc     T0                      ; increment error blink counter for POST failures
 14217:  
 14218:          ; set the high byte of the ROM area to test
 14219:  
 14220:  .if CompileDrive >= DRIVE_1571_05
 14221:          ldx     #$7F                    ; for 1571-05, start with $7F00 ($8000, as it is incremented immediately)
 14222:  .elseif CompileDrive >= DRIVE_1570
 14223:          ldx     #$80                    ; for 1570 and 1571 before -05, start with $8000
 14224:                                          ; BUG: This is wrong, as $8000-$80FF is not included in the checksum this way!
 14225:                                          ; Note the "inc IP + 1" at @NextPage below, which skips $8000-$80FF.
 14226:  .else
 14227:          ; here, X == 0 already          ; for 2031/1540/1541, start with $0000, going backwards!
 14228:  .endif
 14229:          stx     IP + 1                  ; set the high byte
 14230:  
 14231:  .if CompileDrive >= DRIVE_1571_05
 14232:          inx                             ; X = $80 for 1571-05 ROMs and later.
 14233:                                          ; X is the number of pages of which to build the checksum
 14234:                                          ; For older 1570/1571 ROMs, it is already set this way
 14235:  .endif
 14236:  
 14237:          lda     #$00                    ; set the low byte of the start address
 14238:          sta     IP
 14239:  
 14240:  .if CompileDrive >= DRIVE_1570
 14241:          ldy     #<L8002                 ; for 1570 and above, skip the first two bytes ($8000, $8001)
 14242:  .else
 14243:          ; 2031/1540/1541 count backwards, and they test $20 pages every time
 14244:  
 14245:          tay                             ; Y = 0 (as A == 0 already), to start at the beginnig of the page
 14246:  
 14247:          ldx     #>$2000                 ; number of pages of which to build the checksum
 14248:  .endif
 14249:  
 14250:          clc
 14251:  
 14252:  @NextPage:
 14253:  
 14254:  .if CompileDrive >= DRIVE_1570
 14255:          ; 1570 and newer count forwards, pagewise:
 14256:  
 14257:          inc     IP + 1
 14258:  .else
 14259:          ; 2031/1540/1541 count backwards, pagewise:
 14260:          dec     IP + 1
 14261:  .endif
 14262:  
 14263:  @AddNextValue:
 14264:          adc     (IP),y                  ; add the current value to the checksum
 14265:          iny                             ; proceed to the next value
 14266:          bne     @AddNextValue           ; add that, too, until the page is completely processed
 14267:  
 14268:          dex                             ; are there still pages to check?
 14269:          bne     @NextPage               ; yes, proceed to next page
 14270:  
 14271:  .if CompileDrive >= DRIVE_1570
 14272:          adc     #$FF                    ; add -1 and carry
 14273:          sta     IP + 1                  ; should be zero; in this case, set IP + 1 to zero.
 14274:                                          ; (if not zero, this is not a problem, as we will go into an endless loop, anyway)
 14275:  .else
 14276:          adc     #$00                    ; add carry
 14277:          tax                             ; set X = $E0 (1st run) or $C0 (2nd run), if checksum is correct
 14278:                                          ; (if not correct, this is not a problem, as we will go into an endless loop, anyway)
 14279:          cmp     IP + 1                  ; test checksum
 14280:  .endif
 14281:          bne     @PostFailError          ; checksum error -> branch, report failure
 14282:  
 14283:  ; Check if there is another ROM to check, and repeat the check
 14284:  ; This only applies to 2031/1540/1541, as the 1570/1571 check the ROM in one approach only
 14285:  ;
 14286:  .if CompileDrive >= DRIVE_1571_05
 14287:          FillNOP 3
 14288:  .elseif CompileDrive >= DRIVE_1570
 14289:          FillNOP 4
 14290:  .else
 14291:          cpx     #>LC000                 ; check if we reached $C000 in our tests
 14292:          bne     @CheckNextROM           ; no, there is another ROM to check -> branch, check the next ROM
 14293:  .endif
 14294:  
 14295:  
 14296:          ; Now, check RAM area starting with $0100
 14297:  
 14298:          lda     #>RAM_PAGE1
 14299:          sta     IP + 1
 14300:  
 14301:          inc     T0                      ; increment error blink counter for POST failures
 14302:  
 14303:          ; Preset values into the RAM area
 14304:          ; equivalent to:
 14305:          ; for (uint8_t * i = 0x100; i < 0x800; i++) {
 14306:          ;    uint8_t high = ((uint16_t) i) >> 8;
 14307:          ;    *i = (uint8_t) (high + (uint8_t) i);
 14308:          ; }
 14309:          ; That is, every page starts with the number of the page ($0x00 is set to $0x),
 14310:          ; and every location after is incremented
 14311:  
 14312:          ldx     #>(RAM_END - RAM_PAGE1 + 1)     ; number of pages to check
 14313:  
 14314:          ; (we start with Y == 0)
 14315:  @RAMPresetValue:
 14316:  
 14317:          ; calculate (page no + index into page)
 14318:          tya                                     ; get index into page into A
 14319:          clc
 14320:          adc     IP + 1                          ; add the page no.
 14321:          sta     (IP),y                          ; and store in into the location
 14322:          iny                                     ; proceed to the next index into the current page
 14323:          bne     @RAMPresetValue                 ; still not reached end-of-page -> branch, preset next index
 14324:  
 14325:          inc     IP + 1                          ; proceed to next page
 14326:          dex                                     ; still pages to process?
 14327:          bne     @RAMPresetValue                 ; yes, continue
 14328:  
 14329:          ; Now, check the RAM contents if they match the values we just wrote
 14330:  
 14331:          ldx     #>(RAM_END - RAM_PAGE1 + 1)     ; number of pages to check
 14332:  
 14333:          ; We start checking from the end, as IP + 1 is already set beyond the end of the RAM area
 14334:  
 14335:  @RAMCheckPreviousPage:
 14336:          dec     IP + 1                          ; go back to the previous page
 14337:  
 14338:  @RAMCheckPageContents:
 14339:          dey                                     ; process previous index
 14340:  
 14341:          tya                                     ; get index into page into A
 14342:          clc
 14343:          adc     IP + 1                          ; add the page no.
 14344:          cmp     (IP),y                          ; and compare it with the current location
 14345:  
 14346:          bne     @PostFailError                  ; not equal -> we have a failure, report POST fail error
 14347:  
 14348:          eor     #$FF                            ; write the opposite bit mask
 14349:          sta     (IP),y                          ; into the RAM
 14350:  
 14351:          eor     (IP),y                          ; set A = 0 (only if the last write succeeded, that is)
 14352:          sta     (IP),y                          ; clear the location
 14353:          bne     @PostFailError                  ; if we did not reach 0 above, then there was an error --> fail POST
 14354:  
 14355:          tya                                     ; still locations in current page to check?
 14356:          bne     @RAMCheckPageContents           ; yes -> branch, process next location
 14357:  
 14358:          dex                                     ; still pages to be processed?
 14359:          bne     @RAMCheckPreviousPage           ; yes -> branch, check previous page
 14360:  
 14361:          beq     ShortReset                      ; every test was successfull, proceed to the short reset routine
 14362:          ; --------------------------------
 14363:  
 14364:  @PostFailError:
 14365:          jmp     PostFailError
 14366:  
 14367:  
 14368:  ; This is the short RESET routine. It does not clear the buffers, nor does it check the RAM or ROM
 14369:  
 14370:  ShortReset:
 14371:  
 14372:  .if CompileDrive >= DRIVE_1541C_02
 14373:          jmp     PATCH_ShortReset                ; add a SEI before the next commands
 14374:  .else
 14375:          ldx     #<SP_END                        ; set SP to $0145
 14376:          txs
 14377:  .endif
 14378:  
 14379:  PATCH_ShortReset_END:
 14380:  
 14381:          ; switch off all drive LEDs
 14382:  
 14383:          lda     VDC_PB2
 14384:          and     # ~ VDC_PB2_DRIVELEDS
 14385:          sta     VDC_PB2
 14386:  
 14387:  .if CompileDrive >= DRIVE_1570
 14388:          lda     #VIA_PCR_B_CA1_INPUT_POS_EDGE | VIA_PCR_B_CA2_INPUT_NEG
 14389:  .else
 14390:          lda     #VIA_PCR_B_CA1_INPUT_POS_EDGE
 14391:  .endif
 14392:          sta     VBC_PCR1
 14393:          lda     #VIA_IER_BW_SET | VIA_IER_B_CA1
 14394:          sta     VBC_IFR1                        ; @@@ TODO According to VIA documentation, this has no effect as the IFR for CA1 is reset by writing to PA
 14395:          sta     VBC_IER1                        ; enable interrupt on CA1
 14396:  
 14397:  .if CompileDrive >= DRIVE_1540
 14398:  
 14399:          ; find out the drive number to use
 14400:  
 14401:          lda     VBC_PB1                         ; get the drive no. switches
 14402:          and     #VBC_PB1_1540_DEVICENO0 | VBC_PB1_1540_DEVICENO1        ; isolate them
 14403:  
 14404:          asl     a                               ; move to the right position, resulting in index 0 - 3
 14405:          rol     a
 14406:          rol     a
 14407:          rol     a
 14408:  
 14409:  .else
 14410:  ; 2031
 14411:          ; set transmit enable (TE) in order to make sure no one is driving NRFD
 14412:          lda     VBC_PB1
 14413:          ora     #VBC_PB1_2031_TE
 14414:          sta     VBC_PB1
 14415:  
 14416:          ; set CA2 to low so we can read out the drive number diodes
 14417:          lda     VBC_PCR1
 14418:          ora     #VIA_PCR_B_CA2_OUTPUT_LOW
 14419:          and     #~VIA_PCR_B_CA2_INPUT_NEG
 14420:          sta     VBC_PCR1
 14421:  
 14422:          ; set bit for DEVICENO0 to input (DEVICENO1 already is!)
 14423:          lda     VBC_DDRB1
 14424:          and     # ~ VBC_PB1_2031_DEVICENO0
 14425:          sta     VBC_DDRB1
 14426:  
 14427:          lda     VBC_PB1                         ; get the drive no. switches
 14428:          and     #VBC_PB1_2031_DEVICENO0 | VBC_PB1_2031_DEVICENO1        ; isolate them
 14429:  .endif
 14430:  
 14431:          ora     #IEC_TALK | 8                   ; generate address for TALK ($40) and add 8, so we get an address 8 - 11
 14432:          sta     TLKADR                          ; store it
 14433:  
 14434:          eor     #IEC_TALK | IEC_LISTEN          ; generate address for LISTEN ($20+address)
 14435:          sta     LSNADR                          ; store it
 14436:  
 14437:  .if CompileDrive >= DRIVE_1540
 14438:  .else
 14439:          ; restore CA2 to an input
 14440:          lda     VBC_PCR1
 14441:          ora     #VIA_PCR_B_CA2_INPUT_NEG
 14442:          sta     VBC_PCR1
 14443:  
 14444:          ; set talk enable back, and also clear ATNA
 14445:          lda     VBC_PB1
 14446:          and     # ~ ( VBC_PB1_2031_TE | VBC_PB1_2031_ATNA )
 14447:          sta     VBC_PB1
 14448:  
 14449:          lda     VBC_DDRB1
 14450:          ora     #VBC_PB1_2031_DEVICENO0
 14451:          sta     VBC_DDRB1
 14452:  .endif
 14453:  
 14454:  
 14455:  ; Set the buffer pointers for the disk buffers
 14456:  
 14457:          ldx     #0
 14458:          ldy     #0
 14459:  
 14460:  :
 14461:          lda     #0                              ; set lower byte
 14462:          sta     BUFTAB0,x                       ; into buffer table
 14463:          inx
 14464:          lda     TableHighBytesOfBuffers,y       ; get higher byte
 14465:          sta     BUFTAB0,x                       ; and set it into buffer table
 14466:          inx
 14467:          iny                                     ; proceed to next buffer
 14468:          cpy     #BUFFERS_COUNT                  ; have we reached the last buffer
 14469:  bne     :-                              ; no -> jump, process the next buffer
 14470:  
 14471:          ; set BUFTABCMD
 14472:          lda     #<CMDBUF
 14473:          sta     BUFTAB0,x
 14474:          inx
 14475:          lda     #>CMDBUF
 14476:          sta     BUFTAB0,x
 14477:          inx
 14478:  
 14479:          ; set BUFTABERR
 14480:          lda     #<ERRBUF
 14481:          sta     BUFTAB0,x
 14482:          inx
 14483:          lda     #>ERRBUF
 14484:          sta     BUFTAB0,x
 14485:  
 14486:  ; @@@ TODO preset tables
 14487:  
 14488:          lda     #$FF
 14489:          ldx     #$12
 14490:  :
 14491:          sta     LINTAB,x
 14492:          dex
 14493:  bpl     :-
 14494:  
 14495:          ldx     #BUFFERS_COUNT
 14496:  :
 14497:          sta     BUF0,x
 14498:          sta     BUF1,x
 14499:          sta     SS,x
 14500:          dex
 14501:  bpl     :-
 14502:  
 14503:          lda     #>BUFFER2
 14504:          sta     BUF0 + 4
 14505:          lda     #>BUFFER3
 14506:          sta     BUF0 + 5
 14507:  
 14508:          ; set buffer 6 as invalid
 14509:          lda     #<$FFFF
 14510:          sta     BUF0 + 6
 14511:  ;       lda     #>$FFFF                 ; unneeded, but it is logically here
 14512:          sta     BUF1 + 6
 14513:  
 14514:          ; @@@ TODO
 14515:          lda     #$05
 14516:          sta     L023B
 14517:  
 14518:          ; @@@ TODO
 14519:          lda     #$84
 14520:          sta     L023A
 14521:          lda     #$0F
 14522:          sta     LINUSE
 14523:          lda     #$01
 14524:          sta     CHNRDY + 4
 14525:          lda     #$88
 14526:          sta     CHNRDY + 5
 14527:          lda     #$E0
 14528:          sta     BUFUSE
 14529:          lda     #$FF
 14530:          sta     BUFUSE + 1
 14531:  
 14532:          SET_WPSW_DIRTY_NO_CR
 14533:  
 14534:          sta     WPSW + 1
 14535:  
 14536:          jsr     InitJumpTableForUxCommands
 14537:          jsr     LCEFA                   ; @@@ TODO
 14538:  
 14539:          ; @@@ TODO: Initializes VDC T1 and IER, and tries to execute the job loop
 14540:  .if CompileDrive >= DRIVE_1570
 14541:          jsr     LFF82
 14542:  .elseif CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03
 14543:          jsr     LFF6F
 14544:  .else
 14545:          jsr     LF259
 14546:  .endif
 14547:  
 14548:          ; set pointer to function to execute on NMI to ShortReset
 14549:          lda     #<ShortReset
 14550:          sta     VNMI
 14551:          lda     #>ShortReset
 14552:          sta     VNMI + 1
 14553:  
 14554:  .if CompileDrive >= DRIVE_1570
 14555:          lda     #$06
 14556:  .else
 14557:          lda     #$0A
 14558:  .endif
 14559:          sta     SECINC                          ; set sector increment on allocation
 14560:  
 14561:          ; @@@ TODO
 14562:  
 14563:          lda     #$05
 14564:          sta     REVCNT
 14565:  
 14566:          lda     #ERRORCODE_73_IDENTIFY  ; error code for: 73,<DRIVE STARTUP TEXT>,00,00
 14567:          jsr     SetErrorCodeNoTS        ; produce error message in error channel
 14568:  
 14569:          ; initialize the IEC bus on IEC devices
 14570:          ; for the 2031, this has already been done above
 14571:          ;
 14572:  .if CompileDrive >= DRIVE_1541_05
 14573:  
 14574:          ; set all lines inactive
 14575:          lda     #0
 14576:          sta     VBC_PB1
 14577:  
 14578:          ; now, set the DDR to mark the output lines DATAOUT, CLOCKOUT and ATNA
 14579:          lda     #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA
 14580:          sta     VBC_DDRB1
 14581:  
 14582:  .elseif CompileDrive >= DRIVE_1540
 14583:  
 14584:          ; the 1540 and 1541 up to 1541-05 made a small mistake in that
 14585:          ; they first initialize DDRB, and then they initialize PB.
 14586:          ; This can lead to  some small signal on the IEC bus which can be
 14587:          ; problematic.
 14588:          ;
 14589:          ; Otherwise, they do exactly the same initialization
 14590:          ; as the 1541-05 and later
 14591:          ;
 14592:          lda     #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA
 14593:          sta     VBC_DDRB1
 14594:  
 14595:          lda     #0
 14596:          sta     VBC_PB1
 14597:  
 14598:  .endif
 14599:  
 14600:  .if CompileDrive >= DRIVE_1570
 14601:          jsr     LA786           ; @@@ TODO
 14602:  .else
 14603:          jsr     CheckAutostart
 14604:  .endif
 14605:  
 14606:  ; This is the entry to the main loop of the floppy drive.
 14607:  ; This entry is only used to come inside from "external".
 14608:  ; The main loop itself only loops to MainLoop
 14609:  ;
 14610:  MainLoopEntry:
 14611:          cli                                     ; allow processing of job loop
 14612:  
 14613:  .if CompileDrive >= DRIVE_1540
 14614:          ; make sure to release IEC output lines
 14615:          ; we are sure that no IEC communication takes place when we reach here
 14616:          ;
 14617:          lda     VBC_PB1
 14618:          and     # ~ (VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA)
 14619:          sta     VBC_PB1
 14620:  .endif
 14621:  
 14622:          ; check if there is a command waiting in the command buffer (CMDBUF)
 14623:          ;
 14624:          lda     CMDWAT
 14625:          beq     MainLoop                        ; no -> branch to the loop
 14626:  
 14627:          lda     #$00
 14628:          sta     CMDWAT                          ; delete flag so we do not execute this again next time we reach the loop
 14629:  
 14630:          ; parse the command and execute it
 14631:  
 14632:  .if CompileDrive >= DRIVE_1570
 14633:          FillNOP 2
 14634:          jmp     Patch1570CallToParseCommandBufferAndExecuteCommand
 14635:  .else
 14636:          sta     NMIFLG                          ; @@@ TODO WHY? Seems unnecessary to me (and has been left out for 1570 and above)
 14637:          jsr     ParseCommandBufferAndExecuteCommand
 14638:  .endif
 14639:  
 14640:  END_Patch1570CallToParseCommandBufferAndExecuteCommand:
 14641:  
 14642:  MainLoop:
 14643:          cli                                     ; allow processing of job loop
 14644:  
 14645:          lda     ATNPND                          ; is there currently an ATN pending?
 14646:          beq     @SkipBusProcessing              ; no -> branch, skip bus processing
 14647:  
 14648:          ; there is an ATN pending.
 14649:          ; Process the bus to get the command the computer wants to give us
 14650:  
 14651:  .if CompileDrive >= DRIVE_1570
 14652:          jmp     ProcessBus1570                  ; for 1570 and above, check which bus routines have to be used
 14653:  .elseif CompileDrive >= DRIVE_1541C_02
 14654:          jmp     Patch_ClearPALatch_ProcessBus   ; like earlier drives, but make sure to "unlatch" the PA content to get current values upon read
 14655:  .else
 14656:          jmp     ProcessBus
 14657:  .endif
 14658:  
 14659:  @SkipBusProcessing:
 14660:  
 14661:          cli                                     ; allow processing of job loop
 14662:  
 14663:          ; @@@ TODO
 14664:          ; most probably: determine how many open tasks there are for drive 0 (in T0)
 14665:          ; and for drive 1 (in T1)
 14666:  
 14667:          lda     #LINTAB_End - LINTAB
 14668:          sta     T3
 14669:  
 14670:          lda     #$00                            ; delete the number of active jobs
 14671:          sta     T0                              ; for drive 0 and
 14672:          sta     T1                              ; for drive 1
 14673:  
 14674:          ; check the channels if there is something for a drive
 14675:  
 14676:  @CheckNextChannel:
 14677:          ldx     T3
 14678:          lda     LINTAB,x
 14679:          cmp     #$FF
 14680:          beq     @NoChannelActivity              ; $FF -> channel inactive, skip incrementing
 14681:  
 14682:          and     #$3F
 14683:          sta     LINDX
 14684:          jsr     LDF93                           ; @@@ TODO
 14685:          tax
 14686:  
 14687:          lda     LSTJOB,x
 14688:          and     #$01                            ; extract the drive number (0 or 1)
 14689:          tax
 14690:          inc     T0,x                            ; increment the counter of active jobs for the right drive (0 or 1)
 14691:  
 14692:  @NoChannelActivity:
 14693:          dec     T3                              ; check the next channel
 14694:          bpl     @CheckNextChannel
 14695:  
 14696:          ; also check the job loop
 14697:          ;
 14698:          ldy     #JOBS4 - JOBS0                  ; no of jobs to test. Note that JOB5 (which is essentially not available) will not be tested!
 14699:  @CheckNextJob:
 14700:          lda     JOBS0,y                         ; get job code
 14701:          bpl     @NoJob                          ; positive -> no job available, skip incrementing
 14702:          and     #$01                            ; extract the drive number (0 or 1)
 14703:          tax
 14704:          inc     T0,x                            ; increment the counter of active jobs for the right drive (0 or 1)
 14705:  @NoJob:
 14706:          dey                                     ; check the next job
 14707:          bpl     @CheckNextJob
 14708:  
 14709:  
 14710:          ; switch on the drive LEDs if necessary, or switch them off
 14711:          ; according to the number of active jobs in T0 (drive 0) and T1 (drive 1)
 14712:  
 14713:          sei                                     ; disallow interrupts --> blocking job loop
 14714:  
 14715:          lda     VDC_PB2
 14716:          and     # ~ VDC_PB2_DRIVELEDS           ; get mask for everything but the drive LEDs
 14717:          pha                                     ; and remember it for processing
 14718:  
 14719:          ; remember current drive number for restoring at the end
 14720:          lda     DRVNUM
 14721:          sta     R0
 14722:  
 14723:          ; set drive number to 0
 14724:          lda     #$00
 14725:          sta     DRVNUM
 14726:  
 14727:          ; check number of jobs for drive 0
 14728:          lda     T0
 14729:          beq     @NoJobForDrive0                 ; is 0, no jump -> drive LED does not have to be switched on
 14730:  
 14731:          ; check if disk has been changed
 14732:          lda     WPSW
 14733:          beq     @SkipInitDrive0                 ; no -> branch, skip initialization for drive 0
 14734:  
 14735:          jsr     LD313                           ; @@@ TODO
 14736:  
 14737:  @SkipInitDrive0:
 14738:  
 14739:          ; remember to switch on LED for drive 0 when PB is written
 14740:          pla
 14741:          ora     #VDC_PB2_DRIVE0LED
 14742:          pha
 14743:  
 14744:  @NoJobForDrive0:
 14745:  
 14746:          ; set drive number to 1
 14747:          inc     DRVNUM
 14748:  
 14749:          ; check number of jobs for drive 1
 14750:          lda     T1
 14751:          beq     @NoJobForDrive1                 ; is 0, no jump -> drive LED does not have to be switched on
 14752:  
 14753:          ; check if disk has been changed
 14754:          lda     WPSW + 1
 14755:          beq     @SkipInitDrive1                 ; no -> branch, skip initialization for drive 1
 14756:  
 14757:          jsr     LD313                           ; @@@ TODO
 14758:  
 14759:  @SkipInitDrive1:
 14760:  
 14761:          ; remember to switch on LED for drive 0 when PB is written
 14762:          pla
 14763:          ora     #VDC_PB2_DRIVE1LED
 14764:          pha
 14765:  
 14766:  
 14767:  @NoJobForDrive1:
 14768:  
 14769:          ; restore current drive number
 14770:          lda     R0
 14771:          sta     DRVNUM
 14772:  
 14773:          ; get back mask for VBC_PB
 14774:          pla
 14775:  
 14776:          ; @@@ TODO: In case of an error, generate a blinking LED
 14777:          ldx     ERWORD
 14778:          beq     @SwitchOnLEDs
 14779:  
 14780:          lda     VDC_PB2
 14781:          cpx     #$80
 14782:          bne     @LEC81
 14783:          jmp     @LEC8B
 14784:  @LEC81:
 14785:          ldx     VBC_T1HC1
 14786:          bmi     @SwitchOnLEDs
 14787:          ldx     #$A0
 14788:          stx     VBC_T1HC1
 14789:  @LEC8B:
 14790:          dec     ERWORD
 14791:          bne     @SwitchOnLEDs
 14792:          eor     ERLED
 14793:          ldx     #$10
 14794:          stx     ERWORD
 14795:  
 14796:  @SwitchOnLEDs:
 14797:          sta     VDC_PB2                         ; switch on drive LEDs as determined above
 14798:          jmp     MainLoop                        ; continue with the main loop
 14799:          ; ----------------
 14800:  
 14801:  
 14802:  LEC9E:
 14803:          lda     #$00
 14804:          sta     SA
 14805:          lda     #$01
 14806:          jsr     LD1E2
 14807:          lda     #$00
 14808:          jsr     LD4C8
 14809:          ldx     LINDX
 14810:          lda     #$00
 14811:          sta     LSTCHR,x
 14812:          jsr     LDF93
 14813:          tax
 14814:          lda     DRVNUM
 14815:          sta     LSTJOB,x
 14816:          lda     #$01
 14817:          jsr     LCFF1
 14818:          lda     #$04
 14819:          jsr     LCFF1
 14820:          lda     #$01
 14821:          jsr     LCFF1
 14822:          jsr     LCFF1
 14823:          lda     NBTEMP
 14824:          jsr     LCFF1
 14825:          lda     #$00
 14826:          jsr     LCFF1
 14827:          jsr     LED59
 14828:          jsr     LDF93
 14829:          asl     a
 14830:          tax
 14831:          dec     BUFTAB0,x
 14832:          dec     BUFTAB0,x
 14833:          lda     #$00
 14834:          jsr     LCFF1
 14835:  LECEA:
 14836:          lda     #$01
 14837:          jsr     LCFF1
 14838:          jsr     LCFF1
 14839:          jsr     LC6CE
 14840:          bcc     LED23
 14841:          lda     NBTEMP
 14842:          jsr     LCFF1
 14843:          lda     NBTEMP + 1
 14844:          jsr     LCFF1
 14845:          jsr     LED59
 14846:          lda     #$00
 14847:          jsr     LCFF1
 14848:          bne     LECEA
 14849:  LED0D:
 14850:          jsr     LDF93
 14851:          asl     a
 14852:          tax
 14853:          lda     #$00
 14854:          sta     BUFTAB0,x
 14855:          lda     #$88
 14856:          ldy     LINDX
 14857:          sta     DIRLST
 14858:          sta     CHNRDY,y
 14859:          lda     DATA
 14860:          rts
 14861:  
 14862:  LED23:
 14863:          lda     NBTEMP
 14864:          jsr     LCFF1
 14865:          lda     NBTEMP + 1
 14866:          jsr     LCFF1
 14867:          jsr     LED59
 14868:          jsr     LDF93
 14869:          asl     a
 14870:          tax
 14871:          dec     BUFTAB0,x
 14872:          dec     BUFTAB0,x
 14873:          lda     #$00
 14874:          jsr     LCFF1
 14875:          jsr     LCFF1
 14876:          jsr     LCFF1
 14877:          jsr     LDF93
 14878:          asl     a
 14879:          tay
 14880:          lda     BUFTAB0,y
 14881:          ldx     LINDX
 14882:          sta     LSTCHR,x
 14883:          dec     LSTCHR,x
 14884:          jmp     LED0D
 14885:  LED59:
 14886:          ldy     #$00
 14887:  LED5B:
 14888:          lda     NAMBUF,y
 14889:          jsr     LCFF1
 14890:          iny
 14891:          cpy     #$1B
 14892:          bne     LED5B
 14893:          rts
 14894:  LED67:
 14895:          jsr     LD137
 14896:          beq     LED6D
 14897:          rts
 14898:  LED6D:
 14899:          sta     DATA
 14900:          ldy     LINDX
 14901:          lda     LSTCHR,y
 14902:          beq     LED7E
 14903:          lda     #$80
 14904:          sta     CHNRDY,y
 14905:          lda     DATA
 14906:          rts
 14907:  LED7E:
 14908:          pha
 14909:          jsr     LECEA
 14910:          pla
 14911:          rts
 14912:  cmd_validate:
 14913:          jsr     LC1D1
 14914:          jsr     LD042
 14915:          lda     #$40
 14916:          sta     WBAM
 14917:  .if CompileDrive >= DRIVE_1571_05
 14918:          jsr     LAA69
 14919:  .elseif CompileDrive >= DRIVE_1571
 14920:          jsr     LA7C7
 14921:  .else
 14922:          jsr     LEEB7
 14923:  .endif
 14924:          lda     #$00
 14925:          sta     DELIND
 14926:          jsr     LC5AC
 14927:          bne     LEDD9
 14928:  LED9C:
 14929:          lda     #$00
 14930:          sta     SECTOR
 14931:          lda     LFE85
 14932:          sta     TRACK
 14933:          jsr     LEDE5
 14934:          lda     #$00
 14935:          sta     WBAM
 14936:          jsr     LEEFF
 14937:          jmp     CommandEnd
 14938:  LEDB3:
 14939:          iny
 14940:          lda     (DIRBUF),y
 14941:          pha
 14942:          iny
 14943:          lda     (DIRBUF),y
 14944:          pha
 14945:          ldy     #$13
 14946:          lda     (DIRBUF),y
 14947:          beq     LEDCB
 14948:          sta     TRACK
 14949:          iny
 14950:          lda     (DIRBUF),y
 14951:          sta     SECTOR
 14952:          jsr     LEDE5
 14953:  LEDCB:
 14954:          pla
 14955:          sta     SECTOR
 14956:          pla
 14957:          sta     TRACK
 14958:          jsr     LEDE5
 14959:  LEDD4:
 14960:          jsr     LC604
 14961:          beq     LED9C
 14962:  LEDD9:
 14963:          ldy     #$00
 14964:          lda     (DIRBUF),y
 14965:          bmi     LEDB3
 14966:          jsr     LC8B6
 14967:          jmp     LEDD4
 14968:  LEDE5:
 14969:          jsr     LD55F
 14970:          jsr     LEF90
 14971:          jsr     LD475
 14972:  LEDEE:
 14973:          lda     #$00
 14974:          jsr     LD4C8
 14975:          jsr     LD137
 14976:          sta     TRACK
 14977:          jsr     LD137
 14978:          sta     SECTOR
 14979:          lda     TRACK
 14980:          bne     LEE04
 14981:          jmp     LD227
 14982:  LEE04:
 14983:          jsr     LEF90
 14984:          jsr     LD44D
 14985:          jmp     LEDEE
 14986:  cmd_new:jsr     LC312
 14987:          lda     FILDRV
 14988:          bpl     LEE19
 14989:          lda     #ERRORCODE_33_SYNTAX_ERROR
 14990:          jmp     GenerateErrorMessage
 14991:          ; ----------------
 14992:  
 14993:  LEE19:
 14994:          and     #$01
 14995:          sta     DRVNUM
 14996:  .if CompileDrive >= DRIVE_1570
 14997:          jsr     LFF9C
 14998:  .elseif CompileDrive >= DRIVE_1541C_02
 14999:          jsr     LFF7F
 15000:  .else
 15001:          jsr     LC100
 15002:  .endif
 15003:          lda     DRVNUM
 15004:          asl     a
 15005:          tax
 15006:          ldy     FILTBL + 1
 15007:          cpy     CMDSIZ
 15008:          beq     LEE46
 15009:          lda     CMDBUF,y
 15010:          sta     DiskID0,x
 15011:          lda     CMDBUF + 1,y
 15012:          sta     DiskID0 + 1,x
 15013:          jsr     LD307
 15014:          lda     #$01
 15015:          sta     TRACK
 15016:  .if CompileDrive >= DRIVE_1541C_01 .or CompileDrive = DRIVE_1541_06AA
 15017:          jsr     LFF2F
 15018:  .else
 15019:          jsr     LC8C6
 15020:  .endif
 15021:  
 15022:  .if CompileDrive >= DRIVE_1571
 15023:          jmp     LA764
 15024:  .else
 15025:          jsr     LF005
 15026:  .endif
 15027:  LEE43:
 15028:          jmp     LEE56
 15029:  LEE46:
 15030:          jsr     LD042
 15031:          ldx     DRVNUM
 15032:          lda     DSKVER,x
 15033:          cmp     LFED5
 15034:          beq     LEE56
 15035:          jmp     LD572
 15036:  LEE56:
 15037:  .if CompileDrive >= DRIVE_1570
 15038:          jsr     LA7C7
 15039:  .else
 15040:          jsr     LEEB7
 15041:  .endif
 15042:          lda     JOBNUM
 15043:          tay
 15044:          asl     a
 15045:          tax
 15046:          lda     LFE85 + 3
 15047:          sta     BUFTAB0,x
 15048:          ldx     FILTBL
 15049:          lda     #$1B
 15050:          jsr     LC66E
 15051:          ldy     #$12
 15052:          ldx     DRVNUM
 15053:          lda     LFED5
 15054:          sta     DSKVER,x
 15055:          txa
 15056:          asl     a
 15057:          tax
 15058:          lda     DiskID0,x
 15059:          sta     (DIRBUF),y
 15060:          iny
 15061:          lda     DiskID0 + 1,x
 15062:          sta     (DIRBUF),y
 15063:          iny
 15064:          iny
 15065:          lda     #$32
 15066:          sta     (DIRBUF),y
 15067:          iny
 15068:          lda     LFED5
 15069:          sta     (DIRBUF),y
 15070:          ldy     #$02
 15071:          sta     (BMPNT),y
 15072:          lda     LFE85
 15073:          sta     TRACK
 15074:          jsr     LEF93
 15075:          lda     #$01
 15076:          sta     SECTOR
 15077:          jsr     LEF93
 15078:          jsr     LEEFF
 15079:          jsr     LF005
 15080:          ldy     #$01
 15081:          lda     #$FF
 15082:          sta     (BMPNT),y
 15083:          jsr     LD464
 15084:          dec     SECTOR
 15085:  .if CompileDrive >= DRIVE_1571
 15086:          jsr     LD042
 15087:  .else
 15088:          jsr     LD460
 15089:  .endif
 15090:          jmp     CommandEnd
 15091:  LEEB7:
 15092:          jsr     LF0D1
 15093:          ldy     #$00
 15094:          lda     #$12
 15095:          sta     (BMPNT),y
 15096:          iny
 15097:          tya
 15098:          sta     (BMPNT),y
 15099:          iny
 15100:          iny
 15101:          iny
 15102:  LEEC7:
 15103:          lda     #$00
 15104:          sta     T0
 15105:          sta     T1
 15106:          sta     T2
 15107:          tya
 15108:          lsr     a
 15109:          lsr     a
 15110:          jsr     LF24B
 15111:          sta     (BMPNT),y
 15112:          iny
 15113:          tax
 15114:  LEED9:
 15115:          sec
 15116:          rol     T0
 15117:          rol     T1
 15118:          rol     T2
 15119:          dex
 15120:          bne     LEED9
 15121:  LEEE3:
 15122:          lda     T0,x
 15123:          sta     (BMPNT),y
 15124:          iny
 15125:          inx
 15126:          cpx     #$03
 15127:          bcc     LEEE3
 15128:          cpy     #$90
 15129:          bcc     LEEC7
 15130:          jmp     LD075
 15131:  LEEF4:
 15132:          jsr     LDF93
 15133:          tax
 15134:          lda     LSTJOB,x
 15135:          and     #$01
 15136:          sta     DRVNUM
 15137:  LEEFF:
 15138:          ldy     DRVNUM
 15139:          lda     MDIRTY,y
 15140:          bne     LEF07
 15141:          rts
 15142:  LEF07:
 15143:          lda     #$00
 15144:          sta     MDIRTY,y
 15145:          jsr     LEF3A
 15146:          lda     DRVNUM
 15147:          asl     a
 15148:          pha
 15149:          jsr     LF0A5
 15150:          pla
 15151:          clc
 15152:          adc     #$01
 15153:          jsr     LF0A5
 15154:          lda     TRACK
 15155:          pha
 15156:          lda     #$01
 15157:          sta     TRACK
 15158:  LEF24:
 15159:          asl     a
 15160:          asl     a
 15161:          sta     BMPNT
 15162:  .if CompileDrive >= DRIVE_1571
 15163:          jsr     LA937
 15164:  .else
 15165:          jsr     LF220
 15166:  .endif
 15167:          inc     TRACK
 15168:          lda     TRACK
 15169:          cmp     MAXTRACK_ADJUSTED
 15170:          bcc     LEF24
 15171:          pla
 15172:          sta     TRACK
 15173:  .if CompileDrive >= DRIVE_1571
 15174:          jmp     LA58D
 15175:  .else
 15176:          jmp     LD58A
 15177:  .endif
 15178:  LEF3A:
 15179:          jsr     LF10F
 15180:          tax
 15181:          jsr     LF0DF
 15182:          ldx     JOBNUM
 15183:          lda     TableHighBytesOfBuffers,x
 15184:          sta     BMPNT + 1
 15185:          lda     #$00
 15186:          sta     BMPNT
 15187:          rts
 15188:  LEF4D:
 15189:          ldx     DRVNUM
 15190:          lda     NDBL,x
 15191:          sta     NBTEMP
 15192:          lda     NDBH,x
 15193:          sta     NBTEMP + 1
 15194:          rts
 15195:          jsr     LEFF1
 15196:  LEF5F:
 15197:  .if CompileDrive >= DRIVE_1571
 15198:          jmp     LA83E
 15199:  .else
 15200:          jsr     LEFCF
 15201:  .endif
 15202:  LEF62:
 15203:          sec
 15204:          bne     LEF87
 15205:          lda     (BMPNT),y
 15206:          ora     LEFE9,x
 15207:          sta     (BMPNT),y
 15208:          jsr     LEF88
 15209:          ldy     T0
 15210:          clc
 15211:          lda     (BMPNT),y
 15212:          adc     #$01
 15213:          sta     (BMPNT),y
 15214:          lda     TRACK
 15215:          cmp     LFE85
 15216:          beq     LEFBA
 15217:  LEF7F:
 15218:          inc     NDBL,x
 15219:          bne     LEF87
 15220:          inc     NDBH,x
 15221:  LEF87:
 15222:          rts
 15223:  LEF88:
 15224:          ldx     DRVNUM
 15225:          lda     #$01
 15226:          sta     MDIRTY,x
 15227:          rts
 15228:  LEF90:
 15229:          jsr     LEFF1
 15230:  LEF93:
 15231:  .if CompileDrive >= DRIVE_1571
 15232:          jmp     LA874
 15233:  .else
 15234:          jsr     LEFCF
 15235:  .endif
 15236:  LEF96:
 15237:          beq     LEFCE
 15238:          lda     (BMPNT),y
 15239:          eor     LEFE9,x
 15240:          sta     (BMPNT),y
 15241:          jsr     LEF88
 15242:          ldy     T0
 15243:          lda     (BMPNT),y
 15244:          sec
 15245:          sbc     #$01
 15246:          sta     (BMPNT),y
 15247:          lda     TRACK
 15248:          cmp     LFE85
 15249:          beq     LEFBD
 15250:  LEFB2:
 15251:          lda     NDBL,x
 15252:          bne     LEFBA
 15253:          dec     NDBH,x
 15254:  LEFBA:
 15255:          dec     NDBL,x
 15256:  LEFBD:
 15257:          lda     NDBH,x
 15258:          bne     LEFCE
 15259:          lda     NDBL,x
 15260:  .if CompileDrive >= DRIVE_1571_05
 15261:          jmp     LAAF0
 15262:          FillNOP 1
 15263:  .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 15264:          jmp     LC047
 15265:          FillNOP 1
 15266:  .else
 15267:          cmp     #$03
 15268:          bcs     LEFCE
 15269:  .endif
 15270:  
 15271:          lda     #ERRORCODE_72_DISK_FULL
 15272:          jsr     SetErrorCode
 15273:  LEFCE:
 15274:          rts
 15275:  LEFCF:
 15276:          jsr     LF011
 15277:          tya
 15278:          sta     T0
 15279:  LEFD5:
 15280:          lda     SECTOR
 15281:          lsr     a
 15282:          lsr     a
 15283:          lsr     a
 15284:          sec
 15285:          adc     T0
 15286:          tay
 15287:          lda     SECTOR
 15288:          and     #$07
 15289:          tax
 15290:          lda     (BMPNT),y
 15291:          and     LEFE9,x
 15292:          rts
 15293:  LEFE9:
 15294:          .byte   $01,$02,$04,$08,$10,$20,$40,$80
 15295:  LEFF1:
 15296:          lda     #$FF
 15297:          bit     WBAM
 15298:          beq     LF004
 15299:          bpl     LF004
 15300:          bvs     LF004
 15301:          lda     #$00
 15302:          sta     WBAM
 15303:  .if CompileDrive >= DRIVE_1571
 15304:          jmp     LA58D
 15305:  .else
 15306:          jmp     LD58A
 15307:  .endif
 15308:  LF004:
 15309:          rts
 15310:  LF005:
 15311:  .if CompileDrive >= DRIVE_1571
 15312:          jmp     LA738
 15313:  .else
 15314:          jsr     LEF3A
 15315:  .endif
 15316:  LF008:
 15317:          ldy     #$00
 15318:          tya
 15319:  LF00B:
 15320:          sta     (BMPNT),y
 15321:          iny
 15322:          bne     LF00B
 15323:          rts
 15324:  LF011:
 15325:          lda     T0
 15326:          pha
 15327:          lda     T1
 15328:          pha
 15329:  .if CompileDrive >= DRIVE_1570
 15330:          jmp     LAA25
 15331:          FillNOP 1
 15332:  .elseif CompileDrive >= DRIVE_1541C_02
 15333:          jmp     LFFB0
 15334:          FillNOP 1
 15335:  .else
 15336:          ldx     DRVNUM
 15337:          lda     NODRV,x
 15338:  .endif
 15339:  LF01B:
 15340:          beq     LF022
 15341:          lda     #ERRORCODE_74_DRIVE_NOT_READY
 15342:  .if CompileDrive >= DRIVE_1571_05
 15343:          jsr     LE645
 15344:  .else
 15345:          jsr     LE648
 15346:  .endif
 15347:  LF022:
 15348:          jsr     LF10F
 15349:          sta     T0
 15350:          txa
 15351:          asl     a
 15352:          sta     T1
 15353:          tax
 15354:          lda     TRACK
 15355:          cmp     TBAM,x
 15356:          beq     LF03E
 15357:          inx
 15358:          stx     T1
 15359:          cmp     TBAM,x
 15360:          beq     LF03E
 15361:          jsr     LF05B
 15362:  LF03E:
 15363:          lda     T1
 15364:          ldx     DRVNUM
 15365:          sta     UBAM,x
 15366:          asl     a
 15367:          asl     a
 15368:          clc
 15369:          adc     #$A1
 15370:          sta     BMPNT
 15371:          lda     #$02
 15372:          adc     #$00
 15373:          sta     BMPNT + 1
 15374:          ldy     #$00
 15375:          pla
 15376:          sta     T1
 15377:          pla
 15378:          sta     T0
 15379:          rts
 15380:  LF05B:
 15381:          ldx     T0
 15382:          jsr     LF0DF
 15383:          lda     DRVNUM
 15384:          tax
 15385:          asl     a
 15386:          ora     UBAM,x
 15387:          eor     #$01
 15388:          and     #$03
 15389:          sta     T1
 15390:          jsr     LF0A5
 15391:          lda     JOBNUM
 15392:          asl     a
 15393:          tax
 15394:          lda     TRACK
 15395:          asl     a
 15396:          asl     a
 15397:          sta     BUFTAB0,x
 15398:          lda     T1
 15399:          asl     a
 15400:          asl     a
 15401:          tay
 15402:  LF07F:
 15403:          lda     (BUFTAB0,x)
 15404:          sta     BAM,y
 15405:          lda     #$00
 15406:          sta     (BUFTAB0,x)
 15407:          inc     BUFTAB0,x
 15408:          iny
 15409:          tya
 15410:          and     #$03
 15411:          bne     LF07F
 15412:          ldx     T1
 15413:          lda     TRACK
 15414:          sta     TBAM,x
 15415:          lda     WBAM
 15416:          bne     LF09F
 15417:  .if CompileDrive >= DRIVE_1571
 15418:          jmp     LA58D
 15419:  .else
 15420:          jmp     LD58A
 15421:  .endif
 15422:  LF09F:
 15423:          ora     #$80
 15424:          sta     WBAM
 15425:          rts
 15426:  LF0A5:
 15427:          tay
 15428:          lda     TBAM,y
 15429:          beq     LF0D0
 15430:          pha
 15431:          lda     #$00
 15432:          sta     TBAM,y
 15433:          lda     JOBNUM
 15434:          asl     a
 15435:          tax
 15436:          pla
 15437:          asl     a
 15438:          asl     a
 15439:          sta     BUFTAB0,x
 15440:          tya
 15441:          asl     a
 15442:          asl     a
 15443:          tay
 15444:  LF0BE:
 15445:          lda     BAM,y
 15446:          sta     (BUFTAB0,x)
 15447:          lda     #$00
 15448:          sta     BAM,y
 15449:          inc     BUFTAB0,x
 15450:          iny
 15451:          tya
 15452:          and     #$03
 15453:          bne     LF0BE
 15454:  LF0D0:
 15455:          rts
 15456:  LF0D1:
 15457:          lda     DRVNUM
 15458:          asl     a
 15459:          tax
 15460:          lda     #$00
 15461:          sta     TBAM,x
 15462:          inx
 15463:          sta     TBAM,x
 15464:          rts
 15465:  LF0DF:
 15466:          lda     BUF0,x
 15467:          cmp     #$FF
 15468:          bne     LF10A
 15469:          txa
 15470:          pha
 15471:          jsr     LD28E
 15472:          tax
 15473:          bpl     LF0F2
 15474:          lda     #ERRORCODE_70_NO_CHANNEL
 15475:          jsr     GenerateErrorMessage
 15476:  LF0F2:
 15477:          stx     JOBNUM
 15478:          pla
 15479:          tay
 15480:          txa
 15481:          ora     #$80
 15482:          sta     BUF0,y
 15483:          asl     a
 15484:          tax
 15485:          lda     LFE85
 15486:          sta     TRACK0,x
 15487:          lda     #$00
 15488:          sta     SECTOR0,x
 15489:  .if CompileDrive >= DRIVE_1571
 15490:          jmp     LA667
 15491:  .else
 15492:          jmp     LD586
 15493:  .endif
 15494:  LF10A:
 15495:          and     #$0F
 15496:          sta     JOBNUM
 15497:          rts
 15498:  LF10F:
 15499:          lda     #$06
 15500:          ldx     DRVNUM
 15501:          bne     LF118
 15502:          clc
 15503:          adc     #$07
 15504:  LF118:
 15505:          rts
 15506:  LF119:
 15507:          jsr     LF10F
 15508:          tax
 15509:          rts
 15510:  LF11E:
 15511:          jsr     LDE3E
 15512:          lda     #$03
 15513:          sta     T0
 15514:          lda     #$01
 15515:          ora     WBAM
 15516:          sta     WBAM
 15517:  LF12D:
 15518:  .if CompileDrive >= DRIVE_1571
 15519:          jmp     LA8DB
 15520:  .else
 15521:          lda     T0
 15522:          pha
 15523:  .endif
 15524:  LF130:
 15525:          jsr     LF011
 15526:          pla
 15527:          sta     T0
 15528:          lda     (BMPNT),y
 15529:  LF138:
 15530:          bne     LF173
 15531:          lda     TRACK
 15532:          cmp     LFE85
 15533:          beq     LF15A
 15534:          bcc     LF15F
 15535:          inc     TRACK
 15536:          lda     TRACK
 15537:          cmp     MAXTRACK_ADJUSTED
 15538:          bne     LF12D
 15539:          ldx     LFE85
 15540:          dex
 15541:          stx     TRACK
 15542:          lda     #$00
 15543:          sta     SECTOR
 15544:          dec     T0
 15545:          bne     LF12D
 15546:  LF15A:
 15547:          lda     #ERRORCODE_72_DISK_FULL
 15548:          jsr     GenerateErrorMessage
 15549:  LF15F:
 15550:          dec     TRACK
 15551:          bne     LF12D
 15552:          ldx     LFE85
 15553:          inx
 15554:          stx     TRACK
 15555:          lda     #$00
 15556:          sta     SECTOR
 15557:          dec     T0
 15558:          bne     LF12D
 15559:          beq     LF15A
 15560:  LF173:
 15561:          lda     SECTOR
 15562:          clc
 15563:          adc     SECINC
 15564:          sta     SECTOR
 15565:          lda     TRACK
 15566:          jsr     LF24B
 15567:          sta     LSTSEC
 15568:          sta     CMD
 15569:          cmp     SECTOR
 15570:          bcs     LF195
 15571:          sec
 15572:          lda     SECTOR
 15573:          sbc     LSTSEC
 15574:          sta     SECTOR
 15575:          beq     LF195
 15576:          dec     SECTOR
 15577:  LF195:
 15578:          jsr     LF1FA
 15579:          beq     LF19D
 15580:  LF19A:
 15581:          jmp     LEF90
 15582:  LF19D:
 15583:          lda     #$00
 15584:          sta     SECTOR
 15585:          jsr     LF1FA
 15586:          bne     LF19A
 15587:          jmp     LF1F5
 15588:  LF1A9:
 15589:          lda     #$01
 15590:          ora     WBAM
 15591:          sta     WBAM
 15592:          lda     R0
 15593:          pha
 15594:          lda     #$01
 15595:          sta     R0
 15596:  LF1B8:
 15597:          lda     LFE85
 15598:          sec
 15599:          sbc     R0
 15600:          sta     TRACK
 15601:          bcc     LF1CB
 15602:          beq     LF1CB
 15603:  .if CompileDrive >= DRIVE_1571
 15604:          jmp     LA905
 15605:  .else
 15606:          jsr     LF011
 15607:  .endif
 15608:  LF1C7:
 15609:          lda     (BMPNT),y
 15610:  LF1C9:
 15611:          bne     LF1E6
 15612:  LF1CB:
 15613:          lda     LFE85
 15614:          clc
 15615:          adc     R0
 15616:          sta     TRACK
 15617:          inc     R0
 15618:          cmp     MAXTRACK_ADJUSTED
 15619:          bcc     LF1DF
 15620:          lda     #ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR
 15621:          jsr     LE645
 15622:  LF1DF:
 15623:  .if CompileDrive >= DRIVE_1571
 15624:         jmp     LA91E
 15625:  .else
 15626:          jsr     LF011
 15627:  .endif
 15628:  LF1E2:
 15629:          lda     (BMPNT),y
 15630:  LF1E4:
 15631:          beq     LF1B8
 15632:  LF1E6:
 15633:          pla
 15634:          sta     R0
 15635:          lda     #$00
 15636:          sta     SECTOR
 15637:          jsr     LF1FA
 15638:          beq     LF1F5
 15639:          jmp     LEF90
 15640:  LF1F5:
 15641:          lda     #ERRORCODE_71_DIR_ERROR
 15642:          jsr     LE645
 15643:  LF1FA:
 15644:  .if CompileDrive >= DRIVE_1571
 15645:          jmp     LA8A9
 15646:  .else
 15647:          jsr     LF011
 15648:  .endif
 15649:  LF1FD:
 15650:          tya
 15651:          pha
 15652:          jsr     LF220
 15653:          lda     TRACK
 15654:          jsr     LF24B
 15655:          sta     LSTSEC
 15656:          pla
 15657:          sta     T0
 15658:  LF20D:
 15659:          lda     SECTOR
 15660:          cmp     LSTSEC
 15661:          bcs     LF21D
 15662:          jsr     LEFD5
 15663:          bne     LF21F
 15664:          inc     SECTOR
 15665:          bne     LF20D
 15666:  LF21D:
 15667:          lda     #$00
 15668:  LF21F:
 15669:          rts
 15670:  LF220:
 15671:          lda     T0
 15672:          pha
 15673:          lda     #$00
 15674:          sta     T0
 15675:          ldy     LFE85 + 1
 15676:          dey
 15677:  LF22B:
 15678:          ldx     #$07
 15679:  LF22D:
 15680:          lda     (BMPNT),y
 15681:          and     LEFE9,x
 15682:          beq     LF236
 15683:          inc     T0
 15684:  LF236:
 15685:          dex
 15686:          bpl     LF22D
 15687:          dey
 15688:          bne     LF22B
 15689:          lda     (BMPNT),y
 15690:          cmp     T0
 15691:          bne     LF246
 15692:          pla
 15693:          sta     T0
 15694:          rts
 15695:  LF246:
 15696:          lda     #ERRORCODE_71_DIR_ERROR
 15697:          jsr     LE645
 15698:  LF24B:
 15699:  .if CompileDrive >= DRIVE_1571
 15700:          jsr     LA74F
 15701:  .else
 15702:          ldx     LFED6
 15703:  .endif
 15704:  LF24E:
 15705:          cmp     SpeedZoneChange - 1,x
 15706:          dex
 15707:          bcs     LF24E
 15708:          lda     LFED1,x
 15709:          rts
 15710:  
 15711:  NoOp:
 15712:          rts
 15713:  
 15714:  LF259:
 15715:          lda     #VDC_PB2_STEPPER | VDC_PB2_DRIVE0MOTOR | VDC_PB2_DRIVELEDS | VDC_PB2_BITRATE
 15716:          sta     VDC_DDRB2
 15717:          and     # ~ (VDC_PB2_STEPPER | VDC_PB2_DRIVE0MOTOR | VDC_PB2_DRIVELEDS)
 15718:          sta     VDC_PB2
 15719:  .if CompileDrive >= DRIVE_1570
 15720:          jmp     LA9F8
 15721:  .else
 15722:          lda     VDC_PCR2
 15723:  .endif
 15724:  
 15725:  LF266:
 15726:          and     # ~ VIA_PCR_B_CA1_INPUT_POS_EDGE
 15727:          ora     #VIA_PCR_B_CA2_OUTPUT_HIGH
 15728:          ora     #VIA_PCR_B_CB2_OUTPUT_HIGH
 15729:          sta     VDC_PCR2
 15730:          lda     #VIA_ACR_B_T1_CONTROL_FREERUN | VIA_ACR_B_PA_LATCH_ENABLE
 15731:          sta     VDC_ACR2
 15732:          lda     #$00
 15733:          sta     VDC_T1LL2
 15734:  .if CompileDrive = DRIVE_1541C_01 .OR (CompileDrive >= DRIVE_1570 .AND CompileDrive < DRIVE_1571_05)
 15735:          lda     #$20
 15736:  .else
 15737:          lda     #$3A
 15738:  .endif
 15739:          sta     VDC_T1HL2
 15740:          sta     VDC_T1HC2
 15741:  
 15742:          lda     #VIA_IER_BW_UNSET | ~ VIA_IER_BW_SET    ; clear all interrupt sources
 15743:          sta     VDC_IER2
 15744:  
 15745:          lda     #VIA_IER_B_T1 | VIA_IER_BW_SET
 15746:          sta     VDC_IFR2                                ; @@@ TODO
 15747:          sta     VDC_IER2                                ; enable interrupt on T1
 15748:  
 15749:          lda     #$FF
 15750:          sta     CDRIVE
 15751:          sta     FTNUM
 15752:          lda     #$08
 15753:          sta     HBID
 15754:          lda     #$07
 15755:          sta     DBID
 15756:          lda     #<LFA05
 15757:          sta     NXTST
 15758:          lda     #>LFA05
 15759:          sta     NXTST + 1
 15760:          lda     #$C8
 15761:          sta     MINSTP
 15762:          lda     #$04
 15763:          sta     AS
 15764:          lda     #$04
 15765:          sta     AF
 15766:  LF2B0:
 15767:          tsx
 15768:          stx     SAVSP
 15769:          lda     VDC_T1LC2
 15770:          lda     VDC_PCR2
 15771:          ora     #VIA_PCR_B_CA2_OUTPUT_HIGH
 15772:          sta     VDC_PCR2
 15773:  
 15774:  LF2BE:
 15775:          ldy     #$05
 15776:  LF2C0:
 15777:          lda     JOBS0,y
 15778:          bpl     LF2F3
 15779:          cmp     #$D0
 15780:          bne     LF2CD
 15781:          tya
 15782:          jmp     LF370
 15783:  LF2CD:
 15784:          and     #$01
 15785:          beq     LF2D8
 15786:          sty     JOBN
 15787:          lda     #$0F
 15788:          jmp     LF969
 15789:  LF2D8:
 15790:          tax
 15791:          sta     DRIVE
 15792:          cmp     CDRIVE
 15793:          beq     LF2E9
 15794:          jsr     LF97E
 15795:          lda     DRIVE
 15796:          sta     CDRIVE
 15797:          jmp     LF99C
 15798:  LF2E9:
 15799:          lda     DRVST
 15800:          bmi     LF2F0
 15801:          asl     a
 15802:          bpl     LF2F9
 15803:  LF2F0:
 15804:          jmp     LF99C
 15805:  LF2F3:
 15806:          dey
 15807:          bpl     LF2C0
 15808:          jmp     LF99C
 15809:  LF2F9:
 15810:          lda     #$20
 15811:          sta     DRVST
 15812:          ldy     #$05
 15813:          sty     JOBN
 15814:  LF301:
 15815:          jsr     LF393
 15816:          bmi     LF320
 15817:  LF306:
 15818:          dec     JOBN
 15819:          bpl     LF301
 15820:          ldy     NXTJOB
 15821:          jsr     LF395
 15822:          lda     NXTRK
 15823:          sta     STEPS
 15824:          asl     STEPS
 15825:          lda     #$60
 15826:          sta     DRVST
 15827:          lda     (HDRPNT),y
 15828:          sta     DRVTRK
 15829:          jmp     LF99C
 15830:  LF320:
 15831:          and     #$01
 15832:          cmp     DRIVE
 15833:          bne     LF306
 15834:          lda     DRVTRK
 15835:          beq     LF33C
 15836:          sec
 15837:          sbc     (HDRPNT),y
 15838:          beq     LF33C
 15839:          eor     #$FF
 15840:          sta     NXTRK
 15841:          inc     NXTRK
 15842:          lda     JOBN
 15843:          sta     NXTJOB
 15844:          jmp     LF306
 15845:  LF33C:
 15846:          ldx     #$04
 15847:          lda     (HDRPNT),y
 15848:          sta     TRACC
 15849:  LF342:
 15850:  .if CompileDrive >= DRIVE_1571_05 .OR CompileDrive = DRIVE_1541C_02
 15851:          cmp     LC048 - 1,x
 15852:  .else
 15853:          cmp     SpeedZoneChange - 1,x
 15854:  .endif
 15855:          dex
 15856:          bcs     LF342
 15857:          lda     LFED1,x
 15858:          sta     SECTR
 15859:          txa
 15860:          asl     a
 15861:          asl     a
 15862:          asl     a
 15863:          asl     a
 15864:          asl     a
 15865:          sta     WORK
 15866:          lda     VDC_PB2
 15867:          and     #VDC_PB2_STEPPER | VDC_PB2_DRIVE0MOTOR | VDC_PB2_DRIVELEDS | VDC_PB2_WRITEPROTECT | VDC_PB2_SYNC
 15868:          ora     WORK
 15869:          sta     VDC_PB2
 15870:          ldx     DRIVE
 15871:          lda     JOB
 15872:          cmp     #$40
 15873:          beq     LF37C
 15874:          cmp     #$60
 15875:          beq     LF36E
 15876:          jmp     LF3B1
 15877:  LF36E:
 15878:          lda     JOBN
 15879:  LF370:
 15880:          clc
 15881:          adc     #$03
 15882:          sta     BUFPNT + 1
 15883:          lda     #$00
 15884:          sta     BUFPNT
 15885:          jmp     (BUFPNT)
 15886:  LF37C:
 15887:          lda     #$60
 15888:          sta     DRVST
 15889:          lda     VDC_PB2
 15890:          and     # ~ VDC_PB2_STEPPER
 15891:          sta     VDC_PB2
 15892:          lda     #$A4
 15893:          sta     STEPS
 15894:          lda     #$01
 15895:          sta     DRVTRK
 15896:          jmp     LF969
 15897:  LF393:
 15898:          ldy     JOBN
 15899:  LF395:
 15900:          lda     JOBS0,y
 15901:          pha
 15902:          bpl     LF3AB
 15903:          and     #$78
 15904:          sta     JOB
 15905:          tya
 15906:          asl     a
 15907:          adc     #$06
 15908:          sta     HDRPNT
 15909:          tya
 15910:          clc
 15911:          adc     #$03
 15912:          sta     BUFPNT + 1
 15913:  LF3AB:
 15914:          ldy     #$00
 15915:          sty     BUFPNT
 15916:          pla
 15917:          rts
 15918:  LF3B1:
 15919:          ldx     #$5A
 15920:          stx     TMP
 15921:          ldx     #$00
 15922:          lda     #$52
 15923:          sta     STAB
 15924:  LF3BB:
 15925:          jsr     LF556
 15926:  LF3BE:
 15927:          bvc     LF3BE
 15928:          clv
 15929:          lda     VDC_PA2
 15930:          cmp     STAB
 15931:          bne     LF407
 15932:  LF3C8:
 15933:          bvc     LF3C8
 15934:          clv
 15935:          lda     VDC_PA2
 15936:          sta     STAB + 1,x
 15937:          inx
 15938:          cpx     #$07
 15939:          bne     LF3C8
 15940:          jsr     LF497
 15941:          ldy     #$04
 15942:          lda     #$00
 15943:  LF3DC:
 15944:          eor     HEADER,y
 15945:          dey
 15946:          bpl     LF3DC
 15947:          cmp     #$00
 15948:          bne     LF41E
 15949:          ldx     CDRIVE
 15950:          lda     HEADER + 2
 15951:          sta     DRVTRK,x
 15952:          lda     JOB
 15953:          cmp     #$30
 15954:          beq     LF410
 15955:          lda     CDRIVE
 15956:          asl     a
 15957:          tay
 15958:          lda     DiskID0,y
 15959:          cmp     HEADER
 15960:          bne     LF41B
 15961:          lda     DiskID0 + 1,y
 15962:          cmp     HEADER + 1
 15963:          bne     LF41B
 15964:          jmp     LF423
 15965:  LF407:
 15966:          dec     TMP
 15967:          bne     LF3BB
 15968:          lda     #$02
 15969:          jsr     LF969
 15970:  LF410:
 15971:          lda     HEADER
 15972:          sta     DiskID0
 15973:          lda     HEADER + 1
 15974:          sta     DiskID0 + 1
 15975:  LF418:
 15976:          lda     #$01
 15977:          .byte   ASM_BIT3
 15978:  LF41B:
 15979:          lda     #$0B
 15980:          .byte   ASM_BIT3
 15981:  LF41E:
 15982:          lda     #$09
 15983:          jmp     LF969
 15984:  LF423:
 15985:          lda     #$7F
 15986:          sta     CSECT
 15987:          lda     HEADER + 3
 15988:          clc
 15989:          adc     #$02
 15990:          cmp     SECTR
 15991:          bcc     LF432
 15992:          sbc     SECTR
 15993:  LF432:
 15994:          sta     NEXTS
 15995:          ldx     #$05
 15996:          stx     JOBN
 15997:          ldx     #$FF
 15998:  LF43A:
 15999:          jsr     LF393
 16000:          bpl     LF483
 16001:          sta     WORK
 16002:          and     #$01
 16003:          cmp     CDRIVE
 16004:          bne     LF483
 16005:          ldy     #$00
 16006:          lda     (HDRPNT),y
 16007:          cmp     TRACC
 16008:          bne     LF483
 16009:          lda     JOB
 16010:          cmp     #$60
 16011:          beq     LF461
 16012:          ldy     #$01
 16013:          sec
 16014:          lda     (HDRPNT),y
 16015:          sbc     NEXTS
 16016:          bpl     LF461
 16017:          clc
 16018:          adc     SECTR
 16019:  LF461:
 16020:          cmp     CSECT
 16021:          bcs     LF483
 16022:          pha
 16023:          lda     JOB
 16024:          beq     LF47E
 16025:          pla
 16026:  .if CompileDrive >= DRIVE_1571_05
 16027:          cmp     #$04
 16028:  .else
 16029:          cmp     #$09
 16030:  .endif
 16031:          bcc     LF483
 16032:  .if CompileDrive >= DRIVE_1571_05
 16033:          cmp     #$08
 16034:  .else
 16035:          cmp     #$0C
 16036:  .endif
 16037:          bcs     LF483
 16038:  LF473:
 16039:          sta     CSECT
 16040:          lda     JOBN
 16041:          tax
 16042:          adc     #$03
 16043:          sta     BUFPNT + 1
 16044:          bne     LF483
 16045:  LF47E:
 16046:          pla
 16047:          cmp     #$06
 16048:          bcc     LF473
 16049:  LF483:
 16050:          dec     JOBN
 16051:          bpl     LF43A
 16052:          txa
 16053:          bpl     LF48D
 16054:          jmp     LF99C
 16055:  LF48D:
 16056:          stx     JOBN
 16057:          jsr     LF393
 16058:          lda     JOB
 16059:          jmp     LF4CA
 16060:  LF497:
 16061:          lda     BUFPNT
 16062:          pha
 16063:          lda     BUFPNT + 1
 16064:          pha
 16065:          lda     #$24
 16066:          sta     BUFPNT
 16067:          lda     #$00
 16068:          sta     BUFPNT + 1
 16069:          lda     #$00
 16070:          sta     GCRPNT
 16071:          jsr     LF7E6
 16072:          lda     BTAB + 3
 16073:          sta     HEADER + 2
 16074:          lda     BTAB + 2
 16075:          sta     HEADER + 3
 16076:          lda     BTAB + 1
 16077:          sta     HEADER + 4
 16078:          jsr     LF7E6
 16079:          lda     BTAB
 16080:          sta     HEADER + 1
 16081:          lda     BTAB + 1
 16082:          sta     HEADER
 16083:          pla
 16084:          sta     BUFPNT + 1
 16085:          pla
 16086:          sta     BUFPNT
 16087:          rts
 16088:  LF4CA:
 16089:          cmp     #$00
 16090:          beq     LF4D1
 16091:          jmp     LF56E
 16092:  LF4D1:
 16093:          jsr     LF50A
 16094:  LF4D4:
 16095:          bvc     LF4D4
 16096:          clv
 16097:          lda     VDC_PA2
 16098:          sta     (BUFPNT),y
 16099:          iny
 16100:          bne     LF4D4
 16101:          ldy     #$BA
 16102:  LF4E1:
 16103:          bvc     LF4E1
 16104:          clv
 16105:          lda     VDC_PA2
 16106:          sta     NODRV + 1,y
 16107:          iny
 16108:          bne     LF4E1
 16109:          jsr     LF8E0
 16110:          lda     BID
 16111:          cmp     DBID
 16112:          beq     LF4FB
 16113:          lda     #$04
 16114:          jmp     LF969
 16115:  LF4FB:
 16116:          jsr     LF5E9
 16117:          cmp     CHKSUM
 16118:          beq     LF505
 16119:          lda     #$05
 16120:          .byte   ASM_BIT3
 16121:  LF505:
 16122:          lda     #$01
 16123:          jmp     LF969
 16124:  LF50A:
 16125:          jsr     LF510
 16126:          jmp     LF556
 16127:  LF510:
 16128:          lda     DRIVE
 16129:          asl     a
 16130:          tax
 16131:          lda     DiskID0,x
 16132:          sta     HEADER
 16133:          lda     DiskID0 + 1,x
 16134:          sta     HEADER + 1
 16135:          ldy     #$00
 16136:          lda     (HDRPNT),y
 16137:          sta     HEADER + 2
 16138:          iny
 16139:          lda     (HDRPNT),y
 16140:          sta     HEADER + 3
 16141:          lda     #$00
 16142:          eor     HEADER
 16143:          eor     HEADER + 1
 16144:          eor     HEADER + 2
 16145:          eor     HEADER + 3
 16146:          sta     HEADER + 4
 16147:          jsr     LF934
 16148:          ldx     #$5A
 16149:  LF538:
 16150:          jsr     LF556
 16151:          ldy     #$00
 16152:  LF53D:
 16153:          bvc     LF53D
 16154:          clv
 16155:          lda     VDC_PA2
 16156:          cmp     STAB,y
 16157:          bne     LF54E
 16158:          iny
 16159:          cpy     #$08
 16160:          bne     LF53D
 16161:          rts
 16162:  LF54E:
 16163:          dex
 16164:          bne     LF538
 16165:          lda     #$02
 16166:  LF553:
 16167:          jmp     LF969
 16168:  LF556:
 16169:          lda     #$D0
 16170:          sta     VBC_T1HC1
 16171:          lda     #$03
 16172:  LF55D:
 16173:          bit     VBC_T1HC1
 16174:          bpl     LF553
 16175:          bit     VDC_PB2
 16176:          bmi     LF55D
 16177:          lda     VDC_PA2
 16178:          clv
 16179:          ldy     #$00
 16180:          rts
 16181:  LF56E:
 16182:          cmp     #$10
 16183:          beq     LF575
 16184:          jmp     LF691
 16185:  LF575:
 16186:          jsr     LF5E9
 16187:          sta     CHKSUM
 16188:          lda     VDC_PB2
 16189:          and     #VDC_PB2_WRITEPROTECT
 16190:          bne     LF586
 16191:          lda     #$08
 16192:          jmp     LF969
 16193:  LF586:
 16194:          jsr     LF78F
 16195:          jsr     LF510
 16196:          ldx     #INTRA_SECTOR_GAP
 16197:  LF58E:
 16198:          bvc     LF58E
 16199:          clv
 16200:          dex
 16201:          bne     LF58E
 16202:          lda     #$FF
 16203:          sta     VDC_DDRA2
 16204:          lda     VDC_PCR2
 16205:          and     #$1F
 16206:          ora     #$C0
 16207:          sta     VDC_PCR2
 16208:          lda     #$FF
 16209:          ldx     #$05
 16210:          sta     VDC_PA2
 16211:          clv
 16212:  LF5AB:
 16213:          bvc     LF5AB
 16214:          clv
 16215:          dex
 16216:          bne     LF5AB
 16217:          ldy     #$BB
 16218:  LF5B3:
 16219:          lda     NODRV + 1,y
 16220:  LF5B6:
 16221:          bvc     LF5B6
 16222:          clv
 16223:          sta     VDC_PA2
 16224:          iny
 16225:          bne     LF5B3
 16226:  LF5BF:
 16227:          lda     (BUFPNT),y
 16228:  LF5C1:
 16229:          bvc     LF5C1
 16230:          clv
 16231:          sta     VDC_PA2
 16232:          iny
 16233:          bne     LF5BF
 16234:  LF5CA:
 16235:          bvc     LF5CA
 16236:          lda     VDC_PCR2
 16237:          ora     #$E0
 16238:          sta     VDC_PCR2
 16239:          lda     #$00
 16240:          sta     VDC_DDRA2
 16241:          jsr     LF5F2
 16242:          ldy     JOBN
 16243:          lda     JOBS0,y
 16244:          eor     #$30
 16245:          sta     JOBS0,y
 16246:          jmp     LF3B1
 16247:  LF5E9:
 16248:          lda     #$00
 16249:          tay
 16250:  LF5EC:
 16251:          eor     (BUFPNT),y
 16252:          iny
 16253:          bne     LF5EC
 16254:          rts
 16255:  LF5F2:
 16256:          lda     #$00
 16257:          sta     SAVPNT
 16258:          sta     BUFPNT
 16259:          sta     NXTPNT
 16260:          lda     BUFPNT + 1
 16261:          sta     NXTBF
 16262:          lda     #$01
 16263:          sta     BUFPNT + 1
 16264:          sta     SAVPNT + 1
 16265:          lda     #$BB
 16266:          sta     GCRPNT
 16267:          sta     BYTCNT
 16268:          jsr     LF7E6
 16269:          lda     BTAB
 16270:          sta     BID
 16271:          ldy     BYTCNT
 16272:          lda     BTAB + 1
 16273:          sta     (SAVPNT),y
 16274:          iny
 16275:          lda     BTAB + 2
 16276:          sta     (SAVPNT),y
 16277:          iny
 16278:          lda     BTAB + 3
 16279:          sta     (SAVPNT),y
 16280:          iny
 16281:          sty     BYTCNT
 16282:  LF624:
 16283:          jsr     LF7E6
 16284:          ldy     BYTCNT
 16285:          lda     BTAB
 16286:          sta     (SAVPNT),y
 16287:          iny
 16288:          lda     BTAB + 1
 16289:          sta     (SAVPNT),y
 16290:          iny
 16291:          beq     LF643
 16292:          lda     BTAB + 2
 16293:          sta     (SAVPNT),y
 16294:          iny
 16295:          lda     BTAB + 3
 16296:          sta     (SAVPNT),y
 16297:          iny
 16298:          sty     BYTCNT
 16299:          bne     LF624
 16300:  LF643:
 16301:          lda     BTAB + 2
 16302:          sta     (BUFPNT),y
 16303:          iny
 16304:          lda     BTAB + 3
 16305:          sta     (BUFPNT),y
 16306:          iny
 16307:          sty     BYTCNT
 16308:  LF64F:
 16309:          jsr     LF7E6
 16310:          ldy     BYTCNT
 16311:          lda     BTAB
 16312:          sta     (BUFPNT),y
 16313:          iny
 16314:          lda     BTAB + 1
 16315:          sta     (BUFPNT),y
 16316:          iny
 16317:          lda     BTAB + 2
 16318:          sta     (BUFPNT),y
 16319:          iny
 16320:          lda     BTAB + 3
 16321:          sta     (BUFPNT),y
 16322:          iny
 16323:          sty     BYTCNT
 16324:          cpy     #$BB
 16325:          bcc     LF64F
 16326:          lda     #$45
 16327:          sta     SAVPNT
 16328:          lda     BUFPNT + 1
 16329:          sta     SAVPNT + 1
 16330:          ldy     #$BA
 16331:  LF678:
 16332:          lda     (BUFPNT),y
 16333:          sta     (SAVPNT),y
 16334:          dey
 16335:          bne     LF678
 16336:          lda     (BUFPNT),y
 16337:          sta     (SAVPNT),y
 16338:          ldx     #$BB
 16339:  LF685:
 16340:          lda     NODRV + 1,x
 16341:          sta     (BUFPNT),y
 16342:          iny
 16343:          inx
 16344:          bne     LF685
 16345:          stx     GCRFLG
 16346:          rts
 16347:  LF691:
 16348:          cmp     #$20
 16349:          beq     LF698
 16350:          jmp     LF6CA
 16351:  LF698:
 16352:          jsr     LF5E9
 16353:          sta     CHKSUM
 16354:          jsr     LF78F
 16355:          jsr     LF50A
 16356:          ldy     #$BB
 16357:  LF6A5:
 16358:          lda     NODRV + 1,y
 16359:  LF6A8:
 16360:          bvc     LF6A8
 16361:          clv
 16362:          eor     VDC_PA2
 16363:          bne     LF6C5
 16364:          iny
 16365:          bne     LF6A5
 16366:  LF6B3:
 16367:          lda     (BUFPNT),y
 16368:  LF6B5:
 16369:          bvc     LF6B5
 16370:          clv
 16371:          eor     VDC_PA2
 16372:          bne     LF6C5
 16373:          iny
 16374:          cpy     #$FD
 16375:          bne     LF6B3
 16376:          jmp     LF418
 16377:  LF6C5:
 16378:          lda     #$07
 16379:          jmp     LF969
 16380:  LF6CA:
 16381:          jsr     LF510
 16382:          jmp     LF418
 16383:  LF6D0:
 16384:          lda     #$00
 16385:          sta     GTAB + 1
 16386:          sta     GTAB + 4
 16387:          ldy     GCRPNT
 16388:          lda     BTAB
 16389:          and     #$F0
 16390:          lsr     a
 16391:          lsr     a
 16392:          lsr     a
 16393:          lsr     a
 16394:          tax
 16395:          lda     LF77F,x
 16396:          asl     a
 16397:          asl     a
 16398:          asl     a
 16399:          sta     GTAB
 16400:          lda     BTAB
 16401:          and     #$0F
 16402:          tax
 16403:          lda     LF77F,x
 16404:          ror     a
 16405:          ror     GTAB + 1
 16406:          ror     a
 16407:          ror     GTAB + 1
 16408:          and     #$07
 16409:          ora     GTAB
 16410:          sta     (BUFPNT),y
 16411:          iny
 16412:          lda     BTAB + 1
 16413:          and     #$F0
 16414:          lsr     a
 16415:          lsr     a
 16416:          lsr     a
 16417:          lsr     a
 16418:          tax
 16419:          lda     LF77F,x
 16420:          asl     a
 16421:          ora     GTAB + 1
 16422:          sta     GTAB + 1
 16423:          lda     BTAB + 1
 16424:          and     #$0F
 16425:          tax
 16426:          lda     LF77F,x
 16427:          rol     a
 16428:          rol     a
 16429:          rol     a
 16430:          rol     a
 16431:          sta     GTAB + 2
 16432:          rol     a
 16433:          and     #$01
 16434:          ora     GTAB + 1
 16435:          sta     (BUFPNT),y
 16436:          iny
 16437:          lda     BTAB + 2
 16438:          and     #$F0
 16439:          lsr     a
 16440:          lsr     a
 16441:          lsr     a
 16442:          lsr     a
 16443:          tax
 16444:          lda     LF77F,x
 16445:          clc
 16446:          ror     a
 16447:          ora     GTAB + 2
 16448:          sta     (BUFPNT),y
 16449:          iny
 16450:          ror     a
 16451:          and     #$80
 16452:          sta     GTAB + 3
 16453:          lda     BTAB + 2
 16454:          and     #$0F
 16455:          tax
 16456:          lda     LF77F,x
 16457:          asl     a
 16458:          asl     a
 16459:          and     #$7C
 16460:          ora     GTAB + 3
 16461:          sta     GTAB + 3
 16462:          lda     BTAB + 3
 16463:          and     #$F0
 16464:          lsr     a
 16465:          lsr     a
 16466:          lsr     a
 16467:          lsr     a
 16468:          tax
 16469:          lda     LF77F,x
 16470:          ror     a
 16471:          ror     GTAB + 4
 16472:          ror     a
 16473:          ror     GTAB + 4
 16474:          ror     a
 16475:          ror     GTAB + 4
 16476:          and     #$03
 16477:          ora     GTAB + 3
 16478:          sta     (BUFPNT),y
 16479:          iny
 16480:          bne     LF76F
 16481:          lda     SAVPNT + 1
 16482:          sta     BUFPNT + 1
 16483:  LF76F:
 16484:          lda     BTAB + 3
 16485:          and     #$0F
 16486:          tax
 16487:          lda     LF77F,x
 16488:          ora     GTAB + 4
 16489:          sta     (BUFPNT),y
 16490:          iny
 16491:          sty     GCRPNT
 16492:          rts
 16493:  LF77F:
 16494:          .byte   $0A,$0B,$12,$13,$0E,$0F,$16,$17
 16495:          .byte   $09,$19,$1A,$1B,$0D,$1D,$1E,$15
 16496:  LF78F:
 16497:          lda     #$00
 16498:          sta     BUFPNT
 16499:          sta     SAVPNT
 16500:          sta     BYTCNT
 16501:          lda     #$BB
 16502:          sta     GCRPNT
 16503:          sta     GCRFLG
 16504:          lda     BUFPNT + 1
 16505:          sta     SAVPNT + 1
 16506:          lda     #$01
 16507:          sta     BUFPNT + 1
 16508:          lda     DBID
 16509:          sta     BTAB
 16510:          ldy     BYTCNT
 16511:          lda     (SAVPNT),y
 16512:          sta     BTAB + 1
 16513:          iny
 16514:          lda     (SAVPNT),y
 16515:          sta     BTAB + 2
 16516:          iny
 16517:          lda     (SAVPNT),y
 16518:          sta     BTAB + 3
 16519:          iny
 16520:  LF7BA:
 16521:          sty     BYTCNT
 16522:          jsr     LF6D0
 16523:          ldy     BYTCNT
 16524:          lda     (SAVPNT),y
 16525:          sta     BTAB
 16526:          iny
 16527:          beq     LF7D9
 16528:          lda     (SAVPNT),y
 16529:          sta     BTAB + 1
 16530:          iny
 16531:          lda     (SAVPNT),y
 16532:          sta     BTAB + 2
 16533:          iny
 16534:          lda     (SAVPNT),y
 16535:          sta     BTAB + 3
 16536:          iny
 16537:          bne     LF7BA
 16538:  LF7D9:
 16539:          lda     CHKSUM
 16540:          sta     BTAB + 1
 16541:          lda     #$00
 16542:          sta     BTAB + 2
 16543:          sta     BTAB + 3
 16544:          jmp     LF6D0
 16545:  LF7E6:
 16546:          ldy     GCRPNT
 16547:          lda     (BUFPNT),y
 16548:          and     #$F8
 16549:          lsr     a
 16550:          lsr     a
 16551:          lsr     a
 16552:          sta     GTAB
 16553:          lda     (BUFPNT),y
 16554:          and     #$07
 16555:          asl     a
 16556:          asl     a
 16557:          sta     GTAB + 1
 16558:          iny
 16559:          bne     LF802
 16560:          lda     NXTBF
 16561:          sta     BUFPNT + 1
 16562:          ldy     NXTPNT
 16563:  LF802:
 16564:          lda     (BUFPNT),y
 16565:          and     #$C0
 16566:          rol     a
 16567:          rol     a
 16568:          rol     a
 16569:          ora     GTAB + 1
 16570:          sta     GTAB + 1
 16571:          lda     (BUFPNT),y
 16572:          and     #$3E
 16573:          lsr     a
 16574:          sta     GTAB + 2
 16575:          lda     (BUFPNT),y
 16576:          and     #$01
 16577:          asl     a
 16578:          asl     a
 16579:          asl     a
 16580:          asl     a
 16581:          sta     GTAB + 3
 16582:          iny
 16583:          lda     (BUFPNT),y
 16584:          and     #$F0
 16585:          lsr     a
 16586:          lsr     a
 16587:          lsr     a
 16588:          lsr     a
 16589:          ora     GTAB + 3
 16590:          sta     GTAB + 3
 16591:          lda     (BUFPNT),y
 16592:          and     #$0F
 16593:          asl     a
 16594:          sta     GTAB + 4
 16595:          iny
 16596:          lda     (BUFPNT),y
 16597:          and     #$80
 16598:          clc
 16599:          rol     a
 16600:          rol     a
 16601:          and     #$01
 16602:          ora     GTAB + 4
 16603:          sta     GTAB + 4
 16604:          lda     (BUFPNT),y
 16605:          and     #$7C
 16606:          lsr     a
 16607:          lsr     a
 16608:          sta     GTAB + 5
 16609:          lda     (BUFPNT),y
 16610:          and     #$03
 16611:          asl     a
 16612:          asl     a
 16613:          asl     a
 16614:          sta     GTAB + 6
 16615:          iny
 16616:          bne     LF85A
 16617:          lda     NXTBF
 16618:          sta     BUFPNT + 1
 16619:          ldy     NXTPNT
 16620:  LF85A:
 16621:          lda     (BUFPNT),y
 16622:          and     #$E0
 16623:          rol     a
 16624:          rol     a
 16625:          rol     a
 16626:          rol     a
 16627:          ora     GTAB + 6
 16628:          sta     GTAB + 6
 16629:          lda     (BUFPNT),y
 16630:          and     #$1F
 16631:          sta     GTAB + 7
 16632:          iny
 16633:          sty     GCRPNT
 16634:          ldx     GTAB
 16635:          lda     LF8A0,x
 16636:          ldx     GTAB + 1
 16637:          ora     LF8C0,x
 16638:          sta     BTAB
 16639:          ldx     GTAB + 2
 16640:          lda     LF8A0,x
 16641:          ldx     GTAB + 3
 16642:          ora     LF8C0,x
 16643:          sta     BTAB + 1
 16644:          ldx     GTAB + 4
 16645:          lda     LF8A0,x
 16646:          ldx     GTAB + 5
 16647:          ora     LF8C0,x
 16648:          sta     BTAB + 2
 16649:          ldx     GTAB + 6
 16650:          lda     LF8A0,x
 16651:          ldx     GTAB + 7
 16652:          ora     LF8C0,x
 16653:          sta     BTAB + 3
 16654:          rts
 16655:  LF8A0:
 16656:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
 16657:          .byte   $FF,$80,$00,$10,$FF,$C0,$40,$50
 16658:          .byte   $FF,$FF,$20,$30,$FF,$F0,$60,$70
 16659:          .byte   $FF,$90,$A0,$B0,$FF,$D0,$E0,$FF
 16660:  LF8C0:
 16661:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
 16662:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
 16663:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
 16664:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
 16665:  LF8E0:
 16666:          lda     #$00
 16667:          sta     GCRPNT
 16668:          sta     SAVPNT
 16669:          sta     BYTCNT
 16670:          lda     #$01
 16671:          sta     NXTBF
 16672:          lda     #$BA
 16673:          sta     NXTPNT
 16674:          lda     BUFPNT + 1
 16675:          sta     SAVPNT + 1
 16676:          jsr     LF7E6
 16677:          lda     BTAB
 16678:          sta     BID
 16679:          ldy     BYTCNT
 16680:          lda     BTAB + 1
 16681:          sta     (SAVPNT),y
 16682:          iny
 16683:          lda     BTAB + 2
 16684:          sta     (SAVPNT),y
 16685:          iny
 16686:          lda     BTAB + 3
 16687:          sta     (SAVPNT),y
 16688:          iny
 16689:  LF90C:
 16690:          sty     BYTCNT
 16691:          jsr     LF7E6
 16692:          ldy     BYTCNT
 16693:          lda     BTAB
 16694:          sta     (SAVPNT),y
 16695:          iny
 16696:          beq     LF92B
 16697:          lda     BTAB + 1
 16698:          sta     (SAVPNT),y
 16699:          iny
 16700:          lda     BTAB + 2
 16701:          sta     (SAVPNT),y
 16702:          iny
 16703:          lda     BTAB + 3
 16704:          sta     (SAVPNT),y
 16705:          iny
 16706:          bne     LF90C
 16707:  LF92B:
 16708:          lda     BTAB + 1
 16709:          sta     CHKSUM
 16710:          lda     SAVPNT + 1
 16711:          sta     BUFPNT + 1
 16712:          rts
 16713:  LF934:
 16714:          lda     BUFPNT + 1
 16715:          sta     SAVPNT + 1
 16716:          lda     #$00
 16717:          sta     BUFPNT + 1
 16718:          lda     #$24
 16719:          sta     GCRPNT
 16720:          lda     HBID
 16721:          sta     BTAB
 16722:          lda     HEADER + 4
 16723:          sta     BTAB + 1
 16724:          lda     HEADER + 3
 16725:          sta     BTAB + 2
 16726:          lda     HEADER + 2
 16727:          sta     BTAB + 3
 16728:          jsr     LF6D0
 16729:          lda     HEADER + 1
 16730:          sta     BTAB
 16731:          lda     HEADER
 16732:          sta     BTAB + 1
 16733:          lda     #$00
 16734:          sta     BTAB + 2
 16735:          sta     BTAB + 3
 16736:          jsr     LF6D0
 16737:          lda     SAVPNT + 1
 16738:          sta     BUFPNT + 1
 16739:          rts
 16740:  LF969:
 16741:          ldy     JOBN
 16742:          sta     JOBS0,y
 16743:          lda     GCRFLG
 16744:          beq     LF975
 16745:          jsr     LF5F2
 16746:  LF975:
 16747:          jsr     LF98F
 16748:          ldx     SAVSP
 16749:          txs
 16750:          jmp     LF2BE
 16751:  LF97E:
 16752:          lda     #$A0
 16753:          sta     DRVST
 16754:          lda     VDC_PB2
 16755:          ora     #VDC_PB2_DRIVE0MOTOR
 16756:          sta     VDC_PB2
 16757:  .if CompileDrive >= DRIVE_1571
 16758:          lda     #$32
 16759:  .elseif CompileDrive >= DRIVE_1570
 16760:          lda     #$7D
 16761:  .else
 16762:          lda     #$3C
 16763:  .endif
 16764:          sta     ACLTIM
 16765:          rts
 16766:  LF98F:
 16767:          ldx     CDRIVE
 16768:          lda     DRVST
 16769:          ora     #$10
 16770:          sta     DRVST
 16771:  .if CompileDrive >= DRIVE_1570
 16772:          jmp     LA62B
 16773:          FillNOP 2
 16774:  .else
 16775:          lda     #$FF
 16776:          sta     ACLTIM
 16777:          rts
 16778:  .endif
 16779:  LF99C:
 16780:          lda     VDC_T1HL2
 16781:          sta     VDC_T1HC2
 16782:          lda     VDC_PB2
 16783:          and     #VDC_PB2_WRITEPROTECT
 16784:          cmp     LWPT
 16785:          sta     LWPT
 16786:  .if CompileDrive >= DRIVE_1570
 16787:          jmp     LA634
 16788:          FillNOP 3
 16789:  .else
 16790:          beq     LF9B1
 16791:          lda     #$01
 16792:          sta     WPSW
 16793:  .endif
 16794:  LF9B1:
 16795:          lda     PHASE
 16796:          beq     LF9CB
 16797:          cmp     #$02
 16798:          bne     LF9C1
 16799:          lda     #$00
 16800:          sta     PHASE
 16801:          beq     LF9CB
 16802:  LF9C1:
 16803:          sta     STEPS
 16804:          lda     #$02
 16805:          sta     PHASE
 16806:          jmp     LFA2E
 16807:  LF9CB:
 16808:          ldx     CDRIVE
 16809:          bmi     LF9D6
 16810:          lda     DRVST
 16811:          tay
 16812:          cmp     #$20
 16813:          bne     LF9D9
 16814:  LF9D6:
 16815:          jmp     LFABE
 16816:  LF9D9:
 16817:          dec     ACLTIM
 16818:          bne     LF9FA
 16819:          tya
 16820:          bpl     LF9E4
 16821:          and     #$7F
 16822:          sta     DRVST
 16823:  LF9E4:
 16824:          and     #$10
 16825:          beq     LF9FA
 16826:  .if CompileDrive >= DRIVE_1570
 16827:          dec     GCRERR
 16828:          bne     LF9FA
 16829:          nop
 16830:          jsr     L8770
 16831:  .else
 16832:          lda     VDC_PB2
 16833:          and     # ~ VDC_PB2_DRIVE0MOTOR
 16834:          sta     VDC_PB2
 16835:  .endif
 16836:          lda     #$FF
 16837:          sta     CDRIVE
 16838:          lda     #$00
 16839:          sta     DRVST
 16840:          beq     LF9D6
 16841:  LF9FA:
 16842:          tya
 16843:          and     #$40
 16844:          bne     LFA02
 16845:          jmp     LFABE
 16846:  LFA02:
 16847:          jmp     (NXTST)
 16848:  LFA05:
 16849:          lda     STEPS
 16850:          bpl     LFA0E
 16851:          eor     #$FF
 16852:          clc
 16853:          adc     #$01
 16854:  LFA0E:
 16855:          cmp     MINSTP
 16856:          bcs     LFA1C
 16857:          lda     #<LFA3B
 16858:          sta     NXTST
 16859:          lda     #>LFA3B
 16860:          sta     NXTST + 1
 16861:          bne     LFA2E
 16862:  LFA1C:
 16863:          sbc     AS
 16864:          sbc     AS
 16865:          sta     RSTEPS
 16866:          lda     AS
 16867:          sta     ACLSTP
 16868:          lda     #<LFA7B
 16869:          sta     NXTST
 16870:          lda     #>LFA7B
 16871:          sta     NXTST + 1
 16872:  LFA2E:
 16873:          lda     STEPS
 16874:          bpl     LFA63
 16875:  .if CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03
 16876:    .if CompileDrive >= DRIVE_1570
 16877:          jmp     LFF45
 16878:    .else
 16879:          jmp     LFF36
 16880:    .endif
 16881:          FillNOP 3
 16882:  LFA38:
 16883:          jmp     LFA69
 16884:  
 16885:  .else
 16886:  
 16887:          inc     STEPS
 16888:          ldx     VDC_PB2
 16889:          dex
 16890:          jmp     LFA69
 16891:  .endif
 16892:  
 16893:  LFA3B:
 16894:          lda     STEPS
 16895:          bne     LFA2E
 16896:          lda     #<LFA4E
 16897:          sta     NXTST
 16898:          lda     #>LFA4E
 16899:          sta     NXTST + 1
 16900:          lda     #$05
 16901:          sta     ACLSTP
 16902:          jmp     LFABE
 16903:  LFA4E:
 16904:          dec     ACLSTP
 16905:          bne     LFABE
 16906:          lda     DRVST
 16907:          and     #$BF
 16908:          sta     DRVST
 16909:          lda     #<LFA05
 16910:          sta     NXTST
 16911:          lda     #>LFA05
 16912:          sta     NXTST + 1
 16913:          jmp     LFABE
 16914:  LFA63:
 16915:          dec     STEPS
 16916:          ldx     VDC_PB2
 16917:          inx
 16918:  LFA69:
 16919:          txa
 16920:          and     #VDC_PB2_STEPPER
 16921:          sta     TMP
 16922:          lda     VDC_PB2
 16923:          and     # ~ VDC_PB2_STEPPER
 16924:          ora     TMP
 16925:          sta     VDC_PB2
 16926:          jmp     LFABE
 16927:  LFA7B:
 16928:          sec
 16929:          lda     VDC_T1HL2
 16930:          sbc     AF
 16931:          sta     VDC_T1HC2
 16932:          dec     ACLSTP
 16933:          bne     LFA94
 16934:          lda     AS
 16935:          sta     ACLSTP
 16936:          lda     #<LFA97
 16937:          sta     NXTST
 16938:          lda     #>LFA97
 16939:          sta     NXTST + 1
 16940:  LFA94:
 16941:          jmp     LFA2E
 16942:  LFA97:
 16943:          dec     RSTEPS
 16944:          bne     LFA94
 16945:          lda     #<LFAA5
 16946:          sta     NXTST
 16947:          lda     #>LFAA5
 16948:          sta     NXTST + 1
 16949:          bne     LFA94
 16950:  LFAA5:
 16951:          lda     VDC_T1HL2
 16952:          clc
 16953:          adc     AF
 16954:          sta     VDC_T1HC2
 16955:          dec     ACLSTP
 16956:          bne     LFA94
 16957:          lda     #<LFA4E
 16958:          sta     NXTST
 16959:          lda     #>LFA4E
 16960:          sta     NXTST + 1
 16961:          lda     #$05
 16962:          sta     ACLSTP
 16963:  LFABE:
 16964:          lda     VDC_PCR2
 16965:          and     #$FD
 16966:          sta     VDC_PCR2
 16967:          rts
 16968:  LFAC7:
 16969:          lda     FTNUM
 16970:          bpl     LFAF5
 16971:          ldx     DRIVE
 16972:          lda     #$60
 16973:          sta     DRVST,x
 16974:          lda     #$01
 16975:          sta     DRVTRK,x
 16976:          sta     FTNUM
 16977:          lda     #$A4
 16978:          sta     STEPS
 16979:          lda     VDC_PB2
 16980:          and     # ~ VDC_PB2_STEPPER
 16981:          sta     VDC_PB2
 16982:          lda     #$0A
 16983:          sta     BUFFER3 + 32
 16984:          lda     #$A0
 16985:          sta     BUFFER3 + 33
 16986:          lda     #$0F
 16987:          sta     BUFFER3 + 34
 16988:          jmp     LF99C
 16989:  LFAF5:
 16990:          ldy     #$00
 16991:          cmp     (HDRPNT),y
 16992:          beq     LFB00
 16993:          sta     (HDRPNT),y
 16994:          jmp     LF99C
 16995:  LFB00:
 16996:          lda     VDC_PB2
 16997:          and     #VDC_PB2_WRITEPROTECT
 16998:          bne     LFB0C
 16999:          lda     #$08
 17000:          jmp     LFDD3
 17001:  LFB0C:
 17002:          jsr     LFDA3
 17003:          jsr     LFDC3
 17004:          lda     #$55
 17005:          sta     VDC_PA2
 17006:          jsr     LFDC3
 17007:          jsr     LFE00
 17008:          jsr     LF556
 17009:          lda     #$40
 17010:          ora     VBC_ACR1
 17011:          sta     VBC_ACR1
 17012:          lda     #$62
 17013:          sta     VBC_T1LL1
 17014:          lda     #$00
 17015:          sta     VBC_T1HL1
 17016:          sta     VBC_T1HC1
 17017:          ldy     #$00
 17018:          ldx     #$00
 17019:  LFB39:
 17020:          bit     VDC_PB2
 17021:          bmi     LFB39
 17022:  LFB3E:
 17023:          bit     VDC_PB2
 17024:          bpl     LFB3E
 17025:  LFB43:
 17026:          lda     VBC_T1LC1
 17027:  LFB46:
 17028:          bit     VDC_PB2
 17029:          bpl     LFB5C
 17030:          lda     VBC_IFR1
 17031:          asl     a
 17032:          bpl     LFB46
 17033:          inx
 17034:          bne     LFB43
 17035:          iny
 17036:          bne     LFB43
 17037:          lda     #$02
 17038:          jmp     LFDD3
 17039:  LFB5C:
 17040:          stx     T2
 17041:          sty     T3
 17042:          ldx     #$00
 17043:          ldy     #$00
 17044:  LFB64:
 17045:          lda     VBC_T1LC1
 17046:  LFB67:
 17047:          bit     VDC_PB2
 17048:          bmi     LFB7D
 17049:          lda     VBC_IFR1
 17050:          asl     a
 17051:          bpl     LFB67
 17052:          inx
 17053:          bne     LFB64
 17054:          iny
 17055:          bne     LFB64
 17056:          lda     #$02
 17057:          jmp     LFDD3
 17058:  LFB7D:
 17059:          sec
 17060:          txa
 17061:          sbc     T2
 17062:          tax
 17063:          sta     T1
 17064:          tya
 17065:          sbc     T3
 17066:          tay
 17067:          sta     T2
 17068:          bpl     LFB97
 17069:          eor     #$FF
 17070:          tay
 17071:          txa
 17072:          eor     #$FF
 17073:          tax
 17074:          inx
 17075:          bne     LFB97
 17076:          iny
 17077:  LFB97:
 17078:          tya
 17079:          bne     LFB9E
 17080:          cpx     #$04
 17081:          bcc     LFBB6
 17082:  LFB9E:
 17083:          asl     T1
 17084:          rol     T2
 17085:          clc
 17086:          lda     T1
 17087:          adc     BUFFER3 + 33
 17088:          sta     BUFFER3 + 33
 17089:          lda     T2
 17090:          adc     BUFFER3 + 34
 17091:          sta     BUFFER3 + 34
 17092:          jmp     LFB0C
 17093:  LFBB6:
 17094:          ldx     #$00
 17095:          ldy     #$00
 17096:          clv
 17097:  LFBBB:
 17098:          lda     VDC_PB2
 17099:          bpl     LFBCE
 17100:          bvc     LFBBB
 17101:          clv
 17102:          inx
 17103:          bne     LFBBB
 17104:          iny
 17105:          bne     LFBBB
 17106:          lda     #$03
 17107:          jmp     LFDD3
 17108:  LFBCE:
 17109:          txa
 17110:          asl     a
 17111:          sta     BUFFER3 + 37
 17112:          tya
 17113:          rol     a
 17114:          sta     BUFFER3 + 36
 17115:          lda     #$BF
 17116:          and     VBC_ACR1
 17117:          sta     VBC_ACR1
 17118:          lda     #$66
 17119:          sta     BUFFER3 + 38
 17120:          ldx     SECTR
 17121:          ldy     #$00
 17122:          tya
 17123:  LFBEA:
 17124:          clc
 17125:          adc     BUFFER3 + 38
 17126:          bcc     LFBF1
 17127:          iny
 17128:  LFBF1:
 17129:          iny
 17130:          dex
 17131:          bne     LFBEA
 17132:          eor     #$FF
 17133:          sec
 17134:          adc     #$00
 17135:          clc
 17136:          adc     BUFFER3 + 37
 17137:          bcs     LFC03
 17138:          dec     BUFFER3 + 36
 17139:  LFC03:
 17140:          tax
 17141:          tya
 17142:          eor     #$FF
 17143:          sec
 17144:          adc     #$00
 17145:          clc
 17146:          adc     BUFFER3 + 36
 17147:          bpl     LFC15
 17148:          lda     #$04
 17149:          jmp     LFDD3
 17150:  LFC15:
 17151:          tay
 17152:          txa
 17153:          ldx     #$00
 17154:  LFC19:
 17155:          sec
 17156:          sbc     SECTR
 17157:          bcs     LFC21
 17158:          dey
 17159:          bmi     LFC24
 17160:  LFC21:
 17161:          inx
 17162:          bne     LFC19
 17163:  LFC24:
 17164:          stx     BUFFER3 + 38
 17165:  .if CompileDrive = DRIVE_1541C_02
 17166:          cpx     #$02
 17167:  .else
 17168:          cpx     #$04
 17169:  .endif
 17170:          bcs     LFC30
 17171:          lda     #$05
 17172:          jmp     LFDD3
 17173:  LFC30:
 17174:          clc
 17175:          adc     SECTR
 17176:          sta     BUFFER3 + 39
 17177:          lda     #$00
 17178:          sta     BUFFER3 + 40
 17179:          ldy     #$00
 17180:          ldx     DRIVE
 17181:  LFC3F:
 17182:          lda     HBID
 17183:          sta     BUFFER0,y
 17184:          iny
 17185:          iny
 17186:          lda     BUFFER3 + 40
 17187:          sta     BUFFER0,y
 17188:          iny
 17189:          lda     FTNUM
 17190:          sta     BUFFER0,y
 17191:          iny
 17192:          lda     DiskID0 + 1,x
 17193:          sta     BUFFER0,y
 17194:          iny
 17195:          lda     DiskID0,x
 17196:          sta     BUFFER0,y
 17197:          iny
 17198:          lda     #$0F
 17199:          sta     BUFFER0,y
 17200:          iny
 17201:          sta     BUFFER0,y
 17202:          iny
 17203:          lda     #$00
 17204:          eor     NDBL,y
 17205:          eor     NDBL + 1,y
 17206:          eor     NDBH,y
 17207:          eor     NDBH + 1,y
 17208:          sta     WBAM,y
 17209:          inc     BUFFER3 + 40
 17210:          lda     BUFFER3 + 40
 17211:          cmp     SECTR
 17212:          bcc     LFC3F
 17213:          tya
 17214:          pha
 17215:  .if CompileDrive >= DRIVE_1541_01
 17216:          inx
 17217:  .elseif CompileDrive >= DRIVE_1540
 17218:          nop
 17219:  .else
 17220:          ldx     #$00
 17221:  .endif
 17222:          txa
 17223:  LFC88:
 17224:          sta     BUFFER2,x
 17225:          inx
 17226:          bne     LFC88
 17227:          lda     #$03
 17228:          sta     BUFPNT + 1
 17229:          jsr     LFE30
 17230:          pla
 17231:          tay
 17232:          dey
 17233:          jsr     LFDE5
 17234:          jsr     LFDF5
 17235:          lda     #$05
 17236:          sta     BUFPNT + 1
 17237:          jsr     LF5E9
 17238:          sta     CHKSUM
 17239:          jsr     LF78F
 17240:          lda     #$00
 17241:          sta     HDRPNT
 17242:  .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 17243:          jsr     LC002
 17244:  .else
 17245:          jsr     LFE0E
 17246:  .endif
 17247:  
 17248:  LFCB1:
 17249:          lda     #$FF
 17250:          sta     VDC_PA2
 17251:          ldx     #$05
 17252:  LFCB8:
 17253:          bvc     LFCB8
 17254:          clv
 17255:          dex
 17256:          bne     LFCB8
 17257:          ldx     #$0A
 17258:          ldy     HDRPNT
 17259:  LFCC2:
 17260:          bvc     LFCC2
 17261:          clv
 17262:          lda     BUFFER0,y
 17263:          sta     VDC_PA2
 17264:          iny
 17265:          dex
 17266:          bne     LFCC2
 17267:          ldx     #INTRA_SECTOR_GAP
 17268:  LFCD1:
 17269:          bvc     LFCD1
 17270:          clv
 17271:          lda     #$55
 17272:          sta     VDC_PA2
 17273:          dex
 17274:          bne     LFCD1
 17275:          lda     #$FF
 17276:          ldx     #$05
 17277:  LFCE0:
 17278:          bvc     LFCE0
 17279:          clv
 17280:          sta     VDC_PA2
 17281:          dex
 17282:          bne     LFCE0
 17283:          ldx     #$BB
 17284:  LFCEB:
 17285:          bvc     LFCEB
 17286:          clv
 17287:          lda     NODRV + 1,x
 17288:          sta     VDC_PA2
 17289:          inx
 17290:          bne     LFCEB
 17291:          ldy     #$00
 17292:  LFCF9:
 17293:          bvc     LFCF9
 17294:          clv
 17295:          lda     (BUFPNT),y
 17296:          sta     VDC_PA2
 17297:          iny
 17298:          bne     LFCF9
 17299:          lda     #$55
 17300:          ldx     BUFFER3 + 38
 17301:  LFD09:
 17302:          bvc     LFD09
 17303:          clv
 17304:          sta     VDC_PA2
 17305:          dex
 17306:          bne     LFD09
 17307:          lda     HDRPNT
 17308:          clc
 17309:          adc     #$0A
 17310:          sta     HDRPNT
 17311:          dec     BUFFER3 + 40
 17312:          bne     LFCB1
 17313:  LFD1E:
 17314:          bvc     LFD1E
 17315:          clv
 17316:  LFD21:
 17317:          bvc     LFD21
 17318:          clv
 17319:          jsr     LFE00
 17320:          lda     #$C8
 17321:          sta     BUFFER3 + 35
 17322:  LFD2C:
 17323:          lda     #$00
 17324:          sta     BUFPNT
 17325:          lda     #$03
 17326:          sta     BUFPNT + 1
 17327:          lda     SECTR
 17328:          sta     BUFFER3 + 40
 17329:  LFD39:
 17330:          jsr     LF556
 17331:          ldx     #$0A
 17332:          ldy     #$00
 17333:  LFD40:
 17334:          bvc     LFD40
 17335:          clv
 17336:          lda     VDC_PA2
 17337:          cmp     (BUFPNT),y
 17338:          bne     LFD58
 17339:          iny
 17340:          dex
 17341:          bne     LFD40
 17342:          clc
 17343:          lda     BUFPNT
 17344:          adc     #$0A
 17345:          sta     BUFPNT
 17346:          jmp     LFD62
 17347:  LFD58:
 17348:          dec     BUFFER3 + 35
 17349:          bne     LFD2C
 17350:          lda     #$06
 17351:          jmp     LFDD3
 17352:  LFD62:
 17353:          jsr     LF556
 17354:          ldy     #$BB
 17355:  LFD67:
 17356:          bvc     LFD67
 17357:          clv
 17358:          lda     VDC_PA2
 17359:          cmp     NODRV + 1,y
 17360:          bne     LFD58
 17361:          iny
 17362:          bne     LFD67
 17363:          ldx     #$FC
 17364:  LFD77:
 17365:          bvc     LFD77
 17366:          clv
 17367:          lda     VDC_PA2
 17368:          cmp     BUFFER2,y
 17369:          bne     LFD58
 17370:          iny
 17371:          dex
 17372:          bne     LFD77
 17373:          dec     BUFFER3 + 40
 17374:          bne     LFD39
 17375:          inc     FTNUM
 17376:          lda     FTNUM
 17377:          cmp     #$24
 17378:          bcs     LFD96
 17379:          jmp     LF99C
 17380:  LFD96:
 17381:          lda     #$FF
 17382:          sta     FTNUM
 17383:          lda     #$00
 17384:          sta     GCRFLG
 17385:          lda     #$01
 17386:          jmp     LF969
 17387:  LFDA3:
 17388:          lda     VDC_PCR2
 17389:          and     #$1F
 17390:          ora     #$C0
 17391:          sta     VDC_PCR2
 17392:          lda     #$FF
 17393:          sta     VDC_DDRA2
 17394:          sta     VDC_PA2
 17395:          ldx     #$28
 17396:          ldy     #$00
 17397:  LFDB9:
 17398:          bvc     LFDB9
 17399:          clv
 17400:          dey
 17401:          bne     LFDB9
 17402:          dex
 17403:          bne     LFDB9
 17404:          rts
 17405:  LFDC3:
 17406:          ldx     BUFFER3 + 33
 17407:          ldy     BUFFER3 + 34
 17408:  LFDC9:
 17409:          bvc     LFDC9
 17410:          clv
 17411:          dex
 17412:          bne     LFDC9
 17413:          dey
 17414:          bpl     LFDC9
 17415:          rts
 17416:  LFDD3:
 17417:          dec     BUFFER3 + 32
 17418:          beq     LFDDB
 17419:          jmp     LF99C
 17420:  LFDDB:
 17421:          ldy     #$FF
 17422:          sty     FTNUM
 17423:          iny
 17424:          sty     GCRFLG
 17425:          jmp     LF969
 17426:  LFDE5:
 17427:          lda     BUFFER0,y
 17428:          sta     BUFFER0 + 69,y
 17429:          dey
 17430:          bne     LFDE5
 17431:          lda     BUFFER0
 17432:          sta     BUFFER0 + 69
 17433:          rts
 17434:  LFDF5:
 17435:          ldy     #$44
 17436:  LFDF7:
 17437:          lda     L01BB,y
 17438:          sta     (BUFPNT),y
 17439:          dey
 17440:          bpl     LFDF7
 17441:          rts
 17442:  LFE00:
 17443:          lda     VDC_PCR2
 17444:          ora     #$E0
 17445:          sta     VDC_PCR2
 17446:          lda     #$00
 17447:          sta     VDC_DDRA2
 17448:          rts
 17449:  
 17450:  LFE0E:
 17451:          WRITE_55_TIMES $2800
 17452:          rts
 17453:          ; --------------
 17454:  
 17455:  LFE30:
 17456:          lda     #$00
 17457:          sta     BUFPNT
 17458:          sta     SAVPNT
 17459:          sta     BYTCNT
 17460:          lda     #$BB
 17461:          sta     GCRPNT
 17462:          lda     BUFPNT + 1
 17463:          sta     SAVPNT + 1
 17464:          lda     #$01
 17465:          sta     BUFPNT + 1
 17466:  LFE44:
 17467:          ldy     BYTCNT
 17468:          lda     (SAVPNT),y
 17469:          sta     BTAB
 17470:          iny
 17471:          lda     (SAVPNT),y
 17472:          sta     BTAB + 1
 17473:          iny
 17474:          lda     (SAVPNT),y
 17475:          sta     BTAB + 2
 17476:          iny
 17477:          lda     (SAVPNT),y
 17478:          sta     BTAB + 3
 17479:          iny
 17480:          beq     LFE64
 17481:          sty     BYTCNT
 17482:          jsr     LF6D0
 17483:          jmp     LFE44
 17484:  LFE64:
 17485:          jmp     LF6D0
 17486:  
 17487:  IRQ:
 17488:  .if CompileDrive >= DRIVE_1570
 17489:          jmp     (VIRQJOB1570)
 17490:  .else
 17491:          pha
 17492:          txa
 17493:          pha
 17494:  .endif
 17495:          tya
 17496:          pha
 17497:          lda     VBC_IFR1
 17498:          and     #$02
 17499:          beq     LFE76
 17500:          jsr     SetATNPending                   ; Set the ATN pending flag to mark that the bus must be processed
 17501:  LFE76:
 17502:          lda     VDC_IFR2
 17503:          asl     a
 17504:          bpl     LFE7F
 17505:          jsr     LF2B0
 17506:  LFE7F:
 17507:          pla
 17508:          tay
 17509:          pla
 17510:          tax
 17511:          pla
 17512:          rti
 17513:  LFE85:
 17514:          .byte   $12,$04,$04,$90
 17515:  
 17516:  CmdChars:
 17517:          .byte   "VIDMBUP&"
 17518:  CmdChars_With2Files:
 17519:          .byte   "CRSN"
 17520:  CmdChars_END:
 17521:  
 17522:  CmdAddresses_Low:
 17523:          .byte   <cmd_validate,<cmd_init,<cmd_duplicate,<cmd_memory,<cmd_block,<cmd_user
 17524:          .byte   <cmd_position,<cmd_ampersand,<cmd_copy,<cmd_rename,<cmd_scratch,<cmd_new
 17525:  
 17526:  CmdAddresses_High:
 17527:          .byte   >cmd_validate,>cmd_init,>cmd_duplicate,>cmd_memory,>cmd_block,>cmd_user
 17528:          .byte   >cmd_position,>cmd_ampersand,>cmd_copy,>cmd_rename,>cmd_scratch,>cmd_new
 17529:  
 17530:  CmdSyntaxFlags:
 17531:          ; syntax flags for the commands after CmdChars_With2Files
 17532:          .byte   $51,$DD,$1C,$9E,$1C
 17533:  
 17534:  LFEB2:
 17535:          .byte   "RWAM"
 17536:  LFEB6:
 17537:          .byte   "DSPUL"
 17538:  LFEBB:
 17539:          .byte   "DSPUR"
 17540:  LFEC0:
 17541:          .byte   "EERSE"
 17542:  LFEC5:
 17543:          .byte   "LQGRL"
 17544:  
 17545:  DriveLEDMasks:
 17546:          .byte   VDC_PB2_DRIVE0LED, VDC_PB2_DRIVE1LED
 17547:  
 17548:  LFECC:
 17549:          .byte   $00
 17550:  LFECD:
 17551:          .byte   $3F
 17552:  LFECE:
 17553:          .byte   $7F
 17554:  LFECF:
 17555:          .byte   $BF
 17556:  LFED0:
 17557:          .byte   $FF
 17558:  LFED1:
 17559:          .byte   $11,$12,$13,$15
 17560:  LFED5:
 17561:          .byte   $41
 17562:  LFED6:
 17563:          .byte   $04
 17564:  
 17565:  MaxTrack1541:
 17566:  SpeedZoneChange:
 17567:          .byte   36, 31, 25, 18
 17568:  
 17569:  LFEDB:
 17570:          .byte   $01,$FF,$FF,$01,$00
 17571:  TableHighBytesOfBuffers:
 17572:          .byte   $03,$04,$05,$06,$07,$07
 17573:  
 17574:  LFEE6:
 17575:          .byte   DRIVE_CHKSUM_FEE6
 17576:  LFEE7:
 17577:          jmp     (VNMI)
 17578:  
 17579:  .if CompileDrive >= DRIVE_1540
 17580:  PATCH_PostFailError:
 17581:          PATCH_POSTFAILERROR
 17582:          jmp     PATCH_PostFailError_END
 17583:  .else
 17584:          FillCount 9
 17585:  .endif
 17586:  
 17587:  .if CompileDrive >= DRIVE_1541_01
 17588:  LFEF3:
 17589:          txa
 17590:          ldx     #$05
 17591:  LFEF6:
 17592:          dex
 17593:          bne     LFEF6
 17594:          tax
 17595:          rts
 17596:  
 17597:  LFEFB:
 17598:          jsr     SetClockOut
 17599:          jmp     ClearDataOut
 17600:  LFF01:
 17601:          lda     CMDBUF + 2
 17602:          cmp     #'-'
 17603:          beq     LFF0D
 17604:          sec
 17605:          sbc     #'+'
 17606:          bne     LFEE7
 17607:  LFF0D:
 17608:          sta     DRVTRK + 1
 17609:          rts
 17610:  .endif
 17611:  
 17612:  .if CompileDrive >= DRIVE_1541_05
 17613:          FillUntil $FF10
 17614:  
 17615:          ; this is a patch in the RESET routine.
 17616:          ; Additionally to setting the DDRA of the BC, also set the DDRB and the PB of the BC,
 17617:          ; so the bus is initialized as soon as possible
 17618:  PATCH_INIT_BC:
 17619:          stx     VBC_DDRA1       ; set the DDR of the port A
 17620:  
 17621:          ; set DATA OUT, reset CLOCK OUT and ATNA
 17622:          lda     #VBC_PB1_1540_DATAOUT
 17623:  .if CompileDrive >= DRIVE_1570
 17624:          jmp     PATCH_INIT_BC_1570
 17625:  .else
 17626:          sta     VBC_PB1
 17627:  .endif
 17628:  PATCH_INIT_BC_1570_END:
 17629:          lda     #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA
 17630:          sta     VBC_DDRB1
 17631:          jmp     PATCH_INIT_BC_END
 17632:  
 17633:  LFF20:
 17634:          lda     VBC_PB1
 17635:          and     #VBC_PB1_1540_DATAIN
 17636:          bne     LFF20
 17637:          lda     #>$0100
 17638:          sta     VBC_T1HC1
 17639:          jmp     LE9DF
 17640:  .endif
 17641:  
 17642:  LFF2F:
 17643:  .if CompileDrive = DRIVE_1541_06AA
 17644:          lda     #$FF
 17645:          sta     FTNUM
 17646:          jmp     LC8C6
 17647:  .endif
 17648:  
 17649:  .if CompileDrive >= DRIVE_1541C_01
 17650:          lda     #$FF
 17651:          sta     FTNUM
 17652:  
 17653:  .if CompileDrive >= DRIVE_1570
 17654:          lda     VBC_PAUNBUF1
 17655:          and     #VBC_PA1_20
 17656:          bne     LFF3D
 17657:          lda     #$24
 17658:          .byte   ASM_BIT3
 17659:  LFF3D:
 17660:          lda     #MAXTRACK_DOUBLESIDED + 1
 17661:          sta     MAXTRACK_ADJUSTED
 17662:          jmp     LA779
 17663:  LFF45:
 17664:          tya
 17665:          pha
 17666:          ldy     #$64
 17667:  LFF49:
 17668:          lda     VBC_PAUNBUF1
 17669:          ror     a
 17670:          php
 17671:          lda     VBC_PAUNBUF1
 17672:          ror     a
 17673:          ror     a
 17674:          plp
 17675:          and     #$80
 17676:          bcc     LFF5C
 17677:          bpl     LFF77
 17678:          bmi     LFF5E
 17679:  LFF5C:
 17680:          bmi     LFF77
 17681:  LFF5E:
 17682:          dey
 17683:          bne     LFF49
 17684:          bcs     LFF77
 17685:          lda     VDC_PB2
 17686:          and     #VDC_PB2_STEPPER
 17687:          bne     LFF77
 17688:          lda     ADRSED
 17689:          bne     LFF77
 17690:          pla
 17691:          tay
 17692:          lda     #$00
 17693:          sta     STEPS
 17694:          jmp     LFABE
 17695:  LFF77:
 17696:          pla
 17697:          tay
 17698:          inc     STEPS
 17699:          ldx     VDC_PB2
 17700:          dex
 17701:          jmp     LFA38
 17702:  
 17703:  LFF82:
 17704:          jsr     LF259
 17705:          lda     #$05
 17706:          sta     BYTE
 17707:          lda     #$88
 17708:          sta     VIRQJOB1570
 17709:          lda     #$9D
 17710:          sta     VIRQJOB1570 + 1
 17711:          lda     #MAXTRACK_SINGLESIDED + 1
 17712:          sta     MAXTRACK_ADJUSTED
 17713:          clc
 17714:          jmp     L93F3
 17715:          ; -------------------
 17716:  
 17717:  LFF9C:
 17718:          sta     NODRV
 17719:          jmp     LC100
 17720:  LFFA1:
 17721:          sta     ADRSED
 17722:          jmp     LD676
 17723:          ; ------------
 17724:  
 17725:  LFFA6:
 17726:          jsr     LD676
 17727:          lda     #$00
 17728:          sta     ADRSED
 17729:          rts
 17730:  LFFAE:
 17731:          ldy     LINDX
 17732:          jmp     LD3DE
 17733:  
 17734:   .else
 17735:          jmp     LC8C6
 17736:    .if CompileDrive <> DRIVE_1541C_03
 17737:  LFF36:
 17738:          txa
 17739:          pha
 17740:          tya
 17741:          pha
 17742:          ldx     #$01
 17743:  LFF3C:
 17744:          ldy     #$64
 17745:  
 17746:  LFF3E:
 17747:          lda     VBC_PAUNBUF1
 17748:          cmp     VBC_PAUNBUF1
 17749:          bne     LFF62
 17750:          dey
 17751:          bne     LFF3E
 17752:          dex
 17753:          bne     LFF3C
 17754:          and     #VBC_PA1_01
 17755:          beq     LFF62
 17756:          lda     VDC_PB2
 17757:          and     #VDC_PB2_STEPPER
 17758:          bne     LFF62
 17759:     .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 17760:          lda     ADRSED
 17761:          bne     LFF62
 17762:     .endif
 17763:          pla
 17764:          tay
 17765:          pla
 17766:          tax
 17767:          lda     #$00
 17768:          sta     STEPS
 17769:          jmp     LFABE
 17770:  LFF62:
 17771:          pla
 17772:          tay
 17773:          pla
 17774:          tax
 17775:          inc     STEPS
 17776:          ldx     VDC_PB2
 17777:          dex
 17778:          jmp     LFA38
 17779:  LFF6F:
 17780:          jsr     LF259
 17781:          lda     #$01
 17782:          sta     TRACK0
 17783:          lda     #$C0
 17784:          sta     JOBS0
 17785:          rts
 17786:          ; ------------
 17787:  
 17788:    .endif
 17789:  
 17790:    .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 17791:  
 17792:  LFF7F:
 17793:          sta     NODRV
 17794:          jmp     LC100
 17795:     .if CompileDrive <> DRIVE_1541C_03
 17796:  LFF84:
 17797:          sta     ADRSED
 17798:          jmp     LD676
 17799:  LFF89:
 17800:          jsr     LD676
 17801:          lda     #$00
 17802:          sta     ADRSED
 17803:          rts
 17804:     .endif
 17805:  LFF91:
 17806:          cmp     #$02
 17807:          bcc     LFF9C
 17808:          cmp     #$0F
 17809:          beq     LFF9C
 17810:          jmp     LD36B
 17811:  LFF9C:
 17812:          jmp     LD373
 17813:  
 17814:  PATCH_ShortReset:
 17815:          sei                                     ; disallow interrupts --> blocking job loop
 17816:  
 17817:          ldx     #<SP_END                        ; set SP to $0145
 17818:          txs
 17819:  
 17820:          jmp     PATCH_ShortReset_END
 17821:  
 17822:  Patch_ClearPALatch_ProcessBus:
 17823:          bit     VBC_PA1
 17824:          jmp     ProcessBus
 17825:  
 17826:  LFFAC:
 17827:          lda     a:NODRV,x
 17828:          rts
 17829:  LFFB0:
 17830:          ldx     DRVNUM
 17831:          lda     a:NODRV,x
 17832:          jmp     LF01B
 17833:  LFFB8:
 17834:          lda     #$00
 17835:          sta     a:NODRV,x
 17836:          jmp     LC1B7
 17837:  LFFC0:
 17838:          tya
 17839:          sta     a:NODRV,x
 17840:          jmp     LC664
 17841:  LFFC7:
 17842:          sta     WPSW,x
 17843:          sta     a:NODRV,x
 17844:          jmp     LD075
 17845:  
 17846:    .endif
 17847:   .endif
 17848:  .endif
 17849:  
 17850:  .if (CompileDrive >= DRIVE_1541_02) .AND (CompileDrive <= DRIVE_1541_03)
 17851:          FillUntil $FFE2
 17852:  
 17853:          .byte   "RSR"
 17854:  .endif
 17855:  
 17856:  .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
 17857:  
 17858:          FillUntil $FFE5
 17859:          .byte   DRIVE_CHKSUM_FFE5
 17860:  
 17861:  .endif
 17862:  
 17863:          FillUntil $FFE6
 17864:  
 17865:  .if CompileDrive >= DRIVE_1540
 17866:          .addr   LC8C6
 17867:  .else
 17868:          .addr   LFAC7
 17869:  .endif
 17870:          .addr   LF98F
 17871:  
 17872:          ; addresses for the Ux commands (U1-U9)
 17873:  
 17874:  AddressesUxCommands:
 17875:          .addr   CMD_U1
 17876:          .addr   CMD_U2
 17877:          .addr   BUFFER2                 ; $0500
 17878:          .addr   BUFFER2 + 3             ; $0503
 17879:          .addr   BUFFER2 + 6             ; $0506
 17880:          .addr   BUFFER2 + 9             ; $0509
 17881:          .addr   BUFFER2 + 12            ; $050C
 17882:          .addr   BUFFER2 + 15            ; $050F
 17883:  
 17884:  .if CompileDrive >= DRIVE_1541_01
 17885:          .addr   LFF01
 17886:  .else
 17887:          .addr   LFEE7
 17888:  .endif
 17889:          .addr   RESET
 17890:          .addr   IRQ
 17891:  
 17892:  
 17893:  ; Blink codes:
 17894:  ; 1 blink  --> ZP error
 17895:  ; 2 blinks --> 1570/1571:      ROM checksum error
 17896:  ;              2031/1540/1541: ROM $E000-$FFFF checksum error
 17897:  ; 3 blinks --> 1570/1571:      RAM failure ($0100-$07FF)
 17898:  ;              2031/1540/1541: ROM $C000-$DFFF checksum error
 17899:  ; 4 blinks --> 2031/1540/1541: RAM failure ($0100-$07FF)
 17900:  ;
Valid XHTML 1.0 Strict
floppyrom.a65.html; generated on Fri Sep 18 21:44:54 2015 by ca65html
uz@cc65.org