floppyrom.a65.full

     1:  
     2:          .setcpu "6502"
     3:  
     4:  ; .include "../asm6502.inc"
     5:  ASM_JMP = $4C
     6:  ASM_BIT2 = $24
     7:  ASM_BIT3 = $2C
     8:  
     9:  ; Flags of the 6502
    10:  A6502_FLAGS_N = $80     ; Negative
    11:  A6502_FLAGS_V = $40     ; oVerflow
    12:  A6502_FLAGS_R = $20     ; Reserved
    13:  A6502_FLAGS_B = $10     ; Break (only valid on stack after BRK/IRQ, otherwise 0)
    14:  A6502_FLAGS_D = $08     ; Decimal
    15:  A6502_FLAGS_I = $04     ; Interrupt
    16:  A6502_FLAGS_Z = $02     ; Zero
    17:  A6502_FLAGS_C = $01     ; Carry
    18:  ; .include "../macros.inc"
    19:  ; htasc - set the hi bit on the last byte of a string for termination
    20:  ; (by Tom Greene)
    21:  .macro htasc str
    22:          .repeat .strlen(str)-1,I
    23:                  .byte   .strat(str,I)
    24:          .endrep
    25:          .byte   .strat(str,.strlen(str)-1) | $80
    26:  .endmacro
    27:  
    28:  .macro htasc_floppy_error str
    29:          .byte   .strat(str,0) | $80
    30:          .repeat .strlen(str)-2,I
    31:                  .byte   .strat(str,I + 1)
    32:          .endrep
    33:          .byte   .strat(str,.strlen(str)-1) | $80
    34:  .endmacro
    35:  
    36:  ; For every token, a byte gets put into segment "DUMMY".
    37:  ; This way, we count up with every token. The DUMMY segment
    38:  ; doesn't get linked into the binary.
    39:  .macro init_token_tables
    40:          .segment "VECTORS"
    41:  TOKEN_ADDRESS_TABLE:
    42:          .segment "KEYWORDS"
    43:  TOKEN_NAME_TABLE:
    44:                  .segment "DUMMY"
    45:  DUMMY_START:
    46:  .endmacro
    47:  
    48:  ; optionally define token symbol
    49:  ; count up token number
    50:  .macro define_token token
    51:          .segment "DUMMY"
    52:                  .ifnblank token
    53:  token := <(*-DUMMY_START)+$80
    54:                  .endif
    55:                  .res 1; count up in any case
    56:  .endmacro
    57:  
    58:  ; lay down a keyword, optionally define a token symbol
    59:  .macro keyword key, token
    60:                  .segment "KEYWORDS"
    61:                  htasc   key
    62:                  define_token token
    63:  .endmacro
    64:  
    65:  ; lay down a keyword and an address (RTS style),
    66:  ; optionally define a token symbol
    67:  .macro keyword_rts key, vec, token
    68:          .segment "VECTORS"
    69:                  .word   vec-1
    70:                  keyword key, token
    71:  .endmacro
    72:  
    73:  ; lay down a keyword and an address,
    74:  ; optionally define a token symbol
    75:  .macro keyword_addr key, vec, token
    76:          .segment "VECTORS"
    77:                  .addr   vec
    78:                  keyword key, token
    79:  .endmacro
    80:  
    81:  .macro count_tokens
    82:          .segment "DUMMY"
    83:  NUM_TOKENS := <(*-DUMMY_START)
    84:  .endmacro
    85:  
    86:  .macro init_error_table
    87:          .segment "DUMMY"
    88:  DUMMY_START_ERROR:
    89:  
    90:          .segment "ERROR"
    91:  ERROR_MESSAGES:
    92:  .endmacro
    93:  
    94:  .ifdef CBM2_EXT_FILE_ERRORS
    95:   .macro define_error_token token
    96:          .segment "DUMMY"
    97:                  .ifnblank token
    98:  token := <(*-DUMMY_START_ERROR + 1)
    99:                  .endif
   100:                  .res 1; count up in any case
   101:   .endmacro
   102:  
   103:   .macro define_error error, msg, addr
   104:          .segment "ERROR"
   105:  addr := *
   106:                  htasc msg
   107:                  define_error_token error
   108:   .endmacro
   109:  
   110:  .else
   111:   .macro define_error error, msg, addr
   112:          .segment "ERROR"
   113:  error := <(*-ERROR_MESSAGES)
   114:                  htasc msg
   115:   .endmacro
   116:  
   117:  .endif
   118:  
   119:  ;---------------------------------------------
   120:  ; set the MSB of every byte of a string
   121:  .macro asc80 str
   122:          .repeat .strlen(str),I
   123:                  .byte   .strat(str,I)+$80
   124:          .endrep
   125:  .endmacro
   126:  
   127:  ; .include "../petscii.inc"
   128:  ASC_LF          = $0A
   129:  ASC_CR          = $0D
   130:  ASC_RVS         = $12
   131:  ASC_HOME        = $13
   132:  ASC_INSDEL      = $14
   133:  
   134:  ASC_LOWERCASE   = $0E
   135:  ASC_UPPERCASE   = $8E
   136:  ASC_DISALLOW_LOWERCASE = $08
   137:  ASC_ALLOW_LOWERCASE    = $09
   138:  
   139:  ASC_CURSORLEFTRIGHT = $1D
   140:  ASC_CURSORUPDOWN    = $11
   141:  
   142:  .if .defined(C64JAPAN)
   143:  ASC_PI          = $B0
   144:  .else
   145:  ASC_PI          = $DE
   146:  .endif
   147:  
   148:  KEY_NONE        = $40
   149:  KEY_STOP        = $03
   150:  
   151:  PETSCII_CRSR_RIGHT = $1D
   152:  
   153:  ; .include "defines.inc"
   154:  
   155:  DRIVE_UNKNOWN=0
   156:  
   157:  DRIVE_2031=DRIVE_UNKNOWN + $10
   158:  DRIVE_2031_01=DRIVE_2031 + 1
   159:  
   160:  DRIVE_1540=DRIVE_2031 + $10
   161:  DRIVE_1540_01=DRIVE_1540 + 1
   162:  
   163:  DRIVE_1541=DRIVE_1540 + $10
   164:  DRIVE_1541_01=DRIVE_1541 + 1
   165:  DRIVE_1541_02=DRIVE_1541 + 2
   166:  DRIVE_1541_03=DRIVE_1541 + 3
   167:  DRIVE_1541_05=DRIVE_1541 + 5
   168:  DRIVE_1541_06AA=DRIVE_1541 + 6
   169:  
   170:  DRIVE_1541C=DRIVE_1541 + $10
   171:  DRIVE_1541C_01=DRIVE_1541C + 1
   172:  DRIVE_1541C_02=DRIVE_1541C + 2
   173:  DRIVE_1541C_03=DRIVE_1541C + 3
   174:  
   175:  DRIVE_1570=DRIVE_1541C + $10
   176:  DRIVE_1570_01=DRIVE_1570 + 1
   177:  
   178:  DRIVE_1571=DRIVE_1570 + $10
   179:  DRIVE_1571_03=DRIVE_1571 + 3
   180:  DRIVE_1571_05=DRIVE_1571 + 5
   181:  
   182:  DRIVE_1571CR=DRIVE_1571 + $10
   183:  DRIVE_1571CR_01=DRIVE_1571CR + 1
   184:  
   185:  .ifdef v2031
   186:          .ifdef CompileDrive
   187:                  .error "Only one drive type can be compiled at a time!"
   188:          .endif
   189:  CompileDrive=DRIVE_2031 + v2031
   190:  .endif
   191:  
   192:  .ifdef v1540
   193:          .ifdef CompileDrive
   194:                  .error "Only one drive type can be compiled at a time!"
   195:          .endif
   196:  CompileDrive=DRIVE_1540 + v1540
   197:  .endif
   198:  
   199:  .ifdef v1541
   200:          .ifdef CompileDrive
   201:                  .error "Only one drive type can be compiled at a time!"
   202:          .endif
   203:  CompileDrive=DRIVE_1541 + v1541
   204:  .endif
   205:  
   206:  .ifdef v1541aa
   207:          .ifdef CompileDrive
   208:                  .error "Only one drive type can be compiled at a time!"
   209:          .endif
   210:          .if v1541aa = 06
   211:  CompileDrive=DRIVE_1541_06AA
   212:          .else
   213:                  .error "Unknown 1541 AA type used!"
   214:          .endif
   215:  .endif
   216:  
   217:  .ifdef v1541c
   218:          .ifdef CompileDrive
   219:                  .error "Only one drive type can be compiled at a time!"
   220:          .endif
   221:  CompileDrive=DRIVE_1541C + v1541c
   222:  .endif
   223:  
   224:  .ifdef v1570
   225:          .ifdef CompileDrive
   226:                  .error "Only one drive type can be compiled at a time!"
   227:          .endif
   228:  CompileDrive=DRIVE_1570 + v1570
   229:  .endif
   230:  
   231:  .ifdef v1571
   232:          .ifdef CompileDrive
   233:                  .error "Only one drive type can be compiled at a time!"
   234:          .endif
   235:  CompileDrive=DRIVE_1571 + v1571
   236:  .endif
   237:  
   238:  .ifdef v1571cr
   239:          .ifdef CompileDrive
   240:                  .error "Only one drive type can be compiled at a time!"
   241:          .endif
   242:  CompileDrive=DRIVE_1571CR + v1571cr
   243:  .endif
   244:  
   245:  .ifndef CompileDrive
   246:                  .error "Please define one of v2031, v1540, v1541, v1541c, v1570, v1571, or v1571cr!"
   247:  .endif
   248:  
   249:  .if CompileDrive=DRIVE_2031_01
   250:  DRIVE_CHKSUM_C000=$B7
   251:  DRIVE_CHKSUM_FEE6=$FA
   252:  INTRA_SECTOR_GAP=$08
   253:  DRIVEFILLER=$AA
   254:  MAXTRACK_ADJUSTED=MaxTrack1541
   255:  MAXTRACK_SINGLESIDED=35
   256:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   257:  .elseif CompileDrive=DRIVE_1540_01
   258:  DRIVE_CHKSUM_C000=$97
   259:  DRIVE_CHKSUM_FEE6=$60
   260:  INTRA_SECTOR_GAP=$08
   261:  DRIVEFILLER=$AA
   262:  MAXTRACK_ADJUSTED=MaxTrack1541
   263:  MAXTRACK_SINGLESIDED=35
   264:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   265:  .elseif CompileDrive=DRIVE_1541_01
   266:  DRIVE_CHKSUM_C000=$97
   267:  DRIVE_CHKSUM_FEE6=$FD
   268:  INTRA_SECTOR_GAP=$08
   269:  DRIVEFILLER=$AA
   270:  MAXTRACK_ADJUSTED=MaxTrack1541
   271:  MAXTRACK_SINGLESIDED=35
   272:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   273:  .elseif CompileDrive=DRIVE_1541_02
   274:  DRIVE_CHKSUM_C000=$97
   275:  DRIVE_CHKSUM_FEE6=$10
   276:  INTRA_SECTOR_GAP=$08
   277:  DRIVEFILLER=$AA
   278:  MAXTRACK_ADJUSTED=MaxTrack1541
   279:  MAXTRACK_SINGLESIDED=35
   280:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   281:  .elseif CompileDrive=DRIVE_1541_03
   282:  DRIVE_CHKSUM_C000=$97
   283:  DRIVE_CHKSUM_FEE6=$0E
   284:  INTRA_SECTOR_GAP=$09
   285:  DRIVEFILLER=$AA
   286:  MAXTRACK_ADJUSTED=MaxTrack1541
   287:  MAXTRACK_SINGLESIDED=35
   288:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   289:  .elseif CompileDrive=DRIVE_1541_05
   290:  DRIVE_CHKSUM_C000=$97
   291:  DRIVE_CHKSUM_FEE6=$3E
   292:  INTRA_SECTOR_GAP=$09
   293:  DRIVEFILLER=$AA
   294:  MAXTRACK_ADJUSTED=MaxTrack1541
   295:  MAXTRACK_SINGLESIDED=35
   296:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   297:  .elseif CompileDrive=DRIVE_1541_06AA
   298:  DRIVE_CHKSUM_C000=$97
   299:  DRIVE_CHKSUM_FEE6=$EC
   300:  INTRA_SECTOR_GAP=$09
   301:  DRIVEFILLER=$AA
   302:  MAXTRACK_ADJUSTED=MaxTrack1541
   303:  MAXTRACK_SINGLESIDED=35
   304:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   305:  .elseif CompileDrive=DRIVE_1541C_01
   306:  DRIVE_CHKSUM_C000=$97
   307:  DRIVE_CHKSUM_FEE6=$79
   308:  INTRA_SECTOR_GAP=$09
   309:  DRIVEFILLER=$AA
   310:  MAXTRACK_ADJUSTED=MaxTrack1541
   311:  MAXTRACK_SINGLESIDED=35
   312:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   313:  .elseif CompileDrive=DRIVE_1541C_02
   314:  DRIVE_CHKSUM_C000=$97
   315:  DRIVE_CHKSUM_C001=$46
   316:  DRIVE_CHKSUM_FEE6=$79
   317:  DRIVE_CHKSUM_FFE5=$CA
   318:  INTRA_SECTOR_GAP=$09
   319:  DRIVEFILLER=$AA
   320:  MAXTRACK_ADJUSTED=MaxTrack1541
   321:  MAXTRACK_SINGLESIDED=35
   322:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   323:  .elseif CompileDrive=DRIVE_1541C_03
   324:  DRIVE_CHKSUM_C000=$97
   325:  DRIVE_CHKSUM_C001=$e0
   326:  DRIVE_CHKSUM_FEE6=$79
   327:  DRIVE_CHKSUM_FFE5=$EB
   328:  INTRA_SECTOR_GAP=$09
   329:  DRIVEFILLER=$AA
   330:  MAXTRACK_ADJUSTED=MaxTrack1541
   331:  MAXTRACK_SINGLESIDED=35
   332:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED
   333:  .elseif CompileDrive=DRIVE_1570_01
   334:  DRIVE_CHKSUM_C000=$51
   335:  DRIVE_CHKSUM_FEE6=$ff
   336:  INTRA_SECTOR_GAP=$09
   337:  DRIVEFILLER=$FF
   338:  DRIVE_8000=$75
   339:  DRIVE_8001=$98
   340:  MAXTRACK_ADJUSTED=MaxTrack1541
   341:  MAXTRACK_SINGLESIDED=35
   342:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2
   343:  .elseif CompileDrive=DRIVE_1571_03
   344:  DRIVE_CHKSUM_C000=$42
   345:  DRIVE_CHKSUM_FEE6=$ff
   346:  INTRA_SECTOR_GAP=$09
   347:  DRIVEFILLER=$FF
   348:  DRIVE_8000=$92
   349:  DRIVE_8001=$25
   350:  MAXTRACK_ADJUSTED=MAXTRK1571
   351:  MAXTRACK_SINGLESIDED=35
   352:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2
   353:  .elseif CompileDrive=DRIVE_1571_05
   354:  DRIVE_CHKSUM_C000=$38
   355:  DRIVE_CHKSUM_FEE6=$ff
   356:  INTRA_SECTOR_GAP=$09
   357:  DRIVEFILLER=$FF
   358:  DRIVE_8000=$F2
   359:  DRIVE_8001=$68
   360:  MAXTRACK_ADJUSTED=MAXTRK1571
   361:  MAXTRACK_SINGLESIDED=35
   362:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2
   363:  .elseif CompileDrive=DRIVE_1571CR_01
   364:  DRIVE_CHKSUM_C000=$84
   365:  DRIVE_CHKSUM_FEE6=$ff
   366:  INTRA_SECTOR_GAP=$09
   367:  DRIVEFILLER=$FF
   368:  DRIVE_8000=$02
   369:  DRIVE_8001=$44
   370:  MAXTRACK_ADJUSTED=MAXTRK1571
   371:  MAXTRACK_SINGLESIDED=35
   372:  MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2
   373:  .endif
   374:  
   375:  .macro FillCount count,filler
   376:          .repeat count
   377:                  .ifblank filler
   378:                          .byte DRIVEFILLER
   379:                  .else
   380:                          .byte filler
   381:                  .endif
   382:          .endrep
   383:  .endmacro
   384:  
   385:  .macro FillUntil address,filler
   386:          FillCount address-*,filler
   387:  .endmacro
   388:  
   389:  .macro FillNOP count
   390:          FillCount count,$EA
   391:  .endmacro
   392:  
   393:  
   394:  MASK_PA = $0F           ; mask to get the device address ("primary address") for IEC open, listen, talk commands
   395:  
   396:  MASK_SA = $0F           ; mask to get the secondary address for IEC open, listen, talk commands
   397:  
   398:  IEC_COMMAND_ERROR_CHANNEL = $0F ; the number of the command and error channel of the drive
   399:  
   400:  ; .include "memory.inc"
   401:  JOBS0           := $0000
   402:  JOBS1           := $0001
   403:  JOBS2           := $0002
   404:  JOBS3           := $0003
   405:  JOBS4           := $0004
   406:  JOBS5           := $0005
   407:  TRACK0          := $0006
   408:  SECTOR0         := $0007
   409:  TRACK1          := $0008
   410:  SECTOR1         := $0009
   411:  TRACK2          := $000A
   412:  SECTOR2         := $000B
   413:  TRACK3          := $000C
   414:  SECTOR3         := $000D
   415:  TRACK4          := $000E
   416:  SECTOR4         := $000F
   417:  TRACK5          := $0010
   418:  SECTOR5         := $0011
   419:  DiskID0         := $0012
   420:  DiskID1         := $0014
   421:  HEADER          := $0016
   422:  ACTJOB          := $001B
   423:  WPSW            := $001C                        ; set to 1 if disk has been changed. This is determined by a change of the write protect switch, hence the name WPSW. (WPSW for drive 0, WPSW+1 for drive 1)
   424:  LWPT            := $001E
   425:  DRVST           := $0020
   426:  DRVTRK          := $0022
   427:  STAB            := $0024
   428:  SAVPNT          := $002E
   429:  BUFPNT          := $0030
   430:  HDRPNT          := $0032
   431:  GCRPNT          := $0034
   432:  GCRERR          := $0035
   433:  BYTCNT          := $0036
   434:  BITCNT          := $0037
   435:  BID             := $0038
   436:  HBID            := $0039
   437:  CHKSUM          := $003A
   438:  HINIB           := $003B
   439:  BYTE            := $003C
   440:  DRIVE           := $003D
   441:  CDRIVE          := $003E
   442:  JOBN            := $003F
   443:  TRACC           := $0040
   444:  NXTJOB          := $0041
   445:  NXTRK           := $0042
   446:  SECTR           := $0043
   447:  WORK            := $0044
   448:  JOB             := $0045
   449:  CTRACK          := $0046
   450:  DBID            := $0047
   451:  ACLTIM          := $0048
   452:  SAVSP           := $0049
   453:  STEPS           := $004A
   454:  TMP             := $004B
   455:  CSECT           := $004C
   456:  NEXTS           := $004D
   457:  NXTBF           := $004E
   458:  NXTPNT          := $004F
   459:  GCRFLG          := $0050
   460:  FTNUM           := $0051
   461:  BTAB            := $0052
   462:  GTAB            := $0056
   463:  AS              := $005E
   464:  AF              := $005F
   465:  ACLSTP          := $0060
   466:  RSTEPS          := $0061
   467:  NXTST           := $0062
   468:  MINSTP          := $0064
   469:  VNMI            := $0065
   470:  NMIFLG          := $0067
   471:  AUTOFG          := $0068
   472:  SECINC          := $0069
   473:  REVCNT          := $006A
   474:  USRJMP          := $006B
   475:  BMPNT           := $006D
   476:  T0              := $006F
   477:  T1              := $0070
   478:  T2              := $0071
   479:  T3              := $0072
   480:  T4              := $0073
   481:  T5              := $0074
   482:  IP              := $0075
   483:  LSNADR          := $0077
   484:  TLKADR          := $0078
   485:  LSNACT          := $0079
   486:  TLKACT          := $007A
   487:  ADRSED          := $007B
   488:  ATNPND          := $007C                ; 0 if there is no ATN pending, 1 if it is. This is used to tell the main loop that the IEC/IEEE bus must be processed.
   489:  ATNMOD          := $007D
   490:  PRGTRK          := $007E
   491:  DRVNUM          := $007F
   492:  TRACK           := $0080
   493:  SECTOR          := $0081
   494:  LINDX           := $0082
   495:  SA              := $0083
   496:  ORGSA           := $0084
   497:  DATA            := $0085
   498:  R0              := $0086
   499:  R1              := $0087
   500:  R2              := $0088
   501:  R3              := $0089
   502:  R4              := $008A
   503:  RESULT          := $008B
   504:  ACCUM           := $008F
   505:  DIRBUF          := $0094
   506:  ICMD            := $0096
   507:  MYPA            := $0097
   508:  
   509:  BUFFERS_COUNT   := 5                            ; number of buffers
   510:  
   511:  CONT            := $0098
   512:  BUFTAB0         := $0099                        ; address of buffer 0
   513:  BUFTAB1         := $009B                        ; address of buffer 1
   514:  BUFTAB2         := $009D                        ; address of buffer 2
   515:  BUFTAB3         := $009F                        ; address of buffer 3
   516:  BUFTAB4         := $00A1                        ; address of buffer 4
   517:  BUFTABCMD       := $00A3                        ; must be after BUFTAB4 due to the way it is initialized in the RESET routine
   518:  BUFTABERR       := $00A5                        ; must be after BUFTABCMD due to the way it is initialized in the RESET routine
   519:  BUF0            := $00A7
   520:  BUF1            := $00AE
   521:  RECL            := $00B5
   522:  RECH            := $00BB
   523:  NR              := $00C1
   524:  RS              := $00C7
   525:  SS              := $00CD
   526:  F1PTR           := $00D3
   527:  RECPTR          := $00D4
   528:  SSNUM           := $00D5
   529:  SSIND           := $00D6
   530:  RELPTR          := $00D7
   531:  ENTSEC          := $00D8
   532:  ENTIND          := $00DD
   533:  FILDRV          := $00E2
   534:  PATTYP          := $00E7
   535:  PATTYP_WILDCARD := $80
   536:  FILTYP          := $00EC
   537:  CHNRDY          := $00F2
   538:  EIOFLG          := $00F8
   539:  JOBNUM          := $00F9
   540:  LRUTBL          := $00FA
   541:  NODRV           := $00FF
   542:  DSKVER          := $0101
   543:  ZPEND           := $0103
   544:  
   545:  L0104           := $0104
   546:  L0146           := $0146
   547:  L0147           := $0147
   548:  L0148           := $0148
   549:  L01AF           := $01AF
   550:  L01B0           := $01B0
   551:  L01B1           := $01B1
   552:  L01B2           := $01B2
   553:  L01B3           := $01B3
   554:  L01B4           := $01B4
   555:  L01B5           := $01B5
   556:  .if CompileDrive >= DRIVE_1571CR
   557:  L01B6           := $01B6
   558:  .elseif CompileDrive >= DRIVE_1571
   559:  L01B6           := $01B4
   560:  .endif
   561:  
   562:  L01BB           := $01BB
   563:  
   564:  SP_END          := $0145
   565:  
   566:  CMDBUF          := $0200
   567:  CMDBUF_End      := $0228
   568:  CMDBUF_End2     := $022A
   569:  CMDNUM          := $022A                        ; storage for the command number in command processin
   570:  LINTAB          := $022B
   571:  CHNDAT          := $022E
   572:  LINTAB_End      := $0239
   573:  L023A           := $023A
   574:  L023B           := $023B
   575:  L023C           := $023C
   576:  L023D           := $023D
   577:  L023E           := $023E
   578:  
   579:  L0243           := $0243
   580:  LSTCHR          := $0244
   581:  TYPE            := $024A
   582:  STRSIZ          := $024B
   583:  TEMPSA          := $024C
   584:  CMD             := $024D
   585:  LSTSEC          := $024E
   586:  BUFUSE          := $024F
   587:  MDIRTY          := $0251
   588:  ENTFND          := $0253
   589:  DIRLST          := $0254
   590:  CMDWAT          := $0255                ; 1 if there is a command waiting in the command buffer (CMDBUF), otherwise 0.
   591:  LINUSE          := $0256
   592:  LBUSED          := $0257
   593:  REC             := $0258
   594:  TRKSS           := $0259
   595:  SECSS           := $025A
   596:  LSTJOB          := $025B
   597:  DSEC            := $0260
   598:  DIND            := $0266
   599:  ERWORD          := $026C
   600:  ERLED           := $026D
   601:  PRGDRV          := $026E
   602:  PRGSEC          := $026F
   603:  WLINDX          := $0270
   604:  RLINDX          := $0271
   605:  NBTEMP          := $0272
   606:  CMDSIZ          := $0274
   607:  CHAR            := $0275                        ; temporary storage for characters in commando processing
   608:  LIMIT           := $0276
   609:  F1CNT           := $0277
   610:  F2CNT           := $0278
   611:  F2PTR           := $0279
   612:  FILTBL          := $027A
   613:  FILTRK          := $0280
   614:  FILSEC          := $0285
   615:  PATFLG          := $028A                        ; flag for the pattern found:
   616:                                                  ; bit 0..6: number of wildcard s('*', '?') found
   617:                                                  ; bit 7:    wildcard and comma available
   618:  PATFLG_WILDCARD := $80
   619:  IMAGE           := $028B
   620:  DRVCNT          := $028C
   621:  DRVFLG          := $028D
   622:  LSTDRV          := $028E
   623:  FOUND           := $028F
   624:  DIRSEC          := $0290
   625:  DELSEC          := $0291
   626:  DELIND          := $0292
   627:  LSTBUF          := $0293
   628:  INDEX           := $0294
   629:  FILCNT          := $0295
   630:  TYPFLG          := $0296
   631:  MODE            := $0297
   632:  JOBRTN          := $0298
   633:  EPTR            := $0299
   634:  TOFF            := $029A
   635:  UBAM            := $029B
   636:  TBAM            := $029D
   637:  BAM             := $02A1
   638:  VIRQJOB1570     := $02A9
   639:  CNTMOTOR1570    := $02AB
   640:  MAXTRK1571      := $02AC
   641:  TMP1570         := $02AD
   642:  FLGMODE1570     := $02AF
   643:  L02B0           := $02B0
   644:  NAMBUF          := $02B1
   645:  ERRBUF          := $02D5
   646:  WBAM            := $02F9
   647:  NDBL            := $02FA
   648:  NDBH            := $02FC
   649:  PHASE           := $02FE
   650:  BUFFER0         := $0300
   651:  BUFFER1         := $0400
   652:  BUFFER2         := $0500
   653:  BUFFER3         := $0600
   654:  BUFFER4         := $0700
   655:  
   656:  RAM_PAGE1       := $0100
   657:  RAM_END         := $07FF
   658:  
   659:  ; general VIA definitions
   660:  
   661:  ; .include "../via.inc"
   662:  VIA_O_PB        :=  0
   663:  VIA_O_PA        :=  1
   664:  VIA_O_DDRB      :=  2
   665:  VIA_O_DDRA      :=  3
   666:  VIA_O_T1CL      :=  4
   667:  VIA_O_T1CH      :=  5
   668:  VIA_O_T1CLL     :=  6
   669:  VIA_O_T1CHL     :=  7
   670:  VIA_O_T2CL      :=  8
   671:  VIA_O_T2CH      :=  9
   672:  VIA_O_SR        := 10
   673:  VIA_O_ACR       := 11
   674:  VIA_O_PCR       := 12
   675:  VIA_O_IFR       := 13
   676:  VIA_O_IEC       := 14
   677:  VIA_O_PA_NO_HS  := 15
   678:  
   679:  VIA_IFR_B_CA2           := $01 ; cleared by read or write to PA
   680:  VIA_IFR_B_CA1           := $02 ; cleared by read or write to PA
   681:  VIA_IFR_B_SR            := $04 ; cleared by read or write to SR
   682:  VIA_IFR_B_CB2           := $08 ; cleared by read or write to PB
   683:  VIA_IFR_B_CB1           := $10 ; cleared by read or write to PB
   684:  VIA_IFR_B_T2            := $20 ; cleared by read T2L or write T2H
   685:  VIA_IFR_B_T1            := $40 ; cleared by read T1L or write T1H
   686:  VIA_IFR_B_ANY           := $80 ; cleared if all interrupts are cleared
   687:  
   688:  VIA_IER_B_CA2           := VIA_IFR_B_CA2
   689:  VIA_IER_B_CA1           := VIA_IFR_B_CA1
   690:  VIA_IER_B_SR            := VIA_IFR_B_SR
   691:  VIA_IER_B_CB2           := VIA_IFR_B_CB2
   692:  VIA_IER_B_CB1           := VIA_IFR_B_CB1
   693:  VIA_IER_B_T2            := VIA_IFR_B_T2
   694:  VIA_IER_B_T1            := VIA_IFR_B_T1
   695:  VIA_IER_BW_SET          := $80
   696:  VIA_IER_BW_UNSET        := $00
   697:  
   698:  VIA_PCR_B_CA1_INPUT_POS_EDGE            := $01          ; 1 = input on positive edge, 0 = input on negative edge
   699:  VIA_PCR_B_CA2_MASK                      := $0E
   700:  VIA_PCR_B_CA2_INPUT_NEG_CLEAR_ON_READ   := $00
   701:  VIA_PCR_B_CA2_INPUT_NEG                 := $02
   702:  VIA_PCR_B_CA2_INPUT_POS_CLEAR_ON_READ   := $04
   703:  VIA_PCR_B_CA2_INPUT_POS                 := $06
   704:  VIA_PCR_B_CA2_OUTPUT_HANDSHAKE          := $08
   705:  VIA_PCR_B_CA2_OUTPUT_PULSE              := $0A
   706:  VIA_PCR_B_CA2_OUTPUT_LOW                := $0C
   707:  VIA_PCR_B_CA2_OUTPUT_HIGH               := $0E
   708:  VIA_PCR_B_CB1_INPUT_POS_EDGE            := $10          ; 1 = input on positive edge, 0 = input on negative edge
   709:  VIA_PCR_B_CB2_MASK                      := $E0
   710:  VIA_PCR_B_CB2_INPUT_NEG_CLEAR_ON_READ   := $00
   711:  VIA_PCR_B_CB2_INPUT_NEG                 := $20
   712:  VIA_PCR_B_CB2_INPUT_POS_CLEAR_ON_READ   := $40
   713:  VIA_PCR_B_CB2_INPUT_POS                 := $60
   714:  VIA_PCR_B_CB2_OUTPUT_HANDSHAKE          := $80
   715:  VIA_PCR_B_CB2_OUTPUT_PULSE              := $A0
   716:  VIA_PCR_B_CB2_OUTPUT_LOW                := $C0
   717:  VIA_PCR_B_CB2_OUTPUT_HIGH               := $E0
   718:  
   719:  VIA_ACR_B_PA_LATCH_ENABLE               := $01
   720:  VIA_ACR_B_PB_LATCH_ENABLE               := $02
   721:  VIA_ACR_B_SHIFT_MASK                    := $1C
   722:  VIA_ACR_B_SHIFT_DISABLED                := $00
   723:  VIA_ACR_B_SHIFT_IN_T2                   := $04
   724:  VIA_ACR_B_SHIFT_IN_PHI2                 := $08
   725:  VIA_ACR_B_SHIFT_IN_EXTCLOCK_CB1         := $0C
   726:  VIA_ACR_B_SHIFT_FREERUNNING_T2          := $10
   727:  VIA_ACR_B_SHIFT_OUT_T2                  := $14
   728:  VIA_ACR_B_SHIFT_OUT_PHI2                := $18
   729:  VIA_ACR_B_SHIFT_OUT_EXTCLOCK_CB1        := $1C
   730:  VIA_ACR_B_T2_CONTROL_PB6                := $20
   731:  VIA_ACR_B_T1_CONTROL_MASK               := $C0
   732:  VIA_ACR_B_T1_CONTROL_ONESHOT            := $00
   733:  VIA_ACR_B_T1_CONTROL_FREERUN            := $40
   734:  VIA_ACR_B_T1_CONTROL_ONESHOT_PB7        := $80
   735:  VIA_ACR_B_T1_CONTROL_FREERUN_PB7        := $C0
   736:  
   737:  ; Alternative:
   738:  VIA_ACR_B_T1_CONTROL_ONETIME            := $40
   739:  VIA_ACR_B_T1_CONTROL_PB7_OUTPUT         := $80
   740:  
   741:  VBC             := $1800
   742:  VBC_PB1         := VBC + VIA_O_PB
   743:  
   744:  .if CompileDrive >= DRIVE_1540
   745:  
   746:  VBC_PA1_01            := $01
   747:  VBC_PA1_02            := $02
   748:  VBC_PA1_04            := $04
   749:  VBC_PA1_20            := $20
   750:  VBC_PA1_80            := $80
   751:  
   752:  VBC_PB1_1540_DATAIN    := $01 ; DATA IN
   753:  VBC_PB1_1540_DATAOUT   := $02 ; DATA OUT
   754:  VBC_PB1_1540_CLOCKIN   := $04 ; CLOCK IN
   755:  VBC_PB1_1540_CLOCKOUT  := $08 ; CLOCK OUT
   756:  VBC_PB1_1540_ATNA      := $10 ; ATNA (if ATNA XOR ATNIN == 1 --> assert DATA, regardless of DATA IN. In this case, DATA OUT is 1 if read)
   757:  VBC_PB1_1540_DEVICENO0 := $20 ; hardware device no., bit 0
   758:  VBC_PB1_1540_DEVICENO1 := $40 ; hardware device no., bit 1
   759:  VBC_PB1_1540_ATNIN     := $80 ; ATN IN (also to CB2 - according to schematic: CA1, NOT CB2!)
   760:  
   761:  .else
   762:  
   763:  VBC_PB1_2031_DEVICENO0 := VBC_PB1_2031_ATNA
   764:  VBC_PB1_2031_DEVICENO1 := VBC_PB1_2031_NRFD
   765:  VBC_PB1_2031_ATNA      := $01 ; ATNA (O)
   766:  VBC_PB1_2031_NRFD      := $02 ; NRFD (I/O)
   767:  VBC_PB1_2031_NDAC      := $04 ; NDAC (I/O)
   768:  VBC_PB1_2031_EOI       := $08 ; EOI (I/O)
   769:  VBC_PB1_2031_TE        := $10 ; TE (Talk enable, O)
   770:  VBC_PB1_2031_HDSEL     := $20 ; @@@ TODO
   771:  VBC_PB1_2031_DAV       := $40 ; DAV (I/O)
   772:  VBC_PB1_2031_NATN      := $80 ; -ATN (I)
   773:  
   774:    ; also connected:
   775:    ; PA0-7: data bits DI1-DI8
   776:    ;
   777:    ; CA1 = -ATN (connected to PB7)
   778:    ; CB2 = "PLL SYN" (?)
   779:    ; CA2 = drive number selection: if 0, the drive numbers can be read; if 1, ATNA and NRFD are on the lines PB0 and PB1
   780:  
   781:  .endif
   782:  
   783:  VBC_PA1         := VBC + VIA_O_PA       ; unused on the (original) 1541; parallel input/output on 2031
   784:  VBC_DDRB1       := VBC + VIA_O_DDRB
   785:  VBC_DDRA1       := VBC + VIA_O_DDRA
   786:  VBC_T1LC1       := VBC + VIA_O_T1CL
   787:  VBC_T1HC1       := VBC + VIA_O_T1CH
   788:  VBC_T1LL1       := VBC + VIA_O_T1CLL
   789:  VBC_T1HL1       := VBC + VIA_O_T1CHL
   790:  VBC_T2LC1       := VBC + VIA_O_T2CL
   791:  VBC_T2HC1       := VBC + VIA_O_T2CH
   792:  VBC_SR1         := VBC + VIA_O_SR
   793:  VBC_ACR1        := VBC + VIA_O_ACR
   794:  VBC_PCR1        := VBC + VIA_O_PCR
   795:  VBC_IFR1        := VBC + VIA_O_IFR
   796:  VBC_IER1        := VBC + VIA_O_IEC
   797:  VBC_PAUNBUF1    := VBC + VIA_O_PA_NO_HS
   798:  
   799:  VDC             := $1C00
   800:    ; CB1: Unconnected
   801:    ; CB2: MODE, to OE of 325572-0
   802:    ; CA2: SYNC
   803:    ; CA1: Byte Ready (also to Overflow In of 6502)
   804:  VDC_PB2         := VDC + VIA_O_PB
   805:  VDC_PB2_STEPPER0    := $01 ; stepper motor bit 0
   806:  VDC_PB2_STEPPER1    := $02 ; stepper motor bit 1
   807:  VDC_PB2_DRIVE0MOTOR := $04 ; drive #0 motor
   808:  VDC_PB2_DRIVE0LED   := $08 ; drive #0 LED
   809:  VDC_PB2_DRIVE1LED   := $00 ; does not exist, but anyway...
   810:  VDC_PB2_WRITEPROTECT:= $10 ; write protect
   811:  VDC_PB2_BITRATE0    := $20 ; drive transfer rate bit 0
   812:  VDC_PB2_BITRATE1    := $40 ; drive transfer rate bit 1
   813:  VDC_PB2_SYNC        := $80 ; SYNC detected
   814:  
   815:  VDC_PB2_STEPPER     := VDC_PB2_STEPPER0 | VDC_PB2_STEPPER1
   816:  VDC_PB2_DRIVELEDS   := VDC_PB2_DRIVE0LED | VDC_PB2_DRIVE1LED
   817:  VDC_PB2_BITRATE     := VDC_PB2_BITRATE0 | VDC_PB2_BITRATE1
   818:  VDC_PA2         := VDC + VIA_O_PA
   819:  VDC_DDRB2       := VDC + VIA_O_DDRB
   820:  VDC_DDRA2       := VDC + VIA_O_DDRA
   821:  VDC_T1LC2       := VDC + VIA_O_T1CL
   822:  VDC_T1HC2       := VDC + VIA_O_T1CH
   823:  VDC_T1LL2       := VDC + VIA_O_T1CLL
   824:  VDC_T1HL2       := VDC + VIA_O_T1CHL
   825:  VDC_T2LC2       := VDC + VIA_O_T2CL
   826:  VDC_T2HC2       := VDC + VIA_O_T2CH
   827:  VDC_SR2         := VDC + VIA_O_SR
   828:  VDC_ACR2        := VDC + VIA_O_ACR
   829:  VDC_PCR2        := VDC + VIA_O_PCR
   830:  VDC_IFR2        := VDC + VIA_O_IFR
   831:  VDC_IER2        := VDC + VIA_O_IEC
   832:  VDC_PAUNBUF2    := VDC + VIA_O_PA_NO_HS
   833:  
   834:  
   835:  .if CompileDrive >= DRIVE_1570
   836:  
   837:  ; .include "../wd177x.inc"
   838:  WD177x_O_COMMAND        := 0
   839:  WD177x_O_STATUS         := WD177x_O_COMMAND
   840:  WD177x_O_TRACK          := 1
   841:  WD177x_O_SECTOR         := 2
   842:  WD177x_O_DATA           := 3
   843:  
   844:  WD177x          := $2000
   845:  WD177x_COMMAND  := WD177x + WD177x_O_COMMAND
   846:  WD177x_STATUS   := WD177x + WD177x_O_STATUS
   847:  WD177x_TRACK    := WD177x + WD177x_O_TRACK
   848:  WD177x_SECTOR   := WD177x + WD177x_O_SECTOR
   849:  WD177x_DATA     := WD177x + WD177x_O_DATA
   850:  
   851:  ; .include "../cia.inc"
   852:  CIA_O_PA       :=  0
   853:  CIA_O_PB       :=  1
   854:  CIA_O_DDRA     :=  2
   855:  CIA_O_DDRB     :=  3
   856:  CIA_O_TALO     :=  4
   857:  CIA_O_TAHI     :=  5
   858:  CIA_O_TBLO     :=  6
   859:  CIA_O_TBHI     :=  7
   860:  CIA_O_TOD10THS :=  8
   861:  CIA_O_TODSEC   :=  9
   862:  CIA_O_TODMIN   := 10
   863:  CIA_O_TODHR    := 11
   864:  CIA_O_SDR      := 12
   865:  CIA_O_ICR      := 13
   866:  CIA_O_CRA      := 14
   867:  CIA_O_CRB      := 15
   868:  
   869:  CIA_ICR_B_TA            := $01  ; bit: timer A underflow
   870:  CIA_ICR_B_TB            := $02  ; bit: timer B underflow
   871:  CIA_ICR_B_TOD           := $04  ; bit: TOD alarm
   872:  CIA_ICR_B_SP            := $08  ; bit: Serial port full/empty
   873:  CIA_ICR_B_FLAG          := $10  ; bit: external -FLAG
   874:  CIA_ICR_B_UNUSED        := $60
   875:  CIA_ICR_BR_IR           := $80  ; bit: any interrupt occurred (read-only)
   876:  CIA_ICR_BW_SET          := $80  ; bit: set (=1) or clear (=0) bit (write-only)
   877:  CIA_ICR_BW_UNSET        := $00  ;
   878:  
   879:  CIA_CRA_B_START         := $01  ; 1 = start timer A, 0 = stop timer A
   880:  CIA_CRA_B_PBON          := $02  ; 1 = timer A output appears on PB6, 0 = PB6 is not affected by timer
   881:  CIA_CRA_B_TOGGLE        := $04  ; PB6 output mode: 1 = toggle, 0 = pulse
   882:  CIA_CRA_B_ONESHOT       := $08  ; 1 = one shot timer, 0 = continuous mode
   883:  CIA_CRA_B_FORCE_LOAD    := $10  ; 1 = force load (this is a strobe, that is, it will always be read as "0")
   884:  CIA_CRA_B_COUNT_CNT     := $20  ; 1 = timer A counts positive edges of CNT, 0 = timer A counts PHI2 pulses
   885:  CIA_CRA_B_SP_OUTPUT     := $40  ; 1 = serial port (SP) is output, 0 = it is input
   886:  CIA_CRA_B_50HZ          := $80  ; 1 = 50Hz clock at TOD, 0 = 60Hz clock
   887:  
   888:  CIA_CRB_B_START         := $01  ; 1 = start timer B, 0 = stop timer B
   889:  CIA_CRB_B_PBON          := $02  ; 1 = timer B output appears on PB7, 0 = PB7 is not affected by timer
   890:  CIA_CRB_B_TOGGLE        := $04  ; PB7 output mode: 1 = toggle, 0 = pulse
   891:  CIA_CRB_B_ONESHOT       := $08  ; 1 = one shot timer, 0 = continuous mode
   892:  CIA_CRB_B_FORCE_LOAD    := $10  ; 1 = force load (this is a strobe, that is, it will always be read as "0")
   893:  CIA_CRB_B_TOD_ALARM     := $80  ; 1 = writing to TOD registers sets ALARM, 0 = writing to TOD registers sets time-of-day
   894:  
   895:  CIA_CRB_B_MODE_MASK     := $60  ; mask bits for setting the timer B count mode
   896:  CIA_CRB_B_MODE_PHI2     := $00  ; timer B counts PHI2 pulses
   897:  CIA_CRB_B_MODE_CNT      := $20  ; timer B counts positive edges of CNT
   898:  CIA_CRB_B_MODE_TA_      := $40  ; timer B counts timer A underflows
   899:  CIA_CRB_B_MODE_TA_WITH_CNT      := $60  ; timer B counts timer A underflows which occur while CNT is high
   900:  
   901:  CIA             := $4000
   902:  CIA_TALO        := CIA + CIA_O_TALO
   903:  CIA_TAHI        := CIA + CIA_O_TAHI
   904:  CIA_SDR         := CIA + CIA_O_SDR
   905:  CIA_ICR         := CIA + CIA_O_ICR
   906:  CIA_CRA         := CIA + CIA_O_CRA
   907:  CIA_CRB         := CIA + CIA_O_CRB
   908:  
   909:  .endif
   910:  
   911:  .if CompileDrive >= DRIVE_1571CR
   912:  CSG5710_4       := WD177x_COMMAND + 4
   913:  CSG5710_5       := WD177x_COMMAND + 5
   914:  
   915:  CSG5710_4010    := $4010
   916:  
   917:  .endif
   918:  
   919:  .if CompileDrive >= DRIVE_1570
   920:  INIT_VBC_DDRA1 = $66
   921:  .elseif CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03
   922:  INIT_VBC_DDRA1 = $FE
   923:  .else
   924:  INIT_VBC_DDRA1 = $FF
   925:  .endif
   926:  
   927:  IEC_LISTEN      := $20
   928:  IEC_TALK        := $40
   929:  
   930:  IEEE_LISTEN     := IEC_LISTEN
   931:  IEEE_TALK       := IEC_TALK
   932:  IEEE_OPEN       := $60
   933:  
   934:  ; .include "errorcodes.inc"
   935:  ERRORCODE_00_OK = $00
   936:  ERRORCODE_01_FILES_SCRATCHED = $01
   937:  ERRORCODE_20_READ_ERROR = $20
   938:  ERRORCODE_21_READ_ERROR = $21
   939:  ERRORCODE_22_READ_ERROR = $22
   940:  ERRORCODE_23_READ_ERROR = $23
   941:  ERRORCODE_24_READ_ERROR = $24
   942:  ERRORCODE_25_WRITE_ERROR = $25
   943:  ERRORCODE_26_WRITE_PROTECT_ON = $26
   944:  ERRORCODE_27_READ_ERROR = $27
   945:  ERRORCODE_28_WRITE_ERROR = $28
   946:  ERRORCODE_29_DISK_ID_MISMATCH = $29
   947:  ERRORCODE_30_SYNTAX_ERROR = $30
   948:  ERRORCODE_31_SYNTAX_ERROR = $31
   949:  ERRORCODE_32_SYNTAX_ERROR = $32
   950:  ERRORCODE_33_SYNTAX_ERROR = $33
   951:  ERRORCODE_34_SYNTAX_ERROR = $34
   952:  ERRORCODE_39_FILE_NOT_FOUND = $39
   953:  ERRORCODE_50_RECORD_NOT_PRESENT = $50
   954:  ERRORCODE_51_OVERFLOW_IN_RECORD = $51
   955:  ERRORCODE_52_FILE_TOO_LARGE = $52
   956:  ERRORCODE_60_WRITE_FILE_OPEN = $60
   957:  ERRORCODE_61_FILE_NOT_OPEN = $61
   958:  ERRORCODE_62_FILE_NOT_FOUND = $62
   959:  ERRORCODE_63_FILE_EXISTS = $63
   960:  ERRORCODE_64_FILE_TYPE_MISMATCH = $64
   961:  ERRORCODE_65_NO_BLOCK = $65
   962:  ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR = $66
   963:  ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR = $67
   964:  ERRORCODE_70_NO_CHANNEL = $70
   965:  ERRORCODE_71_DIR_ERROR = $71
   966:  ERRORCODE_72_DISK_FULL = $72
   967:  ERRORCODE_73_IDENTIFY = $73
   968:  ERRORCODE_74_DRIVE_NOT_READY = $74
   969:  
   970:  ERRORCODE_03_FILE = $03
   971:  ERRORCODE_04_OPEN = $04
   972:  ERRORCODE_05_MISMATCH = $05
   973:  ERRORCODE_06_NOT = $06
   974:  ERRORCODE_07_FOUND = $07
   975:  ERRORCODE_08_DISK = $08
   976:  ERRORCODE_09_ERROR = $09
   977:  ERRORCODE_0A_WRITE = $0A
   978:  ERRORCODE_0B_RECORD = $0B
   979:  
   980:  ; all bytes bigger than or equal to this one will be treated as PETSCII characters, not as pseudo errors
   981:  ERRORCODE_NO_PSEUDO = ERRORCODE_20_READ_ERROR
   982:  
   983:  
   984:  .macro SET_WPSW_DIRTY_NO_CR
   985:    .if CompileDrive >= DRIVE_1571_05
   986:          jsr     PATCH_WPSW
   987:          nop
   988:    .else
   989:          lda     #$01
   990:          sta     WPSW
   991:    .endif
   992:  .endmacro
   993:  
   994:  .macro SET_WPSW_DIRTY
   995:    .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
   996:          jsr     PATCH_WPSW
   997:          nop
   998:    .else
   999:          lda     #$01
  1000:          sta     WPSW
  1001:    .endif
  1002:  .endmacro
  1003:  
  1004:  ; convert a decimal value (in X) into (packed) BCD (in A)
  1005:  ;
  1006:  ; the algorithm is simple:
  1007:  ; decrement X and increment A until X is zero
  1008:  ; as decimal mode is set, A will count up in BCD.
  1009:  ; As the decimal mode does not affect dex, X will
  1010:  ; be incremented in binary
  1011:  ;
  1012:  .macro CONVERT_BIN_TO_BCD_PARTIAL
  1013:  @Next:
  1014:          cpx     #$00
  1015:          beq     @Done
  1016:          clc
  1017:          adc     #$01
  1018:          dex
  1019:          jmp     @Next
  1020:  @Done:
  1021:  .endmacro
  1022:  
  1023:  .macro CONVERT_BIN_TO_BCD
  1024:          lda     #$00
  1025:          sed
  1026:          CONVERT_BIN_TO_BCD_PARTIAL
  1027:  .endmacro
  1028:  
  1029:  .if CompileDrive >= DRIVE_1570
  1030:          * = $8000
  1031:  
  1032:  L8000:
  1033:          .byte   DRIVE_8000
  1034:  L8001:
  1035:          .byte   DRIVE_8001
  1036:  
  1037:  L8002:
  1038:  .if CompileDrive >= DRIVE_1571CR_01
  1039:          .byte   "S/W BY DAVID G SIRACUSA",$0D
  1040:          .byte   "5710 BY C. HAUCK",$0D
  1041:          .byte   "1986",$0D
  1042:  .else
  1043:          .byte   "S/W - DAVID G SIRACUSA",$0D
  1044:          .byte   "H/W - GREG BERLIN",$0D
  1045:          .byte   "1985",$0D
  1046:  .endif
  1047:  
  1048:  U0CommandPatch157x:
  1049:          lda     CMDSIZ
  1050:          cmp     #$03
  1051:          bcc     @OriginalUxCommand
  1052:          lda     CMDBUF + 2
  1053:          sta     HINIB
  1054:          and     #$1F
  1055:          tax
  1056:          asl     a
  1057:          tay
  1058:          lda     L808E,y
  1059:          sta     IP
  1060:          lda     L808E + 1,y
  1061:          sta     IP + 1
  1062:          cpx     #$1E
  1063:          beq     @L8056
  1064:          lda     VBC_PAUNBUF1
  1065:          and     #VBC_PA1_20
  1066:          beq     @OriginalUxCommand
  1067:  @L8056:
  1068:          lda     BITCNT
  1069:          and     #$EB
  1070:          sta     BITCNT
  1071:          lda     L806E,x
  1072:          sta     CMDBUF + 2
  1073:  .if CompileDrive >= DRIVE_1571_05
  1074:          jmp     LAAE7
  1075:  .else
  1076:          jmp     (IP)
  1077:  .endif
  1078:  @OriginalUxCommand:
  1079:          lda     #<AddressesUxCommands
  1080:          sta     USRJMP
  1081:          lda     #>AddressesUxCommands
  1082:          sta     USRJMP + 1
  1083:  L806D:
  1084:          rts
  1085:  
  1086:  L806E:
  1087:          .byte   $80,$81,$90,$91,$B0,$B1,$F0,$F1
  1088:          .byte   $00,$01,$B0,$01,$00,$01,$00,$01
  1089:          .byte   $80,$81,$90,$91,$B0,$B1,$F0,$F1
  1090:          .byte   $00,$01,$B0,$01,$00,$01,$00,$80
  1091:  
  1092:  L808E:
  1093:          .addr   L8371
  1094:          .addr   L837F
  1095:          .addr   L83EC
  1096:          .addr   L83F8
  1097:          .addr   L848B
  1098:          .addr   L837F
  1099:          .addr   L84B7
  1100:          .addr   L84B7
  1101:          .addr   L84F1
  1102:          .addr   L84F1
  1103:          .addr   L8517
  1104:          .addr   L837F
  1105:          .addr   L856B
  1106:          .addr   L837F
  1107:          .addr   L85A5
  1108:          .addr   L85A5
  1109:          .addr   L8371
  1110:          .addr   L837F
  1111:          .addr   L83EC
  1112:          .addr   L83F8
  1113:          .addr   L848B
  1114:          .addr   L837F
  1115:          .addr   L84B7
  1116:          .addr   L84B7
  1117:          .addr   L806D
  1118:          .addr   L806D
  1119:          .addr   L8517
  1120:          .addr   L837F
  1121:          .addr   L806D
  1122:          .addr   L806D
  1123:          .addr   L8FE5
  1124:          .addr   L9080
  1125:  L80CE:
  1126:          sei                                     ; disallow interrupts --> blocking job loop
  1127:          lda     #$00
  1128:          sta     ATNPND
  1129:          sta     LSNACT
  1130:          sta     TLKACT
  1131:          ldx     #$45
  1132:          txs
  1133:          jsr     L81B2
  1134:          lda     #$80
  1135:          sta     EIOFLG
  1136:          sta     ATNMOD
  1137:          jsr     ClearClockOut
  1138:          jsr     SetDataOut
  1139:          lda     VBC_PB1
  1140:          ora     #VBC_PB1_1540_ATNA
  1141:          sta     VBC_PB1
  1142:  L80F1:
  1143:          lda     VBC_PB1
  1144:          bpl     L815A
  1145:          and     #VBC_PB1_1540_CLOCKIN
  1146:          bne     L80F1
  1147:  L80FA:
  1148:          jsr     L82CA
  1149:          cmp     #$3F
  1150:          bne     L810D
  1151:          lda     BITCNT
  1152:          and     #$BF
  1153:          sta     BITCNT
  1154:          lda     #$00
  1155:          sta     LSNACT
  1156:          beq     L811B
  1157:  L810D:
  1158:          cmp     #$5F
  1159:          bne     L811E
  1160:          lda     BITCNT
  1161:          and     #$BF
  1162:          sta     BITCNT
  1163:          lda     #$00
  1164:          sta     TLKACT
  1165:  L811B:
  1166:          jmp     L8192
  1167:  L811E:
  1168:          cmp     TLKADR
  1169:          bne     L812C
  1170:          lda     #$01
  1171:          sta     TLKACT
  1172:          lda     #$00
  1173:          sta     LSNACT
  1174:          beq     L8155
  1175:  L812C:
  1176:          cmp     LSNADR
  1177:          bne     L813A
  1178:          lda     #$01
  1179:          sta     LSNACT
  1180:          lda     #$00
  1181:          sta     TLKACT
  1182:          beq     L8155
  1183:  L813A:
  1184:          tax
  1185:          and     #$60
  1186:          cmp     #$60
  1187:          bne     L818D
  1188:          txa
  1189:          sta     ORGSA
  1190:          and     #$0F
  1191:          sta     SA
  1192:          lda     ORGSA
  1193:          and     #$F0
  1194:          cmp     #$E0
  1195:          bne     L8192
  1196:          cli                                     ; allow processing of job loop
  1197:          jsr     LDAC0
  1198:          sei                                     ; disallow interrupts --> blocking job loop
  1199:  L8155:
  1200:          bit     VBC_PB1
  1201:          bmi     L80FA
  1202:  L815A:
  1203:          lda     #$00
  1204:          sta     ATNMOD
  1205:          lda     VBC_PB1
  1206:          and     # ~ VBC_PB1_1540_ATNA
  1207:          sta     VBC_PB1
  1208:          lda     LSNACT
  1209:          beq     L8177
  1210:          bit     BITCNT
  1211:          bvc     L8171
  1212:          jsr     L8199
  1213:  L8171:
  1214:          jsr     L8342
  1215:          jmp     MainLoopEntry1570
  1216:  L8177:
  1217:          lda     TLKACT
  1218:          beq     L818A
  1219:          jsr     ClearDataOut
  1220:          jsr     SetClockOut
  1221:          jsr     LA483
  1222:          jsr     L81EA
  1223:          jsr     LA483
  1224:  L818A:
  1225:          jmp     L8366
  1226:  L818D:
  1227:          lda     #VBC_PB1_1540_ATNA
  1228:          sta     VBC_PB1
  1229:  L8192:
  1230:          bit     VBC_PB1
  1231:          bpl     L815A
  1232:          bmi     L8192
  1233:  L8199:
  1234:          jsr     TestATN
  1235:          jsr     ReadIecBusIn
  1236:          and     #VBC_PB1_1540_CLOCKIN
  1237:          bne     L8199
  1238:          jsr     L81CE
  1239:          lda     #$00
  1240:          sta     CIA_SDR
  1241:          lda     #CIA_ICR_B_SP
  1242:  L81AD:
  1243:          bit     CIA_ICR
  1244:          beq     L81AD
  1245:  
  1246:  L81B2:
  1247:          php
  1248:          sei                                     ; disallow interrupts --> blocking job loop
  1249:          lda     CIA_CRA
  1250:          and     # ~ CIA_CRA_B_SP_OUTPUT
  1251:          sta     CIA_CRA
  1252:  
  1253:          lda     VBC_PAUNBUF1
  1254:          and     # ~ VBC_PA1_02
  1255:          sta     VBC_PAUNBUF1
  1256:  
  1257:  .if CompileDrive >= DRIVE_1571_05
  1258:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_SP
  1259:  .else
  1260:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_TOD
  1261:  .endif
  1262:          sta     CIA_ICR
  1263:          bit     CIA_ICR
  1264:          plp
  1265:          rts
  1266:  
  1267:  L81CE:
  1268:          php
  1269:          sei                                     ; disallow interrupts --> blocking job loop
  1270:          lda     VBC_PAUNBUF1
  1271:          ora     #VBC_PA1_02
  1272:          sta     VBC_PAUNBUF1
  1273:          lda     CIA_CRA
  1274:          ora     #CIA_CRA_B_SP_OUTPUT
  1275:          sta     CIA_CRA
  1276:          lda     #CIA_ICR_B_SP
  1277:          sta     CIA_ICR
  1278:          bit     CIA_ICR
  1279:          plp
  1280:          rts
  1281:  L81EA:
  1282:          sei                                     ; disallow interrupts --> blocking job loop
  1283:          jsr     LD0EB
  1284:          bcs     L81F6
  1285:  L81F0:
  1286:          ldx     LINDX
  1287:          lda     CHNRDY,x
  1288:          bmi     L81F7
  1289:  L81F6:
  1290:          rts
  1291:  L81F7:
  1292:          jsr     TestATN
  1293:          jsr     ReadIecBusIn
  1294:          and     #VBC_PB1_1540_DATAIN
  1295:          php
  1296:          jsr     ClearClockOut
  1297:          plp
  1298:          beq     L8218
  1299:  L8206:
  1300:          jsr     TestATN
  1301:          jsr     ReadIecBusIn
  1302:          and     #VBC_PB1_1540_DATAIN
  1303:          bne     L8206
  1304:          ldx     LINDX
  1305:          lda     CHNRDY,x
  1306:          and     #$08
  1307:          bne     L822C
  1308:  L8218:
  1309:          jsr     TestATN
  1310:          jsr     ReadIecBusIn
  1311:          and     #VBC_PB1_1540_DATAIN
  1312:          bne     L8218
  1313:  L8222:
  1314:          jsr     TestATN
  1315:          jsr     ReadIecBusIn
  1316:          and     #VBC_PB1_1540_DATAIN
  1317:          beq     L8222
  1318:  L822C:
  1319:          jsr     SetClockOut
  1320:          jsr     TestATN
  1321:          jsr     ReadIecBusIn
  1322:          and     #VBC_PB1_1540_DATAIN
  1323:          bne     L822C
  1324:          bit     BITCNT
  1325:          bvc     L8276
  1326:          lda     VBC_PAUNBUF1
  1327:          ora     #VBC_PA1_02
  1328:          sta     VBC_PAUNBUF1
  1329:          lda     CIA_CRA
  1330:          ora     #CIA_CRA_B_SP_OUTPUT
  1331:          sta     CIA_CRA
  1332:          bit     CIA_ICR
  1333:          ldx     LINDX
  1334:          lda     L023E,x
  1335:          sta     CIA_SDR
  1336:  L8258:
  1337:          lda     CIA_ICR
  1338:          and     #$08
  1339:          beq     L8258
  1340:          lda     CIA_CRA
  1341:          and     # ~ CIA_CRA_B_SP_OUTPUT
  1342:          sta     CIA_CRA
  1343:          lda     VBC_PAUNBUF1
  1344:          and     # ~ VBC_PA1_02
  1345:          sta     VBC_PAUNBUF1
  1346:  .if CompileDrive >= DRIVE_1571_05
  1347:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_SP
  1348:  .else
  1349:          lda     #CIA_ICR_BW_SET | CIA_ICR_B_TOD
  1350:  .endif
  1351:          sta     CIA_ICR
  1352:          bne     L82B2
  1353:  L8276:
  1354:          lda     #$08
  1355:          sta     CONT
  1356:  L827A:
  1357:          jsr     ReadIecBusIn
  1358:          and     #VBC_PB1_1540_DATAIN
  1359:          bne     L82C4
  1360:  L8281:
  1361:          ldx     LINDX
  1362:          lda     L023E,x
  1363:          ror     a
  1364:          sta     L023E,x
  1365:          bcs     L8291
  1366:          jsr     SetDataOut
  1367:          bne     L8294
  1368:  L8291:
  1369:          jsr     ClearDataOut
  1370:  L8294:
  1371:          jsr     LA47E
  1372:          lda     DRVTRK + 1
  1373:  .if CompileDrive >= DRIVE_1571_05
  1374:          bne     L829E
  1375:  .else
  1376:          bne     L8281
  1377:  .endif
  1378:          jsr     LA483
  1379:  L829E:
  1380:          jsr     ClearClockOut
  1381:          jsr     LA47E
  1382:          lda     DRVTRK + 1
  1383:          bne     L82AB
  1384:          jsr     LA483
  1385:  L82AB:
  1386:          jsr     LFEFB
  1387:          dec     CONT
  1388:          bne     L827A
  1389:  L82B2:
  1390:          jsr     TestATN
  1391:          jsr     ReadIecBusIn
  1392:          and     #VBC_PB1_1540_DATAIN
  1393:          beq     L82B2
  1394:          cli                                     ; allow processing of job loop
  1395:          jsr     LD3AA
  1396:          sei                                     ; disallow interrupts --> blocking job loop
  1397:          jmp     L81F0
  1398:  L82C4:
  1399:          jmp     L8362
  1400:  L82C7:
  1401:          bit     CIA_ICR
  1402:  L82CA:
  1403:          lda     #$08
  1404:          sta     CONT
  1405:  L82CE:
  1406:          jsr     TestATN
  1407:          jsr     ReadIecBusIn
  1408:          and     #VBC_PB1_1540_CLOCKIN
  1409:          bne     L82CE
  1410:          jsr     ClearDataOut
  1411:          lda     #$01
  1412:  L82DD:
  1413:          bit     VBC_PB1
  1414:          bne     L82DD
  1415:  .if CompileDrive >= DRIVE_1571_05
  1416:          jsr     LAA76
  1417:  .else
  1418:          sta     VBC_T1HC1
  1419:  .endif
  1420:  L82E5:
  1421:          jsr     TestATN
  1422:          lda     VBC_IFR1
  1423:          and     #$40
  1424:          bne     L82F8
  1425:          jsr     ReadIecBusIn
  1426:          and     #VBC_PB1_1540_CLOCKIN
  1427:          beq     L82E5
  1428:          bne     L8311
  1429:  L82F8:
  1430:          jsr     SetDataOut
  1431:          ldx     #$18
  1432:  L82FD:
  1433:          dex
  1434:          bne     L82FD
  1435:          jsr     ClearDataOut
  1436:  L8303:
  1437:          jsr     TestATN
  1438:          jsr     ReadIecBusIn
  1439:          and     #VBC_PB1_1540_CLOCKIN
  1440:          beq     L8303
  1441:          lda     #$00
  1442:          sta     EIOFLG
  1443:  L8311:
  1444:          lda     VBC_PB1
  1445:          eor     #VBC_PB1_1540_DATAIN
  1446:          tax
  1447:          lda     CIA_ICR
  1448:          and     #CIA_ICR_B_SP
  1449:          beq     L8326
  1450:          lda     CIA_SDR
  1451:          sta     DATA
  1452:          jmp     L833C
  1453:  L8326:
  1454:          txa
  1455:          lsr     a
  1456:          and     #$02
  1457:          bne     L8311
  1458:          ror     DATA
  1459:  L832E:
  1460:          jsr     TestATN
  1461:          jsr     ReadIecBusIn
  1462:          and     #VBC_PB1_1540_CLOCKIN
  1463:          beq     L832E
  1464:          dec     CONT
  1465:          bne     L8311
  1466:  L833C:
  1467:          jsr     SetDataOut
  1468:          lda     DATA
  1469:          rts
  1470:  L8342:
  1471:          sei                                     ; disallow interrupts --> blocking job loop
  1472:          jsr     LD107
  1473:          bcs     L834D
  1474:          lda     CHNRDY,x
  1475:          ror     a
  1476:          bcs     L8358
  1477:  L834D:
  1478:          lda     ORGSA
  1479:          and     #$F0
  1480:          cmp     #$F0
  1481:          beq     L8358
  1482:          jmp     L8366
  1483:  L8358:
  1484:          jsr     L82C7
  1485:          cli                                     ; allow processing of job loop
  1486:          jsr     LCFB7
  1487:          jmp     L8342
  1488:  L8362:
  1489:          lda     #$00
  1490:          sta     BITCNT
  1491:  L8366:
  1492:          lda     #0
  1493:          sta     VBC_PB1
  1494:  MainLoopEntry1570:
  1495:          jsr     L81B2
  1496:          jmp     MainLoopEntry
  1497:  L8371:
  1498:          sta     CMD
  1499:          sta     AF
  1500:          lda     VBC_IFR1
  1501:          lsr     a
  1502:          bcc     L8394
  1503:          ldx     #$0B
  1504:          .byte   ASM_BIT3
  1505:  L837F:
  1506:          ldx     #$4F
  1507:  L8381:
  1508:          jsr     L85E9
  1509:  L8384:
  1510:          jsr     L8581
  1511:  L8387:
  1512:          cpx     #$02
  1513:          bcs     L838C
  1514:          rts
  1515:  L838C:
  1516:          txa
  1517:          and     #$0F
  1518:          ldx     #$00
  1519:          jmp     LE60A
  1520:  L8394:
  1521:          jsr     L81CE
  1522:          bit     AS
  1523:          bpl     L83A0
  1524:          lda     #$09
  1525:          jmp     L86E6
  1526:  L83A0:
  1527:          jsr     LC63D
  1528:  L83A3:
  1529:          cli                                     ; allow processing of job loop
  1530:          lda     HINIB
  1531:          and     #$20
  1532:          bne     L83D0
  1533:          lda     CMDBUF + 3
  1534:          sta     TRACK0
  1535:          lda     CMDBUF + 4
  1536:          sta     SECTOR0
  1537:          ldx     #$00
  1538:          lda     AF
  1539:          sta     JOBS0,x
  1540:          jsr     L865E
  1541:          sei                                     ; disallow interrupts --> blocking job loop
  1542:          jsr     L85E9
  1543:          bit     HINIB
  1544:          bvs     L83C9
  1545:          cpx     #$02
  1546:          bcs     L8381
  1547:  L83C9:
  1548:          jsr     L85F9
  1549:          lda     HINIB
  1550:          bmi     L83DD
  1551:  L83D0:
  1552:          ldy     #$00
  1553:  L83D2:
  1554:          lda     BUFFER0,y
  1555:          sta     CTRACK
  1556:          jsr     L85F9
  1557:          iny
  1558:          bne     L83D2
  1559:  L83DD:
  1560:          dec     CMDBUF + 5
  1561:          beq     L83E8
  1562:          jsr     L861E
  1563:          jmp     L83A3
  1564:  L83E8:
  1565:          cli                                     ; allow processing of job loop
  1566:          jmp     L85AF
  1567:  L83EC:
  1568:          sta     CMD
  1569:          lda     VBC_IFR1
  1570:          lsr     a
  1571:          bcc     L8402
  1572:          ldx     #$0B
  1573:          .byte   ASM_BIT3
  1574:  L83F8:
  1575:          ldx     #$4F
  1576:          stx     CTRACK
  1577:          lda     HINIB
  1578:          ora     #$08
  1579:          sta     HINIB
  1580:  L8402:
  1581:          bit     AS
  1582:          bpl     L840B
  1583:          lda     #$0A
  1584:          jmp     L86E6
  1585:  L840B:
  1586:          jsr     LC63D
  1587:          lda     HINIB
  1588:          bmi     L843B
  1589:  L8412:
  1590:          sei                                     ; disallow interrupts --> blocking job loop
  1591:          ldy     #$00
  1592:  L8415:
  1593:          lda     VBC_PB1
  1594:          eor     #VBC_PB1_1540_CLOCKOUT
  1595:          bit     CIA_ICR
  1596:          sta     VBC_PB1
  1597:  L8420:
  1598:          lda     VBC_PB1
  1599:          bpl     L8428
  1600:          jsr     TestATN
  1601:  L8428:
  1602:          lda     CIA_ICR
  1603:          and     #CIA_ICR_B_SP
  1604:          beq     L8420
  1605:          lda     CIA_SDR
  1606:          sta     BUFFER0,y
  1607:          iny
  1608:          bne     L8415
  1609:          jsr     ClearClockOut
  1610:  L843B:
  1611:          cli                                     ; allow processing of job loop
  1612:          lda     HINIB
  1613:          and     #$20
  1614:          bne     L8479
  1615:          lda     HINIB
  1616:          and     #$08
  1617:          beq     L844D
  1618:          ldx     CTRACK
  1619:          jmp     L8381
  1620:  L844D:
  1621:          lda     CMDBUF + 3
  1622:          sta     TRACK0
  1623:          lda     CMDBUF + 4
  1624:          sta     SECTOR0
  1625:          ldx     #$00
  1626:          lda     #$90
  1627:          sta     JOBS0,x
  1628:          jsr     L865E
  1629:          sei                                     ; disallow interrupts --> blocking job loop
  1630:          jsr     L81CE
  1631:          jsr     L85E9
  1632:          jsr     L85F9
  1633:          jsr     L86A0
  1634:          jsr     L81B2
  1635:          cli                                     ; allow processing of job loop
  1636:          bit     HINIB
  1637:          bvs     L8479
  1638:          cpx     #$02
  1639:          bcs     L8484
  1640:  L8479:
  1641:          dec     CMDBUF + 5
  1642:          beq     L8487
  1643:          jsr     L861E
  1644:          jmp     L8412
  1645:  L8484:
  1646:          jmp     L838C
  1647:  L8487:
  1648:          cli                                     ; allow processing of job loop
  1649:          jmp     L85AF
  1650:  L848B:
  1651:          lda     CMDBUF + 2
  1652:          and     #$01
  1653:          bne     L84B2
  1654:          lda     #$01
  1655:          sta     VBC_IFR1
  1656:          lda     #$05
  1657:          jsr     L86E6
  1658:          ldx     L01B0
  1659:          cpx     #$02
  1660:          bcc     L84B4
  1661:          ldx     #$00
  1662:          stx     AS
  1663:          lda     #$B0
  1664:  .if CompileDrive >= DRIVE_1571_05
  1665:          jsr     LC075
  1666:  .else
  1667:          sta     CMD
  1668:  .endif
  1669:          sta     JOBS0,x
  1670:          jsr     L865E
  1671:          .byte   ASM_BIT3
  1672:  L84B2:
  1673:          ldx     #$4F
  1674:  L84B4:
  1675:          jmp     L8381
  1676:  L84B7:
  1677:          lda     CMDBUF + 2
  1678:          and     #$01
  1679:          bne     L84E9
  1680:          lda     CMDBUF + 3
  1681:          bpl     L84C8
  1682:          lda     #$08
  1683:          jmp     L86E6
  1684:  L84C8:
  1685:          lda     #$00
  1686:          sta     AS
  1687:          sta     NODRV
  1688:          lda     CMDBUF + 4
  1689:          sta     DiskID0
  1690:          lda     CMDBUF + 5
  1691:          sta     DiskID0 + 1
  1692:          jsr     LD307
  1693:          lda     #$01
  1694:          sta     TRACK
  1695:          lda     #$FF
  1696:          sta     JOBRTN
  1697:  .if CompileDrive = DRIVE_1571_03
  1698:          jsr     LA989
  1699:  .else
  1700:          jsr     LAA4D
  1701:  .endif
  1702:          tax
  1703:          .byte   ASM_BIT3
  1704:  L84E9:
  1705:          ldx     #$4F
  1706:          jsr     L85E9
  1707:          jmp     L8387
  1708:  L84F1:
  1709:          sei                                     ; disallow interrupts --> blocking job loop
  1710:          bit     HINIB
  1711:          bpl     L8500
  1712:          jsr     L81CE
  1713:          lda     BYTE
  1714:          sta     CTRACK
  1715:          jmp     L85F9
  1716:  L8500:
  1717:          ldx     CMDSIZ
  1718:          cpx     #$04
  1719:          bcs     L8511
  1720:          ldx     #$0E
  1721:          jsr     L85E9
  1722:          lda     #ERRORCODE_31_SYNTAX_ERROR
  1723:          jmp     GenerateErrorMessage
  1724:          ; --------------
  1725:  
  1726:  L8511:
  1727:          lda     CMDBUF + 3
  1728:          sta     BYTE
  1729:          rts
  1730:  L8517:
  1731:          jsr     L848B
  1732:          bit     AS
  1733:          bpl     L8566
  1734:          lda     #$0D
  1735:          jsr     L86E6
  1736:          ldx     L01B0
  1737:          cpx     #$02
  1738:          bcs     L8532
  1739:          jsr     L8961
  1740:          jsr     L8986
  1741:          txa
  1742:          pha
  1743:  L8532:
  1744:          sei                                     ; disallow interrupts --> blocking job loop
  1745:          jsr     L81CE
  1746:          lda     AS
  1747:          sta     CTRACK
  1748:          jsr     L85F9
  1749:          ldx     L01B0
  1750:          cpx     #$02
  1751:          bcs     L8567
  1752:          lda     MYPA
  1753:          sta     CTRACK
  1754:          jsr     L85F9
  1755:          lda     NMIFLG
  1756:          sta     CTRACK
  1757:          jsr     L85F9
  1758:          lda     ACLSTP
  1759:          sta     CTRACK
  1760:          jsr     L85F9
  1761:          lda     RSTEPS
  1762:          sta     CTRACK
  1763:          jsr     L85F9
  1764:          pla
  1765:          sta     CTRACK
  1766:  .if CompileDrive >= DRIVE_1571_05
  1767:          jmp     LAAC5
  1768:  .else
  1769:          jsr     L85F9
  1770:  .endif
  1771:  L8566:
  1772:          rts
  1773:  L8567:
  1774:          pla
  1775:          jmp     L838C
  1776:  L856B:
  1777:          bit     HINIB
  1778:          bpl     L8596
  1779:          bit     HINIB
  1780:          bvc     L8581
  1781:          lda     VBC_IFR1
  1782:          lsr     a
  1783:          bcc     L8581
  1784:          lda     AS
  1785:          and     #$F0
  1786:          ora     #$0B
  1787:          sta     AS
  1788:  L8581:
  1789:          sei                                     ; disallow interrupts --> blocking job loop
  1790:          jsr     L81CE
  1791:          lda     AS
  1792:          sta     CTRACK
  1793:          jsr     L85F9
  1794:          lda     #ERRORCODE_00_OK
  1795:          sta     ERWORD
  1796:          jsr     L81B2
  1797:          cli                                     ; allow processing of job loop
  1798:          rts
  1799:  L8596:
  1800:          lda     CMDBUF + 3
  1801:          sta     AS
  1802:          bit     HINIB
  1803:          bvc     L85A4
  1804:          lda     #$01
  1805:          sta     VBC_IFR1
  1806:  L85A4:
  1807:          rts
  1808:  L85A5:
  1809:          ldx     #$0E
  1810:          jsr     L85E9
  1811:          lda     #ERRORCODE_31_SYNTAX_ERROR
  1812:          jmp     GenerateErrorMessage
  1813:          ; --------------
  1814:  
  1815:  L85AF:
  1816:          lda     CMDSIZ
  1817:          cmp     #$07
  1818:          bcc     L85E8
  1819:          lda     TRACK0
  1820:          tay
  1821:          sbc     #$01
  1822:          asl     a
  1823:          sta     MINSTP
  1824:          cpy     #$24
  1825:          php
  1826:          ldy     CMDBUF + 6
  1827:          sty     DRVTRK
  1828:          dey
  1829:          sty     NMIFLG
  1830:          cpy     #$23
  1831:          ror     a
  1832:          plp
  1833:          and     #$80
  1834:          bcc     L85DC
  1835:          bmi     L85E5
  1836:          clc
  1837:          lda     NMIFLG
  1838:          adc     #$23
  1839:          sta     NMIFLG
  1840:          bmi     L85E5
  1841:  L85DC:
  1842:          bpl     L85E5
  1843:          sec
  1844:          lda     NMIFLG
  1845:          sbc     #$23
  1846:          sta     NMIFLG
  1847:  L85E5:
  1848:          jmp     L87BA
  1849:  L85E8:
  1850:          rts
  1851:  L85E9:
  1852:          stx     CTRACK
  1853:          lda     AS
  1854:          and     #$F0
  1855:          ora     CTRACK
  1856:          sta     AS
  1857:          sta     CTRACK
  1858:          rts
  1859:  L85F6:
  1860:          jsr     TestATN
  1861:  L85F9:
  1862:          lda     VBC_PB1
  1863:          cmp     VBC_PB1
  1864:          bne     L85F9
  1865:          and     #$FF
  1866:          bmi     L85F6
  1867:          eor     BITCNT
  1868:          and     #$04    ; VBC_PB1_1540_CLOCKIN?
  1869:          beq     L85F9
  1870:          lda     CTRACK
  1871:  .if CompileDrive >= DRIVE_1571_05
  1872:          jmp     LAB10
  1873:  .else
  1874:          sta     CIA_SDR
  1875:  .endif
  1876:          lda     BITCNT
  1877:          eor     #$04
  1878:          sta     BITCNT
  1879:          lda     #CIA_ICR_B_SP
  1880:  L8618:
  1881:          bit     CIA_ICR
  1882:          beq     L8618
  1883:          rts
  1884:  
  1885:  L861E:
  1886:          lda     CMDBUF + 3
  1887:          cmp     #$24
  1888:          bcc     L8627
  1889:          sbc     #$23
  1890:  L8627:
  1891:          tax
  1892:          lda     L9409 + 34,x
  1893:          tax
  1894:          dex
  1895:          stx     CTRACK
  1896:          clc
  1897:          lda     CMDBUF + 4
  1898:          adc     BYTE
  1899:          cmp     CTRACK
  1900:          bcc     L8643
  1901:          sbc     CTRACK
  1902:          beq     L8641
  1903:          sec
  1904:          sbc     #$01
  1905:          .byte   ASM_BIT3
  1906:  L8641:
  1907:          lda     CTRACK
  1908:  L8643:
  1909:          sta     CMDBUF + 4
  1910:          lda     #$88
  1911:          sta     AF
  1912:          rts
  1913:  L864B:
  1914:          ldx     JOBNUM
  1915:          php
  1916:          cli                                     ; allow processing of job loop
  1917:          jsr     L9FB6
  1918:          cmp     #$02
  1919:          bcc     L865B
  1920:          jsr     L8683
  1921:          lda     JOBS0,x
  1922:  L865B:
  1923:          tax
  1924:          plp
  1925:          rts
  1926:  L865E:
  1927:          ldx     #$00
  1928:          php
  1929:          sei                                     ; disallow interrupts --> blocking job loop
  1930:          lda     VDC_PB2
  1931:          ora     #VDC_PB2_DRIVE0LED
  1932:          sta     VDC_PB2
  1933:          cli                                     ; allow processing of job loop
  1934:          jsr     L9FB6
  1935:          cmp     #$02
  1936:          bcc     L8675
  1937:          jsr     L8683
  1938:  L8675:
  1939:          sei                                     ; disallow interrupts --> blocking job loop
  1940:          lda     VDC_PB2
  1941:          and     # ~ VDC_PB2_DRIVELEDS
  1942:          sta     VDC_PB2
  1943:          lda     JOBS0,x
  1944:          tax
  1945:          plp
  1946:          rts
  1947:  L8683:
  1948:          lda     #$FF
  1949:          sta     JOBRTN
  1950:          stx     JOBNUM
  1951:          lda     CMDBUF + 2
  1952:          sta     AF
  1953:          sta     CMD
  1954:          sta     LSTJOB,x
  1955:  .if CompileDrive >= DRIVE_1571_05
  1956:          sta     JOBS0,x
  1957:  .else
  1958:          sta     JOBS0
  1959:  .endif
  1960:          jsr     L9FB6
  1961:          jmp     LD599
  1962:  L869D:
  1963:          jsr     TestATN
  1964:  L86A0:
  1965:          lda     VBC_PB1
  1966:          cmp     VBC_PB1
  1967:          bne     L86A0
  1968:          and     #$FF
  1969:          bmi     L869D
  1970:          eor     BITCNT
  1971:          and     #$04    ; VBC_PB1_1540_CLOCKIN?
  1972:          beq     L86A0
  1973:          lda     BITCNT
  1974:          eor     #$04
  1975:          sta     BITCNT
  1976:          rts
  1977:  L86B9:
  1978:          .byte   $00,$15,$00,$00,$00,$15,$00,$BC
  1979:          .byte   $34,$DE,$FE,$DC,$15,$15,$00
  1980:  L86C8:
  1981:          .addr   L89EC
  1982:          .addr   L89EF
  1983:          .addr   L89FD
  1984:          .addr   L8A03
  1985:          .addr   L8A08
  1986:          .addr   L8A09
  1987:          .addr   L87BA
  1988:          .addr   L8A86
  1989:          .addr   L8C57
  1990:          .addr   L8D67
  1991:          .addr   L8DF6
  1992:  .if CompileDrive >= DRIVE_1571CR
  1993:          .addr   LACC7
  1994:          .addr   LAD2E
  1995:          .addr   LAD93
  1996:  .else
  1997:          .addr   L8EC6
  1998:          .addr   L8F18
  1999:          .addr   L8F5F
  2000:  .endif
  2001:          .addr   L89B3
  2002:  
  2003:  L86E6:
  2004:          sei                                     ; disallow interrupts --> blocking job loop
  2005:          pha
  2006:          tax
  2007:          lda     L86B9,x
  2008:          sta     ACTJOB
  2009:          lda     AS
  2010:          ora     #$80
  2011:          sta     AS
  2012:          asl     ACTJOB
  2013:          bcc     L86FD
  2014:          lda     CMDBUF + 3
  2015:          sta     NMIFLG
  2016:  L86FD:
  2017:          asl     ACTJOB
  2018:          bcc     L8706
  2019:          lda     CMDBUF + 4
  2020:          sta     SECTR
  2021:  L8706:
  2022:          asl     ACTJOB
  2023:          bcc     L871B
  2024:          lda     VDC_PB2
  2025:          and     #VDC_PB2_WRITEPROTECT
  2026:          bne     L871B
  2027:          lda     HINIB
  2028:          ora     #$08
  2029:          sta     HINIB
  2030:          ldx     #$08
  2031:          stx     CTRACK
  2032:  L871B:
  2033:          asl     ACTJOB
  2034:          bcc     L8722
  2035:          jsr     L8794
  2036:  L8722:
  2037:          asl     ACTJOB
  2038:          bcc     L8729
  2039:          jsr     L87BA
  2040:  L8729:
  2041:          asl     ACTJOB
  2042:          bcc     L8730
  2043:          jsr     L87B0
  2044:  L8730:
  2045:          jsr     L8954
  2046:          asl     ACTJOB
  2047:          bcc     L873A
  2048:          jsr     L892A
  2049:  L873A:
  2050:          lda     #$00
  2051:          pla
  2052:          asl     a
  2053:          tax
  2054:          lda     L86C8,x
  2055:          sta     T0
  2056:          lda     L86C8 + 1,x
  2057:          sta     T1
  2058:  .if CompileDrive >= DRIVE_1571CR_01
  2059:          jsr     L877C
  2060:  .endif
  2061:          jsr     L8761
  2062:          jsr     LF98F
  2063:  .if CompileDrive >= DRIVE_1571CR_01
  2064:          jsr     L8788
  2065:  .endif
  2066:          ldx     L01B0
  2067:          cpx     #$02
  2068:          php
  2069:          asl     ACTJOB
  2070:          bcs     L875F
  2071:          plp
  2072:          bcc     L8760
  2073:          jmp     L838C
  2074:  L875F:
  2075:          plp
  2076:  L8760:
  2077:          rts
  2078:  
  2079:  L8761:
  2080:          jmp     (T0)
  2081:  
  2082:  L8764:
  2083:          php
  2084:          sei                                     ; disallow interrupts --> blocking job loop
  2085:          lda     VDC_PB2
  2086:          ora     #VDC_PB2_DRIVE0MOTOR
  2087:          sta     VDC_PB2
  2088:          plp
  2089:          rts
  2090:  L8770:
  2091:          php
  2092:          sei                                     ; disallow interrupts --> blocking job loop
  2093:          lda     VDC_PB2
  2094:          and     # ~ VDC_PB2_DRIVE0MOTOR
  2095:          sta     VDC_PB2
  2096:          plp
  2097:          rts
  2098:  L877C:
  2099:          php
  2100:          sei                                     ; disallow interrupts --> blocking job loop
  2101:          lda     VDC_PB2
  2102:          ora     #VDC_PB2_DRIVE0LED
  2103:          sta     VDC_PB2
  2104:          plp
  2105:          rts
  2106:  L8788:
  2107:          php
  2108:          sei                                     ; disallow interrupts --> blocking job loop
  2109:          lda     VDC_PB2
  2110:          and     # ~ VDC_PB2_DRIVELEDS
  2111:          sta     VDC_PB2
  2112:          plp
  2113:          rts
  2114:  L8794:
  2115:          php
  2116:          sei                                     ; disallow interrupts --> blocking job loop
  2117:          lda     DRVST
  2118:  .if CompileDrive >= DRIVE_1571_05
  2119:          bmi     L87A2
  2120:          and     #$30
  2121:          beq     L87A4
  2122:          lda     #$20
  2123:  .else
  2124:          cmp     #$20
  2125:          beq     L87AA
  2126:          lda     CMDBUF + 2
  2127:          and     #$01
  2128:          sta     CDRIVE
  2129:          jsr     L8764
  2130:          lda     #$A0
  2131:  .endif
  2132:          sta     DRVST
  2133:  
  2134:  .if CompileDrive >= DRIVE_1571_05
  2135:  L87A2:
  2136:          plp
  2137:  .else
  2138:  L87AA:
  2139:          lda     #$32
  2140:          sta     ACLTIM
  2141:          plp
  2142:  .endif
  2143:          rts
  2144:  .if CompileDrive >= DRIVE_1571_05
  2145:  L87A4:
  2146:          plp
  2147:          sta     CDRIVE
  2148:          jmp     LF97E
  2149:   .if CompileDrive >= DRIVE_1571CR_01
  2150:   .else
  2151:          FillNOP 6
  2152:   .endif
  2153:  .endif
  2154:  L87B0:
  2155:          php
  2156:          cli                                     ; allow processing of job loop
  2157:  L87B2:
  2158:          lda     DRVST
  2159:          cmp     #$20
  2160:          bne     L87B2
  2161:          plp
  2162:          rts
  2163:  L87BA:
  2164:          php
  2165:          cli                                     ; allow processing of job loop
  2166:          lda     NMIFLG
  2167:          asl     a
  2168:          cmp     MINSTP
  2169:          beq     L87DD
  2170:  L87C3:
  2171:          lda     NMIFLG
  2172:          asl     a
  2173:          cmp     MINSTP
  2174:          beq     L87D8
  2175:          bcs     L87D2
  2176:          jsr     L87E7
  2177:          jmp     L87C3
  2178:  L87D2:
  2179:          jsr     L87DF
  2180:          jmp     L87C3
  2181:  L87D8:
  2182:  .if CompileDrive >= DRIVE_1571 .AND CompileDrive < DRIVE_1571CR
  2183:          ldy     #$10
  2184:  .else
  2185:          ldy     #$12
  2186:  .endif
  2187:          jsr     L8829
  2188:  L87DD:
  2189:          plp
  2190:          rts
  2191:  L87DF:
  2192:          lda     MINSTP
  2193:          clc
  2194:          adc     #$01
  2195:          jmp     L8814
  2196:  L87E7:
  2197:          ldy     #$63
  2198:  L87E9:
  2199:          lda     VBC_PAUNBUF1
  2200:          ror     a
  2201:          php
  2202:          lda     VBC_PAUNBUF1
  2203:          ror     a
  2204:          ror     a
  2205:          plp
  2206:          and     #$80
  2207:          bcc     L87FC
  2208:          bpl     L880F
  2209:          bmi     L87FE
  2210:  L87FC:
  2211:          bmi     L880F
  2212:  L87FE:
  2213:          dey
  2214:          bne     L87E9
  2215:          bcs     L880F
  2216:          lda     VDC_PB2
  2217:          and     #VDC_PB2_STEPPER
  2218:          bne     L880F
  2219:          lda     #$00
  2220:          sta     MINSTP
  2221:          rts
  2222:  L880F:
  2223:          lda     MINSTP
  2224:          sec
  2225:          sbc     #$01
  2226:  L8814:
  2227:          sta     MINSTP
  2228:          and     #$03
  2229:          sta     T0
  2230:          php
  2231:          sei                                     ; disallow interrupts --> blocking job loop
  2232:          lda     VDC_PB2
  2233:          and     # ~ VDC_PB2_STEPPER
  2234:          ora     T0
  2235:          sta     VDC_PB2
  2236:          plp
  2237:  .if CompileDrive >= DRIVE_1571CR
  2238:          ldy     #$05
  2239:  .elseif CompileDrive >= DRIVE_1571
  2240:          ldy     #$06
  2241:  .else
  2242:          ldy     #$08
  2243:  .endif
  2244:  L8829:
  2245:          jsr     L8830
  2246:          dey
  2247:          bne     L8829
  2248:          rts
  2249:  L8830:
  2250:          ldx     #$02
  2251:  .if CompileDrive >= DRIVE_1571_05
  2252:          lda     #$6F
  2253:  .else
  2254:          lda     #$00
  2255:  .endif
  2256:  L8834:
  2257:          adc     #$01
  2258:          bne     L8834
  2259:          dex
  2260:          bne     L8834
  2261:          rts
  2262:  
  2263:  .if CompileDrive >= DRIVE_1571CR
  2264:  .else
  2265:  
  2266:  L883C:
  2267:          nop
  2268:          lda     WD177x_STATUS
  2269:          lsr     a
  2270:          lsr     a
  2271:          lsr     a
  2272:          and     #$03
  2273:          tax
  2274:          lda     L8A82,x
  2275:          sta     L01B0
  2276:          tax
  2277:          rts
  2278:  L884E:
  2279:          pha
  2280:          jsr     L877C
  2281:          pla
  2282:          sta     WD177x_COMMAND
  2283:          lda     #$01
  2284:          nop
  2285:  L8859:
  2286:          bit     WD177x_STATUS
  2287:          beq     L8859
  2288:          jmp     LA47E
  2289:  L8861:
  2290:          jsr     L8788
  2291:          lda     #$01
  2292:  L8866:
  2293:          bit     WD177x_STATUS
  2294:          bne     L8866
  2295:          rts
  2296:  .endif
  2297:  
  2298:  L886C:
  2299:          lda     ACLSTP
  2300:          sec
  2301:          sbc     #$01
  2302:          sta     CTRACK
  2303:          lda     CMDBUF + 4
  2304:          clc
  2305:          adc     BYTE
  2306:          cmp     RSTEPS
  2307:          beq     L8884
  2308:          bcc     L8884
  2309:          sbc     RSTEPS
  2310:          clc
  2311:          adc     CTRACK
  2312:  L8884:
  2313:          sta     CMDBUF + 4
  2314:          rts
  2315:  L8888:
  2316:          ldy     #$00
  2317:          ldx     #$00
  2318:          lda     CMDBUF + 3
  2319:          and     #$3F
  2320:          sta     CMDBUF + 3
  2321:          sta     ACLSTP
  2322:          pha
  2323:          lda     CMDBUF + 7
  2324:          pha
  2325:          inc     CMDBUF + 4
  2326:  L889E:
  2327:          lda     CMDBUF + 3
  2328:          sta     CMDBUF + 11,y
  2329:          inc     CMDBUF + 3
  2330:          inx
  2331:          tya
  2332:          clc
  2333:          adc     CMDBUF + 4
  2334:          tay
  2335:          cpy     #$20
  2336:          bcs     L88BE
  2337:          cpy     CMDBUF + 7
  2338:          bcc     L88D1
  2339:          bne     L88CB
  2340:          cpx     CMDBUF + 7
  2341:          beq     L88CB
  2342:  L88BE:
  2343:          dec     CMDBUF + 4
  2344:          pla
  2345:          sta     CMDBUF + 7
  2346:          pla
  2347:          sta     CMDBUF + 3
  2348:          sec
  2349:          rts
  2350:  L88CB:
  2351:          tya
  2352:          sec
  2353:          sbc     CMDBUF + 7
  2354:          tay
  2355:  L88D1:
  2356:          cpx     CMDBUF + 7
  2357:          bne     L889E
  2358:          stx     MYPA
  2359:          dex
  2360:          txa
  2361:          clc
  2362:          adc     ACLSTP
  2363:          sta     RSTEPS
  2364:          cmp     ACLSTP
  2365:          bcc     L88BE
  2366:          pla
  2367:          sta     CMDBUF + 7
  2368:          pla
  2369:          sta     CMDBUF + 3
  2370:          dec     CMDBUF + 4
  2371:          clc
  2372:          rts
  2373:  L88F0:
  2374:          lda     L01B0
  2375:          pha
  2376:          ldy     #$00
  2377:  .if CompileDrive >= DRIVE_1571CR
  2378:  L88F8:
  2379:          lda     CMDBUF + 11,y
  2380:          sta     SECTR
  2381:          tya
  2382:          pha
  2383:          jsr     LAD2E
  2384:          pla
  2385:          tay
  2386:  .else
  2387:          sty     STAB
  2388:  L88F8:
  2389:          ldy     STAB
  2390:          lda     CMDBUF + 11,y
  2391:          sta     WD177x_SECTOR
  2392:          jsr     L8F18
  2393:  .endif
  2394:          ldx     L01B0
  2395:          cpx     #$02
  2396:          bcs     L8915
  2397:  .if CompileDrive >= DRIVE_1571CR
  2398:          iny
  2399:  .else
  2400:          inc     STAB
  2401:          ldy     STAB
  2402:  .endif
  2403:          cpy     CMDBUF + 7
  2404:          bne     L88F8
  2405:          clc
  2406:          .byte   ASM_BIT2
  2407:  L8915:
  2408:          sec
  2409:          pla
  2410:          sta     L01B0
  2411:  L891A:
  2412:          rts
  2413:  L891B:
  2414:          lda     CMDSIZ
  2415:          cmp     #$07
  2416:          bcc     L891A
  2417:          lda     CMDBUF + 6
  2418:          sta     NMIFLG
  2419:          jmp     L87BA
  2420:  L892A:
  2421:          lda     L01B0
  2422:          pha
  2423:  .if CompileDrive >= DRIVE_1571CR
  2424:          lda     REVCNT
  2425:          asl     a
  2426:          sta     TMP
  2427:  L88FF:
  2428:          jsr     L89E8
  2429:  .else
  2430:          jsr     L8A27
  2431:  .endif
  2432:          ldx     L01B0
  2433:          cpx     #$02
  2434:  .if CompileDrive >= DRIVE_1571CR
  2435:          bcc     L8923
  2436:          dec     TMP
  2437:          bne     L88FF
  2438:          jsr     L89EF
  2439:          lda     REVCNT
  2440:          asl     a
  2441:          sta     TMP
  2442:  L8915_CR:
  2443:          jsr     L89E8
  2444:  .else
  2445:          bcc     L8945
  2446:          jsr     L89EF
  2447:          jsr     L8A27
  2448:  .endif
  2449:          ldx     L01B0
  2450:          cpx     #$02
  2451:  .if CompileDrive >= DRIVE_1571CR
  2452:          bcc     L8923
  2453:          dec     TMP
  2454:          bne     L8915_CR
  2455:  .else
  2456:          bcs     L894F
  2457:  .endif
  2458:  L8923:
  2459:  L8945:
  2460:          lda     NMIFLG
  2461:          asl     a
  2462:          cmp     MINSTP
  2463:          beq     L894F
  2464:          jsr     L87BA
  2465:  L894F:
  2466:          pla
  2467:          sta     L01B0
  2468:          rts
  2469:  L8954:
  2470:          php
  2471:          sei                                     ; disallow interrupts --> blocking job loop
  2472:          lda     HINIB
  2473:          and     #$10
  2474:          cmp     #$10
  2475:          jsr     L93F3
  2476:          plp
  2477:          rts
  2478:  L8961:
  2479:          ldy     MYPA
  2480:          dey
  2481:          lda     #$FF
  2482:  L8966:
  2483:          cmp     CMDBUF + 11,y
  2484:          bcc     L896E
  2485:          lda     CMDBUF + 11,y
  2486:  L896E:
  2487:          dey
  2488:          bpl     L8966
  2489:          sta     ACLSTP
  2490:          ldy     MYPA
  2491:          dey
  2492:          lda     #$00
  2493:  L8978:
  2494:          cmp     CMDBUF + 11,y
  2495:          bcs     L8980
  2496:          lda     CMDBUF + 11,y
  2497:  L8980:
  2498:          dey
  2499:          bpl     L8978
  2500:          sta     RSTEPS
  2501:          rts
  2502:  L8986:
  2503:          ldx     MYPA
  2504:          ldy     #$00
  2505:  L898A:
  2506:          lda     CMDBUF + 11,y
  2507:          cmp     ACLSTP
  2508:          beq     L8996
  2509:          iny
  2510:          cpy     MYPA
  2511:          bne     L898A
  2512:  L8996:
  2513:          sty     AF
  2514:          lda     ACLSTP
  2515:          clc
  2516:          adc     #$01
  2517:          sta     CTRACK
  2518:          ldx     #$FF
  2519:  L89A1:
  2520:          lda     CMDBUF + 11,y
  2521:          cmp     CTRACK
  2522:          beq     L89B2
  2523:          inx
  2524:          iny
  2525:          cpy     MYPA
  2526:          bne     L89A1
  2527:          ldy     #$00
  2528:          beq     L89A1
  2529:  L89B2:
  2530:          rts
  2531:  
  2532:  L89B3:
  2533:          lda     T0
  2534:          pha
  2535:          php
  2536:          sei                                     ; disallow interrupts --> blocking job loop
  2537:  .if CompileDrive >= DRIVE_1571CR
  2538:  .else
  2539:          lda     WD177x_TRACK
  2540:          sta     WD177x_DATA
  2541:          lda     #$18
  2542:          jsr     L884E
  2543:          jsr     L8861
  2544:  .endif
  2545:          ldx     #$00
  2546:          ldy     #$80
  2547:          lda     WD177x_STATUS
  2548:  .if CompileDrive >= DRIVE_1571CR
  2549:          and     #$40
  2550:  .else
  2551:          and     #$02
  2552:  .endif
  2553:          sta     T0
  2554:  L89D1:
  2555:          lda     WD177x_STATUS
  2556:  .if CompileDrive >= DRIVE_1571CR
  2557:          and     #$40
  2558:  .else
  2559:          and     #$02
  2560:  .endif
  2561:          cmp     T0
  2562:          beq     L89DE
  2563:          plp
  2564:          jmp     L89E7
  2565:  L89DE:
  2566:          dex
  2567:          bne     L89D1
  2568:          dey
  2569:          bne     L89D1
  2570:          plp
  2571:          sec
  2572:          .byte   ASM_BIT2
  2573:  L89E7:
  2574:          clc
  2575:          pla
  2576:          sta     T0
  2577:          rts
  2578:  
  2579:  L89EC:
  2580:          jmp     RESET
  2581:  
  2582:  L89EF:
  2583:          lda     #$B4
  2584:          sta     MINSTP
  2585:          lda     #$00
  2586:  .if CompileDrive >= DRIVE_1571CR
  2587:  .else
  2588:          sta     WD177x_TRACK
  2589:  .endif
  2590:          sta     NMIFLG
  2591:          jmp     L87BA
  2592:  L89FD:
  2593:          lda     VDC_PB2
  2594:          and     #VDC_PB2_WRITEPROTECT
  2595:          rts
  2596:  L8A03:
  2597:          sty     NMIFLG
  2598:          stx     MINSTP
  2599:          rts
  2600:  L8A08:
  2601:          rts
  2602:  L8A09:
  2603:          jsr     L89EF
  2604:  
  2605:  .if CompileDrive >= DRIVE_1571CR
  2606:          jsr     L89E8
  2607:          lda     L8A7E,x
  2608:  .else
  2609:          jsr     L89B3
  2610:          bcs     L8A20
  2611:          jsr     L8A27
  2612:          lda     L8A7E,x
  2613:  .endif
  2614:  
  2615:          sta     MYPA
  2616:          sta     RSTEPS
  2617:          lda     #$01
  2618:          sta     ACLSTP
  2619:          rts
  2620:  
  2621:  .if CompileDrive >= DRIVE_1571CR
  2622:  L89E8:
  2623:          jsr     LABEC
  2624:  .else
  2625:  L8A20:
  2626:          lda     #$0D
  2627:          sta     L01B0
  2628:          bne     L8A65
  2629:  L8A27:
  2630:          lda     #$00
  2631:          sta     RLINDX
  2632:          sta     WORK
  2633:          lda     #$C8
  2634:          jsr     L884E
  2635:          ldx     #$00
  2636:          ldy     #$06
  2637:  L8A37:
  2638:          lda     WD177x_STATUS
  2639:          and     #$03
  2640:          lsr     a
  2641:          bcc     L8A4A
  2642:          beq     L8A37
  2643:          lda     WD177x_DATA
  2644:          sta     STAB,x
  2645:          inx
  2646:          dey
  2647:          bne     L8A37
  2648:  L8A4A:
  2649:          jsr     L8861
  2650:          jsr     L883C
  2651:  .endif
  2652:  
  2653:          lda     STAB
  2654:          asl     a
  2655:          sta     MINSTP
  2656:          lda     STAB + 3
  2657:  L8A57:
  2658:          and     #$03
  2659:          tax
  2660:          lda     L8A72,x
  2661:          sta     RLINDX
  2662:          lda     L8A76,x
  2663:          sta     WORK
  2664:  L8A65:
  2665:          lda     AS
  2666:          and     #$80
  2667:          ora     L01B0
  2668:          ora     L8A7A,x
  2669:          sta     AS
  2670:  .if CompileDrive >= DRIVE_1571CR
  2671:          stx     L01B5
  2672:  .endif
  2673:          rts
  2674:  L8A72:
  2675:          .byte   $7F,$FF,$FF,$FF
  2676:  L8A76:
  2677:          .byte   $01,$01,$02,$04
  2678:  L8A7A:
  2679:          .byte   $00,$10,$20,$30
  2680:  L8A7E:
  2681:          .byte   $1A,$10,$09,$05
  2682:  
  2683:  .if CompileDrive >= DRIVE_1571CR
  2684:  .else
  2685:  L8A82:
  2686:          .byte   $01,$09,$02,$03
  2687:  .endif
  2688:  
  2689:  L8A86:
  2690:  
  2691:  .if CompileDrive >= DRIVE_1571CR
  2692:          bit     WD177x_STATUS
  2693:          bvc     L8A86
  2694:  L8A25_CR:
  2695:          bit     WD177x_STATUS
  2696:          bvs     L8A25_CR
  2697:          bit     L01B4
  2698:          bmi     L8A32
  2699:          lda     #$28
  2700:          .byte   ASM_BIT3
  2701:  L8A32:
  2702:          lda     #$29
  2703:          sta     WD177x_COMMAND
  2704:          lda     WD177x_STATUS
  2705:          ora     #$02
  2706:          sta     WD177x_COMMAND
  2707:          lda     #$4E
  2708:          sta     WD177x_SECTOR
  2709:  .else
  2710:          lda     #$F8
  2711:          jsr     L884E
  2712:  .endif
  2713:          bit     HINIB
  2714:          bvc     L8AF1
  2715:          ldx     #$50
  2716:  .if CompileDrive >= DRIVE_1571CR
  2717:  .else
  2718:  L8A91:
  2719:          lda     WD177x_STATUS
  2720:          and     #$03
  2721:          lsr     a
  2722:          bcc     L8AF9
  2723:          beq     L8A91
  2724:  .endif
  2725:          lda     #$4E
  2726:  .if CompileDrive >= DRIVE_1571CR
  2727:  L8A91:
  2728:          bit     WD177x_STATUS
  2729:          bpl     L8A91
  2730:          sta     WD177x_SECTOR
  2731:  .else
  2732:          sta     WD177x_DATA
  2733:  .endif
  2734:          dex
  2735:          bne     L8A91
  2736:          ldx     #$0C
  2737:  L8AA5:
  2738:  .if CompileDrive >= DRIVE_1571CR
  2739:  .else
  2740:          lda     WD177x_STATUS
  2741:          and     #$03
  2742:          lsr     a
  2743:          bcc     L8AF9
  2744:          beq     L8AA5
  2745:  .endif
  2746:          lda     #$00
  2747:  .if CompileDrive >= DRIVE_1571CR
  2748:  L8A5B:
  2749:          bit     WD177x_STATUS
  2750:          bpl     L8A5B
  2751:          sta     WD177x_SECTOR
  2752:  .else
  2753:          sta     WD177x_DATA
  2754:  .endif
  2755:          dex
  2756:  .if CompileDrive >= DRIVE_1571CR
  2757:          bne     L8A5B
  2758:          lda     WD177x_TRACK
  2759:          and     #$F8
  2760:          ora     CSG5710_4010 + 3
  2761:          sta     WD177x_TRACK
  2762:  
  2763:          lda     CSG5710_4010 + 1
  2764:  L8A74:
  2765:          bit     WD177x_STATUS
  2766:          bpl     L8A74
  2767:          sta     WD177x_SECTOR
  2768:          lda     WD177x_STATUS
  2769:          ora     #$04
  2770:          sta     WD177x_COMMAND
  2771:          ldx     #$02
  2772:  
  2773:          lda     CSG5710_4010 + 1
  2774:  L8A89:
  2775:          bit     WD177x_STATUS
  2776:          bpl     L8A89
  2777:          sta     WD177x_SECTOR
  2778:  .else
  2779:          bne     L8AA5
  2780:          ldx     #$03
  2781:  L8AB9:
  2782:          lda     WD177x_STATUS
  2783:          and     #$03
  2784:          lsr     a
  2785:          bcc     L8AF9
  2786:          beq     L8AB9
  2787:          lda     #$F6
  2788:          sta     WD177x_DATA
  2789:  .endif
  2790:          dex
  2791:  
  2792:  .if CompileDrive >= DRIVE_1571CR
  2793:          bne     L8A89
  2794:  .else
  2795:          bne     L8AB9
  2796:  L8ACB:
  2797:          lda     WD177x_STATUS
  2798:          and     #$03
  2799:          lsr     a
  2800:          bcc     L8AF9
  2801:          beq     L8ACB
  2802:  .endif
  2803:          lda     #$FC
  2804:  .if CompileDrive >= DRIVE_1571CR
  2805:  L8A96:
  2806:          bit     WD177x_STATUS
  2807:          bpl     L8A96
  2808:          sta     WD177x_SECTOR
  2809:          lda     WD177x_STATUS
  2810:          and     #$FB
  2811:          sta     WD177x_COMMAND
  2812:  .else
  2813:          sta     WD177x_DATA
  2814:  .endif
  2815:  
  2816:          ldx     #$32
  2817:  
  2818:  .if CompileDrive >= DRIVE_1571CR
  2819:  .else
  2820:          nop
  2821:  L8ADD:
  2822:          lda     WD177x_STATUS
  2823:          and     #$03
  2824:          lsr     a
  2825:          bcc     L8AF9
  2826:          beq     L8ADD
  2827:  .endif
  2828:          lda     #$4E
  2829:  
  2830:  .if CompileDrive >= DRIVE_1571CR
  2831:  L8AAA:
  2832:          bit     WD177x_STATUS
  2833:          bpl     L8AAA
  2834:          sta     WD177x_SECTOR
  2835:  .else
  2836:          sta     WD177x_DATA
  2837:  .endif
  2838:          dex
  2839:  .if CompileDrive >= DRIVE_1571CR
  2840:          bne     L8AAA
  2841:          beq     L8AC6
  2842:  L8AF1:
  2843:          ldx     #$3C
  2844:  .else
  2845:          bne     L8ADD
  2846:          beq     L8B05
  2847:  L8AF1:
  2848:          ldx     #$3C
  2849:  L8AF3:
  2850:          lda     WD177x_STATUS
  2851:          and     #$03
  2852:          lsr     a
  2853:  L8AF9:
  2854:          bcc     L8B23
  2855:          beq     L8AF3
  2856:  .endif
  2857:          lda     #$4E
  2858:  .if CompileDrive >= DRIVE_1571CR
  2859:  L8ABB:
  2860:          bit     WD177x_STATUS
  2861:          bpl     L8ABB
  2862:          sta     WD177x_SECTOR
  2863:  .else
  2864:          sta     WD177x_DATA
  2865:  .endif
  2866:          dex
  2867:  
  2868:  .if CompileDrive >= DRIVE_1571CR
  2869:          bne     L8ABB
  2870:  L8AC6:
  2871:          ldy     #$01
  2872:  L8AC8:
  2873:  .else
  2874:          bne     L8AF3
  2875:  L8B05:
  2876:          ldy     #$01
  2877:  L8B07:
  2878:          ldx     #$0C
  2879:  L8B09:
  2880:          lda     WD177x_STATUS
  2881:          and     #$03
  2882:          lsr     a
  2883:          bcc     L8B23
  2884:          beq     L8B09
  2885:  .endif
  2886:          lda     #$00
  2887:  .if CompileDrive >= DRIVE_1571CR
  2888:          ldx     #$0C
  2889:  L8ACC:
  2890:          bit     WD177x_STATUS
  2891:          bpl     L8ACC
  2892:          sta     WD177x_SECTOR
  2893:  .else
  2894:          sta     WD177x_DATA
  2895:  .endif
  2896:          dex
  2897:  .if CompileDrive >= DRIVE_1571CR
  2898:          bne     L8ACC
  2899:          lda     CSG5710_4010 + 0
  2900:  L8ADA:
  2901:          bit     WD177x_STATUS
  2902:          bpl     L8ADA
  2903:          sta     WD177x_SECTOR
  2904:          lda     WD177x_STATUS
  2905:          ora     #$14
  2906:          sta     WD177x_COMMAND
  2907:          lda     WD177x_TRACK
  2908:          and     #$F8
  2909:          ora     CSG5710_4010 + 2
  2910:          sta     WD177x_TRACK
  2911:          ldx     #$02
  2912:          lda     CSG5710_4010 + 0
  2913:  L8AFA:
  2914:          bit     WD177x_STATUS
  2915:          bpl     L8AFA
  2916:          sta     WD177x_SECTOR
  2917:  .else
  2918:          bne     L8B09
  2919:          ldx     #$03
  2920:  L8B1D:
  2921:          lda     WD177x_STATUS
  2922:          and     #$03
  2923:          lsr     a
  2924:  L8B23:
  2925:          bcc     L8B7C
  2926:          beq     L8B1D
  2927:          lda     #$F5
  2928:          sta     WD177x_DATA
  2929:  .endif
  2930:          dex
  2931:  
  2932:  .if CompileDrive >= DRIVE_1571CR
  2933:          bne     L8AFA
  2934:          lda     CSG5710_4010 + 5
  2935:  L8B08:
  2936:          bit     WD177x_STATUS
  2937:          bpl     L8B08
  2938:          sta     WD177x_SECTOR
  2939:          lda     WD177x_STATUS
  2940:          and     #$FB
  2941:          sta     WD177x_COMMAND
  2942:  .else
  2943:          bne     L8B1D
  2944:  L8B2F:
  2945:          lda     WD177x_STATUS
  2946:          and     #$03
  2947:          lsr     a
  2948:          bcc     L8B7C
  2949:          beq     L8B2F
  2950:          lda     #$FE
  2951:          sta     WD177x_DATA
  2952:  L8B3E:
  2953:          lda     WD177x_STATUS
  2954:          and     #$03
  2955:          lsr     a
  2956:          bcc     L8B7C
  2957:          beq     L8B3E
  2958:  .endif
  2959:  
  2960:          lda     L01B0
  2961:  
  2962:  .if CompileDrive >= DRIVE_1571CR
  2963:  L8B1B:
  2964:          bit     WD177x_STATUS
  2965:          bpl     L8B1B
  2966:          sta     WD177x_SECTOR
  2967:  .else
  2968:          sta     WD177x_DATA
  2969:  L8B4E:
  2970:          lda     WD177x_STATUS
  2971:          and     #$03
  2972:          lsr     a
  2973:          bcc     L8B7C
  2974:          beq     L8B4E
  2975:  .endif
  2976:  
  2977:          lda     HINIB
  2978:          and     #$10
  2979:          bne     L8B61
  2980:          lda     #$00
  2981:          .byte   ASM_BIT3
  2982:  L8B61:
  2983:          lda     #$01
  2984:  .if CompileDrive >= DRIVE_1571CR
  2985:  L8B2E:
  2986:          bit     WD177x_STATUS
  2987:          bpl     L8B2E
  2988:          sta     WD177x_SECTOR
  2989:  .else
  2990:          sta     WD177x_DATA
  2991:  L8B66:
  2992:          lda     WD177x_STATUS
  2993:          and     #$03
  2994:          lsr     a
  2995:          bcc     L8B7C
  2996:          beq     L8B66
  2997:  .endif
  2998:  
  2999:          lda     CMDBUF + 10,y
  3000:  
  3001:  .if CompileDrive >= DRIVE_1571CR
  3002:  L8B39:
  3003:          bit     WD177x_STATUS
  3004:          bpl     L8B39
  3005:          sta     WD177x_SECTOR
  3006:  .else
  3007:          sta     WD177x_DATA
  3008:  L8B76:
  3009:          lda     WD177x_STATUS
  3010:          and     #$03
  3011:          lsr     a
  3012:  L8B7C:
  3013:          bcc     L8BB1
  3014:          beq     L8B76
  3015:  .endif
  3016:  
  3017:          lda     CMDBUF + 5
  3018:  
  3019:  .if CompileDrive >= DRIVE_1571CR
  3020:  L8B44:
  3021:          bit     WD177x_STATUS
  3022:          bpl     L8B44
  3023:          sta     WD177x_SECTOR
  3024:  L8B4C:
  3025:          bit     WD177x_STATUS
  3026:          bpl     L8B4C
  3027:          sta     WD177x_SECTOR
  3028:          lda     WD177x_STATUS
  3029:          and     #$F7
  3030:          sta     WD177x_COMMAND
  3031:  L8B5C:
  3032:          bit     WD177x_STATUS
  3033:          bpl     L8B5C
  3034:          sta     WD177x_SECTOR
  3035:  .else
  3036:          sta     WD177x_DATA
  3037:  L8B86:
  3038:          lda     WD177x_STATUS
  3039:          and     #$03
  3040:          lsr     a
  3041:          bcc     L8BB1
  3042:          beq     L8B86
  3043:          lda     #$F7
  3044:          sta     WD177x_DATA
  3045:          ldx     #$16
  3046:  L8B97:
  3047:          lda     WD177x_STATUS
  3048:          and     #$03
  3049:          lsr     a
  3050:          bcc     L8BB1
  3051:          beq     L8B97
  3052:  .endif
  3053:  
  3054:          lda     #$4E
  3055:  
  3056:  .if CompileDrive >= DRIVE_1571CR
  3057:  L8B66_CR:
  3058:          bit        WD177x_STATUS
  3059:          bpl     L8B66_CR
  3060:          sta     WD177x_SECTOR
  3061:          lda     WD177x_STATUS
  3062:          ora     #$08
  3063:          sta     WD177x_COMMAND
  3064:          lda     #$4E
  3065:  L8B78:
  3066:          bit     WD177x_STATUS
  3067:          bpl     L8B78
  3068:          sta     WD177x_SECTOR
  3069:          lda     WD177x_STATUS
  3070:          and     #$EF
  3071:          sta     WD177x_COMMAND
  3072:          ldx     #$14
  3073:          lda     #$4E
  3074:  L8B8C:
  3075:          bit     WD177x_STATUS
  3076:          bpl     L8B8C
  3077:          sta     WD177x_SECTOR
  3078:  .else
  3079:          sta     WD177x_DATA
  3080:  .endif
  3081:  
  3082:          dex
  3083:  .if CompileDrive >= DRIVE_1571CR
  3084:          bne     L8B8C
  3085:  .else
  3086:          bne     L8B97
  3087:  .endif
  3088:  
  3089:          ldx     #$0C
  3090:  
  3091:  .if CompileDrive >= DRIVE_1571CR
  3092:  .else
  3093:  L8BAB:
  3094:          lda     WD177x_STATUS
  3095:          and     #$03
  3096:          lsr     a
  3097:  L8BB1:
  3098:          bcc     L8BEB
  3099:          beq     L8BAB
  3100:  .endif
  3101:          lda     #$00
  3102:  .if CompileDrive >= DRIVE_1571CR
  3103:  L8B9B:
  3104:          bit     WD177x_STATUS
  3105:          bpl     L8B9B
  3106:          sta     WD177x_SECTOR
  3107:  .else
  3108:          sta     WD177x_DATA
  3109:  .endif
  3110:          dex
  3111:  
  3112:  .if CompileDrive >= DRIVE_1571CR
  3113:          bne     L8B9B
  3114:          lda     CSG5710_4010 + 0
  3115:  L8BA9:
  3116:          bit     WD177x_STATUS
  3117:          bpl     L8BA9
  3118:          sta     WD177x_SECTOR
  3119:          lda     WD177x_STATUS
  3120:          ora     #$14
  3121:          sta     WD177x_COMMAND
  3122:          ldx     #$02
  3123:          lda     CSG5710_4010 + 0
  3124:  L8BBE:
  3125:          bit     WD177x_STATUS
  3126:          bpl     L8BBE
  3127:          sta     WD177x_SECTOR
  3128:  .else
  3129:          bne     L8BAB
  3130:          ldx     #$03
  3131:  L8BBF:
  3132:          lda     WD177x_STATUS
  3133:          and     #$03
  3134:          lsr     a
  3135:          bcc     L8BEB
  3136:          beq     L8BBF
  3137:          lda     #$F5
  3138:          sta     WD177x_DATA
  3139:  .endif
  3140:          dex
  3141:  
  3142:  .if CompileDrive >= DRIVE_1571CR
  3143:          bne     L8BBE
  3144:          lda     CSG5710_4010 + 4
  3145:  L8BCC:
  3146:          bit     WD177x_STATUS
  3147:          bpl     L8BCC
  3148:          sta     WD177x_SECTOR
  3149:  .else
  3150:          bne     L8BBF
  3151:  L8BD1:
  3152:          lda     WD177x_STATUS
  3153:          and     #$03
  3154:          lsr     a
  3155:          bcc     L8BEB
  3156:          beq     L8BD1
  3157:          lda     #$FB
  3158:          sta     WD177x_DATA
  3159:  .endif
  3160:          sty     T0
  3161:  
  3162:  .if CompileDrive >= DRIVE_1571CR
  3163:          lda     WD177x_STATUS
  3164:          and     #$FB
  3165:          sta     WD177x_COMMAND
  3166:  .endif
  3167:          ldy     WORK
  3168:  
  3169:  .if CompileDrive >= DRIVE_1571CR
  3170:  .else
  3171:          nop
  3172:  L8BE5:
  3173:          lda     WD177x_STATUS
  3174:          and     #$03
  3175:          lsr     a
  3176:  L8BEB:
  3177:          bcc     L8C4D
  3178:          beq     L8BE5
  3179:  .endif
  3180:  
  3181:          lda     CMDBUF + 10
  3182:  
  3183:  .if CompileDrive >= DRIVE_1571CR
  3184:  L8BE5:
  3185:          bit     WD177x_STATUS
  3186:          bpl     L8BE5
  3187:          sta     WD177x_SECTOR
  3188:  .else
  3189:          sta     WD177x_DATA
  3190:  .endif
  3191:          cpx     RLINDX
  3192:          beq     L8BFE
  3193:          inx
  3194:          jmp     L8BE5
  3195:  L8BFE:
  3196:          inx
  3197:          dey
  3198:  
  3199:  .if CompileDrive >= DRIVE_1571CR
  3200:          bne     L8BE5
  3201:  L8BF8:
  3202:          bit     WD177x_STATUS
  3203:          bpl     L8BF8
  3204:          sta     WD177x_SECTOR
  3205:          lda     WD177x_STATUS
  3206:          and     #$F7
  3207:          sta     WD177x_COMMAND
  3208:  L8C08:
  3209:          bit     WD177x_STATUS
  3210:          bpl     L8C08
  3211:          sta     WD177x_SECTOR
  3212:          lda     #$4E
  3213:  L8C12:
  3214:          bit     WD177x_STATUS
  3215:          bpl     L8C12
  3216:          sta     WD177x_SECTOR
  3217:          lda     WD177x_STATUS
  3218:          ora     #$08
  3219:          sta     WD177x_COMMAND
  3220:          lda     #$4E
  3221:  L8C24:
  3222:          bit     WD177x_STATUS
  3223:          bpl     L8C24
  3224:          sta     WD177x_SECTOR
  3225:          lda     WD177x_STATUS
  3226:          and     #$EF
  3227:          sta     WD177x_COMMAND
  3228:  .else
  3229:          bne     L8BE5
  3230:  L8C02:
  3231:          lda     WD177x_STATUS
  3232:          and     #$03
  3233:          lsr     a
  3234:          bcc     L8C4D
  3235:          beq     L8C02
  3236:          lda     #$F7
  3237:          sta     WD177x_DATA
  3238:  .endif
  3239:  
  3240:          ldy     CMDBUF + 5
  3241:          lda     L8C4F,y
  3242:          ldy     T0
  3243:          tax
  3244:  .if CompileDrive >= DRIVE_1571CR
  3245:          dex
  3246:  .else
  3247:  L8C1A:
  3248:          lda     WD177x_STATUS
  3249:          and     #$03
  3250:          lsr     a
  3251:          bcc     L8C4D
  3252:          beq     L8C1A
  3253:  .endif
  3254:          lda     #$4E
  3255:  .if CompileDrive >= DRIVE_1571CR
  3256:  L8C1A:
  3257:          bit     WD177x_STATUS
  3258:          bpl     L8C1A
  3259:          sta     WD177x_SECTOR
  3260:  .else
  3261:          sta     WD177x_DATA
  3262:  .endif
  3263:          dex
  3264:          bne     L8C1A
  3265:          cpy     CMDBUF + 7
  3266:  .if CompileDrive >= DRIVE_1571CR
  3267:  
  3268:          beq     L8C54
  3269:          iny
  3270:          jmp     L8AC8
  3271:  
  3272:  L8C54:
  3273:          bit     WD177x_STATUS
  3274:          bpl     L8C54
  3275:          sta     WD177x_SECTOR
  3276:          bit     WD177x_STATUS
  3277:          bvc     L8C67
  3278:          dey
  3279:          bne     L8C54
  3280:          dex
  3281:          bne     L8C54
  3282:  L8C67:
  3283:          lda     WD177x_STATUS
  3284:          and     #$DD
  3285:          sta     WD177x_COMMAND
  3286:          ldy     #$02
  3287:          jmp     L8829
  3288:  
  3289:  .else
  3290:  
  3291:          beq     L8C35
  3292:          iny
  3293:          jmp     L8B07
  3294:  L8C35:
  3295:          lda     WD177x_STATUS
  3296:          and     #$03
  3297:          lsr     a
  3298:          bcc     L8C48
  3299:          beq     L8C35
  3300:          clc
  3301:          lda     #$4E
  3302:          sta     WD177x_DATA
  3303:          jmp     L8C35
  3304:  L8C48:
  3305:          jsr     L8861
  3306:          clc
  3307:          .byte   ASM_BIT2
  3308:  L8C4D:
  3309:          sec
  3310:          rts
  3311:  .endif
  3312:  
  3313:  L8C4F:
  3314:          .byte   $07,$0C,$17,$2C
  3315:  L8C53:
  3316:          .byte   $1A,$10,$09,$05
  3317:  
  3318:  L8C57:
  3319:          lda     HINIB
  3320:          and     #$08
  3321:          beq     L8C64
  3322:          ldx     CTRACK
  3323:          stx     L01B0
  3324:          sec
  3325:          rts
  3326:  L8C64:
  3327:          jsr     LD307
  3328:          lda     CMDSIZ
  3329:          sec
  3330:          sbc     #$04
  3331:          tay
  3332:          beq     L8C90
  3333:          dey
  3334:          beq     L8C95
  3335:          lda     #$00
  3336:          sta     L01B0
  3337:          lda     CMDBUF + 5
  3338:          jsr     L8A57
  3339:          dey
  3340:          beq     L8CA2
  3341:          dey
  3342:          beq     L8CA7
  3343:          dey
  3344:          beq     L8CAD
  3345:          dey
  3346:          beq     L8CB5
  3347:          dey
  3348:          beq     L8CBA
  3349:          jmp     L8CBF
  3350:  L8C90:
  3351:          lda     #$00
  3352:          sta     CMDBUF + 4
  3353:  L8C95:
  3354:          lda     #$00
  3355:          sta     L01B0
  3356:          lda     #$01
  3357:          sta     CMDBUF + 5
  3358:          jsr     L8A57
  3359:  L8CA2:
  3360:          lda     #$27
  3361:          sta     CMDBUF + 6
  3362:  L8CA7:
  3363:          lda     L8C53,x
  3364:          sta     CMDBUF + 7
  3365:  L8CAD:
  3366:          lda     #$00
  3367:          sta     CMDBUF + 8
  3368:  .if CompileDrive >= DRIVE_1571CR
  3369:  .else
  3370:          sta     WD177x_TRACK
  3371:  .endif
  3372:  L8CB5:
  3373:          lda     #$00
  3374:          sta     CMDBUF + 9
  3375:  L8CBA:
  3376:          lda     #$E5
  3377:          sta     CMDBUF + 10
  3378:  L8CBF:
  3379:          jsr     L8CDE
  3380:          lda     L01B0
  3381:          cpx     #$02
  3382:          bcs     L8CDB
  3383:          lda     HINIB
  3384:          and     #$20
  3385:          beq     L8CDB
  3386:          lda     HINIB
  3387:          ora     #$10
  3388:          sta     HINIB
  3389:          jsr     L8954
  3390:          jsr     L8CDE
  3391:  L8CDB:
  3392:          jmp     L89EF
  3393:  L8CDE:
  3394:          jsr     L89B3
  3395:          bcs     L8D5F
  3396:  .if CompileDrive >= DRIVE_1571CR
  3397:  .else
  3398:          lda     #$01
  3399:          sta     VBC_IFR1
  3400:  .endif
  3401:          jsr     L89EF
  3402:          lda     CMDBUF + 8
  3403:          sta     L01B0
  3404:  .if CompileDrive >= DRIVE_1571CR
  3405:  .else
  3406:          sta     WD177x_TRACK
  3407:  .endif
  3408:          bit     CMDBUF + 3
  3409:          bvs     L8CFE
  3410:          jsr     L8888
  3411:          bcs     L8D5F
  3412:  L8CFE:
  3413:          lda     CMDBUF + 9
  3414:          and     #$7F
  3415:          beq     L8D0D
  3416:          clc
  3417:          adc     NMIFLG
  3418:          sta     NMIFLG
  3419:          jsr     L87BA
  3420:  L8D0D:
  3421:          sei                                     ; disallow interrupts --> blocking job loop
  3422:  .if CompileDrive >= DRIVE_1571CR
  3423:          jsr     L8A86
  3424:          jsr     L88F0
  3425:          bcs     L8D5F
  3426:  .else
  3427:          lda     VBC_IFR1
  3428:          lsr     a
  3429:          bcs     L8D5F
  3430:          jsr     L8A86
  3431:          bcs     L8D5F
  3432:          lda     VBC_IFR1
  3433:          lsr     a
  3434:          bcs     L8D5F
  3435:          jsr     L88F0
  3436:          bcs     L8D5F
  3437:          lda     VBC_IFR1
  3438:          lsr     a
  3439:          bcs     L8D5F
  3440:  .endif
  3441:          lda     L01B0
  3442:          cmp     CMDBUF + 6
  3443:          beq     L8D40
  3444:          inc     NMIFLG
  3445:  .if CompileDrive >= DRIVE_1571CR
  3446:  .else
  3447:          inc     WD177x_TRACK
  3448:  .endif
  3449:          inc     L01B0
  3450:          jsr     L87BA
  3451:          jmp     L8D0D
  3452:  L8D40:
  3453:          bit     HINIB
  3454:          bpl     L8D5C
  3455:          sec
  3456:          lda     CMDBUF + 6
  3457:          sbc     CMDBUF + 8
  3458:          cmp     #$27
  3459:          bcs     L8D5C
  3460:          inc     NMIFLG
  3461:          jsr     L87BA
  3462:          ldx     #$1C
  3463:  .if CompileDrive >= DRIVE_1571_05
  3464:          jsr     LC07F
  3465:          FillNOP 3
  3466:  .else
  3467:          jsr     L9D63
  3468:          jsr     LFE00
  3469:  .endif
  3470:  L8D5C:
  3471:          ldx     #$00
  3472:          .byte   ASM_BIT3
  3473:  L8D5F:
  3474:          ldx     #$06
  3475:          stx     L01B0
  3476:          jmp     L85E9
  3477:  L8D67:
  3478:          lda     HINIB
  3479:          and     #$20
  3480:          bne     L8DC6
  3481:  .if CompileDrive >= DRIVE_1571CR
  3482:          lda     REVCNT
  3483:          asl     a
  3484:          sta     TMP
  3485:  L8D75:
  3486:          jsr     L8EC6
  3487:          jsr     LAC9C
  3488:          bcs     L8DD1
  3489:          jsr     LAC38
  3490:          bcs     L8DC8
  3491:  .else
  3492:          lda     #$03
  3493:          sta     BUFPNT + 1
  3494:  .endif
  3495:          ldy     #$00
  3496:  .if CompileDrive >= DRIVE_1571CR
  3497:  .else
  3498:          sty     BUFPNT
  3499:  .endif
  3500:          ldx     WORK
  3501:  .if CompileDrive >= DRIVE_1571CR
  3502:  L8D89:
  3503:          bit     WD177x_TRACK
  3504:          bpl     L8D89
  3505:          lda     WD177x_SECTOR
  3506:  .else
  3507:          lda     CMDBUF + 3
  3508:          sta     WD177x_TRACK
  3509:          lda     CMDBUF + 4
  3510:          sta     WD177x_SECTOR
  3511:          lda     #$88
  3512:          jsr     L884E
  3513:          nop
  3514:  L8D89:
  3515:          lda     WD177x_STATUS
  3516:          and     #$03
  3517:          lsr     a
  3518:          bcc     L8DAB
  3519:          and     #$01
  3520:          beq     L8D89
  3521:          lda     WD177x_DATA
  3522:  .endif
  3523:          sta     (BUFPNT),y
  3524:          cpy     RLINDX
  3525:          beq     L8DA2
  3526:          iny
  3527:          bne     L8D89
  3528:  L8DA2:
  3529:          iny
  3530:          dex
  3531:          beq     L8DAB
  3532:          inc     BUFPNT + 1
  3533:          jmp     L8D89
  3534:  
  3535:  .if CompileDrive >= DRIVE_1571CR
  3536:  L8DAB:
  3537:          bit     WD177x_TRACK
  3538:          bpl     L8DAB
  3539:          lda     WD177x_SECTOR
  3540:  L8DA9:
  3541:          bit     WD177x_TRACK
  3542:          bpl     L8DA9
  3543:          lda     WD177x_SECTOR
  3544:          lda     #$18
  3545:          sta     WD177x_TRACK
  3546:  L8DB6:
  3547:          bit     WD177x_TRACK
  3548:          bpl     L8DB6
  3549:          lda     WD177x_SECTOR
  3550:          lda     WD177x_TRACK
  3551:          and     #$20
  3552:          beq     L8DCF
  3553:          ldx     #$05
  3554:          .byte   ASM_BIT3
  3555:  L8DC8:
  3556:          ldx     #$03
  3557:          dec     TMP
  3558:          bne     L8D75
  3559:          .byte   ASM_BIT3
  3560:  L8DCF:
  3561:          ldx     #$00
  3562:  L8DD1:
  3563:          jsr     L85E9
  3564:  
  3565:  .else
  3566:  
  3567:  L8DAB:
  3568:          jsr     L8861
  3569:          jsr     L883C
  3570:          jsr     L85E9
  3571:          bit     HINIB
  3572:          bvs     L8DBF
  3573:  .endif
  3574:          cpx     #$02
  3575:          bcc     L8DBF
  3576:  .if CompileDrive >= DRIVE_1571CR
  3577:          bit     HINIB
  3578:          bvs     L8DBF
  3579:  .endif
  3580:          jmp     L8384
  3581:  L8DBF:
  3582:          jsr     L85F9
  3583:          lda     HINIB
  3584:  
  3585:  .if CompileDrive >= DRIVE_1571CR
  3586:          bmi     L8DE8
  3587:  L8DC6:
  3588:          jsr     L8EC6
  3589:  .else
  3590:          bmi     L8DE8
  3591:  L8DC6:
  3592:          lda     #$03
  3593:          sta     BUFPNT + 1
  3594:          ldy     #$00
  3595:          sty     BUFPNT
  3596:          ldx     WORK
  3597:  .endif
  3598:  L8DD0:
  3599:          lda     (BUFPNT),y
  3600:          sta     CTRACK
  3601:          jsr     L85F9
  3602:          cpy     RLINDX
  3603:          beq     L8DDF
  3604:          iny
  3605:          bne     L8DD0
  3606:  L8DDF:
  3607:          iny
  3608:          dex
  3609:          beq     L8DE8
  3610:          inc     BUFPNT + 1
  3611:          jmp     L8DD0
  3612:  L8DE8:
  3613:          dec     CMDBUF + 5
  3614:          beq     L8DF3
  3615:          jsr     L886C
  3616:          jmp     L8D67
  3617:  L8DF3:
  3618:          jmp     L891B
  3619:  L8DF6:
  3620:  .if CompileDrive >= DRIVE_1571CR
  3621:          jsr     L8EC6
  3622:  .else
  3623:          lda     #$03
  3624:          sta     BUFPNT + 1
  3625:          ldy     #$00
  3626:          sty     BUFPNT
  3627:          ldx     WORK
  3628:  .endif
  3629:          lda     HINIB
  3630:          bmi     L8E34
  3631:  L8E04:
  3632:          lda     VBC_PB1
  3633:          eor     #VBC_PB1_1540_CLOCKOUT
  3634:          bit     CIA_ICR
  3635:          sta     VBC_PB1
  3636:  L8E0F:
  3637:          lda     VBC_PB1
  3638:          bpl     L8E17
  3639:          jsr     TestATN
  3640:  L8E17:
  3641:          lda     CIA_ICR
  3642:          and     #CIA_ICR_B_SP
  3643:          beq     L8E0F
  3644:          lda     CIA_SDR
  3645:          sta     (BUFPNT),y
  3646:          cpy     RLINDX
  3647:          beq     L8E2B
  3648:          iny
  3649:          bne     L8E04
  3650:  L8E2B:
  3651:          iny
  3652:          dex
  3653:          beq     L8E34
  3654:          inc     BUFPNT + 1
  3655:          jmp     L8E04
  3656:  L8E34:
  3657:          lda     HINIB
  3658:          and     #$20
  3659:  
  3660:  .if CompileDrive >= DRIVE_1571CR
  3661:          beq     L8E4F
  3662:          jmp     L8EB7
  3663:  L8E4F:
  3664:  .else
  3665:          bne     L8EB7
  3666:  .endif
  3667:          lda     HINIB
  3668:          and     #$08
  3669:          beq     L8E45
  3670:          ldx     CTRACK
  3671:          jmp     L8381
  3672:  L8E45:
  3673:  .if CompileDrive >= DRIVE_1571CR
  3674:          jsr     L8EC6
  3675:          jsr     LAC9C
  3676:          bcc     L8E65
  3677:          jmp     L8F41
  3678:  L8E65:
  3679:          jsr     LACB9
  3680:          bit     L01B4
  3681:          bmi     L8E70
  3682:          lda     #$28
  3683:          .byte   ASM_BIT3
  3684:  L8E70:
  3685:          lda     #$29
  3686:          sta     WD177x_COMMAND
  3687:          lda     #$00
  3688:          sta     WD177x_SECTOR
  3689:          lda     WD177x_STATUS
  3690:          ora     #$02
  3691:          sta     WD177x_COMMAND
  3692:          ldx     #$0C
  3693:  L8E84:
  3694:          lda     #$00
  3695:  L8E86:
  3696:          bit     WD177x_STATUS
  3697:          bpl     L8E86
  3698:          sta     WD177x_SECTOR
  3699:          dex
  3700:          bne     L8E84
  3701:          lda     CSG5710_4010 + 0
  3702:  L8E94:
  3703:          bit     WD177x_STATUS
  3704:          bpl     L8E94
  3705:          sta     WD177x_SECTOR
  3706:          lda     WD177x_STATUS
  3707:          ora     #$14
  3708:          sta     WD177x_COMMAND
  3709:          lda     WD177x_TRACK
  3710:          and     #$F8
  3711:          ora     CSG5710_4010 + 2
  3712:          sta     WD177x_TRACK
  3713:          ldx     #$02
  3714:          lda     CSG5710_4010 + 0
  3715:  L8EB4:
  3716:          bit     WD177x_STATUS
  3717:          bpl     L8EB4
  3718:          sta     WD177x_SECTOR
  3719:          dex
  3720:          bne     L8EB4
  3721:          lda     CSG5710_4010 + 4
  3722:  L8EC2_CR:
  3723:          bit        WD177x_STATUS
  3724:          bpl     L8EC2_CR
  3725:          sta     WD177x_SECTOR
  3726:          lda     WD177x_STATUS
  3727:          and     #$FB
  3728:          sta     WD177x_COMMAND
  3729:  .else
  3730:          lda     #$03
  3731:          sta     BUFPNT + 1
  3732:  .endif
  3733:          ldy     #$00
  3734:  .if CompileDrive >= DRIVE_1571CR
  3735:  .else
  3736:          sty     BUFPNT
  3737:  .endif
  3738:          ldx     WORK
  3739:  .if CompileDrive >= DRIVE_1571CR
  3740:  L8E66:
  3741:          lda     (BUFPNT),y
  3742:  L8ED8:
  3743:          bit     WD177x_STATUS
  3744:          bpl     L8ED8
  3745:  .else
  3746:          lda     CMDBUF + 3
  3747:          sta     WD177x_TRACK
  3748:          lda     CMDBUF + 4
  3749:  .endif
  3750:          sta     WD177x_SECTOR
  3751:  
  3752:  .if CompileDrive >= DRIVE_1571CR
  3753:  .else
  3754:          lda     VBC_IFR1
  3755:          lsr     a
  3756:          bcs     L8E93
  3757:          lda     #$A8
  3758:          jsr     L884E
  3759:  L8E66:
  3760:          lda     WD177x_STATUS
  3761:          and     #$03
  3762:          lsr     a
  3763:          bcc     L8E93
  3764:          and     #$01
  3765:          beq     L8E66
  3766:          lda     (BUFPNT),y
  3767:          sta     WD177x_DATA
  3768:  .endif
  3769:  
  3770:          cpy     RLINDX
  3771:          beq     L8E7F
  3772:          iny
  3773:          bne     L8E66
  3774:  L8E7F:
  3775:          iny
  3776:          dex
  3777:          beq     L8E88
  3778:          inc     BUFPNT + 1
  3779:          jmp     L8E66
  3780:  .if CompileDrive >= DRIVE_1571CR
  3781:  L8E88:
  3782:          bit     WD177x_STATUS
  3783:          bpl     L8E88
  3784:          sta     WD177x_SECTOR
  3785:          lda     WD177x_STATUS
  3786:          and     #$F7
  3787:          sta     WD177x_COMMAND
  3788:  L8F01:
  3789:          bit     WD177x_STATUS
  3790:          bpl     L8F01
  3791:          sta     WD177x_SECTOR
  3792:  L8F09:
  3793:          bit     WD177x_STATUS
  3794:          bpl     L8F09
  3795:          sta     WD177x_SECTOR
  3796:  L8F11:
  3797:          bit     WD177x_STATUS
  3798:          bpl     L8F11
  3799:          sta     WD177x_SECTOR
  3800:          lda     WD177x_STATUS
  3801:          and     #$EF
  3802:          sta     WD177x_COMMAND
  3803:  L8F21:
  3804:          bit     WD177x_STATUS
  3805:          bpl     L8F21
  3806:          sta     WD177x_SECTOR
  3807:          lda     WD177x_STATUS
  3808:          and     #$CD
  3809:          sta     WD177x_COMMAND
  3810:          ldy     #$02
  3811:          jsr     L8829
  3812:          ldx     #$00
  3813:          bit     L01B4
  3814:          bvs     L8F43_CR
  3815:          jsr     LACC7
  3816:          .byte   ASM_BIT3
  3817:  L8F41:
  3818:          ldx     #$07
  3819:  L8F43_CR:
  3820:          stx        L01B0
  3821:          jsr     L81CE
  3822:  .else
  3823:  L8E88:
  3824:          lda     VBC_IFR1
  3825:          lsr     a
  3826:          bcs     L8E93
  3827:   .if CompileDrive >= DRIVE_1571_05
  3828:          jsr     PATCH_INIT_CSG5710
  3829:   .else
  3830:          jsr     L8EC6
  3831:   .endif
  3832:          bcc     L8E9A
  3833:  L8E93:
  3834:          jsr     L81CE
  3835:          ldx     #$07
  3836:          bne     L8EA0
  3837:  L8E9A:
  3838:          jsr     L81CE
  3839:          jsr     L883C
  3840:  L8EA0:
  3841:          stx     L01B0
  3842:  .endif
  3843:          jsr     L85E9
  3844:          jsr     L85F9
  3845:          jsr     L86A0
  3846:          jsr     L81B2
  3847:          bit     HINIB
  3848:          bvs     L8EB7
  3849:          cpx     #$02
  3850:          bcs     L8EC5
  3851:  L8EB7:
  3852:          dec     CMDBUF + 5
  3853:          beq     L8EC2
  3854:          jsr     L886C
  3855:          jmp     L8DF6
  3856:  L8EC2:
  3857:          jmp     L891B
  3858:  L8EC5:
  3859:          rts
  3860:  L8EC6:
  3861:          lda     #$03
  3862:          sta     BUFPNT + 1
  3863:          ldy     #$00
  3864:          sty     BUFPNT
  3865:  .if CompileDrive >= DRIVE_1571CR
  3866:  .else
  3867:          ldx     WORK
  3868:  .endif
  3869:          lda     CMDBUF + 3
  3870:  .if CompileDrive >= DRIVE_1571CR
  3871:          sta     NMIFLG
  3872:  .else
  3873:          sta     WD177x_TRACK
  3874:  .endif
  3875:          lda     CMDBUF + 4
  3876:  
  3877:  .if CompileDrive >= DRIVE_1571CR
  3878:          sta     SECTR
  3879:          eor     #$FF
  3880:          sta     STAB + 2
  3881:  .else
  3882:          sta     WD177x_SECTOR
  3883:          lda     #$88
  3884:          jsr     L884E
  3885:  L8EE1:
  3886:          lda     WD177x_STATUS
  3887:          and     #$03
  3888:          lsr     a
  3889:          bcc     L8F05
  3890:          and     #$01
  3891:          beq     L8EE1
  3892:          lda     WD177x_DATA
  3893:          cmp     (BUFPNT),y
  3894:          bne     L8F05
  3895:          cpy     RLINDX
  3896:          beq     L8EFC
  3897:          iny
  3898:          bne     L8EE1
  3899:  L8EFC:
  3900:          iny
  3901:          dex
  3902:          beq     L8F10
  3903:          inc     BUFPNT + 1
  3904:          jmp     L8EE1
  3905:  L8F05:
  3906:          lda     #$D0
  3907:          sta     WD177x_COMMAND
  3908:          jsr     LA483
  3909:          ldx     #$07
  3910:          .byte   ASM_BIT3
  3911:  L8F10:
  3912:          ldx     #$00
  3913:          stx     L01B0
  3914:          jmp     L8861
  3915:  L8F18:
  3916:          lda     #$03
  3917:          sta     BUFPNT + 1
  3918:          ldy     #$00
  3919:          sty     BUFPNT
  3920:  .endif
  3921:  
  3922:          ldx     WORK
  3923:  
  3924:  .if CompileDrive >= DRIVE_1571CR
  3925:  .else
  3926:   .if CompileDrive >= DRIVE_1571_05
  3927:   .else
  3928:          ldy     RLINDX
  3929:   .endif
  3930:          lda     #$88
  3931:          jsr     L884E
  3932:  L8F2A:
  3933:          lda     WD177x_STATUS
  3934:          and     #$03
  3935:          lsr     a
  3936:          bcc     L8F4C
  3937:          and     #$01
  3938:          beq     L8F2A
  3939:          lda     WD177x_DATA
  3940:          cmp     CMDBUF + 10
  3941:          bne     L8F4C
  3942:   .if CompileDrive >= DRIVE_1571_05
  3943:          cpy     RLINDX
  3944:          beq     L8F43
  3945:          iny
  3946:          bne     L8F2A
  3947:  L8F43:
  3948:          iny
  3949:   .else
  3950:          dey
  3951:          bpl     L8F2A
  3952:   .endif
  3953:          dex
  3954:          beq     L8F57
  3955:   .if CompileDrive >= DRIVE_1571_05
  3956:   .else
  3957:          ldy     RLINDX
  3958:   .endif
  3959:          inc     BUFPNT + 1
  3960:          jmp     L8F2A
  3961:  L8F4C:
  3962:          lda     #$D0
  3963:          sta     WD177x_COMMAND
  3964:          jsr     LA483
  3965:          ldx     #$07
  3966:          .byte   ASM_BIT3
  3967:  L8F57:
  3968:          ldx     #$00
  3969:          stx     L01B0
  3970:          jmp     L8861
  3971:  L8F5F:
  3972:          php
  3973:          sei                                     ; disallow interrupts --> blocking job loop
  3974:          jsr     L89EF
  3975:          bit     HINIB
  3976:          bpl     L8F70
  3977:          lda     CMDBUF + 3
  3978:          sta     NMIFLG
  3979:          jsr     L87BA
  3980:  L8F70:
  3981:          lda     #$00
  3982:          sta     MYPA
  3983:          jsr     L8A27
  3984:          ldx     L01B0
  3985:          cpx     #$02
  3986:          bcs     L8F9D
  3987:          lda     STAB + 2
  3988:          sta     ICMD
  3989:  L8F82:
  3990:          jsr     L8A27
  3991:          lda     STAB + 2
  3992:          ldy     MYPA
  3993:          sta     CMDBUF + 11,y
  3994:          inc     MYPA
  3995:          cpy     #$1F
  3996:          bcs     L8F9D
  3997:          cmp     ICMD
  3998:          bne     L8F82
  3999:          lda     STAB
  4000:          sta     NMIFLG
  4001:          ldx     #$00
  4002:          .byte   ASM_BIT3
  4003:  L8F9D:
  4004:          ldx     #$02
  4005:          stx     L01B0
  4006:          plp
  4007:  .endif
  4008:          rts
  4009:  
  4010:          FillUntil $8FA4
  4011:  
  4012:  L8FA4:
  4013:          lda     CMDBUF + 4
  4014:          sta     SECINC
  4015:          rts
  4016:  L8FAA:
  4017:          lda     CMDBUF + 4
  4018:          sta     REVCNT
  4019:          rts
  4020:  L8FB0:
  4021:          jmp     L924E
  4022:  L8FB3:
  4023:          sei                                     ; disallow interrupts --> blocking job loop
  4024:          lda     VBC_PAUNBUF1
  4025:          and     #VBC_PA1_20
  4026:          bne     L9021
  4027:          lda     CMDBUF + 4
  4028:          cmp     #$31
  4029:          beq     L8FD4
  4030:          cmp     #$30
  4031:          bne     L9021
  4032:          lda     VBC_PAUNBUF1
  4033:          and     # ~ VBC_PA1_04
  4034:          sta     VBC_PAUNBUF1
  4035:          cli                                     ; allow processing of job loop
  4036:          bit     HINIB
  4037:          bpl     L8FE1
  4038:          rts
  4039:  L8FD4:
  4040:  .if CompileDrive >= DRIVE_1571
  4041:          lda     VBC_PAUNBUF1
  4042:  .else
  4043:          jmp     L9021
  4044:  .endif
  4045:          ora     #VBC_PA1_04
  4046:          sta     VBC_PAUNBUF1
  4047:          cli                                     ; allow processing of job loop
  4048:          bit     HINIB
  4049:          bmi     L8FE4
  4050:  L8FE1:
  4051:          jmp     LD042
  4052:  L8FE4:
  4053:          rts
  4054:  L8FE5:
  4055:          ldx     CMDSIZ
  4056:          cpx     #$04
  4057:          bcc     L9021
  4058:          lda     CMDBUF + 3
  4059:          cmp     #$53
  4060:          beq     L8FA4
  4061:          cmp     #$52
  4062:          beq     L8FAA
  4063:          cmp     #$54
  4064:          beq     L8FB0
  4065:          cmp     #$4D
  4066:          beq     L9026
  4067:          cmp     #$48
  4068:          beq     L8FB3
  4069:  .if CompileDrive >= DRIVE_1571CR
  4070:          jmp     LABA7
  4071:  .elseif CompileDrive >= DRIVE_1571_05
  4072:          jmp     LAA86
  4073:  .else
  4074:          tay
  4075:          cpy     #$04
  4076:  .endif
  4077:  L9006:
  4078:          bcc     L9021
  4079:          cpy     #$1F
  4080:          bcs     L9021
  4081:          lda     #$40
  4082:          sta     TLKADR
  4083:          lda     #$20
  4084:          sta     LSNADR
  4085:          tya
  4086:          clc
  4087:          adc     TLKADR
  4088:          sta     TLKADR
  4089:          tya
  4090:          clc
  4091:          adc     LSNADR
  4092:          sta     LSNADR
  4093:          rts
  4094:  L9021:
  4095:          lda     #ERRORCODE_31_SYNTAX_ERROR
  4096:          jmp     GenerateErrorMessage
  4097:          ; ------------
  4098:  
  4099:  L9026:
  4100:          sei                                     ; disallow interrupts --> blocking job loop
  4101:          lda     CMDBUF + 4
  4102:          cmp     #$31
  4103:          beq     L904E
  4104:          cmp     #$30
  4105:          bne     L9021
  4106:          lda     VBC_PAUNBUF1
  4107:          and     # ~ VBC_PA1_20
  4108:          sta     VBC_PAUNBUF1
  4109:          jsr     LA483
  4110:          jsr     LFF82
  4111:          lda     FLGMODE1570
  4112:          ora     #$80
  4113:          sta     FLGMODE1570
  4114:          cli                                     ; allow processing of job loop
  4115:          bit     HINIB
  4116:          bpl     L907C
  4117:          rts
  4118:  L904E:
  4119:          lda     VBC_PAUNBUF1
  4120:          ora     #VBC_PA1_20
  4121:          sta     VBC_PAUNBUF1
  4122:          jsr     LA483
  4123:          lda     #$DE
  4124:          sta     VIRQJOB1570
  4125:          lda     #$9D
  4126:          sta     VIRQJOB1570 + 1
  4127:          lda     #$40
  4128:          sta     VDC_T1HL2
  4129:          sta     VDC_T1HC2
  4130:          lda     FLGMODE1570
  4131:          and     #$7F
  4132:          sta     FLGMODE1570
  4133:          lda     #$00
  4134:          sta     NXTST
  4135:          cli                                     ; allow processing of job loop
  4136:          bit     HINIB
  4137:          bmi     L907F
  4138:  L907C:
  4139:          jmp     LD042
  4140:  L907F:
  4141:          rts
  4142:  L9080:
  4143:          jsr     L81CE
  4144:          jsr     L91EA
  4145:          bcs     L90E7
  4146:          jsr     LC63D
  4147:          lda     NODRV
  4148:          bne     L90E7
  4149:          lda     BITCNT
  4150:          ora     #$81
  4151:          sta     BITCNT
  4152:          jsr     L91CA
  4153:          lda     CMDBUF
  4154:          cmp     #$2A
  4155:          bne     L90AE
  4156:          lda     PRGTRK
  4157:          beq     L90AE
  4158:          pha
  4159:          lda     PRGSEC
  4160:          sta     FILSEC
  4161:          pla
  4162:          jmp     L90EC
  4163:  L90AE:
  4164:          lda     #$00
  4165:          tay
  4166:          tax
  4167:          sta     LSTDRV
  4168:          sta     FILTBL
  4169:          jsr     LC312
  4170:          lda     F2CNT
  4171:          pha
  4172:          lda     #$01
  4173:          sta     F2CNT
  4174:          lda     #$FF
  4175:          sta     R0
  4176:          jsr     LC44F
  4177:          pla
  4178:          sta     F2CNT
  4179:          lda     BITCNT
  4180:          and     #$7F
  4181:          sta     BITCNT
  4182:          bit     HINIB
  4183:          bmi     L90DF
  4184:  .if CompileDrive >= DRIVE_1571_05
  4185:          jsr     LAA5B
  4186:          FillNOP 1
  4187:  .elseif CompileDrive >= DRIVE_1571
  4188:          lda     PATTYP
  4189:          cmp     #$02
  4190:  .else
  4191:          jsr     LAA5B
  4192:          FillNOP 1
  4193:  .endif
  4194:          bne     L90E4
  4195:  L90DF:
  4196:          lda     FILTRK
  4197:          bne     L90EC
  4198:  L90E4:
  4199:          ldx     #$02
  4200:          .byte   ASM_BIT3
  4201:  L90E7:
  4202:          ldx     #$0F
  4203:          jmp     L91AD
  4204:  L90EC:
  4205:          sta     PRGTRK
  4206:          pha
  4207:          jsr     L91DA
  4208:          pla
  4209:          ldx     L02B0
  4210:          sta     TRACK0,x
  4211:          lda     FILSEC
  4212:          sta     PRGSEC
  4213:          sta     SECTOR0,x
  4214:          lda     #$80
  4215:          sta     CMDBUF + 2
  4216:          sta     AF
  4217:  L9107:
  4218:          cli                                     ; allow processing of job loop
  4219:          ldx     JOBNUM
  4220:          lda     AF
  4221:          sta     JOBS0,x
  4222:          jsr     L864B
  4223:          cpx     #$02
  4224:          bcc     L9118
  4225:          jmp     L9199
  4226:  L9118:
  4227:          sei                                     ; disallow interrupts --> blocking job loop
  4228:          ldy     #$00
  4229:          lda     (DIRBUF),y
  4230:          beq     L914E
  4231:          lda     BITCNT
  4232:          and     #$FE
  4233:          sta     BITCNT
  4234:          jsr     L9228
  4235:          ldy     #$02
  4236:  L912A:
  4237:          lda     (DIRBUF),y
  4238:          tax
  4239:          jsr     L9228
  4240:          iny
  4241:          bne     L912A
  4242:          ldx     L02B0
  4243:          lda     (DIRBUF),y
  4244:          cmp     TRACK0,x
  4245:          beq     L913F
  4246:          ldy     #$80
  4247:          .byte   ASM_BIT3
  4248:  L913F:
  4249:          ldy     #$88
  4250:          sty     AF
  4251:          sta     TRACK0,x
  4252:          ldy     #$01
  4253:          lda     (DIRBUF),y
  4254:          sta     SECTOR0,x
  4255:          jmp     L9107
  4256:  L914E:
  4257:          ldx     #$1F
  4258:          jsr     L9228
  4259:          lda     #$01
  4260:          bit     BITCNT
  4261:          beq     L9177
  4262:          tay
  4263:          lda     (DIRBUF),y
  4264:          sec
  4265:          sbc     #$03
  4266:          sta     CTRACK
  4267:          tax
  4268:          jsr     L9228
  4269:          iny
  4270:          lda     (DIRBUF),y
  4271:          tax
  4272:          jsr     L9228
  4273:          iny
  4274:          lda     (DIRBUF),y
  4275:          tax
  4276:          jsr     L9228
  4277:          ldy     #$04
  4278:          bne     L9184
  4279:  L9177:
  4280:          ldy     #$01
  4281:          lda     (DIRBUF),y
  4282:          tax
  4283:          dex
  4284:          stx     CTRACK
  4285:          jsr     L9228
  4286:          ldy     #$02
  4287:  L9184:
  4288:          lda     (DIRBUF),y
  4289:          tax
  4290:          jsr     L9228
  4291:          iny
  4292:          dec     CTRACK
  4293:          bne     L9184
  4294:          lda     #$00
  4295:          sta     SA
  4296:          jsr     LDAC0
  4297:          jmp     CommandEnd
  4298:  L9199:
  4299:          sei                                     ; disallow interrupts --> blocking job loop
  4300:          stx     CTRACK
  4301:          jsr     L9228
  4302:          lda     #$00
  4303:          sta     SA
  4304:          jsr     LDAC0
  4305:          ldx     JOBNUM
  4306:          lda     CTRACK
  4307:          jmp     LE60A
  4308:  L91AD:
  4309:          sei                                     ; disallow interrupts --> blocking job loop
  4310:          stx     CTRACK
  4311:          ldx     #$02
  4312:          jsr     L9228
  4313:          lda     #$00
  4314:          sta     SA
  4315:          jsr     LDAC0
  4316:          lda     CTRACK
  4317:          cmp     #$02
  4318:          beq     L91C5
  4319:          lda     #$74
  4320:          .byte   ASM_BIT3
  4321:  L91C5:
  4322:          lda     #ERRORCODE_62_FILE_NOT_FOUND
  4323:          jmp     GenerateErrorMessage
  4324:          ; -------------
  4325:  
  4326:  L91CA:
  4327:          lda     #$00
  4328:          sta     SA
  4329:          lda     #$01
  4330:          jsr     LD1E2
  4331:          tax
  4332:          lda     TableHighBytesOfBuffers,x
  4333:          sta     DIRBUF + 1
  4334:          rts
  4335:  L91DA:
  4336:          lda     DIRBUF + 1
  4337:          sec
  4338:          sbc     #$03
  4339:          sta     JOBNUM
  4340:          asl     a
  4341:          sta     L02B0
  4342:          lda     #$00
  4343:          sta     DIRBUF
  4344:          rts
  4345:  L91EA:
  4346:          ldy     #$03
  4347:          lda     CMDSIZ
  4348:          sec
  4349:          sbc     #$03
  4350:          sta     CMDSIZ
  4351:          lda     CMDBUF + 4
  4352:          cmp     #$3A
  4353:          bne     L920A
  4354:          lda     CMDBUF + 3
  4355:          tax
  4356:          and     #$30
  4357:          cmp     #$30
  4358:          bne     L920A
  4359:          cpx     #$31
  4360:          beq     L9226
  4361:  L920A:
  4362:          lda     CMDBUF + 3
  4363:          cmp     #$3A
  4364:          bne     L9215
  4365:          dec     CMDSIZ
  4366:          iny
  4367:  L9215:
  4368:          ldx     #$00
  4369:  L9217:
  4370:          lda     CMDBUF,y
  4371:          sta     CMDBUF,x
  4372:          iny
  4373:          inx
  4374:          cpx     CMDSIZ
  4375:          bne     L9217
  4376:          clc
  4377:          .byte   ASM_BIT2
  4378:  L9226:
  4379:          sec
  4380:          rts
  4381:  L9228:
  4382:          lda     VBC_PB1
  4383:          cmp     VBC_PB1
  4384:          bne     L9228
  4385:          and     #$FF
  4386:          bmi     L924B
  4387:          eor     BITCNT
  4388:          and     #$04    ; VBC_PB1_1540_CLOCKIN?
  4389:          beq     L9228
  4390:          stx     CIA_SDR
  4391:          lda     BITCNT
  4392:          eor     #$04
  4393:          sta     BITCNT
  4394:          lda     #CIA_ICR_B_SP
  4395:  L9245:
  4396:          bit     CIA_ICR
  4397:          beq     L9245
  4398:          rts
  4399:  
  4400:  L924B:
  4401:          jmp     ProcessBus1570
  4402:  
  4403:  L924E:
  4404:          php
  4405:          sei                                     ; disallow interrupts --> blocking job loop
  4406:          ldx     #$00
  4407:          stx     JOBS0
  4408:          stx     JOBS1
  4409:          lda     #$03
  4410:          sta     IP
  4411:          tay
  4412:          lda     #$80
  4413:          sta     IP + 1
  4414:  L925F:
  4415:          lda     (IP),y
  4416:          sta     JOBS2
  4417:          ldx     #$08
  4418:  L9265:
  4419:          lda     JOBS2
  4420:          and     #$01
  4421:          sta     JOBS3
  4422:          lda     JOBS1
  4423:          bpl     L9271
  4424:          inc     JOBS3
  4425:  L9271:
  4426:          ror     a
  4427:          bcc     L9276
  4428:          inc     JOBS3
  4429:  L9276:
  4430:          ror     a
  4431:          ror     a
  4432:          ror     a
  4433:          bcc     L927D
  4434:          inc     JOBS3
  4435:  L927D:
  4436:          lda     JOBS0
  4437:          rol     a
  4438:          rol     a
  4439:          bcc     L9285
  4440:          inc     JOBS3
  4441:  L9285:
  4442:          ror     JOBS3
  4443:          rol     JOBS0
  4444:          rol     JOBS1
  4445:          ror     JOBS2
  4446:          dex
  4447:          bne     L9265
  4448:          inc     IP
  4449:          bne     L925F
  4450:          inc     IP + 1
  4451:          bne     L925F
  4452:          dey
  4453:          dey
  4454:          dey
  4455:          lda     JOBS0
  4456:          cmp     L8000
  4457:          bne     L92B3
  4458:          lda     JOBS1
  4459:          cmp     L8001
  4460:          bne     L92B3
  4461:          sty     JOBS0
  4462:          sty     JOBS1
  4463:          sty     JOBS2
  4464:          sty     JOBS3
  4465:          plp
  4466:          rts
  4467:  L92B3:
  4468:          ldx     #$03
  4469:          stx     T0
  4470:          jmp     PostFailError
  4471:  L92BA:
  4472:          tsx
  4473:          stx     SAVSP
  4474:          bit     VDC_T1LC2
  4475:          lda     VDC_PCR2
  4476:          ora     #$0E
  4477:          sta     VDC_PCR2
  4478:  L92C8:
  4479:          ldy     #$05
  4480:  L92CA:
  4481:          lda     JOBS0,y
  4482:          bmi     L92D5
  4483:          dey
  4484:          bpl     L92CA
  4485:          jmp     L99CA
  4486:  L92D5:
  4487:          cmp     #$88
  4488:          bne     L92DC
  4489:          jmp     L960D
  4490:  L92DC:
  4491:          cmp     #$D0
  4492:          bne     L92E3
  4493:          jmp     L93A2
  4494:  L92E3:
  4495:          and     #$01
  4496:          beq     L92EE
  4497:          sty     JOBN
  4498:          lda     #$0F
  4499:          jmp     L99B5
  4500:  L92EE:
  4501:          tax
  4502:          cmp     CDRIVE
  4503:          beq     L92FB
  4504:          sta     CDRIVE
  4505:          jsr     LF97E
  4506:          jmp     L99CA
  4507:  L92FB:
  4508:          lda     DRVST
  4509:          bmi     L9302
  4510:          asl     a
  4511:          bpl     L9305
  4512:  L9302:
  4513:          jmp     L99CA
  4514:  L9305:
  4515:          lda     #$20
  4516:          sta     DRVST
  4517:          ldy     #$05
  4518:          sty     JOBN
  4519:  L930D:
  4520:          jsr     L93D1
  4521:          bmi     L932C
  4522:  L9312:
  4523:          dec     JOBN
  4524:          bpl     L930D
  4525:          ldy     NXTJOB
  4526:          jsr     L93D3
  4527:          lda     NXTRK
  4528:          sta     STEPS
  4529:          asl     STEPS
  4530:          lda     #$60
  4531:          sta     DRVST
  4532:          lda     (HDRPNT),y
  4533:          sta     DRVTRK
  4534:          jmp     L99CA
  4535:  L932C:
  4536:          and     #$01
  4537:          cmp     CDRIVE
  4538:          bne     L9312
  4539:          lda     DRVTRK
  4540:          beq     L9368
  4541:          lda     DRVTRK
  4542:          cmp     #$24
  4543:          php
  4544:          lda     (HDRPNT),y
  4545:          cmp     #$24
  4546:          ror     a
  4547:          plp
  4548:          and     #$80
  4549:          bcc     L9350
  4550:          bmi     L9358
  4551:          lda     DRVTRK
  4552:          sbc     #$23
  4553:          sta     DRVTRK
  4554:          jmp     L9358
  4555:  L9350:
  4556:          bpl     L9358
  4557:          lda     DRVTRK
  4558:          adc     #$23
  4559:          sta     DRVTRK
  4560:  L9358:
  4561:          sec
  4562:          lda     (HDRPNT),y
  4563:          sbc     DRVTRK
  4564:          beq     L9368
  4565:          sta     NXTRK
  4566:          lda     JOBN
  4567:          sta     NXTJOB
  4568:          jmp     L9312
  4569:  L9368:
  4570:          ldx     #$04
  4571:          lda     (HDRPNT),y
  4572:          sta     TRACC
  4573:          cmp     #$24
  4574:          tay
  4575:          jsr     L93F3
  4576:          tya
  4577:          bcc     L9379
  4578:          sbc     #$23
  4579:  L9379:
  4580:          tax
  4581:  .if CompileDrive >= DRIVE_1571_05
  4582:          lda     LC04C - 1,x
  4583:  .else
  4584:          lda     L9408,x
  4585:  .endif
  4586:          sta     SECTR
  4587:          lda     VDC_PB2
  4588:          and     # ~ VDC_PB2_BITRATE
  4589:          ora     SECTR
  4590:          sta     VDC_PB2
  4591:          lda     L9409 + 34,x
  4592:          sta     SECTR
  4593:          lda     JOB
  4594:          cmp     #$40
  4595:          beq     L93B0
  4596:          cmp     #$60
  4597:          beq     L93A2
  4598:          cmp     #$70
  4599:          beq     L939F
  4600:          jmp     L944F
  4601:  L939F:
  4602:          jmp     L9B29
  4603:  L93A2:
  4604:          lda     JOBN
  4605:          clc
  4606:          adc     #$03
  4607:          sta     BUFPNT + 1
  4608:          lda     #$00
  4609:          sta     BUFPNT
  4610:          jmp     (BUFPNT)
  4611:  L93B0:
  4612:          lda     #$60
  4613:          sta     DRVST
  4614:          lda     VDC_PB2
  4615:          and     # ~ VDC_PB2_STEPPER
  4616:          sta     VDC_PB2
  4617:          lda     #$A4
  4618:          sta     STEPS
  4619:          lda     L01B1
  4620:          bmi     L93C8
  4621:          lda     #$01
  4622:          .byte   ASM_BIT3
  4623:  L93C8:
  4624:          lda     #$24
  4625:          sta     DRVTRK
  4626:          lda     #$01
  4627:          jmp     L99B5
  4628:  L93D1:
  4629:          ldy     JOBN
  4630:  L93D3:
  4631:          lda     JOBS0,y
  4632:          pha
  4633:          bpl     L93ED
  4634:          and     #$78
  4635:          sta     JOB
  4636:          tya
  4637:          asl     a
  4638:          adc     #$06
  4639:          sta     HDRPNT
  4640:          lda     #$00
  4641:          sta     HDRPNT + 1
  4642:          tya
  4643:          clc
  4644:          adc     #$03
  4645:          sta     BUFPNT + 1
  4646:  L93ED:
  4647:          ldy     #$00
  4648:          sty     BUFPNT
  4649:          pla
  4650:          rts
  4651:  L93F3:
  4652:          bcs     L93F8
  4653:          lda     #$00
  4654:          .byte   ASM_BIT3
  4655:  L93F8:
  4656:          lda     #$84
  4657:          sta     L01B1
  4658:          lda     VBC_PAUNBUF1
  4659:          and     # ~ VBC_PA1_04
  4660:          ora     L01B1
  4661:          sta     VBC_PAUNBUF1
  4662:  L9408:
  4663:          rts
  4664:  L9409:
  4665:          .byte   $60,$60,$60,$60,$60,$60,$60,$60
  4666:          .byte   $60,$60,$60,$60,$60,$60,$60,$60
  4667:          .byte   $60,$40,$40,$40,$40,$40,$40,$40
  4668:          .byte   $20,$20,$20,$20,$20,$20,$00,$00
  4669:          .byte   $00,$00,$00
  4670:  L942C:
  4671:          .byte   $15,$15,$15,$15,$15,$15,$15,$15
  4672:          .byte   $15,$15,$15,$15,$15,$15,$15,$15
  4673:          .byte   $15,$13,$13,$13,$13,$13,$13,$13
  4674:          .byte   $12,$12,$12,$12,$12,$12,$11,$11
  4675:          .byte   $11,$11,$11
  4676:  L944F:
  4677:          lda     #$5A
  4678:          sta     TMP
  4679:  L9453:
  4680:          jsr     L9754
  4681:  L9456:
  4682:          bit     VBC_PAUNBUF1
  4683:          bmi     L9456
  4684:          lda     VDC_PA2
  4685:          cmp     #$52
  4686:          bne     L94A0
  4687:          sta     STAB,y
  4688:          iny
  4689:  L9466:
  4690:          bit     VBC_PAUNBUF1
  4691:          bmi     L9466
  4692:          lda     VDC_PA2
  4693:          sta     STAB,y
  4694:          iny
  4695:          cpy     #$08
  4696:          bne     L9466
  4697:          jsr     L952F
  4698:          ldy     #$04
  4699:          lda     #$00
  4700:  L947D:
  4701:          eor     HEADER,y
  4702:          dey
  4703:          bpl     L947D
  4704:          cmp     #$00
  4705:          bne     L94B7
  4706:          lda     HEADER + 2
  4707:          sta     DRVTRK
  4708:          lda     JOB
  4709:          cmp     #$30
  4710:          beq     L94A9
  4711:          lda     DiskID0
  4712:          cmp     HEADER
  4713:          bne     L94B4
  4714:          lda     DiskID0 + 1
  4715:          cmp     HEADER + 1
  4716:          bne     L94B4
  4717:          jmp     L94BC
  4718:  L94A0:
  4719:          dec     TMP
  4720:          bne     L9453
  4721:          lda     #$02
  4722:          jsr     L99B5
  4723:  L94A9:
  4724:          lda     HEADER
  4725:          sta     DiskID0
  4726:          lda     HEADER + 1
  4727:          sta     DiskID0 + 1
  4728:  L94B1:
  4729:          lda     #$01
  4730:          .byte   ASM_BIT3
  4731:  L94B4:
  4732:          lda     #$0B
  4733:          .byte   ASM_BIT3
  4734:  L94B7:
  4735:          lda     #$09
  4736:          jmp     L99B5
  4737:  L94BC:
  4738:          lda     #$7F
  4739:          sta     CSECT
  4740:          lda     HEADER + 3
  4741:          clc
  4742:          adc     #$02
  4743:          cmp     SECTR
  4744:          bcc     L94CB
  4745:          sbc     SECTR
  4746:  L94CB:
  4747:          sta     NEXTS
  4748:          ldx     #$05
  4749:          stx     JOBN
  4750:          ldx     #$FF
  4751:  L94D3:
  4752:          jsr     L93D1
  4753:          bpl     L951B
  4754:          and     #$01
  4755:          cmp     CDRIVE
  4756:          bne     L951B
  4757:          ldy     #$00
  4758:          lda     (HDRPNT),y
  4759:          cmp     TRACC
  4760:          bne     L951B
  4761:          lda     JOB
  4762:          cmp     #$60
  4763:          beq     L94F8
  4764:          ldy     #$01
  4765:          sec
  4766:          lda     (HDRPNT),y
  4767:          sbc     NEXTS
  4768:          bpl     L94F8
  4769:          clc
  4770:          adc     SECTR
  4771:  L94F8:
  4772:          cmp     CSECT
  4773:          bcs     L951B
  4774:          pha
  4775:          lda     JOB
  4776:          beq     L9516
  4777:          pla
  4778:  .if CompileDrive >= DRIVE_1571_05
  4779:          cmp     #$04
  4780:  .else
  4781:          cmp     #$09
  4782:  .endif
  4783:          bcc     L951B
  4784:  .if CompileDrive >= DRIVE_1571_05
  4785:          cmp     #$08
  4786:  .else
  4787:          cmp     #$0C
  4788:  .endif
  4789:          bcs     L951B
  4790:  L950A:
  4791:          sta     CSECT
  4792:          lda     JOBN
  4793:          tax
  4794:          clc
  4795:          adc     #$03
  4796:          sta     BUFPNT + 1
  4797:          bne     L951B
  4798:  L9516:
  4799:          pla
  4800:          cmp     #$06
  4801:          bcc     L950A
  4802:  L951B:
  4803:          dec     JOBN
  4804:          bpl     L94D3
  4805:          txa
  4806:          bpl     L9525
  4807:          jmp     L99CA
  4808:  L9525:
  4809:          stx     JOBN
  4810:          jsr     L93D1
  4811:          lda     JOB
  4812:          jmp     L9606
  4813:  L952F:
  4814:          lda     BUFPNT
  4815:          pha
  4816:          lda     BUFPNT + 1
  4817:          pha
  4818:          lda     #$24
  4819:          sta     BUFPNT
  4820:          lda     #$00
  4821:          sta     BUFPNT + 1
  4822:          lda     #$00
  4823:          sta     GCRPNT
  4824:          jsr     L98D9
  4825:          lda     BTAB + 3
  4826:          sta     HEADER + 2
  4827:          lda     BTAB + 2
  4828:          sta     HEADER + 3
  4829:          lda     BTAB + 1
  4830:          sta     HEADER + 4
  4831:          jsr     L98D9
  4832:          lda     BTAB
  4833:          sta     HEADER + 1
  4834:          lda     BTAB + 1
  4835:          sta     HEADER
  4836:          pla
  4837:          sta     BUFPNT + 1
  4838:          pla
  4839:          sta     BUFPNT
  4840:          rts
  4841:  empty9562:
  4842:  
  4843:          FillUntil $9600
  4844:  
  4845:  L9600:
  4846:          jsr     L970F
  4847:          jmp     L9754
  4848:  L9606:
  4849:          cmp     #$00
  4850:          beq     L960D
  4851:          jmp     L976E
  4852:  L960D:
  4853:          jsr     L9600
  4854:  L9610:
  4855:          bit     VBC_PAUNBUF1
  4856:          bmi     L9610
  4857:          lda     VDC_PA2
  4858:          tax
  4859:          lda     LA00D,x
  4860:          sta     BTAB
  4861:          txa
  4862:          and     #$07
  4863:          sta     BTAB + 1
  4864:  L9623:
  4865:          bit     VBC_PAUNBUF1
  4866:          bmi     L9623
  4867:          lda     VDC_PA2
  4868:          sta     BTAB + 2
  4869:          and     #$C0
  4870:          ora     BTAB + 1
  4871:          tax
  4872:          lda     L9F0D,x
  4873:          ora     BTAB
  4874:          pha
  4875:          jmp     L9667
  4876:  L963B:
  4877:          bit     VBC_PAUNBUF1
  4878:          bmi     L963B
  4879:          lda     VDC_PA2
  4880:          tax
  4881:          lda     LA00D,x
  4882:          sta     BTAB
  4883:          txa
  4884:          and     #$07
  4885:          sta     BTAB + 1
  4886:  L964E:
  4887:          bit     VBC_PAUNBUF1
  4888:          bmi     L964E
  4889:          lda     VDC_PA2
  4890:          sta     BTAB + 2
  4891:          and     #$C0
  4892:          ora     BTAB + 1
  4893:          tax
  4894:          lda     L9F0D,x
  4895:          ora     BTAB
  4896:          sta     (BUFPNT),y
  4897:          iny
  4898:          beq     L96D7
  4899:  L9667:
  4900:          lda     BTAB + 2
  4901:          tax
  4902:          lda     LA10D,x
  4903:          sta     BTAB
  4904:          txa
  4905:          and     #$01
  4906:          sta     BTAB + 2
  4907:  L9674:
  4908:          bit     VBC_PAUNBUF1
  4909:          bmi     L9674
  4910:          lda     VDC_PA2
  4911:          sta     BTAB + 3
  4912:          and     #$F0
  4913:          ora     BTAB + 2
  4914:          tax
  4915:          lda     L9F0D + 2,x
  4916:          ora     BTAB
  4917:          sta     (BUFPNT),y
  4918:          iny
  4919:          lda     BTAB + 3
  4920:          and     #$0F
  4921:          sta     BTAB + 3
  4922:  L9691:
  4923:          bit     VBC_PAUNBUF1
  4924:          bmi     L9691
  4925:          lda     VDC_PA2
  4926:          sta     CHKSUM
  4927:          and     #$80
  4928:          ora     BTAB + 3
  4929:          tax
  4930:          lda     L9F0D + 16,x
  4931:          sta     BTAB
  4932:          lda     CHKSUM
  4933:          tax
  4934:          lda     LA20D,x
  4935:          ora     BTAB
  4936:          sta     (BUFPNT),y
  4937:          iny
  4938:          txa
  4939:          and     #$03
  4940:          sta     CHKSUM
  4941:  L96B5:
  4942:          bit     VBC_PAUNBUF1
  4943:          bmi     L96B5
  4944:          lda     VDC_PA2
  4945:          sta     BTAB + 1
  4946:          and     #$E0
  4947:          ora     CHKSUM
  4948:          tax
  4949:          lda     L9F0D + 29,x
  4950:          sta     BTAB
  4951:          lda     BTAB + 1
  4952:          tax
  4953:          lda     LA30D,x
  4954:          ora     BTAB
  4955:          sta     (BUFPNT),y
  4956:          iny
  4957:          jmp     L963B
  4958:  L96D7:
  4959:          lda     BTAB + 2
  4960:          tax
  4961:          lda     LA10D,x
  4962:          sta     BTAB
  4963:          txa
  4964:          and     #$01
  4965:          sta     BTAB + 2
  4966:  L96E4:
  4967:          bit     VBC_PAUNBUF1
  4968:          bmi     L96E4
  4969:          lda     VDC_PA2
  4970:          and     #$F0
  4971:          ora     BTAB + 2
  4972:          tax
  4973:          lda     L9F0D + 2,x
  4974:          ora     BTAB
  4975:          sta     BTAB + 1
  4976:          pla
  4977:          cmp     DBID
  4978:          bne     L9707
  4979:          jsr     LF5E9
  4980:          cmp     BTAB + 1
  4981:          beq     L970A
  4982:          lda     #$05
  4983:          .byte   ASM_BIT3
  4984:  L9707:
  4985:          lda     #$04
  4986:          .byte   ASM_BIT3
  4987:  L970A:
  4988:          lda     #$01
  4989:          jmp     L99B5
  4990:  L970F:
  4991:          lda     DiskID0
  4992:          sta     HEADER
  4993:          lda     DiskID0 + 1
  4994:          sta     HEADER + 1
  4995:          ldy     #$00
  4996:          lda     (HDRPNT),y
  4997:          sta     HEADER + 2
  4998:          iny
  4999:          lda     (HDRPNT),y
  5000:          sta     HEADER + 3
  5001:          lda     #$00
  5002:          eor     HEADER
  5003:          eor     HEADER + 1
  5004:          eor     HEADER + 2
  5005:          eor     HEADER + 3
  5006:          sta     HEADER + 4
  5007:          jsr     LF934
  5008:          lda     #$5A
  5009:          sta     TMP
  5010:  L9735:
  5011:          jsr     L9754
  5012:  L9738:
  5013:          lda     STAB,y
  5014:  L973B:
  5015:          bit     VBC_PAUNBUF1
  5016:          bmi     L973B
  5017:          cmp     VDC_PA2
  5018:          bne     L974B
  5019:          iny
  5020:          cpy     #$08
  5021:          bne     L9738
  5022:          rts
  5023:  L974B:
  5024:          dec     TMP
  5025:          bne     L9735
  5026:          lda     #$02
  5027:          jmp     L99B5
  5028:  L9754:
  5029:          ldx     #$0F
  5030:          ldy     #$00
  5031:  L9758:
  5032:          bit     VDC_PB2
  5033:          bpl     L9768
  5034:          dey
  5035:          bne     L9758
  5036:          dex
  5037:          bne     L9758
  5038:          lda     #$03
  5039:          jmp     L99B5
  5040:  L9768:
  5041:          lda     VDC_PA2
  5042:          ldy     #$00
  5043:          rts
  5044:  L976E:
  5045:          cmp     #$10
  5046:          beq     L9775
  5047:          jmp     L9898
  5048:  L9775:
  5049:          jsr     LF5E9
  5050:          sta     CHKSUM
  5051:          lda     VDC_PB2
  5052:          and     #VDC_PB2_WRITEPROTECT
  5053:          bne     L9786
  5054:          lda     #$08
  5055:          jmp     L99B5
  5056:  L9786:
  5057:          jsr     LF78F
  5058:          jsr     L970F
  5059:          ldy     #$09
  5060:  L978E:
  5061:          bit     VBC_PAUNBUF1
  5062:          bmi     L978E
  5063:          bit     VDC_PB2
  5064:          dey
  5065:          bne     L978E
  5066:          lda     #$FF
  5067:          sta     VDC_DDRA2
  5068:          lda     VDC_PCR2
  5069:          and     #$1F
  5070:          ora     #$C0
  5071:          sta     VDC_PCR2
  5072:          lda     #$FF
  5073:          ldy     #$05
  5074:          sta     VDC_PA2
  5075:  L97AF:
  5076:          bit     VBC_PAUNBUF1
  5077:          bmi     L97AF
  5078:          bit     VDC_PB2
  5079:          dey
  5080:          bne     L97AF
  5081:          ldy     #$BB
  5082:  L97BC:
  5083:          lda     NODRV + 1,y
  5084:  L97BF:
  5085:          bit     VBC_PAUNBUF1
  5086:          bmi     L97BF
  5087:          sta     VDC_PA2
  5088:          iny
  5089:          bne     L97BC
  5090:  L97CA:
  5091:          lda     (BUFPNT),y
  5092:  L97CC:
  5093:          bit     VBC_PAUNBUF1
  5094:          bmi     L97CC
  5095:          sta     VDC_PA2
  5096:          iny
  5097:          bne     L97CA
  5098:  L97D7:
  5099:          bit     VBC_PAUNBUF1
  5100:          bmi     L97D7
  5101:          lda     VDC_PCR2
  5102:          ora     #$E0
  5103:          sta     VDC_PCR2
  5104:          lda     #$00
  5105:          sta     VDC_DDRA2
  5106:          jsr     L97F9
  5107:          ldy     JOBN
  5108:  .if CompileDrive >= DRIVE_1571_05
  5109:          jmp     LAAAD
  5110:  .else
  5111:          lda     JOBS0,y
  5112:  .endif
  5113:          eor     #$30
  5114:          sta     JOBS0,y
  5115:          jmp     L944F
  5116:  L97F9:
  5117:          lda     #$00
  5118:          sta     SAVPNT
  5119:          sta     BUFPNT
  5120:          sta     NXTPNT
  5121:          lda     BUFPNT + 1
  5122:          sta     NXTBF
  5123:          lda     #$01
  5124:          sta     BUFPNT + 1
  5125:          sta     SAVPNT + 1
  5126:          lda     #$BB
  5127:          sta     GCRPNT
  5128:          sta     BYTCNT
  5129:          jsr     L98D9
  5130:          lda     BTAB
  5131:          sta     BID
  5132:          ldy     BYTCNT
  5133:          lda     BTAB + 1
  5134:          sta     (SAVPNT),y
  5135:          iny
  5136:          lda     BTAB + 2
  5137:          sta     (SAVPNT),y
  5138:          iny
  5139:          lda     BTAB + 3
  5140:          sta     (SAVPNT),y
  5141:          iny
  5142:          sty     BYTCNT
  5143:  L982B:
  5144:          jsr     L98D9
  5145:          ldy     BYTCNT
  5146:          lda     BTAB
  5147:          sta     (SAVPNT),y
  5148:          iny
  5149:          lda     BTAB + 1
  5150:          sta     (SAVPNT),y
  5151:          iny
  5152:          beq     L984A
  5153:          lda     BTAB + 2
  5154:          sta     (SAVPNT),y
  5155:          iny
  5156:          lda     BTAB + 3
  5157:          sta     (SAVPNT),y
  5158:          iny
  5159:          sty     BYTCNT
  5160:          bne     L982B
  5161:  L984A:
  5162:          lda     BTAB + 2
  5163:          sta     (BUFPNT),y
  5164:          iny
  5165:          lda     BTAB + 3
  5166:          sta     (BUFPNT),y
  5167:          iny
  5168:          sty     BYTCNT
  5169:  L9856:
  5170:          jsr     L98D9
  5171:          ldy     BYTCNT
  5172:          lda     BTAB
  5173:          sta     (BUFPNT),y
  5174:          iny
  5175:          lda     BTAB + 1
  5176:          sta     (BUFPNT),y
  5177:          iny
  5178:          lda     BTAB + 2
  5179:          sta     (BUFPNT),y
  5180:          iny
  5181:          lda     BTAB + 3
  5182:          sta     (BUFPNT),y
  5183:          iny
  5184:          sty     BYTCNT
  5185:          cpy     #$BB
  5186:          bcc     L9856
  5187:          lda     #$45
  5188:          sta     SAVPNT
  5189:          lda     BUFPNT + 1
  5190:          sta     SAVPNT + 1
  5191:          ldy     #$BA
  5192:  L987F:
  5193:          lda     (BUFPNT),y
  5194:          sta     (SAVPNT),y
  5195:          dey
  5196:          bne     L987F
  5197:          lda     (BUFPNT),y
  5198:          sta     (SAVPNT),y
  5199:          ldx     #$BB
  5200:  L988C:
  5201:          lda     NODRV + 1,x
  5202:          sta     (BUFPNT),y
  5203:          iny
  5204:          inx
  5205:          bne     L988C
  5206:          stx     GCRFLG
  5207:          rts
  5208:  L9898:
  5209:          cmp     #$20
  5210:          beq     L989E
  5211:          bne     L98CE
  5212:  L989E:
  5213:          jsr     LF5E9
  5214:          sta     CHKSUM
  5215:          jsr     LF78F
  5216:          jsr     L9600
  5217:          ldy     #$BB
  5218:  L98AB:
  5219:          lda     NODRV + 1,y
  5220:  L98AE:
  5221:          bit     VBC_PAUNBUF1
  5222:          bmi     L98AE
  5223:          eor     VDC_PA2
  5224:          bne     L98D4
  5225:          iny
  5226:          bne     L98AB
  5227:  L98BB:
  5228:          lda     (BUFPNT),y
  5229:  L98BD:
  5230:          bit     VBC_PAUNBUF1
  5231:          bmi     L98BD
  5232:          eor     VDC_PA2
  5233:          bne     L98D4
  5234:          iny
  5235:          cpy     #$FD
  5236:          bne     L98BB
  5237:          beq     L98D1
  5238:  L98CE:
  5239:          jsr     L970F
  5240:  L98D1:
  5241:          lda     #$01
  5242:          .byte   ASM_BIT3
  5243:  L98D4:
  5244:          lda     #$07
  5245:          jmp     L99B5
  5246:  L98D9:
  5247:          ldy     GCRPNT
  5248:          lda     (BUFPNT),y
  5249:          sta     GTAB
  5250:          and     #$07
  5251:          sta     GTAB + 1
  5252:          iny
  5253:          bne     L98EC
  5254:          lda     NXTBF
  5255:          sta     BUFPNT + 1
  5256:          ldy     NXTPNT
  5257:  L98EC:
  5258:          lda     (BUFPNT),y
  5259:          sta     GTAB + 2
  5260:          and     #$C0
  5261:          ora     GTAB + 1
  5262:          sta     GTAB + 1
  5263:          lda     GTAB + 2
  5264:          and     #$01
  5265:          sta     GTAB + 3
  5266:          iny
  5267:          lda     (BUFPNT),y
  5268:          tax
  5269:          and     #$F0
  5270:          ora     GTAB + 3
  5271:          sta     GTAB + 3
  5272:          txa
  5273:          and     #$0F
  5274:          sta     GTAB + 4
  5275:          iny
  5276:          lda     (BUFPNT),y
  5277:          sta     GTAB + 5
  5278:          and     #$80
  5279:          ora     GTAB + 4
  5280:          sta     GTAB + 4
  5281:          lda     GTAB + 5
  5282:          and     #$03
  5283:          sta     GTAB + 6
  5284:          iny
  5285:          bne     L9927
  5286:          lda     NXTBF
  5287:          sta     BUFPNT + 1
  5288:          ldy     NXTPNT
  5289:          sty     BUFPNT
  5290:  L9927:
  5291:          lda     (BUFPNT),y
  5292:          sta     GTAB + 7
  5293:          and     #$E0
  5294:          ora     GTAB + 6
  5295:          sta     GTAB + 6
  5296:          iny
  5297:          sty     GCRPNT
  5298:          ldx     GTAB
  5299:          lda     LA00D,x
  5300:          ldx     GTAB + 1
  5301:          ora     L9F0D,x
  5302:          sta     BTAB
  5303:          ldx     GTAB + 2
  5304:          lda     LA10D,x
  5305:          ldx     GTAB + 3
  5306:          ora     L9F0D + 2,x
  5307:          sta     BTAB + 1
  5308:          ldx     GTAB + 4
  5309:          lda     L9F0D + 16,x
  5310:          ldx     GTAB + 5
  5311:          ora     LA20D,x
  5312:          sta     BTAB + 2
  5313:          ldx     GTAB + 6
  5314:          lda     L9F0D + 29,x
  5315:          ldx     GTAB + 7
  5316:          ora     LA30D,x
  5317:          sta     BTAB + 3
  5318:          rts
  5319:  L9965:
  5320:          lda     #$00
  5321:          sta     GCRPNT
  5322:          sta     SAVPNT
  5323:          sta     BYTCNT
  5324:          lda     #$01
  5325:          sta     NXTBF
  5326:          lda     #$BA
  5327:          sta     NXTPNT
  5328:          lda     BUFPNT + 1
  5329:          sta     SAVPNT + 1
  5330:          jsr     L98D9
  5331:          lda     BTAB
  5332:          sta     BID
  5333:          ldy     BYTCNT
  5334:          lda     BTAB + 1
  5335:          sta     (SAVPNT),y
  5336:          iny
  5337:          lda     BTAB + 2
  5338:          sta     (SAVPNT),y
  5339:          iny
  5340:          lda     BTAB + 3
  5341:          sta     (SAVPNT),y
  5342:          iny
  5343:  L9991:
  5344:          sty     BYTCNT
  5345:          jsr     L98D9
  5346:          ldy     BYTCNT
  5347:          lda     BTAB
  5348:          sta     (SAVPNT),y
  5349:          iny
  5350:          beq     L99B0
  5351:          lda     BTAB + 1
  5352:          sta     (SAVPNT),y
  5353:          iny
  5354:          lda     BTAB + 2
  5355:          sta     (SAVPNT),y
  5356:          iny
  5357:          lda     BTAB + 3
  5358:          sta     (SAVPNT),y
  5359:          iny
  5360:          bne     L9991
  5361:  L99B0:
  5362:          lda     SAVPNT + 1
  5363:          sta     BUFPNT + 1
  5364:          rts
  5365:  L99B5:
  5366:          ldy     JOBN
  5367:          sta     JOBS0,y
  5368:          lda     GCRFLG
  5369:          beq     L99C1
  5370:          jsr     L97F9
  5371:  L99C1:
  5372:          jsr     LF98F
  5373:          ldx     SAVSP
  5374:          txs
  5375:          jmp     L92C8
  5376:  L99CA:
  5377:          lda     VDC_T1HL2
  5378:          sta     VDC_T1HC2
  5379:          lda     VDC_PB2
  5380:          and     #VDC_PB2_WRITEPROTECT
  5381:          cmp     LWPT
  5382:          sta     LWPT
  5383:          bne     L99E2
  5384:          lda     CNTMOTOR1570
  5385:          bne     L99F0
  5386:          beq     L99FE
  5387:  L99E2:
  5388:          lda     #$FF
  5389:          sta     CNTMOTOR1570
  5390:          jsr     L8764
  5391:  
  5392:          SET_WPSW_DIRTY_NO_CR
  5393:  
  5394:          bne     L99FE
  5395:  L99F0:
  5396:          dec     CNTMOTOR1570
  5397:          bne     L99FE
  5398:          lda     DRVST
  5399:          cmp     #$00
  5400:          bne     L99FE
  5401:          jsr     L8770
  5402:  L99FE:
  5403:          lda     PHASE
  5404:          beq     L9A18
  5405:          cmp     #$02
  5406:          bne     L9A0E
  5407:          lda     #$00
  5408:          sta     PHASE
  5409:          beq     L9A18
  5410:  L9A0E:
  5411:          sta     STEPS
  5412:          lda     #$02
  5413:          sta     PHASE
  5414:          jmp     L9A56
  5415:  L9A18:
  5416:          ldx     CDRIVE
  5417:          bmi     L9A23
  5418:          lda     DRVST
  5419:          tay
  5420:          cmp     #$20
  5421:          bne     L9A26
  5422:  L9A23:
  5423:  .if CompileDrive >= DRIVE_1571_05
  5424:          jmp     L9AC6
  5425:  .else
  5426:          jmp     L9AC9
  5427:  .endif
  5428:  L9A26:
  5429:          dec     ACLTIM
  5430:          bne     L9A46
  5431:          tya
  5432:          bpl     L9A31
  5433:          and     #$7F
  5434:          sta     DRVST
  5435:  L9A31:
  5436:          and     #$10
  5437:          beq     L9A46
  5438:          dec     GCRERR
  5439:          bne     L9A46
  5440:          jsr     L8770
  5441:          lda     #$FF
  5442:          sta     CDRIVE
  5443:          lda     #$00
  5444:          sta     DRVST
  5445:          beq     L9A23
  5446:  L9A46:
  5447:          tya
  5448:          and     #$40
  5449:          bne     L9A4E
  5450:  .if CompileDrive >= DRIVE_1571_05
  5451:          jmp     L9AC6
  5452:  .else
  5453:          jmp     L9AC9
  5454:  .endif
  5455:  L9A4E:
  5456:          lda     NXTST
  5457:          bne     L9AA2
  5458:          lda     STEPS
  5459:          beq     L9A99
  5460:  L9A56:
  5461:          lda     STEPS
  5462:          bpl     L9AB3
  5463:          tya
  5464:          pha
  5465:          ldy     #$63
  5466:  L9A5E:
  5467:          lda     VBC_PAUNBUF1
  5468:          ror     a
  5469:          php
  5470:          lda     VBC_PAUNBUF1
  5471:          ror     a
  5472:          ror     a
  5473:          plp
  5474:          and     #$80
  5475:          bcc     L9A71
  5476:          bpl     L9A8C
  5477:          bmi     L9A73
  5478:  L9A71:
  5479:          bmi     L9A8C
  5480:  L9A73:
  5481:          dey
  5482:          bne     L9A5E
  5483:          bcs     L9A8C
  5484:          lda     ADRSED
  5485:          bne     L9A8C
  5486:          lda     VDC_PB2
  5487:          and     #VDC_PB2_STEPPER
  5488:          bne     L9A8C
  5489:          pla
  5490:          tay
  5491:          lda     #$00
  5492:          sta     STEPS
  5493:  .if CompileDrive >= DRIVE_1571_05
  5494:          jmp     L9AC6
  5495:  .else
  5496:          jmp     L9AC9
  5497:  .endif
  5498:  L9A8C:
  5499:          pla
  5500:          tay
  5501:          inc     STEPS
  5502:          lda     VDC_PB2
  5503:          sec
  5504:          sbc     #$01
  5505:          jmp     L9ABB
  5506:  L9A99:
  5507:          lda     #$02
  5508:          sta     ACLTIM
  5509:          sta     NXTST
  5510:  .if CompileDrive >= DRIVE_1571_05
  5511:          jmp     L9AC6
  5512:  .else
  5513:          jmp     L9AC9
  5514:  .endif
  5515:  L9AA2:
  5516:          dec     ACLTIM
  5517:  .if CompileDrive >= DRIVE_1571_05
  5518:          bne     L9AC6
  5519:  .else
  5520:          bne     L9AC9
  5521:  .endif
  5522:          lda     DRVST
  5523:          and     #$BF
  5524:          sta     DRVST
  5525:          lda     #$00
  5526:          sta     NXTST
  5527:  .if CompileDrive >= DRIVE_1571_05
  5528:          jmp     L9AC6
  5529:  .else
  5530:          jmp     L9AC9
  5531:  .endif
  5532:  L9AB3:
  5533:          dec     STEPS
  5534:          lda     VDC_PB2
  5535:          clc
  5536:          adc     #$01
  5537:  L9ABB:
  5538:          and     #$03
  5539:          sta     TMP
  5540:          lda     VDC_PB2
  5541:  .if CompileDrive >= DRIVE_1571_05
  5542:          jmp     LC038
  5543:          nop
  5544:  L9AC6:
  5545:          jmp     LC03F
  5546:  .else
  5547:          and     # ~ VDC_PB2_STEPPER
  5548:          ora     TMP
  5549:          sta     VDC_PB2
  5550:  .endif
  5551:  L9AC9:
  5552:          rts
  5553:  L9ACA:
  5554:          .byte   $21,$22,$23,$24,$25,$26,$27,$28,$29
  5555:  L9AD3:
  5556:          .byte   $02,$02,$04,$06,$08,$08,$0B,$13,$16
  5557:  L9ADC:
  5558:          ldy     #$00
  5559:          ldx     #$1C
  5560:          jsr     L9D63
  5561:          jsr     L9B73
  5562:          jsr     LFE00
  5563:          ldy     #$FF
  5564:  L9AEB:
  5565:          ldx     #$FF
  5566:  L9AED:
  5567:          bit     VDC_PB2
  5568:          bpl     L9AFD
  5569:          dex
  5570:          bne     L9AED
  5571:          dey
  5572:          bne     L9AEB
  5573:  L9AF8:
  5574:          lda     #$02
  5575:          jmp     L9D59
  5576:  L9AFD:
  5577:          ldy     #$00
  5578:          ldx     #$00
  5579:  L9B01:
  5580:          bit     VDC_PB2
  5581:          bpl     L9B01
  5582:  L9B06:
  5583:          lda     VDC_PB2
  5584:          iny
  5585:          bne     L9B0D
  5586:          inx
  5587:  L9B0D:
  5588:          and     #VDC_PB2_SYNC
  5589:          bne     L9B06
  5590:          lda     #$00
  5591:          sta     HINIB
  5592:          txa
  5593:          ldx     #$08
  5594:  L9B18:
  5595:          cmp     L9ACA,x
  5596:          beq     L9B22
  5597:          dex
  5598:          bpl     L9B18
  5599:          bmi     L9AF8
  5600:  L9B22:
  5601:          lda     L9AD3,x
  5602:          sta     BUFFER3 + 38
  5603:          rts
  5604:  L9B29:
  5605:          lda     FTNUM
  5606:          bpl     L9B58
  5607:          lda     #$60
  5608:          sta     DRVST
  5609:          lda     L01B2
  5610:          bne     L9B39
  5611:          lda     #$01
  5612:          .byte   ASM_BIT3
  5613:  L9B39:
  5614:          lda     #$24
  5615:          sta     DRVTRK
  5616:          sta     FTNUM
  5617:          cmp     #$24
  5618:          jsr     L93F3
  5619:          lda     #$A4
  5620:          sta     STEPS
  5621:          lda     VDC_PB2
  5622:          and     # ~ VDC_PB2_STEPPER
  5623:          sta     VDC_PB2
  5624:          lda     #$0A
  5625:          sta     BUFFER3 + 32
  5626:          jmp     L99CA
  5627:  L9B58:
  5628:          ldy     #$00
  5629:          lda     (HDRPNT),y
  5630:          cmp     FTNUM
  5631:          beq     L9B67
  5632:          lda     FTNUM
  5633:          sta     (HDRPNT),y
  5634:          jmp     L99CA
  5635:  L9B67:
  5636:          lda     VDC_PB2
  5637:          and     #VDC_PB2_WRITEPROTECT
  5638:          bne     L9B89
  5639:          lda     #$08
  5640:          jmp     L9D51
  5641:  L9B73:
  5642:          ldx     #$14
  5643:          lda     #$FF
  5644:  L9B77:
  5645:          bit     VBC_PAUNBUF1
  5646:          bmi     L9B77
  5647:          sta     VDC_PA2
  5648:          bit     VDC_PB2
  5649:          dey
  5650:          bne     L9B77
  5651:          dex
  5652:          bne     L9B77
  5653:          rts
  5654:  L9B89:
  5655:          lda     HINIB
  5656:          bpl     L9B90
  5657:          jsr     L9ADC
  5658:  L9B90:
  5659:          lda     BUFFER3 + 38
  5660:          clc
  5661:          lda     #$03
  5662:          sta     HDRPNT + 1
  5663:          lda     #$00
  5664:          sta     HDRPNT
  5665:          sta     BUFFER3 + 40
  5666:          ldy     #$00
  5667:  L9BA1:
  5668:          lda     HBID
  5669:          sta     (HDRPNT),y
  5670:          iny
  5671:          lda     #$00
  5672:          sta     (HDRPNT),y
  5673:          iny
  5674:          lda     BUFFER3 + 40
  5675:          sta     (HDRPNT),y
  5676:          iny
  5677:          lda     FTNUM
  5678:          sta     (HDRPNT),y
  5679:          iny
  5680:          lda     DiskID0 + 1
  5681:          sta     (HDRPNT),y
  5682:          iny
  5683:          lda     DiskID0
  5684:          sta     (HDRPNT),y
  5685:          iny
  5686:          lda     #$0F
  5687:          sta     (HDRPNT),y
  5688:          iny
  5689:          sta     (HDRPNT),y
  5690:          iny
  5691:          tya
  5692:          pha
  5693:          ldx     #$07
  5694:          lda     #$00
  5695:          sta     CHKSUM
  5696:  L9BD0:
  5697:          dey
  5698:          lda     (HDRPNT),y
  5699:          eor     CHKSUM
  5700:          sta     CHKSUM
  5701:          dex
  5702:          bne     L9BD0
  5703:          sta     (HDRPNT),y
  5704:          pla
  5705:          tay
  5706:          inc     BUFFER3 + 40
  5707:          lda     BUFFER3 + 40
  5708:          cmp     SECTR
  5709:          bcc     L9BA1
  5710:          lda     #$03
  5711:          sta     BUFPNT + 1
  5712:          jsr     LFE30
  5713:          ldy     #$BA
  5714:  L9BF1:
  5715:          lda     (HDRPNT),y
  5716:          ldx     #$45
  5717:          stx     HDRPNT
  5718:          sta     (HDRPNT),y
  5719:          ldx     #$00
  5720:          stx     HDRPNT
  5721:          dey
  5722:          cpy     #$FF
  5723:          bne     L9BF1
  5724:          ldy     #$44
  5725:  L9C04:
  5726:          lda     L01BB,y
  5727:          sta     (HDRPNT),y
  5728:          dey
  5729:          bpl     L9C04
  5730:          clc
  5731:          lda     #$03
  5732:          adc     #$02
  5733:          sta     BUFPNT + 1
  5734:          lda     #$00
  5735:          tay
  5736:  L9C16:
  5737:          sta     (BUFPNT),y
  5738:          iny
  5739:          bne     L9C16
  5740:          jsr     LF5E9
  5741:          sta     CHKSUM
  5742:          jsr     LF78F
  5743:          lda     #$00
  5744:          sta     ACTJOB
  5745:          ldx     #$06
  5746:          jsr     L9D63
  5747:  L9C2C:
  5748:          ldy     #$05
  5749:  L9C2E:
  5750:          bit     VBC_PAUNBUF1
  5751:          bmi     L9C2E
  5752:          lda     #$FF
  5753:          sta     VDC_PA2
  5754:          bit     VDC_PB2
  5755:          dey
  5756:          bne     L9C2E
  5757:          ldx     #$0A
  5758:          ldy     ACTJOB
  5759:  L9C42:
  5760:          bit     VBC_PAUNBUF1
  5761:          bmi     L9C42
  5762:          lda     (HDRPNT),y
  5763:          sta     VDC_PA2
  5764:          bit     VDC_PB2
  5765:          iny
  5766:          dex
  5767:          bne     L9C42
  5768:          ldy     #$09
  5769:  L9C55:
  5770:          bit     VBC_PAUNBUF1
  5771:          bmi     L9C55
  5772:          lda     #$55
  5773:          sta     VDC_PA2
  5774:          bit     VDC_PB2
  5775:          dey
  5776:          bne     L9C55
  5777:          lda     #$FF
  5778:          ldy     #$05
  5779:  L9C69:
  5780:          bit     VBC_PAUNBUF1
  5781:          bmi     L9C69
  5782:          sta     VDC_PA2
  5783:          bit     VDC_PB2
  5784:          dey
  5785:          bne     L9C69
  5786:          ldy     #$BB
  5787:  L9C79:
  5788:          bit     VBC_PAUNBUF1
  5789:          bmi     L9C79
  5790:          lda     NODRV + 1,y
  5791:          sta     VDC_PA2
  5792:          bit     VDC_PB2
  5793:          iny
  5794:          bne     L9C79
  5795:  L9C8A:
  5796:          bit     VBC_PAUNBUF1
  5797:          bmi     L9C8A
  5798:          lda     (BUFPNT),y
  5799:          sta     VDC_PA2
  5800:          bit     VDC_PB2
  5801:          iny
  5802:          bne     L9C8A
  5803:          lda     #$55
  5804:          ldy     BUFFER3 + 38
  5805:  L9C9F:
  5806:          bit     VBC_PAUNBUF1
  5807:          bmi     L9C9F
  5808:          sta     VDC_PA2
  5809:          bit     VDC_PB2
  5810:          dey
  5811:          bne     L9C9F
  5812:          lda     ACTJOB
  5813:          clc
  5814:          adc     #$0A
  5815:          sta     ACTJOB
  5816:          dec     BUFFER3 + 40
  5817:          beq     L9CBC
  5818:          jmp     L9C2C
  5819:  L9CBC:
  5820:          bit     VBC_PAUNBUF1
  5821:          bmi     L9CBC
  5822:          bit     VDC_PB2
  5823:  L9CC4:
  5824:          bit     VBC_PAUNBUF1
  5825:          bmi     L9CC4
  5826:          bit     VDC_PB2
  5827:          jsr     LFE00
  5828:          lda     #$C8
  5829:          sta     BUFFER3 + 35
  5830:  L9CD4:
  5831:          lda     #$00
  5832:          sta     ACTJOB
  5833:          lda     SECTR
  5834:          sta     BUFFER3 + 40
  5835:  L9CDD:
  5836:          jsr     L9754
  5837:          ldx     #$0A
  5838:          ldy     ACTJOB
  5839:  L9CE4:
  5840:          lda     (HDRPNT),y
  5841:  L9CE6:
  5842:          bit     VBC_PAUNBUF1
  5843:          bmi     L9CE6
  5844:          cmp     VDC_PA2
  5845:          bne     L9CFE
  5846:          iny
  5847:          dex
  5848:          bne     L9CE4
  5849:          clc
  5850:          lda     ACTJOB
  5851:          adc     #$0A
  5852:          sta     ACTJOB
  5853:          jmp     L9D08
  5854:  L9CFE:
  5855:          dec     BUFFER3 + 35
  5856:          bne     L9CD4
  5857:          lda     #$06
  5858:          jmp     L9D51
  5859:  L9D08:
  5860:          jsr     L9754
  5861:          ldy     #$BB
  5862:  L9D0D:
  5863:          lda     NODRV + 1,y
  5864:  L9D10:
  5865:          bit     VBC_PAUNBUF1
  5866:          bmi     L9D10
  5867:          cmp     VDC_PA2
  5868:          bne     L9CFE
  5869:          iny
  5870:          bne     L9D0D
  5871:  L9D1D:
  5872:          lda     (BUFPNT),y
  5873:  L9D1F:
  5874:          bit     VBC_PAUNBUF1
  5875:          bmi     L9D1F
  5876:          cmp     VDC_PA2
  5877:          bne     L9CFE
  5878:          iny
  5879:          bne     L9D1D
  5880:          dec     BUFFER3 + 40
  5881:          bne     L9CDD
  5882:          inc     FTNUM
  5883:          lda     FTNUM
  5884:          bit     L01B1
  5885:          bmi     L9D3D
  5886:          cmp     #$24
  5887:          .byte   ASM_BIT3
  5888:  L9D3D:
  5889:          cmp     #$47
  5890:          bcs     L9D44
  5891:          jmp     L99CA
  5892:  L9D44:
  5893:          lda     #$FF
  5894:          sta     FTNUM
  5895:          lda     #$00
  5896:          sta     GCRFLG
  5897:          lda     #$01
  5898:          jmp     L99B5
  5899:  L9D51:
  5900:          dec     BUFFER3 + 32
  5901:          beq     L9D59
  5902:          jmp     L99CA
  5903:  L9D59:
  5904:          ldy     #$FF
  5905:          sty     FTNUM
  5906:          iny
  5907:          sty     GCRFLG
  5908:          jmp     L99B5
  5909:  L9D63:
  5910:          lda     VDC_PCR2
  5911:          and     #$1F
  5912:          ora     #$C0
  5913:          sta     VDC_PCR2
  5914:          lda     #$FF
  5915:          sta     VDC_DDRA2
  5916:          lda     #$55
  5917:          ldy     #$00
  5918:  L9D76:
  5919:          bit     VBC_PAUNBUF1
  5920:          bmi     L9D76
  5921:          bit     VDC_PB2
  5922:          sta     VDC_PA2
  5923:          dey
  5924:          bne     L9D76
  5925:          dex
  5926:          bne     L9D76
  5927:          rts
  5928:  L9D88:
  5929:          pha
  5930:          txa
  5931:          pha
  5932:          tya
  5933:          pha
  5934:          lda     CIA_ICR
  5935:          and     #CIA_ICR_B_SP
  5936:          beq     L9DBA
  5937:          bit     FLGMODE1570
  5938:          bmi     L9DBA
  5939:          lda     VBC_PAUNBUF1
  5940:          ora     #VBC_PA1_20
  5941:          sta     VBC_PAUNBUF1
  5942:          lda     #$DE
  5943:          sta     VIRQJOB1570
  5944:          lda     #$9D
  5945:          sta     VIRQJOB1570 + 1
  5946:          lda     #$40
  5947:          sta     VDC_T1HL2
  5948:          sta     VDC_T1HC2
  5949:          lda     #$00
  5950:          sta     NXTST
  5951:          jmp     L9DEA
  5952:  L9DBA:
  5953:          lda     VBC_IFR1
  5954:          and     #$02
  5955:          beq     L9DC4
  5956:          jsr     SetATNPending                   ; Set the ATN pending flag to mark that the bus must be processed
  5957:  L9DC4:
  5958:          lda     VDC_IFR2
  5959:          asl     a
  5960:          bpl     L9DCD
  5961:          jsr     LF2B0
  5962:  L9DCD:
  5963:          tsx
  5964:          lda     L0104,x
  5965:          and     #$10
  5966:          beq     L9DD8
  5967:          jsr     LF2B0
  5968:  L9DD8:
  5969:          pla
  5970:          tay
  5971:          pla
  5972:          tax
  5973:          pla
  5974:          rti
  5975:  L9DDE:
  5976:          pha
  5977:          txa
  5978:          pha
  5979:          tya
  5980:          pha
  5981:          lda     CIA_ICR
  5982:          and     #CIA_ICR_B_SP
  5983:          beq     L9DF2
  5984:  L9DEA:
  5985:          lda     BITCNT
  5986:          ora     #$40
  5987:          sta     BITCNT
  5988:          bne     L9E14
  5989:  L9DF2:
  5990:          lda     VBC_IFR1
  5991:          and     #$02
  5992:          beq     L9E00
  5993:          bit     VBC_PA1
  5994:          lda     #$01
  5995:          sta     ATNPND
  5996:  L9E00:
  5997:          tsx
  5998:          lda     L0104,x
  5999:          and     #$10
  6000:          beq     L9E0B
  6001:          jsr     L92BA
  6002:  L9E0B:
  6003:          lda     VDC_IFR2
  6004:          asl     a
  6005:          bpl     L9E14
  6006:          jsr     L92BA
  6007:  L9E14:
  6008:          pla
  6009:          tay
  6010:          pla
  6011:          tax
  6012:          pla
  6013:          rti
  6014:  empty9e1a:
  6015:  
  6016:          FillUntil $9F09
  6017:  
  6018:          .byte   $08,$00,$01,$FF
  6019:  
  6020:  L9F0D:
  6021:          .byte   $0C,$04,$05,$FF,$FF,$02,$03,$FF
  6022:          .byte   $0F,$06,$07,$FF,$09,$0A,$0B,$FF
  6023:          .byte   $0D,$0E,$80,$FF,$00,$00,$10,$40
  6024:          .byte   $FF,$20,$C0,$60,$40,$A0,$50,$E0
  6025:          .byte   $FF,$FF,$FF,$02,$20,$08,$30,$FF
  6026:          .byte   $FF,$00,$F0,$FF,$60,$01,$70,$FF
  6027:          .byte   $FF,$FF,$90,$03,$A0,$0C,$B0,$FF
  6028:          .byte   $FF,$04,$D0,$FF,$E0,$05,$80,$FF
  6029:          .byte   $90,$FF,$08,$0C,$FF,$0F,$09,$0D
  6030:          .byte   $80,$02,$FF,$FF,$FF,$03,$FF,$FF
  6031:          .byte   $00,$FF,$FF,$0F,$FF,$0F,$FF,$FF
  6032:          .byte   $10,$06,$FF,$FF,$FF,$07,$00,$20
  6033:          .byte   $A0,$FF,$FF,$06,$FF,$09,$FF,$FF
  6034:          .byte   $C0,$0A,$FF,$FF,$FF,$0B,$FF,$FF
  6035:          .byte   $40,$FF,$FF,$07,$FF,$0D,$FF,$FF
  6036:          .byte   $50,$0E,$FF,$FF,$FF,$FF,$10,$30
  6037:          .byte   $B0,$FF,$00,$04,$02,$06,$0A,$0E
  6038:          .byte   $80,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6039:          .byte   $20,$FF,$08,$09,$80,$10,$C0,$50
  6040:          .byte   $30,$30,$F0,$70,$90,$B0,$D0,$FF
  6041:          .byte   $FF,$FF,$00,$0A,$FF,$FF,$FF,$FF
  6042:          .byte   $F0
  6043:  L9FB6:
  6044:          brk
  6045:          nop
  6046:  L9FB8:
  6047:          lda     JOBS0,x
  6048:          bmi     L9FB8
  6049:          rts
  6050:  
  6051:  L9FBD:
  6052:          .byte   $60,$FF,$01,$0B,$FF,$FF,$FF,$FF
  6053:          .byte   $70,$FF,$FF,$FF,$FF,$FF,$C0,$F0
  6054:          .byte   $D0,$FF,$01,$05,$03,$07,$0B,$FF
  6055:          .byte   $90,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6056:          .byte   $A0,$FF,$0C,$0D,$FF,$FF,$FF,$FF
  6057:          .byte   $B0,$FF,$FF,$FF,$FF,$FF,$40,$60
  6058:          .byte   $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF
  6059:          .byte   $D0,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6060:          .byte   $E0,$FF,$05,$FF,$FF,$FF,$FF,$FF
  6061:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$50,$70
  6062:  LA00D:
  6063:          .byte   $0C,$04,$05,$FF,$FF,$02,$03,$FF
  6064:          .byte   $0F,$06,$07,$FF,$09,$0A,$0B,$FF
  6065:          .byte   $0D,$0E,$80,$FF,$00,$00,$10,$40
  6066:          .byte   $FF,$20,$C0,$60,$40,$A0,$50,$E0
  6067:          .byte   $FF,$FF,$FF,$02,$20,$08,$30,$30
  6068:          .byte   $30,$00,$F0,$FF,$60,$01,$70,$FF
  6069:          .byte   $FF,$FF,$90,$03,$A0,$0C,$B0,$FF
  6070:          .byte   $FF,$04,$D0,$FF,$E0,$05,$80,$FF
  6071:          .byte   $90,$FF,$08,$0C,$FF,$0F,$09,$0D
  6072:          .byte   $80,$80,$80,$80,$80,$80,$80,$80
  6073:          .byte   $00,$00,$00,$00,$00,$00,$00,$00
  6074:          .byte   $10,$10,$10,$10,$10,$10,$10,$10
  6075:          .byte   $A0,$FF,$FF,$06,$FF,$09,$FF,$FF
  6076:          .byte   $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0
  6077:          .byte   $40,$40,$40,$40,$40,$40,$40,$40
  6078:          .byte   $50,$50,$50,$50,$50,$50,$50,$50
  6079:          .byte   $B0,$FF,$00,$04,$02,$06,$0A,$0E
  6080:          .byte   $80,$80,$80,$80,$80,$80,$80,$80
  6081:          .byte   $20,$20,$20,$20,$20,$20,$20,$20
  6082:          .byte   $30,$30,$30,$30,$30,$30,$30,$30
  6083:          .byte   $FF,$FF,$00,$0A,$0A,$0A,$0A,$0A
  6084:          .byte   $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0
  6085:          .byte   $60,$60,$60,$60,$60,$60,$60,$60
  6086:          .byte   $70,$70,$70,$70,$70,$70,$70,$70
  6087:          .byte   $D0,$FF,$01,$05,$03,$07,$0B,$FF
  6088:          .byte   $90,$90,$90,$90,$90,$90,$90,$90
  6089:          .byte   $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0
  6090:          .byte   $B0,$B0,$B0,$B0,$B0,$B0,$B0,$B0
  6091:          .byte   $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF
  6092:          .byte   $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0
  6093:          .byte   $E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0
  6094:          .byte   $05,$05,$05,$05,$05,$05,$50,$70
  6095:  
  6096:  LA10D:
  6097:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6098:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6099:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  6100:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  6101:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  6102:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  6103:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  6104:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  6105:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6106:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6107:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  6108:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  6109:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  6110:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  6111:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  6112:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  6113:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6114:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6115:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  6116:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  6117:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  6118:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  6119:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  6120:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  6121:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6122:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6123:          .byte   $FF,$FF,$80,$80,$00,$00,$10,$10
  6124:          .byte   $FF,$FF,$C0,$C0,$40,$40,$50,$50
  6125:          .byte   $FF,$FF,$FF,$FF,$20,$20,$30,$30
  6126:          .byte   $FF,$FF,$F0,$F0,$60,$60,$70,$70
  6127:          .byte   $FF,$FF,$90,$90,$A0,$A0,$B0,$B0
  6128:          .byte   $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF
  6129:  
  6130:  LA20D:
  6131:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6132:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6133:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6134:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6135:          .byte   $FF,$FF,$FF,$FF,$08,$08,$08,$08
  6136:          .byte   $00,$00,$00,$00,$01,$01,$01,$01
  6137:          .byte   $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C
  6138:          .byte   $04,$04,$04,$04,$05,$05,$05,$05
  6139:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6140:          .byte   $02,$02,$02,$02,$03,$03,$03,$03
  6141:          .byte   $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F
  6142:          .byte   $06,$06,$06,$06,$07,$07,$07,$07
  6143:          .byte   $FF,$FF,$FF,$FF,$09,$09,$09,$09
  6144:          .byte   $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B
  6145:          .byte   $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D
  6146:          .byte   $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF
  6147:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6148:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6149:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6150:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6151:          .byte   $FF,$FF,$FF,$FF,$08,$08,$08,$08
  6152:          .byte   $00,$00,$00,$00,$01,$01,$01,$01
  6153:          .byte   $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C
  6154:          .byte   $04,$04,$04,$04,$05,$05,$05,$05
  6155:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6156:          .byte   $02,$02,$02,$02,$03,$03,$03,$03
  6157:          .byte   $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F
  6158:          .byte   $06,$06,$06,$06,$07,$07,$07,$07
  6159:          .byte   $FF,$FF,$FF,$FF,$09,$09,$09,$09
  6160:          .byte   $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B
  6161:          .byte   $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D
  6162:          .byte   $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF
  6163:  
  6164:  LA30D:
  6165:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6166:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6167:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6168:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6169:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6170:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6171:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6172:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6173:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6174:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6175:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6176:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6177:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6178:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6179:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6180:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6181:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6182:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6183:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6184:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6185:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6186:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6187:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6188:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6189:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6190:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6191:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6192:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6193:          .byte   $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  6194:          .byte   $FF,$08,$00,$01,$FF,$0C,$04,$05
  6195:          .byte   $FF,$FF,$02,$03,$FF,$0F,$06,$07
  6196:          .byte   $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF
  6197:  
  6198:  LA40D:
  6199:          lda     #MAXTRACK_DOUBLESIDED + 1
  6200:          sta     MAXTRACK_ADJUSTED
  6201:          lda     #$03
  6202:          jsr     LD6D3
  6203:          ldx     #$03
  6204:          lda     #$00
  6205:          sta     L01B2
  6206:          lda     #$F0
  6207:          sta     HINIB
  6208:          sta     JOBS0,x
  6209:          jsr     L9FB6
  6210:          cmp     #$02
  6211:          bcs     LA470
  6212:          ldy     #$03
  6213:  LA42D:
  6214:          lda     #$01
  6215:          sta     TRACK3
  6216:          lda     #$00
  6217:          sta     SECTOR3
  6218:          lda     #$80
  6219:          sta     JOBS0,x
  6220:          jsr     L9FB6
  6221:          cmp     #$02
  6222:          bcc     LA445
  6223:          dey
  6224:          bpl     LA42D
  6225:          bcs     LA470
  6226:  LA445:
  6227:  .if CompileDrive >= DRIVE_1571
  6228:          lda     #$01
  6229:  .else
  6230:          rts
  6231:          nop
  6232:  .endif
  6233:          sta     L01B2
  6234:          lda     #$F0
  6235:          sta     HINIB
  6236:          sta     JOBS0,x
  6237:          jsr     L9FB6
  6238:          cmp     #$02
  6239:          bcs     LA470
  6240:          ldy     #$03
  6241:  LA459:
  6242:          lda     #$24
  6243:          sta     TRACK3
  6244:          lda     #$00
  6245:          sta     SECTOR3
  6246:          lda     #$80
  6247:          sta     JOBS0,x
  6248:          jsr     L9FB6
  6249:          cmp     #$02
  6250:          bcs     LA46D
  6251:          rts
  6252:  LA46D:
  6253:          dey
  6254:          bpl     LA459
  6255:  LA470:
  6256:          ldx     #$00
  6257:          bit     JOBRTN
  6258:          stx     JOBRTN
  6259:          bpl     LA47B
  6260:          rts
  6261:  LA47B:
  6262:          jmp     LE60A
  6263:  LA47E:
  6264:          txa
  6265:          ldx     #$05
  6266:          bne     LA486
  6267:  LA483:
  6268:          txa
  6269:          ldx     #$0D
  6270:  LA486:
  6271:          dex
  6272:          bne     LA486
  6273:          tax
  6274:          rts
  6275:  LA48B:
  6276:          lda     BMPNT
  6277:          sta     TMP1570
  6278:          lda     BMPNT + 1
  6279:          sta     TMP1570 + 1
  6280:          rts
  6281:  
  6282:  LA496:
  6283:          lda     TMP1570
  6284:          sta     BMPNT
  6285:          lda     TMP1570 + 1
  6286:          sta     BMPNT + 1
  6287:          rts
  6288:          ; --------------------
  6289:  
  6290:  LA4A1:
  6291:          ldx     DRVNUM
  6292:  
  6293:          lda     a:NODRV,x
  6294:          beq     LA4AD
  6295:          lda     #ERRORCODE_74_DRIVE_NOT_READY
  6296:  .if CompileDrive >= DRIVE_1571_05
  6297:          jsr     LE645
  6298:  .else
  6299:          jsr     LE648
  6300:  .endif
  6301:  LA4AD:
  6302:          jsr     LF119
  6303:          jsr     LF0DF
  6304:  .if CompileDrive >= DRIVE_1571_05
  6305:          jmp     LA4C2
  6306:  .else
  6307:          lda     WBAM
  6308:  .endif
  6309:          beq     LA4BF
  6310:          ora     #$80
  6311:          sta     WBAM
  6312:          bne     LA4C2
  6313:  LA4BF:
  6314:          jsr     LA58D
  6315:  LA4C2:
  6316:          jsr     LA48B
  6317:          jsr     LA534
  6318:          lda     TRACK
  6319:          sec
  6320:          sbc     #$24
  6321:          tay
  6322:          lda     (BMPNT),y
  6323:          pha
  6324:          jsr     LA496
  6325:          pla
  6326:          rts
  6327:  .if CompileDrive >= DRIVE_1571_05
  6328:          .byte   "DAVID G. SIRACUSA"
  6329:  .elseif CompileDrive >= DRIVE_1571
  6330:  .else
  6331:          FillUntil $A4DD
  6332:          .byte   "STEVE LAM",$0D
  6333:  .endif
  6334:  
  6335:          FillUntil $A4E7
  6336:  
  6337:  LA4E7:
  6338:          lda     TRACK
  6339:          sec
  6340:          sbc     #$24
  6341:          tay
  6342:          lda     SECTOR
  6343:          lsr     a
  6344:          lsr     a
  6345:          lsr     a
  6346:          clc
  6347:          adc     LA5DB,y
  6348:          tay
  6349:          lda     SECTOR
  6350:          and     #$07
  6351:          tax
  6352:          lda     L0146,y
  6353:          and     LEFE9,x
  6354:          php
  6355:          lda     L0146,y
  6356:          plp
  6357:          rts
  6358:  LA508:
  6359:          jsr     LA48B
  6360:          jsr     LA534
  6361:          lda     TRACK
  6362:          sec
  6363:          sbc     #$24
  6364:          tay
  6365:          clc
  6366:          lda     (BMPNT),y
  6367:          adc     #$01
  6368:          sta     (BMPNT),y
  6369:          jmp     LA496
  6370:  LA51E:
  6371:          jsr     LA48B
  6372:          jsr     LA534
  6373:          lda     TRACK
  6374:          sec
  6375:          sbc     #$24
  6376:          tay
  6377:          sec
  6378:          lda     (BMPNT),y
  6379:          sbc     #$01
  6380:          sta     (BMPNT),y
  6381:          jmp     LA496
  6382:  LA534:
  6383:          ldx     #$0D
  6384:          lda     BUF0,x
  6385:          and     #$0F
  6386:          tax
  6387:          lda     TableHighBytesOfBuffers,x
  6388:          sta     BMPNT + 1
  6389:          lda     #$DD
  6390:          sta     BMPNT
  6391:          rts
  6392:  LA545:
  6393:          lda     T0
  6394:          pha
  6395:  .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
  6396:          jsr     LAB8D
  6397:  .endif
  6398:          lda     TRACK
  6399:          sec
  6400:          sbc     #$24
  6401:          tay
  6402:          pha
  6403:  .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
  6404:  .else
  6405:          jsr     LA48B
  6406:  .endif
  6407:          jsr     LA534
  6408:          lda     (BMPNT),y
  6409:          pha
  6410:          lda     #$00
  6411:          sta     T0
  6412:          lda     #$01
  6413:          sta     BMPNT + 1
  6414:          lda     LA5DB,y
  6415:          clc
  6416:          adc     #$46
  6417:          sta     BMPNT
  6418:          ldy     #$02
  6419:  LA56A:
  6420:          ldx     #$07
  6421:  LA56C:
  6422:          lda     (BMPNT),y
  6423:          and     LEFE9,x
  6424:          beq     LA575
  6425:          inc     T0
  6426:  LA575:
  6427:          dex
  6428:          bpl     LA56C
  6429:          dey
  6430:          bpl     LA56A
  6431:          pla
  6432:          cmp     T0
  6433:          beq     LA585
  6434:          lda     #ERRORCODE_71_DIR_ERROR
  6435:          jsr     LE645
  6436:  LA585:
  6437:          pla
  6438:          tay
  6439:          pla
  6440:          sta     T0
  6441:          jmp     LA496
  6442:  LA58D:
  6443:          lda     VBC_PAUNBUF1
  6444:          and     #VBC_PA1_20
  6445:          bne     LA597
  6446:  LA594:
  6447:          jmp     LD58A
  6448:  LA597:
  6449:          lda     MAXTRACK_ADJUSTED
  6450:          cmp     #MAXTRACK_SINGLESIDED + 2
  6451:          bcc     LA594
  6452:          ldx     JOBNUM
  6453:          lda     LSTJOB,x
  6454:          pha
  6455:          jsr     LD58A
  6456:          jsr     LA48B
  6457:          jsr     LEF3A
  6458:          jsr     LF008
  6459:          lda     JOBNUM
  6460:          asl     a
  6461:          tax
  6462:          lda     #$35
  6463:          sta     TRACK0,x
  6464:          ldy     #$68
  6465:  LA5BA:
  6466:          lda     L0146,y
  6467:          sta     (BMPNT),y
  6468:          dey
  6469:          bpl     LA5BA
  6470:          jsr     LA496
  6471:          jsr     LD58A
  6472:          lda     JOBNUM
  6473:          asl     a
  6474:          tax
  6475:          lda     LFE85
  6476:          sta     TRACK0,x
  6477:          jsr     LD586
  6478:          pla
  6479:          ldx     JOBNUM
  6480:          sta     LSTJOB,x
  6481:          rts
  6482:  LA5DB:
  6483:          .byte   $00,$03,$06,$09,$0C,$0F,$12,$15
  6484:          .byte   $18,$1B,$1E,$21,$24,$27,$2A,$2D
  6485:          .byte   $30,$33,$36,$39,$3C,$3F,$42,$45
  6486:          .byte   $48,$4B,$4E,$51,$54,$57,$5A,$5D
  6487:          .byte   $60,$63,$66
  6488:  LA5FE:
  6489:          lda     VBC_PAUNBUF1
  6490:          and     #VBC_PA1_20
  6491:          beq     LA614
  6492:          ldy     #$00
  6493:          ldx     #$00
  6494:          lda     #$01
  6495:          sta     FILTBL
  6496:          jsr     LC312
  6497:          jmp     LE7A8
  6498:  LA614:
  6499:          lda     #$8D
  6500:          jsr     SearchInCmdline
  6501:          jmp     LE7A8
  6502:  
  6503:  Patch1570CallToParseCommandBufferAndExecuteCommand:
  6504:          jsr     ParseCommandBufferAndExecuteCommand
  6505:          jsr     L81B2
  6506:          lda     BITCNT
  6507:          and     #$7F
  6508:          sta     BITCNT
  6509:          jmp     END_Patch1570CallToParseCommandBufferAndExecuteCommand
  6510:          ; -----------------
  6511:  
  6512:  LA62B:
  6513:          lda     #$FF
  6514:          sta     ACLTIM
  6515:          lda     #$06
  6516:          sta     GCRERR
  6517:          rts
  6518:  LA634:
  6519:          bne     LA63D
  6520:          lda     CNTMOTOR1570
  6521:          bne     LA64B
  6522:          beq     LA657
  6523:  LA63D:
  6524:          lda     #$FF
  6525:          sta     CNTMOTOR1570
  6526:          jsr     L8764
  6527:          SET_WPSW_DIRTY
  6528:          bne     LA657
  6529:  LA64B:
  6530:          dec     CNTMOTOR1570
  6531:          bne     LA657
  6532:          lda     DRVST
  6533:          bne     LA657
  6534:          jsr     L8770
  6535:  LA657:
  6536:          jmp     LF9B1
  6537:  
  6538:  PATCH_INIT_BC_1570:
  6539:          lda     #VBC_PB1_1540_DATAOUT
  6540:          sta     VBC_PB1
  6541:          lda     #VBC_PA1_20
  6542:          sta     VBC_PA1
  6543:  .if CompileDrive >= DRIVE_1571CR
  6544:          jmp     PATCH_INIT_CSG5710
  6545:  .else
  6546:          jmp     PATCH_INIT_BC_1570_END
  6547:  .endif
  6548:          ; --------------------------------
  6549:  
  6550:  LA667:
  6551:          lda     VBC_PAUNBUF1
  6552:          and     #VBC_PA1_20
  6553:          bne     LA671
  6554:  LA66E:
  6555:          jmp     LD586
  6556:          ; ----------------------------
  6557:  
  6558:  LA671:
  6559:          lda     MAXTRACK_ADJUSTED
  6560:          cmp     #MAXTRACK_SINGLESIDED + 2
  6561:          bcc     LA66E
  6562:          jsr     LA48B
  6563:          lda     #$00
  6564:          sta     BMPNT
  6565:          ldx     JOBNUM
  6566:          lda     TableHighBytesOfBuffers,x
  6567:          sta     BMPNT + 1
  6568:          lda     #$FF
  6569:  .if CompileDrive >= DRIVE_1571_05
  6570:          jmp     PATCH_LAB72
  6571:  PATCH_LAB72_END:
  6572:  
  6573:  .else
  6574:          sta     JOBRTN
  6575:  .endif
  6576:          lda     JOBNUM
  6577:          asl     a
  6578:          tax
  6579:          lda     #$35
  6580:          sta     TRACK0,x
  6581:          jsr     LD586
  6582:          cmp     #$02
  6583:          ror     a
  6584:          and     #$80
  6585:          eor     #$80
  6586:          sta     L01AF
  6587:          bpl     LA6AC
  6588:          ldy     #$68
  6589:  LA6A4:
  6590:          lda     (BMPNT),y
  6591:          sta     L0146,y
  6592:          dey
  6593:          bpl     LA6A4
  6594:  LA6AC:
  6595:          lda     #$FF
  6596:          sta     JOBRTN
  6597:  
  6598:  LA6B1:
  6599:          lda     JOBNUM
  6600:          asl     a
  6601:          tax
  6602:          lda     LFE85
  6603:          sta     TRACK0,x
  6604:          jsr     LD586
  6605:          cmp     #$02
  6606:          bcc     LA6D1
  6607:          tax
  6608:          lda     #MAXTRACK_SINGLESIDED + 1
  6609:          sta     MAXTRACK_ADJUSTED
  6610:          jsr     LA496
  6611:          txa
  6612:          jsr     LE60A
  6613:          jmp     LD644
  6614:  LA6D1:
  6615:          ldy     #$03
  6616:          lda     (BMPNT),y
  6617:          and     L01AF
  6618:          bmi     LA6DD
  6619:          lda     #$24
  6620:          .byte   ASM_BIT3
  6621:  LA6DD:
  6622:          lda     #MAXTRACK_DOUBLESIDED + 1
  6623:          sta     MAXTRACK_ADJUSTED
  6624:  
  6625:  .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR
  6626:          jmp     LAB24
  6627:  .else
  6628:          jmp     LA496
  6629:  .endif
  6630:  LA6E5:
  6631:          jsr     LD58C
  6632:          pha
  6633:          cmp     #$02
  6634:          bcs     LA736
  6635:          lda     VBC_PAUNBUF1
  6636:          and     #VBC_PA1_20
  6637:          beq     LA736
  6638:          lda     #MAXTRACK_DOUBLESIDED + 1
  6639:          sta     MAXTRACK_ADJUSTED
  6640:          lda     #$FF
  6641:          sta     JOBRTN
  6642:          lda     HEADER
  6643:          pha
  6644:          lda     HEADER + 1
  6645:          pha
  6646:          lda     JOBNUM
  6647:          asl     a
  6648:          tax
  6649:          lda     #$35
  6650:          sta     TRACK0,x
  6651:          lda     #$B0
  6652:  .if CompileDrive >= DRIVE_1571_05
  6653:          jsr     LAADE
  6654:  .else
  6655:          jsr     LD58C
  6656:  .endif
  6657:          cmp     #$02
  6658:          pla
  6659:          tay
  6660:          pla
  6661:          tax
  6662:          bcs     LA724
  6663:          cpx     HEADER
  6664:          bne     LA724
  6665:          cpy     HEADER + 1
  6666:          bne     LA724
  6667:          lda     #$47
  6668:          .byte   ASM_BIT3
  6669:  LA724:
  6670:          lda     #MAXTRACK_SINGLESIDED + 1
  6671:          sta     MAXTRACK_ADJUSTED
  6672:          sty     HEADER + 1
  6673:          stx     HEADER
  6674:          lda     JOBNUM
  6675:          asl     a
  6676:          tax
  6677:          lda     LFE85
  6678:          sta     TRACK0,x
  6679:  LA736:
  6680:          pla
  6681:          rts
  6682:  LA738:
  6683:          jsr     LEF3A
  6684:          lda     VBC_PAUNBUF1
  6685:          and     #VBC_PA1_20
  6686:          beq     LA74C
  6687:          lda     #$00
  6688:          ldy     #$68
  6689:  LA746:
  6690:          sta     L0146,y
  6691:          dey
  6692:          bpl     LA746
  6693:  LA74C:
  6694:          jmp     LF008
  6695:  LA74F:
  6696:          pha
  6697:          lda     VBC_PAUNBUF1
  6698:          and     #VBC_PA1_20
  6699:          beq     LA75F
  6700:          pla
  6701:          cmp     #$24
  6702:          bcc     LA760
  6703:          sbc     #$23
  6704:          .byte   ASM_BIT2
  6705:  LA75F:
  6706:          pla
  6707:  LA760:
  6708:          ldx     LFED6
  6709:          rts
  6710:  
  6711:  LA764:
  6712:          jsr     LF005
  6713:          lda     VBC_PAUNBUF1
  6714:          and     #VBC_PA1_20
  6715:          bne     LA771
  6716:          lda     #$24
  6717:          .byte   ASM_BIT3
  6718:  LA771:
  6719:          lda     #MAXTRACK_DOUBLESIDED + 1
  6720:          sta     MAXTRACK_ADJUSTED
  6721:  
  6722:          jmp     LEE43
  6723:  LA779:
  6724:          lda     VBC_PAUNBUF1
  6725:          and     #VBC_PA1_20
  6726:          bne     LA783
  6727:          jmp     LC8C6
  6728:  LA783:
  6729:          jmp     LA40D
  6730:  
  6731:  LA786:
  6732:          lda     VBC_PA1
  6733:          and     # ~ VBC_PA1_20
  6734:          sta     VBC_PA1
  6735:  
  6736:          jsr     LA483
  6737:  
  6738:          ; also initialize the CIA
  6739:  
  6740:          lda     #CIA_ICR_BW_UNSET | ~ CIA_ICR_BW_SET
  6741:          sta     CIA_ICR
  6742:  
  6743:  .if CompileDrive >= DRIVE_1571CR
  6744:  .else
  6745:          lda     #CIA_CRA_B_ONESHOT
  6746:          sta     CIA_CRA
  6747:  ;       lda     #CIA_CRB_B_ONESHOT      ; same as CIA_CRA_B_ONESHOT, thus, it can be ommitted
  6748:          sta     CIA_CRB
  6749:          lda     #>$0006
  6750:          sta     CIA_TAHI
  6751:          lda     #<$0006
  6752:          sta     CIA_TALO
  6753:  
  6754:          lda     #CIA_CRA_B_START
  6755:          sta     CIA_CRA
  6756:  .endif
  6757:  
  6758:          jsr     L81B2
  6759:          jmp     TestATN
  6760:  
  6761:          FillUntil $A7B3
  6762:  
  6763:  ProcessBus1570:
  6764:  .if CompileDrive = DRIVE_1571_03
  6765:          lda     VBC_PAUNBUF1
  6766:  .else
  6767:          jsr     LAA62
  6768:  .endif
  6769:          and     #VBC_PA1_20
  6770:          beq     LA7BD
  6771:          jmp     L80CE
  6772:  LA7BD:
  6773:          jmp     ProcessBus
  6774:  
  6775:  PATCH_ShortReset:
  6776:          ; this is the actual patch
  6777:          sei                                     ; disallow interrupts --> blocking job loop
  6778:  
  6779:          ldx     #<SP_END                        ; set SP to $0145
  6780:          txs
  6781:  
  6782:          jmp     PATCH_ShortReset_END            ; return to the short reset routine
  6783:  
  6784:  LA7C7:
  6785:  .if CompileDrive >= DRIVE_1571
  6786:          lda     VBC_PAUNBUF1
  6787:  .else
  6788:          jmp     LA7CE
  6789:  .endif
  6790:          and     #VBC_PA1_20
  6791:  LA7CC:
  6792:          bne     LA7D7
  6793:  LA7CE:
  6794:          ldy     #$03
  6795:          lda     #$00
  6796:          sta     (BMPNT),y
  6797:          jmp     LEEB7
  6798:  LA7D7:
  6799:          lda     MAXTRACK_ADJUSTED
  6800:          cmp     #MAXTRACK_SINGLESIDED + 2
  6801:          bcc     LA7CE
  6802:          ldy     #$01
  6803:          ldx     #$00
  6804:  LA7E2:
  6805:          cpy     #$12
  6806:          beq     LA81A
  6807:          txa
  6808:          pha
  6809:          lda     #$00
  6810:          sta     T0
  6811:          sta     T1
  6812:          sta     T2
  6813:          lda     L9409 + 34,y
  6814:          tax
  6815:  LA7F4:
  6816:          sec
  6817:          rol     T0
  6818:          rol     T1
  6819:          rol     T2
  6820:          dex
  6821:          bne     LA7F4
  6822:          pla
  6823:          tax
  6824:          lda     T0
  6825:          sta     L0146,x
  6826:          lda     T1
  6827:          sta     L0147,x
  6828:          lda     T2
  6829:          sta     L0148,x
  6830:          inx
  6831:          inx
  6832:          inx
  6833:          cpx     #$33
  6834:          bne     LA81A
  6835:          inx
  6836:          inx
  6837:          inx
  6838:          iny
  6839:  LA81A:
  6840:          iny
  6841:          cpy     #$24
  6842:          bcc     LA7E2
  6843:          jsr     LEEB7
  6844:          ldy     #$03
  6845:          lda     #$80
  6846:          sta     (BMPNT),y
  6847:          ldy     #$FF
  6848:          ldx     #$22
  6849:  LA82C:
  6850:          lda     L942C,x
  6851:          sta     (BMPNT),y
  6852:          dey
  6853:          dex
  6854:          bpl     LA82C
  6855:          ldy     #$EE
  6856:          lda     #$00
  6857:          sta     (BMPNT),y
  6858:          jmp     LD075
  6859:  LA83E:
  6860:          lda     VBC_PAUNBUF1
  6861:          and     #VBC_PA1_20
  6862:          bne     LA84B
  6863:  LA845:
  6864:          jsr     LEFCF
  6865:          jmp     LEF62
  6866:  LA84B:
  6867:          lda     TRACK
  6868:          cmp     #$24
  6869:          bcc     LA845
  6870:          jsr     LA4A1
  6871:          jsr     LA4E7
  6872:          bne     LA872
  6873:          ora     LEFE9,x
  6874:          sta     L0146,y
  6875:          jsr     LEF88
  6876:          jsr     LA508
  6877:          lda     TRACK
  6878:          cmp     #$35
  6879:          beq     LA873
  6880:          lda     DRVNUM
  6881:          asl     a
  6882:          tax
  6883:          jmp     LEF7F
  6884:  LA872:
  6885:          sec
  6886:  LA873:
  6887:          rts
  6888:  LA874:
  6889:          lda     VBC_PAUNBUF1
  6890:          and     #VBC_PA1_20
  6891:          bne     LA881
  6892:  LA87B:
  6893:          jsr     LEFCF
  6894:          jmp     LEF96
  6895:  LA881:
  6896:          lda     TRACK
  6897:          cmp     #$24
  6898:          bcc     LA87B
  6899:          jsr     LA4A1
  6900:          jsr     LA4E7
  6901:          beq     LA8A8
  6902:          eor     LEFE9,x
  6903:          sta     L0146,y
  6904:          jsr     LEF88
  6905:          jsr     LA51E
  6906:          lda     TRACK
  6907:          cmp     #$35
  6908:          beq     LA8A8
  6909:          lda     DRVNUM
  6910:          asl     a
  6911:          tax
  6912:          jmp     LEFB2
  6913:  LA8A8:
  6914:          rts
  6915:  LA8A9:
  6916:          lda     VBC_PAUNBUF1
  6917:          and     #VBC_PA1_20
  6918:          bne     LA8B6
  6919:  LA8B0:
  6920:          jsr     LF011
  6921:          jmp     LF1FD
  6922:  LA8B6:
  6923:          lda     TRACK
  6924:          cmp     #$24
  6925:          bcc     LA8B0
  6926:          jsr     LA4A1
  6927:          jsr     LA545
  6928:          lda     L942C,y
  6929:          sta     LSTSEC
  6930:  LA8C8:
  6931:          lda     SECTOR
  6932:          cmp     LSTSEC
  6933:          bcs     LA8D8
  6934:          jsr     LA4E7
  6935:          bne     LA8DA
  6936:          inc     SECTOR
  6937:          bne     LA8C8
  6938:  LA8D8:
  6939:          lda     #$00
  6940:  LA8DA:
  6941:          rts
  6942:  LA8DB:
  6943:          lda     VBC_PAUNBUF1
  6944:          and     #VBC_PA1_20
  6945:          bne     LA8E8
  6946:  LA8E2:
  6947:          lda     T0
  6948:          pha
  6949:          jmp     LF130
  6950:  LA8E8:
  6951:          lda     TRACK
  6952:          cmp     #$24
  6953:          bcc     LA8E2
  6954:          cmp     #$35
  6955:          beq     LA900
  6956:          lda     T0
  6957:          pha
  6958:          jsr     LA4A1
  6959:          tay
  6960:          pla
  6961:          sta     T0
  6962:          tya
  6963:          jmp     LF138
  6964:  LA900:
  6965:          lda     #$00
  6966:          jmp     LF138
  6967:  LA905:
  6968:          lda     VBC_PAUNBUF1
  6969:          and     #VBC_PA1_20
  6970:          bne     LA912
  6971:  LA90C:
  6972:          jsr     LF011
  6973:          jmp     LF1C7
  6974:  LA912:
  6975:          lda     TRACK
  6976:          cmp     #$24
  6977:          bcc     LA90C
  6978:          jsr     LA4A1
  6979:          jmp     LF1C9
  6980:  LA91E:
  6981:          lda     VBC_PAUNBUF1
  6982:          and     #VBC_PA1_20
  6983:          bne     LA92B
  6984:  LA925:
  6985:          jsr     LF011
  6986:          jmp     LF1E2
  6987:  LA92B:
  6988:          lda     TRACK
  6989:          cmp     #$24
  6990:          bcc     LA925
  6991:          jsr     LA4A1
  6992:          jmp     LF1E4
  6993:  LA937:
  6994:          lda     VBC_PAUNBUF1
  6995:          and     #VBC_PA1_20
  6996:          bne     LA941
  6997:  LA93E:
  6998:          jmp     LF220
  6999:  LA941:
  7000:          lda     MAXTRACK_ADJUSTED
  7001:          cmp     #MAXTRACK_SINGLESIDED + 2
  7002:          bcc     LA93E
  7003:          lda     TRACK
  7004:          cmp     #$24
  7005:          bcc     LA93E
  7006:          jmp     LA545
  7007:  LA951:
  7008:          sta     NDBL,x
  7009:          lda     VBC_PAUNBUF1
  7010:          and     #VBC_PA1_20
  7011:          beq     LA97E
  7012:          lda     MAXTRACK_ADJUSTED
  7013:          cmp     #MAXTRACK_SINGLESIDED + 2
  7014:          bcc     LA97E
  7015:          jsr     LA48B
  7016:          jsr     LA534
  7017:          ldy     #$22
  7018:          lda     NDBL
  7019:  LA96D:
  7020:          clc
  7021:          adc     (BMPNT),y
  7022:          sta     NDBL
  7023:          bcc     LA978
  7024:          inc     NDBH
  7025:  LA978:
  7026:          dey
  7027:          bpl     LA96D
  7028:          jmp     LA496
  7029:  LA97E:
  7030:          rts
  7031:  LA97F:
  7032:          sta     RECL,x
  7033:          sta     RECH,x
  7034:          lda     #$00
  7035:          sta     LSTCHR,x
  7036:          rts
  7037:  LA989:
  7038:          jsr     LA40D
  7039:          ldy     #$00
  7040:          sty     JOBRTN
  7041:          rts
  7042:  
  7043:  emptya992:
  7044:          FillUntil $A99D
  7045:  
  7046:  LA99D:
  7047:          lda     #$00
  7048:          sta     a:NODRV,x
  7049:          jmp     LC1B7
  7050:  LA9A5:
  7051:          tya
  7052:          sta     a:NODRV,x
  7053:          jmp     LC664
  7054:  LA9AC:
  7055:          lda     VBC_PAUNBUF1
  7056:          and     #VBC_PA1_20
  7057:          beq     LA9B6
  7058:          jmp     L815A
  7059:  LA9B6:
  7060:          jmp     LE8D7
  7061:  LA9B9:
  7062:          pha
  7063:          stx     JOBNUM
  7064:          lda     VBC_PAUNBUF1
  7065:          and     #VBC_PA1_20
  7066:          beq     LA9D2
  7067:          bit     BITCNT
  7068:          bpl     LA9D2
  7069:          lda     BITCNT
  7070:          and     #$7F
  7071:          sta     BITCNT
  7072:          pla
  7073:          tax
  7074:          jmp     L9199
  7075:  LA9D2:
  7076:          jmp     LE60D
  7077:  
  7078:  LA9D5:
  7079:          pha
  7080:          lda     VBC_PAUNBUF1
  7081:          and     #VBC_PA1_20
  7082:          beq     @LA9F4
  7083:          bit     BITCNT
  7084:          bpl     @LA9F4
  7085:          lda     BITCNT
  7086:          and     #$7F
  7087:          sta     BITCNT
  7088:          sei                                     ; disallow interrupts --> blocking job loop
  7089:          ldx     #$02
  7090:          jsr     L9228
  7091:          lda     #$00
  7092:          sta     SA
  7093:          jsr     LDAC0
  7094:  @LA9F4:
  7095:          pla
  7096:          jmp     LE645
  7097:  LA9F8:
  7098:          lda     #$00
  7099:          sta     DRVST
  7100:          lda     VDC_PCR2
  7101:          jmp     LF266
  7102:  
  7103:  READ_CMDBUF_BUT_SPECIAL_CASE_U0:
  7104:          ; first, check if the command is "U0"
  7105:          lda     CMDBUF
  7106:          cmp     #'U'
  7107:          bne     @NoU0                   ; first char is not 'U' --> read next char from command buffer
  7108:          lda     CMDBUF + 1
  7109:          cmp     #'0'
  7110:          beq     @ReturnAsc_NUL          ; 2nd char is '0' --> it is 'U0' --> return ASC_NUL.
  7111:  @NoU0:
  7112:          ; read next char from command buffer
  7113:          lda     CMDBUF,y
  7114:  
  7115:          .byte   ASM_BIT3
  7116:  
  7117:  @ReturnAsc_NUL:
  7118:          lda     #$00
  7119:          rts
  7120:  
  7121:  LAA17:
  7122:          ldx     DRVNUM
  7123:          lda     a:NODRV,x
  7124:          rts
  7125:  LAA1D:
  7126:          sta     WPSW,x
  7127:          sta     a:NODRV,x
  7128:          jmp     LD075
  7129:  LAA25:
  7130:          ldx     DRVNUM
  7131:          lda     a:NODRV,x
  7132:          jmp     LF01B
  7133:          ; -----------------
  7134:  
  7135:          ; before executing the U command, make sure it is not
  7136:          ; the IRQ vector.
  7137:          ; The 6502 would behave erratically, as the IRQ requires
  7138:          ; the stack to contain a status register, which it will not
  7139:          ; have in the case of a JMP (or JSR, which was used to call
  7140:          ; us).
  7141:          ; Thus, in this case, execute a BRK instead.
  7142:          ;
  7143:  Patch1570ExecutionOfUCommand:
  7144:  
  7145:          ; compare address of U command
  7146:  
  7147:          lda     IP
  7148:          cmp     #<IRQ
  7149:          bne     @NoIRQVector
  7150:          lda     IP + 1
  7151:          cmp     #>IRQ
  7152:          bne     @NoIRQVector
  7153:  
  7154:          ; if we reach here, it is the IRQ vector
  7155:          ; call it via BRK
  7156:          brk
  7157:          nop
  7158:  
  7159:          rts
  7160:  
  7161:  @NoIRQVector:
  7162:          jmp     (IP)
  7163:          ; -----------------
  7164:  
  7165:  .if CompileDrive >= DRIVE_1571_05
  7166:  LAA3F:
  7167:          cmp     #$02
  7168:          bcc     LAA4A
  7169:          cmp     #$0F
  7170:          beq     LAA4A
  7171:          jmp     LD36B
  7172:  LAA4A:
  7173:          jmp     LD373
  7174:  LAA4D:
  7175:          sta     FTNUM
  7176:          jsr     L877C
  7177:          jsr     LA989
  7178:          pha
  7179:          jsr     L8788
  7180:          pla
  7181:          rts
  7182:  LAA5B:
  7183:          lda     PATTYP
  7184:          and     #$07
  7185:          cmp     #$02
  7186:          rts
  7187:  LAA62:
  7188:          lda     VBC_PAUNBUF1
  7189:          bit     VBC_PA1
  7190:          rts
  7191:  LAA69:
  7192:          lda     VBC_PAUNBUF1
  7193:          and     #VBC_PA1_20
  7194:          bne     LAA73
  7195:          jmp     LEEB7
  7196:  LAA73:
  7197:          jmp     LA7CC
  7198:  LAA76:
  7199:          lda     #$02
  7200:          sta     VBC_T1HC1
  7201:          rts
  7202:  
  7203:  PATCH_INIT_CSG5710:
  7204:  .if CompileDrive >= DRIVE_1571CR
  7205:          lda     #$FB
  7206:          sta     CSG5710_4010 + 4
  7207:          lda     #$FE
  7208:          sta     CSG5710_4010 + 5
  7209:          lda     #$A1
  7210:          sta     CSG5710_4010 + 0
  7211:          lda     #$C2
  7212:          sta     CSG5710_4010 + 1
  7213:          lda     #$0A
  7214:          sta     CSG5710_4010 + 6
  7215:          lda     #$14
  7216:          sta     CSG5710_4010 + 7
  7217:          lda     #$02
  7218:          sta     CSG5710_4010 + 2
  7219:          lda     #$03
  7220:          sta     CSG5710_4010 + 3
  7221:          lda     #$40
  7222:          sta     L01B4
  7223:          jmp     PATCH_INIT_BC_1570_END
  7224:  LAAAD:
  7225:          lda     L01B3
  7226:          bne     LAAB6
  7227:  .else
  7228:          lda     L01B3
  7229:          bne     LAA84
  7230:          jmp     L8EC6
  7231:  LAA84:
  7232:          clc
  7233:          rts
  7234:  
  7235:  LAA86:
  7236:          tay
  7237:          cmp     #$56
  7238:          bne     LAAA8
  7239:          sei                                     ; disallow interrupts --> blocking job loop
  7240:          lda     VBC_PAUNBUF1
  7241:          and     #VBC_PA1_20
  7242:          bne     LAA96
  7243:  LAA93:
  7244:          jmp     L9021
  7245:  LAA96:
  7246:          lda     CMDBUF + 4
  7247:          cmp     #$31
  7248:          beq     LAAA1
  7249:          cmp     #$30
  7250:          bne     LAA93
  7251:  LAAA1:
  7252:          and     #$CF
  7253:          sta     L01B3
  7254:          cli                                     ; allow processing of job loop
  7255:          rts
  7256:  LAAA8:
  7257:          cpy     #$04
  7258:          jmp     L9006
  7259:  LAAAD:
  7260:          lda     L01B3
  7261:          bne     LAAB6
  7262:  .endif
  7263:          lda     JOBS0,y
  7264:          .byte   ASM_BIT3
  7265:  LAAB6:
  7266:          lda     #$30
  7267:          eor     #$30
  7268:          sta     JOBS0,y
  7269:          bne     LAAC2
  7270:          jmp     L99B5
  7271:  LAAC2:
  7272:          jmp     L944F
  7273:  LAAC5:
  7274:          jsr     L85F9
  7275:          lda     #$20
  7276:          bit     HINIB
  7277:          beq     LAADD
  7278:          ldy     #$00
  7279:  LAAD0:
  7280:          lda     CMDBUF + 11,y
  7281:          sta     CTRACK
  7282:          jsr     L85F9
  7283:          iny
  7284:          cpy     MYPA
  7285:          bne     LAAD0
  7286:  LAADD:
  7287:          rts
  7288:  LAADE:
  7289:          ldx     JOBNUM
  7290:          ora     #$08
  7291:          sta     JOBS0,x
  7292:          jmp     L9FB6
  7293:  LAAE7:
  7294:          jsr     LAAED
  7295:          jmp     CommandEnd
  7296:  LAAED:
  7297:          jmp     (IP)
  7298:  LAAF0:
  7299:          cmp     #$03
  7300:          bcs     LAAF9
  7301:          lda     #ERRORCODE_72_DISK_FULL
  7302:          jsr     SetErrorCode
  7303:  LAAF9:
  7304:          lda     #$01
  7305:          rts
  7306:  Convert_Bin_To_BCD_Patch_157x:
  7307:          php
  7308:          sei                                     ; disallow interrupts --> blocking job loop
  7309:  
  7310:          CONVERT_BIN_TO_BCD
  7311:  
  7312:          plp
  7313:          jmp     OutputBCDIntoBUFTABERR
  7314:  
  7315:  LAB10:
  7316:          php
  7317:          sei                                     ; disallow interrupts --> blocking job loop
  7318:          sta     CIA_SDR
  7319:          lda     BITCNT
  7320:          eor     #$04
  7321:          sta     BITCNT
  7322:          lda     #CIA_ICR_B_SP
  7323:  LAB1D:
  7324:          bit     CIA_ICR
  7325:          beq     LAB1D
  7326:          plp
  7327:          rts
  7328:  
  7329:  LAB24:
  7330:          lda     BAM + 11
  7331:          cmp     #$25
  7332:          bcc     LAB6F
  7333:          lda     T0
  7334:          pha
  7335:          lda     TRACK
  7336:          pha
  7337:          ldy     #$00
  7338:          sty     TRACK
  7339:  LAB35:
  7340:          lda     #$00
  7341:          sta     T0
  7342:          lda     #$01
  7343:          sta     BMPNT + 1
  7344:          lda     LA5DB,y
  7345:          clc
  7346:          adc     #$46
  7347:          sta     BMPNT
  7348:          ldy     #$02
  7349:  LAB47:
  7350:          ldx     #$07
  7351:  LAB49:
  7352:          lda     (BMPNT),y
  7353:          and     LEFE9,x
  7354:          beq     LAB52
  7355:          inc     T0
  7356:  LAB52:
  7357:          dex
  7358:          bpl     LAB49
  7359:          dey
  7360:          bpl     LAB47
  7361:          jsr     LA534
  7362:          lda     T0
  7363:          ldy     TRACK
  7364:          sta     (BMPNT),y
  7365:          inc     TRACK
  7366:          ldy     TRACK
  7367:          cpy     #$23
  7368:          bcc     LAB35
  7369:          pla
  7370:          sta     TRACK
  7371:          pla
  7372:          sta     T0
  7373:  LAB6F:
  7374:          jmp     LA496
  7375:          ; --------------
  7376:  
  7377:  PATCH_LAB72:
  7378:          sta     JOBRTN
  7379:          pha
  7380:          lda     L01B6
  7381:          beq     LAB84
  7382:          lda     #$00
  7383:          sta     L01B6
  7384:          pla
  7385:          jmp     PATCH_LAB72_END
  7386:          ; --------------
  7387:  
  7388:  LAB84:
  7389:          lda     #$80
  7390:          sta     L01AF
  7391:          pla
  7392:          jmp     LA6B1
  7393:          ; --------------
  7394:  
  7395:  LAB8D:
  7396:          jsr     LA48B
  7397:          jsr     LAB24
  7398:          jmp     LA48B
  7399:  
  7400:  PATCH_WPSW:
  7401:          lda     #$01
  7402:          sta     WPSW
  7403:          sta     L01B6
  7404:          rts
  7405:  
  7406:  .if CompileDrive >= DRIVE_1571CR
  7407:  .else
  7408:  LA667_PATCH:
  7409:          lda     #$01
  7410:          sta     L01B6
  7411:          jmp     LA667
  7412:          ; ---------------------
  7413:  .endif
  7414:  
  7415:  LABA6:
  7416:          lda     #$01
  7417:          sta     WPSW
  7418:          sta     L01B6
  7419:          jmp     LD042
  7420:  
  7421:   .if CompileDrive >= DRIVE_1571CR
  7422:  
  7423:  LABA7:
  7424:          tay
  7425:          cmp     #$56
  7426:          bne     LABDF
  7427:          sei                                     ; disallow interrupts --> blocking job loop
  7428:          lda     VBC_PAUNBUF1
  7429:          and     #VBC_PA1_20
  7430:          bne     LABB7
  7431:  LABB4:
  7432:          jmp     L9021
  7433:  LABB7:
  7434:          lda     CMDBUF + 4
  7435:          cmp     #$31
  7436:          beq     LABC2
  7437:          cmp     #$30
  7438:          bne     LABB4
  7439:  LABC2:
  7440:          and     #$CF
  7441:          sta     L01B3
  7442:          pha
  7443:          lda     L01B4
  7444:          and     #$BF
  7445:          sta     L01B4
  7446:          pla
  7447:          asl     a
  7448:          asl     a
  7449:          asl     a
  7450:          asl     a
  7451:          asl     a
  7452:          asl     a
  7453:          ora     L01B4
  7454:          sta     L01B4
  7455:          cli                                     ; allow processing of job loop
  7456:          rts
  7457:  LABDF:
  7458:          cpy     #$04
  7459:          jmp     L9006
  7460:  
  7461:  LA667_PATCH:
  7462:          lda     #$01
  7463:          sta     L01B6
  7464:          jmp     LA667
  7465:          ; ---------------------
  7466:  
  7467:  LABEC:
  7468:          lda     #$5A
  7469:  LABEE:
  7470:          pha
  7471:          jsr     LAC38
  7472:          pla
  7473:          tay
  7474:          bcs     LAC02
  7475:          lda     WD177x_SECTOR
  7476:          cmp     CSG5710_4010 + 5
  7477:          beq     LAC0C
  7478:          dey
  7479:          tya
  7480:          bne     LABEE
  7481:  LAC02:
  7482:          ldx     #$03
  7483:          .byte   ASM_BIT3
  7484:  LAC05:
  7485:          ldx     #$09
  7486:          stx     L01B0
  7487:          sec
  7488:          rts
  7489:  LAC0C:
  7490:          ldx     #$00
  7491:  LAC0E:
  7492:          bit     WD177x_TRACK
  7493:          bpl     LAC0E
  7494:          lda     WD177x_SECTOR
  7495:          sta     STAB,x
  7496:          inx
  7497:          cpx     #$06
  7498:          bcc     LAC0E
  7499:          lda     #$18
  7500:          sta     WD177x_TRACK
  7501:  LAC22:
  7502:          bit     WD177x_TRACK
  7503:          bpl     LAC22
  7504:          lda     WD177x_SECTOR
  7505:          lda     WD177x_TRACK
  7506:          and     #$20
  7507:          bne     LAC05
  7508:          ldx     #$00
  7509:          stx     L01B0
  7510:          clc
  7511:          rts
  7512:  LAC38:
  7513:          lda     CSG5710_5
  7514:          and     #$7F
  7515:          sta     CSG5710_5
  7516:          lda     L01B4
  7517:          and     #$20
  7518:          asl     a
  7519:          asl     a
  7520:          ora     CSG5710_5
  7521:          sta     CSG5710_5
  7522:          lda     #$00
  7523:          sta     WD177x_TRACK
  7524:          lda     CSG5710_4010 + 0
  7525:          sta     CSG5710_4
  7526:          lda     CSG5710_4010 + 6
  7527:          sta     WD177x_DATA
  7528:          lda     #$10
  7529:          sta     WD177x_TRACK
  7530:          lda     WD177x_SECTOR
  7531:          nop
  7532:          nop
  7533:          nop
  7534:          ldx     #$00
  7535:          ldy     #$32
  7536:  LAC6D:
  7537:          bit     WD177x_TRACK
  7538:          bvs     LAC7A
  7539:          dex
  7540:          bne     LAC6D
  7541:          dey
  7542:          bne     LAC6D
  7543:          sec
  7544:          rts
  7545:  LAC7A:
  7546:          ldy     #$00
  7547:          nop
  7548:          nop
  7549:          nop
  7550:          nop
  7551:          nop
  7552:          nop
  7553:          lda     WD177x_SECTOR
  7554:          nop
  7555:          nop
  7556:          nop
  7557:          nop
  7558:          nop
  7559:          nop
  7560:  LAC8B:
  7561:          bit     WD177x_TRACK
  7562:          bpl     LAC8B
  7563:          lda     WD177x_SECTOR
  7564:          iny
  7565:          bvs     LAC8B
  7566:          cpy     #$03
  7567:          bne     LAC38
  7568:          clc
  7569:          rts
  7570:  LAC9C:
  7571:          lda     #$B4
  7572:  LAC9E:
  7573:          pha
  7574:          jsr     LABEC
  7575:          pla
  7576:          tay
  7577:          php
  7578:          lda     STAB + 2
  7579:          cmp     SECTR
  7580:          beq     LACB7
  7581:          plp
  7582:          dey
  7583:          tya
  7584:          bne     LAC9E
  7585:          ldx     #$02
  7586:          stx     L01B0
  7587:          sec
  7588:          rts
  7589:  LACB7:
  7590:          plp
  7591:          rts
  7592:  LACB9:
  7593:          ldx     #$16
  7594:  LACBB:
  7595:          bit     WD177x_TRACK
  7596:          bpl     LACBB
  7597:          lda     WD177x_SECTOR
  7598:          dex
  7599:          bne     LACBB
  7600:          rts
  7601:  LACC7:
  7602:          lda     REVCNT
  7603:          asl     a
  7604:          sta     TMP
  7605:  LACCC:
  7606:          jsr     L8EC6
  7607:          jsr     LAC9C
  7608:          bcs     LAD21
  7609:          jsr     LAC38
  7610:          bcs     LAD21
  7611:          ldy     #$00
  7612:          ldx     WORK
  7613:  LACDD:
  7614:          bit     WD177x_TRACK
  7615:          bpl     LACDD
  7616:          lda     WD177x_SECTOR
  7617:          cmp     (BUFPNT),y
  7618:          bne     LAD21
  7619:          cpy     RLINDX
  7620:          beq     LACF1
  7621:          iny
  7622:          bne     LACDD
  7623:  LACF1:
  7624:          iny
  7625:          dex
  7626:          beq     LACFA
  7627:          inc     BUFPNT + 1
  7628:          jmp     LACDD
  7629:  LACFA:
  7630:          bit     WD177x_TRACK
  7631:          bpl     LACFA
  7632:          lda     WD177x_SECTOR
  7633:  LAD02:
  7634:          bit     WD177x_TRACK
  7635:          bpl     LAD02
  7636:          lda     WD177x_SECTOR
  7637:          lda     #$18
  7638:          sta     WD177x_TRACK
  7639:  LAD0F:
  7640:          bit     WD177x_TRACK
  7641:          bpl     LAD0F
  7642:          lda     WD177x_SECTOR
  7643:          lda     WD177x_TRACK
  7644:          and     #$20
  7645:          beq     LAD28
  7646:          ldx     #$05
  7647:          .byte   ASM_BIT3
  7648:  LAD21:
  7649:          ldx     #$07
  7650:          dec     TMP
  7651:          bne     LACCC
  7652:          .byte   ASM_BIT3
  7653:  LAD28:
  7654:          ldx     #$00
  7655:          stx     L01B0
  7656:          rts
  7657:  LAD2E:
  7658:          lda     REVCNT
  7659:          asl     a
  7660:          sta     TMP
  7661:  LAD33:
  7662:          jsr     LAC9C
  7663:          bcs     LAD86
  7664:          jsr     LAC38
  7665:          bcs     LAD86
  7666:          ldy     #$00
  7667:          ldx     WORK
  7668:  LAD41:
  7669:          bit     WD177x_TRACK
  7670:          bpl     LAD41
  7671:          lda     WD177x_SECTOR
  7672:          cmp     CMDBUF + 10
  7673:          bne     LAD86
  7674:          cpy     RLINDX
  7675:          beq     LAD56
  7676:          iny
  7677:          bne     LAD41
  7678:  LAD56:
  7679:          iny
  7680:          dex
  7681:          beq     LAD5F
  7682:          inc     BUFPNT + 1
  7683:          jmp     LAD41
  7684:  LAD5F:
  7685:          bit     WD177x_TRACK
  7686:          bpl     LAD5F
  7687:          lda     WD177x_SECTOR
  7688:  LAD67:
  7689:          bit     WD177x_TRACK
  7690:          bpl     LAD67
  7691:          lda     WD177x_SECTOR
  7692:          lda     #$18
  7693:          sta     WD177x_TRACK
  7694:  LAD74:
  7695:          bit     WD177x_TRACK
  7696:          bpl     LAD74
  7697:          lda     WD177x_SECTOR
  7698:          lda     WD177x_TRACK
  7699:          and     #$20
  7700:          beq     LAD8D
  7701:          ldx     #$05
  7702:          .byte   ASM_BIT3
  7703:  LAD86:
  7704:          ldx     #$07
  7705:          dec     TMP
  7706:          bne     LAD33
  7707:          .byte   ASM_BIT3
  7708:  LAD8D:
  7709:          ldx     #$00
  7710:          stx     L01B0
  7711:          rts
  7712:  LAD93:
  7713:          php
  7714:          sei                                     ; disallow interrupts --> blocking job loop
  7715:          jsr     L89EF
  7716:          bit     HINIB
  7717:          bpl     LADA4
  7718:          lda     CMDBUF + 3
  7719:          sta     NMIFLG
  7720:          jsr     L87BA
  7721:  LADA4:
  7722:          lda     #$00
  7723:          sta     MYPA
  7724:          jsr     L89E8
  7725:          ldx     L01B0
  7726:          cpx     #$02
  7727:          bcs     LADD1
  7728:          lda     STAB + 2
  7729:          sta     ICMD
  7730:  LADB6:
  7731:          jsr     L89E8
  7732:          lda     STAB + 2
  7733:          ldy     MYPA
  7734:          sta     CMDBUF + 11,y
  7735:          inc     MYPA
  7736:          cpy     #$1F
  7737:          bcs     LADD1
  7738:          cmp     ICMD
  7739:          bne     LADB6
  7740:          lda     STAB
  7741:          sta     NMIFLG
  7742:          ldx     #$00
  7743:          .byte   ASM_BIT3
  7744:  LADD1:
  7745:          ldx     #$02
  7746:          stx     L01B0
  7747:          plp
  7748:          rts
  7749:   .endif
  7750:  .elseif CompileDrive >= DRIVE_1571
  7751:  .else
  7752:  LAA3F:
  7753:          cmp     #$02
  7754:          bcc     LAA4A
  7755:          cmp     #$0F
  7756:          beq     LAA4A
  7757:          jmp     LD36B
  7758:  LAA4A:
  7759:          jmp     LD373
  7760:  LAA4D:
  7761:          sta     FTNUM
  7762:          jsr     L877C
  7763:          jsr     LA989
  7764:          pha
  7765:          jsr     L8788
  7766:          pla
  7767:          rts
  7768:  LAA5B:
  7769:          lda     PATTYP
  7770:          and     #$07
  7771:          cmp     #$02
  7772:          rts
  7773:  LAA62:
  7774:          lda     VBC_PAUNBUF1
  7775:          bit     VBC_PA1
  7776:          rts
  7777:  .endif
  7778:  
  7779:          FillUntil $BF00
  7780:  
  7781:          jmp     L9D88
  7782:          jmp     L9DDE
  7783:          jmp     LF2B0
  7784:          jmp     L92BA
  7785:          jmp     LF393
  7786:          jmp     L93D1
  7787:          jmp     LF969
  7788:          jmp     L99B5
  7789:          jmp     LFE00
  7790:          jmp     LF934
  7791:          jmp     LF556
  7792:          jmp     L9754
  7793:          jmp     LF8E0
  7794:          jmp     L9965
  7795:          jmp     LF5E9
  7796:          jmp     LF7E6
  7797:          jmp     L98D9
  7798:          jmp     LA483
  7799:          jmp     LFEF3
  7800:          jmp     LA47E
  7801:          jmp     LF005
  7802:          jmp     LF0D1
  7803:          jmp     ParseCommandBufferAndExecuteCommand
  7804:          jmp     SearchInCmdline
  7805:          jmp     LC2B3
  7806:          jmp     LC2DC
  7807:          jmp     L86E6
  7808:          jmp     L8764
  7809:          jmp     L8770
  7810:  .if CompileDrive >= DRIVE_1571_05
  7811:          lda     L808E
  7812:  .else
  7813:          jmp     L808E
  7814:  .endif
  7815:          jmp     LCF1E
  7816:          jmp     LD7B4
  7817:          jmp     LDAC0
  7818:          jmp     LE60A
  7819:          jmp     L9080
  7820:          jmp     L924E
  7821:          jmp     LF259
  7822:          jmp     LF99C
  7823:          jmp     L99CA
  7824:          ; ------------
  7825:  
  7826:          ; @@@ TODO This is no routine, what do they want here?
  7827:  
  7828:  .if CompileDrive >= DRIVE_1571_05
  7829:          lda     $FE95
  7830:  .else
  7831:          jmp     $FE95
  7832:  .endif
  7833:  
  7834:  emptybf78:
  7835:  
  7836:          FillUntil $bf96
  7837:          .byte   $C8,$86
  7838:          FillUntil $C000
  7839:  
  7840:  .else
  7841:          * = $C000
  7842:  .endif
  7843:  
  7844:  .macro WRITE_55_TIMES times
  7845:          lda     VDC_PCR2
  7846:          and     # ~ VIA_PCR_B_CB2_MASK
  7847:          ora     #VIA_PCR_B_CB2_OUTPUT_LOW
  7848:          sta     VDC_PCR2
  7849:  
  7850:          lda     #$FF
  7851:          sta     VDC_DDRA2
  7852:  
  7853:          lda     #$55
  7854:          sta     VDC_PA2
  7855:  
  7856:          ldx     #>times
  7857:          ldy     #<times
  7858:  :
  7859:  bvc     :-
  7860:          clv
  7861:          dey
  7862:  bne     :-
  7863:          dex
  7864:  bne     :-
  7865:  .endmacro
  7866:  
  7867:  LC000:
  7868:          .byte   DRIVE_CHKSUM_C000
  7869:  
  7870:  .if CompileDrive >= DRIVE_1571_05
  7871:  
  7872:          .byte "(C)1985 COMMODORE ELECTRONICS LTD., "
  7873:          .byte "ALL RIGHTS RESERVED"
  7874:  
  7875:  LC038:
  7876:          and     # ~ VDC_PB2_STEPPER
  7877:          ora     TMP
  7878:          sta     VDC_PB2
  7879:  LC03F:
  7880:          lda     VDC_PCR2
  7881:          and     # ~ VIA_PCR_B_CA2_INPUT_NEG
  7882:          sta     VDC_PCR2
  7883:          rts
  7884:  
  7885:  LC048:
  7886:          .byte   $29,$1F,$19,$12
  7887:  
  7888:  LC04C:
  7889:          FillCount 17,$60
  7890:          FillCount 7,'@'
  7891:          .byte "      "
  7892:          FillCount 11,0
  7893:  
  7894:  LC075:
  7895:          sta     CMD
  7896:          pha
  7897:          lda     #$01
  7898:          sta     TRACK0,x
  7899:          pla
  7900:          rts
  7901:          ; -------------
  7902:  
  7903:  LC07F:
  7904:          sei                                     ; disallow interrupts --> blocking job loop
  7905:          lda     VDC_PCR2
  7906:          ora     #VIA_PCR_B_CA2_OUTPUT_HIGH
  7907:          sta     VDC_PCR2
  7908:          jsr     L9D63
  7909:          jsr     LFE00
  7910:          lda     VDC_PCR2
  7911:          and     # ~ VIA_PCR_B_CA2_OUTPUT_HIGH
  7912:          sta     VDC_PCR2
  7913:          cli                                     ; allow processing of job loop
  7914:          rts
  7915:  
  7916:  .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570
  7917:  
  7918:          .byte   DRIVE_CHKSUM_C001
  7919:  
  7920:   .if CompileDrive = DRIVE_1541C_03
  7921:          .byte   "COPYRIGHT (C)1982,1985,1987 COMMODORE ELECTRONICS, LTD.",$0D
  7922:          .byte   "ALL RIGHTS RESERVED",$0D
  7923:   .endif
  7924:  
  7925:  LC002:
  7926:          WRITE_55_TIMES $0300
  7927:          rts
  7928:  
  7929:          ; --------------
  7930:  
  7931:  LC024:
  7932:          ldy     LINDX
  7933:  .if CompileDrive >= DRIVE_1541C_03
  7934:          jmp     LD3EE
  7935:  .else
  7936:          jmp     LD3DE
  7937:  .endif
  7938:  LC029:
  7939:          sta     RECL,x
  7940:          sta     RECH,x
  7941:          lda     #$00
  7942:          sta     LSTCHR,x
  7943:          rts
  7944:  Convert_Bin_To_BCD_Patch_154x:
  7945:          php
  7946:          sei                                     ; disallow interrupts --> blocking job loop
  7947:  
  7948:          CONVERT_BIN_TO_BCD
  7949:  
  7950:          plp
  7951:          jmp     OutputBCDIntoBUFTABERR
  7952:  
  7953:  LC047:
  7954:          cmp     #$03
  7955:          bcs     LC050
  7956:          lda     #ERRORCODE_72_DISK_FULL
  7957:          jsr     SetErrorCode
  7958:  LC050:
  7959:          lda     #$01
  7960:  LC052:
  7961:          rts
  7962:  
  7963:  .if CompileDrive = DRIVE_1541C_02
  7964:  
  7965:  LC048:
  7966:          .byte   $29,$1F,$19,$12
  7967:  
  7968:          .byte   "COPYRIGHT (C)1985 COMMODORE ELECTRONICS, LTD.",$0D
  7969:          .byte   "ALL RIGHTS RESERVED",$0D
  7970:  .endif
  7971:  
  7972:  .endif
  7973:  
  7974:          FillUntil $C100
  7975:  
  7976:  LC100:
  7977:          sei                                     ; disallow interrupts --> blocking job loop
  7978:          lda     # ~ VDC_PB2_DRIVELEDS           ; get port value with all LEDs switched off
  7979:          and     VDC_PB2
  7980:          pha                                     ; remember port value
  7981:          lda     DRVNUM                          ; current drive number
  7982:          beq     @IsDrive0                       ; drive 0 --> swithc on LED for drive 0
  7983:  
  7984:          ; if we reach here, the LED for drive 1 has to be switched on.
  7985:          ; note that the device does not have a drive 1, the code here should never be reached
  7986:  
  7987:          pla                                     ; get mask of port
  7988:          ora     #VDC_PB2_DRIVE1LED              ; switch on LED for drive 1 (not existing)
  7989:          bne     @StoreLedState                  ; uncond.: store the mask to switch LED on
  7990:  
  7991:  @IsDrive0:
  7992:          pla                                     ; get mask of port
  7993:          ora     #VDC_PB2_DRIVE0LED              ; switch on LED for drive 0
  7994:  @StoreLedState:
  7995:          sta     VDC_PB2                         ; store LED mask to switch the LED on
  7996:          cli                                     ; allow processing of job loop
  7997:          rts
  7998:          ; ---------------------------
  7999:  
  8000:  ; Switch on LED of drive 0
  8001:  ; UNUSED!
  8002:  
  8003:          sei                                     ; disallow interrupts --> blocking job loop
  8004:          lda     #VDC_PB2_DRIVE0LED              ; mask for LED for drive 0
  8005:          ora     VDC_PB2                         ; set bit on port
  8006:          sta     VDC_PB2                         ; and switch on the LED
  8007:          cli                                     ; allow processing of job loop
  8008:          rts
  8009:          ; ---------------------
  8010:  
  8011:  LC123:
  8012:          lda     #ERRORCODE_00_OK
  8013:          sta     ERWORD
  8014:          sta     ERLED
  8015:          rts
  8016:  
  8017:  LC12C:
  8018:          sei                                     ; disallow interrupts --> blocking job loop
  8019:          txa
  8020:          pha
  8021:          lda     #ERRORCODE_50_RECORD_NOT_PRESENT
  8022:          sta     ERWORD
  8023:          ldx     #$00
  8024:          lda     DriveLEDMasks,x
  8025:          sta     ERLED
  8026:          ora     VDC_PB2
  8027:          sta     VDC_PB2
  8028:          pla
  8029:          tax
  8030:          cli                                     ; allow processing of job loop
  8031:          rts
  8032:          ; -------------
  8033:  
  8034:  ; This function parses the command buffer and executes the command
  8035:  ; specified there.
  8036:  ;
  8037:  ParseCommandBufferAndExecuteCommand:
  8038:  
  8039:          ; @@@ TODO initializations
  8040:  
  8041:          lda     #$00
  8042:          sta     WBAM
  8043:          lda     LSTDRV
  8044:          sta     DRVNUM
  8045:  
  8046:          jsr     SetNoError                      ; delete error status
  8047:  
  8048:          ; check secondary address to determine if this is a command
  8049:          ; or something else
  8050:          ;
  8051:          lda     ORGSA
  8052:          bpl     @IsCommand                      ; LISTEN or TALK --> branch
  8053:  
  8054:          ; if we reach here, it was an OPEN (0xE0 | SECADR) or CLOSE (0xF0 | SECADR).
  8055:          ; thus, check which channel is to be opened or closed
  8056:  
  8057:          and     #MASK_SA                        ; mask out IEC bits
  8058:          cmp     #IEC_COMMAND_ERROR_CHANNEL      ; compare to command channel/error channel
  8059:          beq     @IsCommand                      ; yes -> branch, process the command
  8060:          jmp     LD7B4
  8061:          ; ------------
  8062:  
  8063:  @IsCommand:
  8064:          jsr     LC2B3
  8065:          ; returns with Y=0
  8066:  
  8067:          ; get the first character from the command
  8068:          lda     (BUFTABCMD),y
  8069:          sta     CHAR                            ; remember it
  8070:  
  8071:          ; test if the command is in the list of commands
  8072:          ldx     #CmdChars_END - CmdChars - 1    ; number of commands - 1
  8073:  @TestNextCommand:
  8074:          lda     CmdChars,x
  8075:          cmp     CHAR
  8076:          beq     @FoundCommand                   ; the char is correct, we found it!
  8077:          dex
  8078:          bpl     @TestNextCommand                ; if we still have commands to test, loop
  8079:  
  8080:          ; we did not find the command, return with 31,SYNTAX ERROR,00,00
  8081:          lda     #ERRORCODE_31_SYNTAX_ERROR
  8082:          jmp     GenerateErrorMessage
  8083:          ; --------------
  8084:  
  8085:  @FoundCommand:
  8086:          stx     CMDNUM                          ; remember the number (index) of the command
  8087:          ; is the command a command with more than one file name?
  8088:          cpx     #CmdChars_With2Files - CmdChars + 1
  8089:          bcc     @ExecuteCommand                 ; no, skip processing of two filenames
  8090:  
  8091:          jsr     LC1EE                           ; @@@ TODO process two file names
  8092:  
  8093:  @ExecuteCommand:
  8094:  
  8095:          ldx     CMDNUM                          ; get command index
  8096:  
  8097:          ; get address of command from table
  8098:          lda     CmdAddresses_Low,x
  8099:          sta     T0
  8100:          lda     CmdAddresses_High,x
  8101:          sta     T1
  8102:  
  8103:          ; execute command
  8104:          jmp     (T0)
  8105:          ; ----------------
  8106:  
  8107:          ; End of command execution
  8108:          ; A command that ends will jump here in order
  8109:          ; to complete the operation.
  8110:          ;
  8111:  CommandEnd:
  8112:          lda     #$00
  8113:          sta     WBAM
  8114:  LC199:
  8115:          lda     ERWORD
  8116:          bne     GenerateErrorMessage
  8117:          ldy     #$00
  8118:          tya                                     ; A = ERRORCODE_00_OK
  8119:          sty     TRACK
  8120:  LC1A3:
  8121:          sty     SECTOR
  8122:          sty     BUFTABCMD
  8123:          jsr     SetErrorCode
  8124:          jsr     LC123
  8125:  LC1AD:
  8126:          lda     DRVNUM
  8127:          sta     LSTDRV
  8128:          tax
  8129:  .if CompileDrive >= DRIVE_1570
  8130:          jmp     LA99D
  8131:          FillNOP 1
  8132:  .elseif CompileDrive >= DRIVE_1541C_02
  8133:          jmp     LFFB8
  8134:          FillNOP 1
  8135:  .else
  8136:          lda     #$00
  8137:          sta     NODRV,x
  8138:  .endif
  8139:  
  8140:  LC1B7:
  8141:          jsr     ClearCMDBUF
  8142:          jmp     LD4DA
  8143:          ; ----------------
  8144:  
  8145:  ; clear the command buffer
  8146:  ; by overwriting it with 0
  8147:  ;
  8148:  ClearCMDBUF:
  8149:          ldy     #CMDBUF_End - CMDBUF
  8150:          lda     #0
  8151:  :
  8152:          sta     CMDBUF,y
  8153:          dey
  8154:  bpl     :-
  8155:          rts
  8156:  
  8157:  ; ----------------------------------------------
  8158:  ; generate an error message with error code in A
  8159:  ; track and sector are both 0.
  8160:  ; ----------------------------------------------
  8161:  
  8162:  GenerateErrorMessage:
  8163:          ldy     #$00
  8164:          sty     TRACK
  8165:          sty     SECTOR
  8166:  .if CompileDrive >= DRIVE_1570
  8167:          jmp     LA9D5
  8168:          ; --- contains jmp LE645 at the end
  8169:  .else
  8170:          jmp     LE645
  8171:  .endif
  8172:          ; ----------------
  8173:  
  8174:  LC1D1:
  8175:          ldx     #$00
  8176:          stx     FILTBL
  8177:          lda     #$3A
  8178:          jsr     SearchInCmdline
  8179:          beq     LC1E2
  8180:          dey
  8181:          dey
  8182:          sty     FILTBL
  8183:  LC1E2:
  8184:          jmp     LC368
  8185:          ; ----------------
  8186:  
  8187:  LC1E5:
  8188:          ldy     #$00
  8189:          ldx     #$00
  8190:          lda     #$3A
  8191:          jmp     SearchInCmdline
  8192:          ; ----------------
  8193:  
  8194:  LC1EE:
  8195:          jsr     LC1E5
  8196:          bne     LC1F8
  8197:  LC1F3:
  8198:          lda     #ERRORCODE_34_SYNTAX_ERROR
  8199:          jmp     GenerateErrorMessage
  8200:          ; ----------------
  8201:  
  8202:  LC1F8:
  8203:          dey
  8204:          dey
  8205:          sty     FILTBL
  8206:          txa
  8207:          bne     LC1F3
  8208:  LC200:
  8209:          lda     #$3D
  8210:          jsr     SearchInCmdline
  8211:          txa
  8212:          beq     LC20A
  8213:          lda     #$40
  8214:  LC20A:
  8215:          ora     #$21
  8216:          sta     IMAGE
  8217:          inx
  8218:          stx     F1CNT
  8219:          stx     F2CNT
  8220:          lda     PATFLG
  8221:          beq     LC228
  8222:          lda     #$80
  8223:          ora     IMAGE
  8224:          sta     IMAGE
  8225:          lda     #$00
  8226:          sta     PATFLG
  8227:  LC228:
  8228:          tya
  8229:          beq     LC254
  8230:          sta     FILTBL,x
  8231:          lda     F1CNT
  8232:          sta     F2PTR
  8233:          lda     #$8D
  8234:          jsr     SearchInCmdline
  8235:          inx
  8236:          stx     F2CNT
  8237:          dex
  8238:          lda     PATFLG
  8239:          beq     LC245
  8240:          lda     #$08
  8241:  LC245:
  8242:          cpx     F1CNT
  8243:          beq     LC24C
  8244:          ora     #$04
  8245:  LC24C:
  8246:          ora     #$03
  8247:          eor     IMAGE
  8248:          sta     IMAGE
  8249:  LC254:
  8250:          lda     IMAGE
  8251:          ldx     CMDNUM
  8252:          and     CmdSyntaxFlags - 8,x
  8253:          bne     LC260
  8254:          rts
  8255:  LC260:
  8256:          sta     ERWORD
  8257:          lda     #ERRORCODE_30_SYNTAX_ERROR
  8258:          jmp     GenerateErrorMessage
  8259:          ; ----------------
  8260:  
  8261:  ; search for a specific character in the input buffer
  8262:  ; Input:
  8263:  ; A: The charter to search
  8264:  ; X: number of comma-separated parameter to start with
  8265:  ; Y: Pointer into the input buffer from where to search
  8266:  ;
  8267:  ; Return:
  8268:  ; A: Pointer into the input buffer after the character found
  8269:  ; Y: Same as A
  8270:  ; X: Number of commas in command line before the character which was searched
  8271:  ; ZF: set if character was not found
  8272:  
  8273:  SearchInCmdline:
  8274:          sta     CHAR                                    ; remember the character to search
  8275:  @SearchLoop:
  8276:          cpy     CMDSIZ                                  ; is the complete buffer read?
  8277:          bcs     @BufferExceeded                         ; yes --> done
  8278:  
  8279:          lda     (BUFTABCMD),y                           ; read next character
  8280:          iny
  8281:          cmp     CHAR                                    ; is it the character which is searched for?
  8282:          beq     @FoundChar                              ; yes --> done
  8283:  
  8284:          cmp     #'*'
  8285:          beq     @FoundWildcard                          ; '*' found --> mark 'wildcard'
  8286:          cmp     #'?'
  8287:          bne     @NoWildcard                             ; '?' found --> mark 'wildcard'
  8288:  @FoundWildcard:
  8289:          inc     PATFLG                                  ; remember: Found a wildcard
  8290:  @NoWildcard:
  8291:          cmp     #','                                    ; comma?
  8292:          bne     @SearchLoop                             ; no --> nothing found --> try next char
  8293:  
  8294:          ; a comma has been found
  8295:          tya
  8296:          sta     FILTBL + 1,x                            ; store the position of the comma
  8297:  
  8298:          lda     PATFLG                                  ; did we find any wildcards yet?
  8299:          and     # ~ PATTYP_WILDCARD
  8300:          beq     @NoWildcardYet                          ; no --> that's it
  8301:  
  8302:          lda     #PATTYP_WILDCARD
  8303:          sta     PATTYP,x                                ; remember that his paramter contained a wildcard
  8304:          sta     PATFLG                                  ; remember that the command line contained a wildcard
  8305:  
  8306:  @NoWildcardYet:
  8307:          inx                                             ; proceed to next comma-separated parameter
  8308:          cpx     #$04                                    ; already 4 paramters processed?
  8309:          bcc     @SearchLoop                             ; no, try the next one
  8310:  
  8311:          ; if we reach here directly (not via a branch/jump), we have more than
  8312:          ; 4 comma-separated parameters.
  8313:          ; Thus, we cannot process this, is we do not have as much space
  8314:  
  8315:  @BufferExceeded:
  8316:          ldy     #$00                                    ; marker: character not found
  8317:  
  8318:  @FoundChar:
  8319:          lda     CMDSIZ                                  ; store the position of the "last" parameter (empty)
  8320:          sta     FILTBL + 1,x                            ; into the table of parameter begins
  8321:  
  8322:          lda     PATFLG                                  ; did we have wildcards?
  8323:          and     # ~ PATTYP_WILDCARD
  8324:          beq     @DidNotHaveWildcards                    ; no --> done
  8325:  
  8326:          lda     #PATTYP_WILDCARD                        ; store that there were wildcards in the command line
  8327:          sta     PATTYP,x
  8328:  
  8329:  @DidNotHaveWildcards:
  8330:          tya                                             ; position of the character searched into A
  8331:                                                          ; if nothing was found, set Z = 0
  8332:          rts                                             ; done
  8333:  
  8334:  LC2B3:
  8335:          ; remove trailing CR (at most, 2)
  8336:  
  8337:          ldy     BUFTABCMD               ; length of command
  8338:          beq     QuitRemovingTrailingCR                  ; == 0 --> done, there cannot be a CR
  8339:          dey
  8340:          beq     @QuitUndoDecrement      ; == 1 --> done, do NOT remove the CR
  8341:  
  8342:          ; read the last byte of the command
  8343:  
  8344:  .if CompileDrive >= DRIVE_1570
  8345:          ; lda CMDBUF,y IFF current command is not 'U0'; else, returns 0.
  8346:          jsr     READ_CMDBUF_BUT_SPECIAL_CASE_U0
  8347:  .else
  8348:          lda     CMDBUF,y
  8349:  .endif
  8350:          cmp     #ASC_CR                 ; CR?
  8351:          beq     QuitRemovingTrailingCR  ; yes --> done, do NOT undo the DEY
  8352:  
  8353:          ; check another byte for CR
  8354:          dey
  8355:  
  8356:          ; read the (now) last byte of the command
  8357:  
  8358:  .if CompileDrive >= DRIVE_1570
  8359:          ; lda CMDBUF,y IFF current command is not 'U0'; else, returns 0.
  8360:          jsr     READ_CMDBUF_BUT_SPECIAL_CASE_U0
  8361:  .else
  8362:          lda     CMDBUF,y
  8363:  .endif
  8364:          cmp     #ASC_CR                 ; CR?
  8365:          beq     QuitRemovingTrailingCR  ; yes --> done, do NOT undo the DEY
  8366:  
  8367:          iny                             ; undo the last DEY as this was not a CR
  8368:  @QuitUndoDecrement:
  8369:          iny                             ; undo the DEY in order to get the length of the command string
  8370:  QuitRemovingTrailingCR:
  8371:          sty     CMDSIZ                  ; store the length of the command
  8372:  
  8373:          cpy     #CMDBUF_End2 - CMDBUF   ; compare length of the command with maximum length of the buffer
  8374:          ldy     #$FF                    ; preset error code for the case that the command does not fit
  8375:                                          ; this is also the return value if an error occurred
  8376:          bcc     LC2DC                   ; does it fit into the command buffer? --> branch
  8377:  
  8378:          sty     CMDNUM                  ; set command to illegal
  8379:  
  8380:          ; output 32,SYNTAX ERROR, as the command is too long
  8381:          ; @@@TODO can this happen? If the test above fails, then the command already overwrite
  8382:          ; part of our memory, didn't it?
  8383:          lda     #ERRORCODE_32_SYNTAX_ERROR
  8384:          jmp     GenerateErrorMessage
  8385:          ; ----------------
  8386:  
  8387:  ; @@@TODO init buffers, variables, ...
  8388:  ;
  8389:  LC2DC:
  8390:          ldy     #$00            ; return value: no error
  8391:          tya
  8392:          sta     BUFTABCMD
  8393:          sta     REC
  8394:          sta     TYPE
  8395:          sta     TYPFLG
  8396:          sta     F1PTR
  8397:          sta     F2PTR
  8398:          sta     F1CNT
  8399:          sta     F2CNT
  8400:          sta     PATFLG
  8401:          sta     ERWORD          ; ERRORCODE_00_OK
  8402:          ldx     #$05
  8403:  @LC2FD:
  8404:          sta     F2PTR,x
  8405:          sta     RELPTR,x
  8406:          sta     ENTSEC + 4,x
  8407:          sta     ENTIND + 4,x
  8408:          sta     FILDRV + 4,x
  8409:          sta     FILTBL + 5,x
  8410:          sta     FILTRK + 4,x
  8411:          dex
  8412:          bne     @LC2FD
  8413:          rts
  8414:  
  8415:  LC312:
  8416:          lda     F2CNT
  8417:          sta     F1CNT
  8418:          lda     #$01
  8419:          sta     F2CNT
  8420:          sta     F2PTR
  8421:  LC320:
  8422:          ldy     LSTDRV
  8423:          ldx     #$00
  8424:  @LC325:
  8425:          stx     F1PTR
  8426:          lda     FILTBL,x
  8427:          jsr     @LC33C
  8428:          ldx     F1PTR
  8429:          sta     FILTBL,x
  8430:          tya
  8431:          sta     FILDRV,x
  8432:          inx
  8433:          cpx     F2CNT
  8434:          bcc     @LC325
  8435:          rts
  8436:  @LC33C:
  8437:          tax
  8438:          ldy     #$00
  8439:          lda     #$3A
  8440:          cmp     CMDBUF + 1,x
  8441:          beq     @LC352
  8442:          cmp     CMDBUF,x
  8443:          bne     @LC361
  8444:          inx
  8445:  @LC34C:
  8446:          tya
  8447:  @LC34D:
  8448:          and     #$01
  8449:  @LC34F:
  8450:          tay
  8451:          txa
  8452:          rts
  8453:  @LC352:
  8454:          lda     CMDBUF,x
  8455:          inx
  8456:          inx
  8457:          cmp     #$30
  8458:          beq     @LC34D
  8459:          cmp     #$31
  8460:          beq     @LC34D
  8461:          bne     @LC34C
  8462:  @LC361:
  8463:          tya
  8464:          ora     #$80
  8465:          and     #$81
  8466:          bne     @LC34F
  8467:  LC368:
  8468:          lda     #$00
  8469:          sta     IMAGE
  8470:          ldy     FILTBL
  8471:  @LC370:
  8472:          lda     (BUFTABCMD),y
  8473:          jsr     CheckForValidDriveNumber
  8474:          bpl     @LC388
  8475:          iny
  8476:          cpy     CMDSIZ
  8477:          bcs     @LC383
  8478:          ldy     CMDSIZ
  8479:          dey
  8480:          bne     @LC370
  8481:  @LC383:
  8482:          dec     IMAGE
  8483:          lda     #$00
  8484:  @LC388:
  8485:          and     #$01
  8486:          sta     DRVNUM
  8487:          jmp     LC100
  8488:          ; ----------------
  8489:  
  8490:  LC38F:
  8491:          lda     DRVNUM
  8492:          eor     #$01
  8493:          and     #$01
  8494:          sta     DRVNUM
  8495:          rts
  8496:          ; ----------------
  8497:  
  8498:  LC398:
  8499:          ldy     #$00
  8500:          lda     F1CNT
  8501:          cmp     F2CNT
  8502:          beq     @LC3B8
  8503:          dec     F2CNT
  8504:          ldy     F2CNT
  8505:          lda     FILTBL,y
  8506:          tay
  8507:          lda     (BUFTABCMD),y
  8508:          ldy     #$04
  8509:  @LC3B0:
  8510:          cmp     LFEBB,y
  8511:          beq     @LC3B8
  8512:          dey
  8513:          bne     @LC3B0
  8514:  @LC3B8:
  8515:          tya
  8516:          sta     TYPFLG
  8517:          rts
  8518:          ; ----------------
  8519:  
  8520:  ;
  8521:  ; This function checks if the (PETSCII) character in A
  8522:  ; represents a valid drive number (0 or 1)
  8523:  ;
  8524:  ; Input:
  8525:  ;   A = PETSCII representation to check for 0 or 1
  8526:  ;
  8527:  ; Output:
  8528:  ;   A = $00 if A contained a representation for '0'
  8529:  ;   A = $01 if A contained a representation for '1'
  8530:  ;   A.7 set if A contained anything else
  8531:  ;
  8532:  CheckForValidDriveNumber:
  8533:          cmp     #'0'
  8534:          beq     @ValidDriveNumber
  8535:          cmp     #'1'
  8536:          beq     @ValidDriveNumber
  8537:          ora     #$80
  8538:  @ValidDriveNumber:
  8539:          and     #$81
  8540:          rts
  8541:          ; ----------------
  8542:  
  8543:  LC3CA:
  8544:          lda     #$00
  8545:          sta     T0
  8546:          sta     DRVFLG
  8547:          pha
  8548:          ldx     F2CNT
  8549:  @LC3D5:
  8550:          pla
  8551:          ora     T0
  8552:          pha
  8553:          lda     #$01
  8554:          sta     T0
  8555:          dex
  8556:          bmi     @LC3EF
  8557:          lda     FILDRV,x
  8558:          bpl     @LC3E8
  8559:          asl     T0
  8560:          asl     T0
  8561:  @LC3E8:
  8562:          lsr     a
  8563:          bcc     @LC3D5
  8564:          asl     T0
  8565:          bne     @LC3D5
  8566:  @LC3EF:
  8567:          pla
  8568:          tax
  8569:          lda     LC440 - 1,x
  8570:          pha
  8571:          and     #$03
  8572:          sta     DRVCNT
  8573:          pla
  8574:          asl     a
  8575:          bpl     @LC43C
  8576:          lda     FILDRV
  8577:  @LC400:
  8578:          and     #$01
  8579:          sta     DRVNUM
  8580:          lda     DRVCNT
  8581:          beq     @LC434
  8582:          jsr     LC63D
  8583:          beq     @LC420
  8584:          jsr     LC38F
  8585:          lda     #$00
  8586:          sta     DRVCNT
  8587:          jsr     LC63D
  8588:          beq     @LC439
  8589:  @LC41B:
  8590:          lda     #ERRORCODE_74_DRIVE_NOT_READY
  8591:          jsr     GenerateErrorMessage
  8592:  
  8593:  @LC420:
  8594:          jsr     LC38F
  8595:          jsr     LC63D
  8596:          php
  8597:          jsr     LC38F
  8598:          plp
  8599:          beq     @LC439
  8600:          lda     #$00
  8601:          sta     DRVCNT
  8602:          beq     @LC439
  8603:  @LC434:
  8604:          jsr     LC63D
  8605:          bne     @LC41B
  8606:  @LC439:
  8607:          jmp     LC100
  8608:  @LC43C:
  8609:          rol     a
  8610:          jmp     @LC400
  8611:          ; ----------------
  8612:  
  8613:  LC440:
  8614:          .byte   $00,$80,$41,$01,$01,$01,$01,$81
  8615:          .byte   $81,$81,$81,$42,$42,$42,$42
  8616:  
  8617:  LC44F:
  8618:          jsr     LC3CA
  8619:  @LC452:
  8620:          lda     #$00
  8621:          sta     DELIND
  8622:          jsr     LC5AC
  8623:          bne     @LC475
  8624:  @LC45C:
  8625:          dec     DRVCNT
  8626:          bpl     @LC462
  8627:          rts
  8628:  
  8629:  @LC462:
  8630:          lda     #$01
  8631:          sta     DRVFLG
  8632:          jsr     LC38F
  8633:          jsr     LC100
  8634:          jmp     @LC452
  8635:  @LC470:
  8636:          jsr     LC617
  8637:          beq     @LC485
  8638:  @LC475:
  8639:          jsr     LC4D8
  8640:          lda     FOUND
  8641:          beq     @LC47E
  8642:          rts
  8643:  @LC47E:
  8644:          lda     ENTFND
  8645:          bmi     @LC470
  8646:          bpl     @LC475
  8647:  @LC485:
  8648:          lda     FOUND
  8649:          beq     @LC45C
  8650:          rts
  8651:          ; ------------------
  8652:  
  8653:  LC48B:
  8654:          jsr     LC604
  8655:          beq     LC4AA
  8656:          bne     LC4BA
  8657:  LC492:
  8658:          lda     #$01
  8659:          sta     DRVFLG
  8660:          jsr     LC38F
  8661:          jsr     LC100
  8662:  LC49D:
  8663:          lda     #$00
  8664:          sta     DELIND
  8665:          jsr     LC5AC
  8666:          bne     LC4BA
  8667:          sta     FOUND
  8668:  LC4AA:
  8669:          lda     FOUND
  8670:          bne     LC4D7
  8671:          dec     DRVCNT
  8672:          bpl     LC492
  8673:          rts
  8674:          ; ------------------
  8675:  
  8676:  LC4B5:
  8677:          jsr     LC617
  8678:          beq     LC4AA
  8679:  LC4BA:
  8680:          jsr     LC4D8
  8681:          ldx     ENTFND
  8682:          bpl     @LC4C9
  8683:          lda     FOUND
  8684:          beq     LC4B5
  8685:          bne     LC4D7
  8686:  @LC4C9:
  8687:          lda     TYPFLG
  8688:          beq     LC4D7
  8689:          lda     PATTYP,x
  8690:          and     #$07
  8691:          cmp     TYPFLG
  8692:          bne     LC4B5
  8693:  LC4D7:
  8694:          rts
  8695:          ; ------------------
  8696:  
  8697:  LC4D8:
  8698:          ldx     #$FF
  8699:          stx     ENTFND
  8700:          inx
  8701:          stx     PATFLG
  8702:          jsr     LC589
  8703:          beq     LC4EC
  8704:  LC4E6:
  8705:          rts
  8706:  LC4E7:
  8707:          jsr     LC594
  8708:          bne     LC4E6
  8709:  LC4EC:
  8710:          lda     DRVNUM
  8711:          eor     FILDRV,x
  8712:          lsr     a
  8713:          bcc     @LC4FE
  8714:          and     #$40
  8715:          beq     LC4E7
  8716:          lda     #$02
  8717:          cmp     DRVCNT
  8718:          beq     LC4E7
  8719:  @LC4FE:
  8720:          lda     FILTBL,x
  8721:          tax
  8722:          jsr     LC6A6
  8723:          ldy     #$03
  8724:          jmp     @LC51D
  8725:  @LC50A:
  8726:          lda     CMDBUF,x
  8727:          cmp     (DIRBUF),y
  8728:          beq     @LC51B
  8729:          cmp     #$3F
  8730:          bne     LC4E7
  8731:          lda     (DIRBUF),y
  8732:          cmp     #$A0
  8733:          beq     LC4E7
  8734:  @LC51B:
  8735:          inx
  8736:          iny
  8737:  @LC51D:
  8738:          cpx     LIMIT
  8739:          bcs     @LC52B
  8740:          lda     CMDBUF,x
  8741:          cmp     #$2A
  8742:          beq     @LC535
  8743:          bne     @LC50A
  8744:  @LC52B:
  8745:          cpy     #$13
  8746:          bcs     @LC535
  8747:          lda     (DIRBUF),y
  8748:          cmp     #$A0
  8749:          bne     LC4E7
  8750:  @LC535:
  8751:          ldx     F2PTR
  8752:          stx     ENTFND
  8753:          lda     PATTYP,x
  8754:          and     #$80
  8755:          sta     PATFLG
  8756:          lda     INDEX
  8757:          sta     ENTIND,x
  8758:          lda     SECTOR
  8759:          sta     ENTSEC,x
  8760:          ldy     #$00
  8761:          lda     (DIRBUF),y
  8762:          iny
  8763:          pha
  8764:          and     #$40
  8765:          sta     T0
  8766:          pla
  8767:          and     # ~ $20
  8768:          bmi     @LC55C
  8769:          ora     #$20
  8770:  @LC55C:
  8771:          and     #$27
  8772:          ora     T0
  8773:          sta     T0
  8774:          lda     #$80
  8775:          and     PATTYP,x
  8776:          ora     T0
  8777:          sta     PATTYP,x
  8778:          lda     FILDRV,x
  8779:          and     #$80
  8780:          ora     DRVNUM
  8781:          sta     FILDRV,x
  8782:          lda     (DIRBUF),y
  8783:          sta     FILTRK,x
  8784:          iny
  8785:          lda     (DIRBUF),y
  8786:          sta     FILSEC,x
  8787:          lda     REC
  8788:          bne     LC589
  8789:          ldy     #$15
  8790:          lda     (DIRBUF),y
  8791:          sta     REC
  8792:  
  8793:  LC589:
  8794:          lda     #$FF
  8795:          sta     FOUND
  8796:          lda     F2CNT
  8797:          sta     F2PTR
  8798:  LC594:
  8799:          dec     F2PTR
  8800:          bpl     @LC59A
  8801:          rts
  8802:  
  8803:  @LC59A:
  8804:          ldx     F2PTR
  8805:          lda     PATTYP,x
  8806:          bmi     @LC5A6
  8807:          lda     FILTRK,x
  8808:          bne     LC594
  8809:  @LC5A6:
  8810:          lda     #$00
  8811:          sta     FOUND
  8812:          rts
  8813:          ; ------------------
  8814:  
  8815:  LC5AC:
  8816:          ldy     #$00
  8817:          sty     DELSEC
  8818:          dey
  8819:          sty     ENTFND
  8820:          lda     LFE85
  8821:          sta     TRACK
  8822:          lda     #$01
  8823:          sta     SECTOR
  8824:          sta     LSTBUF
  8825:          jsr     LD475
  8826:  LC5C4:
  8827:          lda     LSTBUF
  8828:          bne     @LC5CA
  8829:          rts
  8830:  @LC5CA:
  8831:          lda     #$07
  8832:          sta     FILCNT
  8833:          lda     #$00
  8834:          jsr     LD4F6
  8835:          sta     LSTBUF
  8836:  LC5D7:
  8837:          jsr     LD4E8
  8838:          dec     FILCNT
  8839:          ldy     #$00
  8840:          lda     (DIRBUF),y
  8841:          bne     @LC5FB
  8842:          lda     DELSEC
  8843:          bne     LC617
  8844:          jsr     LDE3B
  8845:          lda     SECTOR
  8846:          sta     DELSEC
  8847:          lda     DIRBUF
  8848:          ldx     DELIND
  8849:          sta     DELIND
  8850:          beq     LC617
  8851:          rts
  8852:          ; -----------------
  8853:  
  8854:  @LC5FB:
  8855:          ldx     #$01
  8856:          cpx     DELIND
  8857:          bne     LC62F
  8858:          beq     LC617
  8859:  LC604:
  8860:          lda     LFE85
  8861:          sta     TRACK
  8862:          lda     DIRSEC
  8863:          sta     SECTOR
  8864:          jsr     LD475
  8865:          lda     INDEX
  8866:          jsr     LD4C8
  8867:  LC617:
  8868:          lda     #$FF
  8869:          sta     ENTFND
  8870:          lda     FILCNT
  8871:          bmi     @LC629
  8872:          lda     #$20
  8873:          jsr     LD1C6
  8874:          jmp     LC5D7
  8875:          ; -----------------
  8876:  
  8877:  @LC629:
  8878:          jsr     LD44D
  8879:          jmp     LC5C4
  8880:  LC62F:
  8881:          lda     DIRBUF
  8882:          sta     INDEX
  8883:          jsr     LDE3B
  8884:          lda     SECTOR
  8885:          sta     DIRSEC
  8886:          rts
  8887:          ; -----------------
  8888:  
  8889:  LC63D:
  8890:          lda     AUTOFG
  8891:          bne     LC669
  8892:          ldx     DRVNUM
  8893:          lsr     WPSW,x
  8894:          bcc     LC669
  8895:          lda     #$FF
  8896:          sta     JOBRTN
  8897:          jsr     LD00E
  8898:          ldy     #$FF
  8899:          cmp     #$02
  8900:          beq     @LC65F
  8901:          cmp     #$03
  8902:          beq     @LC65F
  8903:          cmp     #$0F
  8904:          beq     @LC65F
  8905:          ldy     #$00
  8906:  @LC65F:
  8907:          ldx     DRVNUM
  8908:  .if CompileDrive >= DRIVE_1570
  8909:          jmp     LA9A5
  8910:  .elseif CompileDrive >= DRIVE_1541C_02
  8911:          jmp     LFFC0
  8912:  .else
  8913:          tya
  8914:          sta     NODRV,x
  8915:  .endif
  8916:  
  8917:  LC664:
  8918:          bne     LC669
  8919:          jsr     LD042
  8920:  LC669:
  8921:          ldx     DRVNUM
  8922:  .if CompileDrive >= DRIVE_1570
  8923:          jmp     LAA17
  8924:  .elseif CompileDrive >= DRIVE_1541C_02
  8925:          jmp     LFFAC
  8926:  .else
  8927:          lda     NODRV,x
  8928:          rts
  8929:  .endif
  8930:  
  8931:  LC66E:
  8932:          pha
  8933:          jsr     LC6A6
  8934:          jsr     @LC688
  8935:          pla
  8936:          sec
  8937:          sbc     STRSIZ
  8938:          tax
  8939:          beq     @LC687
  8940:          bcc     @LC687
  8941:          lda     #$A0
  8942:  @LC681:
  8943:          sta     (DIRBUF),y
  8944:          iny
  8945:          dex
  8946:          bne     @LC681
  8947:  @LC687:
  8948:          rts
  8949:          ; ---------------
  8950:  
  8951:  @LC688:
  8952:          tya
  8953:          asl     a
  8954:          tay
  8955:          lda     BUFTAB0,y
  8956:          sta     DIRBUF
  8957:          lda     BUFTAB0 + 1,y
  8958:          sta     DIRBUF + 1
  8959:          ldy     #$00
  8960:  @LC697:
  8961:          lda     CMDBUF,x
  8962:          sta     (DIRBUF),y
  8963:          iny
  8964:          beq     @LC6A5
  8965:          inx
  8966:          cpx     LIMIT
  8967:          bcc     @LC697
  8968:  @LC6A5:
  8969:          rts
  8970:          ; ---------------
  8971:  
  8972:  LC6A6:
  8973:          lda     #$00
  8974:          sta     STRSIZ
  8975:          txa
  8976:          pha
  8977:  @LC6AD:
  8978:          lda     CMDBUF,x
  8979:          cmp     #','
  8980:          beq     @LC6C8
  8981:          cmp     #'='
  8982:          beq     @LC6C8
  8983:          inc     STRSIZ
  8984:          inx
  8985:          lda     #$0F
  8986:          cmp     STRSIZ
  8987:          bcc     @LC6C8
  8988:          cpx     CMDSIZ
  8989:          bcc     @LC6AD
  8990:  @LC6C8:
  8991:          stx     LIMIT
  8992:          pla
  8993:          tax
  8994:          rts
  8995:          ; -------------------
  8996:  
  8997:  LC6CE:
  8998:          lda     SA
  8999:          pha
  9000:          lda     LINDX
  9001:          pha
  9002:          jsr     @LC6DE
  9003:          pla
  9004:          sta     LINDX
  9005:          pla
  9006:          sta     SA
  9007:          rts
  9008:          ; ----------------
  9009:  
  9010:  @LC6DE:
  9011:          lda     #$11
  9012:          sta     SA
  9013:          jsr     LD0EB
  9014:          jsr     LD4E8
  9015:          lda     ENTFND
  9016:          bpl     @LC6F7
  9017:          lda     DRVFLG
  9018:          bne     @LC6FC
  9019:          jsr     LC806
  9020:          clc
  9021:          rts
  9022:  
  9023:  @LC6F7:
  9024:          lda     DRVFLG
  9025:          beq     @LC71B
  9026:  @LC6FC:
  9027:          dec     DRVFLG
  9028:          bne     @LC70E
  9029:          dec     DRVFLG
  9030:          jsr     LC38F
  9031:          jsr     LC806
  9032:          sec
  9033:          jmp     LC38F
  9034:  @LC70E:
  9035:          lda     #$00
  9036:          sta     NBTEMP + 1
  9037:          sta     DRVFLG
  9038:          jsr     LC7B7
  9039:          sec
  9040:          rts
  9041:          ; ----------------
  9042:  
  9043:  @LC71B:
  9044:          ldx     #$18
  9045:          ldy     #$1D
  9046:          lda     (DIRBUF),y
  9047:          sta     NBTEMP + 1
  9048:          beq     @LC728
  9049:          ldx     #$16
  9050:  @LC728:
  9051:          dey
  9052:          lda     (DIRBUF),y
  9053:          sta     NBTEMP
  9054:          cpx     #$16
  9055:          beq     @LC73C
  9056:          cmp     #$0A
  9057:          bcc     @LC73C
  9058:          dex
  9059:          cmp     #$64
  9060:          bcc     @LC73C
  9061:          dex
  9062:  @LC73C:
  9063:          jsr     LC7AC
  9064:          lda     (DIRBUF),y
  9065:          pha
  9066:          asl     a
  9067:          bpl     @LC74A
  9068:          lda     #$3C
  9069:          sta     NAMBUF + 1,x
  9070:  @LC74A:
  9071:          pla
  9072:          and     #$0F
  9073:          tay
  9074:          lda     LFEC5,y
  9075:          sta     NAMBUF,x
  9076:          dex
  9077:          lda     LFEC0,y
  9078:          sta     NAMBUF,x
  9079:          dex
  9080:          lda     LFEBB,y
  9081:          sta     NAMBUF,x
  9082:          dex
  9083:          dex
  9084:          bcs     @LC76B
  9085:          lda     #$2A
  9086:          sta     NAMBUF + 1,x
  9087:  @LC76B:
  9088:          lda     #$A0
  9089:          sta     NAMBUF,x
  9090:          dex
  9091:          ldy     #$12
  9092:  @LC773:
  9093:          lda     (DIRBUF),y
  9094:          sta     NAMBUF,x
  9095:          dex
  9096:          dey
  9097:          cpy     #$03
  9098:          bcs     @LC773
  9099:          lda     #$22
  9100:          sta     NAMBUF,x
  9101:  @LC783:
  9102:          inx
  9103:          cpx     #$20
  9104:          bcs     @LC793
  9105:          lda     NAMBUF,x
  9106:          cmp     #$22
  9107:          beq     @LC793
  9108:          cmp     #$A0
  9109:          bne     @LC783
  9110:  @LC793:
  9111:          lda     #$22
  9112:          sta     NAMBUF,x
  9113:  @LC798:
  9114:          inx
  9115:          cpx     #$20
  9116:          bcs     @LC7A7
  9117:          lda     #$7F
  9118:          and     NAMBUF,x
  9119:          sta     NAMBUF,x
  9120:          bpl     @LC798
  9121:  @LC7A7:
  9122:          jsr     LC4B5
  9123:          sec
  9124:          rts
  9125:          ; -----------------
  9126:  
  9127:  LC7AC:
  9128:          ldy     #$1B
  9129:          lda     #$20
  9130:  @LC7B0:
  9131:          sta     L02B0,y
  9132:          dey
  9133:          bne     @LC7B0
  9134:          rts
  9135:          ; --------------
  9136:  
  9137:  LC7B7:
  9138:          jsr     LF119
  9139:          jsr     LF0DF
  9140:          jsr     LC7AC
  9141:          lda     #$FF
  9142:          sta     T0
  9143:          ldx     DRVNUM
  9144:          stx     NBTEMP
  9145:          lda     #$00
  9146:          sta     NBTEMP + 1
  9147:          ldx     JOBNUM
  9148:          lda     TableHighBytesOfBuffers,x
  9149:          sta     DIRBUF + 1
  9150:          lda     LFE85 + 3
  9151:          sta     DIRBUF
  9152:          ldy     #$16
  9153:          lda     (DIRBUF),y
  9154:          cmp     #$A0
  9155:          bne     @LC7ED
  9156:          lda     #$31
  9157:          .byte   ASM_BIT3
  9158:  @LC7E5:
  9159:          lda     (DIRBUF),y
  9160:          cmp     #$A0
  9161:          bne     @LC7ED
  9162:          lda     #$20
  9163:  @LC7ED:
  9164:          sta     NAMBUF + 2,y
  9165:          dey
  9166:          bpl     @LC7E5
  9167:          lda     #$12
  9168:          sta     NAMBUF
  9169:          lda     #$22
  9170:          sta     NAMBUF + 1
  9171:          sta     NAMBUF + 18
  9172:          lda     #$20
  9173:          sta     NAMBUF + 19
  9174:          rts
  9175:          ; --------------------
  9176:  
  9177:  LC806:
  9178:          jsr     LC7AC
  9179:          ldy     #$0B
  9180:  @LC80B:
  9181:          lda     TextBlocksFree,y
  9182:          sta     NAMBUF,y
  9183:          dey
  9184:          bpl     @LC80B
  9185:          jmp     LEF4D
  9186:          ; -------------------
  9187:  
  9188:  TextBlocksFree:
  9189:          .byte   "BLOCKS FREE."
  9190:  
  9191:  cmd_scratch:
  9192:          jsr     LC398
  9193:          jsr     LC320
  9194:          jsr     LC3CA
  9195:          lda     #$00
  9196:          sta     R0
  9197:          jsr     LC49D
  9198:          bmi     @LC872
  9199:  @LC835:
  9200:          jsr     LDDB7
  9201:          bcc     @LC86D
  9202:          ldy     #$00
  9203:          lda     (DIRBUF),y
  9204:          and     #$40
  9205:          bne     @LC86D
  9206:          jsr     LC8B6
  9207:          ldy     #$13
  9208:          lda     (DIRBUF),y
  9209:          beq     @LC855
  9210:          sta     TRACK
  9211:          iny
  9212:          lda     (DIRBUF),y
  9213:          sta     SECTOR
  9214:          jsr     LC87D
  9215:  @LC855:
  9216:          ldx     ENTFND
  9217:          lda     #$20
  9218:          and     PATTYP,x
  9219:          bne     @LC86B
  9220:          lda     FILTRK,x
  9221:          sta     TRACK
  9222:          lda     FILSEC,x
  9223:          sta     SECTOR
  9224:          jsr     LC87D
  9225:  @LC86B:
  9226:          inc     R0
  9227:  @LC86D:
  9228:          jsr     LC48B
  9229:          bpl     @LC835
  9230:  @LC872:
  9231:          lda     R0
  9232:          sta     TRACK
  9233:          lda     #ERRORCODE_01_FILES_SCRATCHED
  9234:          ldy     #$00
  9235:          jmp     LC1A3
  9236:          ; ------------------
  9237:  
  9238:  LC87D:
  9239:          jsr     LEF5F
  9240:          jsr     LD475
  9241:          jsr     LF119
  9242:          lda     BUF0,x
  9243:          cmp     #$FF
  9244:          beq     @LC894
  9245:          lda     WBAM
  9246:          ora     #$40
  9247:          sta     WBAM
  9248:  @LC894:
  9249:          lda     #$00
  9250:          jsr     LD4C8
  9251:          jsr     LD156
  9252:          sta     TRACK
  9253:          jsr     LD156
  9254:          sta     SECTOR
  9255:          lda     TRACK
  9256:          bne     @LC8AD
  9257:          jsr     LEEF4
  9258:          jmp     LD227
  9259:  @LC8AD:
  9260:          jsr     LEF5F
  9261:          jsr     LD44D
  9262:          jmp     @LC894
  9263:          ; ------------
  9264:  
  9265:  LC8B6:
  9266:          ldy     #$00
  9267:          tya
  9268:          sta     (DIRBUF),y
  9269:          jsr     LDE5E
  9270:          jmp     LD599
  9271:          ; ---------------
  9272:  
  9273:  cmd_duplicate:
  9274:  Error31SyntaxError:
  9275:          lda     #ERRORCODE_31_SYNTAX_ERROR
  9276:          jmp     GenerateErrorMessage
  9277:          ; ----------------
  9278:  
  9279:  LC8C6:
  9280:          lda     #ASM_JMP
  9281:          sta     BUFFER3
  9282:          lda     #<LFAC7
  9283:          sta     BUFFER3 + 1
  9284:          lda     #>LFAC7
  9285:          sta     BUFFER3 + 2
  9286:          lda     #$03
  9287:          jsr     LD6D3
  9288:          lda     DRVNUM
  9289:          ora     #$E0
  9290:          sta     JOBS3
  9291:  @LC8E0:
  9292:          lda     JOBS3
  9293:          bmi     @LC8E0
  9294:          cmp     #$02
  9295:          bcc     @LC8EF
  9296:          lda     #$03
  9297:          ldx     #$00
  9298:          jmp     LE60A
  9299:  @LC8EF:
  9300:          rts
  9301:          ; ---------------
  9302:  
  9303:  cmd_copy:
  9304:          lda     #$E0
  9305:          sta     BUFUSE
  9306:          jsr     LF0D1
  9307:          jsr     LF119
  9308:          lda     #$FF
  9309:          sta     BUF0,x
  9310:          lda     #$0F
  9311:          sta     LINUSE
  9312:          jsr     LC1E5
  9313:          bne     @LC90C
  9314:          jmp     Error31SyntaxError
  9315:  @LC90C:
  9316:          jsr     LC1F8
  9317:          jsr     LC320
  9318:          lda     IMAGE
  9319:          and     #'U'
  9320:          bne     LC928
  9321:          ldx     FILTBL
  9322:          lda     CMDBUF,x
  9323:          cmp     #'*'
  9324:          bne     LC928
  9325:  
  9326:  Error30SyntaxError:
  9327:          lda     #ERRORCODE_30_SYNTAX_ERROR
  9328:          jmp     GenerateErrorMessage
  9329:          ; ----------------
  9330:  
  9331:  LC928:
  9332:          lda     IMAGE
  9333:          and     #$D9
  9334:          bne     Error30SyntaxError
  9335:          jmp     @LC952
  9336:          lda     #$00
  9337:          sta     REC
  9338:          sta     DRVCNT
  9339:          sta     FILTRK
  9340:          sta     FILTRK + 1
  9341:          lda     FILDRV + 1
  9342:          and     #$01
  9343:          sta     DRVNUM
  9344:          ora     #$01
  9345:          sta     DELSEC
  9346:          lda     FILTBL + 1
  9347:          sta     FILTBL
  9348:          rts
  9349:          ; ----------------
  9350:  
  9351:  @LC952:
  9352:          jsr     LC44F
  9353:          lda     F2CNT
  9354:          cmp     #$03
  9355:          bcc     @LC9A1
  9356:          lda     FILDRV
  9357:          cmp     FILDRV + 1
  9358:          bne     @LC9A1
  9359:          lda     ENTIND
  9360:          cmp     ENTIND + 1
  9361:          bne     @LC9A1
  9362:          lda     ENTSEC
  9363:          cmp     ENTSEC + 1
  9364:          bne     @LC9A1
  9365:          jsr     LCACC
  9366:          lda     #$01
  9367:          sta     F2PTR
  9368:          jsr     LC9FA
  9369:          jsr     LD125
  9370:          beq     @LC982
  9371:          cmp     #$02
  9372:          bne     @LC987
  9373:  @LC982:
  9374:          lda     #ERRORCODE_64_FILE_TYPE_MISMATCH
  9375:          jsr     GenerateErrorMessage
  9376:  @LC987:
  9377:          lda     #$12
  9378:          sta     SA
  9379:          lda     L023C
  9380:          sta     L023D
  9381:          lda     #$FF
  9382:          sta     L023C
  9383:          jsr     LDA2A
  9384:          ldx     #$02
  9385:          jsr     @LC9B9
  9386:          jmp     CommandEnd
  9387:  @LC9A1:
  9388:          jsr     @LC9A7
  9389:          jmp     CommandEnd
  9390:          ; ----------------
  9391:  
  9392:  @LC9A7:
  9393:          jsr     LCAE7
  9394:          lda     FILDRV
  9395:          and     #$01
  9396:          sta     DRVNUM
  9397:          jsr     LD486
  9398:          jsr     LD6E4
  9399:          ldx     F1CNT
  9400:  @LC9B9:
  9401:          stx     F2PTR
  9402:          jsr     LC9FA
  9403:          lda     #$11
  9404:          sta     SA
  9405:          jsr     LD0EB
  9406:          jsr     LD125
  9407:          bne     @LC9CE
  9408:          jsr     LCA53
  9409:  @LC9CE:
  9410:          lda     #$08
  9411:          sta     EIOFLG
  9412:          jmp     @LC9D8
  9413:  @LC9D5:
  9414:          jsr     LCF9B
  9415:  @LC9D8:
  9416:          jsr     LCA35
  9417:          lda     #$80
  9418:          jsr     LDDA6
  9419:          beq     @LC9D5
  9420:          jsr     LD125
  9421:          beq     @LC9EA
  9422:          jsr     LCF9B
  9423:  @LC9EA:
  9424:          ldx     F2PTR
  9425:          inx
  9426:          cpx     F2CNT
  9427:          bcc     @LC9B9
  9428:          lda     #$12
  9429:          sta     SA
  9430:          jmp     LDB02
  9431:          ; -----------------
  9432:  
  9433:  LC9FA:
  9434:          ldx     F2PTR
  9435:          lda     FILDRV,x
  9436:          and     #$01
  9437:          sta     DRVNUM
  9438:          lda     LFE85
  9439:          sta     TRACK
  9440:          lda     ENTSEC,x
  9441:          sta     SECTOR
  9442:          jsr     LD475
  9443:          ldx     F2PTR
  9444:          lda     ENTIND,x
  9445:          jsr     LD4C8
  9446:          ldx     F2PTR
  9447:          lda     PATTYP,x
  9448:          and     #$07
  9449:          sta     TYPE
  9450:          lda     #$00
  9451:          sta     REC
  9452:          jsr     LD9A0
  9453:          ldy     #$01
  9454:          jsr     LD125
  9455:          beq     @LCA31
  9456:          iny
  9457:  @LCA31:
  9458:          tya
  9459:          jmp     LD4C8
  9460:          ; --------------
  9461:  
  9462:  LCA35:
  9463:          lda     #$11
  9464:          sta     SA
  9465:  
  9466:  LCA39:
  9467:          jsr     LD39B
  9468:          sta     DATA
  9469:          ldx     LINDX
  9470:          lda     CHNRDY,x
  9471:          and     #$08
  9472:          sta     EIOFLG
  9473:          bne     @Rts
  9474:          jsr     LD125
  9475:          beq     @Rts
  9476:          lda     #$80
  9477:          jsr     LDD97
  9478:  @Rts:
  9479:          rts
  9480:          ; ----------------
  9481:  
  9482:  LCA53:
  9483:          jsr     LD1D3
  9484:          jsr     LE1CB
  9485:          lda     SSIND
  9486:          pha
  9487:          lda     SSNUM
  9488:          pha
  9489:          lda     #$12
  9490:          sta     SA
  9491:          jsr     LD107
  9492:          jsr     LD1D3
  9493:          jsr     LE1CB
  9494:          jsr     LE29C
  9495:          lda     SSIND
  9496:          sta     R1
  9497:          lda     SSNUM
  9498:          sta     R0
  9499:          lda     #$00
  9500:          sta     R2
  9501:          sta     RECPTR
  9502:          sta     RELPTR
  9503:          pla
  9504:          sta     SSNUM
  9505:          pla
  9506:          sta     SSIND
  9507:          jmp     LE33B
  9508:          ; ------------------
  9509:  
  9510:  cmd_rename:
  9511:          jsr     LC320
  9512:          lda     FILDRV + 1
  9513:          and     #$01
  9514:          sta     FILDRV + 1
  9515:          cmp     FILDRV
  9516:          beq     @LCA97
  9517:          ora     #$80
  9518:  @LCA97:
  9519:          sta     FILDRV
  9520:          jsr     LC44F
  9521:          jsr     LCAE7
  9522:          lda     FILDRV + 1
  9523:          and     #$01
  9524:          sta     DRVNUM
  9525:          lda     ENTSEC + 1
  9526:          sta     SECTOR
  9527:          jsr     LDE57
  9528:          jsr     LD599
  9529:          lda     ENTIND + 1
  9530:          clc
  9531:          adc     #$03
  9532:          jsr     LD4C8
  9533:          jsr     LDF93
  9534:          tay
  9535:          ldx     FILTBL
  9536:          lda     #$10
  9537:          jsr     LC66E
  9538:          jsr     LDE5E
  9539:          jsr     LD599
  9540:          jmp     CommandEnd
  9541:          ; --------------
  9542:  
  9543:  LCACC:
  9544:          lda     PATTYP + 1
  9545:          and     #$07
  9546:          sta     TYPE
  9547:          ldx     F2CNT
  9548:  @LCAD6:
  9549:          dex
  9550:          cpx     F1CNT
  9551:          bcc     @Rts
  9552:          lda     FILTRK,x
  9553:          bne     @LCAD6
  9554:          lda     #ERRORCODE_62_FILE_NOT_FOUND
  9555:          jmp     GenerateErrorMessage
  9556:          ; ----------------
  9557:  
  9558:  @Rts:
  9559:          rts
  9560:          ; ----------------
  9561:  
  9562:  LCAE7:
  9563:          jsr     LCACC
  9564:  @LCAEA:
  9565:          lda     FILTRK,x
  9566:          beq     @LCAF4
  9567:          lda     #ERRORCODE_63_FILE_EXISTS
  9568:          jmp     GenerateErrorMessage
  9569:          ; ----------------
  9570:  
  9571:  @LCAF4:
  9572:          dex
  9573:          bpl     @LCAEA
  9574:          rts
  9575:          ; ----------------
  9576:  
  9577:  ; execute memory functions (M-x)
  9578:  ;
  9579:  ; They are all of the form: M-<x><addr low><addr high>
  9580:  ;
  9581:  ; In particular, they are:
  9582:  ; M-R<addr low><addr high>            READ from <addr> 1 byte
  9583:  ; M-R<addr low><addr high><count>     READ from <addr> <count> byte
  9584:  ; M-W<addr low><addr high><count>...  WRITE to  <addr> <count> byte following the <count> byte
  9585:  ; M-E<addr low><addr high>...
  9586:  ;
  9587:  cmd_memory:
  9588:          ; check next character for '-'
  9589:          lda     CMDBUF + 1
  9590:          cmp     #'-'
  9591:          bne     @Error31SyntaxError     ; no '-' --> branch, output 31,SYNTAX ERROR     
  9592:  
  9593:          ; store the address low/high at T0/T0+1
  9594:          lda     CMDBUF + 3
  9595:          sta     T0
  9596:          lda     CMDBUF + 4
  9597:          sta     T0+1
  9598:  
  9599:          ; determine the exact command to execute
  9600:  
  9601:          ldy     #$00
  9602:          lda     CMDBUF + 2              ; get relevant command byte
  9603:  
  9604:          ; test for M-R
  9605:          cmp     #'R'
  9606:          beq     @cmd_memory_read        ; execute M-R
  9607:  
  9608:          jsr     NoOp                    ; contains only an RTS
  9609:  
  9610:          ; test for M-W
  9611:          cmp     #'W'
  9612:          beq     @cmd_memory_write       ; execute M-W
  9613:  
  9614:          ; test for M-E
  9615:          cmp     #'E'
  9616:          bne     @Error31SyntaxError     ; no M-E --> error, abort
  9617:  
  9618:          ; execute M-E by jumping to the address
  9619:          jmp     (T0)
  9620:  
  9621:  @cmd_memory_read:
  9622:          lda     (T0),y                  ; read the first byte at the given memory position
  9623:          sta     DATA                    ; remember it
  9624:  
  9625:          lda     CMDSIZ                  ; check the size of the M-R command
  9626:          cmp     #$06                    ; less than 6? (that is, no <count> was given?
  9627:          bcc     @OnlyOneByte            ; yes --> branch, we're done
  9628:  
  9629:          ldx     CMDBUF + 5              ; get the number of byte to read (<count>)
  9630:          dex                             ; minus 1, as we have already read one byte
  9631:          beq     @OnlyOneByte            ; there are null byte left --> branch, we're done
  9632:  
  9633:          ; if more than one byte is to be send, the remaining bytes are transferred
  9634:          ; as if these byte would by the error status (error channel). That is,
  9635:          ; the buffer to the error channel is set to the memory area.
  9636:          ;
  9637:          ; This approach has a problem, though: The handling of the error
  9638:          ; channel has some limitations:
  9639:          ; 1. no page crossing possible. You can even see it here, as only the low byte of
  9640:          ;    the end address can be written
  9641:          ; 2. On the page where the error channel is (page 2), we cannot read beyond the
  9642:          ;    start of the error channel buffer.
  9643:          ;    That's because the start of the "real" error buffer is hard-coded (cf. LD414).
  9644:          ;    If that address is reached, a new error message is generated.
  9645:          ;
  9646:          txa                             ; add count (-1, dex above) to start of buffer to read (only low byte)
  9647:          clc
  9648:          adc     T0
  9649:          inc     T0
  9650:          sta     LSTCHR + 5              ; store as last character (only low byte)
  9651:  
  9652:          lda     T0                      ; remember start of buffer
  9653:          sta     BUFTABERR               ; as start of error buffer
  9654:          lda     T0+1
  9655:          sta     BUFTABERR + 1
  9656:          jmp     LD443                   ; @@@TODO
  9657:          ; -------------------------
  9658:  
  9659:  @OnlyOneByte:
  9660:          jsr     LD0EB
  9661:          jmp     LD43A
  9662:          ; ------------------
  9663:  
  9664:  @Error31SyntaxError:
  9665:          lda     #ERRORCODE_31_SYNTAX_ERROR
  9666:          jmp     GenerateErrorMessage
  9667:          ; ----------------
  9668:  
  9669:  @cmd_memory_write:
  9670:  
  9671:          ; copy bytes from input buffer into destination
  9672:  
  9673:          ; when we enter here, y is 0.
  9674:  
  9675:          lda     CMDBUF + 6,y            ; get next byte
  9676:          sta     (T0),y                  ; store it into the destination
  9677:          iny                             ; increase offset into buffers
  9678:          cpy     CMDBUF + 5              ; are <count> byte copied?
  9679:          bcc     @cmd_memory_write       ; no --> branch, proceed with next byte
  9680:          rts
  9681:          ; ------------------
  9682:  
  9683:  
  9684:  ; Execute user (U) command
  9685:  ; 
  9686:  ; Commands have the form:
  9687:  ; Ux
  9688:  ; Ux:
  9689:  ; Ux:<SOMETHING>
  9690:  ; 
  9691:  ; x can be a digit (0-9) or a character.
  9692:  ;
  9693:  ; The user commands use a jump table to determine where each of them is executed.
  9694:  ; A not-so-well known fact of the user commands is that the jump table address
  9695:  ; can be redefined, so the jump table points to something else.
  9696:  ; In order to set the jump table back to the original value, the command 'U0'
  9697:  ; (that is, x=0 above) is used. In order to be able to do this, the U0 command is
  9698:  ; handled differently from the other U commands.
  9699:  ;
  9700:  ; Note that there is NO command to redefine the Ux vectors. Thus, in order to
  9701:  ; redefine the table, the vector (CMDUSER) has to be redefined "by hand".
  9702:  ;
  9703:  
  9704:  cmd_user:
  9705:          ldy     CMDBUF + 1              ; check for 'U0' command
  9706:          cpy     #'0'
  9707:          bne     NoU0Command             ; something else --> branch
  9708:  
  9709:          ; Special handling of U0 command
  9710:  
  9711:          ; U0 - initalize jump table for U commands
  9712:          ; (on the 1570 and 1571, the U0 command is also used for the special
  9713:          ; "fast serial" functions. That's why the command has to be patched for
  9714:          ; these devices.
  9715:  
  9716:  InitJumpTableForUxCommands:
  9717:  
  9718:  .if CompileDrive >= DRIVE_1570
  9719:  
  9720:          ; special handling on the 1570 and 1571 drives.
  9721:          ; if the routine finds out that it is not the special U0 command
  9722:          ; for fast serial, the equivalent of the ".else" path is executed
  9723:          ; on the 1570/1571, too.
  9724:          ;
  9725:          jmp     U0CommandPatch157x
  9726:          ; -------------------------
  9727:  
  9728:          FillNOP 6
  9729:  
  9730:  .else
  9731:  
  9732:          lda     #<AddressesUxCommands           ; store the default address of the U0
  9733:          sta     USRJMP                          ; jump table
  9734:          lda     #>AddressesUxCommands           ; into the location
  9735:          sta     USRJMP + 1
  9736:          rts
  9737:          ; -------------------------
  9738:  .endif
  9739:  
  9740:  NoU0Command:
  9741:          jsr     @ExecuteUxCommand               ; execute the user command
  9742:          jmp     CommandEnd                      ; back to command loop
  9743:          ; ------------------
  9744:  
  9745:  @ExecuteUxCommand:
  9746:          ; the command number is determined as follows (documented):
  9747:          ; U1, same as UA --> vector 0
  9748:          ; U2, same as UB --> vector 1
  9749:          ; ...
  9750:          ; U9, same as UI --> vector 8
  9751:          ; U:, same as UJ --> vector 9  (               same as NMI vector)
  9752:          ; U;, same as UK --> vector 10 (undocumented - same RESET vector)
  9753:          ; U<, same as UL --> vector 11 (undocumented - same IRQ vector, will crash)
  9754:          ;
  9755:          ; That is, the commands codes (in PETSCII) are $31..$3c (for 1, 2, ...)
  9756:          ; or $41..$4c (for A, B, ...).
  9757:          ; In order to get the command index, it is thus possible to get the value
  9758:          ; index = (PETSCII - 1) AND $0F
  9759:          ; with PETSCII being the PETSCII representation of the command byte.
  9760:          ; Note that this wil allow even other commands, and it will even work
  9761:          ; with lower and upper case bytes.
  9762:          ;
  9763:          dey                                     ; PETSCII of command minus 1
  9764:          tya
  9765:          and     #$0F                            ; now, A has the command index (s. large comment above)
  9766:          asl     a                               ; * 2 gives index into jump table
  9767:          tay
  9768:  
  9769:          ; get address from jump table into IP/IP+1
  9770:          lda     (USRJMP),y
  9771:          sta     IP
  9772:          iny
  9773:          lda     (USRJMP),y
  9774:          sta     IP + 1
  9775:  
  9776:  .if CompileDrive >= DRIVE_1570
  9777:          ; the 157x makes sure that the IRQ vector is called via BRK,
  9778:          ; not via JMP
  9779:          jmp     Patch1570ExecutionOfUCommand
  9780:  .else
  9781:          ; the 154x and 2031 do not care and execute everything.
  9782:          jmp     (IP)
  9783:  .endif
  9784:  
  9785:  LCB84:
  9786:          lda     LSTDRV
  9787:          sta     DRVNUM
  9788:          lda     SA
  9789:          pha
  9790:          jsr     LC63D
  9791:          pla
  9792:          sta     SA
  9793:          ldx     CMDSIZ
  9794:          dex
  9795:          bne     LCBA5
  9796:          lda     #$01
  9797:          jsr     LD1E2
  9798:          jmp     LCBF1
  9799:          ; ---------------
  9800:  Error70:
  9801:          lda     #ERRORCODE_70_NO_CHANNEL
  9802:          jmp     GenerateErrorMessage
  9803:          ; ----------------
  9804:  
  9805:  LCBA5:
  9806:          ldy     #$01
  9807:          jsr     CheckForAndSkipWhitespace
  9808:          ldx     FILSEC
  9809:          cpx     #$05
  9810:          bcs     Error70
  9811:          lda     #$00
  9812:          sta     T0
  9813:          sta     T1
  9814:          sec
  9815:  @LCBB8:
  9816:          rol     T0
  9817:          rol     T1
  9818:          dex
  9819:          bpl     @LCBB8
  9820:          lda     T0
  9821:          and     BUFUSE
  9822:          bne     Error70
  9823:          lda     T1
  9824:          and     BUFUSE + 1
  9825:          bne     Error70
  9826:          lda     T0
  9827:          ora     BUFUSE
  9828:          sta     BUFUSE
  9829:          lda     T1
  9830:          ora     BUFUSE + 1
  9831:          sta     BUFUSE + 1
  9832:          lda     #$00
  9833:          jsr     LD1E2
  9834:          ldx     LINDX
  9835:          lda     FILSEC
  9836:          sta     BUF0,x
  9837:          tax
  9838:          lda     DRVNUM
  9839:          sta     JOBS0,x
  9840:          sta     LSTJOB,x
  9841:  LCBF1:
  9842:          ldx     SA
  9843:          lda     LINTAB,x
  9844:          ora     #$40
  9845:          sta     LINTAB,x
  9846:          ldy     LINDX
  9847:          lda     #$FF
  9848:          sta     LSTCHR,y
  9849:          lda     #$89
  9850:          sta     CHNRDY,y
  9851:          lda     BUF0,y
  9852:          sta     L023E,y
  9853:          asl     a
  9854:          tax
  9855:          lda     #$01
  9856:          sta     BUFTAB0,x
  9857:          lda     #$0E
  9858:          sta     FILTYP,y
  9859:          jmp     CommandEnd
  9860:          ; -----------------
  9861:  
  9862:  ; Execute block (B) command
  9863:  ; 
  9864:  ; Commands have the form:
  9865:  ; B-x
  9866:  ; 
  9867:  ; x can be one of 'R', 'W', 'A', 'F', 'E', 'P'.
  9868:  ;
  9869:  ; This function does not check for more than that. Every command
  9870:  ; has to check its parameters individually.
  9871:  ;
  9872:  cmd_block:
  9873:          ldy     #$00                                    ; start search at first character
  9874:          ldx     #$00                                    ; start with first parameter
  9875:          lda     #'-'
  9876:          jsr     SearchInCmdline                         ; check for '-' as next char
  9877:          bne     cmd_block_found_dash                    ; found --> jump
  9878:  
  9879:          ; no dash ('-') --> return 31,SYNTAX ERROR
  9880:  
  9881:  Error31SyntaxError_2:
  9882:          lda     #ERRORCODE_31_SYNTAX_ERROR
  9883:          jmp     GenerateErrorMessage
  9884:          ; ----------------
  9885:  
  9886:  Error30SyntaxError_2:
  9887:          lda     #ERRORCODE_30_SYNTAX_ERROR
  9888:          jmp     GenerateErrorMessage
  9889:          ; ----------------
  9890:  
  9891:  cmd_block_found_dash:
  9892:          txa                                             ; get number of comma in command line
  9893:          bne     Error30SyntaxError_2                    ; not null --> error, because B-x does not allow comma
  9894:  
  9895:          ; check if this is a valid command, and if it is, which one
  9896:          ldx     #@CommandCharsTable_End - @CommandCharsTable - 1
  9897:          lda     CMDBUF,y                                ; read next character (the 'x' in 'B-x')
  9898:  @SearchCommandChar:
  9899:          cmp     @CommandCharsTable,x
  9900:          beq     @FoundChar
  9901:          dex
  9902:          bpl     @SearchCommandChar
  9903:          bmi     Error31SyntaxError_2                    ; command does not exist --> return 31,SYNTAX ERROR
  9904:          ; -----------------------
  9905:  
  9906:  @FoundChar:
  9907:          txa
  9908:          ora     #$80                                    ; @@@
  9909:          sta     CMDNUM
  9910:          jsr     ReadUpTo4NumericalParameter
  9911:  
  9912:          lda     CMDNUM                                  ; get the command number
  9913:          asl     a                                       ; convert it to an index into the command table (*2)
  9914:          tax
  9915:          lda     @CommandAddress + 1,x                   ; read address of command
  9916:          sta     T1
  9917:          lda     @CommandAddress,x
  9918:          sta     T0
  9919:          jmp     (T0)                                    ; execute command
  9920:          ; ------------------
  9921:  
  9922:          ; Table of possible 'B-x' commands, with x being one of:
  9923:  
  9924:  @CommandCharsTable:
  9925:          .byte   'A','F','R','W','E','P'
  9926:  @CommandCharsTable_End:
  9927:  
  9928:          ; The addresses of the 'B-x' commands, in the same order as in @CommandChars:
  9929:  @CommandAddress:
  9930:          .addr   cmd_block_allocate
  9931:          .addr   cmd_block_free
  9932:          .addr   cmd_block_read
  9933:          .addr   cmd_block_write
  9934:          .addr   cmd_block_execute
  9935:          .addr   cmd_buffer_pointer
  9936:  
  9937:  
  9938:  ; This function reads in up to 4 numerical parameters from the command line
  9939:  ;
  9940:  ; Returns:
  9941:  ;   F1CNT: The number of parameters
  9942:  ;   FILTRK + i: High byte of parameter i (with 0 <= i < F1CNT)
  9943:  ;   FILSEC + i: Low byte of parameter i (with 0 <= i < F1CNT)
  9944:  ;
  9945:  ReadUpTo4NumericalParameter:
  9946:          ldy     #$00                            ; position where to start searching
  9947:          ldx     #$00                            ; start with parameter 0
  9948:          lda     #':'
  9949:          jsr     SearchInCmdline                 ; check for a colon after the command
  9950:          bne     CheckForAndSkipWhitespace       ; no colon -> check for and skip whitespace
  9951:  
  9952:          ; there was no colon. Thus, restart command line processing directly after the 'B-x':
  9953:          ldy     #$03                            ; position read pointer after the 'B-x'
  9954:  
  9955:  CheckForAndSkipWhitespace:
  9956:          lda     CMDBUF,y                        ; get next char
  9957:          cmp     #' '
  9958:          beq     @SkipWhiteSpace                 ; space --> skip it
  9959:          cmp     #PETSCII_CRSR_RIGHT
  9960:          beq     @SkipWhiteSpace                 ; CRSR right --> skipt it
  9961:          cmp     #','
  9962:          bne     @NoMoreWhiteSpace               ; no comma -> we're done
  9963:  
  9964:  @SkipWhiteSpace:
  9965:          iny                                     ; advance to next char
  9966:          cpy     CMDSIZ                          ; already read the last char?
  9967:          bcc     CheckForAndSkipWhitespace       ; no --> check for next whitepsace
  9968:          rts                                     ; we are at the end of the buffer --> exit
  9969:          ; ----------------
  9970:  
  9971:  @NoMoreWhiteSpace:
  9972:          jsr     @ConvertParameterToBinary
  9973:          inc     F1CNT                           ; proceed to next parameter
  9974:          ldy     F2PTR                           ; get pointer to last read character
  9975:          cpx     #$04                            ; number of parameter < 4 + 1?
  9976:          bcc     @SkipWhiteSpace                 ; yes, try to get next parameter
  9977:          bcs     Error30SyntaxError_2            ; uncond. --> too many parameter
  9978:          ; --------------------
  9979:  
  9980:  @ConvertParameterToBinary:
  9981:          lda     #$00                            ; clear temporary storage
  9982:          sta     T0
  9983:          sta     T1
  9984:  
  9985:          sta     T3                              ; clear high byte of conversion
  9986:  
  9987:          ldx     #-1                             ; when converting the digits into a number, start with T0
  9988:  
  9989:  @ReadInCharacter:
  9990:          lda     CMDBUF,y                        ; get next char
  9991:  
  9992:          ; make sure it is one of '0', '1', ..., '9', ':', ';', '<', '=', '>', '?' (0x30..0x3F)
  9993:          ; @@@TODO: Why are ':' ... '?' allowed?
  9994:          cmp     #'?' + 1                        ; bigger than '?'?
  9995:          bcs     @NoDigit                        ; yes --> branch, no digit
  9996:          cmp     #'0'                            ; smaller than '0'?
  9997:          bcc     @NoDigit                        ; yes --> branch, no digit
  9998:          and     #$0F                            ; convert to hex digit
  9999:  
 10000:          ; move T0, T1, T2 to the right
 10001:          ; thus, rolling in the next digit
 10002:          ; at the end, T2 T1 T0 form a digital number
 10003:  
 10004:          pha
 10005:          lda     T1
 10006:          sta     T2
 10007:          lda     T0
 10008:          sta     T1
 10009:          pla
 10010:          sta     T0
 10011:  
 10012:          iny                                             ; proceed to next character
 10013:          cpy     CMDSIZ                                  ; already at the end of the buffer?
 10014:          bcc     @ReadInCharacter                        ; no, process the character
 10015:  
 10016:  @NoDigit:
 10017:          sty     F2PTR                                   ; remember read position in command line
 10018:  
 10019:          clc
 10020:          lda     #$00
 10021:  
 10022:          ; Now, T0 + 10 * T1 + 100 * T2 is the value of the digits given
 10023:          ; convert it into a binary number
 10024:  
 10025:  @NextDigit:
 10026:          inx                                     ; iterate through T0, T1, T2
 10027:          cpx     #3                              ; 3 digits already processed?
 10028:          bcs     @ConversionDone                 ; yes, conversion done
 10029:  
 10030:          ldy     T0,x                            ; get value of digit
 10031:  
 10032:          ; add the appropriate power of 10 as many times as the digits tells us
 10033:  @AddPowerOf10:
 10034:          dey
 10035:          bmi     @NextDigit
 10036:          adc     @PowersOf10,x                   ; add appropriate power of 10
 10037:          bcc     @AddPowerOf10                   ; no overflow --> add again
 10038:  
 10039:          ; there was an overflow, add to high byte
 10040:          clc                                     ; ??? @@@WHY Superfluous?
 10041:          inc     T3
 10042:          bne     @AddPowerOf10                   ; uncond., as three digits cannot exceed 16 bit
 10043:          ; ---------------
 10044:  
 10045:  @ConversionDone:
 10046:  
 10047:          ; store values for parameter x at FILTRK+x (HIGH) and FILSEC+x (LOW)
 10048:          pha
 10049:          ldx     F1CNT
 10050:          lda     T3
 10051:          sta     FILTRK,x
 10052:          pla
 10053:          sta     FILSEC,x
 10054:          rts
 10055:          ; -------------------
 10056:  
 10057:  @PowersOf10:
 10058:          .byte   1, 10, 100
 10059:  
 10060:  
 10061:  cmd_block_free:
 10062:          jsr     LCDF5
 10063:          jsr     LEF5F
 10064:          jmp     CommandEnd
 10065:          lda     #$01
 10066:          sta     WBAM
 10067:  
 10068:  
 10069:  cmd_block_allocate:
 10070:          jsr     LCDF5
 10071:          lda     SECTOR
 10072:          pha
 10073:          jsr     LF1FA
 10074:          beq     @LCD19
 10075:          pla
 10076:          cmp     SECTOR
 10077:          bne     @LCD2C
 10078:          jsr     LEF90
 10079:          jmp     CommandEnd
 10080:  @LCD19:
 10081:          pla
 10082:  @LCD1A:
 10083:          lda     #$00
 10084:          sta     SECTOR
 10085:          inc     TRACK
 10086:          lda     TRACK
 10087:          cmp     MAXTRACK_ADJUSTED
 10088:          bcs     Error65
 10089:          jsr     LF1FA
 10090:          beq     @LCD1A
 10091:  @LCD2C:
 10092:          lda     #ERRORCODE_65_NO_BLOCK
 10093:          jsr     LE645
 10094:  
 10095:  Error65:
 10096:          lda     #ERRORCODE_65_NO_BLOCK
 10097:          jsr     GenerateErrorMessage
 10098:  LCD36:
 10099:          jsr     LCDF2
 10100:          jmp     LD460
 10101:          ; -------------------
 10102:  
 10103:  LCD3C:
 10104:          jsr     LD12F
 10105:          lda     (BUFTAB0,x)
 10106:          rts
 10107:          ; ----------------
 10108:  
 10109:  LCD42:
 10110:          jsr     LCD36
 10111:          lda     #$00
 10112:          jsr     LD4C8
 10113:          jsr     LCD3C
 10114:          sta     LSTCHR,y
 10115:          lda     #$89
 10116:          sta     CHNRDY,y
 10117:          rts
 10118:  
 10119:  cmd_block_read:
 10120:          jsr     LCD42
 10121:          jsr     LD3EC
 10122:          jmp     CommandEnd
 10123:  
 10124:  CMD_U1:
 10125:          jsr     ReadUpTo4NumericalParameter
 10126:          jsr     LCD42
 10127:          lda     LSTCHR,y
 10128:          sta     L023E,y
 10129:          lda     #$FF
 10130:          sta     LSTCHR,y
 10131:          jmp     CommandEnd
 10132:  
 10133:  cmd_block_write:
 10134:          jsr     LCDF2
 10135:          jsr     LD4E8
 10136:          tay
 10137:          dey
 10138:          cmp     #$02
 10139:          bcs     @LCD81
 10140:          ldy     #$01
 10141:  @LCD81:
 10142:          lda     #$00
 10143:          jsr     LD4C8
 10144:          tya
 10145:          jsr     LCFF1
 10146:          txa
 10147:          pha
 10148:          jsr     LD464
 10149:          pla
 10150:          tax
 10151:  .if CompileDrive >= DRIVE_1570
 10152:          jsr     LFFAE
 10153:  .elseif CompileDrive >= DRIVE_1541C_02
 10154:          jsr     LC024
 10155:  .else
 10156:          jsr     LD3EE
 10157:  .endif
 10158:          jmp     CommandEnd
 10159:  
 10160:  CMD_U2:
 10161:          jsr     ReadUpTo4NumericalParameter
 10162:          jsr     LCDF2
 10163:          jsr     LD464
 10164:          jmp     CommandEnd
 10165:          ; ---------------
 10166:  
 10167:  cmd_block_execute:
 10168:          jsr     NoOp
 10169:          jsr     LCD36
 10170:  
 10171:          lda     #$00                                    ; low byte of buffer address (always 0)
 10172:          sta     T0
 10173:          ldx     JOBNUM                                  ; the buffer number which to execute
 10174:          lda     TableHighBytesOfBuffers,x               ; high byte of buffer address
 10175:          sta     T0+1
 10176:          jsr     @Execute
 10177:          jmp     CommandEnd
 10178:          ; ----------------
 10179:  
 10180:  @Execute:
 10181:          jmp     (T0)
 10182:          ; ----------------
 10183:  
 10184:  cmd_buffer_pointer:
 10185:          jsr     LCDD2
 10186:          lda     JOBNUM
 10187:          asl     a
 10188:          tax
 10189:          lda     FILSEC + 1
 10190:          sta     BUFTAB0,x
 10191:          jsr     LD12F
 10192:          jsr     LD3EE
 10193:          jmp     CommandEnd
 10194:          ; ------------------
 10195:  
 10196:  LCDD2:
 10197:          ldx     F1PTR
 10198:          inc     F1PTR
 10199:          lda     FILSEC,x
 10200:          tay
 10201:          dey
 10202:          dey
 10203:          cpy     #$0C
 10204:          bcc     @LCDE5
 10205:  @Err70NoChannel:
 10206:          lda     #ERRORCODE_70_NO_CHANNEL
 10207:          jmp     GenerateErrorMessage
 10208:          ; ----------------
 10209:  
 10210:  @LCDE5:
 10211:          sta     SA
 10212:          jsr     LD0EB
 10213:          bcs     @Err70NoChannel
 10214:          jsr     LDF93
 10215:          sta     JOBNUM
 10216:          rts
 10217:          ; ---------------
 10218:  
 10219:  LCDF2:
 10220:          jsr     LCDD2
 10221:  LCDF5:
 10222:          ldx     F1PTR
 10223:          lda     FILSEC,x
 10224:          and     #$01
 10225:          sta     DRVNUM
 10226:          lda     FILSEC + 2,x
 10227:          sta     SECTOR
 10228:          lda     FILSEC + 1,x
 10229:          sta     TRACK
 10230:          jsr     LD55F
 10231:          jmp     LC100
 10232:          ; --------------------
 10233:  
 10234:  LCE0E:
 10235:          jsr     @LCE2C
 10236:          jsr     LCE6E
 10237:          lda     ACCUM + 1
 10238:          sta     RELPTR
 10239:          jsr     LCE71
 10240:          inc     RELPTR
 10241:          inc     RELPTR
 10242:          lda     RESULT
 10243:          sta     SSNUM
 10244:          lda     ACCUM + 1
 10245:          asl     a
 10246:          clc
 10247:          adc     #$10
 10248:          sta     SSIND
 10249:          rts
 10250:          ; --------------------
 10251:  
 10252:  @LCE2C:
 10253:          jsr     LCED9
 10254:          sta     ACCUM + 3
 10255:          ldx     LINDX
 10256:          lda     RECL,x
 10257:          sta     ACCUM + 1
 10258:          lda     RECH,x
 10259:          sta     ACCUM + 2
 10260:          bne     @LCE41
 10261:          lda     ACCUM + 1
 10262:          beq     @LCE4C
 10263:  @LCE41:
 10264:          lda     ACCUM + 1
 10265:          sec
 10266:          sbc     #$01
 10267:          sta     ACCUM + 1
 10268:          bcs     @LCE4C
 10269:          dec     ACCUM + 2
 10270:  @LCE4C:
 10271:          lda     RS,x
 10272:          sta     T0
 10273:  @LCE50:
 10274:          lsr     T0
 10275:          bcc     @LCE57
 10276:          jsr     LCEED
 10277:  @LCE57:
 10278:          jsr     LCEE5
 10279:          lda     T0
 10280:          bne     @LCE50
 10281:          lda     RECPTR
 10282:          clc
 10283:          adc     RESULT
 10284:          sta     RESULT
 10285:          bcc     @LCE6D
 10286:          inc     RESULT + 1
 10287:          bne     @LCE6D
 10288:          inc     RESULT + 2
 10289:  @LCE6D:
 10290:          rts
 10291:          ; -------------------
 10292:  
 10293:  LCE6E:
 10294:          lda     #$FE
 10295:          .byte   ASM_BIT3
 10296:  LCE71:
 10297:          lda     #$78
 10298:          sta     T0
 10299:          ldx     #$03
 10300:  @LCE77:
 10301:          lda     ACCUM,x
 10302:          pha
 10303:          lda     R4,x
 10304:          sta     ACCUM,x
 10305:          pla
 10306:          sta     R4,x
 10307:          dex
 10308:          bne     @LCE77
 10309:          jsr     LCED9
 10310:  @LCE87:
 10311:          ldx     #$00
 10312:  @LCE89:
 10313:          lda     ACCUM + 1,x
 10314:          sta     ACCUM,x
 10315:          inx
 10316:          cpx     #$04
 10317:          bcc     @LCE89
 10318:          lda     #$00
 10319:          sta     ACCUM + 3
 10320:          bit     T0
 10321:          bmi     @LCEA3
 10322:          asl     ACCUM
 10323:          php
 10324:          lsr     ACCUM
 10325:          plp
 10326:          jsr     LCEE6
 10327:  @LCEA3:
 10328:          jsr     LCEED
 10329:          jsr     LCEE5
 10330:          bit     T0
 10331:          bmi     @LCEB0
 10332:          jsr     LCEE2
 10333:  @LCEB0:
 10334:          lda     ACCUM
 10335:          clc
 10336:          adc     ACCUM + 1
 10337:          sta     ACCUM + 1
 10338:          bcc     @LCEBF
 10339:          inc     ACCUM + 2
 10340:          bne     @LCEBF
 10341:          inc     ACCUM + 3
 10342:  @LCEBF:
 10343:          lda     ACCUM + 3
 10344:          ora     ACCUM + 2
 10345:          bne     @LCE87
 10346:          lda     ACCUM + 1
 10347:          sec
 10348:          sbc     T0
 10349:          bcc     @LCED8
 10350:          inc     RESULT
 10351:          bne     @LCED6
 10352:          inc     RESULT + 1
 10353:          bne     @LCED6
 10354:          inc     RESULT + 2
 10355:  @LCED6:
 10356:          sta     ACCUM + 1
 10357:  @LCED8:
 10358:          rts
 10359:          ; -----------------
 10360:  
 10361:  LCED9:
 10362:          lda     #$00
 10363:          sta     RESULT
 10364:          sta     RESULT + 1
 10365:          sta     RESULT + 2
 10366:          rts
 10367:          ; -----------------
 10368:  
 10369:  LCEE2:
 10370:          jsr     LCEE5
 10371:  LCEE5:
 10372:          clc
 10373:  LCEE6:
 10374:          rol     ACCUM + 1
 10375:          rol     ACCUM + 2
 10376:          rol     ACCUM + 3
 10377:          rts
 10378:          ; -----------------
 10379:  
 10380:  LCEED:
 10381:          clc
 10382:          ldx     #$FD
 10383:  @LCEF0:
 10384:          lda     RESULT + 3,x
 10385:          adc     ACCUM + 4,x
 10386:          sta     RESULT + 3,x
 10387:          inx
 10388:          bne     @LCEF0
 10389:          rts
 10390:  
 10391:  LCEFA:
 10392:          ldx     #$00
 10393:  :
 10394:          txa
 10395:          sta     LRUTBL,x
 10396:          inx
 10397:          cpx     #$04
 10398:  bne     :-
 10399:          lda     #$06
 10400:          sta     LRUTBL,x
 10401:          rts
 10402:          ; ---------------
 10403:  
 10404:  LCF09:
 10405:          ldy     #$04
 10406:          ldx     LINDX
 10407:  @LCF0D:
 10408:          lda     LRUTBL,y
 10409:          stx     LRUTBL,y
 10410:          cmp     LINDX
 10411:          beq     @Rts
 10412:          dey
 10413:          bmi     LCEFA
 10414:          tax
 10415:          jmp     @LCF0D
 10416:          ; ----------------
 10417:  
 10418:  @Rts:
 10419:          rts
 10420:          ; ----------------
 10421:  
 10422:  LCF1E:
 10423:          jsr     LCF09
 10424:          jsr     LDFB7
 10425:          bne     @LCF6C
 10426:          jsr     LD1D3
 10427:          jsr     LD28E
 10428:          bmi     Error70_2
 10429:          jsr     LDFC2
 10430:          lda     TRACK
 10431:          pha
 10432:          lda     SECTOR
 10433:          pha
 10434:          lda     #$01
 10435:          jsr     LD4F6
 10436:          sta     SECTOR
 10437:          lda     #$00
 10438:          jsr     LD4F6
 10439:          sta     TRACK
 10440:          beq     @LCF66
 10441:          jsr     LD125
 10442:          beq     @LCF57
 10443:          jsr     LDDAB
 10444:          bne     @LCF57
 10445:          jsr     LCF8C
 10446:          jmp     @LCF5D
 10447:          ; ----------------
 10448:  
 10449:  @LCF57:
 10450:          jsr     LCF8C
 10451:          jsr     LDE57
 10452:  @LCF5D:
 10453:          pla
 10454:          sta     SECTOR
 10455:          pla
 10456:          sta     TRACK
 10457:          jmp     @LCF6F
 10458:          ; ----------------
 10459:  
 10460:  @LCF66:
 10461:          pla
 10462:          sta     SECTOR
 10463:          pla
 10464:          sta     TRACK
 10465:  @LCF6C:
 10466:          jsr     LCF8C
 10467:  @LCF6F:
 10468:          jsr     LDF93
 10469:          tax
 10470:          jmp     LD599
 10471:          ; ----------------
 10472:  
 10473:  Error70_2:
 10474:          lda     #ERRORCODE_70_NO_CHANNEL
 10475:          jmp     GenerateErrorMessage
 10476:          ; ----------------
 10477:  
 10478:  LCF7B:
 10479:          jsr     LCF09
 10480:          jsr     LDFB7
 10481:          bne     @Rts
 10482:          jsr     LD28E
 10483:          bmi     Error70_2
 10484:          jsr     LDFC2
 10485:  @Rts:
 10486:          rts
 10487:          ; ----------------
 10488:  
 10489:  LCF8C:
 10490:          ldx     LINDX
 10491:          lda     BUF0,x
 10492:          eor     #$80
 10493:          sta     BUF0,x
 10494:          lda     BUF1,x
 10495:          eor     #$80
 10496:          sta     BUF1,x
 10497:          rts
 10498:          ; ----------------
 10499:  
 10500:  LCF9B:
 10501:          ldx     #$12
 10502:          stx     SA
 10503:          jsr     LD107
 10504:          jsr     LC100
 10505:          jsr     LD125
 10506:          bcc     @LCFAF
 10507:          lda     #$20
 10508:          jsr     LDD9D
 10509:  @LCFAF:
 10510:          lda     SA
 10511:          cmp     #$0F
 10512:          beq     LCFD8
 10513:          bne     LCFBF
 10514:          ; ----------------
 10515:  
 10516:  LCFB7:
 10517:          lda     ORGSA
 10518:          and     #$8F
 10519:          cmp     #$0F
 10520:          bcs     LCFD8
 10521:  LCFBF:
 10522:          jsr     LD125
 10523:          bcs     @LCFC9
 10524:          lda     DATA
 10525:          jmp     LD19D
 10526:          ; ----------------
 10527:  
 10528:  @LCFC9:
 10529:          bne     @LCFCE
 10530:          jmp     LE0AB
 10531:          ; ----------------
 10532:  
 10533:  @LCFCE:
 10534:          lda     DATA
 10535:          jsr     LCFF1
 10536:          ldy     LINDX
 10537:          jmp     LD3EE
 10538:          ; ----------------
 10539:  
 10540:  LCFD8:
 10541:          lda     #$04
 10542:          sta     LINDX
 10543:          jsr     LD4E8
 10544:          cmp     #$2A
 10545:          beq     @LCFE8
 10546:          lda     DATA
 10547:          jsr     LCFF1
 10548:  @LCFE8:
 10549:          lda     EIOFLG
 10550:          beq     @LCFED
 10551:          rts
 10552:          ; ----------------
 10553:  
 10554:  @LCFED:
 10555:          inc     CMDWAT
 10556:          rts
 10557:          ; ----------------
 10558:  
 10559:  
 10560:  LCFF1:
 10561:          pha
 10562:          jsr     LDF93
 10563:          bpl     LCFFD
 10564:          pla
 10565:          lda     #ERRORCODE_61_FILE_NOT_OPEN
 10566:          jmp     GenerateErrorMessage
 10567:          ; ----------------
 10568:  
 10569:  LCFFD:
 10570:          asl     a
 10571:          tax
 10572:          pla
 10573:          sta     (BUFTAB0,x)
 10574:          inc     BUFTAB0,x
 10575:          rts
 10576:          ; ----------------
 10577:  
 10578:  cmd_init:
 10579:          jsr     LC1D1
 10580:  .if CompileDrive >= DRIVE_1571_05
 10581:          jsr     LABA6
 10582:  .else
 10583:          jsr     LD042
 10584:  .endif
 10585:          jmp     CommandEnd
 10586:          ; ----------------
 10587:  
 10588:  LD00E:
 10589:          jsr     LF10F
 10590:          tay
 10591:          ldx     BUF0,y
 10592:          cpx     #$FF
 10593:          bne     @LD02C
 10594:          pha
 10595:          jsr     LD28E
 10596:          tax
 10597:          bpl     @LD024
 10598:          lda     #ERRORCODE_70_NO_CHANNEL
 10599:  .if CompileDrive >= DRIVE_1571_05
 10600:          jsr     LE645
 10601:  .else
 10602:          jsr     LE648
 10603:  .endif
 10604:  
 10605:  @LD024:
 10606:          pla
 10607:          tay
 10608:          txa
 10609:          ora     #$80
 10610:          sta     BUF0,y
 10611:  @LD02C:
 10612:          txa
 10613:          and     #$0F
 10614:          sta     JOBNUM
 10615:          ldx     #$00
 10616:          stx     SECTOR
 10617:          ldx     LFE85
 10618:          stx     TRACK
 10619:          jsr     LD6D3
 10620:          lda     #$B0
 10621:  
 10622:  .if CompileDrive >= DRIVE_1571
 10623:          jmp     LA6E5
 10624:  .else
 10625:          jmp     LD58C
 10626:  .endif
 10627:          ; ----------------
 10628:  
 10629:  LD042:
 10630:          jsr     LF0D1
 10631:          jsr     LD313
 10632:          jsr     LD00E
 10633:          ldx     DRVNUM
 10634:          lda     #$00
 10635:          sta     MDIRTY,x
 10636:          txa
 10637:          asl     a
 10638:          tax
 10639:          lda     HEADER
 10640:          sta     DiskID0,x
 10641:          lda     HEADER + 1
 10642:          sta     DiskID0 + 1,x
 10643:  .if CompileDrive >= DRIVE_1571_05
 10644:          jsr     LA667_PATCH
 10645:  .elseif CompileDrive >= DRIVE_1571
 10646:          jsr     LA667
 10647:  .else
 10648:          jsr     LD586
 10649:  .endif
 10650:          lda     JOBNUM
 10651:          asl     a
 10652:          tax
 10653:          lda     #$02
 10654:          sta     BUFTAB0,x
 10655:          lda     (BUFTAB0,x)
 10656:          ldx     DRVNUM
 10657:          sta     DSKVER,x
 10658:          lda     #$00
 10659:  .if CompileDrive >= DRIVE_1570
 10660:          jmp     LAA1D
 10661:          FillNOP 1
 10662:  .elseif CompileDrive >= DRIVE_1541C_02
 10663:          jmp     LFFC7
 10664:          FillNOP 1
 10665:  .else
 10666:          sta     WPSW,x
 10667:          sta     NODRV,x
 10668:  .endif
 10669:  LD075:
 10670:          jsr     LEF3A
 10671:          ldy     #$04
 10672:          lda     #$00
 10673:          tax
 10674:  LD07D:
 10675:          clc
 10676:          adc     (BMPNT),y
 10677:          bcc     LD083
 10678:          inx
 10679:  LD083:
 10680:          iny
 10681:          iny
 10682:          iny
 10683:          iny
 10684:          cpy     #$48
 10685:          beq     LD083
 10686:          cpy     #$90
 10687:          bne     LD07D
 10688:          pha
 10689:          txa
 10690:          ldx     DRVNUM
 10691:          sta     NDBH,x
 10692:          pla
 10693:  .if CompileDrive >= DRIVE_1571
 10694:          jmp     LA951
 10695:  .else
 10696:          sta     NDBL,x
 10697:  .endif
 10698:          rts
 10699:  LD09B:
 10700:          jsr     LD6D0
 10701:          jsr     LD0C3
 10702:          jsr     LD599
 10703:          jsr     LD137
 10704:          sta     TRACK
 10705:          jsr     LD137
 10706:          sta     SECTOR
 10707:          rts
 10708:  LD0AF:
 10709:          jsr     LD09B
 10710:          lda     TRACK
 10711:          bne     LD0B7
 10712:          rts
 10713:  LD0B7:
 10714:          jsr     LCF1E
 10715:          jsr     LD6D0
 10716:          jsr     LD0C3
 10717:          jmp     LCF1E
 10718:  LD0C3:
 10719:          lda     #$80
 10720:          bne     LD0C9
 10721:  LD0C7:
 10722:          lda     #$90
 10723:  LD0C9:
 10724:          sta     CMD
 10725:          jsr     LDF93
 10726:          tax
 10727:          jsr     LD506
 10728:          txa
 10729:          pha
 10730:          asl     a
 10731:          tax
 10732:          lda     #$00
 10733:          sta     BUFTAB0,x
 10734:          jsr     LD125
 10735:          cmp     #$04
 10736:          bcs     LD0E8
 10737:          inc     RECL,x
 10738:          bne     LD0E8
 10739:          inc     RECH,x
 10740:  LD0E8:
 10741:          pla
 10742:          tax
 10743:          rts
 10744:  LD0EB:
 10745:          lda     SA
 10746:          cmp     #$13
 10747:          bcc     LD0F3
 10748:          and     #$0F
 10749:  LD0F3:
 10750:          cmp     #$0F
 10751:          bne     LD0F9
 10752:          lda     #$10
 10753:  LD0F9:
 10754:          tax
 10755:          sec
 10756:          lda     LINTAB,x
 10757:          bmi     LD106
 10758:          and     #$0F
 10759:          sta     LINDX
 10760:          tax
 10761:          clc
 10762:  LD106:
 10763:          rts
 10764:  LD107:
 10765:          lda     SA
 10766:          cmp     #$13
 10767:          bcc     LD10F
 10768:          and     #$0F
 10769:  LD10F:
 10770:          tax
 10771:          lda     LINTAB,x
 10772:          tay
 10773:          asl     a
 10774:          bcc     LD121
 10775:          bmi     LD123
 10776:  LD119:
 10777:          tya
 10778:          and     #$0F
 10779:          sta     LINDX
 10780:          tax
 10781:          clc
 10782:          rts
 10783:  LD121:
 10784:          bmi     LD119
 10785:  LD123:
 10786:          sec
 10787:          rts
 10788:  LD125:
 10789:          ldx     LINDX
 10790:          lda     FILTYP,x
 10791:          lsr     a
 10792:          and     #$07
 10793:          cmp     #$04
 10794:          rts
 10795:  LD12F:
 10796:          jsr     LDF93
 10797:          asl     a
 10798:          tax
 10799:          ldy     LINDX
 10800:          rts
 10801:  LD137:
 10802:          jsr     LD12F
 10803:          lda     LSTCHR,y
 10804:          beq     LD151
 10805:          lda     (BUFTAB0,x)
 10806:          pha
 10807:          lda     BUFTAB0,x
 10808:          cmp     LSTCHR,y
 10809:          bne     LD14D
 10810:          lda     #$FF
 10811:          sta     BUFTAB0,x
 10812:  LD14D:
 10813:          pla
 10814:          inc     BUFTAB0,x
 10815:          rts
 10816:  LD151:
 10817:          lda     (BUFTAB0,x)
 10818:          inc     BUFTAB0,x
 10819:          rts
 10820:  LD156:
 10821:          jsr     LD137
 10822:          bne     LD191
 10823:          sta     DATA
 10824:          lda     LSTCHR,y
 10825:          beq     LD16A
 10826:          lda     #$80
 10827:          sta     CHNRDY,y
 10828:          lda     DATA
 10829:          rts
 10830:  LD16A:
 10831:          jsr     LCF1E
 10832:          lda     #$00
 10833:          jsr     LD4C8
 10834:          jsr     LD137
 10835:          cmp     #$00
 10836:          beq     LD192
 10837:          sta     TRACK
 10838:          jsr     LD137
 10839:          sta     SECTOR
 10840:          jsr     LCF1E
 10841:          jsr     LD1D3
 10842:          jsr     LD6D0
 10843:          jsr     LD0C3
 10844:          jsr     LCF1E
 10845:          lda     DATA
 10846:  LD191:
 10847:          rts
 10848:  LD192:
 10849:          jsr     LD137
 10850:          ldy     LINDX
 10851:          sta     LSTCHR,y
 10852:          lda     DATA
 10853:          rts
 10854:  LD19D:
 10855:          jsr     LCFF1
 10856:          beq     LD1A3
 10857:          rts
 10858:  LD1A3:
 10859:          jsr     LD1D3
 10860:          jsr     LF11E
 10861:          lda     #$00
 10862:          jsr     LD4C8
 10863:          lda     TRACK
 10864:          jsr     LCFF1
 10865:          lda     SECTOR
 10866:          jsr     LCFF1
 10867:          jsr     LD0C7
 10868:          jsr     LCF1E
 10869:          jsr     LD6D0
 10870:          lda     #$02
 10871:          jmp     LD4C8
 10872:  LD1C6:
 10873:          sta     T0
 10874:          jsr     LD4E8
 10875:          clc
 10876:          adc     T0
 10877:          sta     BUFTAB0,x
 10878:          sta     DIRBUF
 10879:          rts
 10880:  LD1D3:
 10881:          jsr     LDF93
 10882:          tax
 10883:          lda     LSTJOB,x
 10884:          and     #$01
 10885:          sta     DRVNUM
 10886:          rts
 10887:  LD1DF:
 10888:          sec
 10889:          bcs     LD1E3
 10890:  LD1E2:
 10891:          clc
 10892:  LD1E3:
 10893:          php
 10894:          sta     T0
 10895:          jsr     LD227
 10896:          jsr     LD37F
 10897:          sta     LINDX
 10898:          ldx     SA
 10899:          plp
 10900:          bcc     LD1F5
 10901:          ora     #$80
 10902:  LD1F5:
 10903:          sta     LINTAB,x
 10904:          and     #$3F
 10905:          tay
 10906:          lda     #$FF
 10907:          sta     BUF0,y
 10908:          sta     BUF1,y
 10909:          sta     SS,y
 10910:          dec     T0
 10911:          bmi     LD226
 10912:          jsr     LD28E
 10913:          bpl     LD217
 10914:  LD20F:
 10915:          jsr     LD25A
 10916:          lda     #ERRORCODE_70_NO_CHANNEL
 10917:          jmp     GenerateErrorMessage
 10918:          ; ----------------
 10919:  
 10920:  LD217:
 10921:          sta     BUF0,y
 10922:          dec     T0
 10923:          bmi     LD226
 10924:          jsr     LD28E
 10925:          bmi     LD20F
 10926:          sta     BUF1,y
 10927:  LD226:
 10928:          rts
 10929:  LD227:
 10930:          lda     SA
 10931:          cmp     #$0F
 10932:          bne     LD22E
 10933:          rts
 10934:  LD22E:
 10935:          ldx     SA
 10936:          lda     LINTAB,x
 10937:          cmp     #$FF
 10938:          beq     @LD259
 10939:          and     #$3F
 10940:          sta     LINDX
 10941:          lda     #$FF
 10942:          sta     LINTAB,x
 10943:          ldx     LINDX
 10944:          lda     #$00
 10945:          sta     CHNRDY,x
 10946:          jsr     LD25A
 10947:          ldx     LINDX
 10948:          lda     #$01
 10949:  @LD24D:
 10950:          dex
 10951:          bmi     @LD253
 10952:          asl     a
 10953:          bne     @LD24D
 10954:  @LD253:
 10955:          ora     LINUSE
 10956:          sta     LINUSE
 10957:  @LD259:
 10958:          rts
 10959:          ; ----------
 10960:  
 10961:  LD25A:
 10962:          ldx     LINDX
 10963:          lda     BUF0,x
 10964:          cmp     #$FF
 10965:          beq     @LD26B
 10966:          pha
 10967:          lda     #$FF
 10968:          sta     BUF0,x
 10969:          pla
 10970:          jsr     LD2F3
 10971:  @LD26B:
 10972:          ldx     LINDX
 10973:          lda     BUF1,x
 10974:          cmp     #$FF
 10975:          beq     @LD27C
 10976:          pha
 10977:          lda     #$FF
 10978:          sta     BUF1,x
 10979:          pla
 10980:          jsr     LD2F3
 10981:  @LD27C:
 10982:          ldx     LINDX
 10983:          lda     SS,x
 10984:          cmp     #$FF
 10985:          beq     @LD28D
 10986:          pha
 10987:          lda     #$FF
 10988:          sta     SS,x
 10989:          pla
 10990:          jsr     LD2F3
 10991:  @LD28D:
 10992:          rts
 10993:          ; ---------
 10994:  
 10995:  LD28E:
 10996:          tya
 10997:          pha
 10998:          ldy     #$01
 10999:          jsr     LD2BA
 11000:          bpl     LD2A3
 11001:          dey
 11002:          jsr     LD2BA
 11003:          bpl     LD2A3
 11004:          jsr     LD339
 11005:          tax
 11006:          bmi     LD2B6
 11007:  LD2A3:
 11008:          lda     JOBS0,x
 11009:          bmi     LD2A3
 11010:          lda     DRVNUM
 11011:          sta     JOBS0,x
 11012:          sta     LSTJOB,x
 11013:          txa
 11014:          asl     a
 11015:          tay
 11016:          lda     #$02
 11017:          sta     BUFTAB0,y
 11018:  LD2B6:
 11019:          pla
 11020:          tay
 11021:          txa
 11022:          rts
 11023:  LD2BA:
 11024:          ldx     #$07
 11025:  LD2BC:
 11026:          lda     BUFUSE,y
 11027:          and     LEFE9,x
 11028:          beq     LD2C8
 11029:          dex
 11030:          bpl     LD2BC
 11031:          rts
 11032:  LD2C8:
 11033:          lda     BUFUSE,y
 11034:          eor     LEFE9,x
 11035:          sta     BUFUSE,y
 11036:          txa
 11037:          dey
 11038:          bmi     LD2D8
 11039:          clc
 11040:          adc     #$08
 11041:  LD2D8:
 11042:          tax
 11043:  LD2D9:
 11044:          rts
 11045:  LD2DA:
 11046:          ldx     LINDX
 11047:          lda     BUF0,x
 11048:          bmi     LD2E9
 11049:          txa
 11050:          clc
 11051:          adc     #$07
 11052:          tax
 11053:          lda     BUF0,x
 11054:          bpl     LD2D9
 11055:  LD2E9:
 11056:          cmp     #$FF
 11057:          beq     LD2D9
 11058:          pha
 11059:          lda     #$FF
 11060:          sta     BUF0,x
 11061:          pla
 11062:  
 11063:  LD2F3:
 11064:          and     #$0F
 11065:          tay
 11066:          iny
 11067:          ldx     #$10
 11068:  LD2F9:
 11069:          ror     BUFUSE + 1
 11070:          ror     BUFUSE
 11071:          dey
 11072:          bne     LD303
 11073:          clc
 11074:  LD303:
 11075:          dex
 11076:          bpl     LD2F9
 11077:          rts
 11078:  LD307:
 11079:          lda     #$0E
 11080:          sta     SA
 11081:  LD30B:
 11082:          jsr     LD227
 11083:          dec     SA
 11084:          bne     LD30B
 11085:          rts
 11086:  
 11087:  LD313:
 11088:          lda     #$0E
 11089:          sta     SA
 11090:  LD317:
 11091:          ldx     SA
 11092:          lda     LINTAB,x
 11093:          cmp     #$FF
 11094:          beq     LD334
 11095:          and     #$3F
 11096:          sta     LINDX
 11097:          jsr     LDF93
 11098:          tax
 11099:          lda     LSTJOB,x
 11100:          and     #$01
 11101:          cmp     DRVNUM
 11102:          bne     LD334
 11103:          jsr     LD227
 11104:  LD334:
 11105:          dec     SA
 11106:          bpl     LD317
 11107:          rts
 11108:  LD339:
 11109:          lda     T0
 11110:          pha
 11111:          ldy     #$00
 11112:  LD33E:
 11113:          ldx     LRUTBL,y
 11114:          lda     BUF0,x
 11115:          bpl     LD348
 11116:          cmp     #$FF
 11117:          bne     LD35E
 11118:  LD348:
 11119:          txa
 11120:          clc
 11121:          adc     #$07
 11122:          tax
 11123:          lda     BUF0,x
 11124:          bpl     LD355
 11125:          cmp     #$FF
 11126:          bne     LD35E
 11127:  LD355:
 11128:          iny
 11129:          cpy     #$05
 11130:          bcc     LD33E
 11131:          ldx     #$FF
 11132:          bne     LD37A
 11133:  LD35E:
 11134:          stx     T0
 11135:          and     #$3F
 11136:          tax
 11137:  LD363:
 11138:          lda     JOBS0,x
 11139:          bmi     LD363
 11140:  .if CompileDrive >= DRIVE_1571_05
 11141:          jmp     LAA3F
 11142:          FillNOP 1
 11143:  .elseif CompileDrive >= DRIVE_1571
 11144:          cmp     #$02
 11145:          bcc     LD373
 11146:  .elseif CompileDrive >= DRIVE_1570
 11147:          jmp     LAA3F
 11148:          FillNOP 1
 11149:  .elseif CompileDrive >= DRIVE_1541C_02
 11150:          jmp     LFF91
 11151:          FillNOP 1
 11152:  .else
 11153:          cmp     #$02
 11154:          bcc     LD373
 11155:  .endif
 11156:  LD36B:
 11157:          ldx     T0
 11158:          cpx     #$07
 11159:          bcc     LD348
 11160:          bcs     LD355
 11161:  LD373:
 11162:          ldy     T0
 11163:          lda     #$FF
 11164:          sta     BUF0,y
 11165:  LD37A:
 11166:          pla
 11167:          sta     T0
 11168:          txa
 11169:          rts
 11170:  LD37F:
 11171:          ldy     #$00
 11172:          lda     #$01
 11173:  LD383:
 11174:          bit     LINUSE
 11175:          bne     LD391
 11176:          iny
 11177:          asl     a
 11178:          bne     LD383
 11179:          lda     #ERRORCODE_70_NO_CHANNEL
 11180:          jmp     GenerateErrorMessage
 11181:          ; ----------------
 11182:  
 11183:  LD391:
 11184:          eor     #$FF
 11185:          and     LINUSE
 11186:          sta     LINUSE
 11187:          tya
 11188:          rts
 11189:  LD39B:
 11190:          jsr     LD0EB
 11191:          jsr     LC100
 11192:          jsr     LD3AA
 11193:          ldx     LINDX
 11194:          lda     L023E,x
 11195:          rts
 11196:  LD3AA:
 11197:          ldx     LINDX
 11198:          jsr     LD125
 11199:          bne     LD3B4
 11200:          jmp     LE120
 11201:  LD3B4:
 11202:          lda     SA
 11203:          cmp     #$0F
 11204:          beq     LD414
 11205:          lda     CHNRDY,x
 11206:          and     #$08
 11207:          bne     LD3D3
 11208:          jsr     LD125
 11209:          cmp     #$07
 11210:          bne     LD3CE
 11211:          lda     #$89
 11212:          sta     CHNRDY,x
 11213:          jmp     LD3DE
 11214:  LD3CE:
 11215:          lda     #$00
 11216:          sta     CHNRDY,x
 11217:          rts
 11218:  LD3D3:
 11219:          lda     SA
 11220:          beq     LD409
 11221:          jsr     LD125
 11222:          cmp     #$04
 11223:          bcc     LD400
 11224:  LD3DE:
 11225:          jsr     LD12F
 11226:          lda     BUFTAB0,x
 11227:          cmp     LSTCHR,y
 11228:          bne     LD3EC
 11229:          lda     #$00
 11230:          sta     BUFTAB0,x
 11231:  LD3EC:
 11232:          inc     BUFTAB0,x
 11233:  LD3EE:
 11234:          lda     (BUFTAB0,x)
 11235:          sta     L023E,y
 11236:          lda     BUFTAB0,x
 11237:          cmp     LSTCHR,y
 11238:          bne     LD3FF
 11239:          lda     #$81
 11240:          sta     CHNRDY,y
 11241:  LD3FF:
 11242:          rts
 11243:  LD400:
 11244:          jsr     LD156
 11245:  LD403:
 11246:          ldx     LINDX
 11247:          sta     L023E,x
 11248:          rts
 11249:  LD409:
 11250:          lda     DIRLST
 11251:          beq     LD400
 11252:          jsr     LED67
 11253:          jmp     LD403
 11254:  LD414:
 11255:          jsr     LD4E8
 11256:          cmp     #<(ERRBUF - 1)
 11257:          bne     LD433
 11258:          lda     DIRBUF + 1
 11259:          cmp     #>(ERRBUF - 1)
 11260:          bne     LD433
 11261:          lda     #$0D
 11262:          sta     DATA
 11263:          jsr     LC123
 11264:          lda     #ERRORCODE_00_OK
 11265:          jsr     SetErrorCodeNoTS
 11266:          dec     BUFTABERR
 11267:          lda     #$80
 11268:          bne     LD445
 11269:  LD433:
 11270:          jsr     LD137
 11271:          sta     DATA
 11272:          bne     LD443
 11273:  LD43A:
 11274:          lda     #<(ERRBUF - 1)
 11275:          jsr     LD4C8
 11276:          lda     #$02                    ; @@@TODO >(ERRBUF - 1)???
 11277:          sta     BUFTAB0 + 1,x
 11278:  LD443:
 11279:          lda     #$88
 11280:  LD445:
 11281:          sta     CHNRDY + 5
 11282:          lda     DATA
 11283:          sta     L0243
 11284:          rts
 11285:  LD44D:
 11286:          jsr     LDF93
 11287:          asl     a
 11288:          tax
 11289:          lda     #$00
 11290:          sta     BUFTAB0,x
 11291:          lda     (BUFTAB0,x)
 11292:          beq     LD45F
 11293:          dec     BUFTAB0,x
 11294:          jmp     LD156
 11295:  LD45F:
 11296:          rts
 11297:  LD460:
 11298:          lda     #$80
 11299:          bne     LD466
 11300:  LD464:
 11301:          lda     #$90
 11302:  LD466:
 11303:          ora     DRVNUM
 11304:          sta     CMD
 11305:          lda     JOBNUM
 11306:          jsr     LD6D3
 11307:          ldx     JOBNUM
 11308:          jmp     LD593
 11309:  LD475:
 11310:          lda     #$01
 11311:  LD477:
 11312:          sta     TYPE
 11313:          lda     #$11
 11314:          sta     SA
 11315:          jsr     LDC46
 11316:          lda     #$02
 11317:          jmp     LD4C8
 11318:  LD486:
 11319:          lda     #$12
 11320:          sta     SA
 11321:          jmp     LDCDA
 11322:  LD48D:
 11323:          jsr     LDE3B
 11324:          lda     #$01
 11325:          sta     T0
 11326:          lda     SECINC
 11327:          pha
 11328:          lda     #$03
 11329:          sta     SECINC
 11330:          jsr     LF12D
 11331:          pla
 11332:          sta     SECINC
 11333:          lda     #$00
 11334:          jsr     LD4C8
 11335:          lda     TRACK
 11336:          jsr     LCFF1
 11337:          lda     SECTOR
 11338:          jsr     LCFF1
 11339:          jsr     LD0C7
 11340:          jsr     LD599
 11341:          lda     #$00
 11342:          jsr     LD4C8
 11343:  LD4BB:
 11344:          jsr     LCFF1
 11345:          bne     LD4BB
 11346:          jsr     LCFF1
 11347:          lda     #$FF
 11348:          jmp     LCFF1
 11349:  LD4C8:
 11350:          sta     T0
 11351:          jsr     LDF93
 11352:          asl     a
 11353:          tax
 11354:          lda     BUFTAB0 + 1,x
 11355:          sta     DIRBUF + 1
 11356:          lda     T0
 11357:          sta     BUFTAB0,x
 11358:          sta     DIRBUF
 11359:          rts
 11360:  LD4DA:
 11361:          lda     #$11
 11362:          sta     SA
 11363:          jsr     LD227
 11364:          lda     #$12
 11365:          sta     SA
 11366:          jmp     LD227
 11367:          ; -------------
 11368:  LD4E8:
 11369:          jsr     LDF93
 11370:  LD4EB:
 11371:          asl     a
 11372:          tax
 11373:          lda     BUFTAB0 + 1,x
 11374:          sta     DIRBUF + 1
 11375:          lda     BUFTAB0,x
 11376:          sta     DIRBUF
 11377:          rts
 11378:  LD4F6:
 11379:          sta     T2
 11380:          jsr     LDF93
 11381:          tax
 11382:          lda     TableHighBytesOfBuffers,x
 11383:          sta     T3
 11384:          ldy     #$00
 11385:          lda     (T2),y
 11386:          rts
 11387:  LD506:
 11388:          lda     LSTJOB,x
 11389:          and     #$01
 11390:          ora     CMD
 11391:  LD50E:
 11392:          pha
 11393:          stx     JOBNUM
 11394:          txa
 11395:          asl     a
 11396:          tax
 11397:          lda     SECTOR0,x
 11398:          sta     CMD
 11399:          lda     TRACK0,x
 11400:          beq     LD54A
 11401:          cmp     MAXTRACK_ADJUSTED
 11402:          bcs     LD54A
 11403:          tax
 11404:          pla
 11405:          pha
 11406:          and     #$F0
 11407:          cmp     #$90
 11408:          bne     LD57A
 11409:          pla
 11410:          pha
 11411:          lsr     a
 11412:          bcs     LD535
 11413:          lda     DSKVER
 11414:          bcc     LD538
 11415:  LD535:
 11416:          lda     DSKVER + 1
 11417:  LD538:
 11418:          beq     LD53F
 11419:          cmp     LFED5
 11420:          bne     LD572
 11421:  LD53F:
 11422:          txa
 11423:          jsr     LF24B
 11424:          cmp     CMD
 11425:          beq     LD54A
 11426:          bcs     LD57A
 11427:  LD54A:
 11428:          jsr     LD552
 11429:  LD54D:
 11430:          lda     #ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR
 11431:          jmp     LE645
 11432:  LD552:
 11433:          lda     JOBNUM
 11434:          asl     a
 11435:          tax
 11436:          lda     TRACK0,x
 11437:          sta     TRACK
 11438:          lda     SECTOR0,x
 11439:          sta     SECTOR
 11440:          rts
 11441:  LD55F:
 11442:          lda     TRACK
 11443:          beq     LD54D
 11444:          cmp     MAXTRACK_ADJUSTED
 11445:          bcs     LD54D
 11446:          jsr     LF24B
 11447:          cmp     SECTOR
 11448:          beq     LD54D
 11449:          bcc     LD54D
 11450:          rts
 11451:  LD572:
 11452:          jsr     LD552
 11453:          lda     #ERRORCODE_73_IDENTIFY
 11454:          jmp     LE645
 11455:  LD57A:
 11456:          ldx     JOBNUM
 11457:          pla
 11458:          sta     CMD
 11459:          sta     JOBS0,x
 11460:          sta     LSTJOB,x
 11461:          rts
 11462:  LD586:
 11463:          lda     #$80
 11464:          bne     LD58C
 11465:  LD58A:
 11466:          lda     #$90
 11467:  LD58C:
 11468:          ora     DRVNUM
 11469:          ldx     JOBNUM
 11470:  LD590:
 11471:          sta     CMD
 11472:  LD593:
 11473:          lda     CMD
 11474:          jsr     LD50E
 11475:  LD599:
 11476:          jsr     LD5A6
 11477:          bcs     LD599
 11478:          pha
 11479:          lda     #$00
 11480:          sta     JOBRTN
 11481:          pla
 11482:          rts
 11483:  LD5A6:
 11484:          lda     JOBS0,x
 11485:          bmi     LD5C4
 11486:          cmp     #$02
 11487:          bcc     LD5C2
 11488:          cmp     #$08
 11489:          beq     LD5BA
 11490:          cmp     #$0B
 11491:          beq     LD5BA
 11492:          cmp     #$0F
 11493:          bne     LD5C6
 11494:  LD5BA:
 11495:          bit     JOBRTN
 11496:          bmi     LD5C2
 11497:          jmp     LD63F
 11498:  LD5C2:
 11499:          clc
 11500:          rts
 11501:  LD5C4:
 11502:          sec
 11503:          rts
 11504:  LD5C6:
 11505:          tya
 11506:          pha
 11507:          lda     DRVNUM
 11508:          pha
 11509:          lda     LSTJOB,x
 11510:          and     #$01
 11511:          sta     DRVNUM
 11512:          tay
 11513:          lda     DriveLEDMasks,y
 11514:          sta     ERLED
 11515:          jsr     LD6A6
 11516:          cmp     #$02
 11517:          bcs     LD5E3
 11518:          jmp     LD66D
 11519:  LD5E3:
 11520:          lda     LSTJOB,x
 11521:          and     #$F0
 11522:          pha
 11523:          cmp     #$90
 11524:          bne     LD5F4
 11525:          lda     DRVNUM
 11526:          ora     #$B8
 11527:          sta     LSTJOB,x
 11528:  LD5F4:
 11529:          bit     REVCNT
 11530:          bvs     LD631
 11531:          lda     #$00
 11532:          sta     EPTR
 11533<