ca65 V2.15 - Git fa0709a Main file : source/floppy//floppyrom.a65 Current file: source/floppy//floppyrom.a65 000000r 1 000000r 1 .setcpu "6502" 000000r 1 000000r 1 .include "../asm6502.inc" 000000r 2 ASM_JMP = $4C 000000r 2 ASM_BIT2 = $24 000000r 2 ASM_BIT3 = $2C 000000r 2 000000r 2 ; Flags of the 6502 000000r 2 A6502_FLAGS_N = $80 ; Negative 000000r 2 A6502_FLAGS_V = $40 ; oVerflow 000000r 2 A6502_FLAGS_R = $20 ; Reserved 000000r 2 A6502_FLAGS_B = $10 ; Break (only valid on stack after BRK/IRQ, otherwise 0) 000000r 2 A6502_FLAGS_D = $08 ; Decimal 000000r 2 A6502_FLAGS_I = $04 ; Interrupt 000000r 2 A6502_FLAGS_Z = $02 ; Zero 000000r 2 A6502_FLAGS_C = $01 ; Carry 000000r 2 000000r 1 .include "../macros.inc" 000000r 2 ; htasc - set the hi bit on the last byte of a string for termination 000000r 2 ; (by Tom Greene) 000000r 2 .macro htasc str 000000r 2 .repeat .strlen(str)-1,I 000000r 2 .byte .strat(str,I) 000000r 2 .endrep 000000r 2 .byte .strat(str,.strlen(str)-1) | $80 000000r 2 .endmacro 000000r 2 000000r 2 .macro htasc_floppy_error str 000000r 2 .byte .strat(str,0) | $80 000000r 2 .repeat .strlen(str)-2,I 000000r 2 .byte .strat(str,I + 1) 000000r 2 .endrep 000000r 2 .byte .strat(str,.strlen(str)-1) | $80 000000r 2 .endmacro 000000r 2 000000r 2 ; For every token, a byte gets put into segment "DUMMY". 000000r 2 ; This way, we count up with every token. The DUMMY segment 000000r 2 ; doesn't get linked into the binary. 000000r 2 .macro init_token_tables 000000r 2 .segment "VECTORS" 000000r 2 TOKEN_ADDRESS_TABLE: 000000r 2 .segment "KEYWORDS" 000000r 2 TOKEN_NAME_TABLE: 000000r 2 .segment "DUMMY" 000000r 2 DUMMY_START: 000000r 2 .endmacro 000000r 2 000000r 2 ; optionally define token symbol 000000r 2 ; count up token number 000000r 2 .macro define_token token 000000r 2 .segment "DUMMY" 000000r 2 .ifnblank token 000000r 2 token := <(*-DUMMY_START)+$80 000000r 2 .endif 000000r 2 .res 1; count up in any case 000000r 2 .endmacro 000000r 2 000000r 2 ; lay down a keyword, optionally define a token symbol 000000r 2 .macro keyword key, token 000000r 2 .segment "KEYWORDS" 000000r 2 htasc key 000000r 2 define_token token 000000r 2 .endmacro 000000r 2 000000r 2 ; lay down a keyword and an address (RTS style), 000000r 2 ; optionally define a token symbol 000000r 2 .macro keyword_rts key, vec, token 000000r 2 .segment "VECTORS" 000000r 2 .word vec-1 000000r 2 keyword key, token 000000r 2 .endmacro 000000r 2 000000r 2 ; lay down a keyword and an address, 000000r 2 ; optionally define a token symbol 000000r 2 .macro keyword_addr key, vec, token 000000r 2 .segment "VECTORS" 000000r 2 .addr vec 000000r 2 keyword key, token 000000r 2 .endmacro 000000r 2 000000r 2 .macro count_tokens 000000r 2 .segment "DUMMY" 000000r 2 NUM_TOKENS := <(*-DUMMY_START) 000000r 2 .endmacro 000000r 2 000000r 2 .macro init_error_table 000000r 2 .segment "DUMMY" 000000r 2 DUMMY_START_ERROR: 000000r 2 000000r 2 .segment "ERROR" 000000r 2 ERROR_MESSAGES: 000000r 2 .endmacro 000000r 2 000000r 2 .ifdef CBM2_EXT_FILE_ERRORS 000000r 2 .macro define_error_token token 000000r 2 .segment "DUMMY" 000000r 2 .ifnblank token 000000r 2 token := <(*-DUMMY_START_ERROR + 1) 000000r 2 .endif 000000r 2 .res 1; count up in any case 000000r 2 .endmacro 000000r 2 000000r 2 .macro define_error error, msg, addr 000000r 2 .segment "ERROR" 000000r 2 addr := * 000000r 2 htasc msg 000000r 2 define_error_token error 000000r 2 .endmacro 000000r 2 000000r 2 .else 000000r 2 .macro define_error error, msg, addr 000000r 2 .segment "ERROR" 000000r 2 error := <(*-ERROR_MESSAGES) 000000r 2 htasc msg 000000r 2 .endmacro 000000r 2 000000r 2 .endif 000000r 2 000000r 2 ;--------------------------------------------- 000000r 2 ; set the MSB of every byte of a string 000000r 2 .macro asc80 str 000000r 2 .repeat .strlen(str),I 000000r 2 .byte .strat(str,I)+$80 000000r 2 .endrep 000000r 2 .endmacro 000000r 2 000000r 2 000000r 1 .include "../petscii.inc" 000000r 2 ASC_LF = $0A 000000r 2 ASC_CR = $0D 000000r 2 ASC_RVS = $12 000000r 2 ASC_HOME = $13 000000r 2 ASC_INSDEL = $14 000000r 2 000000r 2 ASC_LOWERCASE = $0E 000000r 2 ASC_UPPERCASE = $8E 000000r 2 ASC_DISALLOW_LOWERCASE = $08 000000r 2 ASC_ALLOW_LOWERCASE = $09 000000r 2 000000r 2 ASC_CURSORLEFTRIGHT = $1D 000000r 2 ASC_CURSORUPDOWN = $11 000000r 2 000000r 2 .if .defined(C64JAPAN) 000000r 2 ASC_PI = $B0 000000r 2 .else 000000r 2 ASC_PI = $DE 000000r 2 .endif 000000r 2 000000r 2 KEY_NONE = $40 000000r 2 KEY_STOP = $03 000000r 2 000000r 2 PETSCII_CRSR_RIGHT = $1D 000000r 2 000000r 1 000000r 1 .include "defines.inc" 000000r 2 000000r 2 DRIVE_UNKNOWN=0 000000r 2 000000r 2 DRIVE_2031=DRIVE_UNKNOWN + $10 000000r 2 DRIVE_2031_01=DRIVE_2031 + 1 000000r 2 000000r 2 DRIVE_1540=DRIVE_2031 + $10 000000r 2 DRIVE_1540_01=DRIVE_1540 + 1 000000r 2 000000r 2 DRIVE_1541=DRIVE_1540 + $10 000000r 2 DRIVE_1541_01=DRIVE_1541 + 1 000000r 2 DRIVE_1541_02=DRIVE_1541 + 2 000000r 2 DRIVE_1541_03=DRIVE_1541 + 3 000000r 2 DRIVE_1541_05=DRIVE_1541 + 5 000000r 2 DRIVE_1541_06AA=DRIVE_1541 + 6 000000r 2 000000r 2 DRIVE_1541C=DRIVE_1541 + $10 000000r 2 DRIVE_1541C_01=DRIVE_1541C + 1 000000r 2 DRIVE_1541C_02=DRIVE_1541C + 2 000000r 2 DRIVE_1541C_03=DRIVE_1541C + 3 000000r 2 000000r 2 DRIVE_1570=DRIVE_1541C + $10 000000r 2 DRIVE_1570_01=DRIVE_1570 + 1 000000r 2 000000r 2 DRIVE_1571=DRIVE_1570 + $10 000000r 2 DRIVE_1571_03=DRIVE_1571 + 3 000000r 2 DRIVE_1571_05=DRIVE_1571 + 5 000000r 2 000000r 2 DRIVE_1571CR=DRIVE_1571 + $10 000000r 2 DRIVE_1571CR_01=DRIVE_1571CR + 1 000000r 2 000000r 2 .ifdef v2031 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_2031 + v2031 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1540 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_1540 + v1540 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1541 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_1541 + v1541 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1541aa 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 .if v1541aa = 06 000000r 2 CompileDrive=DRIVE_1541_06AA 000000r 2 .else 000000r 2 .error "Unknown 1541 AA type used!" 000000r 2 .endif 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1541c 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_1541C + v1541c 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1570 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_1570 + v1570 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1571 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_1571 + v1571 000000r 2 .endif 000000r 2 000000r 2 .ifdef v1571cr 000000r 2 .ifdef CompileDrive 000000r 2 .error "Only one drive type can be compiled at a time!" 000000r 2 .endif 000000r 2 CompileDrive=DRIVE_1571CR + v1571cr 000000r 2 .endif 000000r 2 000000r 2 .ifndef CompileDrive 000000r 2 .error "Please define one of v2031, v1540, v1541, v1541c, v1570, v1571, or v1571cr!" 000000r 2 .endif 000000r 2 000000r 2 .if CompileDrive=DRIVE_2031_01 000000r 2 DRIVE_CHKSUM_C000=$B7 000000r 2 DRIVE_CHKSUM_FEE6=$FA 000000r 2 INTRA_SECTOR_GAP=$08 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1540_01 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$60 000000r 2 INTRA_SECTOR_GAP=$08 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541_01 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$FD 000000r 2 INTRA_SECTOR_GAP=$08 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541_02 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$10 000000r 2 INTRA_SECTOR_GAP=$08 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541_03 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$0E 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541_05 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$3E 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541_06AA 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$EC 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541C_01 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_FEE6=$79 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541C_02 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_C001=$46 000000r 2 DRIVE_CHKSUM_FEE6=$79 000000r 2 DRIVE_CHKSUM_FFE5=$CA 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1541C_03 000000r 2 DRIVE_CHKSUM_C000=$97 000000r 2 DRIVE_CHKSUM_C001=$e0 000000r 2 DRIVE_CHKSUM_FEE6=$79 000000r 2 DRIVE_CHKSUM_FFE5=$EB 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$AA 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED 000000r 2 .elseif CompileDrive=DRIVE_1570_01 000000r 2 DRIVE_CHKSUM_C000=$51 000000r 2 DRIVE_CHKSUM_FEE6=$ff 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$FF 000000r 2 DRIVE_8000=$75 000000r 2 DRIVE_8001=$98 000000r 2 MAXTRACK_ADJUSTED=MaxTrack1541 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2 000000r 2 .elseif CompileDrive=DRIVE_1571_03 000000r 2 DRIVE_CHKSUM_C000=$42 000000r 2 DRIVE_CHKSUM_FEE6=$ff 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$FF 000000r 2 DRIVE_8000=$92 000000r 2 DRIVE_8001=$25 000000r 2 MAXTRACK_ADJUSTED=MAXTRK1571 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2 000000r 2 .elseif CompileDrive=DRIVE_1571_05 000000r 2 DRIVE_CHKSUM_C000=$38 000000r 2 DRIVE_CHKSUM_FEE6=$ff 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$FF 000000r 2 DRIVE_8000=$F2 000000r 2 DRIVE_8001=$68 000000r 2 MAXTRACK_ADJUSTED=MAXTRK1571 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2 000000r 2 .elseif CompileDrive=DRIVE_1571CR_01 000000r 2 DRIVE_CHKSUM_C000=$84 000000r 2 DRIVE_CHKSUM_FEE6=$ff 000000r 2 INTRA_SECTOR_GAP=$09 000000r 2 DRIVEFILLER=$FF 000000r 2 DRIVE_8000=$02 000000r 2 DRIVE_8001=$44 000000r 2 MAXTRACK_ADJUSTED=MAXTRK1571 000000r 2 MAXTRACK_SINGLESIDED=35 000000r 2 MAXTRACK_DOUBLESIDED=MAXTRACK_SINGLESIDED * 2 000000r 2 .endif 000000r 2 000000r 2 .macro FillCount count,filler 000000r 2 .repeat count 000000r 2 .ifblank filler 000000r 2 .byte DRIVEFILLER 000000r 2 .else 000000r 2 .byte filler 000000r 2 .endif 000000r 2 .endrep 000000r 2 .endmacro 000000r 2 000000r 2 .macro FillUntil address,filler 000000r 2 FillCount address-*,filler 000000r 2 .endmacro 000000r 2 000000r 2 .macro FillNOP count 000000r 2 FillCount count,$EA 000000r 2 .endmacro 000000r 2 000000r 2 000000r 2 MASK_PA = $0F ; mask to get the device address ("primary address") for IEC open, listen, talk commands 000000r 2 000000r 2 MASK_SA = $0F ; mask to get the secondary address for IEC open, listen, talk commands 000000r 2 000000r 2 IEC_COMMAND_ERROR_CHANNEL = $0F ; the number of the command and error channel of the drive 000000r 2 000000r 1 000000r 1 .include "memory.inc" 000000r 2 JOBS0 := $0000 000000r 2 JOBS1 := $0001 000000r 2 JOBS2 := $0002 000000r 2 JOBS3 := $0003 000000r 2 JOBS4 := $0004 000000r 2 JOBS5 := $0005 000000r 2 TRACK0 := $0006 000000r 2 SECTOR0 := $0007 000000r 2 TRACK1 := $0008 000000r 2 SECTOR1 := $0009 000000r 2 TRACK2 := $000A 000000r 2 SECTOR2 := $000B 000000r 2 TRACK3 := $000C 000000r 2 SECTOR3 := $000D 000000r 2 TRACK4 := $000E 000000r 2 SECTOR4 := $000F 000000r 2 TRACK5 := $0010 000000r 2 SECTOR5 := $0011 000000r 2 DiskID0 := $0012 000000r 2 DiskID1 := $0014 000000r 2 HEADER := $0016 000000r 2 ACTJOB := $001B 000000r 2 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) 000000r 2 LWPT := $001E 000000r 2 DRVST := $0020 000000r 2 DRVTRK := $0022 000000r 2 STAB := $0024 000000r 2 SAVPNT := $002E 000000r 2 BUFPNT := $0030 000000r 2 HDRPNT := $0032 000000r 2 GCRPNT := $0034 000000r 2 GCRERR := $0035 000000r 2 BYTCNT := $0036 000000r 2 BITCNT := $0037 000000r 2 BID := $0038 000000r 2 HBID := $0039 000000r 2 CHKSUM := $003A 000000r 2 HINIB := $003B 000000r 2 BYTE := $003C 000000r 2 DRIVE := $003D 000000r 2 CDRIVE := $003E 000000r 2 JOBN := $003F 000000r 2 TRACC := $0040 000000r 2 NXTJOB := $0041 000000r 2 NXTRK := $0042 000000r 2 SECTR := $0043 000000r 2 WORK := $0044 000000r 2 JOB := $0045 000000r 2 CTRACK := $0046 000000r 2 DBID := $0047 000000r 2 ACLTIM := $0048 000000r 2 SAVSP := $0049 000000r 2 STEPS := $004A 000000r 2 TMP := $004B 000000r 2 CSECT := $004C 000000r 2 NEXTS := $004D 000000r 2 NXTBF := $004E 000000r 2 NXTPNT := $004F 000000r 2 GCRFLG := $0050 000000r 2 FTNUM := $0051 000000r 2 BTAB := $0052 000000r 2 GTAB := $0056 000000r 2 AS := $005E 000000r 2 AF := $005F 000000r 2 ACLSTP := $0060 000000r 2 RSTEPS := $0061 000000r 2 NXTST := $0062 000000r 2 MINSTP := $0064 000000r 2 VNMI := $0065 000000r 2 NMIFLG := $0067 000000r 2 AUTOFG := $0068 000000r 2 SECINC := $0069 000000r 2 REVCNT := $006A 000000r 2 USRJMP := $006B 000000r 2 BMPNT := $006D 000000r 2 T0 := $006F 000000r 2 T1 := $0070 000000r 2 T2 := $0071 000000r 2 T3 := $0072 000000r 2 T4 := $0073 000000r 2 T5 := $0074 000000r 2 IP := $0075 000000r 2 LSNADR := $0077 000000r 2 TLKADR := $0078 000000r 2 LSNACT := $0079 000000r 2 TLKACT := $007A 000000r 2 ADRSED := $007B 000000r 2 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. 000000r 2 ATNMOD := $007D 000000r 2 PRGTRK := $007E 000000r 2 DRVNUM := $007F 000000r 2 TRACK := $0080 000000r 2 SECTOR := $0081 000000r 2 LINDX := $0082 000000r 2 SA := $0083 000000r 2 ORGSA := $0084 000000r 2 DATA := $0085 000000r 2 R0 := $0086 000000r 2 R1 := $0087 000000r 2 R2 := $0088 000000r 2 R3 := $0089 000000r 2 R4 := $008A 000000r 2 RESULT := $008B 000000r 2 ACCUM := $008F 000000r 2 DIRBUF := $0094 000000r 2 ICMD := $0096 000000r 2 MYPA := $0097 000000r 2 000000r 2 BUFFERS_COUNT := 5 ; number of buffers 000000r 2 000000r 2 CONT := $0098 000000r 2 BUFTAB0 := $0099 ; address of buffer 0 000000r 2 BUFTAB1 := $009B ; address of buffer 1 000000r 2 BUFTAB2 := $009D ; address of buffer 2 000000r 2 BUFTAB3 := $009F ; address of buffer 3 000000r 2 BUFTAB4 := $00A1 ; address of buffer 4 000000r 2 BUFTABCMD := $00A3 ; must be after BUFTAB4 due to the way it is initialized in the RESET routine 000000r 2 BUFTABERR := $00A5 ; must be after BUFTABCMD due to the way it is initialized in the RESET routine 000000r 2 BUF0 := $00A7 000000r 2 BUF1 := $00AE 000000r 2 RECL := $00B5 000000r 2 RECH := $00BB 000000r 2 NR := $00C1 000000r 2 RS := $00C7 000000r 2 SS := $00CD 000000r 2 F1PTR := $00D3 000000r 2 RECPTR := $00D4 000000r 2 SSNUM := $00D5 000000r 2 SSIND := $00D6 000000r 2 RELPTR := $00D7 000000r 2 ENTSEC := $00D8 000000r 2 ENTIND := $00DD 000000r 2 FILDRV := $00E2 000000r 2 PATTYP := $00E7 000000r 2 PATTYP_WILDCARD := $80 000000r 2 FILTYP := $00EC 000000r 2 CHNRDY := $00F2 000000r 2 EIOFLG := $00F8 000000r 2 JOBNUM := $00F9 000000r 2 LRUTBL := $00FA 000000r 2 NODRV := $00FF 000000r 2 DSKVER := $0101 000000r 2 ZPEND := $0103 000000r 2 000000r 2 L0104 := $0104 000000r 2 L0146 := $0146 000000r 2 L0147 := $0147 000000r 2 L0148 := $0148 000000r 2 L01AF := $01AF 000000r 2 L01B0 := $01B0 000000r 2 L01B1 := $01B1 000000r 2 L01B2 := $01B2 000000r 2 L01B3 := $01B3 000000r 2 L01B4 := $01B4 000000r 2 L01B5 := $01B5 000000r 2 .if CompileDrive >= DRIVE_1571CR 000000r 2 L01B6 := $01B6 000000r 2 .elseif CompileDrive >= DRIVE_1571 000000r 2 L01B6 := $01B4 000000r 2 .endif 000000r 2 000000r 2 L01BB := $01BB 000000r 2 000000r 2 SP_END := $0145 000000r 2 000000r 2 CMDBUF := $0200 000000r 2 CMDBUF_End := $0228 000000r 2 CMDBUF_End2 := $022A 000000r 2 CMDNUM := $022A ; storage for the command number in command processin 000000r 2 LINTAB := $022B 000000r 2 CHNDAT := $022E 000000r 2 LINTAB_End := $0239 000000r 2 L023A := $023A 000000r 2 L023B := $023B 000000r 2 L023C := $023C 000000r 2 L023D := $023D 000000r 2 L023E := $023E 000000r 2 000000r 2 L0243 := $0243 000000r 2 LSTCHR := $0244 000000r 2 TYPE := $024A 000000r 2 STRSIZ := $024B 000000r 2 TEMPSA := $024C 000000r 2 CMD := $024D 000000r 2 LSTSEC := $024E 000000r 2 BUFUSE := $024F 000000r 2 MDIRTY := $0251 000000r 2 ENTFND := $0253 000000r 2 DIRLST := $0254 000000r 2 CMDWAT := $0255 ; 1 if there is a command waiting in the command buffer (CMDBUF), otherwise 0. 000000r 2 LINUSE := $0256 000000r 2 LBUSED := $0257 000000r 2 REC := $0258 000000r 2 TRKSS := $0259 000000r 2 SECSS := $025A 000000r 2 LSTJOB := $025B 000000r 2 DSEC := $0260 000000r 2 DIND := $0266 000000r 2 ERWORD := $026C 000000r 2 ERLED := $026D 000000r 2 PRGDRV := $026E 000000r 2 PRGSEC := $026F 000000r 2 WLINDX := $0270 000000r 2 RLINDX := $0271 000000r 2 NBTEMP := $0272 000000r 2 CMDSIZ := $0274 000000r 2 CHAR := $0275 ; temporary storage for characters in commando processing 000000r 2 LIMIT := $0276 000000r 2 F1CNT := $0277 000000r 2 F2CNT := $0278 000000r 2 F2PTR := $0279 000000r 2 FILTBL := $027A 000000r 2 FILTRK := $0280 000000r 2 FILSEC := $0285 000000r 2 PATFLG := $028A ; flag for the pattern found: 000000r 2 ; bit 0..6: number of wildcard s('*', '?') found 000000r 2 ; bit 7: wildcard and comma available 000000r 2 PATFLG_WILDCARD := $80 000000r 2 IMAGE := $028B 000000r 2 DRVCNT := $028C 000000r 2 DRVFLG := $028D 000000r 2 LSTDRV := $028E 000000r 2 FOUND := $028F 000000r 2 DIRSEC := $0290 000000r 2 DELSEC := $0291 000000r 2 DELIND := $0292 000000r 2 LSTBUF := $0293 000000r 2 INDEX := $0294 000000r 2 FILCNT := $0295 000000r 2 TYPFLG := $0296 000000r 2 MODE := $0297 000000r 2 JOBRTN := $0298 000000r 2 EPTR := $0299 000000r 2 TOFF := $029A 000000r 2 UBAM := $029B 000000r 2 TBAM := $029D 000000r 2 BAM := $02A1 000000r 2 VIRQJOB1570 := $02A9 000000r 2 CNTMOTOR1570 := $02AB 000000r 2 MAXTRK1571 := $02AC 000000r 2 TMP1570 := $02AD 000000r 2 FLGMODE1570 := $02AF 000000r 2 L02B0 := $02B0 000000r 2 NAMBUF := $02B1 000000r 2 ERRBUF := $02D5 000000r 2 WBAM := $02F9 000000r 2 NDBL := $02FA 000000r 2 NDBH := $02FC 000000r 2 PHASE := $02FE 000000r 2 BUFFER0 := $0300 000000r 2 BUFFER1 := $0400 000000r 2 BUFFER2 := $0500 000000r 2 BUFFER3 := $0600 000000r 2 BUFFER4 := $0700 000000r 2 000000r 2 RAM_PAGE1 := $0100 000000r 2 RAM_END := $07FF 000000r 2 000000r 2 ; general VIA definitions 000000r 2 000000r 2 .include "../via.inc" 000000r 3 VIA_O_PB := 0 000000r 3 VIA_O_PA := 1 000000r 3 VIA_O_DDRB := 2 000000r 3 VIA_O_DDRA := 3 000000r 3 VIA_O_T1CL := 4 000000r 3 VIA_O_T1CH := 5 000000r 3 VIA_O_T1CLL := 6 000000r 3 VIA_O_T1CHL := 7 000000r 3 VIA_O_T2CL := 8 000000r 3 VIA_O_T2CH := 9 000000r 3 VIA_O_SR := 10 000000r 3 VIA_O_ACR := 11 000000r 3 VIA_O_PCR := 12 000000r 3 VIA_O_IFR := 13 000000r 3 VIA_O_IEC := 14 000000r 3 VIA_O_PA_NO_HS := 15 000000r 3 000000r 3 VIA_IFR_B_CA2 := $01 ; cleared by read or write to PA 000000r 3 VIA_IFR_B_CA1 := $02 ; cleared by read or write to PA 000000r 3 VIA_IFR_B_SR := $04 ; cleared by read or write to SR 000000r 3 VIA_IFR_B_CB2 := $08 ; cleared by read or write to PB 000000r 3 VIA_IFR_B_CB1 := $10 ; cleared by read or write to PB 000000r 3 VIA_IFR_B_T2 := $20 ; cleared by read T2L or write T2H 000000r 3 VIA_IFR_B_T1 := $40 ; cleared by read T1L or write T1H 000000r 3 VIA_IFR_B_ANY := $80 ; cleared if all interrupts are cleared 000000r 3 000000r 3 VIA_IER_B_CA2 := VIA_IFR_B_CA2 000000r 3 VIA_IER_B_CA1 := VIA_IFR_B_CA1 000000r 3 VIA_IER_B_SR := VIA_IFR_B_SR 000000r 3 VIA_IER_B_CB2 := VIA_IFR_B_CB2 000000r 3 VIA_IER_B_CB1 := VIA_IFR_B_CB1 000000r 3 VIA_IER_B_T2 := VIA_IFR_B_T2 000000r 3 VIA_IER_B_T1 := VIA_IFR_B_T1 000000r 3 VIA_IER_BW_SET := $80 000000r 3 VIA_IER_BW_UNSET := $00 000000r 3 000000r 3 VIA_PCR_B_CA1_INPUT_POS_EDGE := $01 ; 1 = input on positive edge, 0 = input on negative edge 000000r 3 VIA_PCR_B_CA2_MASK := $0E 000000r 3 VIA_PCR_B_CA2_INPUT_NEG_CLEAR_ON_READ := $00 000000r 3 VIA_PCR_B_CA2_INPUT_NEG := $02 000000r 3 VIA_PCR_B_CA2_INPUT_POS_CLEAR_ON_READ := $04 000000r 3 VIA_PCR_B_CA2_INPUT_POS := $06 000000r 3 VIA_PCR_B_CA2_OUTPUT_HANDSHAKE := $08 000000r 3 VIA_PCR_B_CA2_OUTPUT_PULSE := $0A 000000r 3 VIA_PCR_B_CA2_OUTPUT_LOW := $0C 000000r 3 VIA_PCR_B_CA2_OUTPUT_HIGH := $0E 000000r 3 VIA_PCR_B_CB1_INPUT_POS_EDGE := $10 ; 1 = input on positive edge, 0 = input on negative edge 000000r 3 VIA_PCR_B_CB2_MASK := $E0 000000r 3 VIA_PCR_B_CB2_INPUT_NEG_CLEAR_ON_READ := $00 000000r 3 VIA_PCR_B_CB2_INPUT_NEG := $20 000000r 3 VIA_PCR_B_CB2_INPUT_POS_CLEAR_ON_READ := $40 000000r 3 VIA_PCR_B_CB2_INPUT_POS := $60 000000r 3 VIA_PCR_B_CB2_OUTPUT_HANDSHAKE := $80 000000r 3 VIA_PCR_B_CB2_OUTPUT_PULSE := $A0 000000r 3 VIA_PCR_B_CB2_OUTPUT_LOW := $C0 000000r 3 VIA_PCR_B_CB2_OUTPUT_HIGH := $E0 000000r 3 000000r 3 VIA_ACR_B_PA_LATCH_ENABLE := $01 000000r 3 VIA_ACR_B_PB_LATCH_ENABLE := $02 000000r 3 VIA_ACR_B_SHIFT_MASK := $1C 000000r 3 VIA_ACR_B_SHIFT_DISABLED := $00 000000r 3 VIA_ACR_B_SHIFT_IN_T2 := $04 000000r 3 VIA_ACR_B_SHIFT_IN_PHI2 := $08 000000r 3 VIA_ACR_B_SHIFT_IN_EXTCLOCK_CB1 := $0C 000000r 3 VIA_ACR_B_SHIFT_FREERUNNING_T2 := $10 000000r 3 VIA_ACR_B_SHIFT_OUT_T2 := $14 000000r 3 VIA_ACR_B_SHIFT_OUT_PHI2 := $18 000000r 3 VIA_ACR_B_SHIFT_OUT_EXTCLOCK_CB1 := $1C 000000r 3 VIA_ACR_B_T2_CONTROL_PB6 := $20 000000r 3 VIA_ACR_B_T1_CONTROL_MASK := $C0 000000r 3 VIA_ACR_B_T1_CONTROL_ONESHOT := $00 000000r 3 VIA_ACR_B_T1_CONTROL_FREERUN := $40 000000r 3 VIA_ACR_B_T1_CONTROL_ONESHOT_PB7 := $80 000000r 3 VIA_ACR_B_T1_CONTROL_FREERUN_PB7 := $C0 000000r 3 000000r 3 ; Alternative: 000000r 3 VIA_ACR_B_T1_CONTROL_ONETIME := $40 000000r 3 VIA_ACR_B_T1_CONTROL_PB7_OUTPUT := $80 000000r 3 000000r 2 000000r 2 VBC := $1800 000000r 2 VBC_PB1 := VBC + VIA_O_PB 000000r 2 000000r 2 .if CompileDrive >= DRIVE_1540 000000r 2 000000r 2 VBC_PA1_01 := $01 000000r 2 VBC_PA1_02 := $02 000000r 2 VBC_PA1_04 := $04 000000r 2 VBC_PA1_20 := $20 000000r 2 VBC_PA1_80 := $80 000000r 2 000000r 2 VBC_PB1_1540_DATAIN := $01 ; DATA IN 000000r 2 VBC_PB1_1540_DATAOUT := $02 ; DATA OUT 000000r 2 VBC_PB1_1540_CLOCKIN := $04 ; CLOCK IN 000000r 2 VBC_PB1_1540_CLOCKOUT := $08 ; CLOCK OUT 000000r 2 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) 000000r 2 VBC_PB1_1540_DEVICENO0 := $20 ; hardware device no., bit 0 000000r 2 VBC_PB1_1540_DEVICENO1 := $40 ; hardware device no., bit 1 000000r 2 VBC_PB1_1540_ATNIN := $80 ; ATN IN (also to CB2 - according to schematic: CA1, NOT CB2!) 000000r 2 000000r 2 .else 000000r 2 000000r 2 VBC_PB1_2031_DEVICENO0 := VBC_PB1_2031_ATNA 000000r 2 VBC_PB1_2031_DEVICENO1 := VBC_PB1_2031_NRFD 000000r 2 VBC_PB1_2031_ATNA := $01 ; ATNA (O) 000000r 2 VBC_PB1_2031_NRFD := $02 ; NRFD (I/O) 000000r 2 VBC_PB1_2031_NDAC := $04 ; NDAC (I/O) 000000r 2 VBC_PB1_2031_EOI := $08 ; EOI (I/O) 000000r 2 VBC_PB1_2031_TE := $10 ; TE (Talk enable, O) 000000r 2 VBC_PB1_2031_HDSEL := $20 ; @@@ TODO 000000r 2 VBC_PB1_2031_DAV := $40 ; DAV (I/O) 000000r 2 VBC_PB1_2031_NATN := $80 ; -ATN (I) 000000r 2 000000r 2 ; also connected: 000000r 2 ; PA0-7: data bits DI1-DI8 000000r 2 ; 000000r 2 ; CA1 = -ATN (connected to PB7) 000000r 2 ; CB2 = "PLL SYN" (?) 000000r 2 ; CA2 = drive number selection: if 0, the drive numbers can be read; if 1, ATNA and NRFD are on the lines PB0 and PB1 000000r 2 000000r 2 .endif 000000r 2 000000r 2 VBC_PA1 := VBC + VIA_O_PA ; unused on the (original) 1541; parallel input/output on 2031 000000r 2 VBC_DDRB1 := VBC + VIA_O_DDRB 000000r 2 VBC_DDRA1 := VBC + VIA_O_DDRA 000000r 2 VBC_T1LC1 := VBC + VIA_O_T1CL 000000r 2 VBC_T1HC1 := VBC + VIA_O_T1CH 000000r 2 VBC_T1LL1 := VBC + VIA_O_T1CLL 000000r 2 VBC_T1HL1 := VBC + VIA_O_T1CHL 000000r 2 VBC_T2LC1 := VBC + VIA_O_T2CL 000000r 2 VBC_T2HC1 := VBC + VIA_O_T2CH 000000r 2 VBC_SR1 := VBC + VIA_O_SR 000000r 2 VBC_ACR1 := VBC + VIA_O_ACR 000000r 2 VBC_PCR1 := VBC + VIA_O_PCR 000000r 2 VBC_IFR1 := VBC + VIA_O_IFR 000000r 2 VBC_IER1 := VBC + VIA_O_IEC 000000r 2 VBC_PAUNBUF1 := VBC + VIA_O_PA_NO_HS 000000r 2 000000r 2 VDC := $1C00 000000r 2 ; CB1: Unconnected 000000r 2 ; CB2: MODE, to OE of 325572-0 000000r 2 ; CA2: SYNC 000000r 2 ; CA1: Byte Ready (also to Overflow In of 6502) 000000r 2 VDC_PB2 := VDC + VIA_O_PB 000000r 2 VDC_PB2_STEPPER0 := $01 ; stepper motor bit 0 000000r 2 VDC_PB2_STEPPER1 := $02 ; stepper motor bit 1 000000r 2 VDC_PB2_DRIVE0MOTOR := $04 ; drive #0 motor 000000r 2 VDC_PB2_DRIVE0LED := $08 ; drive #0 LED 000000r 2 VDC_PB2_DRIVE1LED := $00 ; does not exist, but anyway... 000000r 2 VDC_PB2_WRITEPROTECT:= $10 ; write protect 000000r 2 VDC_PB2_BITRATE0 := $20 ; drive transfer rate bit 0 000000r 2 VDC_PB2_BITRATE1 := $40 ; drive transfer rate bit 1 000000r 2 VDC_PB2_SYNC := $80 ; SYNC detected 000000r 2 000000r 2 VDC_PB2_STEPPER := VDC_PB2_STEPPER0 | VDC_PB2_STEPPER1 000000r 2 VDC_PB2_DRIVELEDS := VDC_PB2_DRIVE0LED | VDC_PB2_DRIVE1LED 000000r 2 VDC_PB2_BITRATE := VDC_PB2_BITRATE0 | VDC_PB2_BITRATE1 000000r 2 VDC_PA2 := VDC + VIA_O_PA 000000r 2 VDC_DDRB2 := VDC + VIA_O_DDRB 000000r 2 VDC_DDRA2 := VDC + VIA_O_DDRA 000000r 2 VDC_T1LC2 := VDC + VIA_O_T1CL 000000r 2 VDC_T1HC2 := VDC + VIA_O_T1CH 000000r 2 VDC_T1LL2 := VDC + VIA_O_T1CLL 000000r 2 VDC_T1HL2 := VDC + VIA_O_T1CHL 000000r 2 VDC_T2LC2 := VDC + VIA_O_T2CL 000000r 2 VDC_T2HC2 := VDC + VIA_O_T2CH 000000r 2 VDC_SR2 := VDC + VIA_O_SR 000000r 2 VDC_ACR2 := VDC + VIA_O_ACR 000000r 2 VDC_PCR2 := VDC + VIA_O_PCR 000000r 2 VDC_IFR2 := VDC + VIA_O_IFR 000000r 2 VDC_IER2 := VDC + VIA_O_IEC 000000r 2 VDC_PAUNBUF2 := VDC + VIA_O_PA_NO_HS 000000r 2 000000r 2 000000r 2 .if CompileDrive >= DRIVE_1570 000000r 2 000000r 2 .include "../wd177x.inc" 000000r 3 WD177x_O_COMMAND := 0 000000r 3 WD177x_O_STATUS := WD177x_O_COMMAND 000000r 3 WD177x_O_TRACK := 1 000000r 3 WD177x_O_SECTOR := 2 000000r 3 WD177x_O_DATA := 3 000000r 3 000000r 2 000000r 2 WD177x := $2000 000000r 2 WD177x_COMMAND := WD177x + WD177x_O_COMMAND 000000r 2 WD177x_STATUS := WD177x + WD177x_O_STATUS 000000r 2 WD177x_TRACK := WD177x + WD177x_O_TRACK 000000r 2 WD177x_SECTOR := WD177x + WD177x_O_SECTOR 000000r 2 WD177x_DATA := WD177x + WD177x_O_DATA 000000r 2 000000r 2 .include "../cia.inc" 000000r 3 CIA_O_PA := 0 000000r 3 CIA_O_PB := 1 000000r 3 CIA_O_DDRA := 2 000000r 3 CIA_O_DDRB := 3 000000r 3 CIA_O_TALO := 4 000000r 3 CIA_O_TAHI := 5 000000r 3 CIA_O_TBLO := 6 000000r 3 CIA_O_TBHI := 7 000000r 3 CIA_O_TOD10THS := 8 000000r 3 CIA_O_TODSEC := 9 000000r 3 CIA_O_TODMIN := 10 000000r 3 CIA_O_TODHR := 11 000000r 3 CIA_O_SDR := 12 000000r 3 CIA_O_ICR := 13 000000r 3 CIA_O_CRA := 14 000000r 3 CIA_O_CRB := 15 000000r 3 000000r 3 CIA_ICR_B_TA := $01 ; bit: timer A underflow 000000r 3 CIA_ICR_B_TB := $02 ; bit: timer B underflow 000000r 3 CIA_ICR_B_TOD := $04 ; bit: TOD alarm 000000r 3 CIA_ICR_B_SP := $08 ; bit: Serial port full/empty 000000r 3 CIA_ICR_B_FLAG := $10 ; bit: external -FLAG 000000r 3 CIA_ICR_B_UNUSED := $60 000000r 3 CIA_ICR_BR_IR := $80 ; bit: any interrupt occurred (read-only) 000000r 3 CIA_ICR_BW_SET := $80 ; bit: set (=1) or clear (=0) bit (write-only) 000000r 3 CIA_ICR_BW_UNSET := $00 ; 000000r 3 000000r 3 CIA_CRA_B_START := $01 ; 1 = start timer A, 0 = stop timer A 000000r 3 CIA_CRA_B_PBON := $02 ; 1 = timer A output appears on PB6, 0 = PB6 is not affected by timer 000000r 3 CIA_CRA_B_TOGGLE := $04 ; PB6 output mode: 1 = toggle, 0 = pulse 000000r 3 CIA_CRA_B_ONESHOT := $08 ; 1 = one shot timer, 0 = continuous mode 000000r 3 CIA_CRA_B_FORCE_LOAD := $10 ; 1 = force load (this is a strobe, that is, it will always be read as "0") 000000r 3 CIA_CRA_B_COUNT_CNT := $20 ; 1 = timer A counts positive edges of CNT, 0 = timer A counts PHI2 pulses 000000r 3 CIA_CRA_B_SP_OUTPUT := $40 ; 1 = serial port (SP) is output, 0 = it is input 000000r 3 CIA_CRA_B_50HZ := $80 ; 1 = 50Hz clock at TOD, 0 = 60Hz clock 000000r 3 000000r 3 CIA_CRB_B_START := $01 ; 1 = start timer B, 0 = stop timer B 000000r 3 CIA_CRB_B_PBON := $02 ; 1 = timer B output appears on PB7, 0 = PB7 is not affected by timer 000000r 3 CIA_CRB_B_TOGGLE := $04 ; PB7 output mode: 1 = toggle, 0 = pulse 000000r 3 CIA_CRB_B_ONESHOT := $08 ; 1 = one shot timer, 0 = continuous mode 000000r 3 CIA_CRB_B_FORCE_LOAD := $10 ; 1 = force load (this is a strobe, that is, it will always be read as "0") 000000r 3 CIA_CRB_B_TOD_ALARM := $80 ; 1 = writing to TOD registers sets ALARM, 0 = writing to TOD registers sets time-of-day 000000r 3 000000r 3 CIA_CRB_B_MODE_MASK := $60 ; mask bits for setting the timer B count mode 000000r 3 CIA_CRB_B_MODE_PHI2 := $00 ; timer B counts PHI2 pulses 000000r 3 CIA_CRB_B_MODE_CNT := $20 ; timer B counts positive edges of CNT 000000r 3 CIA_CRB_B_MODE_TA_ := $40 ; timer B counts timer A underflows 000000r 3 CIA_CRB_B_MODE_TA_WITH_CNT := $60 ; timer B counts timer A underflows which occur while CNT is high 000000r 3 000000r 2 000000r 2 CIA := $4000 000000r 2 CIA_TALO := CIA + CIA_O_TALO 000000r 2 CIA_TAHI := CIA + CIA_O_TAHI 000000r 2 CIA_SDR := CIA + CIA_O_SDR 000000r 2 CIA_ICR := CIA + CIA_O_ICR 000000r 2 CIA_CRA := CIA + CIA_O_CRA 000000r 2 CIA_CRB := CIA + CIA_O_CRB 000000r 2 000000r 2 .endif 000000r 2 000000r 2 .if CompileDrive >= DRIVE_1571CR 000000r 2 CSG5710_4 := WD177x_COMMAND + 4 000000r 2 CSG5710_5 := WD177x_COMMAND + 5 000000r 2 000000r 2 CSG5710_4010 := $4010 000000r 2 000000r 2 .endif 000000r 2 000000r 2 .if CompileDrive >= DRIVE_1570 000000r 2 INIT_VBC_DDRA1 = $66 000000r 2 .elseif CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03 000000r 2 INIT_VBC_DDRA1 = $FE 000000r 2 .else 000000r 2 INIT_VBC_DDRA1 = $FF 000000r 2 .endif 000000r 2 000000r 2 IEC_LISTEN := $20 000000r 2 IEC_TALK := $40 000000r 2 000000r 2 IEEE_LISTEN := IEC_LISTEN 000000r 2 IEEE_TALK := IEC_TALK 000000r 2 IEEE_OPEN := $60 000000r 2 000000r 1 000000r 1 .include "errorcodes.inc" 000000r 2 ERRORCODE_00_OK = $00 000000r 2 ERRORCODE_01_FILES_SCRATCHED = $01 000000r 2 ERRORCODE_20_READ_ERROR = $20 000000r 2 ERRORCODE_21_READ_ERROR = $21 000000r 2 ERRORCODE_22_READ_ERROR = $22 000000r 2 ERRORCODE_23_READ_ERROR = $23 000000r 2 ERRORCODE_24_READ_ERROR = $24 000000r 2 ERRORCODE_25_WRITE_ERROR = $25 000000r 2 ERRORCODE_26_WRITE_PROTECT_ON = $26 000000r 2 ERRORCODE_27_READ_ERROR = $27 000000r 2 ERRORCODE_28_WRITE_ERROR = $28 000000r 2 ERRORCODE_29_DISK_ID_MISMATCH = $29 000000r 2 ERRORCODE_30_SYNTAX_ERROR = $30 000000r 2 ERRORCODE_31_SYNTAX_ERROR = $31 000000r 2 ERRORCODE_32_SYNTAX_ERROR = $32 000000r 2 ERRORCODE_33_SYNTAX_ERROR = $33 000000r 2 ERRORCODE_34_SYNTAX_ERROR = $34 000000r 2 ERRORCODE_39_FILE_NOT_FOUND = $39 000000r 2 ERRORCODE_50_RECORD_NOT_PRESENT = $50 000000r 2 ERRORCODE_51_OVERFLOW_IN_RECORD = $51 000000r 2 ERRORCODE_52_FILE_TOO_LARGE = $52 000000r 2 ERRORCODE_60_WRITE_FILE_OPEN = $60 000000r 2 ERRORCODE_61_FILE_NOT_OPEN = $61 000000r 2 ERRORCODE_62_FILE_NOT_FOUND = $62 000000r 2 ERRORCODE_63_FILE_EXISTS = $63 000000r 2 ERRORCODE_64_FILE_TYPE_MISMATCH = $64 000000r 2 ERRORCODE_65_NO_BLOCK = $65 000000r 2 ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR = $66 000000r 2 ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR = $67 000000r 2 ERRORCODE_70_NO_CHANNEL = $70 000000r 2 ERRORCODE_71_DIR_ERROR = $71 000000r 2 ERRORCODE_72_DISK_FULL = $72 000000r 2 ERRORCODE_73_IDENTIFY = $73 000000r 2 ERRORCODE_74_DRIVE_NOT_READY = $74 000000r 2 000000r 2 ERRORCODE_03_FILE = $03 000000r 2 ERRORCODE_04_OPEN = $04 000000r 2 ERRORCODE_05_MISMATCH = $05 000000r 2 ERRORCODE_06_NOT = $06 000000r 2 ERRORCODE_07_FOUND = $07 000000r 2 ERRORCODE_08_DISK = $08 000000r 2 ERRORCODE_09_ERROR = $09 000000r 2 ERRORCODE_0A_WRITE = $0A 000000r 2 ERRORCODE_0B_RECORD = $0B 000000r 2 000000r 2 ; all bytes bigger than or equal to this one will be treated as PETSCII characters, not as pseudo errors 000000r 2 ERRORCODE_NO_PSEUDO = ERRORCODE_20_READ_ERROR 000000r 2 000000r 1 000000r 1 000000r 1 .macro SET_WPSW_DIRTY_NO_CR 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr PATCH_WPSW 000000r 1 nop 000000r 1 .else 000000r 1 lda #$01 000000r 1 sta WPSW 000000r 1 .endif 000000r 1 .endmacro 000000r 1 000000r 1 .macro SET_WPSW_DIRTY 000000r 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 000000r 1 jsr PATCH_WPSW 000000r 1 nop 000000r 1 .else 000000r 1 lda #$01 000000r 1 sta WPSW 000000r 1 .endif 000000r 1 .endmacro 000000r 1 000000r 1 ; convert a decimal value (in X) into (packed) BCD (in A) 000000r 1 ; 000000r 1 ; the algorithm is simple: 000000r 1 ; decrement X and increment A until X is zero 000000r 1 ; as decimal mode is set, A will count up in BCD. 000000r 1 ; As the decimal mode does not affect dex, X will 000000r 1 ; be incremented in binary 000000r 1 ; 000000r 1 .macro CONVERT_BIN_TO_BCD_PARTIAL 000000r 1 @Next: 000000r 1 cpx #$00 000000r 1 beq @Done 000000r 1 clc 000000r 1 adc #$01 000000r 1 dex 000000r 1 jmp @Next 000000r 1 @Done: 000000r 1 .endmacro 000000r 1 000000r 1 .macro CONVERT_BIN_TO_BCD 000000r 1 lda #$00 000000r 1 sed 000000r 1 CONVERT_BIN_TO_BCD_PARTIAL 000000r 1 .endmacro 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1570 000000r 1 * = $8000 008000 1 008000 1 L8000: 008000 1 75 .byte DRIVE_8000 008001 1 L8001: 008001 1 98 .byte DRIVE_8001 008002 1 008002 1 L8002: 008002 1 .if CompileDrive >= DRIVE_1571CR_01 008002 1 .byte "S/W BY DAVID G SIRACUSA",$0D 008002 1 .byte "5710 BY C. HAUCK",$0D 008002 1 .byte "1986",$0D 008002 1 .else 008002 1 53 2F 57 20 .byte "S/W - DAVID G SIRACUSA",$0D 008006 1 2D 20 44 41 00800A 1 56 49 44 20 008019 1 48 2F 57 20 .byte "H/W - GREG BERLIN",$0D 00801D 1 2D 20 47 52 008021 1 45 47 20 42 00802B 1 31 39 38 35 .byte "1985",$0D 00802F 1 0D 008030 1 .endif 008030 1 008030 1 U0CommandPatch157x: 008030 1 AD 74 02 lda CMDSIZ 008033 1 C9 03 cmp #$03 008035 1 90 2E bcc @OriginalUxCommand 008037 1 AD 02 02 lda CMDBUF + 2 00803A 1 85 3B sta HINIB 00803C 1 29 1F and #$1F 00803E 1 AA tax 00803F 1 0A asl a 008040 1 A8 tay 008041 1 B9 8E 80 lda L808E,y 008044 1 85 75 sta IP 008046 1 B9 8F 80 lda L808E + 1,y 008049 1 85 76 sta IP + 1 00804B 1 E0 1E cpx #$1E 00804D 1 F0 07 beq @L8056 00804F 1 AD 0F 18 lda VBC_PAUNBUF1 008052 1 29 20 and #VBC_PA1_20 008054 1 F0 0F beq @OriginalUxCommand 008056 1 @L8056: 008056 1 A5 37 lda BITCNT 008058 1 29 EB and #$EB 00805A 1 85 37 sta BITCNT 00805C 1 BD 6E 80 lda L806E,x 00805F 1 8D 02 02 sta CMDBUF + 2 008062 1 .if CompileDrive >= DRIVE_1571_05 008062 1 jmp LAAE7 008062 1 .else 008062 1 6C 75 00 jmp (IP) 008065 1 .endif 008065 1 @OriginalUxCommand: 008065 1 A9 EA lda #AddressesUxCommands 00806B 1 85 6C sta USRJMP + 1 00806D 1 L806D: 00806D 1 60 rts 00806E 1 00806E 1 L806E: 00806E 1 80 81 90 91 .byte $80,$81,$90,$91,$B0,$B1,$F0,$F1 008072 1 B0 B1 F0 F1 008076 1 00 01 B0 01 .byte $00,$01,$B0,$01,$00,$01,$00,$01 00807A 1 00 01 00 01 00807E 1 80 81 90 91 .byte $80,$81,$90,$91,$B0,$B1,$F0,$F1 008082 1 B0 B1 F0 F1 008086 1 00 01 B0 01 .byte $00,$01,$B0,$01,$00,$01,$00,$80 00808A 1 00 01 00 80 00808E 1 00808E 1 L808E: 00808E 1 71 83 .addr L8371 008090 1 7F 83 .addr L837F 008092 1 EC 83 .addr L83EC 008094 1 F8 83 .addr L83F8 008096 1 8B 84 .addr L848B 008098 1 7F 83 .addr L837F 00809A 1 B7 84 .addr L84B7 00809C 1 B7 84 .addr L84B7 00809E 1 F1 84 .addr L84F1 0080A0 1 F1 84 .addr L84F1 0080A2 1 17 85 .addr L8517 0080A4 1 7F 83 .addr L837F 0080A6 1 6B 85 .addr L856B 0080A8 1 7F 83 .addr L837F 0080AA 1 A5 85 .addr L85A5 0080AC 1 A5 85 .addr L85A5 0080AE 1 71 83 .addr L8371 0080B0 1 7F 83 .addr L837F 0080B2 1 EC 83 .addr L83EC 0080B4 1 F8 83 .addr L83F8 0080B6 1 8B 84 .addr L848B 0080B8 1 7F 83 .addr L837F 0080BA 1 B7 84 .addr L84B7 0080BC 1 B7 84 .addr L84B7 0080BE 1 6D 80 .addr L806D 0080C0 1 6D 80 .addr L806D 0080C2 1 17 85 .addr L8517 0080C4 1 7F 83 .addr L837F 0080C6 1 6D 80 .addr L806D 0080C8 1 6D 80 .addr L806D 0080CA 1 E5 8F .addr L8FE5 0080CC 1 80 90 .addr L9080 0080CE 1 L80CE: 0080CE 1 78 sei ; disallow interrupts --> blocking job loop 0080CF 1 A9 00 lda #$00 0080D1 1 85 7C sta ATNPND 0080D3 1 85 79 sta LSNACT 0080D5 1 85 7A sta TLKACT 0080D7 1 A2 45 ldx #$45 0080D9 1 9A txs 0080DA 1 20 B2 81 jsr L81B2 0080DD 1 A9 80 lda #$80 0080DF 1 85 F8 sta EIOFLG 0080E1 1 85 7D sta ATNMOD 0080E3 1 20 B7 E9 jsr ClearClockOut 0080E6 1 20 A5 E9 jsr SetDataOut 0080E9 1 AD 00 18 lda VBC_PB1 0080EC 1 09 10 ora #VBC_PB1_1540_ATNA 0080EE 1 8D 00 18 sta VBC_PB1 0080F1 1 L80F1: 0080F1 1 AD 00 18 lda VBC_PB1 0080F4 1 10 64 bpl L815A 0080F6 1 29 04 and #VBC_PB1_1540_CLOCKIN 0080F8 1 D0 F7 bne L80F1 0080FA 1 L80FA: 0080FA 1 20 CA 82 jsr L82CA 0080FD 1 C9 3F cmp #$3F 0080FF 1 D0 0C bne L810D 008101 1 A5 37 lda BITCNT 008103 1 29 BF and #$BF 008105 1 85 37 sta BITCNT 008107 1 A9 00 lda #$00 008109 1 85 79 sta LSNACT 00810B 1 F0 0E beq L811B 00810D 1 L810D: 00810D 1 C9 5F cmp #$5F 00810F 1 D0 0D bne L811E 008111 1 A5 37 lda BITCNT 008113 1 29 BF and #$BF 008115 1 85 37 sta BITCNT 008117 1 A9 00 lda #$00 008119 1 85 7A sta TLKACT 00811B 1 L811B: 00811B 1 4C 92 81 jmp L8192 00811E 1 L811E: 00811E 1 C5 78 cmp TLKADR 008120 1 D0 0A bne L812C 008122 1 A9 01 lda #$01 008124 1 85 7A sta TLKACT 008126 1 A9 00 lda #$00 008128 1 85 79 sta LSNACT 00812A 1 F0 29 beq L8155 00812C 1 L812C: 00812C 1 C5 77 cmp LSNADR 00812E 1 D0 0A bne L813A 008130 1 A9 01 lda #$01 008132 1 85 79 sta LSNACT 008134 1 A9 00 lda #$00 008136 1 85 7A sta TLKACT 008138 1 F0 1B beq L8155 00813A 1 L813A: 00813A 1 AA tax 00813B 1 29 60 and #$60 00813D 1 C9 60 cmp #$60 00813F 1 D0 4C bne L818D 008141 1 8A txa 008142 1 85 84 sta ORGSA 008144 1 29 0F and #$0F 008146 1 85 83 sta SA 008148 1 A5 84 lda ORGSA 00814A 1 29 F0 and #$F0 00814C 1 C9 E0 cmp #$E0 00814E 1 D0 42 bne L8192 008150 1 58 cli ; allow processing of job loop 008151 1 20 C0 DA jsr LDAC0 008154 1 78 sei ; disallow interrupts --> blocking job loop 008155 1 L8155: 008155 1 2C 00 18 bit VBC_PB1 008158 1 30 A0 bmi L80FA 00815A 1 L815A: 00815A 1 A9 00 lda #$00 00815C 1 85 7D sta ATNMOD 00815E 1 AD 00 18 lda VBC_PB1 008161 1 29 EF and # ~ VBC_PB1_1540_ATNA 008163 1 8D 00 18 sta VBC_PB1 008166 1 A5 79 lda LSNACT 008168 1 F0 0D beq L8177 00816A 1 24 37 bit BITCNT 00816C 1 50 03 bvc L8171 00816E 1 20 99 81 jsr L8199 008171 1 L8171: 008171 1 20 42 83 jsr L8342 008174 1 4C 6B 83 jmp MainLoopEntry1570 008177 1 L8177: 008177 1 A5 7A lda TLKACT 008179 1 F0 0F beq L818A 00817B 1 20 9C E9 jsr ClearDataOut 00817E 1 20 AE E9 jsr SetClockOut 008181 1 20 83 A4 jsr LA483 008184 1 20 EA 81 jsr L81EA 008187 1 20 83 A4 jsr LA483 00818A 1 L818A: 00818A 1 4C 66 83 jmp L8366 00818D 1 L818D: 00818D 1 A9 10 lda #VBC_PB1_1540_ATNA 00818F 1 8D 00 18 sta VBC_PB1 008192 1 L8192: 008192 1 2C 00 18 bit VBC_PB1 008195 1 10 C3 bpl L815A 008197 1 30 F9 bmi L8192 008199 1 L8199: 008199 1 20 59 EA jsr TestATN 00819C 1 20 C0 E9 jsr ReadIecBusIn 00819F 1 29 04 and #VBC_PB1_1540_CLOCKIN 0081A1 1 D0 F6 bne L8199 0081A3 1 20 CE 81 jsr L81CE 0081A6 1 A9 00 lda #$00 0081A8 1 8D 0C 40 sta CIA_SDR 0081AB 1 A9 08 lda #CIA_ICR_B_SP 0081AD 1 L81AD: 0081AD 1 2C 0D 40 bit CIA_ICR 0081B0 1 F0 FB beq L81AD 0081B2 1 0081B2 1 L81B2: 0081B2 1 08 php 0081B3 1 78 sei ; disallow interrupts --> blocking job loop 0081B4 1 AD 0E 40 lda CIA_CRA 0081B7 1 29 BF and # ~ CIA_CRA_B_SP_OUTPUT 0081B9 1 8D 0E 40 sta CIA_CRA 0081BC 1 0081BC 1 AD 0F 18 lda VBC_PAUNBUF1 0081BF 1 29 FD and # ~ VBC_PA1_02 0081C1 1 8D 0F 18 sta VBC_PAUNBUF1 0081C4 1 0081C4 1 .if CompileDrive >= DRIVE_1571_05 0081C4 1 lda #CIA_ICR_BW_SET | CIA_ICR_B_SP 0081C4 1 .else 0081C4 1 A9 84 lda #CIA_ICR_BW_SET | CIA_ICR_B_TOD 0081C6 1 .endif 0081C6 1 8D 0D 40 sta CIA_ICR 0081C9 1 2C 0D 40 bit CIA_ICR 0081CC 1 28 plp 0081CD 1 60 rts 0081CE 1 0081CE 1 L81CE: 0081CE 1 08 php 0081CF 1 78 sei ; disallow interrupts --> blocking job loop 0081D0 1 AD 0F 18 lda VBC_PAUNBUF1 0081D3 1 09 02 ora #VBC_PA1_02 0081D5 1 8D 0F 18 sta VBC_PAUNBUF1 0081D8 1 AD 0E 40 lda CIA_CRA 0081DB 1 09 40 ora #CIA_CRA_B_SP_OUTPUT 0081DD 1 8D 0E 40 sta CIA_CRA 0081E0 1 A9 08 lda #CIA_ICR_B_SP 0081E2 1 8D 0D 40 sta CIA_ICR 0081E5 1 2C 0D 40 bit CIA_ICR 0081E8 1 28 plp 0081E9 1 60 rts 0081EA 1 L81EA: 0081EA 1 78 sei ; disallow interrupts --> blocking job loop 0081EB 1 20 EB D0 jsr LD0EB 0081EE 1 B0 06 bcs L81F6 0081F0 1 L81F0: 0081F0 1 A6 82 ldx LINDX 0081F2 1 B5 F2 lda CHNRDY,x 0081F4 1 30 01 bmi L81F7 0081F6 1 L81F6: 0081F6 1 60 rts 0081F7 1 L81F7: 0081F7 1 20 59 EA jsr TestATN 0081FA 1 20 C0 E9 jsr ReadIecBusIn 0081FD 1 29 01 and #VBC_PB1_1540_DATAIN 0081FF 1 08 php 008200 1 20 B7 E9 jsr ClearClockOut 008203 1 28 plp 008204 1 F0 12 beq L8218 008206 1 L8206: 008206 1 20 59 EA jsr TestATN 008209 1 20 C0 E9 jsr ReadIecBusIn 00820C 1 29 01 and #VBC_PB1_1540_DATAIN 00820E 1 D0 F6 bne L8206 008210 1 A6 82 ldx LINDX 008212 1 B5 F2 lda CHNRDY,x 008214 1 29 08 and #$08 008216 1 D0 14 bne L822C 008218 1 L8218: 008218 1 20 59 EA jsr TestATN 00821B 1 20 C0 E9 jsr ReadIecBusIn 00821E 1 29 01 and #VBC_PB1_1540_DATAIN 008220 1 D0 F6 bne L8218 008222 1 L8222: 008222 1 20 59 EA jsr TestATN 008225 1 20 C0 E9 jsr ReadIecBusIn 008228 1 29 01 and #VBC_PB1_1540_DATAIN 00822A 1 F0 F6 beq L8222 00822C 1 L822C: 00822C 1 20 AE E9 jsr SetClockOut 00822F 1 20 59 EA jsr TestATN 008232 1 20 C0 E9 jsr ReadIecBusIn 008235 1 29 01 and #VBC_PB1_1540_DATAIN 008237 1 D0 F3 bne L822C 008239 1 24 37 bit BITCNT 00823B 1 50 39 bvc L8276 00823D 1 AD 0F 18 lda VBC_PAUNBUF1 008240 1 09 02 ora #VBC_PA1_02 008242 1 8D 0F 18 sta VBC_PAUNBUF1 008245 1 AD 0E 40 lda CIA_CRA 008248 1 09 40 ora #CIA_CRA_B_SP_OUTPUT 00824A 1 8D 0E 40 sta CIA_CRA 00824D 1 2C 0D 40 bit CIA_ICR 008250 1 A6 82 ldx LINDX 008252 1 BD 3E 02 lda L023E,x 008255 1 8D 0C 40 sta CIA_SDR 008258 1 L8258: 008258 1 AD 0D 40 lda CIA_ICR 00825B 1 29 08 and #$08 00825D 1 F0 F9 beq L8258 00825F 1 AD 0E 40 lda CIA_CRA 008262 1 29 BF and # ~ CIA_CRA_B_SP_OUTPUT 008264 1 8D 0E 40 sta CIA_CRA 008267 1 AD 0F 18 lda VBC_PAUNBUF1 00826A 1 29 FD and # ~ VBC_PA1_02 00826C 1 8D 0F 18 sta VBC_PAUNBUF1 00826F 1 .if CompileDrive >= DRIVE_1571_05 00826F 1 lda #CIA_ICR_BW_SET | CIA_ICR_B_SP 00826F 1 .else 00826F 1 A9 84 lda #CIA_ICR_BW_SET | CIA_ICR_B_TOD 008271 1 .endif 008271 1 8D 0D 40 sta CIA_ICR 008274 1 D0 3C bne L82B2 008276 1 L8276: 008276 1 A9 08 lda #$08 008278 1 85 98 sta CONT 00827A 1 L827A: 00827A 1 20 C0 E9 jsr ReadIecBusIn 00827D 1 29 01 and #VBC_PB1_1540_DATAIN 00827F 1 D0 43 bne L82C4 008281 1 L8281: 008281 1 A6 82 ldx LINDX 008283 1 BD 3E 02 lda L023E,x 008286 1 6A ror a 008287 1 9D 3E 02 sta L023E,x 00828A 1 B0 05 bcs L8291 00828C 1 20 A5 E9 jsr SetDataOut 00828F 1 D0 03 bne L8294 008291 1 L8291: 008291 1 20 9C E9 jsr ClearDataOut 008294 1 L8294: 008294 1 20 7E A4 jsr LA47E 008297 1 A5 23 lda DRVTRK + 1 008299 1 .if CompileDrive >= DRIVE_1571_05 008299 1 bne L829E 008299 1 .else 008299 1 D0 E6 bne L8281 00829B 1 .endif 00829B 1 20 83 A4 jsr LA483 00829E 1 L829E: 00829E 1 20 B7 E9 jsr ClearClockOut 0082A1 1 20 7E A4 jsr LA47E 0082A4 1 A5 23 lda DRVTRK + 1 0082A6 1 D0 03 bne L82AB 0082A8 1 20 83 A4 jsr LA483 0082AB 1 L82AB: 0082AB 1 20 FB FE jsr LFEFB 0082AE 1 C6 98 dec CONT 0082B0 1 D0 C8 bne L827A 0082B2 1 L82B2: 0082B2 1 20 59 EA jsr TestATN 0082B5 1 20 C0 E9 jsr ReadIecBusIn 0082B8 1 29 01 and #VBC_PB1_1540_DATAIN 0082BA 1 F0 F6 beq L82B2 0082BC 1 58 cli ; allow processing of job loop 0082BD 1 20 AA D3 jsr LD3AA 0082C0 1 78 sei ; disallow interrupts --> blocking job loop 0082C1 1 4C F0 81 jmp L81F0 0082C4 1 L82C4: 0082C4 1 4C 62 83 jmp L8362 0082C7 1 L82C7: 0082C7 1 2C 0D 40 bit CIA_ICR 0082CA 1 L82CA: 0082CA 1 A9 08 lda #$08 0082CC 1 85 98 sta CONT 0082CE 1 L82CE: 0082CE 1 20 59 EA jsr TestATN 0082D1 1 20 C0 E9 jsr ReadIecBusIn 0082D4 1 29 04 and #VBC_PB1_1540_CLOCKIN 0082D6 1 D0 F6 bne L82CE 0082D8 1 20 9C E9 jsr ClearDataOut 0082DB 1 A9 01 lda #$01 0082DD 1 L82DD: 0082DD 1 2C 00 18 bit VBC_PB1 0082E0 1 D0 FB bne L82DD 0082E2 1 .if CompileDrive >= DRIVE_1571_05 0082E2 1 jsr LAA76 0082E2 1 .else 0082E2 1 8D 05 18 sta VBC_T1HC1 0082E5 1 .endif 0082E5 1 L82E5: 0082E5 1 20 59 EA jsr TestATN 0082E8 1 AD 0D 18 lda VBC_IFR1 0082EB 1 29 40 and #$40 0082ED 1 D0 09 bne L82F8 0082EF 1 20 C0 E9 jsr ReadIecBusIn 0082F2 1 29 04 and #VBC_PB1_1540_CLOCKIN 0082F4 1 F0 EF beq L82E5 0082F6 1 D0 19 bne L8311 0082F8 1 L82F8: 0082F8 1 20 A5 E9 jsr SetDataOut 0082FB 1 A2 18 ldx #$18 0082FD 1 L82FD: 0082FD 1 CA dex 0082FE 1 D0 FD bne L82FD 008300 1 20 9C E9 jsr ClearDataOut 008303 1 L8303: 008303 1 20 59 EA jsr TestATN 008306 1 20 C0 E9 jsr ReadIecBusIn 008309 1 29 04 and #VBC_PB1_1540_CLOCKIN 00830B 1 F0 F6 beq L8303 00830D 1 A9 00 lda #$00 00830F 1 85 F8 sta EIOFLG 008311 1 L8311: 008311 1 AD 00 18 lda VBC_PB1 008314 1 49 01 eor #VBC_PB1_1540_DATAIN 008316 1 AA tax 008317 1 AD 0D 40 lda CIA_ICR 00831A 1 29 08 and #CIA_ICR_B_SP 00831C 1 F0 08 beq L8326 00831E 1 AD 0C 40 lda CIA_SDR 008321 1 85 85 sta DATA 008323 1 4C 3C 83 jmp L833C 008326 1 L8326: 008326 1 8A txa 008327 1 4A lsr a 008328 1 29 02 and #$02 00832A 1 D0 E5 bne L8311 00832C 1 66 85 ror DATA 00832E 1 L832E: 00832E 1 20 59 EA jsr TestATN 008331 1 20 C0 E9 jsr ReadIecBusIn 008334 1 29 04 and #VBC_PB1_1540_CLOCKIN 008336 1 F0 F6 beq L832E 008338 1 C6 98 dec CONT 00833A 1 D0 D5 bne L8311 00833C 1 L833C: 00833C 1 20 A5 E9 jsr SetDataOut 00833F 1 A5 85 lda DATA 008341 1 60 rts 008342 1 L8342: 008342 1 78 sei ; disallow interrupts --> blocking job loop 008343 1 20 07 D1 jsr LD107 008346 1 B0 05 bcs L834D 008348 1 B5 F2 lda CHNRDY,x 00834A 1 6A ror a 00834B 1 B0 0B bcs L8358 00834D 1 L834D: 00834D 1 A5 84 lda ORGSA 00834F 1 29 F0 and #$F0 008351 1 C9 F0 cmp #$F0 008353 1 F0 03 beq L8358 008355 1 4C 66 83 jmp L8366 008358 1 L8358: 008358 1 20 C7 82 jsr L82C7 00835B 1 58 cli ; allow processing of job loop 00835C 1 20 B7 CF jsr LCFB7 00835F 1 4C 42 83 jmp L8342 008362 1 L8362: 008362 1 A9 00 lda #$00 008364 1 85 37 sta BITCNT 008366 1 L8366: 008366 1 A9 00 lda #0 008368 1 8D 00 18 sta VBC_PB1 00836B 1 MainLoopEntry1570: 00836B 1 20 B2 81 jsr L81B2 00836E 1 4C E7 EB jmp MainLoopEntry 008371 1 L8371: 008371 1 8D 4D 02 sta CMD 008374 1 85 5F sta AF 008376 1 AD 0D 18 lda VBC_IFR1 008379 1 4A lsr a 00837A 1 90 18 bcc L8394 00837C 1 A2 0B ldx #$0B 00837E 1 2C .byte ASM_BIT3 00837F 1 L837F: 00837F 1 A2 4F ldx #$4F 008381 1 L8381: 008381 1 20 E9 85 jsr L85E9 008384 1 L8384: 008384 1 20 81 85 jsr L8581 008387 1 L8387: 008387 1 E0 02 cpx #$02 008389 1 B0 01 bcs L838C 00838B 1 60 rts 00838C 1 L838C: 00838C 1 8A txa 00838D 1 29 0F and #$0F 00838F 1 A2 00 ldx #$00 008391 1 4C 0A E6 jmp LE60A 008394 1 L8394: 008394 1 20 CE 81 jsr L81CE 008397 1 24 5E bit AS 008399 1 10 05 bpl L83A0 00839B 1 A9 09 lda #$09 00839D 1 4C E6 86 jmp L86E6 0083A0 1 L83A0: 0083A0 1 20 3D C6 jsr LC63D 0083A3 1 L83A3: 0083A3 1 58 cli ; allow processing of job loop 0083A4 1 A5 3B lda HINIB 0083A6 1 29 20 and #$20 0083A8 1 D0 26 bne L83D0 0083AA 1 AD 03 02 lda CMDBUF + 3 0083AD 1 85 06 sta TRACK0 0083AF 1 AD 04 02 lda CMDBUF + 4 0083B2 1 85 07 sta SECTOR0 0083B4 1 A2 00 ldx #$00 0083B6 1 A5 5F lda AF 0083B8 1 95 00 sta JOBS0,x 0083BA 1 20 5E 86 jsr L865E 0083BD 1 78 sei ; disallow interrupts --> blocking job loop 0083BE 1 20 E9 85 jsr L85E9 0083C1 1 24 3B bit HINIB 0083C3 1 70 04 bvs L83C9 0083C5 1 E0 02 cpx #$02 0083C7 1 B0 B8 bcs L8381 0083C9 1 L83C9: 0083C9 1 20 F9 85 jsr L85F9 0083CC 1 A5 3B lda HINIB 0083CE 1 30 0D bmi L83DD 0083D0 1 L83D0: 0083D0 1 A0 00 ldy #$00 0083D2 1 L83D2: 0083D2 1 B9 00 03 lda BUFFER0,y 0083D5 1 85 46 sta CTRACK 0083D7 1 20 F9 85 jsr L85F9 0083DA 1 C8 iny 0083DB 1 D0 F5 bne L83D2 0083DD 1 L83DD: 0083DD 1 CE 05 02 dec CMDBUF + 5 0083E0 1 F0 06 beq L83E8 0083E2 1 20 1E 86 jsr L861E 0083E5 1 4C A3 83 jmp L83A3 0083E8 1 L83E8: 0083E8 1 58 cli ; allow processing of job loop 0083E9 1 4C AF 85 jmp L85AF 0083EC 1 L83EC: 0083EC 1 8D 4D 02 sta CMD 0083EF 1 AD 0D 18 lda VBC_IFR1 0083F2 1 4A lsr a 0083F3 1 90 0D bcc L8402 0083F5 1 A2 0B ldx #$0B 0083F7 1 2C .byte ASM_BIT3 0083F8 1 L83F8: 0083F8 1 A2 4F ldx #$4F 0083FA 1 86 46 stx CTRACK 0083FC 1 A5 3B lda HINIB 0083FE 1 09 08 ora #$08 008400 1 85 3B sta HINIB 008402 1 L8402: 008402 1 24 5E bit AS 008404 1 10 05 bpl L840B 008406 1 A9 0A lda #$0A 008408 1 4C E6 86 jmp L86E6 00840B 1 L840B: 00840B 1 20 3D C6 jsr LC63D 00840E 1 A5 3B lda HINIB 008410 1 30 29 bmi L843B 008412 1 L8412: 008412 1 78 sei ; disallow interrupts --> blocking job loop 008413 1 A0 00 ldy #$00 008415 1 L8415: 008415 1 AD 00 18 lda VBC_PB1 008418 1 49 08 eor #VBC_PB1_1540_CLOCKOUT 00841A 1 2C 0D 40 bit CIA_ICR 00841D 1 8D 00 18 sta VBC_PB1 008420 1 L8420: 008420 1 AD 00 18 lda VBC_PB1 008423 1 10 03 bpl L8428 008425 1 20 59 EA jsr TestATN 008428 1 L8428: 008428 1 AD 0D 40 lda CIA_ICR 00842B 1 29 08 and #CIA_ICR_B_SP 00842D 1 F0 F1 beq L8420 00842F 1 AD 0C 40 lda CIA_SDR 008432 1 99 00 03 sta BUFFER0,y 008435 1 C8 iny 008436 1 D0 DD bne L8415 008438 1 20 B7 E9 jsr ClearClockOut 00843B 1 L843B: 00843B 1 58 cli ; allow processing of job loop 00843C 1 A5 3B lda HINIB 00843E 1 29 20 and #$20 008440 1 D0 37 bne L8479 008442 1 A5 3B lda HINIB 008444 1 29 08 and #$08 008446 1 F0 05 beq L844D 008448 1 A6 46 ldx CTRACK 00844A 1 4C 81 83 jmp L8381 00844D 1 L844D: 00844D 1 AD 03 02 lda CMDBUF + 3 008450 1 85 06 sta TRACK0 008452 1 AD 04 02 lda CMDBUF + 4 008455 1 85 07 sta SECTOR0 008457 1 A2 00 ldx #$00 008459 1 A9 90 lda #$90 00845B 1 95 00 sta JOBS0,x 00845D 1 20 5E 86 jsr L865E 008460 1 78 sei ; disallow interrupts --> blocking job loop 008461 1 20 CE 81 jsr L81CE 008464 1 20 E9 85 jsr L85E9 008467 1 20 F9 85 jsr L85F9 00846A 1 20 A0 86 jsr L86A0 00846D 1 20 B2 81 jsr L81B2 008470 1 58 cli ; allow processing of job loop 008471 1 24 3B bit HINIB 008473 1 70 04 bvs L8479 008475 1 E0 02 cpx #$02 008477 1 B0 0B bcs L8484 008479 1 L8479: 008479 1 CE 05 02 dec CMDBUF + 5 00847C 1 F0 09 beq L8487 00847E 1 20 1E 86 jsr L861E 008481 1 4C 12 84 jmp L8412 008484 1 L8484: 008484 1 4C 8C 83 jmp L838C 008487 1 L8487: 008487 1 58 cli ; allow processing of job loop 008488 1 4C AF 85 jmp L85AF 00848B 1 L848B: 00848B 1 AD 02 02 lda CMDBUF + 2 00848E 1 29 01 and #$01 008490 1 D0 20 bne L84B2 008492 1 A9 01 lda #$01 008494 1 8D 0D 18 sta VBC_IFR1 008497 1 A9 05 lda #$05 008499 1 20 E6 86 jsr L86E6 00849C 1 AE B0 01 ldx L01B0 00849F 1 E0 02 cpx #$02 0084A1 1 90 11 bcc L84B4 0084A3 1 A2 00 ldx #$00 0084A5 1 86 5E stx AS 0084A7 1 A9 B0 lda #$B0 0084A9 1 .if CompileDrive >= DRIVE_1571_05 0084A9 1 jsr LC075 0084A9 1 .else 0084A9 1 8D 4D 02 sta CMD 0084AC 1 .endif 0084AC 1 95 00 sta JOBS0,x 0084AE 1 20 5E 86 jsr L865E 0084B1 1 2C .byte ASM_BIT3 0084B2 1 L84B2: 0084B2 1 A2 4F ldx #$4F 0084B4 1 L84B4: 0084B4 1 4C 81 83 jmp L8381 0084B7 1 L84B7: 0084B7 1 AD 02 02 lda CMDBUF + 2 0084BA 1 29 01 and #$01 0084BC 1 D0 2B bne L84E9 0084BE 1 AD 03 02 lda CMDBUF + 3 0084C1 1 10 05 bpl L84C8 0084C3 1 A9 08 lda #$08 0084C5 1 4C E6 86 jmp L86E6 0084C8 1 L84C8: 0084C8 1 A9 00 lda #$00 0084CA 1 85 5E sta AS 0084CC 1 85 FF sta NODRV 0084CE 1 AD 04 02 lda CMDBUF + 4 0084D1 1 85 12 sta DiskID0 0084D3 1 AD 05 02 lda CMDBUF + 5 0084D6 1 85 13 sta DiskID0 + 1 0084D8 1 20 07 D3 jsr LD307 0084DB 1 A9 01 lda #$01 0084DD 1 85 80 sta TRACK 0084DF 1 A9 FF lda #$FF 0084E1 1 8D 98 02 sta JOBRTN 0084E4 1 .if CompileDrive = DRIVE_1571_03 0084E4 1 jsr LA989 0084E4 1 .else 0084E4 1 20 4D AA jsr LAA4D 0084E7 1 .endif 0084E7 1 AA tax 0084E8 1 2C .byte ASM_BIT3 0084E9 1 L84E9: 0084E9 1 A2 4F ldx #$4F 0084EB 1 20 E9 85 jsr L85E9 0084EE 1 4C 87 83 jmp L8387 0084F1 1 L84F1: 0084F1 1 78 sei ; disallow interrupts --> blocking job loop 0084F2 1 24 3B bit HINIB 0084F4 1 10 0A bpl L8500 0084F6 1 20 CE 81 jsr L81CE 0084F9 1 A5 3C lda BYTE 0084FB 1 85 46 sta CTRACK 0084FD 1 4C F9 85 jmp L85F9 008500 1 L8500: 008500 1 AE 74 02 ldx CMDSIZ 008503 1 E0 04 cpx #$04 008505 1 B0 0A bcs L8511 008507 1 A2 0E ldx #$0E 008509 1 20 E9 85 jsr L85E9 00850C 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 00850E 1 4C C8 C1 jmp GenerateErrorMessage 008511 1 ; -------------- 008511 1 008511 1 L8511: 008511 1 AD 03 02 lda CMDBUF + 3 008514 1 85 3C sta BYTE 008516 1 60 rts 008517 1 L8517: 008517 1 20 8B 84 jsr L848B 00851A 1 24 5E bit AS 00851C 1 10 48 bpl L8566 00851E 1 A9 0D lda #$0D 008520 1 20 E6 86 jsr L86E6 008523 1 AE B0 01 ldx L01B0 008526 1 E0 02 cpx #$02 008528 1 B0 08 bcs L8532 00852A 1 20 61 89 jsr L8961 00852D 1 20 86 89 jsr L8986 008530 1 8A txa 008531 1 48 pha 008532 1 L8532: 008532 1 78 sei ; disallow interrupts --> blocking job loop 008533 1 20 CE 81 jsr L81CE 008536 1 A5 5E lda AS 008538 1 85 46 sta CTRACK 00853A 1 20 F9 85 jsr L85F9 00853D 1 AE B0 01 ldx L01B0 008540 1 E0 02 cpx #$02 008542 1 B0 23 bcs L8567 008544 1 A5 97 lda MYPA 008546 1 85 46 sta CTRACK 008548 1 20 F9 85 jsr L85F9 00854B 1 A5 67 lda NMIFLG 00854D 1 85 46 sta CTRACK 00854F 1 20 F9 85 jsr L85F9 008552 1 A5 60 lda ACLSTP 008554 1 85 46 sta CTRACK 008556 1 20 F9 85 jsr L85F9 008559 1 A5 61 lda RSTEPS 00855B 1 85 46 sta CTRACK 00855D 1 20 F9 85 jsr L85F9 008560 1 68 pla 008561 1 85 46 sta CTRACK 008563 1 .if CompileDrive >= DRIVE_1571_05 008563 1 jmp LAAC5 008563 1 .else 008563 1 20 F9 85 jsr L85F9 008566 1 .endif 008566 1 L8566: 008566 1 60 rts 008567 1 L8567: 008567 1 68 pla 008568 1 4C 8C 83 jmp L838C 00856B 1 L856B: 00856B 1 24 3B bit HINIB 00856D 1 10 27 bpl L8596 00856F 1 24 3B bit HINIB 008571 1 50 0E bvc L8581 008573 1 AD 0D 18 lda VBC_IFR1 008576 1 4A lsr a 008577 1 90 08 bcc L8581 008579 1 A5 5E lda AS 00857B 1 29 F0 and #$F0 00857D 1 09 0B ora #$0B 00857F 1 85 5E sta AS 008581 1 L8581: 008581 1 78 sei ; disallow interrupts --> blocking job loop 008582 1 20 CE 81 jsr L81CE 008585 1 A5 5E lda AS 008587 1 85 46 sta CTRACK 008589 1 20 F9 85 jsr L85F9 00858C 1 A9 00 lda #ERRORCODE_00_OK 00858E 1 8D 6C 02 sta ERWORD 008591 1 20 B2 81 jsr L81B2 008594 1 58 cli ; allow processing of job loop 008595 1 60 rts 008596 1 L8596: 008596 1 AD 03 02 lda CMDBUF + 3 008599 1 85 5E sta AS 00859B 1 24 3B bit HINIB 00859D 1 50 05 bvc L85A4 00859F 1 A9 01 lda #$01 0085A1 1 8D 0D 18 sta VBC_IFR1 0085A4 1 L85A4: 0085A4 1 60 rts 0085A5 1 L85A5: 0085A5 1 A2 0E ldx #$0E 0085A7 1 20 E9 85 jsr L85E9 0085AA 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 0085AC 1 4C C8 C1 jmp GenerateErrorMessage 0085AF 1 ; -------------- 0085AF 1 0085AF 1 L85AF: 0085AF 1 AD 74 02 lda CMDSIZ 0085B2 1 C9 07 cmp #$07 0085B4 1 90 32 bcc L85E8 0085B6 1 A5 06 lda TRACK0 0085B8 1 A8 tay 0085B9 1 E9 01 sbc #$01 0085BB 1 0A asl a 0085BC 1 85 64 sta MINSTP 0085BE 1 C0 24 cpy #$24 0085C0 1 08 php 0085C1 1 AC 06 02 ldy CMDBUF + 6 0085C4 1 84 22 sty DRVTRK 0085C6 1 88 dey 0085C7 1 84 67 sty NMIFLG 0085C9 1 C0 23 cpy #$23 0085CB 1 6A ror a 0085CC 1 28 plp 0085CD 1 29 80 and #$80 0085CF 1 90 0B bcc L85DC 0085D1 1 30 12 bmi L85E5 0085D3 1 18 clc 0085D4 1 A5 67 lda NMIFLG 0085D6 1 69 23 adc #$23 0085D8 1 85 67 sta NMIFLG 0085DA 1 30 09 bmi L85E5 0085DC 1 L85DC: 0085DC 1 10 07 bpl L85E5 0085DE 1 38 sec 0085DF 1 A5 67 lda NMIFLG 0085E1 1 E9 23 sbc #$23 0085E3 1 85 67 sta NMIFLG 0085E5 1 L85E5: 0085E5 1 4C BA 87 jmp L87BA 0085E8 1 L85E8: 0085E8 1 60 rts 0085E9 1 L85E9: 0085E9 1 86 46 stx CTRACK 0085EB 1 A5 5E lda AS 0085ED 1 29 F0 and #$F0 0085EF 1 05 46 ora CTRACK 0085F1 1 85 5E sta AS 0085F3 1 85 46 sta CTRACK 0085F5 1 60 rts 0085F6 1 L85F6: 0085F6 1 20 59 EA jsr TestATN 0085F9 1 L85F9: 0085F9 1 AD 00 18 lda VBC_PB1 0085FC 1 CD 00 18 cmp VBC_PB1 0085FF 1 D0 F8 bne L85F9 008601 1 29 FF and #$FF 008603 1 30 F1 bmi L85F6 008605 1 45 37 eor BITCNT 008607 1 29 04 and #$04 ; VBC_PB1_1540_CLOCKIN? 008609 1 F0 EE beq L85F9 00860B 1 A5 46 lda CTRACK 00860D 1 .if CompileDrive >= DRIVE_1571_05 00860D 1 jmp LAB10 00860D 1 .else 00860D 1 8D 0C 40 sta CIA_SDR 008610 1 .endif 008610 1 A5 37 lda BITCNT 008612 1 49 04 eor #$04 008614 1 85 37 sta BITCNT 008616 1 A9 08 lda #CIA_ICR_B_SP 008618 1 L8618: 008618 1 2C 0D 40 bit CIA_ICR 00861B 1 F0 FB beq L8618 00861D 1 60 rts 00861E 1 00861E 1 L861E: 00861E 1 AD 03 02 lda CMDBUF + 3 008621 1 C9 24 cmp #$24 008623 1 90 02 bcc L8627 008625 1 E9 23 sbc #$23 008627 1 L8627: 008627 1 AA tax 008628 1 BD 2B 94 lda L9409 + 34,x 00862B 1 AA tax 00862C 1 CA dex 00862D 1 86 46 stx CTRACK 00862F 1 18 clc 008630 1 AD 04 02 lda CMDBUF + 4 008633 1 65 3C adc BYTE 008635 1 C5 46 cmp CTRACK 008637 1 90 0A bcc L8643 008639 1 E5 46 sbc CTRACK 00863B 1 F0 04 beq L8641 00863D 1 38 sec 00863E 1 E9 01 sbc #$01 008640 1 2C .byte ASM_BIT3 008641 1 L8641: 008641 1 A5 46 lda CTRACK 008643 1 L8643: 008643 1 8D 04 02 sta CMDBUF + 4 008646 1 A9 88 lda #$88 008648 1 85 5F sta AF 00864A 1 60 rts 00864B 1 L864B: 00864B 1 A6 F9 ldx JOBNUM 00864D 1 08 php 00864E 1 58 cli ; allow processing of job loop 00864F 1 20 B6 9F jsr L9FB6 008652 1 C9 02 cmp #$02 008654 1 90 05 bcc L865B 008656 1 20 83 86 jsr L8683 008659 1 B5 00 lda JOBS0,x 00865B 1 L865B: 00865B 1 AA tax 00865C 1 28 plp 00865D 1 60 rts 00865E 1 L865E: 00865E 1 A2 00 ldx #$00 008660 1 08 php 008661 1 78 sei ; disallow interrupts --> blocking job loop 008662 1 AD 00 1C lda VDC_PB2 008665 1 09 08 ora #VDC_PB2_DRIVE0LED 008667 1 8D 00 1C sta VDC_PB2 00866A 1 58 cli ; allow processing of job loop 00866B 1 20 B6 9F jsr L9FB6 00866E 1 C9 02 cmp #$02 008670 1 90 03 bcc L8675 008672 1 20 83 86 jsr L8683 008675 1 L8675: 008675 1 78 sei ; disallow interrupts --> blocking job loop 008676 1 AD 00 1C lda VDC_PB2 008679 1 29 F7 and # ~ VDC_PB2_DRIVELEDS 00867B 1 8D 00 1C sta VDC_PB2 00867E 1 B5 00 lda JOBS0,x 008680 1 AA tax 008681 1 28 plp 008682 1 60 rts 008683 1 L8683: 008683 1 A9 FF lda #$FF 008685 1 8D 98 02 sta JOBRTN 008688 1 86 F9 stx JOBNUM 00868A 1 AD 02 02 lda CMDBUF + 2 00868D 1 85 5F sta AF 00868F 1 8D 4D 02 sta CMD 008692 1 9D 5B 02 sta LSTJOB,x 008695 1 .if CompileDrive >= DRIVE_1571_05 008695 1 sta JOBS0,x 008695 1 .else 008695 1 85 00 sta JOBS0 008697 1 .endif 008697 1 20 B6 9F jsr L9FB6 00869A 1 4C 99 D5 jmp LD599 00869D 1 L869D: 00869D 1 20 59 EA jsr TestATN 0086A0 1 L86A0: 0086A0 1 AD 00 18 lda VBC_PB1 0086A3 1 CD 00 18 cmp VBC_PB1 0086A6 1 D0 F8 bne L86A0 0086A8 1 29 FF and #$FF 0086AA 1 30 F1 bmi L869D 0086AC 1 45 37 eor BITCNT 0086AE 1 29 04 and #$04 ; VBC_PB1_1540_CLOCKIN? 0086B0 1 F0 EE beq L86A0 0086B2 1 A5 37 lda BITCNT 0086B4 1 49 04 eor #$04 0086B6 1 85 37 sta BITCNT 0086B8 1 60 rts 0086B9 1 L86B9: 0086B9 1 00 15 00 00 .byte $00,$15,$00,$00,$00,$15,$00,$BC 0086BD 1 00 15 00 BC 0086C1 1 34 DE FE DC .byte $34,$DE,$FE,$DC,$15,$15,$00 0086C5 1 15 15 00 0086C8 1 L86C8: 0086C8 1 EC 89 .addr L89EC 0086CA 1 EF 89 .addr L89EF 0086CC 1 FD 89 .addr L89FD 0086CE 1 03 8A .addr L8A03 0086D0 1 08 8A .addr L8A08 0086D2 1 09 8A .addr L8A09 0086D4 1 BA 87 .addr L87BA 0086D6 1 86 8A .addr L8A86 0086D8 1 57 8C .addr L8C57 0086DA 1 67 8D .addr L8D67 0086DC 1 F6 8D .addr L8DF6 0086DE 1 .if CompileDrive >= DRIVE_1571CR 0086DE 1 .addr LACC7 0086DE 1 .addr LAD2E 0086DE 1 .addr LAD93 0086DE 1 .else 0086DE 1 C6 8E .addr L8EC6 0086E0 1 18 8F .addr L8F18 0086E2 1 5F 8F .addr L8F5F 0086E4 1 .endif 0086E4 1 B3 89 .addr L89B3 0086E6 1 0086E6 1 L86E6: 0086E6 1 78 sei ; disallow interrupts --> blocking job loop 0086E7 1 48 pha 0086E8 1 AA tax 0086E9 1 BD B9 86 lda L86B9,x 0086EC 1 85 1B sta ACTJOB 0086EE 1 A5 5E lda AS 0086F0 1 09 80 ora #$80 0086F2 1 85 5E sta AS 0086F4 1 06 1B asl ACTJOB 0086F6 1 90 05 bcc L86FD 0086F8 1 AD 03 02 lda CMDBUF + 3 0086FB 1 85 67 sta NMIFLG 0086FD 1 L86FD: 0086FD 1 06 1B asl ACTJOB 0086FF 1 90 05 bcc L8706 008701 1 AD 04 02 lda CMDBUF + 4 008704 1 85 43 sta SECTR 008706 1 L8706: 008706 1 06 1B asl ACTJOB 008708 1 90 11 bcc L871B 00870A 1 AD 00 1C lda VDC_PB2 00870D 1 29 10 and #VDC_PB2_WRITEPROTECT 00870F 1 D0 0A bne L871B 008711 1 A5 3B lda HINIB 008713 1 09 08 ora #$08 008715 1 85 3B sta HINIB 008717 1 A2 08 ldx #$08 008719 1 86 46 stx CTRACK 00871B 1 L871B: 00871B 1 06 1B asl ACTJOB 00871D 1 90 03 bcc L8722 00871F 1 20 94 87 jsr L8794 008722 1 L8722: 008722 1 06 1B asl ACTJOB 008724 1 90 03 bcc L8729 008726 1 20 BA 87 jsr L87BA 008729 1 L8729: 008729 1 06 1B asl ACTJOB 00872B 1 90 03 bcc L8730 00872D 1 20 B0 87 jsr L87B0 008730 1 L8730: 008730 1 20 54 89 jsr L8954 008733 1 06 1B asl ACTJOB 008735 1 90 03 bcc L873A 008737 1 20 2A 89 jsr L892A 00873A 1 L873A: 00873A 1 A9 00 lda #$00 00873C 1 68 pla 00873D 1 0A asl a 00873E 1 AA tax 00873F 1 BD C8 86 lda L86C8,x 008742 1 85 6F sta T0 008744 1 BD C9 86 lda L86C8 + 1,x 008747 1 85 70 sta T1 008749 1 .if CompileDrive >= DRIVE_1571CR_01 008749 1 jsr L877C 008749 1 .endif 008749 1 20 61 87 jsr L8761 00874C 1 20 8F F9 jsr LF98F 00874F 1 .if CompileDrive >= DRIVE_1571CR_01 00874F 1 jsr L8788 00874F 1 .endif 00874F 1 AE B0 01 ldx L01B0 008752 1 E0 02 cpx #$02 008754 1 08 php 008755 1 06 1B asl ACTJOB 008757 1 B0 06 bcs L875F 008759 1 28 plp 00875A 1 90 04 bcc L8760 00875C 1 4C 8C 83 jmp L838C 00875F 1 L875F: 00875F 1 28 plp 008760 1 L8760: 008760 1 60 rts 008761 1 008761 1 L8761: 008761 1 6C 6F 00 jmp (T0) 008764 1 008764 1 L8764: 008764 1 08 php 008765 1 78 sei ; disallow interrupts --> blocking job loop 008766 1 AD 00 1C lda VDC_PB2 008769 1 09 04 ora #VDC_PB2_DRIVE0MOTOR 00876B 1 8D 00 1C sta VDC_PB2 00876E 1 28 plp 00876F 1 60 rts 008770 1 L8770: 008770 1 08 php 008771 1 78 sei ; disallow interrupts --> blocking job loop 008772 1 AD 00 1C lda VDC_PB2 008775 1 29 FB and # ~ VDC_PB2_DRIVE0MOTOR 008777 1 8D 00 1C sta VDC_PB2 00877A 1 28 plp 00877B 1 60 rts 00877C 1 L877C: 00877C 1 08 php 00877D 1 78 sei ; disallow interrupts --> blocking job loop 00877E 1 AD 00 1C lda VDC_PB2 008781 1 09 08 ora #VDC_PB2_DRIVE0LED 008783 1 8D 00 1C sta VDC_PB2 008786 1 28 plp 008787 1 60 rts 008788 1 L8788: 008788 1 08 php 008789 1 78 sei ; disallow interrupts --> blocking job loop 00878A 1 AD 00 1C lda VDC_PB2 00878D 1 29 F7 and # ~ VDC_PB2_DRIVELEDS 00878F 1 8D 00 1C sta VDC_PB2 008792 1 28 plp 008793 1 60 rts 008794 1 L8794: 008794 1 08 php 008795 1 78 sei ; disallow interrupts --> blocking job loop 008796 1 A5 20 lda DRVST 008798 1 .if CompileDrive >= DRIVE_1571_05 008798 1 bmi L87A2 008798 1 and #$30 008798 1 beq L87A4 008798 1 lda #$20 008798 1 .else 008798 1 C9 20 cmp #$20 00879A 1 F0 0E beq L87AA 00879C 1 AD 02 02 lda CMDBUF + 2 00879F 1 29 01 and #$01 0087A1 1 85 3E sta CDRIVE 0087A3 1 20 64 87 jsr L8764 0087A6 1 A9 A0 lda #$A0 0087A8 1 .endif 0087A8 1 85 20 sta DRVST 0087AA 1 0087AA 1 .if CompileDrive >= DRIVE_1571_05 0087AA 1 L87A2: 0087AA 1 plp 0087AA 1 .else 0087AA 1 L87AA: 0087AA 1 A9 32 lda #$32 0087AC 1 85 48 sta ACLTIM 0087AE 1 28 plp 0087AF 1 .endif 0087AF 1 60 rts 0087B0 1 .if CompileDrive >= DRIVE_1571_05 0087B0 1 L87A4: 0087B0 1 plp 0087B0 1 sta CDRIVE 0087B0 1 jmp LF97E 0087B0 1 .if CompileDrive >= DRIVE_1571CR_01 0087B0 1 .else 0087B0 1 FillNOP 6 0087B0 1 .endif 0087B0 1 .endif 0087B0 1 L87B0: 0087B0 1 08 php 0087B1 1 58 cli ; allow processing of job loop 0087B2 1 L87B2: 0087B2 1 A5 20 lda DRVST 0087B4 1 C9 20 cmp #$20 0087B6 1 D0 FA bne L87B2 0087B8 1 28 plp 0087B9 1 60 rts 0087BA 1 L87BA: 0087BA 1 08 php 0087BB 1 58 cli ; allow processing of job loop 0087BC 1 A5 67 lda NMIFLG 0087BE 1 0A asl a 0087BF 1 C5 64 cmp MINSTP 0087C1 1 F0 1A beq L87DD 0087C3 1 L87C3: 0087C3 1 A5 67 lda NMIFLG 0087C5 1 0A asl a 0087C6 1 C5 64 cmp MINSTP 0087C8 1 F0 0E beq L87D8 0087CA 1 B0 06 bcs L87D2 0087CC 1 20 E7 87 jsr L87E7 0087CF 1 4C C3 87 jmp L87C3 0087D2 1 L87D2: 0087D2 1 20 DF 87 jsr L87DF 0087D5 1 4C C3 87 jmp L87C3 0087D8 1 L87D8: 0087D8 1 .if CompileDrive >= DRIVE_1571 .AND CompileDrive < DRIVE_1571CR 0087D8 1 ldy #$10 0087D8 1 .else 0087D8 1 A0 12 ldy #$12 0087DA 1 .endif 0087DA 1 20 29 88 jsr L8829 0087DD 1 L87DD: 0087DD 1 28 plp 0087DE 1 60 rts 0087DF 1 L87DF: 0087DF 1 A5 64 lda MINSTP 0087E1 1 18 clc 0087E2 1 69 01 adc #$01 0087E4 1 4C 14 88 jmp L8814 0087E7 1 L87E7: 0087E7 1 A0 63 ldy #$63 0087E9 1 L87E9: 0087E9 1 AD 0F 18 lda VBC_PAUNBUF1 0087EC 1 6A ror a 0087ED 1 08 php 0087EE 1 AD 0F 18 lda VBC_PAUNBUF1 0087F1 1 6A ror a 0087F2 1 6A ror a 0087F3 1 28 plp 0087F4 1 29 80 and #$80 0087F6 1 90 04 bcc L87FC 0087F8 1 10 15 bpl L880F 0087FA 1 30 02 bmi L87FE 0087FC 1 L87FC: 0087FC 1 30 11 bmi L880F 0087FE 1 L87FE: 0087FE 1 88 dey 0087FF 1 D0 E8 bne L87E9 008801 1 B0 0C bcs L880F 008803 1 AD 00 1C lda VDC_PB2 008806 1 29 03 and #VDC_PB2_STEPPER 008808 1 D0 05 bne L880F 00880A 1 A9 00 lda #$00 00880C 1 85 64 sta MINSTP 00880E 1 60 rts 00880F 1 L880F: 00880F 1 A5 64 lda MINSTP 008811 1 38 sec 008812 1 E9 01 sbc #$01 008814 1 L8814: 008814 1 85 64 sta MINSTP 008816 1 29 03 and #$03 008818 1 85 6F sta T0 00881A 1 08 php 00881B 1 78 sei ; disallow interrupts --> blocking job loop 00881C 1 AD 00 1C lda VDC_PB2 00881F 1 29 FC and # ~ VDC_PB2_STEPPER 008821 1 05 6F ora T0 008823 1 8D 00 1C sta VDC_PB2 008826 1 28 plp 008827 1 .if CompileDrive >= DRIVE_1571CR 008827 1 ldy #$05 008827 1 .elseif CompileDrive >= DRIVE_1571 008827 1 ldy #$06 008827 1 .else 008827 1 A0 08 ldy #$08 008829 1 .endif 008829 1 L8829: 008829 1 20 30 88 jsr L8830 00882C 1 88 dey 00882D 1 D0 FA bne L8829 00882F 1 60 rts 008830 1 L8830: 008830 1 A2 02 ldx #$02 008832 1 .if CompileDrive >= DRIVE_1571_05 008832 1 lda #$6F 008832 1 .else 008832 1 A9 00 lda #$00 008834 1 .endif 008834 1 L8834: 008834 1 69 01 adc #$01 008836 1 D0 FC bne L8834 008838 1 CA dex 008839 1 D0 F9 bne L8834 00883B 1 60 rts 00883C 1 00883C 1 .if CompileDrive >= DRIVE_1571CR 00883C 1 .else 00883C 1 00883C 1 L883C: 00883C 1 EA nop 00883D 1 AD 00 20 lda WD177x_STATUS 008840 1 4A lsr a 008841 1 4A lsr a 008842 1 4A lsr a 008843 1 29 03 and #$03 008845 1 AA tax 008846 1 BD 82 8A lda L8A82,x 008849 1 8D B0 01 sta L01B0 00884C 1 AA tax 00884D 1 60 rts 00884E 1 L884E: 00884E 1 48 pha 00884F 1 20 7C 87 jsr L877C 008852 1 68 pla 008853 1 8D 00 20 sta WD177x_COMMAND 008856 1 A9 01 lda #$01 008858 1 EA nop 008859 1 L8859: 008859 1 2C 00 20 bit WD177x_STATUS 00885C 1 F0 FB beq L8859 00885E 1 4C 7E A4 jmp LA47E 008861 1 L8861: 008861 1 20 88 87 jsr L8788 008864 1 A9 01 lda #$01 008866 1 L8866: 008866 1 2C 00 20 bit WD177x_STATUS 008869 1 D0 FB bne L8866 00886B 1 60 rts 00886C 1 .endif 00886C 1 00886C 1 L886C: 00886C 1 A5 60 lda ACLSTP 00886E 1 38 sec 00886F 1 E9 01 sbc #$01 008871 1 85 46 sta CTRACK 008873 1 AD 04 02 lda CMDBUF + 4 008876 1 18 clc 008877 1 65 3C adc BYTE 008879 1 C5 61 cmp RSTEPS 00887B 1 F0 07 beq L8884 00887D 1 90 05 bcc L8884 00887F 1 E5 61 sbc RSTEPS 008881 1 18 clc 008882 1 65 46 adc CTRACK 008884 1 L8884: 008884 1 8D 04 02 sta CMDBUF + 4 008887 1 60 rts 008888 1 L8888: 008888 1 A0 00 ldy #$00 00888A 1 A2 00 ldx #$00 00888C 1 AD 03 02 lda CMDBUF + 3 00888F 1 29 3F and #$3F 008891 1 8D 03 02 sta CMDBUF + 3 008894 1 85 60 sta ACLSTP 008896 1 48 pha 008897 1 AD 07 02 lda CMDBUF + 7 00889A 1 48 pha 00889B 1 EE 04 02 inc CMDBUF + 4 00889E 1 L889E: 00889E 1 AD 03 02 lda CMDBUF + 3 0088A1 1 99 0B 02 sta CMDBUF + 11,y 0088A4 1 EE 03 02 inc CMDBUF + 3 0088A7 1 E8 inx 0088A8 1 98 tya 0088A9 1 18 clc 0088AA 1 6D 04 02 adc CMDBUF + 4 0088AD 1 A8 tay 0088AE 1 C0 20 cpy #$20 0088B0 1 B0 0C bcs L88BE 0088B2 1 CC 07 02 cpy CMDBUF + 7 0088B5 1 90 1A bcc L88D1 0088B7 1 D0 12 bne L88CB 0088B9 1 EC 07 02 cpx CMDBUF + 7 0088BC 1 F0 0D beq L88CB 0088BE 1 L88BE: 0088BE 1 CE 04 02 dec CMDBUF + 4 0088C1 1 68 pla 0088C2 1 8D 07 02 sta CMDBUF + 7 0088C5 1 68 pla 0088C6 1 8D 03 02 sta CMDBUF + 3 0088C9 1 38 sec 0088CA 1 60 rts 0088CB 1 L88CB: 0088CB 1 98 tya 0088CC 1 38 sec 0088CD 1 ED 07 02 sbc CMDBUF + 7 0088D0 1 A8 tay 0088D1 1 L88D1: 0088D1 1 EC 07 02 cpx CMDBUF + 7 0088D4 1 D0 C8 bne L889E 0088D6 1 86 97 stx MYPA 0088D8 1 CA dex 0088D9 1 8A txa 0088DA 1 18 clc 0088DB 1 65 60 adc ACLSTP 0088DD 1 85 61 sta RSTEPS 0088DF 1 C5 60 cmp ACLSTP 0088E1 1 90 DB bcc L88BE 0088E3 1 68 pla 0088E4 1 8D 07 02 sta CMDBUF + 7 0088E7 1 68 pla 0088E8 1 8D 03 02 sta CMDBUF + 3 0088EB 1 CE 04 02 dec CMDBUF + 4 0088EE 1 18 clc 0088EF 1 60 rts 0088F0 1 L88F0: 0088F0 1 AD B0 01 lda L01B0 0088F3 1 48 pha 0088F4 1 A0 00 ldy #$00 0088F6 1 .if CompileDrive >= DRIVE_1571CR 0088F6 1 L88F8: 0088F6 1 lda CMDBUF + 11,y 0088F6 1 sta SECTR 0088F6 1 tya 0088F6 1 pha 0088F6 1 jsr LAD2E 0088F6 1 pla 0088F6 1 tay 0088F6 1 .else 0088F6 1 84 24 sty STAB 0088F8 1 L88F8: 0088F8 1 A4 24 ldy STAB 0088FA 1 B9 0B 02 lda CMDBUF + 11,y 0088FD 1 8D 02 20 sta WD177x_SECTOR 008900 1 20 18 8F jsr L8F18 008903 1 .endif 008903 1 AE B0 01 ldx L01B0 008906 1 E0 02 cpx #$02 008908 1 B0 0B bcs L8915 00890A 1 .if CompileDrive >= DRIVE_1571CR 00890A 1 iny 00890A 1 .else 00890A 1 E6 24 inc STAB 00890C 1 A4 24 ldy STAB 00890E 1 .endif 00890E 1 CC 07 02 cpy CMDBUF + 7 008911 1 D0 E5 bne L88F8 008913 1 18 clc 008914 1 24 .byte ASM_BIT2 008915 1 L8915: 008915 1 38 sec 008916 1 68 pla 008917 1 8D B0 01 sta L01B0 00891A 1 L891A: 00891A 1 60 rts 00891B 1 L891B: 00891B 1 AD 74 02 lda CMDSIZ 00891E 1 C9 07 cmp #$07 008920 1 90 F8 bcc L891A 008922 1 AD 06 02 lda CMDBUF + 6 008925 1 85 67 sta NMIFLG 008927 1 4C BA 87 jmp L87BA 00892A 1 L892A: 00892A 1 AD B0 01 lda L01B0 00892D 1 48 pha 00892E 1 .if CompileDrive >= DRIVE_1571CR 00892E 1 lda REVCNT 00892E 1 asl a 00892E 1 sta TMP 00892E 1 L88FF: 00892E 1 jsr L89E8 00892E 1 .else 00892E 1 20 27 8A jsr L8A27 008931 1 .endif 008931 1 AE B0 01 ldx L01B0 008934 1 E0 02 cpx #$02 008936 1 .if CompileDrive >= DRIVE_1571CR 008936 1 bcc L8923 008936 1 dec TMP 008936 1 bne L88FF 008936 1 jsr L89EF 008936 1 lda REVCNT 008936 1 asl a 008936 1 sta TMP 008936 1 L8915_CR: 008936 1 jsr L89E8 008936 1 .else 008936 1 90 0D bcc L8945 008938 1 20 EF 89 jsr L89EF 00893B 1 20 27 8A jsr L8A27 00893E 1 .endif 00893E 1 AE B0 01 ldx L01B0 008941 1 E0 02 cpx #$02 008943 1 .if CompileDrive >= DRIVE_1571CR 008943 1 bcc L8923 008943 1 dec TMP 008943 1 bne L8915_CR 008943 1 .else 008943 1 B0 0A bcs L894F 008945 1 .endif 008945 1 L8923: 008945 1 L8945: 008945 1 A5 67 lda NMIFLG 008947 1 0A asl a 008948 1 C5 64 cmp MINSTP 00894A 1 F0 03 beq L894F 00894C 1 20 BA 87 jsr L87BA 00894F 1 L894F: 00894F 1 68 pla 008950 1 8D B0 01 sta L01B0 008953 1 60 rts 008954 1 L8954: 008954 1 08 php 008955 1 78 sei ; disallow interrupts --> blocking job loop 008956 1 A5 3B lda HINIB 008958 1 29 10 and #$10 00895A 1 C9 10 cmp #$10 00895C 1 20 F3 93 jsr L93F3 00895F 1 28 plp 008960 1 60 rts 008961 1 L8961: 008961 1 A4 97 ldy MYPA 008963 1 88 dey 008964 1 A9 FF lda #$FF 008966 1 L8966: 008966 1 D9 0B 02 cmp CMDBUF + 11,y 008969 1 90 03 bcc L896E 00896B 1 B9 0B 02 lda CMDBUF + 11,y 00896E 1 L896E: 00896E 1 88 dey 00896F 1 10 F5 bpl L8966 008971 1 85 60 sta ACLSTP 008973 1 A4 97 ldy MYPA 008975 1 88 dey 008976 1 A9 00 lda #$00 008978 1 L8978: 008978 1 D9 0B 02 cmp CMDBUF + 11,y 00897B 1 B0 03 bcs L8980 00897D 1 B9 0B 02 lda CMDBUF + 11,y 008980 1 L8980: 008980 1 88 dey 008981 1 10 F5 bpl L8978 008983 1 85 61 sta RSTEPS 008985 1 60 rts 008986 1 L8986: 008986 1 A6 97 ldx MYPA 008988 1 A0 00 ldy #$00 00898A 1 L898A: 00898A 1 B9 0B 02 lda CMDBUF + 11,y 00898D 1 C5 60 cmp ACLSTP 00898F 1 F0 05 beq L8996 008991 1 C8 iny 008992 1 C4 97 cpy MYPA 008994 1 D0 F4 bne L898A 008996 1 L8996: 008996 1 84 5F sty AF 008998 1 A5 60 lda ACLSTP 00899A 1 18 clc 00899B 1 69 01 adc #$01 00899D 1 85 46 sta CTRACK 00899F 1 A2 FF ldx #$FF 0089A1 1 L89A1: 0089A1 1 B9 0B 02 lda CMDBUF + 11,y 0089A4 1 C5 46 cmp CTRACK 0089A6 1 F0 0A beq L89B2 0089A8 1 E8 inx 0089A9 1 C8 iny 0089AA 1 C4 97 cpy MYPA 0089AC 1 D0 F3 bne L89A1 0089AE 1 A0 00 ldy #$00 0089B0 1 F0 EF beq L89A1 0089B2 1 L89B2: 0089B2 1 60 rts 0089B3 1 0089B3 1 L89B3: 0089B3 1 A5 6F lda T0 0089B5 1 48 pha 0089B6 1 08 php 0089B7 1 78 sei ; disallow interrupts --> blocking job loop 0089B8 1 .if CompileDrive >= DRIVE_1571CR 0089B8 1 .else 0089B8 1 AD 01 20 lda WD177x_TRACK 0089BB 1 8D 03 20 sta WD177x_DATA 0089BE 1 A9 18 lda #$18 0089C0 1 20 4E 88 jsr L884E 0089C3 1 20 61 88 jsr L8861 0089C6 1 .endif 0089C6 1 A2 00 ldx #$00 0089C8 1 A0 80 ldy #$80 0089CA 1 AD 00 20 lda WD177x_STATUS 0089CD 1 .if CompileDrive >= DRIVE_1571CR 0089CD 1 and #$40 0089CD 1 .else 0089CD 1 29 02 and #$02 0089CF 1 .endif 0089CF 1 85 6F sta T0 0089D1 1 L89D1: 0089D1 1 AD 00 20 lda WD177x_STATUS 0089D4 1 .if CompileDrive >= DRIVE_1571CR 0089D4 1 and #$40 0089D4 1 .else 0089D4 1 29 02 and #$02 0089D6 1 .endif 0089D6 1 C5 6F cmp T0 0089D8 1 F0 04 beq L89DE 0089DA 1 28 plp 0089DB 1 4C E7 89 jmp L89E7 0089DE 1 L89DE: 0089DE 1 CA dex 0089DF 1 D0 F0 bne L89D1 0089E1 1 88 dey 0089E2 1 D0 ED bne L89D1 0089E4 1 28 plp 0089E5 1 38 sec 0089E6 1 24 .byte ASM_BIT2 0089E7 1 L89E7: 0089E7 1 18 clc 0089E8 1 68 pla 0089E9 1 85 6F sta T0 0089EB 1 60 rts 0089EC 1 0089EC 1 L89EC: 0089EC 1 4C A0 EA jmp RESET 0089EF 1 0089EF 1 L89EF: 0089EF 1 A9 B4 lda #$B4 0089F1 1 85 64 sta MINSTP 0089F3 1 A9 00 lda #$00 0089F5 1 .if CompileDrive >= DRIVE_1571CR 0089F5 1 .else 0089F5 1 8D 01 20 sta WD177x_TRACK 0089F8 1 .endif 0089F8 1 85 67 sta NMIFLG 0089FA 1 4C BA 87 jmp L87BA 0089FD 1 L89FD: 0089FD 1 AD 00 1C lda VDC_PB2 008A00 1 29 10 and #VDC_PB2_WRITEPROTECT 008A02 1 60 rts 008A03 1 L8A03: 008A03 1 84 67 sty NMIFLG 008A05 1 86 64 stx MINSTP 008A07 1 60 rts 008A08 1 L8A08: 008A08 1 60 rts 008A09 1 L8A09: 008A09 1 20 EF 89 jsr L89EF 008A0C 1 008A0C 1 .if CompileDrive >= DRIVE_1571CR 008A0C 1 jsr L89E8 008A0C 1 lda L8A7E,x 008A0C 1 .else 008A0C 1 20 B3 89 jsr L89B3 008A0F 1 B0 0F bcs L8A20 008A11 1 20 27 8A jsr L8A27 008A14 1 BD 7E 8A lda L8A7E,x 008A17 1 .endif 008A17 1 008A17 1 85 97 sta MYPA 008A19 1 85 61 sta RSTEPS 008A1B 1 A9 01 lda #$01 008A1D 1 85 60 sta ACLSTP 008A1F 1 60 rts 008A20 1 008A20 1 .if CompileDrive >= DRIVE_1571CR 008A20 1 L89E8: 008A20 1 jsr LABEC 008A20 1 .else 008A20 1 L8A20: 008A20 1 A9 0D lda #$0D 008A22 1 8D B0 01 sta L01B0 008A25 1 D0 3E bne L8A65 008A27 1 L8A27: 008A27 1 A9 00 lda #$00 008A29 1 8D 71 02 sta RLINDX 008A2C 1 85 44 sta WORK 008A2E 1 A9 C8 lda #$C8 008A30 1 20 4E 88 jsr L884E 008A33 1 A2 00 ldx #$00 008A35 1 A0 06 ldy #$06 008A37 1 L8A37: 008A37 1 AD 00 20 lda WD177x_STATUS 008A3A 1 29 03 and #$03 008A3C 1 4A lsr a 008A3D 1 90 0B bcc L8A4A 008A3F 1 F0 F6 beq L8A37 008A41 1 AD 03 20 lda WD177x_DATA 008A44 1 95 24 sta STAB,x 008A46 1 E8 inx 008A47 1 88 dey 008A48 1 D0 ED bne L8A37 008A4A 1 L8A4A: 008A4A 1 20 61 88 jsr L8861 008A4D 1 20 3C 88 jsr L883C 008A50 1 .endif 008A50 1 008A50 1 A5 24 lda STAB 008A52 1 0A asl a 008A53 1 85 64 sta MINSTP 008A55 1 A5 27 lda STAB + 3 008A57 1 L8A57: 008A57 1 29 03 and #$03 008A59 1 AA tax 008A5A 1 BD 72 8A lda L8A72,x 008A5D 1 8D 71 02 sta RLINDX 008A60 1 BD 76 8A lda L8A76,x 008A63 1 85 44 sta WORK 008A65 1 L8A65: 008A65 1 A5 5E lda AS 008A67 1 29 80 and #$80 008A69 1 0D B0 01 ora L01B0 008A6C 1 1D 7A 8A ora L8A7A,x 008A6F 1 85 5E sta AS 008A71 1 .if CompileDrive >= DRIVE_1571CR 008A71 1 stx L01B5 008A71 1 .endif 008A71 1 60 rts 008A72 1 L8A72: 008A72 1 7F FF FF FF .byte $7F,$FF,$FF,$FF 008A76 1 L8A76: 008A76 1 01 01 02 04 .byte $01,$01,$02,$04 008A7A 1 L8A7A: 008A7A 1 00 10 20 30 .byte $00,$10,$20,$30 008A7E 1 L8A7E: 008A7E 1 1A 10 09 05 .byte $1A,$10,$09,$05 008A82 1 008A82 1 .if CompileDrive >= DRIVE_1571CR 008A82 1 .else 008A82 1 L8A82: 008A82 1 01 09 02 03 .byte $01,$09,$02,$03 008A86 1 .endif 008A86 1 008A86 1 L8A86: 008A86 1 008A86 1 .if CompileDrive >= DRIVE_1571CR 008A86 1 bit WD177x_STATUS 008A86 1 bvc L8A86 008A86 1 L8A25_CR: 008A86 1 bit WD177x_STATUS 008A86 1 bvs L8A25_CR 008A86 1 bit L01B4 008A86 1 bmi L8A32 008A86 1 lda #$28 008A86 1 .byte ASM_BIT3 008A86 1 L8A32: 008A86 1 lda #$29 008A86 1 sta WD177x_COMMAND 008A86 1 lda WD177x_STATUS 008A86 1 ora #$02 008A86 1 sta WD177x_COMMAND 008A86 1 lda #$4E 008A86 1 sta WD177x_SECTOR 008A86 1 .else 008A86 1 A9 F8 lda #$F8 008A88 1 20 4E 88 jsr L884E 008A8B 1 .endif 008A8B 1 24 3B bit HINIB 008A8D 1 50 62 bvc L8AF1 008A8F 1 A2 50 ldx #$50 008A91 1 .if CompileDrive >= DRIVE_1571CR 008A91 1 .else 008A91 1 L8A91: 008A91 1 AD 00 20 lda WD177x_STATUS 008A94 1 29 03 and #$03 008A96 1 4A lsr a 008A97 1 90 60 bcc L8AF9 008A99 1 F0 F6 beq L8A91 008A9B 1 .endif 008A9B 1 A9 4E lda #$4E 008A9D 1 .if CompileDrive >= DRIVE_1571CR 008A9D 1 L8A91: 008A9D 1 bit WD177x_STATUS 008A9D 1 bpl L8A91 008A9D 1 sta WD177x_SECTOR 008A9D 1 .else 008A9D 1 8D 03 20 sta WD177x_DATA 008AA0 1 .endif 008AA0 1 CA dex 008AA1 1 D0 EE bne L8A91 008AA3 1 A2 0C ldx #$0C 008AA5 1 L8AA5: 008AA5 1 .if CompileDrive >= DRIVE_1571CR 008AA5 1 .else 008AA5 1 AD 00 20 lda WD177x_STATUS 008AA8 1 29 03 and #$03 008AAA 1 4A lsr a 008AAB 1 90 4C bcc L8AF9 008AAD 1 F0 F6 beq L8AA5 008AAF 1 .endif 008AAF 1 A9 00 lda #$00 008AB1 1 .if CompileDrive >= DRIVE_1571CR 008AB1 1 L8A5B: 008AB1 1 bit WD177x_STATUS 008AB1 1 bpl L8A5B 008AB1 1 sta WD177x_SECTOR 008AB1 1 .else 008AB1 1 8D 03 20 sta WD177x_DATA 008AB4 1 .endif 008AB4 1 CA dex 008AB5 1 .if CompileDrive >= DRIVE_1571CR 008AB5 1 bne L8A5B 008AB5 1 lda WD177x_TRACK 008AB5 1 and #$F8 008AB5 1 ora CSG5710_4010 + 3 008AB5 1 sta WD177x_TRACK 008AB5 1 008AB5 1 lda CSG5710_4010 + 1 008AB5 1 L8A74: 008AB5 1 bit WD177x_STATUS 008AB5 1 bpl L8A74 008AB5 1 sta WD177x_SECTOR 008AB5 1 lda WD177x_STATUS 008AB5 1 ora #$04 008AB5 1 sta WD177x_COMMAND 008AB5 1 ldx #$02 008AB5 1 008AB5 1 lda CSG5710_4010 + 1 008AB5 1 L8A89: 008AB5 1 bit WD177x_STATUS 008AB5 1 bpl L8A89 008AB5 1 sta WD177x_SECTOR 008AB5 1 .else 008AB5 1 D0 EE bne L8AA5 008AB7 1 A2 03 ldx #$03 008AB9 1 L8AB9: 008AB9 1 AD 00 20 lda WD177x_STATUS 008ABC 1 29 03 and #$03 008ABE 1 4A lsr a 008ABF 1 90 38 bcc L8AF9 008AC1 1 F0 F6 beq L8AB9 008AC3 1 A9 F6 lda #$F6 008AC5 1 8D 03 20 sta WD177x_DATA 008AC8 1 .endif 008AC8 1 CA dex 008AC9 1 008AC9 1 .if CompileDrive >= DRIVE_1571CR 008AC9 1 bne L8A89 008AC9 1 .else 008AC9 1 D0 EE bne L8AB9 008ACB 1 L8ACB: 008ACB 1 AD 00 20 lda WD177x_STATUS 008ACE 1 29 03 and #$03 008AD0 1 4A lsr a 008AD1 1 90 26 bcc L8AF9 008AD3 1 F0 F6 beq L8ACB 008AD5 1 .endif 008AD5 1 A9 FC lda #$FC 008AD7 1 .if CompileDrive >= DRIVE_1571CR 008AD7 1 L8A96: 008AD7 1 bit WD177x_STATUS 008AD7 1 bpl L8A96 008AD7 1 sta WD177x_SECTOR 008AD7 1 lda WD177x_STATUS 008AD7 1 and #$FB 008AD7 1 sta WD177x_COMMAND 008AD7 1 .else 008AD7 1 8D 03 20 sta WD177x_DATA 008ADA 1 .endif 008ADA 1 008ADA 1 A2 32 ldx #$32 008ADC 1 008ADC 1 .if CompileDrive >= DRIVE_1571CR 008ADC 1 .else 008ADC 1 EA nop 008ADD 1 L8ADD: 008ADD 1 AD 00 20 lda WD177x_STATUS 008AE0 1 29 03 and #$03 008AE2 1 4A lsr a 008AE3 1 90 14 bcc L8AF9 008AE5 1 F0 F6 beq L8ADD 008AE7 1 .endif 008AE7 1 A9 4E lda #$4E 008AE9 1 008AE9 1 .if CompileDrive >= DRIVE_1571CR 008AE9 1 L8AAA: 008AE9 1 bit WD177x_STATUS 008AE9 1 bpl L8AAA 008AE9 1 sta WD177x_SECTOR 008AE9 1 .else 008AE9 1 8D 03 20 sta WD177x_DATA 008AEC 1 .endif 008AEC 1 CA dex 008AED 1 .if CompileDrive >= DRIVE_1571CR 008AED 1 bne L8AAA 008AED 1 beq L8AC6 008AED 1 L8AF1: 008AED 1 ldx #$3C 008AED 1 .else 008AED 1 D0 EE bne L8ADD 008AEF 1 F0 14 beq L8B05 008AF1 1 L8AF1: 008AF1 1 A2 3C ldx #$3C 008AF3 1 L8AF3: 008AF3 1 AD 00 20 lda WD177x_STATUS 008AF6 1 29 03 and #$03 008AF8 1 4A lsr a 008AF9 1 L8AF9: 008AF9 1 90 28 bcc L8B23 008AFB 1 F0 F6 beq L8AF3 008AFD 1 .endif 008AFD 1 A9 4E lda #$4E 008AFF 1 .if CompileDrive >= DRIVE_1571CR 008AFF 1 L8ABB: 008AFF 1 bit WD177x_STATUS 008AFF 1 bpl L8ABB 008AFF 1 sta WD177x_SECTOR 008AFF 1 .else 008AFF 1 8D 03 20 sta WD177x_DATA 008B02 1 .endif 008B02 1 CA dex 008B03 1 008B03 1 .if CompileDrive >= DRIVE_1571CR 008B03 1 bne L8ABB 008B03 1 L8AC6: 008B03 1 ldy #$01 008B03 1 L8AC8: 008B03 1 .else 008B03 1 D0 EE bne L8AF3 008B05 1 L8B05: 008B05 1 A0 01 ldy #$01 008B07 1 L8B07: 008B07 1 A2 0C ldx #$0C 008B09 1 L8B09: 008B09 1 AD 00 20 lda WD177x_STATUS 008B0C 1 29 03 and #$03 008B0E 1 4A lsr a 008B0F 1 90 12 bcc L8B23 008B11 1 F0 F6 beq L8B09 008B13 1 .endif 008B13 1 A9 00 lda #$00 008B15 1 .if CompileDrive >= DRIVE_1571CR 008B15 1 ldx #$0C 008B15 1 L8ACC: 008B15 1 bit WD177x_STATUS 008B15 1 bpl L8ACC 008B15 1 sta WD177x_SECTOR 008B15 1 .else 008B15 1 8D 03 20 sta WD177x_DATA 008B18 1 .endif 008B18 1 CA dex 008B19 1 .if CompileDrive >= DRIVE_1571CR 008B19 1 bne L8ACC 008B19 1 lda CSG5710_4010 + 0 008B19 1 L8ADA: 008B19 1 bit WD177x_STATUS 008B19 1 bpl L8ADA 008B19 1 sta WD177x_SECTOR 008B19 1 lda WD177x_STATUS 008B19 1 ora #$14 008B19 1 sta WD177x_COMMAND 008B19 1 lda WD177x_TRACK 008B19 1 and #$F8 008B19 1 ora CSG5710_4010 + 2 008B19 1 sta WD177x_TRACK 008B19 1 ldx #$02 008B19 1 lda CSG5710_4010 + 0 008B19 1 L8AFA: 008B19 1 bit WD177x_STATUS 008B19 1 bpl L8AFA 008B19 1 sta WD177x_SECTOR 008B19 1 .else 008B19 1 D0 EE bne L8B09 008B1B 1 A2 03 ldx #$03 008B1D 1 L8B1D: 008B1D 1 AD 00 20 lda WD177x_STATUS 008B20 1 29 03 and #$03 008B22 1 4A lsr a 008B23 1 L8B23: 008B23 1 90 57 bcc L8B7C 008B25 1 F0 F6 beq L8B1D 008B27 1 A9 F5 lda #$F5 008B29 1 8D 03 20 sta WD177x_DATA 008B2C 1 .endif 008B2C 1 CA dex 008B2D 1 008B2D 1 .if CompileDrive >= DRIVE_1571CR 008B2D 1 bne L8AFA 008B2D 1 lda CSG5710_4010 + 5 008B2D 1 L8B08: 008B2D 1 bit WD177x_STATUS 008B2D 1 bpl L8B08 008B2D 1 sta WD177x_SECTOR 008B2D 1 lda WD177x_STATUS 008B2D 1 and #$FB 008B2D 1 sta WD177x_COMMAND 008B2D 1 .else 008B2D 1 D0 EE bne L8B1D 008B2F 1 L8B2F: 008B2F 1 AD 00 20 lda WD177x_STATUS 008B32 1 29 03 and #$03 008B34 1 4A lsr a 008B35 1 90 45 bcc L8B7C 008B37 1 F0 F6 beq L8B2F 008B39 1 A9 FE lda #$FE 008B3B 1 8D 03 20 sta WD177x_DATA 008B3E 1 L8B3E: 008B3E 1 AD 00 20 lda WD177x_STATUS 008B41 1 29 03 and #$03 008B43 1 4A lsr a 008B44 1 90 36 bcc L8B7C 008B46 1 F0 F6 beq L8B3E 008B48 1 .endif 008B48 1 008B48 1 AD B0 01 lda L01B0 008B4B 1 008B4B 1 .if CompileDrive >= DRIVE_1571CR 008B4B 1 L8B1B: 008B4B 1 bit WD177x_STATUS 008B4B 1 bpl L8B1B 008B4B 1 sta WD177x_SECTOR 008B4B 1 .else 008B4B 1 8D 03 20 sta WD177x_DATA 008B4E 1 L8B4E: 008B4E 1 AD 00 20 lda WD177x_STATUS 008B51 1 29 03 and #$03 008B53 1 4A lsr a 008B54 1 90 26 bcc L8B7C 008B56 1 F0 F6 beq L8B4E 008B58 1 .endif 008B58 1 008B58 1 A5 3B lda HINIB 008B5A 1 29 10 and #$10 008B5C 1 D0 03 bne L8B61 008B5E 1 A9 00 lda #$00 008B60 1 2C .byte ASM_BIT3 008B61 1 L8B61: 008B61 1 A9 01 lda #$01 008B63 1 .if CompileDrive >= DRIVE_1571CR 008B63 1 L8B2E: 008B63 1 bit WD177x_STATUS 008B63 1 bpl L8B2E 008B63 1 sta WD177x_SECTOR 008B63 1 .else 008B63 1 8D 03 20 sta WD177x_DATA 008B66 1 L8B66: 008B66 1 AD 00 20 lda WD177x_STATUS 008B69 1 29 03 and #$03 008B6B 1 4A lsr a 008B6C 1 90 0E bcc L8B7C 008B6E 1 F0 F6 beq L8B66 008B70 1 .endif 008B70 1 008B70 1 B9 0A 02 lda CMDBUF + 10,y 008B73 1 008B73 1 .if CompileDrive >= DRIVE_1571CR 008B73 1 L8B39: 008B73 1 bit WD177x_STATUS 008B73 1 bpl L8B39 008B73 1 sta WD177x_SECTOR 008B73 1 .else 008B73 1 8D 03 20 sta WD177x_DATA 008B76 1 L8B76: 008B76 1 AD 00 20 lda WD177x_STATUS 008B79 1 29 03 and #$03 008B7B 1 4A lsr a 008B7C 1 L8B7C: 008B7C 1 90 33 bcc L8BB1 008B7E 1 F0 F6 beq L8B76 008B80 1 .endif 008B80 1 008B80 1 AD 05 02 lda CMDBUF + 5 008B83 1 008B83 1 .if CompileDrive >= DRIVE_1571CR 008B83 1 L8B44: 008B83 1 bit WD177x_STATUS 008B83 1 bpl L8B44 008B83 1 sta WD177x_SECTOR 008B83 1 L8B4C: 008B83 1 bit WD177x_STATUS 008B83 1 bpl L8B4C 008B83 1 sta WD177x_SECTOR 008B83 1 lda WD177x_STATUS 008B83 1 and #$F7 008B83 1 sta WD177x_COMMAND 008B83 1 L8B5C: 008B83 1 bit WD177x_STATUS 008B83 1 bpl L8B5C 008B83 1 sta WD177x_SECTOR 008B83 1 .else 008B83 1 8D 03 20 sta WD177x_DATA 008B86 1 L8B86: 008B86 1 AD 00 20 lda WD177x_STATUS 008B89 1 29 03 and #$03 008B8B 1 4A lsr a 008B8C 1 90 23 bcc L8BB1 008B8E 1 F0 F6 beq L8B86 008B90 1 A9 F7 lda #$F7 008B92 1 8D 03 20 sta WD177x_DATA 008B95 1 A2 16 ldx #$16 008B97 1 L8B97: 008B97 1 AD 00 20 lda WD177x_STATUS 008B9A 1 29 03 and #$03 008B9C 1 4A lsr a 008B9D 1 90 12 bcc L8BB1 008B9F 1 F0 F6 beq L8B97 008BA1 1 .endif 008BA1 1 008BA1 1 A9 4E lda #$4E 008BA3 1 008BA3 1 .if CompileDrive >= DRIVE_1571CR 008BA3 1 L8B66_CR: 008BA3 1 bit WD177x_STATUS 008BA3 1 bpl L8B66_CR 008BA3 1 sta WD177x_SECTOR 008BA3 1 lda WD177x_STATUS 008BA3 1 ora #$08 008BA3 1 sta WD177x_COMMAND 008BA3 1 lda #$4E 008BA3 1 L8B78: 008BA3 1 bit WD177x_STATUS 008BA3 1 bpl L8B78 008BA3 1 sta WD177x_SECTOR 008BA3 1 lda WD177x_STATUS 008BA3 1 and #$EF 008BA3 1 sta WD177x_COMMAND 008BA3 1 ldx #$14 008BA3 1 lda #$4E 008BA3 1 L8B8C: 008BA3 1 bit WD177x_STATUS 008BA3 1 bpl L8B8C 008BA3 1 sta WD177x_SECTOR 008BA3 1 .else 008BA3 1 8D 03 20 sta WD177x_DATA 008BA6 1 .endif 008BA6 1 008BA6 1 CA dex 008BA7 1 .if CompileDrive >= DRIVE_1571CR 008BA7 1 bne L8B8C 008BA7 1 .else 008BA7 1 D0 EE bne L8B97 008BA9 1 .endif 008BA9 1 008BA9 1 A2 0C ldx #$0C 008BAB 1 008BAB 1 .if CompileDrive >= DRIVE_1571CR 008BAB 1 .else 008BAB 1 L8BAB: 008BAB 1 AD 00 20 lda WD177x_STATUS 008BAE 1 29 03 and #$03 008BB0 1 4A lsr a 008BB1 1 L8BB1: 008BB1 1 90 38 bcc L8BEB 008BB3 1 F0 F6 beq L8BAB 008BB5 1 .endif 008BB5 1 A9 00 lda #$00 008BB7 1 .if CompileDrive >= DRIVE_1571CR 008BB7 1 L8B9B: 008BB7 1 bit WD177x_STATUS 008BB7 1 bpl L8B9B 008BB7 1 sta WD177x_SECTOR 008BB7 1 .else 008BB7 1 8D 03 20 sta WD177x_DATA 008BBA 1 .endif 008BBA 1 CA dex 008BBB 1 008BBB 1 .if CompileDrive >= DRIVE_1571CR 008BBB 1 bne L8B9B 008BBB 1 lda CSG5710_4010 + 0 008BBB 1 L8BA9: 008BBB 1 bit WD177x_STATUS 008BBB 1 bpl L8BA9 008BBB 1 sta WD177x_SECTOR 008BBB 1 lda WD177x_STATUS 008BBB 1 ora #$14 008BBB 1 sta WD177x_COMMAND 008BBB 1 ldx #$02 008BBB 1 lda CSG5710_4010 + 0 008BBB 1 L8BBE: 008BBB 1 bit WD177x_STATUS 008BBB 1 bpl L8BBE 008BBB 1 sta WD177x_SECTOR 008BBB 1 .else 008BBB 1 D0 EE bne L8BAB 008BBD 1 A2 03 ldx #$03 008BBF 1 L8BBF: 008BBF 1 AD 00 20 lda WD177x_STATUS 008BC2 1 29 03 and #$03 008BC4 1 4A lsr a 008BC5 1 90 24 bcc L8BEB 008BC7 1 F0 F6 beq L8BBF 008BC9 1 A9 F5 lda #$F5 008BCB 1 8D 03 20 sta WD177x_DATA 008BCE 1 .endif 008BCE 1 CA dex 008BCF 1 008BCF 1 .if CompileDrive >= DRIVE_1571CR 008BCF 1 bne L8BBE 008BCF 1 lda CSG5710_4010 + 4 008BCF 1 L8BCC: 008BCF 1 bit WD177x_STATUS 008BCF 1 bpl L8BCC 008BCF 1 sta WD177x_SECTOR 008BCF 1 .else 008BCF 1 D0 EE bne L8BBF 008BD1 1 L8BD1: 008BD1 1 AD 00 20 lda WD177x_STATUS 008BD4 1 29 03 and #$03 008BD6 1 4A lsr a 008BD7 1 90 12 bcc L8BEB 008BD9 1 F0 F6 beq L8BD1 008BDB 1 A9 FB lda #$FB 008BDD 1 8D 03 20 sta WD177x_DATA 008BE0 1 .endif 008BE0 1 84 6F sty T0 008BE2 1 008BE2 1 .if CompileDrive >= DRIVE_1571CR 008BE2 1 lda WD177x_STATUS 008BE2 1 and #$FB 008BE2 1 sta WD177x_COMMAND 008BE2 1 .endif 008BE2 1 A4 44 ldy WORK 008BE4 1 008BE4 1 .if CompileDrive >= DRIVE_1571CR 008BE4 1 .else 008BE4 1 EA nop 008BE5 1 L8BE5: 008BE5 1 AD 00 20 lda WD177x_STATUS 008BE8 1 29 03 and #$03 008BEA 1 4A lsr a 008BEB 1 L8BEB: 008BEB 1 90 60 bcc L8C4D 008BED 1 F0 F6 beq L8BE5 008BEF 1 .endif 008BEF 1 008BEF 1 AD 0A 02 lda CMDBUF + 10 008BF2 1 008BF2 1 .if CompileDrive >= DRIVE_1571CR 008BF2 1 L8BE5: 008BF2 1 bit WD177x_STATUS 008BF2 1 bpl L8BE5 008BF2 1 sta WD177x_SECTOR 008BF2 1 .else 008BF2 1 8D 03 20 sta WD177x_DATA 008BF5 1 .endif 008BF5 1 EC 71 02 cpx RLINDX 008BF8 1 F0 04 beq L8BFE 008BFA 1 E8 inx 008BFB 1 4C E5 8B jmp L8BE5 008BFE 1 L8BFE: 008BFE 1 E8 inx 008BFF 1 88 dey 008C00 1 008C00 1 .if CompileDrive >= DRIVE_1571CR 008C00 1 bne L8BE5 008C00 1 L8BF8: 008C00 1 bit WD177x_STATUS 008C00 1 bpl L8BF8 008C00 1 sta WD177x_SECTOR 008C00 1 lda WD177x_STATUS 008C00 1 and #$F7 008C00 1 sta WD177x_COMMAND 008C00 1 L8C08: 008C00 1 bit WD177x_STATUS 008C00 1 bpl L8C08 008C00 1 sta WD177x_SECTOR 008C00 1 lda #$4E 008C00 1 L8C12: 008C00 1 bit WD177x_STATUS 008C00 1 bpl L8C12 008C00 1 sta WD177x_SECTOR 008C00 1 lda WD177x_STATUS 008C00 1 ora #$08 008C00 1 sta WD177x_COMMAND 008C00 1 lda #$4E 008C00 1 L8C24: 008C00 1 bit WD177x_STATUS 008C00 1 bpl L8C24 008C00 1 sta WD177x_SECTOR 008C00 1 lda WD177x_STATUS 008C00 1 and #$EF 008C00 1 sta WD177x_COMMAND 008C00 1 .else 008C00 1 D0 E3 bne L8BE5 008C02 1 L8C02: 008C02 1 AD 00 20 lda WD177x_STATUS 008C05 1 29 03 and #$03 008C07 1 4A lsr a 008C08 1 90 43 bcc L8C4D 008C0A 1 F0 F6 beq L8C02 008C0C 1 A9 F7 lda #$F7 008C0E 1 8D 03 20 sta WD177x_DATA 008C11 1 .endif 008C11 1 008C11 1 AC 05 02 ldy CMDBUF + 5 008C14 1 B9 4F 8C lda L8C4F,y 008C17 1 A4 6F ldy T0 008C19 1 AA tax 008C1A 1 .if CompileDrive >= DRIVE_1571CR 008C1A 1 dex 008C1A 1 .else 008C1A 1 L8C1A: 008C1A 1 AD 00 20 lda WD177x_STATUS 008C1D 1 29 03 and #$03 008C1F 1 4A lsr a 008C20 1 90 2B bcc L8C4D 008C22 1 F0 F6 beq L8C1A 008C24 1 .endif 008C24 1 A9 4E lda #$4E 008C26 1 .if CompileDrive >= DRIVE_1571CR 008C26 1 L8C1A: 008C26 1 bit WD177x_STATUS 008C26 1 bpl L8C1A 008C26 1 sta WD177x_SECTOR 008C26 1 .else 008C26 1 8D 03 20 sta WD177x_DATA 008C29 1 .endif 008C29 1 CA dex 008C2A 1 D0 EE bne L8C1A 008C2C 1 CC 07 02 cpy CMDBUF + 7 008C2F 1 .if CompileDrive >= DRIVE_1571CR 008C2F 1 008C2F 1 beq L8C54 008C2F 1 iny 008C2F 1 jmp L8AC8 008C2F 1 008C2F 1 L8C54: 008C2F 1 bit WD177x_STATUS 008C2F 1 bpl L8C54 008C2F 1 sta WD177x_SECTOR 008C2F 1 bit WD177x_STATUS 008C2F 1 bvc L8C67 008C2F 1 dey 008C2F 1 bne L8C54 008C2F 1 dex 008C2F 1 bne L8C54 008C2F 1 L8C67: 008C2F 1 lda WD177x_STATUS 008C2F 1 and #$DD 008C2F 1 sta WD177x_COMMAND 008C2F 1 ldy #$02 008C2F 1 jmp L8829 008C2F 1 008C2F 1 .else 008C2F 1 008C2F 1 F0 04 beq L8C35 008C31 1 C8 iny 008C32 1 4C 07 8B jmp L8B07 008C35 1 L8C35: 008C35 1 AD 00 20 lda WD177x_STATUS 008C38 1 29 03 and #$03 008C3A 1 4A lsr a 008C3B 1 90 0B bcc L8C48 008C3D 1 F0 F6 beq L8C35 008C3F 1 18 clc 008C40 1 A9 4E lda #$4E 008C42 1 8D 03 20 sta WD177x_DATA 008C45 1 4C 35 8C jmp L8C35 008C48 1 L8C48: 008C48 1 20 61 88 jsr L8861 008C4B 1 18 clc 008C4C 1 24 .byte ASM_BIT2 008C4D 1 L8C4D: 008C4D 1 38 sec 008C4E 1 60 rts 008C4F 1 .endif 008C4F 1 008C4F 1 L8C4F: 008C4F 1 07 0C 17 2C .byte $07,$0C,$17,$2C 008C53 1 L8C53: 008C53 1 1A 10 09 05 .byte $1A,$10,$09,$05 008C57 1 008C57 1 L8C57: 008C57 1 A5 3B lda HINIB 008C59 1 29 08 and #$08 008C5B 1 F0 07 beq L8C64 008C5D 1 A6 46 ldx CTRACK 008C5F 1 8E B0 01 stx L01B0 008C62 1 38 sec 008C63 1 60 rts 008C64 1 L8C64: 008C64 1 20 07 D3 jsr LD307 008C67 1 AD 74 02 lda CMDSIZ 008C6A 1 38 sec 008C6B 1 E9 04 sbc #$04 008C6D 1 A8 tay 008C6E 1 F0 20 beq L8C90 008C70 1 88 dey 008C71 1 F0 22 beq L8C95 008C73 1 A9 00 lda #$00 008C75 1 8D B0 01 sta L01B0 008C78 1 AD 05 02 lda CMDBUF + 5 008C7B 1 20 57 8A jsr L8A57 008C7E 1 88 dey 008C7F 1 F0 21 beq L8CA2 008C81 1 88 dey 008C82 1 F0 23 beq L8CA7 008C84 1 88 dey 008C85 1 F0 26 beq L8CAD 008C87 1 88 dey 008C88 1 F0 2B beq L8CB5 008C8A 1 88 dey 008C8B 1 F0 2D beq L8CBA 008C8D 1 4C BF 8C jmp L8CBF 008C90 1 L8C90: 008C90 1 A9 00 lda #$00 008C92 1 8D 04 02 sta CMDBUF + 4 008C95 1 L8C95: 008C95 1 A9 00 lda #$00 008C97 1 8D B0 01 sta L01B0 008C9A 1 A9 01 lda #$01 008C9C 1 8D 05 02 sta CMDBUF + 5 008C9F 1 20 57 8A jsr L8A57 008CA2 1 L8CA2: 008CA2 1 A9 27 lda #$27 008CA4 1 8D 06 02 sta CMDBUF + 6 008CA7 1 L8CA7: 008CA7 1 BD 53 8C lda L8C53,x 008CAA 1 8D 07 02 sta CMDBUF + 7 008CAD 1 L8CAD: 008CAD 1 A9 00 lda #$00 008CAF 1 8D 08 02 sta CMDBUF + 8 008CB2 1 .if CompileDrive >= DRIVE_1571CR 008CB2 1 .else 008CB2 1 8D 01 20 sta WD177x_TRACK 008CB5 1 .endif 008CB5 1 L8CB5: 008CB5 1 A9 00 lda #$00 008CB7 1 8D 09 02 sta CMDBUF + 9 008CBA 1 L8CBA: 008CBA 1 A9 E5 lda #$E5 008CBC 1 8D 0A 02 sta CMDBUF + 10 008CBF 1 L8CBF: 008CBF 1 20 DE 8C jsr L8CDE 008CC2 1 AD B0 01 lda L01B0 008CC5 1 E0 02 cpx #$02 008CC7 1 B0 12 bcs L8CDB 008CC9 1 A5 3B lda HINIB 008CCB 1 29 20 and #$20 008CCD 1 F0 0C beq L8CDB 008CCF 1 A5 3B lda HINIB 008CD1 1 09 10 ora #$10 008CD3 1 85 3B sta HINIB 008CD5 1 20 54 89 jsr L8954 008CD8 1 20 DE 8C jsr L8CDE 008CDB 1 L8CDB: 008CDB 1 4C EF 89 jmp L89EF 008CDE 1 L8CDE: 008CDE 1 20 B3 89 jsr L89B3 008CE1 1 B0 7C bcs L8D5F 008CE3 1 .if CompileDrive >= DRIVE_1571CR 008CE3 1 .else 008CE3 1 A9 01 lda #$01 008CE5 1 8D 0D 18 sta VBC_IFR1 008CE8 1 .endif 008CE8 1 20 EF 89 jsr L89EF 008CEB 1 AD 08 02 lda CMDBUF + 8 008CEE 1 8D B0 01 sta L01B0 008CF1 1 .if CompileDrive >= DRIVE_1571CR 008CF1 1 .else 008CF1 1 8D 01 20 sta WD177x_TRACK 008CF4 1 .endif 008CF4 1 2C 03 02 bit CMDBUF + 3 008CF7 1 70 05 bvs L8CFE 008CF9 1 20 88 88 jsr L8888 008CFC 1 B0 61 bcs L8D5F 008CFE 1 L8CFE: 008CFE 1 AD 09 02 lda CMDBUF + 9 008D01 1 29 7F and #$7F 008D03 1 F0 08 beq L8D0D 008D05 1 18 clc 008D06 1 65 67 adc NMIFLG 008D08 1 85 67 sta NMIFLG 008D0A 1 20 BA 87 jsr L87BA 008D0D 1 L8D0D: 008D0D 1 78 sei ; disallow interrupts --> blocking job loop 008D0E 1 .if CompileDrive >= DRIVE_1571CR 008D0E 1 jsr L8A86 008D0E 1 jsr L88F0 008D0E 1 bcs L8D5F 008D0E 1 .else 008D0E 1 AD 0D 18 lda VBC_IFR1 008D11 1 4A lsr a 008D12 1 B0 4B bcs L8D5F 008D14 1 20 86 8A jsr L8A86 008D17 1 B0 46 bcs L8D5F 008D19 1 AD 0D 18 lda VBC_IFR1 008D1C 1 4A lsr a 008D1D 1 B0 40 bcs L8D5F 008D1F 1 20 F0 88 jsr L88F0 008D22 1 B0 3B bcs L8D5F 008D24 1 AD 0D 18 lda VBC_IFR1 008D27 1 4A lsr a 008D28 1 B0 35 bcs L8D5F 008D2A 1 .endif 008D2A 1 AD B0 01 lda L01B0 008D2D 1 CD 06 02 cmp CMDBUF + 6 008D30 1 F0 0E beq L8D40 008D32 1 E6 67 inc NMIFLG 008D34 1 .if CompileDrive >= DRIVE_1571CR 008D34 1 .else 008D34 1 EE 01 20 inc WD177x_TRACK 008D37 1 .endif 008D37 1 EE B0 01 inc L01B0 008D3A 1 20 BA 87 jsr L87BA 008D3D 1 4C 0D 8D jmp L8D0D 008D40 1 L8D40: 008D40 1 24 3B bit HINIB 008D42 1 10 18 bpl L8D5C 008D44 1 38 sec 008D45 1 AD 06 02 lda CMDBUF + 6 008D48 1 ED 08 02 sbc CMDBUF + 8 008D4B 1 C9 27 cmp #$27 008D4D 1 B0 0D bcs L8D5C 008D4F 1 E6 67 inc NMIFLG 008D51 1 20 BA 87 jsr L87BA 008D54 1 A2 1C ldx #$1C 008D56 1 .if CompileDrive >= DRIVE_1571_05 008D56 1 jsr LC07F 008D56 1 FillNOP 3 008D56 1 .else 008D56 1 20 63 9D jsr L9D63 008D59 1 20 00 FE jsr LFE00 008D5C 1 .endif 008D5C 1 L8D5C: 008D5C 1 A2 00 ldx #$00 008D5E 1 2C .byte ASM_BIT3 008D5F 1 L8D5F: 008D5F 1 A2 06 ldx #$06 008D61 1 8E B0 01 stx L01B0 008D64 1 4C E9 85 jmp L85E9 008D67 1 L8D67: 008D67 1 A5 3B lda HINIB 008D69 1 29 20 and #$20 008D6B 1 D0 59 bne L8DC6 008D6D 1 .if CompileDrive >= DRIVE_1571CR 008D6D 1 lda REVCNT 008D6D 1 asl a 008D6D 1 sta TMP 008D6D 1 L8D75: 008D6D 1 jsr L8EC6 008D6D 1 jsr LAC9C 008D6D 1 bcs L8DD1 008D6D 1 jsr LAC38 008D6D 1 bcs L8DC8 008D6D 1 .else 008D6D 1 A9 03 lda #$03 008D6F 1 85 31 sta BUFPNT + 1 008D71 1 .endif 008D71 1 A0 00 ldy #$00 008D73 1 .if CompileDrive >= DRIVE_1571CR 008D73 1 .else 008D73 1 84 30 sty BUFPNT 008D75 1 .endif 008D75 1 A6 44 ldx WORK 008D77 1 .if CompileDrive >= DRIVE_1571CR 008D77 1 L8D89: 008D77 1 bit WD177x_TRACK 008D77 1 bpl L8D89 008D77 1 lda WD177x_SECTOR 008D77 1 .else 008D77 1 AD 03 02 lda CMDBUF + 3 008D7A 1 8D 01 20 sta WD177x_TRACK 008D7D 1 AD 04 02 lda CMDBUF + 4 008D80 1 8D 02 20 sta WD177x_SECTOR 008D83 1 A9 88 lda #$88 008D85 1 20 4E 88 jsr L884E 008D88 1 EA nop 008D89 1 L8D89: 008D89 1 AD 00 20 lda WD177x_STATUS 008D8C 1 29 03 and #$03 008D8E 1 4A lsr a 008D8F 1 90 1A bcc L8DAB 008D91 1 29 01 and #$01 008D93 1 F0 F4 beq L8D89 008D95 1 AD 03 20 lda WD177x_DATA 008D98 1 .endif 008D98 1 91 30 sta (BUFPNT),y 008D9A 1 CC 71 02 cpy RLINDX 008D9D 1 F0 03 beq L8DA2 008D9F 1 C8 iny 008DA0 1 D0 E7 bne L8D89 008DA2 1 L8DA2: 008DA2 1 C8 iny 008DA3 1 CA dex 008DA4 1 F0 05 beq L8DAB 008DA6 1 E6 31 inc BUFPNT + 1 008DA8 1 4C 89 8D jmp L8D89 008DAB 1 008DAB 1 .if CompileDrive >= DRIVE_1571CR 008DAB 1 L8DAB: 008DAB 1 bit WD177x_TRACK 008DAB 1 bpl L8DAB 008DAB 1 lda WD177x_SECTOR 008DAB 1 L8DA9: 008DAB 1 bit WD177x_TRACK 008DAB 1 bpl L8DA9 008DAB 1 lda WD177x_SECTOR 008DAB 1 lda #$18 008DAB 1 sta WD177x_TRACK 008DAB 1 L8DB6: 008DAB 1 bit WD177x_TRACK 008DAB 1 bpl L8DB6 008DAB 1 lda WD177x_SECTOR 008DAB 1 lda WD177x_TRACK 008DAB 1 and #$20 008DAB 1 beq L8DCF 008DAB 1 ldx #$05 008DAB 1 .byte ASM_BIT3 008DAB 1 L8DC8: 008DAB 1 ldx #$03 008DAB 1 dec TMP 008DAB 1 bne L8D75 008DAB 1 .byte ASM_BIT3 008DAB 1 L8DCF: 008DAB 1 ldx #$00 008DAB 1 L8DD1: 008DAB 1 jsr L85E9 008DAB 1 008DAB 1 .else 008DAB 1 008DAB 1 L8DAB: 008DAB 1 20 61 88 jsr L8861 008DAE 1 20 3C 88 jsr L883C 008DB1 1 20 E9 85 jsr L85E9 008DB4 1 24 3B bit HINIB 008DB6 1 70 07 bvs L8DBF 008DB8 1 .endif 008DB8 1 E0 02 cpx #$02 008DBA 1 90 03 bcc L8DBF 008DBC 1 .if CompileDrive >= DRIVE_1571CR 008DBC 1 bit HINIB 008DBC 1 bvs L8DBF 008DBC 1 .endif 008DBC 1 4C 84 83 jmp L8384 008DBF 1 L8DBF: 008DBF 1 20 F9 85 jsr L85F9 008DC2 1 A5 3B lda HINIB 008DC4 1 008DC4 1 .if CompileDrive >= DRIVE_1571CR 008DC4 1 bmi L8DE8 008DC4 1 L8DC6: 008DC4 1 jsr L8EC6 008DC4 1 .else 008DC4 1 30 22 bmi L8DE8 008DC6 1 L8DC6: 008DC6 1 A9 03 lda #$03 008DC8 1 85 31 sta BUFPNT + 1 008DCA 1 A0 00 ldy #$00 008DCC 1 84 30 sty BUFPNT 008DCE 1 A6 44 ldx WORK 008DD0 1 .endif 008DD0 1 L8DD0: 008DD0 1 B1 30 lda (BUFPNT),y 008DD2 1 85 46 sta CTRACK 008DD4 1 20 F9 85 jsr L85F9 008DD7 1 CC 71 02 cpy RLINDX 008DDA 1 F0 03 beq L8DDF 008DDC 1 C8 iny 008DDD 1 D0 F1 bne L8DD0 008DDF 1 L8DDF: 008DDF 1 C8 iny 008DE0 1 CA dex 008DE1 1 F0 05 beq L8DE8 008DE3 1 E6 31 inc BUFPNT + 1 008DE5 1 4C D0 8D jmp L8DD0 008DE8 1 L8DE8: 008DE8 1 CE 05 02 dec CMDBUF + 5 008DEB 1 F0 06 beq L8DF3 008DED 1 20 6C 88 jsr L886C 008DF0 1 4C 67 8D jmp L8D67 008DF3 1 L8DF3: 008DF3 1 4C 1B 89 jmp L891B 008DF6 1 L8DF6: 008DF6 1 .if CompileDrive >= DRIVE_1571CR 008DF6 1 jsr L8EC6 008DF6 1 .else 008DF6 1 A9 03 lda #$03 008DF8 1 85 31 sta BUFPNT + 1 008DFA 1 A0 00 ldy #$00 008DFC 1 84 30 sty BUFPNT 008DFE 1 A6 44 ldx WORK 008E00 1 .endif 008E00 1 A5 3B lda HINIB 008E02 1 30 30 bmi L8E34 008E04 1 L8E04: 008E04 1 AD 00 18 lda VBC_PB1 008E07 1 49 08 eor #VBC_PB1_1540_CLOCKOUT 008E09 1 2C 0D 40 bit CIA_ICR 008E0C 1 8D 00 18 sta VBC_PB1 008E0F 1 L8E0F: 008E0F 1 AD 00 18 lda VBC_PB1 008E12 1 10 03 bpl L8E17 008E14 1 20 59 EA jsr TestATN 008E17 1 L8E17: 008E17 1 AD 0D 40 lda CIA_ICR 008E1A 1 29 08 and #CIA_ICR_B_SP 008E1C 1 F0 F1 beq L8E0F 008E1E 1 AD 0C 40 lda CIA_SDR 008E21 1 91 30 sta (BUFPNT),y 008E23 1 CC 71 02 cpy RLINDX 008E26 1 F0 03 beq L8E2B 008E28 1 C8 iny 008E29 1 D0 D9 bne L8E04 008E2B 1 L8E2B: 008E2B 1 C8 iny 008E2C 1 CA dex 008E2D 1 F0 05 beq L8E34 008E2F 1 E6 31 inc BUFPNT + 1 008E31 1 4C 04 8E jmp L8E04 008E34 1 L8E34: 008E34 1 A5 3B lda HINIB 008E36 1 29 20 and #$20 008E38 1 008E38 1 .if CompileDrive >= DRIVE_1571CR 008E38 1 beq L8E4F 008E38 1 jmp L8EB7 008E38 1 L8E4F: 008E38 1 .else 008E38 1 D0 7D bne L8EB7 008E3A 1 .endif 008E3A 1 A5 3B lda HINIB 008E3C 1 29 08 and #$08 008E3E 1 F0 05 beq L8E45 008E40 1 A6 46 ldx CTRACK 008E42 1 4C 81 83 jmp L8381 008E45 1 L8E45: 008E45 1 .if CompileDrive >= DRIVE_1571CR 008E45 1 jsr L8EC6 008E45 1 jsr LAC9C 008E45 1 bcc L8E65 008E45 1 jmp L8F41 008E45 1 L8E65: 008E45 1 jsr LACB9 008E45 1 bit L01B4 008E45 1 bmi L8E70 008E45 1 lda #$28 008E45 1 .byte ASM_BIT3 008E45 1 L8E70: 008E45 1 lda #$29 008E45 1 sta WD177x_COMMAND 008E45 1 lda #$00 008E45 1 sta WD177x_SECTOR 008E45 1 lda WD177x_STATUS 008E45 1 ora #$02 008E45 1 sta WD177x_COMMAND 008E45 1 ldx #$0C 008E45 1 L8E84: 008E45 1 lda #$00 008E45 1 L8E86: 008E45 1 bit WD177x_STATUS 008E45 1 bpl L8E86 008E45 1 sta WD177x_SECTOR 008E45 1 dex 008E45 1 bne L8E84 008E45 1 lda CSG5710_4010 + 0 008E45 1 L8E94: 008E45 1 bit WD177x_STATUS 008E45 1 bpl L8E94 008E45 1 sta WD177x_SECTOR 008E45 1 lda WD177x_STATUS 008E45 1 ora #$14 008E45 1 sta WD177x_COMMAND 008E45 1 lda WD177x_TRACK 008E45 1 and #$F8 008E45 1 ora CSG5710_4010 + 2 008E45 1 sta WD177x_TRACK 008E45 1 ldx #$02 008E45 1 lda CSG5710_4010 + 0 008E45 1 L8EB4: 008E45 1 bit WD177x_STATUS 008E45 1 bpl L8EB4 008E45 1 sta WD177x_SECTOR 008E45 1 dex 008E45 1 bne L8EB4 008E45 1 lda CSG5710_4010 + 4 008E45 1 L8EC2_CR: 008E45 1 bit WD177x_STATUS 008E45 1 bpl L8EC2_CR 008E45 1 sta WD177x_SECTOR 008E45 1 lda WD177x_STATUS 008E45 1 and #$FB 008E45 1 sta WD177x_COMMAND 008E45 1 .else 008E45 1 A9 03 lda #$03 008E47 1 85 31 sta BUFPNT + 1 008E49 1 .endif 008E49 1 A0 00 ldy #$00 008E4B 1 .if CompileDrive >= DRIVE_1571CR 008E4B 1 .else 008E4B 1 84 30 sty BUFPNT 008E4D 1 .endif 008E4D 1 A6 44 ldx WORK 008E4F 1 .if CompileDrive >= DRIVE_1571CR 008E4F 1 L8E66: 008E4F 1 lda (BUFPNT),y 008E4F 1 L8ED8: 008E4F 1 bit WD177x_STATUS 008E4F 1 bpl L8ED8 008E4F 1 .else 008E4F 1 AD 03 02 lda CMDBUF + 3 008E52 1 8D 01 20 sta WD177x_TRACK 008E55 1 AD 04 02 lda CMDBUF + 4 008E58 1 .endif 008E58 1 8D 02 20 sta WD177x_SECTOR 008E5B 1 008E5B 1 .if CompileDrive >= DRIVE_1571CR 008E5B 1 .else 008E5B 1 AD 0D 18 lda VBC_IFR1 008E5E 1 4A lsr a 008E5F 1 B0 32 bcs L8E93 008E61 1 A9 A8 lda #$A8 008E63 1 20 4E 88 jsr L884E 008E66 1 L8E66: 008E66 1 AD 00 20 lda WD177x_STATUS 008E69 1 29 03 and #$03 008E6B 1 4A lsr a 008E6C 1 90 25 bcc L8E93 008E6E 1 29 01 and #$01 008E70 1 F0 F4 beq L8E66 008E72 1 B1 30 lda (BUFPNT),y 008E74 1 8D 03 20 sta WD177x_DATA 008E77 1 .endif 008E77 1 008E77 1 CC 71 02 cpy RLINDX 008E7A 1 F0 03 beq L8E7F 008E7C 1 C8 iny 008E7D 1 D0 E7 bne L8E66 008E7F 1 L8E7F: 008E7F 1 C8 iny 008E80 1 CA dex 008E81 1 F0 05 beq L8E88 008E83 1 E6 31 inc BUFPNT + 1 008E85 1 4C 66 8E jmp L8E66 008E88 1 .if CompileDrive >= DRIVE_1571CR 008E88 1 L8E88: 008E88 1 bit WD177x_STATUS 008E88 1 bpl L8E88 008E88 1 sta WD177x_SECTOR 008E88 1 lda WD177x_STATUS 008E88 1 and #$F7 008E88 1 sta WD177x_COMMAND 008E88 1 L8F01: 008E88 1 bit WD177x_STATUS 008E88 1 bpl L8F01 008E88 1 sta WD177x_SECTOR 008E88 1 L8F09: 008E88 1 bit WD177x_STATUS 008E88 1 bpl L8F09 008E88 1 sta WD177x_SECTOR 008E88 1 L8F11: 008E88 1 bit WD177x_STATUS 008E88 1 bpl L8F11 008E88 1 sta WD177x_SECTOR 008E88 1 lda WD177x_STATUS 008E88 1 and #$EF 008E88 1 sta WD177x_COMMAND 008E88 1 L8F21: 008E88 1 bit WD177x_STATUS 008E88 1 bpl L8F21 008E88 1 sta WD177x_SECTOR 008E88 1 lda WD177x_STATUS 008E88 1 and #$CD 008E88 1 sta WD177x_COMMAND 008E88 1 ldy #$02 008E88 1 jsr L8829 008E88 1 ldx #$00 008E88 1 bit L01B4 008E88 1 bvs L8F43_CR 008E88 1 jsr LACC7 008E88 1 .byte ASM_BIT3 008E88 1 L8F41: 008E88 1 ldx #$07 008E88 1 L8F43_CR: 008E88 1 stx L01B0 008E88 1 jsr L81CE 008E88 1 .else 008E88 1 L8E88: 008E88 1 AD 0D 18 lda VBC_IFR1 008E8B 1 4A lsr a 008E8C 1 B0 05 bcs L8E93 008E8E 1 .if CompileDrive >= DRIVE_1571_05 008E8E 1 jsr PATCH_INIT_CSG5710 008E8E 1 .else 008E8E 1 20 C6 8E jsr L8EC6 008E91 1 .endif 008E91 1 90 07 bcc L8E9A 008E93 1 L8E93: 008E93 1 20 CE 81 jsr L81CE 008E96 1 A2 07 ldx #$07 008E98 1 D0 06 bne L8EA0 008E9A 1 L8E9A: 008E9A 1 20 CE 81 jsr L81CE 008E9D 1 20 3C 88 jsr L883C 008EA0 1 L8EA0: 008EA0 1 8E B0 01 stx L01B0 008EA3 1 .endif 008EA3 1 20 E9 85 jsr L85E9 008EA6 1 20 F9 85 jsr L85F9 008EA9 1 20 A0 86 jsr L86A0 008EAC 1 20 B2 81 jsr L81B2 008EAF 1 24 3B bit HINIB 008EB1 1 70 04 bvs L8EB7 008EB3 1 E0 02 cpx #$02 008EB5 1 B0 0E bcs L8EC5 008EB7 1 L8EB7: 008EB7 1 CE 05 02 dec CMDBUF + 5 008EBA 1 F0 06 beq L8EC2 008EBC 1 20 6C 88 jsr L886C 008EBF 1 4C F6 8D jmp L8DF6 008EC2 1 L8EC2: 008EC2 1 4C 1B 89 jmp L891B 008EC5 1 L8EC5: 008EC5 1 60 rts 008EC6 1 L8EC6: 008EC6 1 A9 03 lda #$03 008EC8 1 85 31 sta BUFPNT + 1 008ECA 1 A0 00 ldy #$00 008ECC 1 84 30 sty BUFPNT 008ECE 1 .if CompileDrive >= DRIVE_1571CR 008ECE 1 .else 008ECE 1 A6 44 ldx WORK 008ED0 1 .endif 008ED0 1 AD 03 02 lda CMDBUF + 3 008ED3 1 .if CompileDrive >= DRIVE_1571CR 008ED3 1 sta NMIFLG 008ED3 1 .else 008ED3 1 8D 01 20 sta WD177x_TRACK 008ED6 1 .endif 008ED6 1 AD 04 02 lda CMDBUF + 4 008ED9 1 008ED9 1 .if CompileDrive >= DRIVE_1571CR 008ED9 1 sta SECTR 008ED9 1 eor #$FF 008ED9 1 sta STAB + 2 008ED9 1 .else 008ED9 1 8D 02 20 sta WD177x_SECTOR 008EDC 1 A9 88 lda #$88 008EDE 1 20 4E 88 jsr L884E 008EE1 1 L8EE1: 008EE1 1 AD 00 20 lda WD177x_STATUS 008EE4 1 29 03 and #$03 008EE6 1 4A lsr a 008EE7 1 90 1C bcc L8F05 008EE9 1 29 01 and #$01 008EEB 1 F0 F4 beq L8EE1 008EED 1 AD 03 20 lda WD177x_DATA 008EF0 1 D1 30 cmp (BUFPNT),y 008EF2 1 D0 11 bne L8F05 008EF4 1 CC 71 02 cpy RLINDX 008EF7 1 F0 03 beq L8EFC 008EF9 1 C8 iny 008EFA 1 D0 E5 bne L8EE1 008EFC 1 L8EFC: 008EFC 1 C8 iny 008EFD 1 CA dex 008EFE 1 F0 10 beq L8F10 008F00 1 E6 31 inc BUFPNT + 1 008F02 1 4C E1 8E jmp L8EE1 008F05 1 L8F05: 008F05 1 A9 D0 lda #$D0 008F07 1 8D 00 20 sta WD177x_COMMAND 008F0A 1 20 83 A4 jsr LA483 008F0D 1 A2 07 ldx #$07 008F0F 1 2C .byte ASM_BIT3 008F10 1 L8F10: 008F10 1 A2 00 ldx #$00 008F12 1 8E B0 01 stx L01B0 008F15 1 4C 61 88 jmp L8861 008F18 1 L8F18: 008F18 1 A9 03 lda #$03 008F1A 1 85 31 sta BUFPNT + 1 008F1C 1 A0 00 ldy #$00 008F1E 1 84 30 sty BUFPNT 008F20 1 .endif 008F20 1 008F20 1 A6 44 ldx WORK 008F22 1 008F22 1 .if CompileDrive >= DRIVE_1571CR 008F22 1 .else 008F22 1 .if CompileDrive >= DRIVE_1571_05 008F22 1 .else 008F22 1 AC 71 02 ldy RLINDX 008F25 1 .endif 008F25 1 A9 88 lda #$88 008F27 1 20 4E 88 jsr L884E 008F2A 1 L8F2A: 008F2A 1 AD 00 20 lda WD177x_STATUS 008F2D 1 29 03 and #$03 008F2F 1 4A lsr a 008F30 1 90 1A bcc L8F4C 008F32 1 29 01 and #$01 008F34 1 F0 F4 beq L8F2A 008F36 1 AD 03 20 lda WD177x_DATA 008F39 1 CD 0A 02 cmp CMDBUF + 10 008F3C 1 D0 0E bne L8F4C 008F3E 1 .if CompileDrive >= DRIVE_1571_05 008F3E 1 cpy RLINDX 008F3E 1 beq L8F43 008F3E 1 iny 008F3E 1 bne L8F2A 008F3E 1 L8F43: 008F3E 1 iny 008F3E 1 .else 008F3E 1 88 dey 008F3F 1 10 E9 bpl L8F2A 008F41 1 .endif 008F41 1 CA dex 008F42 1 F0 13 beq L8F57 008F44 1 .if CompileDrive >= DRIVE_1571_05 008F44 1 .else 008F44 1 AC 71 02 ldy RLINDX 008F47 1 .endif 008F47 1 E6 31 inc BUFPNT + 1 008F49 1 4C 2A 8F jmp L8F2A 008F4C 1 L8F4C: 008F4C 1 A9 D0 lda #$D0 008F4E 1 8D 00 20 sta WD177x_COMMAND 008F51 1 20 83 A4 jsr LA483 008F54 1 A2 07 ldx #$07 008F56 1 2C .byte ASM_BIT3 008F57 1 L8F57: 008F57 1 A2 00 ldx #$00 008F59 1 8E B0 01 stx L01B0 008F5C 1 4C 61 88 jmp L8861 008F5F 1 L8F5F: 008F5F 1 08 php 008F60 1 78 sei ; disallow interrupts --> blocking job loop 008F61 1 20 EF 89 jsr L89EF 008F64 1 24 3B bit HINIB 008F66 1 10 08 bpl L8F70 008F68 1 AD 03 02 lda CMDBUF + 3 008F6B 1 85 67 sta NMIFLG 008F6D 1 20 BA 87 jsr L87BA 008F70 1 L8F70: 008F70 1 A9 00 lda #$00 008F72 1 85 97 sta MYPA 008F74 1 20 27 8A jsr L8A27 008F77 1 AE B0 01 ldx L01B0 008F7A 1 E0 02 cpx #$02 008F7C 1 B0 1F bcs L8F9D 008F7E 1 A5 26 lda STAB + 2 008F80 1 85 96 sta ICMD 008F82 1 L8F82: 008F82 1 20 27 8A jsr L8A27 008F85 1 A5 26 lda STAB + 2 008F87 1 A4 97 ldy MYPA 008F89 1 99 0B 02 sta CMDBUF + 11,y 008F8C 1 E6 97 inc MYPA 008F8E 1 C0 1F cpy #$1F 008F90 1 B0 0B bcs L8F9D 008F92 1 C5 96 cmp ICMD 008F94 1 D0 EC bne L8F82 008F96 1 A5 24 lda STAB 008F98 1 85 67 sta NMIFLG 008F9A 1 A2 00 ldx #$00 008F9C 1 2C .byte ASM_BIT3 008F9D 1 L8F9D: 008F9D 1 A2 02 ldx #$02 008F9F 1 8E B0 01 stx L01B0 008FA2 1 28 plp 008FA3 1 .endif 008FA3 1 60 rts 008FA4 1 008FA4 1 FillUntil $8FA4 008FA4 1 008FA4 1 L8FA4: 008FA4 1 AD 04 02 lda CMDBUF + 4 008FA7 1 85 69 sta SECINC 008FA9 1 60 rts 008FAA 1 L8FAA: 008FAA 1 AD 04 02 lda CMDBUF + 4 008FAD 1 85 6A sta REVCNT 008FAF 1 60 rts 008FB0 1 L8FB0: 008FB0 1 4C 4E 92 jmp L924E 008FB3 1 L8FB3: 008FB3 1 78 sei ; disallow interrupts --> blocking job loop 008FB4 1 AD 0F 18 lda VBC_PAUNBUF1 008FB7 1 29 20 and #VBC_PA1_20 008FB9 1 D0 66 bne L9021 008FBB 1 AD 04 02 lda CMDBUF + 4 008FBE 1 C9 31 cmp #$31 008FC0 1 F0 12 beq L8FD4 008FC2 1 C9 30 cmp #$30 008FC4 1 D0 5B bne L9021 008FC6 1 AD 0F 18 lda VBC_PAUNBUF1 008FC9 1 29 FB and # ~ VBC_PA1_04 008FCB 1 8D 0F 18 sta VBC_PAUNBUF1 008FCE 1 58 cli ; allow processing of job loop 008FCF 1 24 3B bit HINIB 008FD1 1 10 0E bpl L8FE1 008FD3 1 60 rts 008FD4 1 L8FD4: 008FD4 1 .if CompileDrive >= DRIVE_1571 008FD4 1 lda VBC_PAUNBUF1 008FD4 1 .else 008FD4 1 4C 21 90 jmp L9021 008FD7 1 .endif 008FD7 1 09 04 ora #VBC_PA1_04 008FD9 1 8D 0F 18 sta VBC_PAUNBUF1 008FDC 1 58 cli ; allow processing of job loop 008FDD 1 24 3B bit HINIB 008FDF 1 30 03 bmi L8FE4 008FE1 1 L8FE1: 008FE1 1 4C 42 D0 jmp LD042 008FE4 1 L8FE4: 008FE4 1 60 rts 008FE5 1 L8FE5: 008FE5 1 AE 74 02 ldx CMDSIZ 008FE8 1 E0 04 cpx #$04 008FEA 1 90 35 bcc L9021 008FEC 1 AD 03 02 lda CMDBUF + 3 008FEF 1 C9 53 cmp #$53 008FF1 1 F0 B1 beq L8FA4 008FF3 1 C9 52 cmp #$52 008FF5 1 F0 B3 beq L8FAA 008FF7 1 C9 54 cmp #$54 008FF9 1 F0 B5 beq L8FB0 008FFB 1 C9 4D cmp #$4D 008FFD 1 F0 27 beq L9026 008FFF 1 C9 48 cmp #$48 009001 1 F0 B0 beq L8FB3 009003 1 .if CompileDrive >= DRIVE_1571CR 009003 1 jmp LABA7 009003 1 .elseif CompileDrive >= DRIVE_1571_05 009003 1 jmp LAA86 009003 1 .else 009003 1 A8 tay 009004 1 C0 04 cpy #$04 009006 1 .endif 009006 1 L9006: 009006 1 90 19 bcc L9021 009008 1 C0 1F cpy #$1F 00900A 1 B0 15 bcs L9021 00900C 1 A9 40 lda #$40 00900E 1 85 78 sta TLKADR 009010 1 A9 20 lda #$20 009012 1 85 77 sta LSNADR 009014 1 98 tya 009015 1 18 clc 009016 1 65 78 adc TLKADR 009018 1 85 78 sta TLKADR 00901A 1 98 tya 00901B 1 18 clc 00901C 1 65 77 adc LSNADR 00901E 1 85 77 sta LSNADR 009020 1 60 rts 009021 1 L9021: 009021 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 009023 1 4C C8 C1 jmp GenerateErrorMessage 009026 1 ; ------------ 009026 1 009026 1 L9026: 009026 1 78 sei ; disallow interrupts --> blocking job loop 009027 1 AD 04 02 lda CMDBUF + 4 00902A 1 C9 31 cmp #$31 00902C 1 F0 20 beq L904E 00902E 1 C9 30 cmp #$30 009030 1 D0 EF bne L9021 009032 1 AD 0F 18 lda VBC_PAUNBUF1 009035 1 29 DF and # ~ VBC_PA1_20 009037 1 8D 0F 18 sta VBC_PAUNBUF1 00903A 1 20 83 A4 jsr LA483 00903D 1 20 82 FF jsr LFF82 009040 1 AD AF 02 lda FLGMODE1570 009043 1 09 80 ora #$80 009045 1 8D AF 02 sta FLGMODE1570 009048 1 58 cli ; allow processing of job loop 009049 1 24 3B bit HINIB 00904B 1 10 2F bpl L907C 00904D 1 60 rts 00904E 1 L904E: 00904E 1 AD 0F 18 lda VBC_PAUNBUF1 009051 1 09 20 ora #VBC_PA1_20 009053 1 8D 0F 18 sta VBC_PAUNBUF1 009056 1 20 83 A4 jsr LA483 009059 1 A9 DE lda #$DE 00905B 1 8D A9 02 sta VIRQJOB1570 00905E 1 A9 9D lda #$9D 009060 1 8D AA 02 sta VIRQJOB1570 + 1 009063 1 A9 40 lda #$40 009065 1 8D 07 1C sta VDC_T1HL2 009068 1 8D 05 1C sta VDC_T1HC2 00906B 1 AD AF 02 lda FLGMODE1570 00906E 1 29 7F and #$7F 009070 1 8D AF 02 sta FLGMODE1570 009073 1 A9 00 lda #$00 009075 1 85 62 sta NXTST 009077 1 58 cli ; allow processing of job loop 009078 1 24 3B bit HINIB 00907A 1 30 03 bmi L907F 00907C 1 L907C: 00907C 1 4C 42 D0 jmp LD042 00907F 1 L907F: 00907F 1 60 rts 009080 1 L9080: 009080 1 20 CE 81 jsr L81CE 009083 1 20 EA 91 jsr L91EA 009086 1 B0 5F bcs L90E7 009088 1 20 3D C6 jsr LC63D 00908B 1 A5 FF lda NODRV 00908D 1 D0 58 bne L90E7 00908F 1 A5 37 lda BITCNT 009091 1 09 81 ora #$81 009093 1 85 37 sta BITCNT 009095 1 20 CA 91 jsr L91CA 009098 1 AD 00 02 lda CMDBUF 00909B 1 C9 2A cmp #$2A 00909D 1 D0 0F bne L90AE 00909F 1 A5 7E lda PRGTRK 0090A1 1 F0 0B beq L90AE 0090A3 1 48 pha 0090A4 1 AD 6F 02 lda PRGSEC 0090A7 1 8D 85 02 sta FILSEC 0090AA 1 68 pla 0090AB 1 4C EC 90 jmp L90EC 0090AE 1 L90AE: 0090AE 1 A9 00 lda #$00 0090B0 1 A8 tay 0090B1 1 AA tax 0090B2 1 8D 8E 02 sta LSTDRV 0090B5 1 8D 7A 02 sta FILTBL 0090B8 1 20 12 C3 jsr LC312 0090BB 1 AD 78 02 lda F2CNT 0090BE 1 48 pha 0090BF 1 A9 01 lda #$01 0090C1 1 8D 78 02 sta F2CNT 0090C4 1 A9 FF lda #$FF 0090C6 1 85 86 sta R0 0090C8 1 20 4F C4 jsr LC44F 0090CB 1 68 pla 0090CC 1 8D 78 02 sta F2CNT 0090CF 1 A5 37 lda BITCNT 0090D1 1 29 7F and #$7F 0090D3 1 85 37 sta BITCNT 0090D5 1 24 3B bit HINIB 0090D7 1 30 06 bmi L90DF 0090D9 1 .if CompileDrive >= DRIVE_1571_05 0090D9 1 jsr LAA5B 0090D9 1 FillNOP 1 0090D9 1 .elseif CompileDrive >= DRIVE_1571 0090D9 1 lda PATTYP 0090D9 1 cmp #$02 0090D9 1 .else 0090D9 1 20 5B AA jsr LAA5B 0090DC 1 EA FillNOP 1 0090DD 1 .endif 0090DD 1 D0 05 bne L90E4 0090DF 1 L90DF: 0090DF 1 AD 80 02 lda FILTRK 0090E2 1 D0 08 bne L90EC 0090E4 1 L90E4: 0090E4 1 A2 02 ldx #$02 0090E6 1 2C .byte ASM_BIT3 0090E7 1 L90E7: 0090E7 1 A2 0F ldx #$0F 0090E9 1 4C AD 91 jmp L91AD 0090EC 1 L90EC: 0090EC 1 85 7E sta PRGTRK 0090EE 1 48 pha 0090EF 1 20 DA 91 jsr L91DA 0090F2 1 68 pla 0090F3 1 AE B0 02 ldx L02B0 0090F6 1 95 06 sta TRACK0,x 0090F8 1 AD 85 02 lda FILSEC 0090FB 1 8D 6F 02 sta PRGSEC 0090FE 1 95 07 sta SECTOR0,x 009100 1 A9 80 lda #$80 009102 1 8D 02 02 sta CMDBUF + 2 009105 1 85 5F sta AF 009107 1 L9107: 009107 1 58 cli ; allow processing of job loop 009108 1 A6 F9 ldx JOBNUM 00910A 1 A5 5F lda AF 00910C 1 95 00 sta JOBS0,x 00910E 1 20 4B 86 jsr L864B 009111 1 E0 02 cpx #$02 009113 1 90 03 bcc L9118 009115 1 4C 99 91 jmp L9199 009118 1 L9118: 009118 1 78 sei ; disallow interrupts --> blocking job loop 009119 1 A0 00 ldy #$00 00911B 1 B1 94 lda (DIRBUF),y 00911D 1 F0 2F beq L914E 00911F 1 A5 37 lda BITCNT 009121 1 29 FE and #$FE 009123 1 85 37 sta BITCNT 009125 1 20 28 92 jsr L9228 009128 1 A0 02 ldy #$02 00912A 1 L912A: 00912A 1 B1 94 lda (DIRBUF),y 00912C 1 AA tax 00912D 1 20 28 92 jsr L9228 009130 1 C8 iny 009131 1 D0 F7 bne L912A 009133 1 AE B0 02 ldx L02B0 009136 1 B1 94 lda (DIRBUF),y 009138 1 D5 06 cmp TRACK0,x 00913A 1 F0 03 beq L913F 00913C 1 A0 80 ldy #$80 00913E 1 2C .byte ASM_BIT3 00913F 1 L913F: 00913F 1 A0 88 ldy #$88 009141 1 84 5F sty AF 009143 1 95 06 sta TRACK0,x 009145 1 A0 01 ldy #$01 009147 1 B1 94 lda (DIRBUF),y 009149 1 95 07 sta SECTOR0,x 00914B 1 4C 07 91 jmp L9107 00914E 1 L914E: 00914E 1 A2 1F ldx #$1F 009150 1 20 28 92 jsr L9228 009153 1 A9 01 lda #$01 009155 1 24 37 bit BITCNT 009157 1 F0 1E beq L9177 009159 1 A8 tay 00915A 1 B1 94 lda (DIRBUF),y 00915C 1 38 sec 00915D 1 E9 03 sbc #$03 00915F 1 85 46 sta CTRACK 009161 1 AA tax 009162 1 20 28 92 jsr L9228 009165 1 C8 iny 009166 1 B1 94 lda (DIRBUF),y 009168 1 AA tax 009169 1 20 28 92 jsr L9228 00916C 1 C8 iny 00916D 1 B1 94 lda (DIRBUF),y 00916F 1 AA tax 009170 1 20 28 92 jsr L9228 009173 1 A0 04 ldy #$04 009175 1 D0 0D bne L9184 009177 1 L9177: 009177 1 A0 01 ldy #$01 009179 1 B1 94 lda (DIRBUF),y 00917B 1 AA tax 00917C 1 CA dex 00917D 1 86 46 stx CTRACK 00917F 1 20 28 92 jsr L9228 009182 1 A0 02 ldy #$02 009184 1 L9184: 009184 1 B1 94 lda (DIRBUF),y 009186 1 AA tax 009187 1 20 28 92 jsr L9228 00918A 1 C8 iny 00918B 1 C6 46 dec CTRACK 00918D 1 D0 F5 bne L9184 00918F 1 A9 00 lda #$00 009191 1 85 83 sta SA 009193 1 20 C0 DA jsr LDAC0 009196 1 4C 94 C1 jmp CommandEnd 009199 1 L9199: 009199 1 78 sei ; disallow interrupts --> blocking job loop 00919A 1 86 46 stx CTRACK 00919C 1 20 28 92 jsr L9228 00919F 1 A9 00 lda #$00 0091A1 1 85 83 sta SA 0091A3 1 20 C0 DA jsr LDAC0 0091A6 1 A6 F9 ldx JOBNUM 0091A8 1 A5 46 lda CTRACK 0091AA 1 4C 0A E6 jmp LE60A 0091AD 1 L91AD: 0091AD 1 78 sei ; disallow interrupts --> blocking job loop 0091AE 1 86 46 stx CTRACK 0091B0 1 A2 02 ldx #$02 0091B2 1 20 28 92 jsr L9228 0091B5 1 A9 00 lda #$00 0091B7 1 85 83 sta SA 0091B9 1 20 C0 DA jsr LDAC0 0091BC 1 A5 46 lda CTRACK 0091BE 1 C9 02 cmp #$02 0091C0 1 F0 03 beq L91C5 0091C2 1 A9 74 lda #$74 0091C4 1 2C .byte ASM_BIT3 0091C5 1 L91C5: 0091C5 1 A9 62 lda #ERRORCODE_62_FILE_NOT_FOUND 0091C7 1 4C C8 C1 jmp GenerateErrorMessage 0091CA 1 ; ------------- 0091CA 1 0091CA 1 L91CA: 0091CA 1 A9 00 lda #$00 0091CC 1 85 83 sta SA 0091CE 1 A9 01 lda #$01 0091D0 1 20 E2 D1 jsr LD1E2 0091D3 1 AA tax 0091D4 1 BD E0 FE lda TableHighBytesOfBuffers,x 0091D7 1 85 95 sta DIRBUF + 1 0091D9 1 60 rts 0091DA 1 L91DA: 0091DA 1 A5 95 lda DIRBUF + 1 0091DC 1 38 sec 0091DD 1 E9 03 sbc #$03 0091DF 1 85 F9 sta JOBNUM 0091E1 1 0A asl a 0091E2 1 8D B0 02 sta L02B0 0091E5 1 A9 00 lda #$00 0091E7 1 85 94 sta DIRBUF 0091E9 1 60 rts 0091EA 1 L91EA: 0091EA 1 A0 03 ldy #$03 0091EC 1 AD 74 02 lda CMDSIZ 0091EF 1 38 sec 0091F0 1 E9 03 sbc #$03 0091F2 1 8D 74 02 sta CMDSIZ 0091F5 1 AD 04 02 lda CMDBUF + 4 0091F8 1 C9 3A cmp #$3A 0091FA 1 D0 0E bne L920A 0091FC 1 AD 03 02 lda CMDBUF + 3 0091FF 1 AA tax 009200 1 29 30 and #$30 009202 1 C9 30 cmp #$30 009204 1 D0 04 bne L920A 009206 1 E0 31 cpx #$31 009208 1 F0 1C beq L9226 00920A 1 L920A: 00920A 1 AD 03 02 lda CMDBUF + 3 00920D 1 C9 3A cmp #$3A 00920F 1 D0 04 bne L9215 009211 1 CE 74 02 dec CMDSIZ 009214 1 C8 iny 009215 1 L9215: 009215 1 A2 00 ldx #$00 009217 1 L9217: 009217 1 B9 00 02 lda CMDBUF,y 00921A 1 9D 00 02 sta CMDBUF,x 00921D 1 C8 iny 00921E 1 E8 inx 00921F 1 EC 74 02 cpx CMDSIZ 009222 1 D0 F3 bne L9217 009224 1 18 clc 009225 1 24 .byte ASM_BIT2 009226 1 L9226: 009226 1 38 sec 009227 1 60 rts 009228 1 L9228: 009228 1 AD 00 18 lda VBC_PB1 00922B 1 CD 00 18 cmp VBC_PB1 00922E 1 D0 F8 bne L9228 009230 1 29 FF and #$FF 009232 1 30 17 bmi L924B 009234 1 45 37 eor BITCNT 009236 1 29 04 and #$04 ; VBC_PB1_1540_CLOCKIN? 009238 1 F0 EE beq L9228 00923A 1 8E 0C 40 stx CIA_SDR 00923D 1 A5 37 lda BITCNT 00923F 1 49 04 eor #$04 009241 1 85 37 sta BITCNT 009243 1 A9 08 lda #CIA_ICR_B_SP 009245 1 L9245: 009245 1 2C 0D 40 bit CIA_ICR 009248 1 F0 FB beq L9245 00924A 1 60 rts 00924B 1 00924B 1 L924B: 00924B 1 4C B3 A7 jmp ProcessBus1570 00924E 1 00924E 1 L924E: 00924E 1 08 php 00924F 1 78 sei ; disallow interrupts --> blocking job loop 009250 1 A2 00 ldx #$00 009252 1 86 00 stx JOBS0 009254 1 86 01 stx JOBS1 009256 1 A9 03 lda #$03 009258 1 85 75 sta IP 00925A 1 A8 tay 00925B 1 A9 80 lda #$80 00925D 1 85 76 sta IP + 1 00925F 1 L925F: 00925F 1 B1 75 lda (IP),y 009261 1 85 02 sta JOBS2 009263 1 A2 08 ldx #$08 009265 1 L9265: 009265 1 A5 02 lda JOBS2 009267 1 29 01 and #$01 009269 1 85 03 sta JOBS3 00926B 1 A5 01 lda JOBS1 00926D 1 10 02 bpl L9271 00926F 1 E6 03 inc JOBS3 009271 1 L9271: 009271 1 6A ror a 009272 1 90 02 bcc L9276 009274 1 E6 03 inc JOBS3 009276 1 L9276: 009276 1 6A ror a 009277 1 6A ror a 009278 1 6A ror a 009279 1 90 02 bcc L927D 00927B 1 E6 03 inc JOBS3 00927D 1 L927D: 00927D 1 A5 00 lda JOBS0 00927F 1 2A rol a 009280 1 2A rol a 009281 1 90 02 bcc L9285 009283 1 E6 03 inc JOBS3 009285 1 L9285: 009285 1 66 03 ror JOBS3 009287 1 26 00 rol JOBS0 009289 1 26 01 rol JOBS1 00928B 1 66 02 ror JOBS2 00928D 1 CA dex 00928E 1 D0 D5 bne L9265 009290 1 E6 75 inc IP 009292 1 D0 CB bne L925F 009294 1 E6 76 inc IP + 1 009296 1 D0 C7 bne L925F 009298 1 88 dey 009299 1 88 dey 00929A 1 88 dey 00929B 1 A5 00 lda JOBS0 00929D 1 CD 00 80 cmp L8000 0092A0 1 D0 11 bne L92B3 0092A2 1 A5 01 lda JOBS1 0092A4 1 CD 01 80 cmp L8001 0092A7 1 D0 0A bne L92B3 0092A9 1 84 00 sty JOBS0 0092AB 1 84 01 sty JOBS1 0092AD 1 84 02 sty JOBS2 0092AF 1 84 03 sty JOBS3 0092B1 1 28 plp 0092B2 1 60 rts 0092B3 1 L92B3: 0092B3 1 A2 03 ldx #$03 0092B5 1 86 6F stx T0 0092B7 1 4C 71 EA jmp PostFailError 0092BA 1 L92BA: 0092BA 1 BA tsx 0092BB 1 86 49 stx SAVSP 0092BD 1 2C 04 1C bit VDC_T1LC2 0092C0 1 AD 0C 1C lda VDC_PCR2 0092C3 1 09 0E ora #$0E 0092C5 1 8D 0C 1C sta VDC_PCR2 0092C8 1 L92C8: 0092C8 1 A0 05 ldy #$05 0092CA 1 L92CA: 0092CA 1 B9 00 00 lda JOBS0,y 0092CD 1 30 06 bmi L92D5 0092CF 1 88 dey 0092D0 1 10 F8 bpl L92CA 0092D2 1 4C CA 99 jmp L99CA 0092D5 1 L92D5: 0092D5 1 C9 88 cmp #$88 0092D7 1 D0 03 bne L92DC 0092D9 1 4C 0D 96 jmp L960D 0092DC 1 L92DC: 0092DC 1 C9 D0 cmp #$D0 0092DE 1 D0 03 bne L92E3 0092E0 1 4C A2 93 jmp L93A2 0092E3 1 L92E3: 0092E3 1 29 01 and #$01 0092E5 1 F0 07 beq L92EE 0092E7 1 84 3F sty JOBN 0092E9 1 A9 0F lda #$0F 0092EB 1 4C B5 99 jmp L99B5 0092EE 1 L92EE: 0092EE 1 AA tax 0092EF 1 C5 3E cmp CDRIVE 0092F1 1 F0 08 beq L92FB 0092F3 1 85 3E sta CDRIVE 0092F5 1 20 7E F9 jsr LF97E 0092F8 1 4C CA 99 jmp L99CA 0092FB 1 L92FB: 0092FB 1 A5 20 lda DRVST 0092FD 1 30 03 bmi L9302 0092FF 1 0A asl a 009300 1 10 03 bpl L9305 009302 1 L9302: 009302 1 4C CA 99 jmp L99CA 009305 1 L9305: 009305 1 A9 20 lda #$20 009307 1 85 20 sta DRVST 009309 1 A0 05 ldy #$05 00930B 1 84 3F sty JOBN 00930D 1 L930D: 00930D 1 20 D1 93 jsr L93D1 009310 1 30 1A bmi L932C 009312 1 L9312: 009312 1 C6 3F dec JOBN 009314 1 10 F7 bpl L930D 009316 1 A4 41 ldy NXTJOB 009318 1 20 D3 93 jsr L93D3 00931B 1 A5 42 lda NXTRK 00931D 1 85 4A sta STEPS 00931F 1 06 4A asl STEPS 009321 1 A9 60 lda #$60 009323 1 85 20 sta DRVST 009325 1 B1 32 lda (HDRPNT),y 009327 1 85 22 sta DRVTRK 009329 1 4C CA 99 jmp L99CA 00932C 1 L932C: 00932C 1 29 01 and #$01 00932E 1 C5 3E cmp CDRIVE 009330 1 D0 E0 bne L9312 009332 1 A5 22 lda DRVTRK 009334 1 F0 32 beq L9368 009336 1 A5 22 lda DRVTRK 009338 1 C9 24 cmp #$24 00933A 1 08 php 00933B 1 B1 32 lda (HDRPNT),y 00933D 1 C9 24 cmp #$24 00933F 1 6A ror a 009340 1 28 plp 009341 1 29 80 and #$80 009343 1 90 0B bcc L9350 009345 1 30 11 bmi L9358 009347 1 A5 22 lda DRVTRK 009349 1 E9 23 sbc #$23 00934B 1 85 22 sta DRVTRK 00934D 1 4C 58 93 jmp L9358 009350 1 L9350: 009350 1 10 06 bpl L9358 009352 1 A5 22 lda DRVTRK 009354 1 69 23 adc #$23 009356 1 85 22 sta DRVTRK 009358 1 L9358: 009358 1 38 sec 009359 1 B1 32 lda (HDRPNT),y 00935B 1 E5 22 sbc DRVTRK 00935D 1 F0 09 beq L9368 00935F 1 85 42 sta NXTRK 009361 1 A5 3F lda JOBN 009363 1 85 41 sta NXTJOB 009365 1 4C 12 93 jmp L9312 009368 1 L9368: 009368 1 A2 04 ldx #$04 00936A 1 B1 32 lda (HDRPNT),y 00936C 1 85 40 sta TRACC 00936E 1 C9 24 cmp #$24 009370 1 A8 tay 009371 1 20 F3 93 jsr L93F3 009374 1 98 tya 009375 1 90 02 bcc L9379 009377 1 E9 23 sbc #$23 009379 1 L9379: 009379 1 AA tax 00937A 1 .if CompileDrive >= DRIVE_1571_05 00937A 1 lda LC04C - 1,x 00937A 1 .else 00937A 1 BD 08 94 lda L9408,x 00937D 1 .endif 00937D 1 85 43 sta SECTR 00937F 1 AD 00 1C lda VDC_PB2 009382 1 29 9F and # ~ VDC_PB2_BITRATE 009384 1 05 43 ora SECTR 009386 1 8D 00 1C sta VDC_PB2 009389 1 BD 2B 94 lda L9409 + 34,x 00938C 1 85 43 sta SECTR 00938E 1 A5 45 lda JOB 009390 1 C9 40 cmp #$40 009392 1 F0 1C beq L93B0 009394 1 C9 60 cmp #$60 009396 1 F0 0A beq L93A2 009398 1 C9 70 cmp #$70 00939A 1 F0 03 beq L939F 00939C 1 4C 4F 94 jmp L944F 00939F 1 L939F: 00939F 1 4C 29 9B jmp L9B29 0093A2 1 L93A2: 0093A2 1 A5 3F lda JOBN 0093A4 1 18 clc 0093A5 1 69 03 adc #$03 0093A7 1 85 31 sta BUFPNT + 1 0093A9 1 A9 00 lda #$00 0093AB 1 85 30 sta BUFPNT 0093AD 1 6C 30 00 jmp (BUFPNT) 0093B0 1 L93B0: 0093B0 1 A9 60 lda #$60 0093B2 1 85 20 sta DRVST 0093B4 1 AD 00 1C lda VDC_PB2 0093B7 1 29 FC and # ~ VDC_PB2_STEPPER 0093B9 1 8D 00 1C sta VDC_PB2 0093BC 1 A9 A4 lda #$A4 0093BE 1 85 4A sta STEPS 0093C0 1 AD B1 01 lda L01B1 0093C3 1 30 03 bmi L93C8 0093C5 1 A9 01 lda #$01 0093C7 1 2C .byte ASM_BIT3 0093C8 1 L93C8: 0093C8 1 A9 24 lda #$24 0093CA 1 85 22 sta DRVTRK 0093CC 1 A9 01 lda #$01 0093CE 1 4C B5 99 jmp L99B5 0093D1 1 L93D1: 0093D1 1 A4 3F ldy JOBN 0093D3 1 L93D3: 0093D3 1 B9 00 00 lda JOBS0,y 0093D6 1 48 pha 0093D7 1 10 14 bpl L93ED 0093D9 1 29 78 and #$78 0093DB 1 85 45 sta JOB 0093DD 1 98 tya 0093DE 1 0A asl a 0093DF 1 69 06 adc #$06 0093E1 1 85 32 sta HDRPNT 0093E3 1 A9 00 lda #$00 0093E5 1 85 33 sta HDRPNT + 1 0093E7 1 98 tya 0093E8 1 18 clc 0093E9 1 69 03 adc #$03 0093EB 1 85 31 sta BUFPNT + 1 0093ED 1 L93ED: 0093ED 1 A0 00 ldy #$00 0093EF 1 84 30 sty BUFPNT 0093F1 1 68 pla 0093F2 1 60 rts 0093F3 1 L93F3: 0093F3 1 B0 03 bcs L93F8 0093F5 1 A9 00 lda #$00 0093F7 1 2C .byte ASM_BIT3 0093F8 1 L93F8: 0093F8 1 A9 84 lda #$84 0093FA 1 8D B1 01 sta L01B1 0093FD 1 AD 0F 18 lda VBC_PAUNBUF1 009400 1 29 FB and # ~ VBC_PA1_04 009402 1 0D B1 01 ora L01B1 009405 1 8D 0F 18 sta VBC_PAUNBUF1 009408 1 L9408: 009408 1 60 rts 009409 1 L9409: 009409 1 60 60 60 60 .byte $60,$60,$60,$60,$60,$60,$60,$60 00940D 1 60 60 60 60 009411 1 60 60 60 60 .byte $60,$60,$60,$60,$60,$60,$60,$60 009415 1 60 60 60 60 009419 1 60 40 40 40 .byte $60,$40,$40,$40,$40,$40,$40,$40 00941D 1 40 40 40 40 009421 1 20 20 20 20 .byte $20,$20,$20,$20,$20,$20,$00,$00 009425 1 20 20 00 00 009429 1 00 00 00 .byte $00,$00,$00 00942C 1 L942C: 00942C 1 15 15 15 15 .byte $15,$15,$15,$15,$15,$15,$15,$15 009430 1 15 15 15 15 009434 1 15 15 15 15 .byte $15,$15,$15,$15,$15,$15,$15,$15 009438 1 15 15 15 15 00943C 1 15 13 13 13 .byte $15,$13,$13,$13,$13,$13,$13,$13 009440 1 13 13 13 13 009444 1 12 12 12 12 .byte $12,$12,$12,$12,$12,$12,$11,$11 009448 1 12 12 11 11 00944C 1 11 11 11 .byte $11,$11,$11 00944F 1 L944F: 00944F 1 A9 5A lda #$5A 009451 1 85 4B sta TMP 009453 1 L9453: 009453 1 20 54 97 jsr L9754 009456 1 L9456: 009456 1 2C 0F 18 bit VBC_PAUNBUF1 009459 1 30 FB bmi L9456 00945B 1 AD 01 1C lda VDC_PA2 00945E 1 C9 52 cmp #$52 009460 1 D0 3E bne L94A0 009462 1 99 24 00 sta STAB,y 009465 1 C8 iny 009466 1 L9466: 009466 1 2C 0F 18 bit VBC_PAUNBUF1 009469 1 30 FB bmi L9466 00946B 1 AD 01 1C lda VDC_PA2 00946E 1 99 24 00 sta STAB,y 009471 1 C8 iny 009472 1 C0 08 cpy #$08 009474 1 D0 F0 bne L9466 009476 1 20 2F 95 jsr L952F 009479 1 A0 04 ldy #$04 00947B 1 A9 00 lda #$00 00947D 1 L947D: 00947D 1 59 16 00 eor HEADER,y 009480 1 88 dey 009481 1 10 FA bpl L947D 009483 1 C9 00 cmp #$00 009485 1 D0 30 bne L94B7 009487 1 A5 18 lda HEADER + 2 009489 1 85 22 sta DRVTRK 00948B 1 A5 45 lda JOB 00948D 1 C9 30 cmp #$30 00948F 1 F0 18 beq L94A9 009491 1 A5 12 lda DiskID0 009493 1 C5 16 cmp HEADER 009495 1 D0 1D bne L94B4 009497 1 A5 13 lda DiskID0 + 1 009499 1 C5 17 cmp HEADER + 1 00949B 1 D0 17 bne L94B4 00949D 1 4C BC 94 jmp L94BC 0094A0 1 L94A0: 0094A0 1 C6 4B dec TMP 0094A2 1 D0 AF bne L9453 0094A4 1 A9 02 lda #$02 0094A6 1 20 B5 99 jsr L99B5 0094A9 1 L94A9: 0094A9 1 A5 16 lda HEADER 0094AB 1 85 12 sta DiskID0 0094AD 1 A5 17 lda HEADER + 1 0094AF 1 85 13 sta DiskID0 + 1 0094B1 1 L94B1: 0094B1 1 A9 01 lda #$01 0094B3 1 2C .byte ASM_BIT3 0094B4 1 L94B4: 0094B4 1 A9 0B lda #$0B 0094B6 1 2C .byte ASM_BIT3 0094B7 1 L94B7: 0094B7 1 A9 09 lda #$09 0094B9 1 4C B5 99 jmp L99B5 0094BC 1 L94BC: 0094BC 1 A9 7F lda #$7F 0094BE 1 85 4C sta CSECT 0094C0 1 A5 19 lda HEADER + 3 0094C2 1 18 clc 0094C3 1 69 02 adc #$02 0094C5 1 C5 43 cmp SECTR 0094C7 1 90 02 bcc L94CB 0094C9 1 E5 43 sbc SECTR 0094CB 1 L94CB: 0094CB 1 85 4D sta NEXTS 0094CD 1 A2 05 ldx #$05 0094CF 1 86 3F stx JOBN 0094D1 1 A2 FF ldx #$FF 0094D3 1 L94D3: 0094D3 1 20 D1 93 jsr L93D1 0094D6 1 10 43 bpl L951B 0094D8 1 29 01 and #$01 0094DA 1 C5 3E cmp CDRIVE 0094DC 1 D0 3D bne L951B 0094DE 1 A0 00 ldy #$00 0094E0 1 B1 32 lda (HDRPNT),y 0094E2 1 C5 40 cmp TRACC 0094E4 1 D0 35 bne L951B 0094E6 1 A5 45 lda JOB 0094E8 1 C9 60 cmp #$60 0094EA 1 F0 0C beq L94F8 0094EC 1 A0 01 ldy #$01 0094EE 1 38 sec 0094EF 1 B1 32 lda (HDRPNT),y 0094F1 1 E5 4D sbc NEXTS 0094F3 1 10 03 bpl L94F8 0094F5 1 18 clc 0094F6 1 65 43 adc SECTR 0094F8 1 L94F8: 0094F8 1 C5 4C cmp CSECT 0094FA 1 B0 1F bcs L951B 0094FC 1 48 pha 0094FD 1 A5 45 lda JOB 0094FF 1 F0 15 beq L9516 009501 1 68 pla 009502 1 .if CompileDrive >= DRIVE_1571_05 009502 1 cmp #$04 009502 1 .else 009502 1 C9 09 cmp #$09 009504 1 .endif 009504 1 90 15 bcc L951B 009506 1 .if CompileDrive >= DRIVE_1571_05 009506 1 cmp #$08 009506 1 .else 009506 1 C9 0C cmp #$0C 009508 1 .endif 009508 1 B0 11 bcs L951B 00950A 1 L950A: 00950A 1 85 4C sta CSECT 00950C 1 A5 3F lda JOBN 00950E 1 AA tax 00950F 1 18 clc 009510 1 69 03 adc #$03 009512 1 85 31 sta BUFPNT + 1 009514 1 D0 05 bne L951B 009516 1 L9516: 009516 1 68 pla 009517 1 C9 06 cmp #$06 009519 1 90 EF bcc L950A 00951B 1 L951B: 00951B 1 C6 3F dec JOBN 00951D 1 10 B4 bpl L94D3 00951F 1 8A txa 009520 1 10 03 bpl L9525 009522 1 4C CA 99 jmp L99CA 009525 1 L9525: 009525 1 86 3F stx JOBN 009527 1 20 D1 93 jsr L93D1 00952A 1 A5 45 lda JOB 00952C 1 4C 06 96 jmp L9606 00952F 1 L952F: 00952F 1 A5 30 lda BUFPNT 009531 1 48 pha 009532 1 A5 31 lda BUFPNT + 1 009534 1 48 pha 009535 1 A9 24 lda #$24 009537 1 85 30 sta BUFPNT 009539 1 A9 00 lda #$00 00953B 1 85 31 sta BUFPNT + 1 00953D 1 A9 00 lda #$00 00953F 1 85 34 sta GCRPNT 009541 1 20 D9 98 jsr L98D9 009544 1 A5 55 lda BTAB + 3 009546 1 85 18 sta HEADER + 2 009548 1 A5 54 lda BTAB + 2 00954A 1 85 19 sta HEADER + 3 00954C 1 A5 53 lda BTAB + 1 00954E 1 85 1A sta HEADER + 4 009550 1 20 D9 98 jsr L98D9 009553 1 A5 52 lda BTAB 009555 1 85 17 sta HEADER + 1 009557 1 A5 53 lda BTAB + 1 009559 1 85 16 sta HEADER 00955B 1 68 pla 00955C 1 85 31 sta BUFPNT + 1 00955E 1 68 pla 00955F 1 85 30 sta BUFPNT 009561 1 60 rts 009562 1 empty9562: 009562 1 009562 1 FF FF FF FF FillUntil $9600 009566 1 FF FF FF FF 00956A 1 FF FF FF FF 009600 1 009600 1 L9600: 009600 1 20 0F 97 jsr L970F 009603 1 4C 54 97 jmp L9754 009606 1 L9606: 009606 1 C9 00 cmp #$00 009608 1 F0 03 beq L960D 00960A 1 4C 6E 97 jmp L976E 00960D 1 L960D: 00960D 1 20 00 96 jsr L9600 009610 1 L9610: 009610 1 2C 0F 18 bit VBC_PAUNBUF1 009613 1 30 FB bmi L9610 009615 1 AD 01 1C lda VDC_PA2 009618 1 AA tax 009619 1 BD 0D A0 lda LA00D,x 00961C 1 85 52 sta BTAB 00961E 1 8A txa 00961F 1 29 07 and #$07 009621 1 85 53 sta BTAB + 1 009623 1 L9623: 009623 1 2C 0F 18 bit VBC_PAUNBUF1 009626 1 30 FB bmi L9623 009628 1 AD 01 1C lda VDC_PA2 00962B 1 85 54 sta BTAB + 2 00962D 1 29 C0 and #$C0 00962F 1 05 53 ora BTAB + 1 009631 1 AA tax 009632 1 BD 0D 9F lda L9F0D,x 009635 1 05 52 ora BTAB 009637 1 48 pha 009638 1 4C 67 96 jmp L9667 00963B 1 L963B: 00963B 1 2C 0F 18 bit VBC_PAUNBUF1 00963E 1 30 FB bmi L963B 009640 1 AD 01 1C lda VDC_PA2 009643 1 AA tax 009644 1 BD 0D A0 lda LA00D,x 009647 1 85 52 sta BTAB 009649 1 8A txa 00964A 1 29 07 and #$07 00964C 1 85 53 sta BTAB + 1 00964E 1 L964E: 00964E 1 2C 0F 18 bit VBC_PAUNBUF1 009651 1 30 FB bmi L964E 009653 1 AD 01 1C lda VDC_PA2 009656 1 85 54 sta BTAB + 2 009658 1 29 C0 and #$C0 00965A 1 05 53 ora BTAB + 1 00965C 1 AA tax 00965D 1 BD 0D 9F lda L9F0D,x 009660 1 05 52 ora BTAB 009662 1 91 30 sta (BUFPNT),y 009664 1 C8 iny 009665 1 F0 70 beq L96D7 009667 1 L9667: 009667 1 A5 54 lda BTAB + 2 009669 1 AA tax 00966A 1 BD 0D A1 lda LA10D,x 00966D 1 85 52 sta BTAB 00966F 1 8A txa 009670 1 29 01 and #$01 009672 1 85 54 sta BTAB + 2 009674 1 L9674: 009674 1 2C 0F 18 bit VBC_PAUNBUF1 009677 1 30 FB bmi L9674 009679 1 AD 01 1C lda VDC_PA2 00967C 1 85 55 sta BTAB + 3 00967E 1 29 F0 and #$F0 009680 1 05 54 ora BTAB + 2 009682 1 AA tax 009683 1 BD 0F 9F lda L9F0D + 2,x 009686 1 05 52 ora BTAB 009688 1 91 30 sta (BUFPNT),y 00968A 1 C8 iny 00968B 1 A5 55 lda BTAB + 3 00968D 1 29 0F and #$0F 00968F 1 85 55 sta BTAB + 3 009691 1 L9691: 009691 1 2C 0F 18 bit VBC_PAUNBUF1 009694 1 30 FB bmi L9691 009696 1 AD 01 1C lda VDC_PA2 009699 1 85 3A sta CHKSUM 00969B 1 29 80 and #$80 00969D 1 05 55 ora BTAB + 3 00969F 1 AA tax 0096A0 1 BD 1D 9F lda L9F0D + 16,x 0096A3 1 85 52 sta BTAB 0096A5 1 A5 3A lda CHKSUM 0096A7 1 AA tax 0096A8 1 BD 0D A2 lda LA20D,x 0096AB 1 05 52 ora BTAB 0096AD 1 91 30 sta (BUFPNT),y 0096AF 1 C8 iny 0096B0 1 8A txa 0096B1 1 29 03 and #$03 0096B3 1 85 3A sta CHKSUM 0096B5 1 L96B5: 0096B5 1 2C 0F 18 bit VBC_PAUNBUF1 0096B8 1 30 FB bmi L96B5 0096BA 1 AD 01 1C lda VDC_PA2 0096BD 1 85 53 sta BTAB + 1 0096BF 1 29 E0 and #$E0 0096C1 1 05 3A ora CHKSUM 0096C3 1 AA tax 0096C4 1 BD 2A 9F lda L9F0D + 29,x 0096C7 1 85 52 sta BTAB 0096C9 1 A5 53 lda BTAB + 1 0096CB 1 AA tax 0096CC 1 BD 0D A3 lda LA30D,x 0096CF 1 05 52 ora BTAB 0096D1 1 91 30 sta (BUFPNT),y 0096D3 1 C8 iny 0096D4 1 4C 3B 96 jmp L963B 0096D7 1 L96D7: 0096D7 1 A5 54 lda BTAB + 2 0096D9 1 AA tax 0096DA 1 BD 0D A1 lda LA10D,x 0096DD 1 85 52 sta BTAB 0096DF 1 8A txa 0096E0 1 29 01 and #$01 0096E2 1 85 54 sta BTAB + 2 0096E4 1 L96E4: 0096E4 1 2C 0F 18 bit VBC_PAUNBUF1 0096E7 1 30 FB bmi L96E4 0096E9 1 AD 01 1C lda VDC_PA2 0096EC 1 29 F0 and #$F0 0096EE 1 05 54 ora BTAB + 2 0096F0 1 AA tax 0096F1 1 BD 0F 9F lda L9F0D + 2,x 0096F4 1 05 52 ora BTAB 0096F6 1 85 53 sta BTAB + 1 0096F8 1 68 pla 0096F9 1 C5 47 cmp DBID 0096FB 1 D0 0A bne L9707 0096FD 1 20 E9 F5 jsr LF5E9 009700 1 C5 53 cmp BTAB + 1 009702 1 F0 06 beq L970A 009704 1 A9 05 lda #$05 009706 1 2C .byte ASM_BIT3 009707 1 L9707: 009707 1 A9 04 lda #$04 009709 1 2C .byte ASM_BIT3 00970A 1 L970A: 00970A 1 A9 01 lda #$01 00970C 1 4C B5 99 jmp L99B5 00970F 1 L970F: 00970F 1 A5 12 lda DiskID0 009711 1 85 16 sta HEADER 009713 1 A5 13 lda DiskID0 + 1 009715 1 85 17 sta HEADER + 1 009717 1 A0 00 ldy #$00 009719 1 B1 32 lda (HDRPNT),y 00971B 1 85 18 sta HEADER + 2 00971D 1 C8 iny 00971E 1 B1 32 lda (HDRPNT),y 009720 1 85 19 sta HEADER + 3 009722 1 A9 00 lda #$00 009724 1 45 16 eor HEADER 009726 1 45 17 eor HEADER + 1 009728 1 45 18 eor HEADER + 2 00972A 1 45 19 eor HEADER + 3 00972C 1 85 1A sta HEADER + 4 00972E 1 20 34 F9 jsr LF934 009731 1 A9 5A lda #$5A 009733 1 85 4B sta TMP 009735 1 L9735: 009735 1 20 54 97 jsr L9754 009738 1 L9738: 009738 1 B9 24 00 lda STAB,y 00973B 1 L973B: 00973B 1 2C 0F 18 bit VBC_PAUNBUF1 00973E 1 30 FB bmi L973B 009740 1 CD 01 1C cmp VDC_PA2 009743 1 D0 06 bne L974B 009745 1 C8 iny 009746 1 C0 08 cpy #$08 009748 1 D0 EE bne L9738 00974A 1 60 rts 00974B 1 L974B: 00974B 1 C6 4B dec TMP 00974D 1 D0 E6 bne L9735 00974F 1 A9 02 lda #$02 009751 1 4C B5 99 jmp L99B5 009754 1 L9754: 009754 1 A2 0F ldx #$0F 009756 1 A0 00 ldy #$00 009758 1 L9758: 009758 1 2C 00 1C bit VDC_PB2 00975B 1 10 0B bpl L9768 00975D 1 88 dey 00975E 1 D0 F8 bne L9758 009760 1 CA dex 009761 1 D0 F5 bne L9758 009763 1 A9 03 lda #$03 009765 1 4C B5 99 jmp L99B5 009768 1 L9768: 009768 1 AD 01 1C lda VDC_PA2 00976B 1 A0 00 ldy #$00 00976D 1 60 rts 00976E 1 L976E: 00976E 1 C9 10 cmp #$10 009770 1 F0 03 beq L9775 009772 1 4C 98 98 jmp L9898 009775 1 L9775: 009775 1 20 E9 F5 jsr LF5E9 009778 1 85 3A sta CHKSUM 00977A 1 AD 00 1C lda VDC_PB2 00977D 1 29 10 and #VDC_PB2_WRITEPROTECT 00977F 1 D0 05 bne L9786 009781 1 A9 08 lda #$08 009783 1 4C B5 99 jmp L99B5 009786 1 L9786: 009786 1 20 8F F7 jsr LF78F 009789 1 20 0F 97 jsr L970F 00978C 1 A0 09 ldy #$09 00978E 1 L978E: 00978E 1 2C 0F 18 bit VBC_PAUNBUF1 009791 1 30 FB bmi L978E 009793 1 2C 00 1C bit VDC_PB2 009796 1 88 dey 009797 1 D0 F5 bne L978E 009799 1 A9 FF lda #$FF 00979B 1 8D 03 1C sta VDC_DDRA2 00979E 1 AD 0C 1C lda VDC_PCR2 0097A1 1 29 1F and #$1F 0097A3 1 09 C0 ora #$C0 0097A5 1 8D 0C 1C sta VDC_PCR2 0097A8 1 A9 FF lda #$FF 0097AA 1 A0 05 ldy #$05 0097AC 1 8D 01 1C sta VDC_PA2 0097AF 1 L97AF: 0097AF 1 2C 0F 18 bit VBC_PAUNBUF1 0097B2 1 30 FB bmi L97AF 0097B4 1 2C 00 1C bit VDC_PB2 0097B7 1 88 dey 0097B8 1 D0 F5 bne L97AF 0097BA 1 A0 BB ldy #$BB 0097BC 1 L97BC: 0097BC 1 B9 00 01 lda NODRV + 1,y 0097BF 1 L97BF: 0097BF 1 2C 0F 18 bit VBC_PAUNBUF1 0097C2 1 30 FB bmi L97BF 0097C4 1 8D 01 1C sta VDC_PA2 0097C7 1 C8 iny 0097C8 1 D0 F2 bne L97BC 0097CA 1 L97CA: 0097CA 1 B1 30 lda (BUFPNT),y 0097CC 1 L97CC: 0097CC 1 2C 0F 18 bit VBC_PAUNBUF1 0097CF 1 30 FB bmi L97CC 0097D1 1 8D 01 1C sta VDC_PA2 0097D4 1 C8 iny 0097D5 1 D0 F3 bne L97CA 0097D7 1 L97D7: 0097D7 1 2C 0F 18 bit VBC_PAUNBUF1 0097DA 1 30 FB bmi L97D7 0097DC 1 AD 0C 1C lda VDC_PCR2 0097DF 1 09 E0 ora #$E0 0097E1 1 8D 0C 1C sta VDC_PCR2 0097E4 1 A9 00 lda #$00 0097E6 1 8D 03 1C sta VDC_DDRA2 0097E9 1 20 F9 97 jsr L97F9 0097EC 1 A4 3F ldy JOBN 0097EE 1 .if CompileDrive >= DRIVE_1571_05 0097EE 1 jmp LAAAD 0097EE 1 .else 0097EE 1 B9 00 00 lda JOBS0,y 0097F1 1 .endif 0097F1 1 49 30 eor #$30 0097F3 1 99 00 00 sta JOBS0,y 0097F6 1 4C 4F 94 jmp L944F 0097F9 1 L97F9: 0097F9 1 A9 00 lda #$00 0097FB 1 85 2E sta SAVPNT 0097FD 1 85 30 sta BUFPNT 0097FF 1 85 4F sta NXTPNT 009801 1 A5 31 lda BUFPNT + 1 009803 1 85 4E sta NXTBF 009805 1 A9 01 lda #$01 009807 1 85 31 sta BUFPNT + 1 009809 1 85 2F sta SAVPNT + 1 00980B 1 A9 BB lda #$BB 00980D 1 85 34 sta GCRPNT 00980F 1 85 36 sta BYTCNT 009811 1 20 D9 98 jsr L98D9 009814 1 A5 52 lda BTAB 009816 1 85 38 sta BID 009818 1 A4 36 ldy BYTCNT 00981A 1 A5 53 lda BTAB + 1 00981C 1 91 2E sta (SAVPNT),y 00981E 1 C8 iny 00981F 1 A5 54 lda BTAB + 2 009821 1 91 2E sta (SAVPNT),y 009823 1 C8 iny 009824 1 A5 55 lda BTAB + 3 009826 1 91 2E sta (SAVPNT),y 009828 1 C8 iny 009829 1 84 36 sty BYTCNT 00982B 1 L982B: 00982B 1 20 D9 98 jsr L98D9 00982E 1 A4 36 ldy BYTCNT 009830 1 A5 52 lda BTAB 009832 1 91 2E sta (SAVPNT),y 009834 1 C8 iny 009835 1 A5 53 lda BTAB + 1 009837 1 91 2E sta (SAVPNT),y 009839 1 C8 iny 00983A 1 F0 0E beq L984A 00983C 1 A5 54 lda BTAB + 2 00983E 1 91 2E sta (SAVPNT),y 009840 1 C8 iny 009841 1 A5 55 lda BTAB + 3 009843 1 91 2E sta (SAVPNT),y 009845 1 C8 iny 009846 1 84 36 sty BYTCNT 009848 1 D0 E1 bne L982B 00984A 1 L984A: 00984A 1 A5 54 lda BTAB + 2 00984C 1 91 30 sta (BUFPNT),y 00984E 1 C8 iny 00984F 1 A5 55 lda BTAB + 3 009851 1 91 30 sta (BUFPNT),y 009853 1 C8 iny 009854 1 84 36 sty BYTCNT 009856 1 L9856: 009856 1 20 D9 98 jsr L98D9 009859 1 A4 36 ldy BYTCNT 00985B 1 A5 52 lda BTAB 00985D 1 91 30 sta (BUFPNT),y 00985F 1 C8 iny 009860 1 A5 53 lda BTAB + 1 009862 1 91 30 sta (BUFPNT),y 009864 1 C8 iny 009865 1 A5 54 lda BTAB + 2 009867 1 91 30 sta (BUFPNT),y 009869 1 C8 iny 00986A 1 A5 55 lda BTAB + 3 00986C 1 91 30 sta (BUFPNT),y 00986E 1 C8 iny 00986F 1 84 36 sty BYTCNT 009871 1 C0 BB cpy #$BB 009873 1 90 E1 bcc L9856 009875 1 A9 45 lda #$45 009877 1 85 2E sta SAVPNT 009879 1 A5 31 lda BUFPNT + 1 00987B 1 85 2F sta SAVPNT + 1 00987D 1 A0 BA ldy #$BA 00987F 1 L987F: 00987F 1 B1 30 lda (BUFPNT),y 009881 1 91 2E sta (SAVPNT),y 009883 1 88 dey 009884 1 D0 F9 bne L987F 009886 1 B1 30 lda (BUFPNT),y 009888 1 91 2E sta (SAVPNT),y 00988A 1 A2 BB ldx #$BB 00988C 1 L988C: 00988C 1 BD 00 01 lda NODRV + 1,x 00988F 1 91 30 sta (BUFPNT),y 009891 1 C8 iny 009892 1 E8 inx 009893 1 D0 F7 bne L988C 009895 1 86 50 stx GCRFLG 009897 1 60 rts 009898 1 L9898: 009898 1 C9 20 cmp #$20 00989A 1 F0 02 beq L989E 00989C 1 D0 30 bne L98CE 00989E 1 L989E: 00989E 1 20 E9 F5 jsr LF5E9 0098A1 1 85 3A sta CHKSUM 0098A3 1 20 8F F7 jsr LF78F 0098A6 1 20 00 96 jsr L9600 0098A9 1 A0 BB ldy #$BB 0098AB 1 L98AB: 0098AB 1 B9 00 01 lda NODRV + 1,y 0098AE 1 L98AE: 0098AE 1 2C 0F 18 bit VBC_PAUNBUF1 0098B1 1 30 FB bmi L98AE 0098B3 1 4D 01 1C eor VDC_PA2 0098B6 1 D0 1C bne L98D4 0098B8 1 C8 iny 0098B9 1 D0 F0 bne L98AB 0098BB 1 L98BB: 0098BB 1 B1 30 lda (BUFPNT),y 0098BD 1 L98BD: 0098BD 1 2C 0F 18 bit VBC_PAUNBUF1 0098C0 1 30 FB bmi L98BD 0098C2 1 4D 01 1C eor VDC_PA2 0098C5 1 D0 0D bne L98D4 0098C7 1 C8 iny 0098C8 1 C0 FD cpy #$FD 0098CA 1 D0 EF bne L98BB 0098CC 1 F0 03 beq L98D1 0098CE 1 L98CE: 0098CE 1 20 0F 97 jsr L970F 0098D1 1 L98D1: 0098D1 1 A9 01 lda #$01 0098D3 1 2C .byte ASM_BIT3 0098D4 1 L98D4: 0098D4 1 A9 07 lda #$07 0098D6 1 4C B5 99 jmp L99B5 0098D9 1 L98D9: 0098D9 1 A4 34 ldy GCRPNT 0098DB 1 B1 30 lda (BUFPNT),y 0098DD 1 85 56 sta GTAB 0098DF 1 29 07 and #$07 0098E1 1 85 57 sta GTAB + 1 0098E3 1 C8 iny 0098E4 1 D0 06 bne L98EC 0098E6 1 A5 4E lda NXTBF 0098E8 1 85 31 sta BUFPNT + 1 0098EA 1 A4 4F ldy NXTPNT 0098EC 1 L98EC: 0098EC 1 B1 30 lda (BUFPNT),y 0098EE 1 85 58 sta GTAB + 2 0098F0 1 29 C0 and #$C0 0098F2 1 05 57 ora GTAB + 1 0098F4 1 85 57 sta GTAB + 1 0098F6 1 A5 58 lda GTAB + 2 0098F8 1 29 01 and #$01 0098FA 1 85 59 sta GTAB + 3 0098FC 1 C8 iny 0098FD 1 B1 30 lda (BUFPNT),y 0098FF 1 AA tax 009900 1 29 F0 and #$F0 009902 1 05 59 ora GTAB + 3 009904 1 85 59 sta GTAB + 3 009906 1 8A txa 009907 1 29 0F and #$0F 009909 1 85 5A sta GTAB + 4 00990B 1 C8 iny 00990C 1 B1 30 lda (BUFPNT),y 00990E 1 85 5B sta GTAB + 5 009910 1 29 80 and #$80 009912 1 05 5A ora GTAB + 4 009914 1 85 5A sta GTAB + 4 009916 1 A5 5B lda GTAB + 5 009918 1 29 03 and #$03 00991A 1 85 5C sta GTAB + 6 00991C 1 C8 iny 00991D 1 D0 08 bne L9927 00991F 1 A5 4E lda NXTBF 009921 1 85 31 sta BUFPNT + 1 009923 1 A4 4F ldy NXTPNT 009925 1 84 30 sty BUFPNT 009927 1 L9927: 009927 1 B1 30 lda (BUFPNT),y 009929 1 85 5D sta GTAB + 7 00992B 1 29 E0 and #$E0 00992D 1 05 5C ora GTAB + 6 00992F 1 85 5C sta GTAB + 6 009931 1 C8 iny 009932 1 84 34 sty GCRPNT 009934 1 A6 56 ldx GTAB 009936 1 BD 0D A0 lda LA00D,x 009939 1 A6 57 ldx GTAB + 1 00993B 1 1D 0D 9F ora L9F0D,x 00993E 1 85 52 sta BTAB 009940 1 A6 58 ldx GTAB + 2 009942 1 BD 0D A1 lda LA10D,x 009945 1 A6 59 ldx GTAB + 3 009947 1 1D 0F 9F ora L9F0D + 2,x 00994A 1 85 53 sta BTAB + 1 00994C 1 A6 5A ldx GTAB + 4 00994E 1 BD 1D 9F lda L9F0D + 16,x 009951 1 A6 5B ldx GTAB + 5 009953 1 1D 0D A2 ora LA20D,x 009956 1 85 54 sta BTAB + 2 009958 1 A6 5C ldx GTAB + 6 00995A 1 BD 2A 9F lda L9F0D + 29,x 00995D 1 A6 5D ldx GTAB + 7 00995F 1 1D 0D A3 ora LA30D,x 009962 1 85 55 sta BTAB + 3 009964 1 60 rts 009965 1 L9965: 009965 1 A9 00 lda #$00 009967 1 85 34 sta GCRPNT 009969 1 85 2E sta SAVPNT 00996B 1 85 36 sta BYTCNT 00996D 1 A9 01 lda #$01 00996F 1 85 4E sta NXTBF 009971 1 A9 BA lda #$BA 009973 1 85 4F sta NXTPNT 009975 1 A5 31 lda BUFPNT + 1 009977 1 85 2F sta SAVPNT + 1 009979 1 20 D9 98 jsr L98D9 00997C 1 A5 52 lda BTAB 00997E 1 85 38 sta BID 009980 1 A4 36 ldy BYTCNT 009982 1 A5 53 lda BTAB + 1 009984 1 91 2E sta (SAVPNT),y 009986 1 C8 iny 009987 1 A5 54 lda BTAB + 2 009989 1 91 2E sta (SAVPNT),y 00998B 1 C8 iny 00998C 1 A5 55 lda BTAB + 3 00998E 1 91 2E sta (SAVPNT),y 009990 1 C8 iny 009991 1 L9991: 009991 1 84 36 sty BYTCNT 009993 1 20 D9 98 jsr L98D9 009996 1 A4 36 ldy BYTCNT 009998 1 A5 52 lda BTAB 00999A 1 91 2E sta (SAVPNT),y 00999C 1 C8 iny 00999D 1 F0 11 beq L99B0 00999F 1 A5 53 lda BTAB + 1 0099A1 1 91 2E sta (SAVPNT),y 0099A3 1 C8 iny 0099A4 1 A5 54 lda BTAB + 2 0099A6 1 91 2E sta (SAVPNT),y 0099A8 1 C8 iny 0099A9 1 A5 55 lda BTAB + 3 0099AB 1 91 2E sta (SAVPNT),y 0099AD 1 C8 iny 0099AE 1 D0 E1 bne L9991 0099B0 1 L99B0: 0099B0 1 A5 2F lda SAVPNT + 1 0099B2 1 85 31 sta BUFPNT + 1 0099B4 1 60 rts 0099B5 1 L99B5: 0099B5 1 A4 3F ldy JOBN 0099B7 1 99 00 00 sta JOBS0,y 0099BA 1 A5 50 lda GCRFLG 0099BC 1 F0 03 beq L99C1 0099BE 1 20 F9 97 jsr L97F9 0099C1 1 L99C1: 0099C1 1 20 8F F9 jsr LF98F 0099C4 1 A6 49 ldx SAVSP 0099C6 1 9A txs 0099C7 1 4C C8 92 jmp L92C8 0099CA 1 L99CA: 0099CA 1 AD 07 1C lda VDC_T1HL2 0099CD 1 8D 05 1C sta VDC_T1HC2 0099D0 1 AD 00 1C lda VDC_PB2 0099D3 1 29 10 and #VDC_PB2_WRITEPROTECT 0099D5 1 C5 1E cmp LWPT 0099D7 1 85 1E sta LWPT 0099D9 1 D0 07 bne L99E2 0099DB 1 AD AB 02 lda CNTMOTOR1570 0099DE 1 D0 10 bne L99F0 0099E0 1 F0 1C beq L99FE 0099E2 1 L99E2: 0099E2 1 A9 FF lda #$FF 0099E4 1 8D AB 02 sta CNTMOTOR1570 0099E7 1 20 64 87 jsr L8764 0099EA 1 0099EA 1 A9 01 85 1C SET_WPSW_DIRTY_NO_CR 0099EE 1 0099EE 1 D0 0E bne L99FE 0099F0 1 L99F0: 0099F0 1 CE AB 02 dec CNTMOTOR1570 0099F3 1 D0 09 bne L99FE 0099F5 1 A5 20 lda DRVST 0099F7 1 C9 00 cmp #$00 0099F9 1 D0 03 bne L99FE 0099FB 1 20 70 87 jsr L8770 0099FE 1 L99FE: 0099FE 1 AD FE 02 lda PHASE 009A01 1 F0 15 beq L9A18 009A03 1 C9 02 cmp #$02 009A05 1 D0 07 bne L9A0E 009A07 1 A9 00 lda #$00 009A09 1 8D FE 02 sta PHASE 009A0C 1 F0 0A beq L9A18 009A0E 1 L9A0E: 009A0E 1 85 4A sta STEPS 009A10 1 A9 02 lda #$02 009A12 1 8D FE 02 sta PHASE 009A15 1 4C 56 9A jmp L9A56 009A18 1 L9A18: 009A18 1 A6 3E ldx CDRIVE 009A1A 1 30 07 bmi L9A23 009A1C 1 A5 20 lda DRVST 009A1E 1 A8 tay 009A1F 1 C9 20 cmp #$20 009A21 1 D0 03 bne L9A26 009A23 1 L9A23: 009A23 1 .if CompileDrive >= DRIVE_1571_05 009A23 1 jmp L9AC6 009A23 1 .else 009A23 1 4C C9 9A jmp L9AC9 009A26 1 .endif 009A26 1 L9A26: 009A26 1 C6 48 dec ACLTIM 009A28 1 D0 1C bne L9A46 009A2A 1 98 tya 009A2B 1 10 04 bpl L9A31 009A2D 1 29 7F and #$7F 009A2F 1 85 20 sta DRVST 009A31 1 L9A31: 009A31 1 29 10 and #$10 009A33 1 F0 11 beq L9A46 009A35 1 C6 35 dec GCRERR 009A37 1 D0 0D bne L9A46 009A39 1 20 70 87 jsr L8770 009A3C 1 A9 FF lda #$FF 009A3E 1 85 3E sta CDRIVE 009A40 1 A9 00 lda #$00 009A42 1 85 20 sta DRVST 009A44 1 F0 DD beq L9A23 009A46 1 L9A46: 009A46 1 98 tya 009A47 1 29 40 and #$40 009A49 1 D0 03 bne L9A4E 009A4B 1 .if CompileDrive >= DRIVE_1571_05 009A4B 1 jmp L9AC6 009A4B 1 .else 009A4B 1 4C C9 9A jmp L9AC9 009A4E 1 .endif 009A4E 1 L9A4E: 009A4E 1 A5 62 lda NXTST 009A50 1 D0 50 bne L9AA2 009A52 1 A5 4A lda STEPS 009A54 1 F0 43 beq L9A99 009A56 1 L9A56: 009A56 1 A5 4A lda STEPS 009A58 1 10 59 bpl L9AB3 009A5A 1 98 tya 009A5B 1 48 pha 009A5C 1 A0 63 ldy #$63 009A5E 1 L9A5E: 009A5E 1 AD 0F 18 lda VBC_PAUNBUF1 009A61 1 6A ror a 009A62 1 08 php 009A63 1 AD 0F 18 lda VBC_PAUNBUF1 009A66 1 6A ror a 009A67 1 6A ror a 009A68 1 28 plp 009A69 1 29 80 and #$80 009A6B 1 90 04 bcc L9A71 009A6D 1 10 1D bpl L9A8C 009A6F 1 30 02 bmi L9A73 009A71 1 L9A71: 009A71 1 30 19 bmi L9A8C 009A73 1 L9A73: 009A73 1 88 dey 009A74 1 D0 E8 bne L9A5E 009A76 1 B0 14 bcs L9A8C 009A78 1 A5 7B lda ADRSED 009A7A 1 D0 10 bne L9A8C 009A7C 1 AD 00 1C lda VDC_PB2 009A7F 1 29 03 and #VDC_PB2_STEPPER 009A81 1 D0 09 bne L9A8C 009A83 1 68 pla 009A84 1 A8 tay 009A85 1 A9 00 lda #$00 009A87 1 85 4A sta STEPS 009A89 1 .if CompileDrive >= DRIVE_1571_05 009A89 1 jmp L9AC6 009A89 1 .else 009A89 1 4C C9 9A jmp L9AC9 009A8C 1 .endif 009A8C 1 L9A8C: 009A8C 1 68 pla 009A8D 1 A8 tay 009A8E 1 E6 4A inc STEPS 009A90 1 AD 00 1C lda VDC_PB2 009A93 1 38 sec 009A94 1 E9 01 sbc #$01 009A96 1 4C BB 9A jmp L9ABB 009A99 1 L9A99: 009A99 1 A9 02 lda #$02 009A9B 1 85 48 sta ACLTIM 009A9D 1 85 62 sta NXTST 009A9F 1 .if CompileDrive >= DRIVE_1571_05 009A9F 1 jmp L9AC6 009A9F 1 .else 009A9F 1 4C C9 9A jmp L9AC9 009AA2 1 .endif 009AA2 1 L9AA2: 009AA2 1 C6 48 dec ACLTIM 009AA4 1 .if CompileDrive >= DRIVE_1571_05 009AA4 1 bne L9AC6 009AA4 1 .else 009AA4 1 D0 23 bne L9AC9 009AA6 1 .endif 009AA6 1 A5 20 lda DRVST 009AA8 1 29 BF and #$BF 009AAA 1 85 20 sta DRVST 009AAC 1 A9 00 lda #$00 009AAE 1 85 62 sta NXTST 009AB0 1 .if CompileDrive >= DRIVE_1571_05 009AB0 1 jmp L9AC6 009AB0 1 .else 009AB0 1 4C C9 9A jmp L9AC9 009AB3 1 .endif 009AB3 1 L9AB3: 009AB3 1 C6 4A dec STEPS 009AB5 1 AD 00 1C lda VDC_PB2 009AB8 1 18 clc 009AB9 1 69 01 adc #$01 009ABB 1 L9ABB: 009ABB 1 29 03 and #$03 009ABD 1 85 4B sta TMP 009ABF 1 AD 00 1C lda VDC_PB2 009AC2 1 .if CompileDrive >= DRIVE_1571_05 009AC2 1 jmp LC038 009AC2 1 nop 009AC2 1 L9AC6: 009AC2 1 jmp LC03F 009AC2 1 .else 009AC2 1 29 FC and # ~ VDC_PB2_STEPPER 009AC4 1 05 4B ora TMP 009AC6 1 8D 00 1C sta VDC_PB2 009AC9 1 .endif 009AC9 1 L9AC9: 009AC9 1 60 rts 009ACA 1 L9ACA: 009ACA 1 21 22 23 24 .byte $21,$22,$23,$24,$25,$26,$27,$28,$29 009ACE 1 25 26 27 28 009AD2 1 29 009AD3 1 L9AD3: 009AD3 1 02 02 04 06 .byte $02,$02,$04,$06,$08,$08,$0B,$13,$16 009AD7 1 08 08 0B 13 009ADB 1 16 009ADC 1 L9ADC: 009ADC 1 A0 00 ldy #$00 009ADE 1 A2 1C ldx #$1C 009AE0 1 20 63 9D jsr L9D63 009AE3 1 20 73 9B jsr L9B73 009AE6 1 20 00 FE jsr LFE00 009AE9 1 A0 FF ldy #$FF 009AEB 1 L9AEB: 009AEB 1 A2 FF ldx #$FF 009AED 1 L9AED: 009AED 1 2C 00 1C bit VDC_PB2 009AF0 1 10 0B bpl L9AFD 009AF2 1 CA dex 009AF3 1 D0 F8 bne L9AED 009AF5 1 88 dey 009AF6 1 D0 F3 bne L9AEB 009AF8 1 L9AF8: 009AF8 1 A9 02 lda #$02 009AFA 1 4C 59 9D jmp L9D59 009AFD 1 L9AFD: 009AFD 1 A0 00 ldy #$00 009AFF 1 A2 00 ldx #$00 009B01 1 L9B01: 009B01 1 2C 00 1C bit VDC_PB2 009B04 1 10 FB bpl L9B01 009B06 1 L9B06: 009B06 1 AD 00 1C lda VDC_PB2 009B09 1 C8 iny 009B0A 1 D0 01 bne L9B0D 009B0C 1 E8 inx 009B0D 1 L9B0D: 009B0D 1 29 80 and #VDC_PB2_SYNC 009B0F 1 D0 F5 bne L9B06 009B11 1 A9 00 lda #$00 009B13 1 85 3B sta HINIB 009B15 1 8A txa 009B16 1 A2 08 ldx #$08 009B18 1 L9B18: 009B18 1 DD CA 9A cmp L9ACA,x 009B1B 1 F0 05 beq L9B22 009B1D 1 CA dex 009B1E 1 10 F8 bpl L9B18 009B20 1 30 D6 bmi L9AF8 009B22 1 L9B22: 009B22 1 BD D3 9A lda L9AD3,x 009B25 1 8D 26 06 sta BUFFER3 + 38 009B28 1 60 rts 009B29 1 L9B29: 009B29 1 A5 51 lda FTNUM 009B2B 1 10 2B bpl L9B58 009B2D 1 A9 60 lda #$60 009B2F 1 85 20 sta DRVST 009B31 1 AD B2 01 lda L01B2 009B34 1 D0 03 bne L9B39 009B36 1 A9 01 lda #$01 009B38 1 2C .byte ASM_BIT3 009B39 1 L9B39: 009B39 1 A9 24 lda #$24 009B3B 1 85 22 sta DRVTRK 009B3D 1 85 51 sta FTNUM 009B3F 1 C9 24 cmp #$24 009B41 1 20 F3 93 jsr L93F3 009B44 1 A9 A4 lda #$A4 009B46 1 85 4A sta STEPS 009B48 1 AD 00 1C lda VDC_PB2 009B4B 1 29 FC and # ~ VDC_PB2_STEPPER 009B4D 1 8D 00 1C sta VDC_PB2 009B50 1 A9 0A lda #$0A 009B52 1 8D 20 06 sta BUFFER3 + 32 009B55 1 4C CA 99 jmp L99CA 009B58 1 L9B58: 009B58 1 A0 00 ldy #$00 009B5A 1 B1 32 lda (HDRPNT),y 009B5C 1 C5 51 cmp FTNUM 009B5E 1 F0 07 beq L9B67 009B60 1 A5 51 lda FTNUM 009B62 1 91 32 sta (HDRPNT),y 009B64 1 4C CA 99 jmp L99CA 009B67 1 L9B67: 009B67 1 AD 00 1C lda VDC_PB2 009B6A 1 29 10 and #VDC_PB2_WRITEPROTECT 009B6C 1 D0 1B bne L9B89 009B6E 1 A9 08 lda #$08 009B70 1 4C 51 9D jmp L9D51 009B73 1 L9B73: 009B73 1 A2 14 ldx #$14 009B75 1 A9 FF lda #$FF 009B77 1 L9B77: 009B77 1 2C 0F 18 bit VBC_PAUNBUF1 009B7A 1 30 FB bmi L9B77 009B7C 1 8D 01 1C sta VDC_PA2 009B7F 1 2C 00 1C bit VDC_PB2 009B82 1 88 dey 009B83 1 D0 F2 bne L9B77 009B85 1 CA dex 009B86 1 D0 EF bne L9B77 009B88 1 60 rts 009B89 1 L9B89: 009B89 1 A5 3B lda HINIB 009B8B 1 10 03 bpl L9B90 009B8D 1 20 DC 9A jsr L9ADC 009B90 1 L9B90: 009B90 1 AD 26 06 lda BUFFER3 + 38 009B93 1 18 clc 009B94 1 A9 03 lda #$03 009B96 1 85 33 sta HDRPNT + 1 009B98 1 A9 00 lda #$00 009B9A 1 85 32 sta HDRPNT 009B9C 1 8D 28 06 sta BUFFER3 + 40 009B9F 1 A0 00 ldy #$00 009BA1 1 L9BA1: 009BA1 1 A5 39 lda HBID 009BA3 1 91 32 sta (HDRPNT),y 009BA5 1 C8 iny 009BA6 1 A9 00 lda #$00 009BA8 1 91 32 sta (HDRPNT),y 009BAA 1 C8 iny 009BAB 1 AD 28 06 lda BUFFER3 + 40 009BAE 1 91 32 sta (HDRPNT),y 009BB0 1 C8 iny 009BB1 1 A5 51 lda FTNUM 009BB3 1 91 32 sta (HDRPNT),y 009BB5 1 C8 iny 009BB6 1 A5 13 lda DiskID0 + 1 009BB8 1 91 32 sta (HDRPNT),y 009BBA 1 C8 iny 009BBB 1 A5 12 lda DiskID0 009BBD 1 91 32 sta (HDRPNT),y 009BBF 1 C8 iny 009BC0 1 A9 0F lda #$0F 009BC2 1 91 32 sta (HDRPNT),y 009BC4 1 C8 iny 009BC5 1 91 32 sta (HDRPNT),y 009BC7 1 C8 iny 009BC8 1 98 tya 009BC9 1 48 pha 009BCA 1 A2 07 ldx #$07 009BCC 1 A9 00 lda #$00 009BCE 1 85 3A sta CHKSUM 009BD0 1 L9BD0: 009BD0 1 88 dey 009BD1 1 B1 32 lda (HDRPNT),y 009BD3 1 45 3A eor CHKSUM 009BD5 1 85 3A sta CHKSUM 009BD7 1 CA dex 009BD8 1 D0 F6 bne L9BD0 009BDA 1 91 32 sta (HDRPNT),y 009BDC 1 68 pla 009BDD 1 A8 tay 009BDE 1 EE 28 06 inc BUFFER3 + 40 009BE1 1 AD 28 06 lda BUFFER3 + 40 009BE4 1 C5 43 cmp SECTR 009BE6 1 90 B9 bcc L9BA1 009BE8 1 A9 03 lda #$03 009BEA 1 85 31 sta BUFPNT + 1 009BEC 1 20 30 FE jsr LFE30 009BEF 1 A0 BA ldy #$BA 009BF1 1 L9BF1: 009BF1 1 B1 32 lda (HDRPNT),y 009BF3 1 A2 45 ldx #$45 009BF5 1 86 32 stx HDRPNT 009BF7 1 91 32 sta (HDRPNT),y 009BF9 1 A2 00 ldx #$00 009BFB 1 86 32 stx HDRPNT 009BFD 1 88 dey 009BFE 1 C0 FF cpy #$FF 009C00 1 D0 EF bne L9BF1 009C02 1 A0 44 ldy #$44 009C04 1 L9C04: 009C04 1 B9 BB 01 lda L01BB,y 009C07 1 91 32 sta (HDRPNT),y 009C09 1 88 dey 009C0A 1 10 F8 bpl L9C04 009C0C 1 18 clc 009C0D 1 A9 03 lda #$03 009C0F 1 69 02 adc #$02 009C11 1 85 31 sta BUFPNT + 1 009C13 1 A9 00 lda #$00 009C15 1 A8 tay 009C16 1 L9C16: 009C16 1 91 30 sta (BUFPNT),y 009C18 1 C8 iny 009C19 1 D0 FB bne L9C16 009C1B 1 20 E9 F5 jsr LF5E9 009C1E 1 85 3A sta CHKSUM 009C20 1 20 8F F7 jsr LF78F 009C23 1 A9 00 lda #$00 009C25 1 85 1B sta ACTJOB 009C27 1 A2 06 ldx #$06 009C29 1 20 63 9D jsr L9D63 009C2C 1 L9C2C: 009C2C 1 A0 05 ldy #$05 009C2E 1 L9C2E: 009C2E 1 2C 0F 18 bit VBC_PAUNBUF1 009C31 1 30 FB bmi L9C2E 009C33 1 A9 FF lda #$FF 009C35 1 8D 01 1C sta VDC_PA2 009C38 1 2C 00 1C bit VDC_PB2 009C3B 1 88 dey 009C3C 1 D0 F0 bne L9C2E 009C3E 1 A2 0A ldx #$0A 009C40 1 A4 1B ldy ACTJOB 009C42 1 L9C42: 009C42 1 2C 0F 18 bit VBC_PAUNBUF1 009C45 1 30 FB bmi L9C42 009C47 1 B1 32 lda (HDRPNT),y 009C49 1 8D 01 1C sta VDC_PA2 009C4C 1 2C 00 1C bit VDC_PB2 009C4F 1 C8 iny 009C50 1 CA dex 009C51 1 D0 EF bne L9C42 009C53 1 A0 09 ldy #$09 009C55 1 L9C55: 009C55 1 2C 0F 18 bit VBC_PAUNBUF1 009C58 1 30 FB bmi L9C55 009C5A 1 A9 55 lda #$55 009C5C 1 8D 01 1C sta VDC_PA2 009C5F 1 2C 00 1C bit VDC_PB2 009C62 1 88 dey 009C63 1 D0 F0 bne L9C55 009C65 1 A9 FF lda #$FF 009C67 1 A0 05 ldy #$05 009C69 1 L9C69: 009C69 1 2C 0F 18 bit VBC_PAUNBUF1 009C6C 1 30 FB bmi L9C69 009C6E 1 8D 01 1C sta VDC_PA2 009C71 1 2C 00 1C bit VDC_PB2 009C74 1 88 dey 009C75 1 D0 F2 bne L9C69 009C77 1 A0 BB ldy #$BB 009C79 1 L9C79: 009C79 1 2C 0F 18 bit VBC_PAUNBUF1 009C7C 1 30 FB bmi L9C79 009C7E 1 B9 00 01 lda NODRV + 1,y 009C81 1 8D 01 1C sta VDC_PA2 009C84 1 2C 00 1C bit VDC_PB2 009C87 1 C8 iny 009C88 1 D0 EF bne L9C79 009C8A 1 L9C8A: 009C8A 1 2C 0F 18 bit VBC_PAUNBUF1 009C8D 1 30 FB bmi L9C8A 009C8F 1 B1 30 lda (BUFPNT),y 009C91 1 8D 01 1C sta VDC_PA2 009C94 1 2C 00 1C bit VDC_PB2 009C97 1 C8 iny 009C98 1 D0 F0 bne L9C8A 009C9A 1 A9 55 lda #$55 009C9C 1 AC 26 06 ldy BUFFER3 + 38 009C9F 1 L9C9F: 009C9F 1 2C 0F 18 bit VBC_PAUNBUF1 009CA2 1 30 FB bmi L9C9F 009CA4 1 8D 01 1C sta VDC_PA2 009CA7 1 2C 00 1C bit VDC_PB2 009CAA 1 88 dey 009CAB 1 D0 F2 bne L9C9F 009CAD 1 A5 1B lda ACTJOB 009CAF 1 18 clc 009CB0 1 69 0A adc #$0A 009CB2 1 85 1B sta ACTJOB 009CB4 1 CE 28 06 dec BUFFER3 + 40 009CB7 1 F0 03 beq L9CBC 009CB9 1 4C 2C 9C jmp L9C2C 009CBC 1 L9CBC: 009CBC 1 2C 0F 18 bit VBC_PAUNBUF1 009CBF 1 30 FB bmi L9CBC 009CC1 1 2C 00 1C bit VDC_PB2 009CC4 1 L9CC4: 009CC4 1 2C 0F 18 bit VBC_PAUNBUF1 009CC7 1 30 FB bmi L9CC4 009CC9 1 2C 00 1C bit VDC_PB2 009CCC 1 20 00 FE jsr LFE00 009CCF 1 A9 C8 lda #$C8 009CD1 1 8D 23 06 sta BUFFER3 + 35 009CD4 1 L9CD4: 009CD4 1 A9 00 lda #$00 009CD6 1 85 1B sta ACTJOB 009CD8 1 A5 43 lda SECTR 009CDA 1 8D 28 06 sta BUFFER3 + 40 009CDD 1 L9CDD: 009CDD 1 20 54 97 jsr L9754 009CE0 1 A2 0A ldx #$0A 009CE2 1 A4 1B ldy ACTJOB 009CE4 1 L9CE4: 009CE4 1 B1 32 lda (HDRPNT),y 009CE6 1 L9CE6: 009CE6 1 2C 0F 18 bit VBC_PAUNBUF1 009CE9 1 30 FB bmi L9CE6 009CEB 1 CD 01 1C cmp VDC_PA2 009CEE 1 D0 0E bne L9CFE 009CF0 1 C8 iny 009CF1 1 CA dex 009CF2 1 D0 F0 bne L9CE4 009CF4 1 18 clc 009CF5 1 A5 1B lda ACTJOB 009CF7 1 69 0A adc #$0A 009CF9 1 85 1B sta ACTJOB 009CFB 1 4C 08 9D jmp L9D08 009CFE 1 L9CFE: 009CFE 1 CE 23 06 dec BUFFER3 + 35 009D01 1 D0 D1 bne L9CD4 009D03 1 A9 06 lda #$06 009D05 1 4C 51 9D jmp L9D51 009D08 1 L9D08: 009D08 1 20 54 97 jsr L9754 009D0B 1 A0 BB ldy #$BB 009D0D 1 L9D0D: 009D0D 1 B9 00 01 lda NODRV + 1,y 009D10 1 L9D10: 009D10 1 2C 0F 18 bit VBC_PAUNBUF1 009D13 1 30 FB bmi L9D10 009D15 1 CD 01 1C cmp VDC_PA2 009D18 1 D0 E4 bne L9CFE 009D1A 1 C8 iny 009D1B 1 D0 F0 bne L9D0D 009D1D 1 L9D1D: 009D1D 1 B1 30 lda (BUFPNT),y 009D1F 1 L9D1F: 009D1F 1 2C 0F 18 bit VBC_PAUNBUF1 009D22 1 30 FB bmi L9D1F 009D24 1 CD 01 1C cmp VDC_PA2 009D27 1 D0 D5 bne L9CFE 009D29 1 C8 iny 009D2A 1 D0 F1 bne L9D1D 009D2C 1 CE 28 06 dec BUFFER3 + 40 009D2F 1 D0 AC bne L9CDD 009D31 1 E6 51 inc FTNUM 009D33 1 A5 51 lda FTNUM 009D35 1 2C B1 01 bit L01B1 009D38 1 30 03 bmi L9D3D 009D3A 1 C9 24 cmp #$24 009D3C 1 2C .byte ASM_BIT3 009D3D 1 L9D3D: 009D3D 1 C9 47 cmp #$47 009D3F 1 B0 03 bcs L9D44 009D41 1 4C CA 99 jmp L99CA 009D44 1 L9D44: 009D44 1 A9 FF lda #$FF 009D46 1 85 51 sta FTNUM 009D48 1 A9 00 lda #$00 009D4A 1 85 50 sta GCRFLG 009D4C 1 A9 01 lda #$01 009D4E 1 4C B5 99 jmp L99B5 009D51 1 L9D51: 009D51 1 CE 20 06 dec BUFFER3 + 32 009D54 1 F0 03 beq L9D59 009D56 1 4C CA 99 jmp L99CA 009D59 1 L9D59: 009D59 1 A0 FF ldy #$FF 009D5B 1 84 51 sty FTNUM 009D5D 1 C8 iny 009D5E 1 84 50 sty GCRFLG 009D60 1 4C B5 99 jmp L99B5 009D63 1 L9D63: 009D63 1 AD 0C 1C lda VDC_PCR2 009D66 1 29 1F and #$1F 009D68 1 09 C0 ora #$C0 009D6A 1 8D 0C 1C sta VDC_PCR2 009D6D 1 A9 FF lda #$FF 009D6F 1 8D 03 1C sta VDC_DDRA2 009D72 1 A9 55 lda #$55 009D74 1 A0 00 ldy #$00 009D76 1 L9D76: 009D76 1 2C 0F 18 bit VBC_PAUNBUF1 009D79 1 30 FB bmi L9D76 009D7B 1 2C 00 1C bit VDC_PB2 009D7E 1 8D 01 1C sta VDC_PA2 009D81 1 88 dey 009D82 1 D0 F2 bne L9D76 009D84 1 CA dex 009D85 1 D0 EF bne L9D76 009D87 1 60 rts 009D88 1 L9D88: 009D88 1 48 pha 009D89 1 8A txa 009D8A 1 48 pha 009D8B 1 98 tya 009D8C 1 48 pha 009D8D 1 AD 0D 40 lda CIA_ICR 009D90 1 29 08 and #CIA_ICR_B_SP 009D92 1 F0 26 beq L9DBA 009D94 1 2C AF 02 bit FLGMODE1570 009D97 1 30 21 bmi L9DBA 009D99 1 AD 0F 18 lda VBC_PAUNBUF1 009D9C 1 09 20 ora #VBC_PA1_20 009D9E 1 8D 0F 18 sta VBC_PAUNBUF1 009DA1 1 A9 DE lda #$DE 009DA3 1 8D A9 02 sta VIRQJOB1570 009DA6 1 A9 9D lda #$9D 009DA8 1 8D AA 02 sta VIRQJOB1570 + 1 009DAB 1 A9 40 lda #$40 009DAD 1 8D 07 1C sta VDC_T1HL2 009DB0 1 8D 05 1C sta VDC_T1HC2 009DB3 1 A9 00 lda #$00 009DB5 1 85 62 sta NXTST 009DB7 1 4C EA 9D jmp L9DEA 009DBA 1 L9DBA: 009DBA 1 AD 0D 18 lda VBC_IFR1 009DBD 1 29 02 and #$02 009DBF 1 F0 03 beq L9DC4 009DC1 1 20 53 E8 jsr SetATNPending ; Set the ATN pending flag to mark that the bus must be processed 009DC4 1 L9DC4: 009DC4 1 AD 0D 1C lda VDC_IFR2 009DC7 1 0A asl a 009DC8 1 10 03 bpl L9DCD 009DCA 1 20 B0 F2 jsr LF2B0 009DCD 1 L9DCD: 009DCD 1 BA tsx 009DCE 1 BD 04 01 lda L0104,x 009DD1 1 29 10 and #$10 009DD3 1 F0 03 beq L9DD8 009DD5 1 20 B0 F2 jsr LF2B0 009DD8 1 L9DD8: 009DD8 1 68 pla 009DD9 1 A8 tay 009DDA 1 68 pla 009DDB 1 AA tax 009DDC 1 68 pla 009DDD 1 40 rti 009DDE 1 L9DDE: 009DDE 1 48 pha 009DDF 1 8A txa 009DE0 1 48 pha 009DE1 1 98 tya 009DE2 1 48 pha 009DE3 1 AD 0D 40 lda CIA_ICR 009DE6 1 29 08 and #CIA_ICR_B_SP 009DE8 1 F0 08 beq L9DF2 009DEA 1 L9DEA: 009DEA 1 A5 37 lda BITCNT 009DEC 1 09 40 ora #$40 009DEE 1 85 37 sta BITCNT 009DF0 1 D0 22 bne L9E14 009DF2 1 L9DF2: 009DF2 1 AD 0D 18 lda VBC_IFR1 009DF5 1 29 02 and #$02 009DF7 1 F0 07 beq L9E00 009DF9 1 2C 01 18 bit VBC_PA1 009DFC 1 A9 01 lda #$01 009DFE 1 85 7C sta ATNPND 009E00 1 L9E00: 009E00 1 BA tsx 009E01 1 BD 04 01 lda L0104,x 009E04 1 29 10 and #$10 009E06 1 F0 03 beq L9E0B 009E08 1 20 BA 92 jsr L92BA 009E0B 1 L9E0B: 009E0B 1 AD 0D 1C lda VDC_IFR2 009E0E 1 0A asl a 009E0F 1 10 03 bpl L9E14 009E11 1 20 BA 92 jsr L92BA 009E14 1 L9E14: 009E14 1 68 pla 009E15 1 A8 tay 009E16 1 68 pla 009E17 1 AA tax 009E18 1 68 pla 009E19 1 40 rti 009E1A 1 empty9e1a: 009E1A 1 009E1A 1 FF FF FF FF FillUntil $9F09 009E1E 1 FF FF FF FF 009E22 1 FF FF FF FF 009F09 1 009F09 1 08 00 01 FF .byte $08,$00,$01,$FF 009F0D 1 009F0D 1 L9F0D: 009F0D 1 0C 04 05 FF .byte $0C,$04,$05,$FF,$FF,$02,$03,$FF 009F11 1 FF 02 03 FF 009F15 1 0F 06 07 FF .byte $0F,$06,$07,$FF,$09,$0A,$0B,$FF 009F19 1 09 0A 0B FF 009F1D 1 0D 0E 80 FF .byte $0D,$0E,$80,$FF,$00,$00,$10,$40 009F21 1 00 00 10 40 009F25 1 FF 20 C0 60 .byte $FF,$20,$C0,$60,$40,$A0,$50,$E0 009F29 1 40 A0 50 E0 009F2D 1 FF FF FF 02 .byte $FF,$FF,$FF,$02,$20,$08,$30,$FF 009F31 1 20 08 30 FF 009F35 1 FF 00 F0 FF .byte $FF,$00,$F0,$FF,$60,$01,$70,$FF 009F39 1 60 01 70 FF 009F3D 1 FF FF 90 03 .byte $FF,$FF,$90,$03,$A0,$0C,$B0,$FF 009F41 1 A0 0C B0 FF 009F45 1 FF 04 D0 FF .byte $FF,$04,$D0,$FF,$E0,$05,$80,$FF 009F49 1 E0 05 80 FF 009F4D 1 90 FF 08 0C .byte $90,$FF,$08,$0C,$FF,$0F,$09,$0D 009F51 1 FF 0F 09 0D 009F55 1 80 02 FF FF .byte $80,$02,$FF,$FF,$FF,$03,$FF,$FF 009F59 1 FF 03 FF FF 009F5D 1 00 FF FF 0F .byte $00,$FF,$FF,$0F,$FF,$0F,$FF,$FF 009F61 1 FF 0F FF FF 009F65 1 10 06 FF FF .byte $10,$06,$FF,$FF,$FF,$07,$00,$20 009F69 1 FF 07 00 20 009F6D 1 A0 FF FF 06 .byte $A0,$FF,$FF,$06,$FF,$09,$FF,$FF 009F71 1 FF 09 FF FF 009F75 1 C0 0A FF FF .byte $C0,$0A,$FF,$FF,$FF,$0B,$FF,$FF 009F79 1 FF 0B FF FF 009F7D 1 40 FF FF 07 .byte $40,$FF,$FF,$07,$FF,$0D,$FF,$FF 009F81 1 FF 0D FF FF 009F85 1 50 0E FF FF .byte $50,$0E,$FF,$FF,$FF,$FF,$10,$30 009F89 1 FF FF 10 30 009F8D 1 B0 FF 00 04 .byte $B0,$FF,$00,$04,$02,$06,$0A,$0E 009F91 1 02 06 0A 0E 009F95 1 80 FF FF FF .byte $80,$FF,$FF,$FF,$FF,$FF,$FF,$FF 009F99 1 FF FF FF FF 009F9D 1 20 FF 08 09 .byte $20,$FF,$08,$09,$80,$10,$C0,$50 009FA1 1 80 10 C0 50 009FA5 1 30 30 F0 70 .byte $30,$30,$F0,$70,$90,$B0,$D0,$FF 009FA9 1 90 B0 D0 FF 009FAD 1 FF FF 00 0A .byte $FF,$FF,$00,$0A,$FF,$FF,$FF,$FF 009FB1 1 FF FF FF FF 009FB5 1 F0 .byte $F0 009FB6 1 L9FB6: 009FB6 1 00 brk 009FB7 1 EA nop 009FB8 1 L9FB8: 009FB8 1 B5 00 lda JOBS0,x 009FBA 1 30 FC bmi L9FB8 009FBC 1 60 rts 009FBD 1 009FBD 1 L9FBD: 009FBD 1 60 FF 01 0B .byte $60,$FF,$01,$0B,$FF,$FF,$FF,$FF 009FC1 1 FF FF FF FF 009FC5 1 70 FF FF FF .byte $70,$FF,$FF,$FF,$FF,$FF,$C0,$F0 009FC9 1 FF FF C0 F0 009FCD 1 D0 FF 01 05 .byte $D0,$FF,$01,$05,$03,$07,$0B,$FF 009FD1 1 03 07 0B FF 009FD5 1 90 FF FF FF .byte $90,$FF,$FF,$FF,$FF,$FF,$FF,$FF 009FD9 1 FF FF FF FF 009FDD 1 A0 FF 0C 0D .byte $A0,$FF,$0C,$0D,$FF,$FF,$FF,$FF 009FE1 1 FF FF FF FF 009FE5 1 B0 FF FF FF .byte $B0,$FF,$FF,$FF,$FF,$FF,$40,$60 009FE9 1 FF FF 40 60 009FED 1 E0 FF 04 0E .byte $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF 009FF1 1 FF FF FF FF 009FF5 1 D0 FF FF FF .byte $D0,$FF,$FF,$FF,$FF,$FF,$FF,$FF 009FF9 1 FF FF FF FF 009FFD 1 E0 FF 05 FF .byte $E0,$FF,$05,$FF,$FF,$FF,$FF,$FF 00A001 1 FF FF FF FF 00A005 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$50,$70 00A009 1 FF FF 50 70 00A00D 1 LA00D: 00A00D 1 0C 04 05 FF .byte $0C,$04,$05,$FF,$FF,$02,$03,$FF 00A011 1 FF 02 03 FF 00A015 1 0F 06 07 FF .byte $0F,$06,$07,$FF,$09,$0A,$0B,$FF 00A019 1 09 0A 0B FF 00A01D 1 0D 0E 80 FF .byte $0D,$0E,$80,$FF,$00,$00,$10,$40 00A021 1 00 00 10 40 00A025 1 FF 20 C0 60 .byte $FF,$20,$C0,$60,$40,$A0,$50,$E0 00A029 1 40 A0 50 E0 00A02D 1 FF FF FF 02 .byte $FF,$FF,$FF,$02,$20,$08,$30,$30 00A031 1 20 08 30 30 00A035 1 30 00 F0 FF .byte $30,$00,$F0,$FF,$60,$01,$70,$FF 00A039 1 60 01 70 FF 00A03D 1 FF FF 90 03 .byte $FF,$FF,$90,$03,$A0,$0C,$B0,$FF 00A041 1 A0 0C B0 FF 00A045 1 FF 04 D0 FF .byte $FF,$04,$D0,$FF,$E0,$05,$80,$FF 00A049 1 E0 05 80 FF 00A04D 1 90 FF 08 0C .byte $90,$FF,$08,$0C,$FF,$0F,$09,$0D 00A051 1 FF 0F 09 0D 00A055 1 80 80 80 80 .byte $80,$80,$80,$80,$80,$80,$80,$80 00A059 1 80 80 80 80 00A05D 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 00A061 1 00 00 00 00 00A065 1 10 10 10 10 .byte $10,$10,$10,$10,$10,$10,$10,$10 00A069 1 10 10 10 10 00A06D 1 A0 FF FF 06 .byte $A0,$FF,$FF,$06,$FF,$09,$FF,$FF 00A071 1 FF 09 FF FF 00A075 1 C0 C0 C0 C0 .byte $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 00A079 1 C0 C0 C0 C0 00A07D 1 40 40 40 40 .byte $40,$40,$40,$40,$40,$40,$40,$40 00A081 1 40 40 40 40 00A085 1 50 50 50 50 .byte $50,$50,$50,$50,$50,$50,$50,$50 00A089 1 50 50 50 50 00A08D 1 B0 FF 00 04 .byte $B0,$FF,$00,$04,$02,$06,$0A,$0E 00A091 1 02 06 0A 0E 00A095 1 80 80 80 80 .byte $80,$80,$80,$80,$80,$80,$80,$80 00A099 1 80 80 80 80 00A09D 1 20 20 20 20 .byte $20,$20,$20,$20,$20,$20,$20,$20 00A0A1 1 20 20 20 20 00A0A5 1 30 30 30 30 .byte $30,$30,$30,$30,$30,$30,$30,$30 00A0A9 1 30 30 30 30 00A0AD 1 FF FF 00 0A .byte $FF,$FF,$00,$0A,$0A,$0A,$0A,$0A 00A0B1 1 0A 0A 0A 0A 00A0B5 1 F0 F0 F0 F0 .byte $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 00A0B9 1 F0 F0 F0 F0 00A0BD 1 60 60 60 60 .byte $60,$60,$60,$60,$60,$60,$60,$60 00A0C1 1 60 60 60 60 00A0C5 1 70 70 70 70 .byte $70,$70,$70,$70,$70,$70,$70,$70 00A0C9 1 70 70 70 70 00A0CD 1 D0 FF 01 05 .byte $D0,$FF,$01,$05,$03,$07,$0B,$FF 00A0D1 1 03 07 0B FF 00A0D5 1 90 90 90 90 .byte $90,$90,$90,$90,$90,$90,$90,$90 00A0D9 1 90 90 90 90 00A0DD 1 A0 A0 A0 A0 .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 00A0E1 1 A0 A0 A0 A0 00A0E5 1 B0 B0 B0 B0 .byte $B0,$B0,$B0,$B0,$B0,$B0,$B0,$B0 00A0E9 1 B0 B0 B0 B0 00A0ED 1 E0 FF 04 0E .byte $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF 00A0F1 1 FF FF FF FF 00A0F5 1 D0 D0 D0 D0 .byte $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0 00A0F9 1 D0 D0 D0 D0 00A0FD 1 E0 E0 E0 E0 .byte $E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0 00A101 1 E0 E0 E0 E0 00A105 1 05 05 05 05 .byte $05,$05,$05,$05,$05,$05,$50,$70 00A109 1 05 05 50 70 00A10D 1 00A10D 1 LA10D: 00A10D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A111 1 FF FF FF FF 00A115 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A119 1 FF FF FF FF 00A11D 1 FF FF 80 80 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 00A121 1 00 00 10 10 00A125 1 FF FF C0 C0 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 00A129 1 40 40 50 50 00A12D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 00A131 1 20 20 30 30 00A135 1 FF FF F0 F0 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 00A139 1 60 60 70 70 00A13D 1 FF FF 90 90 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 00A141 1 A0 A0 B0 B0 00A145 1 FF FF D0 D0 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 00A149 1 E0 E0 FF FF 00A14D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A151 1 FF FF FF FF 00A155 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A159 1 FF FF FF FF 00A15D 1 FF FF 80 80 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 00A161 1 00 00 10 10 00A165 1 FF FF C0 C0 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 00A169 1 40 40 50 50 00A16D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 00A171 1 20 20 30 30 00A175 1 FF FF F0 F0 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 00A179 1 60 60 70 70 00A17D 1 FF FF 90 90 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 00A181 1 A0 A0 B0 B0 00A185 1 FF FF D0 D0 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 00A189 1 E0 E0 FF FF 00A18D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A191 1 FF FF FF FF 00A195 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A199 1 FF FF FF FF 00A19D 1 FF FF 80 80 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 00A1A1 1 00 00 10 10 00A1A5 1 FF FF C0 C0 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 00A1A9 1 40 40 50 50 00A1AD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 00A1B1 1 20 20 30 30 00A1B5 1 FF FF F0 F0 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 00A1B9 1 60 60 70 70 00A1BD 1 FF FF 90 90 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 00A1C1 1 A0 A0 B0 B0 00A1C5 1 FF FF D0 D0 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 00A1C9 1 E0 E0 FF FF 00A1CD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A1D1 1 FF FF FF FF 00A1D5 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A1D9 1 FF FF FF FF 00A1DD 1 FF FF 80 80 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 00A1E1 1 00 00 10 10 00A1E5 1 FF FF C0 C0 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 00A1E9 1 40 40 50 50 00A1ED 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 00A1F1 1 20 20 30 30 00A1F5 1 FF FF F0 F0 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 00A1F9 1 60 60 70 70 00A1FD 1 FF FF 90 90 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 00A201 1 A0 A0 B0 B0 00A205 1 FF FF D0 D0 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 00A209 1 E0 E0 FF FF 00A20D 1 00A20D 1 LA20D: 00A20D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A211 1 FF FF FF FF 00A215 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A219 1 FF FF FF FF 00A21D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A221 1 FF FF FF FF 00A225 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A229 1 FF FF FF FF 00A22D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$08,$08,$08,$08 00A231 1 08 08 08 08 00A235 1 00 00 00 00 .byte $00,$00,$00,$00,$01,$01,$01,$01 00A239 1 01 01 01 01 00A23D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C 00A241 1 0C 0C 0C 0C 00A245 1 04 04 04 04 .byte $04,$04,$04,$04,$05,$05,$05,$05 00A249 1 05 05 05 05 00A24D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A251 1 FF FF FF FF 00A255 1 02 02 02 02 .byte $02,$02,$02,$02,$03,$03,$03,$03 00A259 1 03 03 03 03 00A25D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F 00A261 1 0F 0F 0F 0F 00A265 1 06 06 06 06 .byte $06,$06,$06,$06,$07,$07,$07,$07 00A269 1 07 07 07 07 00A26D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$09,$09,$09,$09 00A271 1 09 09 09 09 00A275 1 0A 0A 0A 0A .byte $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B 00A279 1 0B 0B 0B 0B 00A27D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D 00A281 1 0D 0D 0D 0D 00A285 1 0E 0E 0E 0E .byte $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF 00A289 1 FF FF FF FF 00A28D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A291 1 FF FF FF FF 00A295 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A299 1 FF FF FF FF 00A29D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A2A1 1 FF FF FF FF 00A2A5 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A2A9 1 FF FF FF FF 00A2AD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$08,$08,$08,$08 00A2B1 1 08 08 08 08 00A2B5 1 00 00 00 00 .byte $00,$00,$00,$00,$01,$01,$01,$01 00A2B9 1 01 01 01 01 00A2BD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C 00A2C1 1 0C 0C 0C 0C 00A2C5 1 04 04 04 04 .byte $04,$04,$04,$04,$05,$05,$05,$05 00A2C9 1 05 05 05 05 00A2CD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A2D1 1 FF FF FF FF 00A2D5 1 02 02 02 02 .byte $02,$02,$02,$02,$03,$03,$03,$03 00A2D9 1 03 03 03 03 00A2DD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F 00A2E1 1 0F 0F 0F 0F 00A2E5 1 06 06 06 06 .byte $06,$06,$06,$06,$07,$07,$07,$07 00A2E9 1 07 07 07 07 00A2ED 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$09,$09,$09,$09 00A2F1 1 09 09 09 09 00A2F5 1 0A 0A 0A 0A .byte $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B 00A2F9 1 0B 0B 0B 0B 00A2FD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D 00A301 1 0D 0D 0D 0D 00A305 1 0E 0E 0E 0E .byte $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF 00A309 1 FF FF FF FF 00A30D 1 00A30D 1 LA30D: 00A30D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A311 1 FF FF FF FF 00A315 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A319 1 FF 0C 04 05 00A31D 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A321 1 FF 0F 06 07 00A325 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A329 1 FF 0D 0E FF 00A32D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A331 1 FF FF FF FF 00A335 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A339 1 FF 0C 04 05 00A33D 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A341 1 FF 0F 06 07 00A345 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A349 1 FF 0D 0E FF 00A34D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A351 1 FF FF FF FF 00A355 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A359 1 FF 0C 04 05 00A35D 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A361 1 FF 0F 06 07 00A365 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A369 1 FF 0D 0E FF 00A36D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A371 1 FF FF FF FF 00A375 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A379 1 FF 0C 04 05 00A37D 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A381 1 FF 0F 06 07 00A385 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A389 1 FF 0D 0E FF 00A38D 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A391 1 FF FF FF FF 00A395 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A399 1 FF 0C 04 05 00A39D 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A3A1 1 FF 0F 06 07 00A3A5 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A3A9 1 FF 0D 0E FF 00A3AD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A3B1 1 FF FF FF FF 00A3B5 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A3B9 1 FF 0C 04 05 00A3BD 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A3C1 1 FF 0F 06 07 00A3C5 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A3C9 1 FF 0D 0E FF 00A3CD 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A3D1 1 FF FF FF FF 00A3D5 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A3D9 1 FF 0C 04 05 00A3DD 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A3E1 1 FF 0F 06 07 00A3E5 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A3E9 1 FF 0D 0E FF 00A3ED 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00A3F1 1 FF FF FF FF 00A3F5 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00A3F9 1 FF 0C 04 05 00A3FD 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00A401 1 FF 0F 06 07 00A405 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00A409 1 FF 0D 0E FF 00A40D 1 00A40D 1 LA40D: 00A40D 1 A9 47 lda #MAXTRACK_DOUBLESIDED + 1 00A40F 1 8D D7 FE sta MAXTRACK_ADJUSTED 00A412 1 A9 03 lda #$03 00A414 1 20 D3 D6 jsr LD6D3 00A417 1 A2 03 ldx #$03 00A419 1 A9 00 lda #$00 00A41B 1 8D B2 01 sta L01B2 00A41E 1 A9 F0 lda #$F0 00A420 1 85 3B sta HINIB 00A422 1 95 00 sta JOBS0,x 00A424 1 20 B6 9F jsr L9FB6 00A427 1 C9 02 cmp #$02 00A429 1 B0 45 bcs LA470 00A42B 1 A0 03 ldy #$03 00A42D 1 LA42D: 00A42D 1 A9 01 lda #$01 00A42F 1 85 0C sta TRACK3 00A431 1 A9 00 lda #$00 00A433 1 85 0D sta SECTOR3 00A435 1 A9 80 lda #$80 00A437 1 95 00 sta JOBS0,x 00A439 1 20 B6 9F jsr L9FB6 00A43C 1 C9 02 cmp #$02 00A43E 1 90 05 bcc LA445 00A440 1 88 dey 00A441 1 10 EA bpl LA42D 00A443 1 B0 2B bcs LA470 00A445 1 LA445: 00A445 1 .if CompileDrive >= DRIVE_1571 00A445 1 lda #$01 00A445 1 .else 00A445 1 60 rts 00A446 1 EA nop 00A447 1 .endif 00A447 1 8D B2 01 sta L01B2 00A44A 1 A9 F0 lda #$F0 00A44C 1 85 3B sta HINIB 00A44E 1 95 00 sta JOBS0,x 00A450 1 20 B6 9F jsr L9FB6 00A453 1 C9 02 cmp #$02 00A455 1 B0 19 bcs LA470 00A457 1 A0 03 ldy #$03 00A459 1 LA459: 00A459 1 A9 24 lda #$24 00A45B 1 85 0C sta TRACK3 00A45D 1 A9 00 lda #$00 00A45F 1 85 0D sta SECTOR3 00A461 1 A9 80 lda #$80 00A463 1 95 00 sta JOBS0,x 00A465 1 20 B6 9F jsr L9FB6 00A468 1 C9 02 cmp #$02 00A46A 1 B0 01 bcs LA46D 00A46C 1 60 rts 00A46D 1 LA46D: 00A46D 1 88 dey 00A46E 1 10 E9 bpl LA459 00A470 1 LA470: 00A470 1 A2 00 ldx #$00 00A472 1 2C 98 02 bit JOBRTN 00A475 1 8E 98 02 stx JOBRTN 00A478 1 10 01 bpl LA47B 00A47A 1 60 rts 00A47B 1 LA47B: 00A47B 1 4C 0A E6 jmp LE60A 00A47E 1 LA47E: 00A47E 1 8A txa 00A47F 1 A2 05 ldx #$05 00A481 1 D0 03 bne LA486 00A483 1 LA483: 00A483 1 8A txa 00A484 1 A2 0D ldx #$0D 00A486 1 LA486: 00A486 1 CA dex 00A487 1 D0 FD bne LA486 00A489 1 AA tax 00A48A 1 60 rts 00A48B 1 LA48B: 00A48B 1 A5 6D lda BMPNT 00A48D 1 8D AD 02 sta TMP1570 00A490 1 A5 6E lda BMPNT + 1 00A492 1 8D AE 02 sta TMP1570 + 1 00A495 1 60 rts 00A496 1 00A496 1 LA496: 00A496 1 AD AD 02 lda TMP1570 00A499 1 85 6D sta BMPNT 00A49B 1 AD AE 02 lda TMP1570 + 1 00A49E 1 85 6E sta BMPNT + 1 00A4A0 1 60 rts 00A4A1 1 ; -------------------- 00A4A1 1 00A4A1 1 LA4A1: 00A4A1 1 A6 7F ldx DRVNUM 00A4A3 1 00A4A3 1 BD FF 00 lda a:NODRV,x 00A4A6 1 F0 05 beq LA4AD 00A4A8 1 A9 74 lda #ERRORCODE_74_DRIVE_NOT_READY 00A4AA 1 .if CompileDrive >= DRIVE_1571_05 00A4AA 1 jsr LE645 00A4AA 1 .else 00A4AA 1 20 48 E6 jsr LE648 00A4AD 1 .endif 00A4AD 1 LA4AD: 00A4AD 1 20 19 F1 jsr LF119 00A4B0 1 20 DF F0 jsr LF0DF 00A4B3 1 .if CompileDrive >= DRIVE_1571_05 00A4B3 1 jmp LA4C2 00A4B3 1 .else 00A4B3 1 AD F9 02 lda WBAM 00A4B6 1 .endif 00A4B6 1 F0 07 beq LA4BF 00A4B8 1 09 80 ora #$80 00A4BA 1 8D F9 02 sta WBAM 00A4BD 1 D0 03 bne LA4C2 00A4BF 1 LA4BF: 00A4BF 1 20 8D A5 jsr LA58D 00A4C2 1 LA4C2: 00A4C2 1 20 8B A4 jsr LA48B 00A4C5 1 20 34 A5 jsr LA534 00A4C8 1 A5 80 lda TRACK 00A4CA 1 38 sec 00A4CB 1 E9 24 sbc #$24 00A4CD 1 A8 tay 00A4CE 1 B1 6D lda (BMPNT),y 00A4D0 1 48 pha 00A4D1 1 20 96 A4 jsr LA496 00A4D4 1 68 pla 00A4D5 1 60 rts 00A4D6 1 .if CompileDrive >= DRIVE_1571_05 00A4D6 1 .byte "DAVID G. SIRACUSA" 00A4D6 1 .elseif CompileDrive >= DRIVE_1571 00A4D6 1 .else 00A4D6 1 FF FF FF FF FillUntil $A4DD 00A4DA 1 FF FF FF 00A4DD 1 53 54 45 56 .byte "STEVE LAM",$0D 00A4E1 1 45 20 4C 41 00A4E5 1 4D 0D 00A4E7 1 .endif 00A4E7 1 00A4E7 1 FillUntil $A4E7 00A4E7 1 00A4E7 1 LA4E7: 00A4E7 1 A5 80 lda TRACK 00A4E9 1 38 sec 00A4EA 1 E9 24 sbc #$24 00A4EC 1 A8 tay 00A4ED 1 A5 81 lda SECTOR 00A4EF 1 4A lsr a 00A4F0 1 4A lsr a 00A4F1 1 4A lsr a 00A4F2 1 18 clc 00A4F3 1 79 DB A5 adc LA5DB,y 00A4F6 1 A8 tay 00A4F7 1 A5 81 lda SECTOR 00A4F9 1 29 07 and #$07 00A4FB 1 AA tax 00A4FC 1 B9 46 01 lda L0146,y 00A4FF 1 3D E9 EF and LEFE9,x 00A502 1 08 php 00A503 1 B9 46 01 lda L0146,y 00A506 1 28 plp 00A507 1 60 rts 00A508 1 LA508: 00A508 1 20 8B A4 jsr LA48B 00A50B 1 20 34 A5 jsr LA534 00A50E 1 A5 80 lda TRACK 00A510 1 38 sec 00A511 1 E9 24 sbc #$24 00A513 1 A8 tay 00A514 1 18 clc 00A515 1 B1 6D lda (BMPNT),y 00A517 1 69 01 adc #$01 00A519 1 91 6D sta (BMPNT),y 00A51B 1 4C 96 A4 jmp LA496 00A51E 1 LA51E: 00A51E 1 20 8B A4 jsr LA48B 00A521 1 20 34 A5 jsr LA534 00A524 1 A5 80 lda TRACK 00A526 1 38 sec 00A527 1 E9 24 sbc #$24 00A529 1 A8 tay 00A52A 1 38 sec 00A52B 1 B1 6D lda (BMPNT),y 00A52D 1 E9 01 sbc #$01 00A52F 1 91 6D sta (BMPNT),y 00A531 1 4C 96 A4 jmp LA496 00A534 1 LA534: 00A534 1 A2 0D ldx #$0D 00A536 1 B5 A7 lda BUF0,x 00A538 1 29 0F and #$0F 00A53A 1 AA tax 00A53B 1 BD E0 FE lda TableHighBytesOfBuffers,x 00A53E 1 85 6E sta BMPNT + 1 00A540 1 A9 DD lda #$DD 00A542 1 85 6D sta BMPNT 00A544 1 60 rts 00A545 1 LA545: 00A545 1 A5 6F lda T0 00A547 1 48 pha 00A548 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 00A548 1 jsr LAB8D 00A548 1 .endif 00A548 1 A5 80 lda TRACK 00A54A 1 38 sec 00A54B 1 E9 24 sbc #$24 00A54D 1 A8 tay 00A54E 1 48 pha 00A54F 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 00A54F 1 .else 00A54F 1 20 8B A4 jsr LA48B 00A552 1 .endif 00A552 1 20 34 A5 jsr LA534 00A555 1 B1 6D lda (BMPNT),y 00A557 1 48 pha 00A558 1 A9 00 lda #$00 00A55A 1 85 6F sta T0 00A55C 1 A9 01 lda #$01 00A55E 1 85 6E sta BMPNT + 1 00A560 1 B9 DB A5 lda LA5DB,y 00A563 1 18 clc 00A564 1 69 46 adc #$46 00A566 1 85 6D sta BMPNT 00A568 1 A0 02 ldy #$02 00A56A 1 LA56A: 00A56A 1 A2 07 ldx #$07 00A56C 1 LA56C: 00A56C 1 B1 6D lda (BMPNT),y 00A56E 1 3D E9 EF and LEFE9,x 00A571 1 F0 02 beq LA575 00A573 1 E6 6F inc T0 00A575 1 LA575: 00A575 1 CA dex 00A576 1 10 F4 bpl LA56C 00A578 1 88 dey 00A579 1 10 EF bpl LA56A 00A57B 1 68 pla 00A57C 1 C5 6F cmp T0 00A57E 1 F0 05 beq LA585 00A580 1 A9 71 lda #ERRORCODE_71_DIR_ERROR 00A582 1 20 45 E6 jsr LE645 00A585 1 LA585: 00A585 1 68 pla 00A586 1 A8 tay 00A587 1 68 pla 00A588 1 85 6F sta T0 00A58A 1 4C 96 A4 jmp LA496 00A58D 1 LA58D: 00A58D 1 AD 0F 18 lda VBC_PAUNBUF1 00A590 1 29 20 and #VBC_PA1_20 00A592 1 D0 03 bne LA597 00A594 1 LA594: 00A594 1 4C 8A D5 jmp LD58A 00A597 1 LA597: 00A597 1 AD D7 FE lda MAXTRACK_ADJUSTED 00A59A 1 C9 25 cmp #MAXTRACK_SINGLESIDED + 2 00A59C 1 90 F6 bcc LA594 00A59E 1 A6 F9 ldx JOBNUM 00A5A0 1 BD 5B 02 lda LSTJOB,x 00A5A3 1 48 pha 00A5A4 1 20 8A D5 jsr LD58A 00A5A7 1 20 8B A4 jsr LA48B 00A5AA 1 20 3A EF jsr LEF3A 00A5AD 1 20 08 F0 jsr LF008 00A5B0 1 A5 F9 lda JOBNUM 00A5B2 1 0A asl a 00A5B3 1 AA tax 00A5B4 1 A9 35 lda #$35 00A5B6 1 95 06 sta TRACK0,x 00A5B8 1 A0 68 ldy #$68 00A5BA 1 LA5BA: 00A5BA 1 B9 46 01 lda L0146,y 00A5BD 1 91 6D sta (BMPNT),y 00A5BF 1 88 dey 00A5C0 1 10 F8 bpl LA5BA 00A5C2 1 20 96 A4 jsr LA496 00A5C5 1 20 8A D5 jsr LD58A 00A5C8 1 A5 F9 lda JOBNUM 00A5CA 1 0A asl a 00A5CB 1 AA tax 00A5CC 1 AD 85 FE lda LFE85 00A5CF 1 95 06 sta TRACK0,x 00A5D1 1 20 86 D5 jsr LD586 00A5D4 1 68 pla 00A5D5 1 A6 F9 ldx JOBNUM 00A5D7 1 9D 5B 02 sta LSTJOB,x 00A5DA 1 60 rts 00A5DB 1 LA5DB: 00A5DB 1 00 03 06 09 .byte $00,$03,$06,$09,$0C,$0F,$12,$15 00A5DF 1 0C 0F 12 15 00A5E3 1 18 1B 1E 21 .byte $18,$1B,$1E,$21,$24,$27,$2A,$2D 00A5E7 1 24 27 2A 2D 00A5EB 1 30 33 36 39 .byte $30,$33,$36,$39,$3C,$3F,$42,$45 00A5EF 1 3C 3F 42 45 00A5F3 1 48 4B 4E 51 .byte $48,$4B,$4E,$51,$54,$57,$5A,$5D 00A5F7 1 54 57 5A 5D 00A5FB 1 60 63 66 .byte $60,$63,$66 00A5FE 1 LA5FE: 00A5FE 1 AD 0F 18 lda VBC_PAUNBUF1 00A601 1 29 20 and #VBC_PA1_20 00A603 1 F0 0F beq LA614 00A605 1 A0 00 ldy #$00 00A607 1 A2 00 ldx #$00 00A609 1 A9 01 lda #$01 00A60B 1 8D 7A 02 sta FILTBL 00A60E 1 20 12 C3 jsr LC312 00A611 1 4C A8 E7 jmp LE7A8 00A614 1 LA614: 00A614 1 A9 8D lda #$8D 00A616 1 20 68 C2 jsr SearchInCmdline 00A619 1 4C A8 E7 jmp LE7A8 00A61C 1 00A61C 1 Patch1570CallToParseCommandBufferAndExecuteCommand: 00A61C 1 20 46 C1 jsr ParseCommandBufferAndExecuteCommand 00A61F 1 20 B2 81 jsr L81B2 00A622 1 A5 37 lda BITCNT 00A624 1 29 7F and #$7F 00A626 1 85 37 sta BITCNT 00A628 1 4C FF EB jmp END_Patch1570CallToParseCommandBufferAndExecuteCommand 00A62B 1 ; ----------------- 00A62B 1 00A62B 1 LA62B: 00A62B 1 A9 FF lda #$FF 00A62D 1 85 48 sta ACLTIM 00A62F 1 A9 06 lda #$06 00A631 1 85 35 sta GCRERR 00A633 1 60 rts 00A634 1 LA634: 00A634 1 D0 07 bne LA63D 00A636 1 AD AB 02 lda CNTMOTOR1570 00A639 1 D0 10 bne LA64B 00A63B 1 F0 1A beq LA657 00A63D 1 LA63D: 00A63D 1 A9 FF lda #$FF 00A63F 1 8D AB 02 sta CNTMOTOR1570 00A642 1 20 64 87 jsr L8764 00A645 1 A9 01 85 1C SET_WPSW_DIRTY 00A649 1 D0 0C bne LA657 00A64B 1 LA64B: 00A64B 1 CE AB 02 dec CNTMOTOR1570 00A64E 1 D0 07 bne LA657 00A650 1 A5 20 lda DRVST 00A652 1 D0 03 bne LA657 00A654 1 20 70 87 jsr L8770 00A657 1 LA657: 00A657 1 4C B1 F9 jmp LF9B1 00A65A 1 00A65A 1 PATCH_INIT_BC_1570: 00A65A 1 A9 02 lda #VBC_PB1_1540_DATAOUT 00A65C 1 8D 00 18 sta VBC_PB1 00A65F 1 A9 20 lda #VBC_PA1_20 00A661 1 8D 01 18 sta VBC_PA1 00A664 1 .if CompileDrive >= DRIVE_1571CR 00A664 1 jmp PATCH_INIT_CSG5710 00A664 1 .else 00A664 1 4C 18 FF jmp PATCH_INIT_BC_1570_END 00A667 1 .endif 00A667 1 ; -------------------------------- 00A667 1 00A667 1 LA667: 00A667 1 AD 0F 18 lda VBC_PAUNBUF1 00A66A 1 29 20 and #VBC_PA1_20 00A66C 1 D0 03 bne LA671 00A66E 1 LA66E: 00A66E 1 4C 86 D5 jmp LD586 00A671 1 ; ---------------------------- 00A671 1 00A671 1 LA671: 00A671 1 AD D7 FE lda MAXTRACK_ADJUSTED 00A674 1 C9 25 cmp #MAXTRACK_SINGLESIDED + 2 00A676 1 90 F6 bcc LA66E 00A678 1 20 8B A4 jsr LA48B 00A67B 1 A9 00 lda #$00 00A67D 1 85 6D sta BMPNT 00A67F 1 A6 F9 ldx JOBNUM 00A681 1 BD E0 FE lda TableHighBytesOfBuffers,x 00A684 1 85 6E sta BMPNT + 1 00A686 1 A9 FF lda #$FF 00A688 1 .if CompileDrive >= DRIVE_1571_05 00A688 1 jmp PATCH_LAB72 00A688 1 PATCH_LAB72_END: 00A688 1 00A688 1 .else 00A688 1 8D 98 02 sta JOBRTN 00A68B 1 .endif 00A68B 1 A5 F9 lda JOBNUM 00A68D 1 0A asl a 00A68E 1 AA tax 00A68F 1 A9 35 lda #$35 00A691 1 95 06 sta TRACK0,x 00A693 1 20 86 D5 jsr LD586 00A696 1 C9 02 cmp #$02 00A698 1 6A ror a 00A699 1 29 80 and #$80 00A69B 1 49 80 eor #$80 00A69D 1 8D AF 01 sta L01AF 00A6A0 1 10 0A bpl LA6AC 00A6A2 1 A0 68 ldy #$68 00A6A4 1 LA6A4: 00A6A4 1 B1 6D lda (BMPNT),y 00A6A6 1 99 46 01 sta L0146,y 00A6A9 1 88 dey 00A6AA 1 10 F8 bpl LA6A4 00A6AC 1 LA6AC: 00A6AC 1 A9 FF lda #$FF 00A6AE 1 8D 98 02 sta JOBRTN 00A6B1 1 00A6B1 1 LA6B1: 00A6B1 1 A5 F9 lda JOBNUM 00A6B3 1 0A asl a 00A6B4 1 AA tax 00A6B5 1 AD 85 FE lda LFE85 00A6B8 1 95 06 sta TRACK0,x 00A6BA 1 20 86 D5 jsr LD586 00A6BD 1 C9 02 cmp #$02 00A6BF 1 90 10 bcc LA6D1 00A6C1 1 AA tax 00A6C2 1 A9 24 lda #MAXTRACK_SINGLESIDED + 1 00A6C4 1 8D D7 FE sta MAXTRACK_ADJUSTED 00A6C7 1 20 96 A4 jsr LA496 00A6CA 1 8A txa 00A6CB 1 20 0A E6 jsr LE60A 00A6CE 1 4C 44 D6 jmp LD644 00A6D1 1 LA6D1: 00A6D1 1 A0 03 ldy #$03 00A6D3 1 B1 6D lda (BMPNT),y 00A6D5 1 2D AF 01 and L01AF 00A6D8 1 30 03 bmi LA6DD 00A6DA 1 A9 24 lda #$24 00A6DC 1 2C .byte ASM_BIT3 00A6DD 1 LA6DD: 00A6DD 1 A9 47 lda #MAXTRACK_DOUBLESIDED + 1 00A6DF 1 8D D7 FE sta MAXTRACK_ADJUSTED 00A6E2 1 00A6E2 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 00A6E2 1 jmp LAB24 00A6E2 1 .else 00A6E2 1 4C 96 A4 jmp LA496 00A6E5 1 .endif 00A6E5 1 LA6E5: 00A6E5 1 20 8C D5 jsr LD58C 00A6E8 1 48 pha 00A6E9 1 C9 02 cmp #$02 00A6EB 1 B0 49 bcs LA736 00A6ED 1 AD 0F 18 lda VBC_PAUNBUF1 00A6F0 1 29 20 and #VBC_PA1_20 00A6F2 1 F0 42 beq LA736 00A6F4 1 A9 47 lda #MAXTRACK_DOUBLESIDED + 1 00A6F6 1 8D D7 FE sta MAXTRACK_ADJUSTED 00A6F9 1 A9 FF lda #$FF 00A6FB 1 8D 98 02 sta JOBRTN 00A6FE 1 A5 16 lda HEADER 00A700 1 48 pha 00A701 1 A5 17 lda HEADER + 1 00A703 1 48 pha 00A704 1 A5 F9 lda JOBNUM 00A706 1 0A asl a 00A707 1 AA tax 00A708 1 A9 35 lda #$35 00A70A 1 95 06 sta TRACK0,x 00A70C 1 A9 B0 lda #$B0 00A70E 1 .if CompileDrive >= DRIVE_1571_05 00A70E 1 jsr LAADE 00A70E 1 .else 00A70E 1 20 8C D5 jsr LD58C 00A711 1 .endif 00A711 1 C9 02 cmp #$02 00A713 1 68 pla 00A714 1 A8 tay 00A715 1 68 pla 00A716 1 AA tax 00A717 1 B0 0B bcs LA724 00A719 1 E4 16 cpx HEADER 00A71B 1 D0 07 bne LA724 00A71D 1 C4 17 cpy HEADER + 1 00A71F 1 D0 03 bne LA724 00A721 1 A9 47 lda #$47 00A723 1 2C .byte ASM_BIT3 00A724 1 LA724: 00A724 1 A9 24 lda #MAXTRACK_SINGLESIDED + 1 00A726 1 8D D7 FE sta MAXTRACK_ADJUSTED 00A729 1 84 17 sty HEADER + 1 00A72B 1 86 16 stx HEADER 00A72D 1 A5 F9 lda JOBNUM 00A72F 1 0A asl a 00A730 1 AA tax 00A731 1 AD 85 FE lda LFE85 00A734 1 95 06 sta TRACK0,x 00A736 1 LA736: 00A736 1 68 pla 00A737 1 60 rts 00A738 1 LA738: 00A738 1 20 3A EF jsr LEF3A 00A73B 1 AD 0F 18 lda VBC_PAUNBUF1 00A73E 1 29 20 and #VBC_PA1_20 00A740 1 F0 0A beq LA74C 00A742 1 A9 00 lda #$00 00A744 1 A0 68 ldy #$68 00A746 1 LA746: 00A746 1 99 46 01 sta L0146,y 00A749 1 88 dey 00A74A 1 10 FA bpl LA746 00A74C 1 LA74C: 00A74C 1 4C 08 F0 jmp LF008 00A74F 1 LA74F: 00A74F 1 48 pha 00A750 1 AD 0F 18 lda VBC_PAUNBUF1 00A753 1 29 20 and #VBC_PA1_20 00A755 1 F0 08 beq LA75F 00A757 1 68 pla 00A758 1 C9 24 cmp #$24 00A75A 1 90 04 bcc LA760 00A75C 1 E9 23 sbc #$23 00A75E 1 24 .byte ASM_BIT2 00A75F 1 LA75F: 00A75F 1 68 pla 00A760 1 LA760: 00A760 1 AE D6 FE ldx LFED6 00A763 1 60 rts 00A764 1 00A764 1 LA764: 00A764 1 20 05 F0 jsr LF005 00A767 1 AD 0F 18 lda VBC_PAUNBUF1 00A76A 1 29 20 and #VBC_PA1_20 00A76C 1 D0 03 bne LA771 00A76E 1 A9 24 lda #$24 00A770 1 2C .byte ASM_BIT3 00A771 1 LA771: 00A771 1 A9 47 lda #MAXTRACK_DOUBLESIDED + 1 00A773 1 8D D7 FE sta MAXTRACK_ADJUSTED 00A776 1 00A776 1 4C 43 EE jmp LEE43 00A779 1 LA779: 00A779 1 AD 0F 18 lda VBC_PAUNBUF1 00A77C 1 29 20 and #VBC_PA1_20 00A77E 1 D0 03 bne LA783 00A780 1 4C C6 C8 jmp LC8C6 00A783 1 LA783: 00A783 1 4C 0D A4 jmp LA40D 00A786 1 00A786 1 LA786: 00A786 1 AD 01 18 lda VBC_PA1 00A789 1 29 DF and # ~ VBC_PA1_20 00A78B 1 8D 01 18 sta VBC_PA1 00A78E 1 00A78E 1 20 83 A4 jsr LA483 00A791 1 00A791 1 ; also initialize the CIA 00A791 1 00A791 1 A9 7F lda #CIA_ICR_BW_UNSET | ~ CIA_ICR_BW_SET 00A793 1 8D 0D 40 sta CIA_ICR 00A796 1 00A796 1 .if CompileDrive >= DRIVE_1571CR 00A796 1 .else 00A796 1 A9 08 lda #CIA_CRA_B_ONESHOT 00A798 1 8D 0E 40 sta CIA_CRA 00A79B 1 ; lda #CIA_CRB_B_ONESHOT ; same as CIA_CRA_B_ONESHOT, thus, it can be ommitted 00A79B 1 8D 0F 40 sta CIA_CRB 00A79E 1 A9 00 lda #>$0006 00A7A0 1 8D 05 40 sta CIA_TAHI 00A7A3 1 A9 06 lda #<$0006 00A7A5 1 8D 04 40 sta CIA_TALO 00A7A8 1 00A7A8 1 A9 01 lda #CIA_CRA_B_START 00A7AA 1 8D 0E 40 sta CIA_CRA 00A7AD 1 .endif 00A7AD 1 00A7AD 1 20 B2 81 jsr L81B2 00A7B0 1 4C 59 EA jmp TestATN 00A7B3 1 00A7B3 1 FillUntil $A7B3 00A7B3 1 00A7B3 1 ProcessBus1570: 00A7B3 1 .if CompileDrive = DRIVE_1571_03 00A7B3 1 lda VBC_PAUNBUF1 00A7B3 1 .else 00A7B3 1 20 62 AA jsr LAA62 00A7B6 1 .endif 00A7B6 1 29 20 and #VBC_PA1_20 00A7B8 1 F0 03 beq LA7BD 00A7BA 1 4C CE 80 jmp L80CE 00A7BD 1 LA7BD: 00A7BD 1 4C 5B E8 jmp ProcessBus 00A7C0 1 00A7C0 1 PATCH_ShortReset: 00A7C0 1 ; this is the actual patch 00A7C0 1 78 sei ; disallow interrupts --> blocking job loop 00A7C1 1 00A7C1 1 A2 45 ldx #= DRIVE_1571 00A7C7 1 lda VBC_PAUNBUF1 00A7C7 1 .else 00A7C7 1 4C CE A7 jmp LA7CE 00A7CA 1 .endif 00A7CA 1 29 20 and #VBC_PA1_20 00A7CC 1 LA7CC: 00A7CC 1 D0 09 bne LA7D7 00A7CE 1 LA7CE: 00A7CE 1 A0 03 ldy #$03 00A7D0 1 A9 00 lda #$00 00A7D2 1 91 6D sta (BMPNT),y 00A7D4 1 4C B7 EE jmp LEEB7 00A7D7 1 LA7D7: 00A7D7 1 AD D7 FE lda MAXTRACK_ADJUSTED 00A7DA 1 C9 25 cmp #MAXTRACK_SINGLESIDED + 2 00A7DC 1 90 F0 bcc LA7CE 00A7DE 1 A0 01 ldy #$01 00A7E0 1 A2 00 ldx #$00 00A7E2 1 LA7E2: 00A7E2 1 C0 12 cpy #$12 00A7E4 1 F0 34 beq LA81A 00A7E6 1 8A txa 00A7E7 1 48 pha 00A7E8 1 A9 00 lda #$00 00A7EA 1 85 6F sta T0 00A7EC 1 85 70 sta T1 00A7EE 1 85 71 sta T2 00A7F0 1 B9 2B 94 lda L9409 + 34,y 00A7F3 1 AA tax 00A7F4 1 LA7F4: 00A7F4 1 38 sec 00A7F5 1 26 6F rol T0 00A7F7 1 26 70 rol T1 00A7F9 1 26 71 rol T2 00A7FB 1 CA dex 00A7FC 1 D0 F6 bne LA7F4 00A7FE 1 68 pla 00A7FF 1 AA tax 00A800 1 A5 6F lda T0 00A802 1 9D 46 01 sta L0146,x 00A805 1 A5 70 lda T1 00A807 1 9D 47 01 sta L0147,x 00A80A 1 A5 71 lda T2 00A80C 1 9D 48 01 sta L0148,x 00A80F 1 E8 inx 00A810 1 E8 inx 00A811 1 E8 inx 00A812 1 E0 33 cpx #$33 00A814 1 D0 04 bne LA81A 00A816 1 E8 inx 00A817 1 E8 inx 00A818 1 E8 inx 00A819 1 C8 iny 00A81A 1 LA81A: 00A81A 1 C8 iny 00A81B 1 C0 24 cpy #$24 00A81D 1 90 C3 bcc LA7E2 00A81F 1 20 B7 EE jsr LEEB7 00A822 1 A0 03 ldy #$03 00A824 1 A9 80 lda #$80 00A826 1 91 6D sta (BMPNT),y 00A828 1 A0 FF ldy #$FF 00A82A 1 A2 22 ldx #$22 00A82C 1 LA82C: 00A82C 1 BD 2C 94 lda L942C,x 00A82F 1 91 6D sta (BMPNT),y 00A831 1 88 dey 00A832 1 CA dex 00A833 1 10 F7 bpl LA82C 00A835 1 A0 EE ldy #$EE 00A837 1 A9 00 lda #$00 00A839 1 91 6D sta (BMPNT),y 00A83B 1 4C 75 D0 jmp LD075 00A83E 1 LA83E: 00A83E 1 AD 0F 18 lda VBC_PAUNBUF1 00A841 1 29 20 and #VBC_PA1_20 00A843 1 D0 06 bne LA84B 00A845 1 LA845: 00A845 1 20 CF EF jsr LEFCF 00A848 1 4C 62 EF jmp LEF62 00A84B 1 LA84B: 00A84B 1 A5 80 lda TRACK 00A84D 1 C9 24 cmp #$24 00A84F 1 90 F4 bcc LA845 00A851 1 20 A1 A4 jsr LA4A1 00A854 1 20 E7 A4 jsr LA4E7 00A857 1 D0 19 bne LA872 00A859 1 1D E9 EF ora LEFE9,x 00A85C 1 99 46 01 sta L0146,y 00A85F 1 20 88 EF jsr LEF88 00A862 1 20 08 A5 jsr LA508 00A865 1 A5 80 lda TRACK 00A867 1 C9 35 cmp #$35 00A869 1 F0 08 beq LA873 00A86B 1 A5 7F lda DRVNUM 00A86D 1 0A asl a 00A86E 1 AA tax 00A86F 1 4C 7F EF jmp LEF7F 00A872 1 LA872: 00A872 1 38 sec 00A873 1 LA873: 00A873 1 60 rts 00A874 1 LA874: 00A874 1 AD 0F 18 lda VBC_PAUNBUF1 00A877 1 29 20 and #VBC_PA1_20 00A879 1 D0 06 bne LA881 00A87B 1 LA87B: 00A87B 1 20 CF EF jsr LEFCF 00A87E 1 4C 96 EF jmp LEF96 00A881 1 LA881: 00A881 1 A5 80 lda TRACK 00A883 1 C9 24 cmp #$24 00A885 1 90 F4 bcc LA87B 00A887 1 20 A1 A4 jsr LA4A1 00A88A 1 20 E7 A4 jsr LA4E7 00A88D 1 F0 19 beq LA8A8 00A88F 1 5D E9 EF eor LEFE9,x 00A892 1 99 46 01 sta L0146,y 00A895 1 20 88 EF jsr LEF88 00A898 1 20 1E A5 jsr LA51E 00A89B 1 A5 80 lda TRACK 00A89D 1 C9 35 cmp #$35 00A89F 1 F0 07 beq LA8A8 00A8A1 1 A5 7F lda DRVNUM 00A8A3 1 0A asl a 00A8A4 1 AA tax 00A8A5 1 4C B2 EF jmp LEFB2 00A8A8 1 LA8A8: 00A8A8 1 60 rts 00A8A9 1 LA8A9: 00A8A9 1 AD 0F 18 lda VBC_PAUNBUF1 00A8AC 1 29 20 and #VBC_PA1_20 00A8AE 1 D0 06 bne LA8B6 00A8B0 1 LA8B0: 00A8B0 1 20 11 F0 jsr LF011 00A8B3 1 4C FD F1 jmp LF1FD 00A8B6 1 LA8B6: 00A8B6 1 A5 80 lda TRACK 00A8B8 1 C9 24 cmp #$24 00A8BA 1 90 F4 bcc LA8B0 00A8BC 1 20 A1 A4 jsr LA4A1 00A8BF 1 20 45 A5 jsr LA545 00A8C2 1 B9 2C 94 lda L942C,y 00A8C5 1 8D 4E 02 sta LSTSEC 00A8C8 1 LA8C8: 00A8C8 1 A5 81 lda SECTOR 00A8CA 1 CD 4E 02 cmp LSTSEC 00A8CD 1 B0 09 bcs LA8D8 00A8CF 1 20 E7 A4 jsr LA4E7 00A8D2 1 D0 06 bne LA8DA 00A8D4 1 E6 81 inc SECTOR 00A8D6 1 D0 F0 bne LA8C8 00A8D8 1 LA8D8: 00A8D8 1 A9 00 lda #$00 00A8DA 1 LA8DA: 00A8DA 1 60 rts 00A8DB 1 LA8DB: 00A8DB 1 AD 0F 18 lda VBC_PAUNBUF1 00A8DE 1 29 20 and #VBC_PA1_20 00A8E0 1 D0 06 bne LA8E8 00A8E2 1 LA8E2: 00A8E2 1 A5 6F lda T0 00A8E4 1 48 pha 00A8E5 1 4C 30 F1 jmp LF130 00A8E8 1 LA8E8: 00A8E8 1 A5 80 lda TRACK 00A8EA 1 C9 24 cmp #$24 00A8EC 1 90 F4 bcc LA8E2 00A8EE 1 C9 35 cmp #$35 00A8F0 1 F0 0E beq LA900 00A8F2 1 A5 6F lda T0 00A8F4 1 48 pha 00A8F5 1 20 A1 A4 jsr LA4A1 00A8F8 1 A8 tay 00A8F9 1 68 pla 00A8FA 1 85 6F sta T0 00A8FC 1 98 tya 00A8FD 1 4C 38 F1 jmp LF138 00A900 1 LA900: 00A900 1 A9 00 lda #$00 00A902 1 4C 38 F1 jmp LF138 00A905 1 LA905: 00A905 1 AD 0F 18 lda VBC_PAUNBUF1 00A908 1 29 20 and #VBC_PA1_20 00A90A 1 D0 06 bne LA912 00A90C 1 LA90C: 00A90C 1 20 11 F0 jsr LF011 00A90F 1 4C C7 F1 jmp LF1C7 00A912 1 LA912: 00A912 1 A5 80 lda TRACK 00A914 1 C9 24 cmp #$24 00A916 1 90 F4 bcc LA90C 00A918 1 20 A1 A4 jsr LA4A1 00A91B 1 4C C9 F1 jmp LF1C9 00A91E 1 LA91E: 00A91E 1 AD 0F 18 lda VBC_PAUNBUF1 00A921 1 29 20 and #VBC_PA1_20 00A923 1 D0 06 bne LA92B 00A925 1 LA925: 00A925 1 20 11 F0 jsr LF011 00A928 1 4C E2 F1 jmp LF1E2 00A92B 1 LA92B: 00A92B 1 A5 80 lda TRACK 00A92D 1 C9 24 cmp #$24 00A92F 1 90 F4 bcc LA925 00A931 1 20 A1 A4 jsr LA4A1 00A934 1 4C E4 F1 jmp LF1E4 00A937 1 LA937: 00A937 1 AD 0F 18 lda VBC_PAUNBUF1 00A93A 1 29 20 and #VBC_PA1_20 00A93C 1 D0 03 bne LA941 00A93E 1 LA93E: 00A93E 1 4C 20 F2 jmp LF220 00A941 1 LA941: 00A941 1 AD D7 FE lda MAXTRACK_ADJUSTED 00A944 1 C9 25 cmp #MAXTRACK_SINGLESIDED + 2 00A946 1 90 F6 bcc LA93E 00A948 1 A5 80 lda TRACK 00A94A 1 C9 24 cmp #$24 00A94C 1 90 F0 bcc LA93E 00A94E 1 4C 45 A5 jmp LA545 00A951 1 LA951: 00A951 1 9D FA 02 sta NDBL,x 00A954 1 AD 0F 18 lda VBC_PAUNBUF1 00A957 1 29 20 and #VBC_PA1_20 00A959 1 F0 23 beq LA97E 00A95B 1 AD D7 FE lda MAXTRACK_ADJUSTED 00A95E 1 C9 25 cmp #MAXTRACK_SINGLESIDED + 2 00A960 1 90 1C bcc LA97E 00A962 1 20 8B A4 jsr LA48B 00A965 1 20 34 A5 jsr LA534 00A968 1 A0 22 ldy #$22 00A96A 1 AD FA 02 lda NDBL 00A96D 1 LA96D: 00A96D 1 18 clc 00A96E 1 71 6D adc (BMPNT),y 00A970 1 8D FA 02 sta NDBL 00A973 1 90 03 bcc LA978 00A975 1 EE FC 02 inc NDBH 00A978 1 LA978: 00A978 1 88 dey 00A979 1 10 F2 bpl LA96D 00A97B 1 4C 96 A4 jmp LA496 00A97E 1 LA97E: 00A97E 1 60 rts 00A97F 1 LA97F: 00A97F 1 95 B5 sta RECL,x 00A981 1 95 BB sta RECH,x 00A983 1 A9 00 lda #$00 00A985 1 9D 44 02 sta LSTCHR,x 00A988 1 60 rts 00A989 1 LA989: 00A989 1 20 0D A4 jsr LA40D 00A98C 1 A0 00 ldy #$00 00A98E 1 8C 98 02 sty JOBRTN 00A991 1 60 rts 00A992 1 00A992 1 emptya992: 00A992 1 FF FF FF FF FillUntil $A99D 00A996 1 FF FF FF FF 00A99A 1 FF FF FF 00A99D 1 00A99D 1 LA99D: 00A99D 1 A9 00 lda #$00 00A99F 1 9D FF 00 sta a:NODRV,x 00A9A2 1 4C B7 C1 jmp LC1B7 00A9A5 1 LA9A5: 00A9A5 1 98 tya 00A9A6 1 9D FF 00 sta a:NODRV,x 00A9A9 1 4C 64 C6 jmp LC664 00A9AC 1 LA9AC: 00A9AC 1 AD 0F 18 lda VBC_PAUNBUF1 00A9AF 1 29 20 and #VBC_PA1_20 00A9B1 1 F0 03 beq LA9B6 00A9B3 1 4C 5A 81 jmp L815A 00A9B6 1 LA9B6: 00A9B6 1 4C D7 E8 jmp LE8D7 00A9B9 1 LA9B9: 00A9B9 1 48 pha 00A9BA 1 86 F9 stx JOBNUM 00A9BC 1 AD 0F 18 lda VBC_PAUNBUF1 00A9BF 1 29 20 and #VBC_PA1_20 00A9C1 1 F0 0F beq LA9D2 00A9C3 1 24 37 bit BITCNT 00A9C5 1 10 0B bpl LA9D2 00A9C7 1 A5 37 lda BITCNT 00A9C9 1 29 7F and #$7F 00A9CB 1 85 37 sta BITCNT 00A9CD 1 68 pla 00A9CE 1 AA tax 00A9CF 1 4C 99 91 jmp L9199 00A9D2 1 LA9D2: 00A9D2 1 4C 0D E6 jmp LE60D 00A9D5 1 00A9D5 1 LA9D5: 00A9D5 1 48 pha 00A9D6 1 AD 0F 18 lda VBC_PAUNBUF1 00A9D9 1 29 20 and #VBC_PA1_20 00A9DB 1 F0 17 beq @LA9F4 00A9DD 1 24 37 bit BITCNT 00A9DF 1 10 13 bpl @LA9F4 00A9E1 1 A5 37 lda BITCNT 00A9E3 1 29 7F and #$7F 00A9E5 1 85 37 sta BITCNT 00A9E7 1 78 sei ; disallow interrupts --> blocking job loop 00A9E8 1 A2 02 ldx #$02 00A9EA 1 20 28 92 jsr L9228 00A9ED 1 A9 00 lda #$00 00A9EF 1 85 83 sta SA 00A9F1 1 20 C0 DA jsr LDAC0 00A9F4 1 @LA9F4: 00A9F4 1 68 pla 00A9F5 1 4C 45 E6 jmp LE645 00A9F8 1 LA9F8: 00A9F8 1 A9 00 lda #$00 00A9FA 1 85 20 sta DRVST 00A9FC 1 AD 0C 1C lda VDC_PCR2 00A9FF 1 4C 66 F2 jmp LF266 00AA02 1 00AA02 1 READ_CMDBUF_BUT_SPECIAL_CASE_U0: 00AA02 1 ; first, check if the command is "U0" 00AA02 1 AD 00 02 lda CMDBUF 00AA05 1 C9 55 cmp #'U' 00AA07 1 D0 07 bne @NoU0 ; first char is not 'U' --> read next char from command buffer 00AA09 1 AD 01 02 lda CMDBUF + 1 00AA0C 1 C9 30 cmp #'0' 00AA0E 1 F0 04 beq @ReturnAsc_NUL ; 2nd char is '0' --> it is 'U0' --> return ASC_NUL. 00AA10 1 @NoU0: 00AA10 1 ; read next char from command buffer 00AA10 1 B9 00 02 lda CMDBUF,y 00AA13 1 00AA13 1 2C .byte ASM_BIT3 00AA14 1 00AA14 1 @ReturnAsc_NUL: 00AA14 1 A9 00 lda #$00 00AA16 1 60 rts 00AA17 1 00AA17 1 LAA17: 00AA17 1 A6 7F ldx DRVNUM 00AA19 1 BD FF 00 lda a:NODRV,x 00AA1C 1 60 rts 00AA1D 1 LAA1D: 00AA1D 1 95 1C sta WPSW,x 00AA1F 1 9D FF 00 sta a:NODRV,x 00AA22 1 4C 75 D0 jmp LD075 00AA25 1 LAA25: 00AA25 1 A6 7F ldx DRVNUM 00AA27 1 BD FF 00 lda a:NODRV,x 00AA2A 1 4C 1B F0 jmp LF01B 00AA2D 1 ; ----------------- 00AA2D 1 00AA2D 1 ; before executing the U command, make sure it is not 00AA2D 1 ; the IRQ vector. 00AA2D 1 ; The 6502 would behave erratically, as the IRQ requires 00AA2D 1 ; the stack to contain a status register, which it will not 00AA2D 1 ; have in the case of a JMP (or JSR, which was used to call 00AA2D 1 ; us). 00AA2D 1 ; Thus, in this case, execute a BRK instead. 00AA2D 1 ; 00AA2D 1 Patch1570ExecutionOfUCommand: 00AA2D 1 00AA2D 1 ; compare address of U command 00AA2D 1 00AA2D 1 A5 75 lda IP 00AA2F 1 C9 67 cmp #IRQ 00AA37 1 D0 03 bne @NoIRQVector 00AA39 1 00AA39 1 ; if we reach here, it is the IRQ vector 00AA39 1 ; call it via BRK 00AA39 1 00 brk 00AA3A 1 EA nop 00AA3B 1 00AA3B 1 60 rts 00AA3C 1 00AA3C 1 @NoIRQVector: 00AA3C 1 6C 75 00 jmp (IP) 00AA3F 1 ; ----------------- 00AA3F 1 00AA3F 1 .if CompileDrive >= DRIVE_1571_05 00AA3F 1 LAA3F: 00AA3F 1 cmp #$02 00AA3F 1 bcc LAA4A 00AA3F 1 cmp #$0F 00AA3F 1 beq LAA4A 00AA3F 1 jmp LD36B 00AA3F 1 LAA4A: 00AA3F 1 jmp LD373 00AA3F 1 LAA4D: 00AA3F 1 sta FTNUM 00AA3F 1 jsr L877C 00AA3F 1 jsr LA989 00AA3F 1 pha 00AA3F 1 jsr L8788 00AA3F 1 pla 00AA3F 1 rts 00AA3F 1 LAA5B: 00AA3F 1 lda PATTYP 00AA3F 1 and #$07 00AA3F 1 cmp #$02 00AA3F 1 rts 00AA3F 1 LAA62: 00AA3F 1 lda VBC_PAUNBUF1 00AA3F 1 bit VBC_PA1 00AA3F 1 rts 00AA3F 1 LAA69: 00AA3F 1 lda VBC_PAUNBUF1 00AA3F 1 and #VBC_PA1_20 00AA3F 1 bne LAA73 00AA3F 1 jmp LEEB7 00AA3F 1 LAA73: 00AA3F 1 jmp LA7CC 00AA3F 1 LAA76: 00AA3F 1 lda #$02 00AA3F 1 sta VBC_T1HC1 00AA3F 1 rts 00AA3F 1 00AA3F 1 PATCH_INIT_CSG5710: 00AA3F 1 .if CompileDrive >= DRIVE_1571CR 00AA3F 1 lda #$FB 00AA3F 1 sta CSG5710_4010 + 4 00AA3F 1 lda #$FE 00AA3F 1 sta CSG5710_4010 + 5 00AA3F 1 lda #$A1 00AA3F 1 sta CSG5710_4010 + 0 00AA3F 1 lda #$C2 00AA3F 1 sta CSG5710_4010 + 1 00AA3F 1 lda #$0A 00AA3F 1 sta CSG5710_4010 + 6 00AA3F 1 lda #$14 00AA3F 1 sta CSG5710_4010 + 7 00AA3F 1 lda #$02 00AA3F 1 sta CSG5710_4010 + 2 00AA3F 1 lda #$03 00AA3F 1 sta CSG5710_4010 + 3 00AA3F 1 lda #$40 00AA3F 1 sta L01B4 00AA3F 1 jmp PATCH_INIT_BC_1570_END 00AA3F 1 LAAAD: 00AA3F 1 lda L01B3 00AA3F 1 bne LAAB6 00AA3F 1 .else 00AA3F 1 lda L01B3 00AA3F 1 bne LAA84 00AA3F 1 jmp L8EC6 00AA3F 1 LAA84: 00AA3F 1 clc 00AA3F 1 rts 00AA3F 1 00AA3F 1 LAA86: 00AA3F 1 tay 00AA3F 1 cmp #$56 00AA3F 1 bne LAAA8 00AA3F 1 sei ; disallow interrupts --> blocking job loop 00AA3F 1 lda VBC_PAUNBUF1 00AA3F 1 and #VBC_PA1_20 00AA3F 1 bne LAA96 00AA3F 1 LAA93: 00AA3F 1 jmp L9021 00AA3F 1 LAA96: 00AA3F 1 lda CMDBUF + 4 00AA3F 1 cmp #$31 00AA3F 1 beq LAAA1 00AA3F 1 cmp #$30 00AA3F 1 bne LAA93 00AA3F 1 LAAA1: 00AA3F 1 and #$CF 00AA3F 1 sta L01B3 00AA3F 1 cli ; allow processing of job loop 00AA3F 1 rts 00AA3F 1 LAAA8: 00AA3F 1 cpy #$04 00AA3F 1 jmp L9006 00AA3F 1 LAAAD: 00AA3F 1 lda L01B3 00AA3F 1 bne LAAB6 00AA3F 1 .endif 00AA3F 1 lda JOBS0,y 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LAAB6: 00AA3F 1 lda #$30 00AA3F 1 eor #$30 00AA3F 1 sta JOBS0,y 00AA3F 1 bne LAAC2 00AA3F 1 jmp L99B5 00AA3F 1 LAAC2: 00AA3F 1 jmp L944F 00AA3F 1 LAAC5: 00AA3F 1 jsr L85F9 00AA3F 1 lda #$20 00AA3F 1 bit HINIB 00AA3F 1 beq LAADD 00AA3F 1 ldy #$00 00AA3F 1 LAAD0: 00AA3F 1 lda CMDBUF + 11,y 00AA3F 1 sta CTRACK 00AA3F 1 jsr L85F9 00AA3F 1 iny 00AA3F 1 cpy MYPA 00AA3F 1 bne LAAD0 00AA3F 1 LAADD: 00AA3F 1 rts 00AA3F 1 LAADE: 00AA3F 1 ldx JOBNUM 00AA3F 1 ora #$08 00AA3F 1 sta JOBS0,x 00AA3F 1 jmp L9FB6 00AA3F 1 LAAE7: 00AA3F 1 jsr LAAED 00AA3F 1 jmp CommandEnd 00AA3F 1 LAAED: 00AA3F 1 jmp (IP) 00AA3F 1 LAAF0: 00AA3F 1 cmp #$03 00AA3F 1 bcs LAAF9 00AA3F 1 lda #ERRORCODE_72_DISK_FULL 00AA3F 1 jsr SetErrorCode 00AA3F 1 LAAF9: 00AA3F 1 lda #$01 00AA3F 1 rts 00AA3F 1 Convert_Bin_To_BCD_Patch_157x: 00AA3F 1 php 00AA3F 1 sei ; disallow interrupts --> blocking job loop 00AA3F 1 00AA3F 1 CONVERT_BIN_TO_BCD 00AA3F 1 00AA3F 1 plp 00AA3F 1 jmp OutputBCDIntoBUFTABERR 00AA3F 1 00AA3F 1 LAB10: 00AA3F 1 php 00AA3F 1 sei ; disallow interrupts --> blocking job loop 00AA3F 1 sta CIA_SDR 00AA3F 1 lda BITCNT 00AA3F 1 eor #$04 00AA3F 1 sta BITCNT 00AA3F 1 lda #CIA_ICR_B_SP 00AA3F 1 LAB1D: 00AA3F 1 bit CIA_ICR 00AA3F 1 beq LAB1D 00AA3F 1 plp 00AA3F 1 rts 00AA3F 1 00AA3F 1 LAB24: 00AA3F 1 lda BAM + 11 00AA3F 1 cmp #$25 00AA3F 1 bcc LAB6F 00AA3F 1 lda T0 00AA3F 1 pha 00AA3F 1 lda TRACK 00AA3F 1 pha 00AA3F 1 ldy #$00 00AA3F 1 sty TRACK 00AA3F 1 LAB35: 00AA3F 1 lda #$00 00AA3F 1 sta T0 00AA3F 1 lda #$01 00AA3F 1 sta BMPNT + 1 00AA3F 1 lda LA5DB,y 00AA3F 1 clc 00AA3F 1 adc #$46 00AA3F 1 sta BMPNT 00AA3F 1 ldy #$02 00AA3F 1 LAB47: 00AA3F 1 ldx #$07 00AA3F 1 LAB49: 00AA3F 1 lda (BMPNT),y 00AA3F 1 and LEFE9,x 00AA3F 1 beq LAB52 00AA3F 1 inc T0 00AA3F 1 LAB52: 00AA3F 1 dex 00AA3F 1 bpl LAB49 00AA3F 1 dey 00AA3F 1 bpl LAB47 00AA3F 1 jsr LA534 00AA3F 1 lda T0 00AA3F 1 ldy TRACK 00AA3F 1 sta (BMPNT),y 00AA3F 1 inc TRACK 00AA3F 1 ldy TRACK 00AA3F 1 cpy #$23 00AA3F 1 bcc LAB35 00AA3F 1 pla 00AA3F 1 sta TRACK 00AA3F 1 pla 00AA3F 1 sta T0 00AA3F 1 LAB6F: 00AA3F 1 jmp LA496 00AA3F 1 ; -------------- 00AA3F 1 00AA3F 1 PATCH_LAB72: 00AA3F 1 sta JOBRTN 00AA3F 1 pha 00AA3F 1 lda L01B6 00AA3F 1 beq LAB84 00AA3F 1 lda #$00 00AA3F 1 sta L01B6 00AA3F 1 pla 00AA3F 1 jmp PATCH_LAB72_END 00AA3F 1 ; -------------- 00AA3F 1 00AA3F 1 LAB84: 00AA3F 1 lda #$80 00AA3F 1 sta L01AF 00AA3F 1 pla 00AA3F 1 jmp LA6B1 00AA3F 1 ; -------------- 00AA3F 1 00AA3F 1 LAB8D: 00AA3F 1 jsr LA48B 00AA3F 1 jsr LAB24 00AA3F 1 jmp LA48B 00AA3F 1 00AA3F 1 PATCH_WPSW: 00AA3F 1 lda #$01 00AA3F 1 sta WPSW 00AA3F 1 sta L01B6 00AA3F 1 rts 00AA3F 1 00AA3F 1 .if CompileDrive >= DRIVE_1571CR 00AA3F 1 .else 00AA3F 1 LA667_PATCH: 00AA3F 1 lda #$01 00AA3F 1 sta L01B6 00AA3F 1 jmp LA667 00AA3F 1 ; --------------------- 00AA3F 1 .endif 00AA3F 1 00AA3F 1 LABA6: 00AA3F 1 lda #$01 00AA3F 1 sta WPSW 00AA3F 1 sta L01B6 00AA3F 1 jmp LD042 00AA3F 1 00AA3F 1 .if CompileDrive >= DRIVE_1571CR 00AA3F 1 00AA3F 1 LABA7: 00AA3F 1 tay 00AA3F 1 cmp #$56 00AA3F 1 bne LABDF 00AA3F 1 sei ; disallow interrupts --> blocking job loop 00AA3F 1 lda VBC_PAUNBUF1 00AA3F 1 and #VBC_PA1_20 00AA3F 1 bne LABB7 00AA3F 1 LABB4: 00AA3F 1 jmp L9021 00AA3F 1 LABB7: 00AA3F 1 lda CMDBUF + 4 00AA3F 1 cmp #$31 00AA3F 1 beq LABC2 00AA3F 1 cmp #$30 00AA3F 1 bne LABB4 00AA3F 1 LABC2: 00AA3F 1 and #$CF 00AA3F 1 sta L01B3 00AA3F 1 pha 00AA3F 1 lda L01B4 00AA3F 1 and #$BF 00AA3F 1 sta L01B4 00AA3F 1 pla 00AA3F 1 asl a 00AA3F 1 asl a 00AA3F 1 asl a 00AA3F 1 asl a 00AA3F 1 asl a 00AA3F 1 asl a 00AA3F 1 ora L01B4 00AA3F 1 sta L01B4 00AA3F 1 cli ; allow processing of job loop 00AA3F 1 rts 00AA3F 1 LABDF: 00AA3F 1 cpy #$04 00AA3F 1 jmp L9006 00AA3F 1 00AA3F 1 LA667_PATCH: 00AA3F 1 lda #$01 00AA3F 1 sta L01B6 00AA3F 1 jmp LA667 00AA3F 1 ; --------------------- 00AA3F 1 00AA3F 1 LABEC: 00AA3F 1 lda #$5A 00AA3F 1 LABEE: 00AA3F 1 pha 00AA3F 1 jsr LAC38 00AA3F 1 pla 00AA3F 1 tay 00AA3F 1 bcs LAC02 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 cmp CSG5710_4010 + 5 00AA3F 1 beq LAC0C 00AA3F 1 dey 00AA3F 1 tya 00AA3F 1 bne LABEE 00AA3F 1 LAC02: 00AA3F 1 ldx #$03 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LAC05: 00AA3F 1 ldx #$09 00AA3F 1 stx L01B0 00AA3F 1 sec 00AA3F 1 rts 00AA3F 1 LAC0C: 00AA3F 1 ldx #$00 00AA3F 1 LAC0E: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAC0E 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 sta STAB,x 00AA3F 1 inx 00AA3F 1 cpx #$06 00AA3F 1 bcc LAC0E 00AA3F 1 lda #$18 00AA3F 1 sta WD177x_TRACK 00AA3F 1 LAC22: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAC22 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 lda WD177x_TRACK 00AA3F 1 and #$20 00AA3F 1 bne LAC05 00AA3F 1 ldx #$00 00AA3F 1 stx L01B0 00AA3F 1 clc 00AA3F 1 rts 00AA3F 1 LAC38: 00AA3F 1 lda CSG5710_5 00AA3F 1 and #$7F 00AA3F 1 sta CSG5710_5 00AA3F 1 lda L01B4 00AA3F 1 and #$20 00AA3F 1 asl a 00AA3F 1 asl a 00AA3F 1 ora CSG5710_5 00AA3F 1 sta CSG5710_5 00AA3F 1 lda #$00 00AA3F 1 sta WD177x_TRACK 00AA3F 1 lda CSG5710_4010 + 0 00AA3F 1 sta CSG5710_4 00AA3F 1 lda CSG5710_4010 + 6 00AA3F 1 sta WD177x_DATA 00AA3F 1 lda #$10 00AA3F 1 sta WD177x_TRACK 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 ldx #$00 00AA3F 1 ldy #$32 00AA3F 1 LAC6D: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bvs LAC7A 00AA3F 1 dex 00AA3F 1 bne LAC6D 00AA3F 1 dey 00AA3F 1 bne LAC6D 00AA3F 1 sec 00AA3F 1 rts 00AA3F 1 LAC7A: 00AA3F 1 ldy #$00 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 nop 00AA3F 1 LAC8B: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAC8B 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 iny 00AA3F 1 bvs LAC8B 00AA3F 1 cpy #$03 00AA3F 1 bne LAC38 00AA3F 1 clc 00AA3F 1 rts 00AA3F 1 LAC9C: 00AA3F 1 lda #$B4 00AA3F 1 LAC9E: 00AA3F 1 pha 00AA3F 1 jsr LABEC 00AA3F 1 pla 00AA3F 1 tay 00AA3F 1 php 00AA3F 1 lda STAB + 2 00AA3F 1 cmp SECTR 00AA3F 1 beq LACB7 00AA3F 1 plp 00AA3F 1 dey 00AA3F 1 tya 00AA3F 1 bne LAC9E 00AA3F 1 ldx #$02 00AA3F 1 stx L01B0 00AA3F 1 sec 00AA3F 1 rts 00AA3F 1 LACB7: 00AA3F 1 plp 00AA3F 1 rts 00AA3F 1 LACB9: 00AA3F 1 ldx #$16 00AA3F 1 LACBB: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LACBB 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 dex 00AA3F 1 bne LACBB 00AA3F 1 rts 00AA3F 1 LACC7: 00AA3F 1 lda REVCNT 00AA3F 1 asl a 00AA3F 1 sta TMP 00AA3F 1 LACCC: 00AA3F 1 jsr L8EC6 00AA3F 1 jsr LAC9C 00AA3F 1 bcs LAD21 00AA3F 1 jsr LAC38 00AA3F 1 bcs LAD21 00AA3F 1 ldy #$00 00AA3F 1 ldx WORK 00AA3F 1 LACDD: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LACDD 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 cmp (BUFPNT),y 00AA3F 1 bne LAD21 00AA3F 1 cpy RLINDX 00AA3F 1 beq LACF1 00AA3F 1 iny 00AA3F 1 bne LACDD 00AA3F 1 LACF1: 00AA3F 1 iny 00AA3F 1 dex 00AA3F 1 beq LACFA 00AA3F 1 inc BUFPNT + 1 00AA3F 1 jmp LACDD 00AA3F 1 LACFA: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LACFA 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 LAD02: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAD02 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 lda #$18 00AA3F 1 sta WD177x_TRACK 00AA3F 1 LAD0F: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAD0F 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 lda WD177x_TRACK 00AA3F 1 and #$20 00AA3F 1 beq LAD28 00AA3F 1 ldx #$05 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LAD21: 00AA3F 1 ldx #$07 00AA3F 1 dec TMP 00AA3F 1 bne LACCC 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LAD28: 00AA3F 1 ldx #$00 00AA3F 1 stx L01B0 00AA3F 1 rts 00AA3F 1 LAD2E: 00AA3F 1 lda REVCNT 00AA3F 1 asl a 00AA3F 1 sta TMP 00AA3F 1 LAD33: 00AA3F 1 jsr LAC9C 00AA3F 1 bcs LAD86 00AA3F 1 jsr LAC38 00AA3F 1 bcs LAD86 00AA3F 1 ldy #$00 00AA3F 1 ldx WORK 00AA3F 1 LAD41: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAD41 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 cmp CMDBUF + 10 00AA3F 1 bne LAD86 00AA3F 1 cpy RLINDX 00AA3F 1 beq LAD56 00AA3F 1 iny 00AA3F 1 bne LAD41 00AA3F 1 LAD56: 00AA3F 1 iny 00AA3F 1 dex 00AA3F 1 beq LAD5F 00AA3F 1 inc BUFPNT + 1 00AA3F 1 jmp LAD41 00AA3F 1 LAD5F: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAD5F 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 LAD67: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAD67 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 lda #$18 00AA3F 1 sta WD177x_TRACK 00AA3F 1 LAD74: 00AA3F 1 bit WD177x_TRACK 00AA3F 1 bpl LAD74 00AA3F 1 lda WD177x_SECTOR 00AA3F 1 lda WD177x_TRACK 00AA3F 1 and #$20 00AA3F 1 beq LAD8D 00AA3F 1 ldx #$05 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LAD86: 00AA3F 1 ldx #$07 00AA3F 1 dec TMP 00AA3F 1 bne LAD33 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LAD8D: 00AA3F 1 ldx #$00 00AA3F 1 stx L01B0 00AA3F 1 rts 00AA3F 1 LAD93: 00AA3F 1 php 00AA3F 1 sei ; disallow interrupts --> blocking job loop 00AA3F 1 jsr L89EF 00AA3F 1 bit HINIB 00AA3F 1 bpl LADA4 00AA3F 1 lda CMDBUF + 3 00AA3F 1 sta NMIFLG 00AA3F 1 jsr L87BA 00AA3F 1 LADA4: 00AA3F 1 lda #$00 00AA3F 1 sta MYPA 00AA3F 1 jsr L89E8 00AA3F 1 ldx L01B0 00AA3F 1 cpx #$02 00AA3F 1 bcs LADD1 00AA3F 1 lda STAB + 2 00AA3F 1 sta ICMD 00AA3F 1 LADB6: 00AA3F 1 jsr L89E8 00AA3F 1 lda STAB + 2 00AA3F 1 ldy MYPA 00AA3F 1 sta CMDBUF + 11,y 00AA3F 1 inc MYPA 00AA3F 1 cpy #$1F 00AA3F 1 bcs LADD1 00AA3F 1 cmp ICMD 00AA3F 1 bne LADB6 00AA3F 1 lda STAB 00AA3F 1 sta NMIFLG 00AA3F 1 ldx #$00 00AA3F 1 .byte ASM_BIT3 00AA3F 1 LADD1: 00AA3F 1 ldx #$02 00AA3F 1 stx L01B0 00AA3F 1 plp 00AA3F 1 rts 00AA3F 1 .endif 00AA3F 1 .elseif CompileDrive >= DRIVE_1571 00AA3F 1 .else 00AA3F 1 LAA3F: 00AA3F 1 C9 02 cmp #$02 00AA41 1 90 07 bcc LAA4A 00AA43 1 C9 0F cmp #$0F 00AA45 1 F0 03 beq LAA4A 00AA47 1 4C 6B D3 jmp LD36B 00AA4A 1 LAA4A: 00AA4A 1 4C 73 D3 jmp LD373 00AA4D 1 LAA4D: 00AA4D 1 85 51 sta FTNUM 00AA4F 1 20 7C 87 jsr L877C 00AA52 1 20 89 A9 jsr LA989 00AA55 1 48 pha 00AA56 1 20 88 87 jsr L8788 00AA59 1 68 pla 00AA5A 1 60 rts 00AA5B 1 LAA5B: 00AA5B 1 A5 E7 lda PATTYP 00AA5D 1 29 07 and #$07 00AA5F 1 C9 02 cmp #$02 00AA61 1 60 rts 00AA62 1 LAA62: 00AA62 1 AD 0F 18 lda VBC_PAUNBUF1 00AA65 1 2C 01 18 bit VBC_PA1 00AA68 1 60 rts 00AA69 1 .endif 00AA69 1 00AA69 1 FF FF FF FF FillUntil $BF00 00AA6D 1 FF FF FF FF 00AA71 1 FF FF FF FF 00BF00 1 00BF00 1 4C 88 9D jmp L9D88 00BF03 1 4C DE 9D jmp L9DDE 00BF06 1 4C B0 F2 jmp LF2B0 00BF09 1 4C BA 92 jmp L92BA 00BF0C 1 4C 93 F3 jmp LF393 00BF0F 1 4C D1 93 jmp L93D1 00BF12 1 4C 69 F9 jmp LF969 00BF15 1 4C B5 99 jmp L99B5 00BF18 1 4C 00 FE jmp LFE00 00BF1B 1 4C 34 F9 jmp LF934 00BF1E 1 4C 56 F5 jmp LF556 00BF21 1 4C 54 97 jmp L9754 00BF24 1 4C E0 F8 jmp LF8E0 00BF27 1 4C 65 99 jmp L9965 00BF2A 1 4C E9 F5 jmp LF5E9 00BF2D 1 4C E6 F7 jmp LF7E6 00BF30 1 4C D9 98 jmp L98D9 00BF33 1 4C 83 A4 jmp LA483 00BF36 1 4C F3 FE jmp LFEF3 00BF39 1 4C 7E A4 jmp LA47E 00BF3C 1 4C 05 F0 jmp LF005 00BF3F 1 4C D1 F0 jmp LF0D1 00BF42 1 4C 46 C1 jmp ParseCommandBufferAndExecuteCommand 00BF45 1 4C 68 C2 jmp SearchInCmdline 00BF48 1 4C B3 C2 jmp LC2B3 00BF4B 1 4C DC C2 jmp LC2DC 00BF4E 1 4C E6 86 jmp L86E6 00BF51 1 4C 64 87 jmp L8764 00BF54 1 4C 70 87 jmp L8770 00BF57 1 .if CompileDrive >= DRIVE_1571_05 00BF57 1 lda L808E 00BF57 1 .else 00BF57 1 4C 8E 80 jmp L808E 00BF5A 1 .endif 00BF5A 1 4C 1E CF jmp LCF1E 00BF5D 1 4C B4 D7 jmp LD7B4 00BF60 1 4C C0 DA jmp LDAC0 00BF63 1 4C 0A E6 jmp LE60A 00BF66 1 4C 80 90 jmp L9080 00BF69 1 4C 4E 92 jmp L924E 00BF6C 1 4C 59 F2 jmp LF259 00BF6F 1 4C 9C F9 jmp LF99C 00BF72 1 4C CA 99 jmp L99CA 00BF75 1 ; ------------ 00BF75 1 00BF75 1 ; @@@ TODO This is no routine, what do they want here? 00BF75 1 00BF75 1 .if CompileDrive >= DRIVE_1571_05 00BF75 1 lda $FE95 00BF75 1 .else 00BF75 1 4C 95 FE jmp $FE95 00BF78 1 .endif 00BF78 1 00BF78 1 emptybf78: 00BF78 1 00BF78 1 FF FF FF FF FillUntil $bf96 00BF7C 1 FF FF FF FF 00BF80 1 FF FF FF FF 00BF96 1 C8 86 .byte $C8,$86 00BF98 1 FF FF FF FF FillUntil $C000 00BF9C 1 FF FF FF FF 00BFA0 1 FF FF FF FF 00C000 1 00C000 1 .else 00C000 1 * = $C000 00C000 1 .endif 00C000 1 00C000 1 .macro WRITE_55_TIMES times 00C000 1 lda VDC_PCR2 00C000 1 and # ~ VIA_PCR_B_CB2_MASK 00C000 1 ora #VIA_PCR_B_CB2_OUTPUT_LOW 00C000 1 sta VDC_PCR2 00C000 1 00C000 1 lda #$FF 00C000 1 sta VDC_DDRA2 00C000 1 00C000 1 lda #$55 00C000 1 sta VDC_PA2 00C000 1 00C000 1 ldx #>times 00C000 1 ldy #= DRIVE_1571_05 00C001 1 00C001 1 .byte "(C)1985 COMMODORE ELECTRONICS LTD., " 00C001 1 .byte "ALL RIGHTS RESERVED" 00C001 1 00C001 1 LC038: 00C001 1 and # ~ VDC_PB2_STEPPER 00C001 1 ora TMP 00C001 1 sta VDC_PB2 00C001 1 LC03F: 00C001 1 lda VDC_PCR2 00C001 1 and # ~ VIA_PCR_B_CA2_INPUT_NEG 00C001 1 sta VDC_PCR2 00C001 1 rts 00C001 1 00C001 1 LC048: 00C001 1 .byte $29,$1F,$19,$12 00C001 1 00C001 1 LC04C: 00C001 1 FillCount 17,$60 00C001 1 FillCount 7,'@' 00C001 1 .byte " " 00C001 1 FillCount 11,0 00C001 1 00C001 1 LC075: 00C001 1 sta CMD 00C001 1 pha 00C001 1 lda #$01 00C001 1 sta TRACK0,x 00C001 1 pla 00C001 1 rts 00C001 1 ; ------------- 00C001 1 00C001 1 LC07F: 00C001 1 sei ; disallow interrupts --> blocking job loop 00C001 1 lda VDC_PCR2 00C001 1 ora #VIA_PCR_B_CA2_OUTPUT_HIGH 00C001 1 sta VDC_PCR2 00C001 1 jsr L9D63 00C001 1 jsr LFE00 00C001 1 lda VDC_PCR2 00C001 1 and # ~ VIA_PCR_B_CA2_OUTPUT_HIGH 00C001 1 sta VDC_PCR2 00C001 1 cli ; allow processing of job loop 00C001 1 rts 00C001 1 00C001 1 .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00C001 1 00C001 1 .byte DRIVE_CHKSUM_C001 00C001 1 00C001 1 .if CompileDrive = DRIVE_1541C_03 00C001 1 .byte "COPYRIGHT (C)1982,1985,1987 COMMODORE ELECTRONICS, LTD.",$0D 00C001 1 .byte "ALL RIGHTS RESERVED",$0D 00C001 1 .endif 00C001 1 00C001 1 LC002: 00C001 1 WRITE_55_TIMES $0300 00C001 1 rts 00C001 1 00C001 1 ; -------------- 00C001 1 00C001 1 LC024: 00C001 1 ldy LINDX 00C001 1 .if CompileDrive >= DRIVE_1541C_03 00C001 1 jmp LD3EE 00C001 1 .else 00C001 1 jmp LD3DE 00C001 1 .endif 00C001 1 LC029: 00C001 1 sta RECL,x 00C001 1 sta RECH,x 00C001 1 lda #$00 00C001 1 sta LSTCHR,x 00C001 1 rts 00C001 1 Convert_Bin_To_BCD_Patch_154x: 00C001 1 php 00C001 1 sei ; disallow interrupts --> blocking job loop 00C001 1 00C001 1 CONVERT_BIN_TO_BCD 00C001 1 00C001 1 plp 00C001 1 jmp OutputBCDIntoBUFTABERR 00C001 1 00C001 1 LC047: 00C001 1 cmp #$03 00C001 1 bcs LC050 00C001 1 lda #ERRORCODE_72_DISK_FULL 00C001 1 jsr SetErrorCode 00C001 1 LC050: 00C001 1 lda #$01 00C001 1 LC052: 00C001 1 rts 00C001 1 00C001 1 .if CompileDrive = DRIVE_1541C_02 00C001 1 00C001 1 LC048: 00C001 1 .byte $29,$1F,$19,$12 00C001 1 00C001 1 .byte "COPYRIGHT (C)1985 COMMODORE ELECTRONICS, LTD.",$0D 00C001 1 .byte "ALL RIGHTS RESERVED",$0D 00C001 1 .endif 00C001 1 00C001 1 .endif 00C001 1 00C001 1 FF FF FF FF FillUntil $C100 00C005 1 FF FF FF FF 00C009 1 FF FF FF FF 00C100 1 00C100 1 LC100: 00C100 1 78 sei ; disallow interrupts --> blocking job loop 00C101 1 A9 F7 lda # ~ VDC_PB2_DRIVELEDS ; get port value with all LEDs switched off 00C103 1 2D 00 1C and VDC_PB2 00C106 1 48 pha ; remember port value 00C107 1 A5 7F lda DRVNUM ; current drive number 00C109 1 F0 05 beq @IsDrive0 ; drive 0 --> swithc on LED for drive 0 00C10B 1 00C10B 1 ; if we reach here, the LED for drive 1 has to be switched on. 00C10B 1 ; note that the device does not have a drive 1, the code here should never be reached 00C10B 1 00C10B 1 68 pla ; get mask of port 00C10C 1 09 00 ora #VDC_PB2_DRIVE1LED ; switch on LED for drive 1 (not existing) 00C10E 1 D0 03 bne @StoreLedState ; uncond.: store the mask to switch LED on 00C110 1 00C110 1 @IsDrive0: 00C110 1 68 pla ; get mask of port 00C111 1 09 08 ora #VDC_PB2_DRIVE0LED ; switch on LED for drive 0 00C113 1 @StoreLedState: 00C113 1 8D 00 1C sta VDC_PB2 ; store LED mask to switch the LED on 00C116 1 58 cli ; allow processing of job loop 00C117 1 60 rts 00C118 1 ; --------------------------- 00C118 1 00C118 1 ; Switch on LED of drive 0 00C118 1 ; UNUSED! 00C118 1 00C118 1 78 sei ; disallow interrupts --> blocking job loop 00C119 1 A9 08 lda #VDC_PB2_DRIVE0LED ; mask for LED for drive 0 00C11B 1 0D 00 1C ora VDC_PB2 ; set bit on port 00C11E 1 8D 00 1C sta VDC_PB2 ; and switch on the LED 00C121 1 58 cli ; allow processing of job loop 00C122 1 60 rts 00C123 1 ; --------------------- 00C123 1 00C123 1 LC123: 00C123 1 A9 00 lda #ERRORCODE_00_OK 00C125 1 8D 6C 02 sta ERWORD 00C128 1 8D 6D 02 sta ERLED 00C12B 1 60 rts 00C12C 1 00C12C 1 LC12C: 00C12C 1 78 sei ; disallow interrupts --> blocking job loop 00C12D 1 8A txa 00C12E 1 48 pha 00C12F 1 A9 50 lda #ERRORCODE_50_RECORD_NOT_PRESENT 00C131 1 8D 6C 02 sta ERWORD 00C134 1 A2 00 ldx #$00 00C136 1 BD CA FE lda DriveLEDMasks,x 00C139 1 8D 6D 02 sta ERLED 00C13C 1 0D 00 1C ora VDC_PB2 00C13F 1 8D 00 1C sta VDC_PB2 00C142 1 68 pla 00C143 1 AA tax 00C144 1 58 cli ; allow processing of job loop 00C145 1 60 rts 00C146 1 ; ------------- 00C146 1 00C146 1 ; This function parses the command buffer and executes the command 00C146 1 ; specified there. 00C146 1 ; 00C146 1 ParseCommandBufferAndExecuteCommand: 00C146 1 00C146 1 ; @@@ TODO initializations 00C146 1 00C146 1 A9 00 lda #$00 00C148 1 8D F9 02 sta WBAM 00C14B 1 AD 8E 02 lda LSTDRV 00C14E 1 85 7F sta DRVNUM 00C150 1 00C150 1 20 BC E6 jsr SetNoError ; delete error status 00C153 1 00C153 1 ; check secondary address to determine if this is a command 00C153 1 ; or something else 00C153 1 ; 00C153 1 A5 84 lda ORGSA 00C155 1 10 09 bpl @IsCommand ; LISTEN or TALK --> branch 00C157 1 00C157 1 ; if we reach here, it was an OPEN (0xE0 | SECADR) or CLOSE (0xF0 | SECADR). 00C157 1 ; thus, check which channel is to be opened or closed 00C157 1 00C157 1 29 0F and #MASK_SA ; mask out IEC bits 00C159 1 C9 0F cmp #IEC_COMMAND_ERROR_CHANNEL ; compare to command channel/error channel 00C15B 1 F0 03 beq @IsCommand ; yes -> branch, process the command 00C15D 1 4C B4 D7 jmp LD7B4 00C160 1 ; ------------ 00C160 1 00C160 1 @IsCommand: 00C160 1 20 B3 C2 jsr LC2B3 00C163 1 ; returns with Y=0 00C163 1 00C163 1 ; get the first character from the command 00C163 1 B1 A3 lda (BUFTABCMD),y 00C165 1 8D 75 02 sta CHAR ; remember it 00C168 1 00C168 1 ; test if the command is in the list of commands 00C168 1 A2 0B ldx #CmdChars_END - CmdChars - 1 ; number of commands - 1 00C16A 1 @TestNextCommand: 00C16A 1 BD 89 FE lda CmdChars,x 00C16D 1 CD 75 02 cmp CHAR 00C170 1 F0 08 beq @FoundCommand ; the char is correct, we found it! 00C172 1 CA dex 00C173 1 10 F5 bpl @TestNextCommand ; if we still have commands to test, loop 00C175 1 00C175 1 ; we did not find the command, return with 31,SYNTAX ERROR,00,00 00C175 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 00C177 1 4C C8 C1 jmp GenerateErrorMessage 00C17A 1 ; -------------- 00C17A 1 00C17A 1 @FoundCommand: 00C17A 1 8E 2A 02 stx CMDNUM ; remember the number (index) of the command 00C17D 1 ; is the command a command with more than one file name? 00C17D 1 E0 09 cpx #CmdChars_With2Files - CmdChars + 1 00C17F 1 90 03 bcc @ExecuteCommand ; no, skip processing of two filenames 00C181 1 00C181 1 20 EE C1 jsr LC1EE ; @@@ TODO process two file names 00C184 1 00C184 1 @ExecuteCommand: 00C184 1 00C184 1 AE 2A 02 ldx CMDNUM ; get command index 00C187 1 00C187 1 ; get address of command from table 00C187 1 BD 95 FE lda CmdAddresses_Low,x 00C18A 1 85 6F sta T0 00C18C 1 BD A1 FE lda CmdAddresses_High,x 00C18F 1 85 70 sta T1 00C191 1 00C191 1 ; execute command 00C191 1 6C 6F 00 jmp (T0) 00C194 1 ; ---------------- 00C194 1 00C194 1 ; End of command execution 00C194 1 ; A command that ends will jump here in order 00C194 1 ; to complete the operation. 00C194 1 ; 00C194 1 CommandEnd: 00C194 1 A9 00 lda #$00 00C196 1 8D F9 02 sta WBAM 00C199 1 LC199: 00C199 1 AD 6C 02 lda ERWORD 00C19C 1 D0 2A bne GenerateErrorMessage 00C19E 1 A0 00 ldy #$00 00C1A0 1 98 tya ; A = ERRORCODE_00_OK 00C1A1 1 84 80 sty TRACK 00C1A3 1 LC1A3: 00C1A3 1 84 81 sty SECTOR 00C1A5 1 84 A3 sty BUFTABCMD 00C1A7 1 20 C7 E6 jsr SetErrorCode 00C1AA 1 20 23 C1 jsr LC123 00C1AD 1 LC1AD: 00C1AD 1 A5 7F lda DRVNUM 00C1AF 1 8D 8E 02 sta LSTDRV 00C1B2 1 AA tax 00C1B3 1 .if CompileDrive >= DRIVE_1570 00C1B3 1 4C 9D A9 jmp LA99D 00C1B6 1 EA FillNOP 1 00C1B7 1 .elseif CompileDrive >= DRIVE_1541C_02 00C1B7 1 jmp LFFB8 00C1B7 1 FillNOP 1 00C1B7 1 .else 00C1B7 1 lda #$00 00C1B7 1 sta NODRV,x 00C1B7 1 .endif 00C1B7 1 00C1B7 1 LC1B7: 00C1B7 1 20 BD C1 jsr ClearCMDBUF 00C1BA 1 4C DA D4 jmp LD4DA 00C1BD 1 ; ---------------- 00C1BD 1 00C1BD 1 ; clear the command buffer 00C1BD 1 ; by overwriting it with 0 00C1BD 1 ; 00C1BD 1 ClearCMDBUF: 00C1BD 1 A0 28 ldy #CMDBUF_End - CMDBUF 00C1BF 1 A9 00 lda #0 00C1C1 1 : 00C1C1 1 99 00 02 sta CMDBUF,y 00C1C4 1 88 dey 00C1C5 1 10 FA bpl :- 00C1C7 1 60 rts 00C1C8 1 00C1C8 1 ; ---------------------------------------------- 00C1C8 1 ; generate an error message with error code in A 00C1C8 1 ; track and sector are both 0. 00C1C8 1 ; ---------------------------------------------- 00C1C8 1 00C1C8 1 GenerateErrorMessage: 00C1C8 1 A0 00 ldy #$00 00C1CA 1 84 80 sty TRACK 00C1CC 1 84 81 sty SECTOR 00C1CE 1 .if CompileDrive >= DRIVE_1570 00C1CE 1 4C D5 A9 jmp LA9D5 00C1D1 1 ; --- contains jmp LE645 at the end 00C1D1 1 .else 00C1D1 1 jmp LE645 00C1D1 1 .endif 00C1D1 1 ; ---------------- 00C1D1 1 00C1D1 1 LC1D1: 00C1D1 1 A2 00 ldx #$00 00C1D3 1 8E 7A 02 stx FILTBL 00C1D6 1 A9 3A lda #$3A 00C1D8 1 20 68 C2 jsr SearchInCmdline 00C1DB 1 F0 05 beq LC1E2 00C1DD 1 88 dey 00C1DE 1 88 dey 00C1DF 1 8C 7A 02 sty FILTBL 00C1E2 1 LC1E2: 00C1E2 1 4C 68 C3 jmp LC368 00C1E5 1 ; ---------------- 00C1E5 1 00C1E5 1 LC1E5: 00C1E5 1 A0 00 ldy #$00 00C1E7 1 A2 00 ldx #$00 00C1E9 1 A9 3A lda #$3A 00C1EB 1 4C 68 C2 jmp SearchInCmdline 00C1EE 1 ; ---------------- 00C1EE 1 00C1EE 1 LC1EE: 00C1EE 1 20 E5 C1 jsr LC1E5 00C1F1 1 D0 05 bne LC1F8 00C1F3 1 LC1F3: 00C1F3 1 A9 34 lda #ERRORCODE_34_SYNTAX_ERROR 00C1F5 1 4C C8 C1 jmp GenerateErrorMessage 00C1F8 1 ; ---------------- 00C1F8 1 00C1F8 1 LC1F8: 00C1F8 1 88 dey 00C1F9 1 88 dey 00C1FA 1 8C 7A 02 sty FILTBL 00C1FD 1 8A txa 00C1FE 1 D0 F3 bne LC1F3 00C200 1 LC200: 00C200 1 A9 3D lda #$3D 00C202 1 20 68 C2 jsr SearchInCmdline 00C205 1 8A txa 00C206 1 F0 02 beq LC20A 00C208 1 A9 40 lda #$40 00C20A 1 LC20A: 00C20A 1 09 21 ora #$21 00C20C 1 8D 8B 02 sta IMAGE 00C20F 1 E8 inx 00C210 1 8E 77 02 stx F1CNT 00C213 1 8E 78 02 stx F2CNT 00C216 1 AD 8A 02 lda PATFLG 00C219 1 F0 0D beq LC228 00C21B 1 A9 80 lda #$80 00C21D 1 0D 8B 02 ora IMAGE 00C220 1 8D 8B 02 sta IMAGE 00C223 1 A9 00 lda #$00 00C225 1 8D 8A 02 sta PATFLG 00C228 1 LC228: 00C228 1 98 tya 00C229 1 F0 29 beq LC254 00C22B 1 9D 7A 02 sta FILTBL,x 00C22E 1 AD 77 02 lda F1CNT 00C231 1 8D 79 02 sta F2PTR 00C234 1 A9 8D lda #$8D 00C236 1 20 68 C2 jsr SearchInCmdline 00C239 1 E8 inx 00C23A 1 8E 78 02 stx F2CNT 00C23D 1 CA dex 00C23E 1 AD 8A 02 lda PATFLG 00C241 1 F0 02 beq LC245 00C243 1 A9 08 lda #$08 00C245 1 LC245: 00C245 1 EC 77 02 cpx F1CNT 00C248 1 F0 02 beq LC24C 00C24A 1 09 04 ora #$04 00C24C 1 LC24C: 00C24C 1 09 03 ora #$03 00C24E 1 4D 8B 02 eor IMAGE 00C251 1 8D 8B 02 sta IMAGE 00C254 1 LC254: 00C254 1 AD 8B 02 lda IMAGE 00C257 1 AE 2A 02 ldx CMDNUM 00C25A 1 3D A5 FE and CmdSyntaxFlags - 8,x 00C25D 1 D0 01 bne LC260 00C25F 1 60 rts 00C260 1 LC260: 00C260 1 8D 6C 02 sta ERWORD 00C263 1 A9 30 lda #ERRORCODE_30_SYNTAX_ERROR 00C265 1 4C C8 C1 jmp GenerateErrorMessage 00C268 1 ; ---------------- 00C268 1 00C268 1 ; search for a specific character in the input buffer 00C268 1 ; Input: 00C268 1 ; A: The charter to search 00C268 1 ; X: number of comma-separated parameter to start with 00C268 1 ; Y: Pointer into the input buffer from where to search 00C268 1 ; 00C268 1 ; Return: 00C268 1 ; A: Pointer into the input buffer after the character found 00C268 1 ; Y: Same as A 00C268 1 ; X: Number of commas in command line before the character which was searched 00C268 1 ; ZF: set if character was not found 00C268 1 00C268 1 SearchInCmdline: 00C268 1 8D 75 02 sta CHAR ; remember the character to search 00C26B 1 @SearchLoop: 00C26B 1 CC 74 02 cpy CMDSIZ ; is the complete buffer read? 00C26E 1 B0 2E bcs @BufferExceeded ; yes --> done 00C270 1 00C270 1 B1 A3 lda (BUFTABCMD),y ; read next character 00C272 1 C8 iny 00C273 1 CD 75 02 cmp CHAR ; is it the character which is searched for? 00C276 1 F0 28 beq @FoundChar ; yes --> done 00C278 1 00C278 1 C9 2A cmp #'*' 00C27A 1 F0 04 beq @FoundWildcard ; '*' found --> mark 'wildcard' 00C27C 1 C9 3F cmp #'?' 00C27E 1 D0 03 bne @NoWildcard ; '?' found --> mark 'wildcard' 00C280 1 @FoundWildcard: 00C280 1 EE 8A 02 inc PATFLG ; remember: Found a wildcard 00C283 1 @NoWildcard: 00C283 1 C9 2C cmp #',' ; comma? 00C285 1 D0 E4 bne @SearchLoop ; no --> nothing found --> try next char 00C287 1 00C287 1 ; a comma has been found 00C287 1 98 tya 00C288 1 9D 7B 02 sta FILTBL + 1,x ; store the position of the comma 00C28B 1 00C28B 1 AD 8A 02 lda PATFLG ; did we find any wildcards yet? 00C28E 1 29 7F and # ~ PATTYP_WILDCARD 00C290 1 F0 07 beq @NoWildcardYet ; no --> that's it 00C292 1 00C292 1 A9 80 lda #PATTYP_WILDCARD 00C294 1 95 E7 sta PATTYP,x ; remember that his paramter contained a wildcard 00C296 1 8D 8A 02 sta PATFLG ; remember that the command line contained a wildcard 00C299 1 00C299 1 @NoWildcardYet: 00C299 1 E8 inx ; proceed to next comma-separated parameter 00C29A 1 E0 04 cpx #$04 ; already 4 paramters processed? 00C29C 1 90 CD bcc @SearchLoop ; no, try the next one 00C29E 1 00C29E 1 ; if we reach here directly (not via a branch/jump), we have more than 00C29E 1 ; 4 comma-separated parameters. 00C29E 1 ; Thus, we cannot process this, is we do not have as much space 00C29E 1 00C29E 1 @BufferExceeded: 00C29E 1 A0 00 ldy #$00 ; marker: character not found 00C2A0 1 00C2A0 1 @FoundChar: 00C2A0 1 AD 74 02 lda CMDSIZ ; store the position of the "last" parameter (empty) 00C2A3 1 9D 7B 02 sta FILTBL + 1,x ; into the table of parameter begins 00C2A6 1 00C2A6 1 AD 8A 02 lda PATFLG ; did we have wildcards? 00C2A9 1 29 7F and # ~ PATTYP_WILDCARD 00C2AB 1 F0 04 beq @DidNotHaveWildcards ; no --> done 00C2AD 1 00C2AD 1 A9 80 lda #PATTYP_WILDCARD ; store that there were wildcards in the command line 00C2AF 1 95 E7 sta PATTYP,x 00C2B1 1 00C2B1 1 @DidNotHaveWildcards: 00C2B1 1 98 tya ; position of the character searched into A 00C2B2 1 ; if nothing was found, set Z = 0 00C2B2 1 60 rts ; done 00C2B3 1 00C2B3 1 LC2B3: 00C2B3 1 ; remove trailing CR (at most, 2) 00C2B3 1 00C2B3 1 A4 A3 ldy BUFTABCMD ; length of command 00C2B5 1 F0 14 beq QuitRemovingTrailingCR ; == 0 --> done, there cannot be a CR 00C2B7 1 88 dey 00C2B8 1 F0 10 beq @QuitUndoDecrement ; == 1 --> done, do NOT remove the CR 00C2BA 1 00C2BA 1 ; read the last byte of the command 00C2BA 1 00C2BA 1 .if CompileDrive >= DRIVE_1570 00C2BA 1 ; lda CMDBUF,y IFF current command is not 'U0'; else, returns 0. 00C2BA 1 20 02 AA jsr READ_CMDBUF_BUT_SPECIAL_CASE_U0 00C2BD 1 .else 00C2BD 1 lda CMDBUF,y 00C2BD 1 .endif 00C2BD 1 C9 0D cmp #ASC_CR ; CR? 00C2BF 1 F0 0A beq QuitRemovingTrailingCR ; yes --> done, do NOT undo the DEY 00C2C1 1 00C2C1 1 ; check another byte for CR 00C2C1 1 88 dey 00C2C2 1 00C2C2 1 ; read the (now) last byte of the command 00C2C2 1 00C2C2 1 .if CompileDrive >= DRIVE_1570 00C2C2 1 ; lda CMDBUF,y IFF current command is not 'U0'; else, returns 0. 00C2C2 1 20 02 AA jsr READ_CMDBUF_BUT_SPECIAL_CASE_U0 00C2C5 1 .else 00C2C5 1 lda CMDBUF,y 00C2C5 1 .endif 00C2C5 1 C9 0D cmp #ASC_CR ; CR? 00C2C7 1 F0 02 beq QuitRemovingTrailingCR ; yes --> done, do NOT undo the DEY 00C2C9 1 00C2C9 1 C8 iny ; undo the last DEY as this was not a CR 00C2CA 1 @QuitUndoDecrement: 00C2CA 1 C8 iny ; undo the DEY in order to get the length of the command string 00C2CB 1 QuitRemovingTrailingCR: 00C2CB 1 8C 74 02 sty CMDSIZ ; store the length of the command 00C2CE 1 00C2CE 1 C0 2A cpy #CMDBUF_End2 - CMDBUF ; compare length of the command with maximum length of the buffer 00C2D0 1 A0 FF ldy #$FF ; preset error code for the case that the command does not fit 00C2D2 1 ; this is also the return value if an error occurred 00C2D2 1 90 08 bcc LC2DC ; does it fit into the command buffer? --> branch 00C2D4 1 00C2D4 1 8C 2A 02 sty CMDNUM ; set command to illegal 00C2D7 1 00C2D7 1 ; output 32,SYNTAX ERROR, as the command is too long 00C2D7 1 ; @@@TODO can this happen? If the test above fails, then the command already overwrite 00C2D7 1 ; part of our memory, didn't it? 00C2D7 1 A9 32 lda #ERRORCODE_32_SYNTAX_ERROR 00C2D9 1 4C C8 C1 jmp GenerateErrorMessage 00C2DC 1 ; ---------------- 00C2DC 1 00C2DC 1 ; @@@TODO init buffers, variables, ... 00C2DC 1 ; 00C2DC 1 LC2DC: 00C2DC 1 A0 00 ldy #$00 ; return value: no error 00C2DE 1 98 tya 00C2DF 1 85 A3 sta BUFTABCMD 00C2E1 1 8D 58 02 sta REC 00C2E4 1 8D 4A 02 sta TYPE 00C2E7 1 8D 96 02 sta TYPFLG 00C2EA 1 85 D3 sta F1PTR 00C2EC 1 8D 79 02 sta F2PTR 00C2EF 1 8D 77 02 sta F1CNT 00C2F2 1 8D 78 02 sta F2CNT 00C2F5 1 8D 8A 02 sta PATFLG 00C2F8 1 8D 6C 02 sta ERWORD ; ERRORCODE_00_OK 00C2FB 1 A2 05 ldx #$05 00C2FD 1 @LC2FD: 00C2FD 1 9D 79 02 sta F2PTR,x 00C300 1 95 D7 sta RELPTR,x 00C302 1 95 DC sta ENTSEC + 4,x 00C304 1 95 E1 sta ENTIND + 4,x 00C306 1 95 E6 sta FILDRV + 4,x 00C308 1 9D 7F 02 sta FILTBL + 5,x 00C30B 1 9D 84 02 sta FILTRK + 4,x 00C30E 1 CA dex 00C30F 1 D0 EC bne @LC2FD 00C311 1 60 rts 00C312 1 00C312 1 LC312: 00C312 1 AD 78 02 lda F2CNT 00C315 1 8D 77 02 sta F1CNT 00C318 1 A9 01 lda #$01 00C31A 1 8D 78 02 sta F2CNT 00C31D 1 8D 79 02 sta F2PTR 00C320 1 LC320: 00C320 1 AC 8E 02 ldy LSTDRV 00C323 1 A2 00 ldx #$00 00C325 1 @LC325: 00C325 1 86 D3 stx F1PTR 00C327 1 BD 7A 02 lda FILTBL,x 00C32A 1 20 3C C3 jsr @LC33C 00C32D 1 A6 D3 ldx F1PTR 00C32F 1 9D 7A 02 sta FILTBL,x 00C332 1 98 tya 00C333 1 95 E2 sta FILDRV,x 00C335 1 E8 inx 00C336 1 EC 78 02 cpx F2CNT 00C339 1 90 EA bcc @LC325 00C33B 1 60 rts 00C33C 1 @LC33C: 00C33C 1 AA tax 00C33D 1 A0 00 ldy #$00 00C33F 1 A9 3A lda #$3A 00C341 1 DD 01 02 cmp CMDBUF + 1,x 00C344 1 F0 0C beq @LC352 00C346 1 DD 00 02 cmp CMDBUF,x 00C349 1 D0 16 bne @LC361 00C34B 1 E8 inx 00C34C 1 @LC34C: 00C34C 1 98 tya 00C34D 1 @LC34D: 00C34D 1 29 01 and #$01 00C34F 1 @LC34F: 00C34F 1 A8 tay 00C350 1 8A txa 00C351 1 60 rts 00C352 1 @LC352: 00C352 1 BD 00 02 lda CMDBUF,x 00C355 1 E8 inx 00C356 1 E8 inx 00C357 1 C9 30 cmp #$30 00C359 1 F0 F2 beq @LC34D 00C35B 1 C9 31 cmp #$31 00C35D 1 F0 EE beq @LC34D 00C35F 1 D0 EB bne @LC34C 00C361 1 @LC361: 00C361 1 98 tya 00C362 1 09 80 ora #$80 00C364 1 29 81 and #$81 00C366 1 D0 E7 bne @LC34F 00C368 1 LC368: 00C368 1 A9 00 lda #$00 00C36A 1 8D 8B 02 sta IMAGE 00C36D 1 AC 7A 02 ldy FILTBL 00C370 1 @LC370: 00C370 1 B1 A3 lda (BUFTABCMD),y 00C372 1 20 BD C3 jsr CheckForValidDriveNumber 00C375 1 10 11 bpl @LC388 00C377 1 C8 iny 00C378 1 CC 74 02 cpy CMDSIZ 00C37B 1 B0 06 bcs @LC383 00C37D 1 AC 74 02 ldy CMDSIZ 00C380 1 88 dey 00C381 1 D0 ED bne @LC370 00C383 1 @LC383: 00C383 1 CE 8B 02 dec IMAGE 00C386 1 A9 00 lda #$00 00C388 1 @LC388: 00C388 1 29 01 and #$01 00C38A 1 85 7F sta DRVNUM 00C38C 1 4C 00 C1 jmp LC100 00C38F 1 ; ---------------- 00C38F 1 00C38F 1 LC38F: 00C38F 1 A5 7F lda DRVNUM 00C391 1 49 01 eor #$01 00C393 1 29 01 and #$01 00C395 1 85 7F sta DRVNUM 00C397 1 60 rts 00C398 1 ; ---------------- 00C398 1 00C398 1 LC398: 00C398 1 A0 00 ldy #$00 00C39A 1 AD 77 02 lda F1CNT 00C39D 1 CD 78 02 cmp F2CNT 00C3A0 1 F0 16 beq @LC3B8 00C3A2 1 CE 78 02 dec F2CNT 00C3A5 1 AC 78 02 ldy F2CNT 00C3A8 1 B9 7A 02 lda FILTBL,y 00C3AB 1 A8 tay 00C3AC 1 B1 A3 lda (BUFTABCMD),y 00C3AE 1 A0 04 ldy #$04 00C3B0 1 @LC3B0: 00C3B0 1 D9 BB FE cmp LFEBB,y 00C3B3 1 F0 03 beq @LC3B8 00C3B5 1 88 dey 00C3B6 1 D0 F8 bne @LC3B0 00C3B8 1 @LC3B8: 00C3B8 1 98 tya 00C3B9 1 8D 96 02 sta TYPFLG 00C3BC 1 60 rts 00C3BD 1 ; ---------------- 00C3BD 1 00C3BD 1 ; 00C3BD 1 ; This function checks if the (PETSCII) character in A 00C3BD 1 ; represents a valid drive number (0 or 1) 00C3BD 1 ; 00C3BD 1 ; Input: 00C3BD 1 ; A = PETSCII representation to check for 0 or 1 00C3BD 1 ; 00C3BD 1 ; Output: 00C3BD 1 ; A = $00 if A contained a representation for '0' 00C3BD 1 ; A = $01 if A contained a representation for '1' 00C3BD 1 ; A.7 set if A contained anything else 00C3BD 1 ; 00C3BD 1 CheckForValidDriveNumber: 00C3BD 1 C9 30 cmp #'0' 00C3BF 1 F0 06 beq @ValidDriveNumber 00C3C1 1 C9 31 cmp #'1' 00C3C3 1 F0 02 beq @ValidDriveNumber 00C3C5 1 09 80 ora #$80 00C3C7 1 @ValidDriveNumber: 00C3C7 1 29 81 and #$81 00C3C9 1 60 rts 00C3CA 1 ; ---------------- 00C3CA 1 00C3CA 1 LC3CA: 00C3CA 1 A9 00 lda #$00 00C3CC 1 85 6F sta T0 00C3CE 1 8D 8D 02 sta DRVFLG 00C3D1 1 48 pha 00C3D2 1 AE 78 02 ldx F2CNT 00C3D5 1 @LC3D5: 00C3D5 1 68 pla 00C3D6 1 05 6F ora T0 00C3D8 1 48 pha 00C3D9 1 A9 01 lda #$01 00C3DB 1 85 6F sta T0 00C3DD 1 CA dex 00C3DE 1 30 0F bmi @LC3EF 00C3E0 1 B5 E2 lda FILDRV,x 00C3E2 1 10 04 bpl @LC3E8 00C3E4 1 06 6F asl T0 00C3E6 1 06 6F asl T0 00C3E8 1 @LC3E8: 00C3E8 1 4A lsr a 00C3E9 1 90 EA bcc @LC3D5 00C3EB 1 06 6F asl T0 00C3ED 1 D0 E6 bne @LC3D5 00C3EF 1 @LC3EF: 00C3EF 1 68 pla 00C3F0 1 AA tax 00C3F1 1 BD 3F C4 lda LC440 - 1,x 00C3F4 1 48 pha 00C3F5 1 29 03 and #$03 00C3F7 1 8D 8C 02 sta DRVCNT 00C3FA 1 68 pla 00C3FB 1 0A asl a 00C3FC 1 10 3E bpl @LC43C 00C3FE 1 A5 E2 lda FILDRV 00C400 1 @LC400: 00C400 1 29 01 and #$01 00C402 1 85 7F sta DRVNUM 00C404 1 AD 8C 02 lda DRVCNT 00C407 1 F0 2B beq @LC434 00C409 1 20 3D C6 jsr LC63D 00C40C 1 F0 12 beq @LC420 00C40E 1 20 8F C3 jsr LC38F 00C411 1 A9 00 lda #$00 00C413 1 8D 8C 02 sta DRVCNT 00C416 1 20 3D C6 jsr LC63D 00C419 1 F0 1E beq @LC439 00C41B 1 @LC41B: 00C41B 1 A9 74 lda #ERRORCODE_74_DRIVE_NOT_READY 00C41D 1 20 C8 C1 jsr GenerateErrorMessage 00C420 1 00C420 1 @LC420: 00C420 1 20 8F C3 jsr LC38F 00C423 1 20 3D C6 jsr LC63D 00C426 1 08 php 00C427 1 20 8F C3 jsr LC38F 00C42A 1 28 plp 00C42B 1 F0 0C beq @LC439 00C42D 1 A9 00 lda #$00 00C42F 1 8D 8C 02 sta DRVCNT 00C432 1 F0 05 beq @LC439 00C434 1 @LC434: 00C434 1 20 3D C6 jsr LC63D 00C437 1 D0 E2 bne @LC41B 00C439 1 @LC439: 00C439 1 4C 00 C1 jmp LC100 00C43C 1 @LC43C: 00C43C 1 2A rol a 00C43D 1 4C 00 C4 jmp @LC400 00C440 1 ; ---------------- 00C440 1 00C440 1 LC440: 00C440 1 00 80 41 01 .byte $00,$80,$41,$01,$01,$01,$01,$81 00C444 1 01 01 01 81 00C448 1 81 81 81 42 .byte $81,$81,$81,$42,$42,$42,$42 00C44C 1 42 42 42 00C44F 1 00C44F 1 LC44F: 00C44F 1 20 CA C3 jsr LC3CA 00C452 1 @LC452: 00C452 1 A9 00 lda #$00 00C454 1 8D 92 02 sta DELIND 00C457 1 20 AC C5 jsr LC5AC 00C45A 1 D0 19 bne @LC475 00C45C 1 @LC45C: 00C45C 1 CE 8C 02 dec DRVCNT 00C45F 1 10 01 bpl @LC462 00C461 1 60 rts 00C462 1 00C462 1 @LC462: 00C462 1 A9 01 lda #$01 00C464 1 8D 8D 02 sta DRVFLG 00C467 1 20 8F C3 jsr LC38F 00C46A 1 20 00 C1 jsr LC100 00C46D 1 4C 52 C4 jmp @LC452 00C470 1 @LC470: 00C470 1 20 17 C6 jsr LC617 00C473 1 F0 10 beq @LC485 00C475 1 @LC475: 00C475 1 20 D8 C4 jsr LC4D8 00C478 1 AD 8F 02 lda FOUND 00C47B 1 F0 01 beq @LC47E 00C47D 1 60 rts 00C47E 1 @LC47E: 00C47E 1 AD 53 02 lda ENTFND 00C481 1 30 ED bmi @LC470 00C483 1 10 F0 bpl @LC475 00C485 1 @LC485: 00C485 1 AD 8F 02 lda FOUND 00C488 1 F0 D2 beq @LC45C 00C48A 1 60 rts 00C48B 1 ; ------------------ 00C48B 1 00C48B 1 LC48B: 00C48B 1 20 04 C6 jsr LC604 00C48E 1 F0 1A beq LC4AA 00C490 1 D0 28 bne LC4BA 00C492 1 LC492: 00C492 1 A9 01 lda #$01 00C494 1 8D 8D 02 sta DRVFLG 00C497 1 20 8F C3 jsr LC38F 00C49A 1 20 00 C1 jsr LC100 00C49D 1 LC49D: 00C49D 1 A9 00 lda #$00 00C49F 1 8D 92 02 sta DELIND 00C4A2 1 20 AC C5 jsr LC5AC 00C4A5 1 D0 13 bne LC4BA 00C4A7 1 8D 8F 02 sta FOUND 00C4AA 1 LC4AA: 00C4AA 1 AD 8F 02 lda FOUND 00C4AD 1 D0 28 bne LC4D7 00C4AF 1 CE 8C 02 dec DRVCNT 00C4B2 1 10 DE bpl LC492 00C4B4 1 60 rts 00C4B5 1 ; ------------------ 00C4B5 1 00C4B5 1 LC4B5: 00C4B5 1 20 17 C6 jsr LC617 00C4B8 1 F0 F0 beq LC4AA 00C4BA 1 LC4BA: 00C4BA 1 20 D8 C4 jsr LC4D8 00C4BD 1 AE 53 02 ldx ENTFND 00C4C0 1 10 07 bpl @LC4C9 00C4C2 1 AD 8F 02 lda FOUND 00C4C5 1 F0 EE beq LC4B5 00C4C7 1 D0 0E bne LC4D7 00C4C9 1 @LC4C9: 00C4C9 1 AD 96 02 lda TYPFLG 00C4CC 1 F0 09 beq LC4D7 00C4CE 1 B5 E7 lda PATTYP,x 00C4D0 1 29 07 and #$07 00C4D2 1 CD 96 02 cmp TYPFLG 00C4D5 1 D0 DE bne LC4B5 00C4D7 1 LC4D7: 00C4D7 1 60 rts 00C4D8 1 ; ------------------ 00C4D8 1 00C4D8 1 LC4D8: 00C4D8 1 A2 FF ldx #$FF 00C4DA 1 8E 53 02 stx ENTFND 00C4DD 1 E8 inx 00C4DE 1 8E 8A 02 stx PATFLG 00C4E1 1 20 89 C5 jsr LC589 00C4E4 1 F0 06 beq LC4EC 00C4E6 1 LC4E6: 00C4E6 1 60 rts 00C4E7 1 LC4E7: 00C4E7 1 20 94 C5 jsr LC594 00C4EA 1 D0 FA bne LC4E6 00C4EC 1 LC4EC: 00C4EC 1 A5 7F lda DRVNUM 00C4EE 1 55 E2 eor FILDRV,x 00C4F0 1 4A lsr a 00C4F1 1 90 0B bcc @LC4FE 00C4F3 1 29 40 and #$40 00C4F5 1 F0 F0 beq LC4E7 00C4F7 1 A9 02 lda #$02 00C4F9 1 CD 8C 02 cmp DRVCNT 00C4FC 1 F0 E9 beq LC4E7 00C4FE 1 @LC4FE: 00C4FE 1 BD 7A 02 lda FILTBL,x 00C501 1 AA tax 00C502 1 20 A6 C6 jsr LC6A6 00C505 1 A0 03 ldy #$03 00C507 1 4C 1D C5 jmp @LC51D 00C50A 1 @LC50A: 00C50A 1 BD 00 02 lda CMDBUF,x 00C50D 1 D1 94 cmp (DIRBUF),y 00C50F 1 F0 0A beq @LC51B 00C511 1 C9 3F cmp #$3F 00C513 1 D0 D2 bne LC4E7 00C515 1 B1 94 lda (DIRBUF),y 00C517 1 C9 A0 cmp #$A0 00C519 1 F0 CC beq LC4E7 00C51B 1 @LC51B: 00C51B 1 E8 inx 00C51C 1 C8 iny 00C51D 1 @LC51D: 00C51D 1 EC 76 02 cpx LIMIT 00C520 1 B0 09 bcs @LC52B 00C522 1 BD 00 02 lda CMDBUF,x 00C525 1 C9 2A cmp #$2A 00C527 1 F0 0C beq @LC535 00C529 1 D0 DF bne @LC50A 00C52B 1 @LC52B: 00C52B 1 C0 13 cpy #$13 00C52D 1 B0 06 bcs @LC535 00C52F 1 B1 94 lda (DIRBUF),y 00C531 1 C9 A0 cmp #$A0 00C533 1 D0 B2 bne LC4E7 00C535 1 @LC535: 00C535 1 AE 79 02 ldx F2PTR 00C538 1 8E 53 02 stx ENTFND 00C53B 1 B5 E7 lda PATTYP,x 00C53D 1 29 80 and #$80 00C53F 1 8D 8A 02 sta PATFLG 00C542 1 AD 94 02 lda INDEX 00C545 1 95 DD sta ENTIND,x 00C547 1 A5 81 lda SECTOR 00C549 1 95 D8 sta ENTSEC,x 00C54B 1 A0 00 ldy #$00 00C54D 1 B1 94 lda (DIRBUF),y 00C54F 1 C8 iny 00C550 1 48 pha 00C551 1 29 40 and #$40 00C553 1 85 6F sta T0 00C555 1 68 pla 00C556 1 29 DF and # ~ $20 00C558 1 30 02 bmi @LC55C 00C55A 1 09 20 ora #$20 00C55C 1 @LC55C: 00C55C 1 29 27 and #$27 00C55E 1 05 6F ora T0 00C560 1 85 6F sta T0 00C562 1 A9 80 lda #$80 00C564 1 35 E7 and PATTYP,x 00C566 1 05 6F ora T0 00C568 1 95 E7 sta PATTYP,x 00C56A 1 B5 E2 lda FILDRV,x 00C56C 1 29 80 and #$80 00C56E 1 05 7F ora DRVNUM 00C570 1 95 E2 sta FILDRV,x 00C572 1 B1 94 lda (DIRBUF),y 00C574 1 9D 80 02 sta FILTRK,x 00C577 1 C8 iny 00C578 1 B1 94 lda (DIRBUF),y 00C57A 1 9D 85 02 sta FILSEC,x 00C57D 1 AD 58 02 lda REC 00C580 1 D0 07 bne LC589 00C582 1 A0 15 ldy #$15 00C584 1 B1 94 lda (DIRBUF),y 00C586 1 8D 58 02 sta REC 00C589 1 00C589 1 LC589: 00C589 1 A9 FF lda #$FF 00C58B 1 8D 8F 02 sta FOUND 00C58E 1 AD 78 02 lda F2CNT 00C591 1 8D 79 02 sta F2PTR 00C594 1 LC594: 00C594 1 CE 79 02 dec F2PTR 00C597 1 10 01 bpl @LC59A 00C599 1 60 rts 00C59A 1 00C59A 1 @LC59A: 00C59A 1 AE 79 02 ldx F2PTR 00C59D 1 B5 E7 lda PATTYP,x 00C59F 1 30 05 bmi @LC5A6 00C5A1 1 BD 80 02 lda FILTRK,x 00C5A4 1 D0 EE bne LC594 00C5A6 1 @LC5A6: 00C5A6 1 A9 00 lda #$00 00C5A8 1 8D 8F 02 sta FOUND 00C5AB 1 60 rts 00C5AC 1 ; ------------------ 00C5AC 1 00C5AC 1 LC5AC: 00C5AC 1 A0 00 ldy #$00 00C5AE 1 8C 91 02 sty DELSEC 00C5B1 1 88 dey 00C5B2 1 8C 53 02 sty ENTFND 00C5B5 1 AD 85 FE lda LFE85 00C5B8 1 85 80 sta TRACK 00C5BA 1 A9 01 lda #$01 00C5BC 1 85 81 sta SECTOR 00C5BE 1 8D 93 02 sta LSTBUF 00C5C1 1 20 75 D4 jsr LD475 00C5C4 1 LC5C4: 00C5C4 1 AD 93 02 lda LSTBUF 00C5C7 1 D0 01 bne @LC5CA 00C5C9 1 60 rts 00C5CA 1 @LC5CA: 00C5CA 1 A9 07 lda #$07 00C5CC 1 8D 95 02 sta FILCNT 00C5CF 1 A9 00 lda #$00 00C5D1 1 20 F6 D4 jsr LD4F6 00C5D4 1 8D 93 02 sta LSTBUF 00C5D7 1 LC5D7: 00C5D7 1 20 E8 D4 jsr LD4E8 00C5DA 1 CE 95 02 dec FILCNT 00C5DD 1 A0 00 ldy #$00 00C5DF 1 B1 94 lda (DIRBUF),y 00C5E1 1 D0 18 bne @LC5FB 00C5E3 1 AD 91 02 lda DELSEC 00C5E6 1 D0 2F bne LC617 00C5E8 1 20 3B DE jsr LDE3B 00C5EB 1 A5 81 lda SECTOR 00C5ED 1 8D 91 02 sta DELSEC 00C5F0 1 A5 94 lda DIRBUF 00C5F2 1 AE 92 02 ldx DELIND 00C5F5 1 8D 92 02 sta DELIND 00C5F8 1 F0 1D beq LC617 00C5FA 1 60 rts 00C5FB 1 ; ----------------- 00C5FB 1 00C5FB 1 @LC5FB: 00C5FB 1 A2 01 ldx #$01 00C5FD 1 EC 92 02 cpx DELIND 00C600 1 D0 2D bne LC62F 00C602 1 F0 13 beq LC617 00C604 1 LC604: 00C604 1 AD 85 FE lda LFE85 00C607 1 85 80 sta TRACK 00C609 1 AD 90 02 lda DIRSEC 00C60C 1 85 81 sta SECTOR 00C60E 1 20 75 D4 jsr LD475 00C611 1 AD 94 02 lda INDEX 00C614 1 20 C8 D4 jsr LD4C8 00C617 1 LC617: 00C617 1 A9 FF lda #$FF 00C619 1 8D 53 02 sta ENTFND 00C61C 1 AD 95 02 lda FILCNT 00C61F 1 30 08 bmi @LC629 00C621 1 A9 20 lda #$20 00C623 1 20 C6 D1 jsr LD1C6 00C626 1 4C D7 C5 jmp LC5D7 00C629 1 ; ----------------- 00C629 1 00C629 1 @LC629: 00C629 1 20 4D D4 jsr LD44D 00C62C 1 4C C4 C5 jmp LC5C4 00C62F 1 LC62F: 00C62F 1 A5 94 lda DIRBUF 00C631 1 8D 94 02 sta INDEX 00C634 1 20 3B DE jsr LDE3B 00C637 1 A5 81 lda SECTOR 00C639 1 8D 90 02 sta DIRSEC 00C63C 1 60 rts 00C63D 1 ; ----------------- 00C63D 1 00C63D 1 LC63D: 00C63D 1 A5 68 lda AUTOFG 00C63F 1 D0 28 bne LC669 00C641 1 A6 7F ldx DRVNUM 00C643 1 56 1C lsr WPSW,x 00C645 1 90 22 bcc LC669 00C647 1 A9 FF lda #$FF 00C649 1 8D 98 02 sta JOBRTN 00C64C 1 20 0E D0 jsr LD00E 00C64F 1 A0 FF ldy #$FF 00C651 1 C9 02 cmp #$02 00C653 1 F0 0A beq @LC65F 00C655 1 C9 03 cmp #$03 00C657 1 F0 06 beq @LC65F 00C659 1 C9 0F cmp #$0F 00C65B 1 F0 02 beq @LC65F 00C65D 1 A0 00 ldy #$00 00C65F 1 @LC65F: 00C65F 1 A6 7F ldx DRVNUM 00C661 1 .if CompileDrive >= DRIVE_1570 00C661 1 4C A5 A9 jmp LA9A5 00C664 1 .elseif CompileDrive >= DRIVE_1541C_02 00C664 1 jmp LFFC0 00C664 1 .else 00C664 1 tya 00C664 1 sta NODRV,x 00C664 1 .endif 00C664 1 00C664 1 LC664: 00C664 1 D0 03 bne LC669 00C666 1 20 42 D0 jsr LD042 00C669 1 LC669: 00C669 1 A6 7F ldx DRVNUM 00C66B 1 .if CompileDrive >= DRIVE_1570 00C66B 1 4C 17 AA jmp LAA17 00C66E 1 .elseif CompileDrive >= DRIVE_1541C_02 00C66E 1 jmp LFFAC 00C66E 1 .else 00C66E 1 lda NODRV,x 00C66E 1 rts 00C66E 1 .endif 00C66E 1 00C66E 1 LC66E: 00C66E 1 48 pha 00C66F 1 20 A6 C6 jsr LC6A6 00C672 1 20 88 C6 jsr @LC688 00C675 1 68 pla 00C676 1 38 sec 00C677 1 ED 4B 02 sbc STRSIZ 00C67A 1 AA tax 00C67B 1 F0 0A beq @LC687 00C67D 1 90 08 bcc @LC687 00C67F 1 A9 A0 lda #$A0 00C681 1 @LC681: 00C681 1 91 94 sta (DIRBUF),y 00C683 1 C8 iny 00C684 1 CA dex 00C685 1 D0 FA bne @LC681 00C687 1 @LC687: 00C687 1 60 rts 00C688 1 ; --------------- 00C688 1 00C688 1 @LC688: 00C688 1 98 tya 00C689 1 0A asl a 00C68A 1 A8 tay 00C68B 1 B9 99 00 lda BUFTAB0,y 00C68E 1 85 94 sta DIRBUF 00C690 1 B9 9A 00 lda BUFTAB0 + 1,y 00C693 1 85 95 sta DIRBUF + 1 00C695 1 A0 00 ldy #$00 00C697 1 @LC697: 00C697 1 BD 00 02 lda CMDBUF,x 00C69A 1 91 94 sta (DIRBUF),y 00C69C 1 C8 iny 00C69D 1 F0 06 beq @LC6A5 00C69F 1 E8 inx 00C6A0 1 EC 76 02 cpx LIMIT 00C6A3 1 90 F2 bcc @LC697 00C6A5 1 @LC6A5: 00C6A5 1 60 rts 00C6A6 1 ; --------------- 00C6A6 1 00C6A6 1 LC6A6: 00C6A6 1 A9 00 lda #$00 00C6A8 1 8D 4B 02 sta STRSIZ 00C6AB 1 8A txa 00C6AC 1 48 pha 00C6AD 1 @LC6AD: 00C6AD 1 BD 00 02 lda CMDBUF,x 00C6B0 1 C9 2C cmp #',' 00C6B2 1 F0 14 beq @LC6C8 00C6B4 1 C9 3D cmp #'=' 00C6B6 1 F0 10 beq @LC6C8 00C6B8 1 EE 4B 02 inc STRSIZ 00C6BB 1 E8 inx 00C6BC 1 A9 0F lda #$0F 00C6BE 1 CD 4B 02 cmp STRSIZ 00C6C1 1 90 05 bcc @LC6C8 00C6C3 1 EC 74 02 cpx CMDSIZ 00C6C6 1 90 E5 bcc @LC6AD 00C6C8 1 @LC6C8: 00C6C8 1 8E 76 02 stx LIMIT 00C6CB 1 68 pla 00C6CC 1 AA tax 00C6CD 1 60 rts 00C6CE 1 ; ------------------- 00C6CE 1 00C6CE 1 LC6CE: 00C6CE 1 A5 83 lda SA 00C6D0 1 48 pha 00C6D1 1 A5 82 lda LINDX 00C6D3 1 48 pha 00C6D4 1 20 DE C6 jsr @LC6DE 00C6D7 1 68 pla 00C6D8 1 85 82 sta LINDX 00C6DA 1 68 pla 00C6DB 1 85 83 sta SA 00C6DD 1 60 rts 00C6DE 1 ; ---------------- 00C6DE 1 00C6DE 1 @LC6DE: 00C6DE 1 A9 11 lda #$11 00C6E0 1 85 83 sta SA 00C6E2 1 20 EB D0 jsr LD0EB 00C6E5 1 20 E8 D4 jsr LD4E8 00C6E8 1 AD 53 02 lda ENTFND 00C6EB 1 10 0A bpl @LC6F7 00C6ED 1 AD 8D 02 lda DRVFLG 00C6F0 1 D0 0A bne @LC6FC 00C6F2 1 20 06 C8 jsr LC806 00C6F5 1 18 clc 00C6F6 1 60 rts 00C6F7 1 00C6F7 1 @LC6F7: 00C6F7 1 AD 8D 02 lda DRVFLG 00C6FA 1 F0 1F beq @LC71B 00C6FC 1 @LC6FC: 00C6FC 1 CE 8D 02 dec DRVFLG 00C6FF 1 D0 0D bne @LC70E 00C701 1 CE 8D 02 dec DRVFLG 00C704 1 20 8F C3 jsr LC38F 00C707 1 20 06 C8 jsr LC806 00C70A 1 38 sec 00C70B 1 4C 8F C3 jmp LC38F 00C70E 1 @LC70E: 00C70E 1 A9 00 lda #$00 00C710 1 8D 73 02 sta NBTEMP + 1 00C713 1 8D 8D 02 sta DRVFLG 00C716 1 20 B7 C7 jsr LC7B7 00C719 1 38 sec 00C71A 1 60 rts 00C71B 1 ; ---------------- 00C71B 1 00C71B 1 @LC71B: 00C71B 1 A2 18 ldx #$18 00C71D 1 A0 1D ldy #$1D 00C71F 1 B1 94 lda (DIRBUF),y 00C721 1 8D 73 02 sta NBTEMP + 1 00C724 1 F0 02 beq @LC728 00C726 1 A2 16 ldx #$16 00C728 1 @LC728: 00C728 1 88 dey 00C729 1 B1 94 lda (DIRBUF),y 00C72B 1 8D 72 02 sta NBTEMP 00C72E 1 E0 16 cpx #$16 00C730 1 F0 0A beq @LC73C 00C732 1 C9 0A cmp #$0A 00C734 1 90 06 bcc @LC73C 00C736 1 CA dex 00C737 1 C9 64 cmp #$64 00C739 1 90 01 bcc @LC73C 00C73B 1 CA dex 00C73C 1 @LC73C: 00C73C 1 20 AC C7 jsr LC7AC 00C73F 1 B1 94 lda (DIRBUF),y 00C741 1 48 pha 00C742 1 0A asl a 00C743 1 10 05 bpl @LC74A 00C745 1 A9 3C lda #$3C 00C747 1 9D B2 02 sta NAMBUF + 1,x 00C74A 1 @LC74A: 00C74A 1 68 pla 00C74B 1 29 0F and #$0F 00C74D 1 A8 tay 00C74E 1 B9 C5 FE lda LFEC5,y 00C751 1 9D B1 02 sta NAMBUF,x 00C754 1 CA dex 00C755 1 B9 C0 FE lda LFEC0,y 00C758 1 9D B1 02 sta NAMBUF,x 00C75B 1 CA dex 00C75C 1 B9 BB FE lda LFEBB,y 00C75F 1 9D B1 02 sta NAMBUF,x 00C762 1 CA dex 00C763 1 CA dex 00C764 1 B0 05 bcs @LC76B 00C766 1 A9 2A lda #$2A 00C768 1 9D B2 02 sta NAMBUF + 1,x 00C76B 1 @LC76B: 00C76B 1 A9 A0 lda #$A0 00C76D 1 9D B1 02 sta NAMBUF,x 00C770 1 CA dex 00C771 1 A0 12 ldy #$12 00C773 1 @LC773: 00C773 1 B1 94 lda (DIRBUF),y 00C775 1 9D B1 02 sta NAMBUF,x 00C778 1 CA dex 00C779 1 88 dey 00C77A 1 C0 03 cpy #$03 00C77C 1 B0 F5 bcs @LC773 00C77E 1 A9 22 lda #$22 00C780 1 9D B1 02 sta NAMBUF,x 00C783 1 @LC783: 00C783 1 E8 inx 00C784 1 E0 20 cpx #$20 00C786 1 B0 0B bcs @LC793 00C788 1 BD B1 02 lda NAMBUF,x 00C78B 1 C9 22 cmp #$22 00C78D 1 F0 04 beq @LC793 00C78F 1 C9 A0 cmp #$A0 00C791 1 D0 F0 bne @LC783 00C793 1 @LC793: 00C793 1 A9 22 lda #$22 00C795 1 9D B1 02 sta NAMBUF,x 00C798 1 @LC798: 00C798 1 E8 inx 00C799 1 E0 20 cpx #$20 00C79B 1 B0 0A bcs @LC7A7 00C79D 1 A9 7F lda #$7F 00C79F 1 3D B1 02 and NAMBUF,x 00C7A2 1 9D B1 02 sta NAMBUF,x 00C7A5 1 10 F1 bpl @LC798 00C7A7 1 @LC7A7: 00C7A7 1 20 B5 C4 jsr LC4B5 00C7AA 1 38 sec 00C7AB 1 60 rts 00C7AC 1 ; ----------------- 00C7AC 1 00C7AC 1 LC7AC: 00C7AC 1 A0 1B ldy #$1B 00C7AE 1 A9 20 lda #$20 00C7B0 1 @LC7B0: 00C7B0 1 99 B0 02 sta L02B0,y 00C7B3 1 88 dey 00C7B4 1 D0 FA bne @LC7B0 00C7B6 1 60 rts 00C7B7 1 ; -------------- 00C7B7 1 00C7B7 1 LC7B7: 00C7B7 1 20 19 F1 jsr LF119 00C7BA 1 20 DF F0 jsr LF0DF 00C7BD 1 20 AC C7 jsr LC7AC 00C7C0 1 A9 FF lda #$FF 00C7C2 1 85 6F sta T0 00C7C4 1 A6 7F ldx DRVNUM 00C7C6 1 8E 72 02 stx NBTEMP 00C7C9 1 A9 00 lda #$00 00C7CB 1 8D 73 02 sta NBTEMP + 1 00C7CE 1 A6 F9 ldx JOBNUM 00C7D0 1 BD E0 FE lda TableHighBytesOfBuffers,x 00C7D3 1 85 95 sta DIRBUF + 1 00C7D5 1 AD 88 FE lda LFE85 + 3 00C7D8 1 85 94 sta DIRBUF 00C7DA 1 A0 16 ldy #$16 00C7DC 1 B1 94 lda (DIRBUF),y 00C7DE 1 C9 A0 cmp #$A0 00C7E0 1 D0 0B bne @LC7ED 00C7E2 1 A9 31 lda #$31 00C7E4 1 2C .byte ASM_BIT3 00C7E5 1 @LC7E5: 00C7E5 1 B1 94 lda (DIRBUF),y 00C7E7 1 C9 A0 cmp #$A0 00C7E9 1 D0 02 bne @LC7ED 00C7EB 1 A9 20 lda #$20 00C7ED 1 @LC7ED: 00C7ED 1 99 B3 02 sta NAMBUF + 2,y 00C7F0 1 88 dey 00C7F1 1 10 F2 bpl @LC7E5 00C7F3 1 A9 12 lda #$12 00C7F5 1 8D B1 02 sta NAMBUF 00C7F8 1 A9 22 lda #$22 00C7FA 1 8D B2 02 sta NAMBUF + 1 00C7FD 1 8D C3 02 sta NAMBUF + 18 00C800 1 A9 20 lda #$20 00C802 1 8D C4 02 sta NAMBUF + 19 00C805 1 60 rts 00C806 1 ; -------------------- 00C806 1 00C806 1 LC806: 00C806 1 20 AC C7 jsr LC7AC 00C809 1 A0 0B ldy #$0B 00C80B 1 @LC80B: 00C80B 1 B9 17 C8 lda TextBlocksFree,y 00C80E 1 99 B1 02 sta NAMBUF,y 00C811 1 88 dey 00C812 1 10 F7 bpl @LC80B 00C814 1 4C 4D EF jmp LEF4D 00C817 1 ; ------------------- 00C817 1 00C817 1 TextBlocksFree: 00C817 1 42 4C 4F 43 .byte "BLOCKS FREE." 00C81B 1 4B 53 20 46 00C81F 1 52 45 45 2E 00C823 1 00C823 1 cmd_scratch: 00C823 1 20 98 C3 jsr LC398 00C826 1 20 20 C3 jsr LC320 00C829 1 20 CA C3 jsr LC3CA 00C82C 1 A9 00 lda #$00 00C82E 1 85 86 sta R0 00C830 1 20 9D C4 jsr LC49D 00C833 1 30 3D bmi @LC872 00C835 1 @LC835: 00C835 1 20 B7 DD jsr LDDB7 00C838 1 90 33 bcc @LC86D 00C83A 1 A0 00 ldy #$00 00C83C 1 B1 94 lda (DIRBUF),y 00C83E 1 29 40 and #$40 00C840 1 D0 2B bne @LC86D 00C842 1 20 B6 C8 jsr LC8B6 00C845 1 A0 13 ldy #$13 00C847 1 B1 94 lda (DIRBUF),y 00C849 1 F0 0A beq @LC855 00C84B 1 85 80 sta TRACK 00C84D 1 C8 iny 00C84E 1 B1 94 lda (DIRBUF),y 00C850 1 85 81 sta SECTOR 00C852 1 20 7D C8 jsr LC87D 00C855 1 @LC855: 00C855 1 AE 53 02 ldx ENTFND 00C858 1 A9 20 lda #$20 00C85A 1 35 E7 and PATTYP,x 00C85C 1 D0 0D bne @LC86B 00C85E 1 BD 80 02 lda FILTRK,x 00C861 1 85 80 sta TRACK 00C863 1 BD 85 02 lda FILSEC,x 00C866 1 85 81 sta SECTOR 00C868 1 20 7D C8 jsr LC87D 00C86B 1 @LC86B: 00C86B 1 E6 86 inc R0 00C86D 1 @LC86D: 00C86D 1 20 8B C4 jsr LC48B 00C870 1 10 C3 bpl @LC835 00C872 1 @LC872: 00C872 1 A5 86 lda R0 00C874 1 85 80 sta TRACK 00C876 1 A9 01 lda #ERRORCODE_01_FILES_SCRATCHED 00C878 1 A0 00 ldy #$00 00C87A 1 4C A3 C1 jmp LC1A3 00C87D 1 ; ------------------ 00C87D 1 00C87D 1 LC87D: 00C87D 1 20 5F EF jsr LEF5F 00C880 1 20 75 D4 jsr LD475 00C883 1 20 19 F1 jsr LF119 00C886 1 B5 A7 lda BUF0,x 00C888 1 C9 FF cmp #$FF 00C88A 1 F0 08 beq @LC894 00C88C 1 AD F9 02 lda WBAM 00C88F 1 09 40 ora #$40 00C891 1 8D F9 02 sta WBAM 00C894 1 @LC894: 00C894 1 A9 00 lda #$00 00C896 1 20 C8 D4 jsr LD4C8 00C899 1 20 56 D1 jsr LD156 00C89C 1 85 80 sta TRACK 00C89E 1 20 56 D1 jsr LD156 00C8A1 1 85 81 sta SECTOR 00C8A3 1 A5 80 lda TRACK 00C8A5 1 D0 06 bne @LC8AD 00C8A7 1 20 F4 EE jsr LEEF4 00C8AA 1 4C 27 D2 jmp LD227 00C8AD 1 @LC8AD: 00C8AD 1 20 5F EF jsr LEF5F 00C8B0 1 20 4D D4 jsr LD44D 00C8B3 1 4C 94 C8 jmp @LC894 00C8B6 1 ; ------------ 00C8B6 1 00C8B6 1 LC8B6: 00C8B6 1 A0 00 ldy #$00 00C8B8 1 98 tya 00C8B9 1 91 94 sta (DIRBUF),y 00C8BB 1 20 5E DE jsr LDE5E 00C8BE 1 4C 99 D5 jmp LD599 00C8C1 1 ; --------------- 00C8C1 1 00C8C1 1 cmd_duplicate: 00C8C1 1 Error31SyntaxError: 00C8C1 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 00C8C3 1 4C C8 C1 jmp GenerateErrorMessage 00C8C6 1 ; ---------------- 00C8C6 1 00C8C6 1 LC8C6: 00C8C6 1 A9 4C lda #ASM_JMP 00C8C8 1 8D 00 06 sta BUFFER3 00C8CB 1 A9 C7 lda #LFAC7 00C8D2 1 8D 02 06 sta BUFFER3 + 2 00C8D5 1 A9 03 lda #$03 00C8D7 1 20 D3 D6 jsr LD6D3 00C8DA 1 A5 7F lda DRVNUM 00C8DC 1 09 E0 ora #$E0 00C8DE 1 85 03 sta JOBS3 00C8E0 1 @LC8E0: 00C8E0 1 A5 03 lda JOBS3 00C8E2 1 30 FC bmi @LC8E0 00C8E4 1 C9 02 cmp #$02 00C8E6 1 90 07 bcc @LC8EF 00C8E8 1 A9 03 lda #$03 00C8EA 1 A2 00 ldx #$00 00C8EC 1 4C 0A E6 jmp LE60A 00C8EF 1 @LC8EF: 00C8EF 1 60 rts 00C8F0 1 ; --------------- 00C8F0 1 00C8F0 1 cmd_copy: 00C8F0 1 A9 E0 lda #$E0 00C8F2 1 8D 4F 02 sta BUFUSE 00C8F5 1 20 D1 F0 jsr LF0D1 00C8F8 1 20 19 F1 jsr LF119 00C8FB 1 A9 FF lda #$FF 00C8FD 1 95 A7 sta BUF0,x 00C8FF 1 A9 0F lda #$0F 00C901 1 8D 56 02 sta LINUSE 00C904 1 20 E5 C1 jsr LC1E5 00C907 1 D0 03 bne @LC90C 00C909 1 4C C1 C8 jmp Error31SyntaxError 00C90C 1 @LC90C: 00C90C 1 20 F8 C1 jsr LC1F8 00C90F 1 20 20 C3 jsr LC320 00C912 1 AD 8B 02 lda IMAGE 00C915 1 29 55 and #'U' 00C917 1 D0 0F bne LC928 00C919 1 AE 7A 02 ldx FILTBL 00C91C 1 BD 00 02 lda CMDBUF,x 00C91F 1 C9 2A cmp #'*' 00C921 1 D0 05 bne LC928 00C923 1 00C923 1 Error30SyntaxError: 00C923 1 A9 30 lda #ERRORCODE_30_SYNTAX_ERROR 00C925 1 4C C8 C1 jmp GenerateErrorMessage 00C928 1 ; ---------------- 00C928 1 00C928 1 LC928: 00C928 1 AD 8B 02 lda IMAGE 00C92B 1 29 D9 and #$D9 00C92D 1 D0 F4 bne Error30SyntaxError 00C92F 1 4C 52 C9 jmp @LC952 00C932 1 A9 00 lda #$00 00C934 1 8D 58 02 sta REC 00C937 1 8D 8C 02 sta DRVCNT 00C93A 1 8D 80 02 sta FILTRK 00C93D 1 8D 81 02 sta FILTRK + 1 00C940 1 A5 E3 lda FILDRV + 1 00C942 1 29 01 and #$01 00C944 1 85 7F sta DRVNUM 00C946 1 09 01 ora #$01 00C948 1 8D 91 02 sta DELSEC 00C94B 1 AD 7B 02 lda FILTBL + 1 00C94E 1 8D 7A 02 sta FILTBL 00C951 1 60 rts 00C952 1 ; ---------------- 00C952 1 00C952 1 @LC952: 00C952 1 20 4F C4 jsr LC44F 00C955 1 AD 78 02 lda F2CNT 00C958 1 C9 03 cmp #$03 00C95A 1 90 45 bcc @LC9A1 00C95C 1 A5 E2 lda FILDRV 00C95E 1 C5 E3 cmp FILDRV + 1 00C960 1 D0 3F bne @LC9A1 00C962 1 A5 DD lda ENTIND 00C964 1 C5 DE cmp ENTIND + 1 00C966 1 D0 39 bne @LC9A1 00C968 1 A5 D8 lda ENTSEC 00C96A 1 C5 D9 cmp ENTSEC + 1 00C96C 1 D0 33 bne @LC9A1 00C96E 1 20 CC CA jsr LCACC 00C971 1 A9 01 lda #$01 00C973 1 8D 79 02 sta F2PTR 00C976 1 20 FA C9 jsr LC9FA 00C979 1 20 25 D1 jsr LD125 00C97C 1 F0 04 beq @LC982 00C97E 1 C9 02 cmp #$02 00C980 1 D0 05 bne @LC987 00C982 1 @LC982: 00C982 1 A9 64 lda #ERRORCODE_64_FILE_TYPE_MISMATCH 00C984 1 20 C8 C1 jsr GenerateErrorMessage 00C987 1 @LC987: 00C987 1 A9 12 lda #$12 00C989 1 85 83 sta SA 00C98B 1 AD 3C 02 lda L023C 00C98E 1 8D 3D 02 sta L023D 00C991 1 A9 FF lda #$FF 00C993 1 8D 3C 02 sta L023C 00C996 1 20 2A DA jsr LDA2A 00C999 1 A2 02 ldx #$02 00C99B 1 20 B9 C9 jsr @LC9B9 00C99E 1 4C 94 C1 jmp CommandEnd 00C9A1 1 @LC9A1: 00C9A1 1 20 A7 C9 jsr @LC9A7 00C9A4 1 4C 94 C1 jmp CommandEnd 00C9A7 1 ; ---------------- 00C9A7 1 00C9A7 1 @LC9A7: 00C9A7 1 20 E7 CA jsr LCAE7 00C9AA 1 A5 E2 lda FILDRV 00C9AC 1 29 01 and #$01 00C9AE 1 85 7F sta DRVNUM 00C9B0 1 20 86 D4 jsr LD486 00C9B3 1 20 E4 D6 jsr LD6E4 00C9B6 1 AE 77 02 ldx F1CNT 00C9B9 1 @LC9B9: 00C9B9 1 8E 79 02 stx F2PTR 00C9BC 1 20 FA C9 jsr LC9FA 00C9BF 1 A9 11 lda #$11 00C9C1 1 85 83 sta SA 00C9C3 1 20 EB D0 jsr LD0EB 00C9C6 1 20 25 D1 jsr LD125 00C9C9 1 D0 03 bne @LC9CE 00C9CB 1 20 53 CA jsr LCA53 00C9CE 1 @LC9CE: 00C9CE 1 A9 08 lda #$08 00C9D0 1 85 F8 sta EIOFLG 00C9D2 1 4C D8 C9 jmp @LC9D8 00C9D5 1 @LC9D5: 00C9D5 1 20 9B CF jsr LCF9B 00C9D8 1 @LC9D8: 00C9D8 1 20 35 CA jsr LCA35 00C9DB 1 A9 80 lda #$80 00C9DD 1 20 A6 DD jsr LDDA6 00C9E0 1 F0 F3 beq @LC9D5 00C9E2 1 20 25 D1 jsr LD125 00C9E5 1 F0 03 beq @LC9EA 00C9E7 1 20 9B CF jsr LCF9B 00C9EA 1 @LC9EA: 00C9EA 1 AE 79 02 ldx F2PTR 00C9ED 1 E8 inx 00C9EE 1 EC 78 02 cpx F2CNT 00C9F1 1 90 C6 bcc @LC9B9 00C9F3 1 A9 12 lda #$12 00C9F5 1 85 83 sta SA 00C9F7 1 4C 02 DB jmp LDB02 00C9FA 1 ; ----------------- 00C9FA 1 00C9FA 1 LC9FA: 00C9FA 1 AE 79 02 ldx F2PTR 00C9FD 1 B5 E2 lda FILDRV,x 00C9FF 1 29 01 and #$01 00CA01 1 85 7F sta DRVNUM 00CA03 1 AD 85 FE lda LFE85 00CA06 1 85 80 sta TRACK 00CA08 1 B5 D8 lda ENTSEC,x 00CA0A 1 85 81 sta SECTOR 00CA0C 1 20 75 D4 jsr LD475 00CA0F 1 AE 79 02 ldx F2PTR 00CA12 1 B5 DD lda ENTIND,x 00CA14 1 20 C8 D4 jsr LD4C8 00CA17 1 AE 79 02 ldx F2PTR 00CA1A 1 B5 E7 lda PATTYP,x 00CA1C 1 29 07 and #$07 00CA1E 1 8D 4A 02 sta TYPE 00CA21 1 A9 00 lda #$00 00CA23 1 8D 58 02 sta REC 00CA26 1 20 A0 D9 jsr LD9A0 00CA29 1 A0 01 ldy #$01 00CA2B 1 20 25 D1 jsr LD125 00CA2E 1 F0 01 beq @LCA31 00CA30 1 C8 iny 00CA31 1 @LCA31: 00CA31 1 98 tya 00CA32 1 4C C8 D4 jmp LD4C8 00CA35 1 ; -------------- 00CA35 1 00CA35 1 LCA35: 00CA35 1 A9 11 lda #$11 00CA37 1 85 83 sta SA 00CA39 1 00CA39 1 LCA39: 00CA39 1 20 9B D3 jsr LD39B 00CA3C 1 85 85 sta DATA 00CA3E 1 A6 82 ldx LINDX 00CA40 1 B5 F2 lda CHNRDY,x 00CA42 1 29 08 and #$08 00CA44 1 85 F8 sta EIOFLG 00CA46 1 D0 0A bne @Rts 00CA48 1 20 25 D1 jsr LD125 00CA4B 1 F0 05 beq @Rts 00CA4D 1 A9 80 lda #$80 00CA4F 1 20 97 DD jsr LDD97 00CA52 1 @Rts: 00CA52 1 60 rts 00CA53 1 ; ---------------- 00CA53 1 00CA53 1 LCA53: 00CA53 1 20 D3 D1 jsr LD1D3 00CA56 1 20 CB E1 jsr LE1CB 00CA59 1 A5 D6 lda SSIND 00CA5B 1 48 pha 00CA5C 1 A5 D5 lda SSNUM 00CA5E 1 48 pha 00CA5F 1 A9 12 lda #$12 00CA61 1 85 83 sta SA 00CA63 1 20 07 D1 jsr LD107 00CA66 1 20 D3 D1 jsr LD1D3 00CA69 1 20 CB E1 jsr LE1CB 00CA6C 1 20 9C E2 jsr LE29C 00CA6F 1 A5 D6 lda SSIND 00CA71 1 85 87 sta R1 00CA73 1 A5 D5 lda SSNUM 00CA75 1 85 86 sta R0 00CA77 1 A9 00 lda #$00 00CA79 1 85 88 sta R2 00CA7B 1 85 D4 sta RECPTR 00CA7D 1 85 D7 sta RELPTR 00CA7F 1 68 pla 00CA80 1 85 D5 sta SSNUM 00CA82 1 68 pla 00CA83 1 85 D6 sta SSIND 00CA85 1 4C 3B E3 jmp LE33B 00CA88 1 ; ------------------ 00CA88 1 00CA88 1 cmd_rename: 00CA88 1 20 20 C3 jsr LC320 00CA8B 1 A5 E3 lda FILDRV + 1 00CA8D 1 29 01 and #$01 00CA8F 1 85 E3 sta FILDRV + 1 00CA91 1 C5 E2 cmp FILDRV 00CA93 1 F0 02 beq @LCA97 00CA95 1 09 80 ora #$80 00CA97 1 @LCA97: 00CA97 1 85 E2 sta FILDRV 00CA99 1 20 4F C4 jsr LC44F 00CA9C 1 20 E7 CA jsr LCAE7 00CA9F 1 A5 E3 lda FILDRV + 1 00CAA1 1 29 01 and #$01 00CAA3 1 85 7F sta DRVNUM 00CAA5 1 A5 D9 lda ENTSEC + 1 00CAA7 1 85 81 sta SECTOR 00CAA9 1 20 57 DE jsr LDE57 00CAAC 1 20 99 D5 jsr LD599 00CAAF 1 A5 DE lda ENTIND + 1 00CAB1 1 18 clc 00CAB2 1 69 03 adc #$03 00CAB4 1 20 C8 D4 jsr LD4C8 00CAB7 1 20 93 DF jsr LDF93 00CABA 1 A8 tay 00CABB 1 AE 7A 02 ldx FILTBL 00CABE 1 A9 10 lda #$10 00CAC0 1 20 6E C6 jsr LC66E 00CAC3 1 20 5E DE jsr LDE5E 00CAC6 1 20 99 D5 jsr LD599 00CAC9 1 4C 94 C1 jmp CommandEnd 00CACC 1 ; -------------- 00CACC 1 00CACC 1 LCACC: 00CACC 1 A5 E8 lda PATTYP + 1 00CACE 1 29 07 and #$07 00CAD0 1 8D 4A 02 sta TYPE 00CAD3 1 AE 78 02 ldx F2CNT 00CAD6 1 @LCAD6: 00CAD6 1 CA dex 00CAD7 1 EC 77 02 cpx F1CNT 00CADA 1 90 0A bcc @Rts 00CADC 1 BD 80 02 lda FILTRK,x 00CADF 1 D0 F5 bne @LCAD6 00CAE1 1 A9 62 lda #ERRORCODE_62_FILE_NOT_FOUND 00CAE3 1 4C C8 C1 jmp GenerateErrorMessage 00CAE6 1 ; ---------------- 00CAE6 1 00CAE6 1 @Rts: 00CAE6 1 60 rts 00CAE7 1 ; ---------------- 00CAE7 1 00CAE7 1 LCAE7: 00CAE7 1 20 CC CA jsr LCACC 00CAEA 1 @LCAEA: 00CAEA 1 BD 80 02 lda FILTRK,x 00CAED 1 F0 05 beq @LCAF4 00CAEF 1 A9 63 lda #ERRORCODE_63_FILE_EXISTS 00CAF1 1 4C C8 C1 jmp GenerateErrorMessage 00CAF4 1 ; ---------------- 00CAF4 1 00CAF4 1 @LCAF4: 00CAF4 1 CA dex 00CAF5 1 10 F3 bpl @LCAEA 00CAF7 1 60 rts 00CAF8 1 ; ---------------- 00CAF8 1 00CAF8 1 ; execute memory functions (M-x) 00CAF8 1 ; 00CAF8 1 ; They are all of the form: M- 00CAF8 1 ; 00CAF8 1 ; In particular, they are: 00CAF8 1 ; M-R READ from 1 byte 00CAF8 1 ; M-R READ from byte 00CAF8 1 ; M-W... WRITE to byte following the byte 00CAF8 1 ; M-E... 00CAF8 1 ; 00CAF8 1 cmd_memory: 00CAF8 1 ; check next character for '-' 00CAF8 1 AD 01 02 lda CMDBUF + 1 00CAFB 1 C9 2D cmp #'-' 00CAFD 1 D0 4C bne @Error31SyntaxError ; no '-' --> branch, output 31,SYNTAX ERROR 00CAFF 1 00CAFF 1 ; store the address low/high at T0/T0+1 00CAFF 1 AD 03 02 lda CMDBUF + 3 00CB02 1 85 6F sta T0 00CB04 1 AD 04 02 lda CMDBUF + 4 00CB07 1 85 70 sta T0+1 00CB09 1 00CB09 1 ; determine the exact command to execute 00CB09 1 00CB09 1 A0 00 ldy #$00 00CB0B 1 AD 02 02 lda CMDBUF + 2 ; get relevant command byte 00CB0E 1 00CB0E 1 ; test for M-R 00CB0E 1 C9 52 cmp #'R' 00CB10 1 F0 0E beq @cmd_memory_read ; execute M-R 00CB12 1 00CB12 1 20 58 F2 jsr NoOp ; contains only an RTS 00CB15 1 00CB15 1 ; test for M-W 00CB15 1 C9 57 cmp #'W' 00CB17 1 F0 37 beq @cmd_memory_write ; execute M-W 00CB19 1 00CB19 1 ; test for M-E 00CB19 1 C9 45 cmp #'E' 00CB1B 1 D0 2E bne @Error31SyntaxError ; no M-E --> error, abort 00CB1D 1 00CB1D 1 ; execute M-E by jumping to the address 00CB1D 1 6C 6F 00 jmp (T0) 00CB20 1 00CB20 1 @cmd_memory_read: 00CB20 1 B1 6F lda (T0),y ; read the first byte at the given memory position 00CB22 1 85 85 sta DATA ; remember it 00CB24 1 00CB24 1 AD 74 02 lda CMDSIZ ; check the size of the M-R command 00CB27 1 C9 06 cmp #$06 ; less than 6? (that is, no was given? 00CB29 1 90 1A bcc @OnlyOneByte ; yes --> branch, we're done 00CB2B 1 00CB2B 1 AE 05 02 ldx CMDBUF + 5 ; get the number of byte to read () 00CB2E 1 CA dex ; minus 1, as we have already read one byte 00CB2F 1 F0 14 beq @OnlyOneByte ; there are null byte left --> branch, we're done 00CB31 1 00CB31 1 ; if more than one byte is to be send, the remaining bytes are transferred 00CB31 1 ; as if these byte would by the error status (error channel). That is, 00CB31 1 ; the buffer to the error channel is set to the memory area. 00CB31 1 ; 00CB31 1 ; This approach has a problem, though: The handling of the error 00CB31 1 ; channel has some limitations: 00CB31 1 ; 1. no page crossing possible. You can even see it here, as only the low byte of 00CB31 1 ; the end address can be written 00CB31 1 ; 2. On the page where the error channel is (page 2), we cannot read beyond the 00CB31 1 ; start of the error channel buffer. 00CB31 1 ; That's because the start of the "real" error buffer is hard-coded (cf. LD414). 00CB31 1 ; If that address is reached, a new error message is generated. 00CB31 1 ; 00CB31 1 8A txa ; add count (-1, dex above) to start of buffer to read (only low byte) 00CB32 1 18 clc 00CB33 1 65 6F adc T0 00CB35 1 E6 6F inc T0 00CB37 1 8D 49 02 sta LSTCHR + 5 ; store as last character (only low byte) 00CB3A 1 00CB3A 1 A5 6F lda T0 ; remember start of buffer 00CB3C 1 85 A5 sta BUFTABERR ; as start of error buffer 00CB3E 1 A5 70 lda T0+1 00CB40 1 85 A6 sta BUFTABERR + 1 00CB42 1 4C 43 D4 jmp LD443 ; @@@TODO 00CB45 1 ; ------------------------- 00CB45 1 00CB45 1 @OnlyOneByte: 00CB45 1 20 EB D0 jsr LD0EB 00CB48 1 4C 3A D4 jmp LD43A 00CB4B 1 ; ------------------ 00CB4B 1 00CB4B 1 @Error31SyntaxError: 00CB4B 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 00CB4D 1 4C C8 C1 jmp GenerateErrorMessage 00CB50 1 ; ---------------- 00CB50 1 00CB50 1 @cmd_memory_write: 00CB50 1 00CB50 1 ; copy bytes from input buffer into destination 00CB50 1 00CB50 1 ; when we enter here, y is 0. 00CB50 1 00CB50 1 B9 06 02 lda CMDBUF + 6,y ; get next byte 00CB53 1 91 6F sta (T0),y ; store it into the destination 00CB55 1 C8 iny ; increase offset into buffers 00CB56 1 CC 05 02 cpy CMDBUF + 5 ; are byte copied? 00CB59 1 90 F5 bcc @cmd_memory_write ; no --> branch, proceed with next byte 00CB5B 1 60 rts 00CB5C 1 ; ------------------ 00CB5C 1 00CB5C 1 00CB5C 1 ; Execute user (U) command 00CB5C 1 ; 00CB5C 1 ; Commands have the form: 00CB5C 1 ; Ux 00CB5C 1 ; Ux: 00CB5C 1 ; Ux: 00CB5C 1 ; 00CB5C 1 ; x can be a digit (0-9) or a character. 00CB5C 1 ; 00CB5C 1 ; The user commands use a jump table to determine where each of them is executed. 00CB5C 1 ; A not-so-well known fact of the user commands is that the jump table address 00CB5C 1 ; can be redefined, so the jump table points to something else. 00CB5C 1 ; In order to set the jump table back to the original value, the command 'U0' 00CB5C 1 ; (that is, x=0 above) is used. In order to be able to do this, the U0 command is 00CB5C 1 ; handled differently from the other U commands. 00CB5C 1 ; 00CB5C 1 ; Note that there is NO command to redefine the Ux vectors. Thus, in order to 00CB5C 1 ; redefine the table, the vector (CMDUSER) has to be redefined "by hand". 00CB5C 1 ; 00CB5C 1 00CB5C 1 cmd_user: 00CB5C 1 AC 01 02 ldy CMDBUF + 1 ; check for 'U0' command 00CB5F 1 C0 30 cpy #'0' 00CB61 1 D0 09 bne NoU0Command ; something else --> branch 00CB63 1 00CB63 1 ; Special handling of U0 command 00CB63 1 00CB63 1 ; U0 - initalize jump table for U commands 00CB63 1 ; (on the 1570 and 1571, the U0 command is also used for the special 00CB63 1 ; "fast serial" functions. That's why the command has to be patched for 00CB63 1 ; these devices. 00CB63 1 00CB63 1 InitJumpTableForUxCommands: 00CB63 1 00CB63 1 .if CompileDrive >= DRIVE_1570 00CB63 1 00CB63 1 ; special handling on the 1570 and 1571 drives. 00CB63 1 ; if the routine finds out that it is not the special U0 command 00CB63 1 ; for fast serial, the equivalent of the ".else" path is executed 00CB63 1 ; on the 1570/1571, too. 00CB63 1 ; 00CB63 1 4C 30 80 jmp U0CommandPatch157x 00CB66 1 ; ------------------------- 00CB66 1 00CB66 1 EA EA EA EA FillNOP 6 00CB6A 1 EA EA 00CB6C 1 00CB6C 1 .else 00CB6C 1 00CB6C 1 lda #AddressesUxCommands ; into the location 00CB6C 1 sta USRJMP + 1 00CB6C 1 rts 00CB6C 1 ; ------------------------- 00CB6C 1 .endif 00CB6C 1 00CB6C 1 NoU0Command: 00CB6C 1 20 72 CB jsr @ExecuteUxCommand ; execute the user command 00CB6F 1 4C 94 C1 jmp CommandEnd ; back to command loop 00CB72 1 ; ------------------ 00CB72 1 00CB72 1 @ExecuteUxCommand: 00CB72 1 ; the command number is determined as follows (documented): 00CB72 1 ; U1, same as UA --> vector 0 00CB72 1 ; U2, same as UB --> vector 1 00CB72 1 ; ... 00CB72 1 ; U9, same as UI --> vector 8 00CB72 1 ; U:, same as UJ --> vector 9 ( same as NMI vector) 00CB72 1 ; U;, same as UK --> vector 10 (undocumented - same RESET vector) 00CB72 1 ; U<, same as UL --> vector 11 (undocumented - same IRQ vector, will crash) 00CB72 1 ; 00CB72 1 ; That is, the commands codes (in PETSCII) are $31..$3c (for 1, 2, ...) 00CB72 1 ; or $41..$4c (for A, B, ...). 00CB72 1 ; In order to get the command index, it is thus possible to get the value 00CB72 1 ; index = (PETSCII - 1) AND $0F 00CB72 1 ; with PETSCII being the PETSCII representation of the command byte. 00CB72 1 ; Note that this wil allow even other commands, and it will even work 00CB72 1 ; with lower and upper case bytes. 00CB72 1 ; 00CB72 1 88 dey ; PETSCII of command minus 1 00CB73 1 98 tya 00CB74 1 29 0F and #$0F ; now, A has the command index (s. large comment above) 00CB76 1 0A asl a ; * 2 gives index into jump table 00CB77 1 A8 tay 00CB78 1 00CB78 1 ; get address from jump table into IP/IP+1 00CB78 1 B1 6B lda (USRJMP),y 00CB7A 1 85 75 sta IP 00CB7C 1 C8 iny 00CB7D 1 B1 6B lda (USRJMP),y 00CB7F 1 85 76 sta IP + 1 00CB81 1 00CB81 1 .if CompileDrive >= DRIVE_1570 00CB81 1 ; the 157x makes sure that the IRQ vector is called via BRK, 00CB81 1 ; not via JMP 00CB81 1 4C 2D AA jmp Patch1570ExecutionOfUCommand 00CB84 1 .else 00CB84 1 ; the 154x and 2031 do not care and execute everything. 00CB84 1 jmp (IP) 00CB84 1 .endif 00CB84 1 00CB84 1 LCB84: 00CB84 1 AD 8E 02 lda LSTDRV 00CB87 1 85 7F sta DRVNUM 00CB89 1 A5 83 lda SA 00CB8B 1 48 pha 00CB8C 1 20 3D C6 jsr LC63D 00CB8F 1 68 pla 00CB90 1 85 83 sta SA 00CB92 1 AE 74 02 ldx CMDSIZ 00CB95 1 CA dex 00CB96 1 D0 0D bne LCBA5 00CB98 1 A9 01 lda #$01 00CB9A 1 20 E2 D1 jsr LD1E2 00CB9D 1 4C F1 CB jmp LCBF1 00CBA0 1 ; --------------- 00CBA0 1 Error70: 00CBA0 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00CBA2 1 4C C8 C1 jmp GenerateErrorMessage 00CBA5 1 ; ---------------- 00CBA5 1 00CBA5 1 LCBA5: 00CBA5 1 A0 01 ldy #$01 00CBA7 1 20 7C CC jsr CheckForAndSkipWhitespace 00CBAA 1 AE 85 02 ldx FILSEC 00CBAD 1 E0 05 cpx #$05 00CBAF 1 B0 EF bcs Error70 00CBB1 1 A9 00 lda #$00 00CBB3 1 85 6F sta T0 00CBB5 1 85 70 sta T1 00CBB7 1 38 sec 00CBB8 1 @LCBB8: 00CBB8 1 26 6F rol T0 00CBBA 1 26 70 rol T1 00CBBC 1 CA dex 00CBBD 1 10 F9 bpl @LCBB8 00CBBF 1 A5 6F lda T0 00CBC1 1 2D 4F 02 and BUFUSE 00CBC4 1 D0 DA bne Error70 00CBC6 1 A5 70 lda T1 00CBC8 1 2D 50 02 and BUFUSE + 1 00CBCB 1 D0 D3 bne Error70 00CBCD 1 A5 6F lda T0 00CBCF 1 0D 4F 02 ora BUFUSE 00CBD2 1 8D 4F 02 sta BUFUSE 00CBD5 1 A5 70 lda T1 00CBD7 1 0D 50 02 ora BUFUSE + 1 00CBDA 1 8D 50 02 sta BUFUSE + 1 00CBDD 1 A9 00 lda #$00 00CBDF 1 20 E2 D1 jsr LD1E2 00CBE2 1 A6 82 ldx LINDX 00CBE4 1 AD 85 02 lda FILSEC 00CBE7 1 95 A7 sta BUF0,x 00CBE9 1 AA tax 00CBEA 1 A5 7F lda DRVNUM 00CBEC 1 95 00 sta JOBS0,x 00CBEE 1 9D 5B 02 sta LSTJOB,x 00CBF1 1 LCBF1: 00CBF1 1 A6 83 ldx SA 00CBF3 1 BD 2B 02 lda LINTAB,x 00CBF6 1 09 40 ora #$40 00CBF8 1 9D 2B 02 sta LINTAB,x 00CBFB 1 A4 82 ldy LINDX 00CBFD 1 A9 FF lda #$FF 00CBFF 1 99 44 02 sta LSTCHR,y 00CC02 1 A9 89 lda #$89 00CC04 1 99 F2 00 sta CHNRDY,y 00CC07 1 B9 A7 00 lda BUF0,y 00CC0A 1 99 3E 02 sta L023E,y 00CC0D 1 0A asl a 00CC0E 1 AA tax 00CC0F 1 A9 01 lda #$01 00CC11 1 95 99 sta BUFTAB0,x 00CC13 1 A9 0E lda #$0E 00CC15 1 99 EC 00 sta FILTYP,y 00CC18 1 4C 94 C1 jmp CommandEnd 00CC1B 1 ; ----------------- 00CC1B 1 00CC1B 1 ; Execute block (B) command 00CC1B 1 ; 00CC1B 1 ; Commands have the form: 00CC1B 1 ; B-x 00CC1B 1 ; 00CC1B 1 ; x can be one of 'R', 'W', 'A', 'F', 'E', 'P'. 00CC1B 1 ; 00CC1B 1 ; This function does not check for more than that. Every command 00CC1B 1 ; has to check its parameters individually. 00CC1B 1 ; 00CC1B 1 cmd_block: 00CC1B 1 A0 00 ldy #$00 ; start search at first character 00CC1D 1 A2 00 ldx #$00 ; start with first parameter 00CC1F 1 A9 2D lda #'-' 00CC21 1 20 68 C2 jsr SearchInCmdline ; check for '-' as next char 00CC24 1 D0 0A bne cmd_block_found_dash ; found --> jump 00CC26 1 00CC26 1 ; no dash ('-') --> return 31,SYNTAX ERROR 00CC26 1 00CC26 1 Error31SyntaxError_2: 00CC26 1 A9 31 lda #ERRORCODE_31_SYNTAX_ERROR 00CC28 1 4C C8 C1 jmp GenerateErrorMessage 00CC2B 1 ; ---------------- 00CC2B 1 00CC2B 1 Error30SyntaxError_2: 00CC2B 1 A9 30 lda #ERRORCODE_30_SYNTAX_ERROR 00CC2D 1 4C C8 C1 jmp GenerateErrorMessage 00CC30 1 ; ---------------- 00CC30 1 00CC30 1 cmd_block_found_dash: 00CC30 1 8A txa ; get number of comma in command line 00CC31 1 D0 F8 bne Error30SyntaxError_2 ; not null --> error, because B-x does not allow comma 00CC33 1 00CC33 1 ; check if this is a valid command, and if it is, which one 00CC33 1 A2 05 ldx #@CommandCharsTable_End - @CommandCharsTable - 1 00CC35 1 B9 00 02 lda CMDBUF,y ; read next character (the 'x' in 'B-x') 00CC38 1 @SearchCommandChar: 00CC38 1 DD 5D CC cmp @CommandCharsTable,x 00CC3B 1 F0 05 beq @FoundChar 00CC3D 1 CA dex 00CC3E 1 10 F8 bpl @SearchCommandChar 00CC40 1 30 E4 bmi Error31SyntaxError_2 ; command does not exist --> return 31,SYNTAX ERROR 00CC42 1 ; ----------------------- 00CC42 1 00CC42 1 @FoundChar: 00CC42 1 8A txa 00CC43 1 09 80 ora #$80 ; @@@ 00CC45 1 8D 2A 02 sta CMDNUM 00CC48 1 20 6F CC jsr ReadUpTo4NumericalParameter 00CC4B 1 00CC4B 1 AD 2A 02 lda CMDNUM ; get the command number 00CC4E 1 0A asl a ; convert it to an index into the command table (*2) 00CC4F 1 AA tax 00CC50 1 BD 64 CC lda @CommandAddress + 1,x ; read address of command 00CC53 1 85 70 sta T1 00CC55 1 BD 63 CC lda @CommandAddress,x 00CC58 1 85 6F sta T0 00CC5A 1 6C 6F 00 jmp (T0) ; execute command 00CC5D 1 ; ------------------ 00CC5D 1 00CC5D 1 ; Table of possible 'B-x' commands, with x being one of: 00CC5D 1 00CC5D 1 @CommandCharsTable: 00CC5D 1 41 46 52 57 .byte 'A','F','R','W','E','P' 00CC61 1 45 50 00CC63 1 @CommandCharsTable_End: 00CC63 1 00CC63 1 ; The addresses of the 'B-x' commands, in the same order as in @CommandChars: 00CC63 1 @CommandAddress: 00CC63 1 03 CD .addr cmd_block_allocate 00CC65 1 F5 CC .addr cmd_block_free 00CC67 1 56 CD .addr cmd_block_read 00CC69 1 73 CD .addr cmd_block_write 00CC6B 1 A3 CD .addr cmd_block_execute 00CC6D 1 BD CD .addr cmd_buffer_pointer 00CC6F 1 00CC6F 1 00CC6F 1 ; This function reads in up to 4 numerical parameters from the command line 00CC6F 1 ; 00CC6F 1 ; Returns: 00CC6F 1 ; F1CNT: The number of parameters 00CC6F 1 ; FILTRK + i: High byte of parameter i (with 0 <= i < F1CNT) 00CC6F 1 ; FILSEC + i: Low byte of parameter i (with 0 <= i < F1CNT) 00CC6F 1 ; 00CC6F 1 ReadUpTo4NumericalParameter: 00CC6F 1 A0 00 ldy #$00 ; position where to start searching 00CC71 1 A2 00 ldx #$00 ; start with parameter 0 00CC73 1 A9 3A lda #':' 00CC75 1 20 68 C2 jsr SearchInCmdline ; check for a colon after the command 00CC78 1 D0 02 bne CheckForAndSkipWhitespace ; no colon -> check for and skip whitespace 00CC7A 1 00CC7A 1 ; there was no colon. Thus, restart command line processing directly after the 'B-x': 00CC7A 1 A0 03 ldy #$03 ; position read pointer after the 'B-x' 00CC7C 1 00CC7C 1 CheckForAndSkipWhitespace: 00CC7C 1 B9 00 02 lda CMDBUF,y ; get next char 00CC7F 1 C9 20 cmp #' ' 00CC81 1 F0 08 beq @SkipWhiteSpace ; space --> skip it 00CC83 1 C9 1D cmp #PETSCII_CRSR_RIGHT 00CC85 1 F0 04 beq @SkipWhiteSpace ; CRSR right --> skipt it 00CC87 1 C9 2C cmp #',' 00CC89 1 D0 07 bne @NoMoreWhiteSpace ; no comma -> we're done 00CC8B 1 00CC8B 1 @SkipWhiteSpace: 00CC8B 1 C8 iny ; advance to next char 00CC8C 1 CC 74 02 cpy CMDSIZ ; already read the last char? 00CC8F 1 90 EB bcc CheckForAndSkipWhitespace ; no --> check for next whitepsace 00CC91 1 60 rts ; we are at the end of the buffer --> exit 00CC92 1 ; ---------------- 00CC92 1 00CC92 1 @NoMoreWhiteSpace: 00CC92 1 20 A1 CC jsr @ConvertParameterToBinary 00CC95 1 EE 77 02 inc F1CNT ; proceed to next parameter 00CC98 1 AC 79 02 ldy F2PTR ; get pointer to last read character 00CC9B 1 E0 04 cpx #$04 ; number of parameter < 4 + 1? 00CC9D 1 90 EC bcc @SkipWhiteSpace ; yes, try to get next parameter 00CC9F 1 B0 8A bcs Error30SyntaxError_2 ; uncond. --> too many parameter 00CCA1 1 ; -------------------- 00CCA1 1 00CCA1 1 @ConvertParameterToBinary: 00CCA1 1 A9 00 lda #$00 ; clear temporary storage 00CCA3 1 85 6F sta T0 00CCA5 1 85 70 sta T1 00CCA7 1 00CCA7 1 85 72 sta T3 ; clear high byte of conversion 00CCA9 1 00CCA9 1 A2 FF ldx #-1 ; when converting the digits into a number, start with T0 00CCAB 1 00CCAB 1 @ReadInCharacter: 00CCAB 1 B9 00 02 lda CMDBUF,y ; get next char 00CCAE 1 00CCAE 1 ; make sure it is one of '0', '1', ..., '9', ':', ';', '<', '=', '>', '?' (0x30..0x3F) 00CCAE 1 ; @@@TODO: Why are ':' ... '?' allowed? 00CCAE 1 C9 40 cmp #'?' + 1 ; bigger than '?'? 00CCB0 1 B0 18 bcs @NoDigit ; yes --> branch, no digit 00CCB2 1 C9 30 cmp #'0' ; smaller than '0'? 00CCB4 1 90 14 bcc @NoDigit ; yes --> branch, no digit 00CCB6 1 29 0F and #$0F ; convert to hex digit 00CCB8 1 00CCB8 1 ; move T0, T1, T2 to the right 00CCB8 1 ; thus, rolling in the next digit 00CCB8 1 ; at the end, T2 T1 T0 form a digital number 00CCB8 1 00CCB8 1 48 pha 00CCB9 1 A5 70 lda T1 00CCBB 1 85 71 sta T2 00CCBD 1 A5 6F lda T0 00CCBF 1 85 70 sta T1 00CCC1 1 68 pla 00CCC2 1 85 6F sta T0 00CCC4 1 00CCC4 1 C8 iny ; proceed to next character 00CCC5 1 CC 74 02 cpy CMDSIZ ; already at the end of the buffer? 00CCC8 1 90 E1 bcc @ReadInCharacter ; no, process the character 00CCCA 1 00CCCA 1 @NoDigit: 00CCCA 1 8C 79 02 sty F2PTR ; remember read position in command line 00CCCD 1 00CCCD 1 18 clc 00CCCE 1 A9 00 lda #$00 00CCD0 1 00CCD0 1 ; Now, T0 + 10 * T1 + 100 * T2 is the value of the digits given 00CCD0 1 ; convert it into a binary number 00CCD0 1 00CCD0 1 @NextDigit: 00CCD0 1 E8 inx ; iterate through T0, T1, T2 00CCD1 1 E0 03 cpx #3 ; 3 digits already processed? 00CCD3 1 B0 0F bcs @ConversionDone ; yes, conversion done 00CCD5 1 00CCD5 1 B4 6F ldy T0,x ; get value of digit 00CCD7 1 00CCD7 1 ; add the appropriate power of 10 as many times as the digits tells us 00CCD7 1 @AddPowerOf10: 00CCD7 1 88 dey 00CCD8 1 30 F6 bmi @NextDigit 00CCDA 1 7D F2 CC adc @PowersOf10,x ; add appropriate power of 10 00CCDD 1 90 F8 bcc @AddPowerOf10 ; no overflow --> add again 00CCDF 1 00CCDF 1 ; there was an overflow, add to high byte 00CCDF 1 18 clc ; ??? @@@WHY Superfluous? 00CCE0 1 E6 72 inc T3 00CCE2 1 D0 F3 bne @AddPowerOf10 ; uncond., as three digits cannot exceed 16 bit 00CCE4 1 ; --------------- 00CCE4 1 00CCE4 1 @ConversionDone: 00CCE4 1 00CCE4 1 ; store values for parameter x at FILTRK+x (HIGH) and FILSEC+x (LOW) 00CCE4 1 48 pha 00CCE5 1 AE 77 02 ldx F1CNT 00CCE8 1 A5 72 lda T3 00CCEA 1 9D 80 02 sta FILTRK,x 00CCED 1 68 pla 00CCEE 1 9D 85 02 sta FILSEC,x 00CCF1 1 60 rts 00CCF2 1 ; ------------------- 00CCF2 1 00CCF2 1 @PowersOf10: 00CCF2 1 01 0A 64 .byte 1, 10, 100 00CCF5 1 00CCF5 1 00CCF5 1 cmd_block_free: 00CCF5 1 20 F5 CD jsr LCDF5 00CCF8 1 20 5F EF jsr LEF5F 00CCFB 1 4C 94 C1 jmp CommandEnd 00CCFE 1 A9 01 lda #$01 00CD00 1 8D F9 02 sta WBAM 00CD03 1 00CD03 1 00CD03 1 cmd_block_allocate: 00CD03 1 20 F5 CD jsr LCDF5 00CD06 1 A5 81 lda SECTOR 00CD08 1 48 pha 00CD09 1 20 FA F1 jsr LF1FA 00CD0C 1 F0 0B beq @LCD19 00CD0E 1 68 pla 00CD0F 1 C5 81 cmp SECTOR 00CD11 1 D0 19 bne @LCD2C 00CD13 1 20 90 EF jsr LEF90 00CD16 1 4C 94 C1 jmp CommandEnd 00CD19 1 @LCD19: 00CD19 1 68 pla 00CD1A 1 @LCD1A: 00CD1A 1 A9 00 lda #$00 00CD1C 1 85 81 sta SECTOR 00CD1E 1 E6 80 inc TRACK 00CD20 1 A5 80 lda TRACK 00CD22 1 CD D7 FE cmp MAXTRACK_ADJUSTED 00CD25 1 B0 0A bcs Error65 00CD27 1 20 FA F1 jsr LF1FA 00CD2A 1 F0 EE beq @LCD1A 00CD2C 1 @LCD2C: 00CD2C 1 A9 65 lda #ERRORCODE_65_NO_BLOCK 00CD2E 1 20 45 E6 jsr LE645 00CD31 1 00CD31 1 Error65: 00CD31 1 A9 65 lda #ERRORCODE_65_NO_BLOCK 00CD33 1 20 C8 C1 jsr GenerateErrorMessage 00CD36 1 LCD36: 00CD36 1 20 F2 CD jsr LCDF2 00CD39 1 4C 60 D4 jmp LD460 00CD3C 1 ; ------------------- 00CD3C 1 00CD3C 1 LCD3C: 00CD3C 1 20 2F D1 jsr LD12F 00CD3F 1 A1 99 lda (BUFTAB0,x) 00CD41 1 60 rts 00CD42 1 ; ---------------- 00CD42 1 00CD42 1 LCD42: 00CD42 1 20 36 CD jsr LCD36 00CD45 1 A9 00 lda #$00 00CD47 1 20 C8 D4 jsr LD4C8 00CD4A 1 20 3C CD jsr LCD3C 00CD4D 1 99 44 02 sta LSTCHR,y 00CD50 1 A9 89 lda #$89 00CD52 1 99 F2 00 sta CHNRDY,y 00CD55 1 60 rts 00CD56 1 00CD56 1 cmd_block_read: 00CD56 1 20 42 CD jsr LCD42 00CD59 1 20 EC D3 jsr LD3EC 00CD5C 1 4C 94 C1 jmp CommandEnd 00CD5F 1 00CD5F 1 CMD_U1: 00CD5F 1 20 6F CC jsr ReadUpTo4NumericalParameter 00CD62 1 20 42 CD jsr LCD42 00CD65 1 B9 44 02 lda LSTCHR,y 00CD68 1 99 3E 02 sta L023E,y 00CD6B 1 A9 FF lda #$FF 00CD6D 1 99 44 02 sta LSTCHR,y 00CD70 1 4C 94 C1 jmp CommandEnd 00CD73 1 00CD73 1 cmd_block_write: 00CD73 1 20 F2 CD jsr LCDF2 00CD76 1 20 E8 D4 jsr LD4E8 00CD79 1 A8 tay 00CD7A 1 88 dey 00CD7B 1 C9 02 cmp #$02 00CD7D 1 B0 02 bcs @LCD81 00CD7F 1 A0 01 ldy #$01 00CD81 1 @LCD81: 00CD81 1 A9 00 lda #$00 00CD83 1 20 C8 D4 jsr LD4C8 00CD86 1 98 tya 00CD87 1 20 F1 CF jsr LCFF1 00CD8A 1 8A txa 00CD8B 1 48 pha 00CD8C 1 20 64 D4 jsr LD464 00CD8F 1 68 pla 00CD90 1 AA tax 00CD91 1 .if CompileDrive >= DRIVE_1570 00CD91 1 20 AE FF jsr LFFAE 00CD94 1 .elseif CompileDrive >= DRIVE_1541C_02 00CD94 1 jsr LC024 00CD94 1 .else 00CD94 1 jsr LD3EE 00CD94 1 .endif 00CD94 1 4C 94 C1 jmp CommandEnd 00CD97 1 00CD97 1 CMD_U2: 00CD97 1 20 6F CC jsr ReadUpTo4NumericalParameter 00CD9A 1 20 F2 CD jsr LCDF2 00CD9D 1 20 64 D4 jsr LD464 00CDA0 1 4C 94 C1 jmp CommandEnd 00CDA3 1 ; --------------- 00CDA3 1 00CDA3 1 cmd_block_execute: 00CDA3 1 20 58 F2 jsr NoOp 00CDA6 1 20 36 CD jsr LCD36 00CDA9 1 00CDA9 1 A9 00 lda #$00 ; low byte of buffer address (always 0) 00CDAB 1 85 6F sta T0 00CDAD 1 A6 F9 ldx JOBNUM ; the buffer number which to execute 00CDAF 1 BD E0 FE lda TableHighBytesOfBuffers,x ; high byte of buffer address 00CDB2 1 85 70 sta T0+1 00CDB4 1 20 BA CD jsr @Execute 00CDB7 1 4C 94 C1 jmp CommandEnd 00CDBA 1 ; ---------------- 00CDBA 1 00CDBA 1 @Execute: 00CDBA 1 6C 6F 00 jmp (T0) 00CDBD 1 ; ---------------- 00CDBD 1 00CDBD 1 cmd_buffer_pointer: 00CDBD 1 20 D2 CD jsr LCDD2 00CDC0 1 A5 F9 lda JOBNUM 00CDC2 1 0A asl a 00CDC3 1 AA tax 00CDC4 1 AD 86 02 lda FILSEC + 1 00CDC7 1 95 99 sta BUFTAB0,x 00CDC9 1 20 2F D1 jsr LD12F 00CDCC 1 20 EE D3 jsr LD3EE 00CDCF 1 4C 94 C1 jmp CommandEnd 00CDD2 1 ; ------------------ 00CDD2 1 00CDD2 1 LCDD2: 00CDD2 1 A6 D3 ldx F1PTR 00CDD4 1 E6 D3 inc F1PTR 00CDD6 1 BD 85 02 lda FILSEC,x 00CDD9 1 A8 tay 00CDDA 1 88 dey 00CDDB 1 88 dey 00CDDC 1 C0 0C cpy #$0C 00CDDE 1 90 05 bcc @LCDE5 00CDE0 1 @Err70NoChannel: 00CDE0 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00CDE2 1 4C C8 C1 jmp GenerateErrorMessage 00CDE5 1 ; ---------------- 00CDE5 1 00CDE5 1 @LCDE5: 00CDE5 1 85 83 sta SA 00CDE7 1 20 EB D0 jsr LD0EB 00CDEA 1 B0 F4 bcs @Err70NoChannel 00CDEC 1 20 93 DF jsr LDF93 00CDEF 1 85 F9 sta JOBNUM 00CDF1 1 60 rts 00CDF2 1 ; --------------- 00CDF2 1 00CDF2 1 LCDF2: 00CDF2 1 20 D2 CD jsr LCDD2 00CDF5 1 LCDF5: 00CDF5 1 A6 D3 ldx F1PTR 00CDF7 1 BD 85 02 lda FILSEC,x 00CDFA 1 29 01 and #$01 00CDFC 1 85 7F sta DRVNUM 00CDFE 1 BD 87 02 lda FILSEC + 2,x 00CE01 1 85 81 sta SECTOR 00CE03 1 BD 86 02 lda FILSEC + 1,x 00CE06 1 85 80 sta TRACK 00CE08 1 20 5F D5 jsr LD55F 00CE0B 1 4C 00 C1 jmp LC100 00CE0E 1 ; -------------------- 00CE0E 1 00CE0E 1 LCE0E: 00CE0E 1 20 2C CE jsr @LCE2C 00CE11 1 20 6E CE jsr LCE6E 00CE14 1 A5 90 lda ACCUM + 1 00CE16 1 85 D7 sta RELPTR 00CE18 1 20 71 CE jsr LCE71 00CE1B 1 E6 D7 inc RELPTR 00CE1D 1 E6 D7 inc RELPTR 00CE1F 1 A5 8B lda RESULT 00CE21 1 85 D5 sta SSNUM 00CE23 1 A5 90 lda ACCUM + 1 00CE25 1 0A asl a 00CE26 1 18 clc 00CE27 1 69 10 adc #$10 00CE29 1 85 D6 sta SSIND 00CE2B 1 60 rts 00CE2C 1 ; -------------------- 00CE2C 1 00CE2C 1 @LCE2C: 00CE2C 1 20 D9 CE jsr LCED9 00CE2F 1 85 92 sta ACCUM + 3 00CE31 1 A6 82 ldx LINDX 00CE33 1 B5 B5 lda RECL,x 00CE35 1 85 90 sta ACCUM + 1 00CE37 1 B5 BB lda RECH,x 00CE39 1 85 91 sta ACCUM + 2 00CE3B 1 D0 04 bne @LCE41 00CE3D 1 A5 90 lda ACCUM + 1 00CE3F 1 F0 0B beq @LCE4C 00CE41 1 @LCE41: 00CE41 1 A5 90 lda ACCUM + 1 00CE43 1 38 sec 00CE44 1 E9 01 sbc #$01 00CE46 1 85 90 sta ACCUM + 1 00CE48 1 B0 02 bcs @LCE4C 00CE4A 1 C6 91 dec ACCUM + 2 00CE4C 1 @LCE4C: 00CE4C 1 B5 C7 lda RS,x 00CE4E 1 85 6F sta T0 00CE50 1 @LCE50: 00CE50 1 46 6F lsr T0 00CE52 1 90 03 bcc @LCE57 00CE54 1 20 ED CE jsr LCEED 00CE57 1 @LCE57: 00CE57 1 20 E5 CE jsr LCEE5 00CE5A 1 A5 6F lda T0 00CE5C 1 D0 F2 bne @LCE50 00CE5E 1 A5 D4 lda RECPTR 00CE60 1 18 clc 00CE61 1 65 8B adc RESULT 00CE63 1 85 8B sta RESULT 00CE65 1 90 06 bcc @LCE6D 00CE67 1 E6 8C inc RESULT + 1 00CE69 1 D0 02 bne @LCE6D 00CE6B 1 E6 8D inc RESULT + 2 00CE6D 1 @LCE6D: 00CE6D 1 60 rts 00CE6E 1 ; ------------------- 00CE6E 1 00CE6E 1 LCE6E: 00CE6E 1 A9 FE lda #$FE 00CE70 1 2C .byte ASM_BIT3 00CE71 1 LCE71: 00CE71 1 A9 78 lda #$78 00CE73 1 85 6F sta T0 00CE75 1 A2 03 ldx #$03 00CE77 1 @LCE77: 00CE77 1 B5 8F lda ACCUM,x 00CE79 1 48 pha 00CE7A 1 B5 8A lda R4,x 00CE7C 1 95 8F sta ACCUM,x 00CE7E 1 68 pla 00CE7F 1 95 8A sta R4,x 00CE81 1 CA dex 00CE82 1 D0 F3 bne @LCE77 00CE84 1 20 D9 CE jsr LCED9 00CE87 1 @LCE87: 00CE87 1 A2 00 ldx #$00 00CE89 1 @LCE89: 00CE89 1 B5 90 lda ACCUM + 1,x 00CE8B 1 95 8F sta ACCUM,x 00CE8D 1 E8 inx 00CE8E 1 E0 04 cpx #$04 00CE90 1 90 F7 bcc @LCE89 00CE92 1 A9 00 lda #$00 00CE94 1 85 92 sta ACCUM + 3 00CE96 1 24 6F bit T0 00CE98 1 30 09 bmi @LCEA3 00CE9A 1 06 8F asl ACCUM 00CE9C 1 08 php 00CE9D 1 46 8F lsr ACCUM 00CE9F 1 28 plp 00CEA0 1 20 E6 CE jsr LCEE6 00CEA3 1 @LCEA3: 00CEA3 1 20 ED CE jsr LCEED 00CEA6 1 20 E5 CE jsr LCEE5 00CEA9 1 24 6F bit T0 00CEAB 1 30 03 bmi @LCEB0 00CEAD 1 20 E2 CE jsr LCEE2 00CEB0 1 @LCEB0: 00CEB0 1 A5 8F lda ACCUM 00CEB2 1 18 clc 00CEB3 1 65 90 adc ACCUM + 1 00CEB5 1 85 90 sta ACCUM + 1 00CEB7 1 90 06 bcc @LCEBF 00CEB9 1 E6 91 inc ACCUM + 2 00CEBB 1 D0 02 bne @LCEBF 00CEBD 1 E6 92 inc ACCUM + 3 00CEBF 1 @LCEBF: 00CEBF 1 A5 92 lda ACCUM + 3 00CEC1 1 05 91 ora ACCUM + 2 00CEC3 1 D0 C2 bne @LCE87 00CEC5 1 A5 90 lda ACCUM + 1 00CEC7 1 38 sec 00CEC8 1 E5 6F sbc T0 00CECA 1 90 0C bcc @LCED8 00CECC 1 E6 8B inc RESULT 00CECE 1 D0 06 bne @LCED6 00CED0 1 E6 8C inc RESULT + 1 00CED2 1 D0 02 bne @LCED6 00CED4 1 E6 8D inc RESULT + 2 00CED6 1 @LCED6: 00CED6 1 85 90 sta ACCUM + 1 00CED8 1 @LCED8: 00CED8 1 60 rts 00CED9 1 ; ----------------- 00CED9 1 00CED9 1 LCED9: 00CED9 1 A9 00 lda #$00 00CEDB 1 85 8B sta RESULT 00CEDD 1 85 8C sta RESULT + 1 00CEDF 1 85 8D sta RESULT + 2 00CEE1 1 60 rts 00CEE2 1 ; ----------------- 00CEE2 1 00CEE2 1 LCEE2: 00CEE2 1 20 E5 CE jsr LCEE5 00CEE5 1 LCEE5: 00CEE5 1 18 clc 00CEE6 1 LCEE6: 00CEE6 1 26 90 rol ACCUM + 1 00CEE8 1 26 91 rol ACCUM + 2 00CEEA 1 26 92 rol ACCUM + 3 00CEEC 1 60 rts 00CEED 1 ; ----------------- 00CEED 1 00CEED 1 LCEED: 00CEED 1 18 clc 00CEEE 1 A2 FD ldx #$FD 00CEF0 1 @LCEF0: 00CEF0 1 B5 8E lda RESULT + 3,x 00CEF2 1 75 93 adc ACCUM + 4,x 00CEF4 1 95 8E sta RESULT + 3,x 00CEF6 1 E8 inx 00CEF7 1 D0 F7 bne @LCEF0 00CEF9 1 60 rts 00CEFA 1 00CEFA 1 LCEFA: 00CEFA 1 A2 00 ldx #$00 00CEFC 1 : 00CEFC 1 8A txa 00CEFD 1 95 FA sta LRUTBL,x 00CEFF 1 E8 inx 00CF00 1 E0 04 cpx #$04 00CF02 1 D0 F8 bne :- 00CF04 1 A9 06 lda #$06 00CF06 1 95 FA sta LRUTBL,x 00CF08 1 60 rts 00CF09 1 ; --------------- 00CF09 1 00CF09 1 LCF09: 00CF09 1 A0 04 ldy #$04 00CF0B 1 A6 82 ldx LINDX 00CF0D 1 @LCF0D: 00CF0D 1 B9 FA 00 lda LRUTBL,y 00CF10 1 96 FA stx LRUTBL,y 00CF12 1 C5 82 cmp LINDX 00CF14 1 F0 07 beq @Rts 00CF16 1 88 dey 00CF17 1 30 E1 bmi LCEFA 00CF19 1 AA tax 00CF1A 1 4C 0D CF jmp @LCF0D 00CF1D 1 ; ---------------- 00CF1D 1 00CF1D 1 @Rts: 00CF1D 1 60 rts 00CF1E 1 ; ---------------- 00CF1E 1 00CF1E 1 LCF1E: 00CF1E 1 20 09 CF jsr LCF09 00CF21 1 20 B7 DF jsr LDFB7 00CF24 1 D0 46 bne @LCF6C 00CF26 1 20 D3 D1 jsr LD1D3 00CF29 1 20 8E D2 jsr LD28E 00CF2C 1 30 48 bmi Error70_2 00CF2E 1 20 C2 DF jsr LDFC2 00CF31 1 A5 80 lda TRACK 00CF33 1 48 pha 00CF34 1 A5 81 lda SECTOR 00CF36 1 48 pha 00CF37 1 A9 01 lda #$01 00CF39 1 20 F6 D4 jsr LD4F6 00CF3C 1 85 81 sta SECTOR 00CF3E 1 A9 00 lda #$00 00CF40 1 20 F6 D4 jsr LD4F6 00CF43 1 85 80 sta TRACK 00CF45 1 F0 1F beq @LCF66 00CF47 1 20 25 D1 jsr LD125 00CF4A 1 F0 0B beq @LCF57 00CF4C 1 20 AB DD jsr LDDAB 00CF4F 1 D0 06 bne @LCF57 00CF51 1 20 8C CF jsr LCF8C 00CF54 1 4C 5D CF jmp @LCF5D 00CF57 1 ; ---------------- 00CF57 1 00CF57 1 @LCF57: 00CF57 1 20 8C CF jsr LCF8C 00CF5A 1 20 57 DE jsr LDE57 00CF5D 1 @LCF5D: 00CF5D 1 68 pla 00CF5E 1 85 81 sta SECTOR 00CF60 1 68 pla 00CF61 1 85 80 sta TRACK 00CF63 1 4C 6F CF jmp @LCF6F 00CF66 1 ; ---------------- 00CF66 1 00CF66 1 @LCF66: 00CF66 1 68 pla 00CF67 1 85 81 sta SECTOR 00CF69 1 68 pla 00CF6A 1 85 80 sta TRACK 00CF6C 1 @LCF6C: 00CF6C 1 20 8C CF jsr LCF8C 00CF6F 1 @LCF6F: 00CF6F 1 20 93 DF jsr LDF93 00CF72 1 AA tax 00CF73 1 4C 99 D5 jmp LD599 00CF76 1 ; ---------------- 00CF76 1 00CF76 1 Error70_2: 00CF76 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00CF78 1 4C C8 C1 jmp GenerateErrorMessage 00CF7B 1 ; ---------------- 00CF7B 1 00CF7B 1 LCF7B: 00CF7B 1 20 09 CF jsr LCF09 00CF7E 1 20 B7 DF jsr LDFB7 00CF81 1 D0 08 bne @Rts 00CF83 1 20 8E D2 jsr LD28E 00CF86 1 30 EE bmi Error70_2 00CF88 1 20 C2 DF jsr LDFC2 00CF8B 1 @Rts: 00CF8B 1 60 rts 00CF8C 1 ; ---------------- 00CF8C 1 00CF8C 1 LCF8C: 00CF8C 1 A6 82 ldx LINDX 00CF8E 1 B5 A7 lda BUF0,x 00CF90 1 49 80 eor #$80 00CF92 1 95 A7 sta BUF0,x 00CF94 1 B5 AE lda BUF1,x 00CF96 1 49 80 eor #$80 00CF98 1 95 AE sta BUF1,x 00CF9A 1 60 rts 00CF9B 1 ; ---------------- 00CF9B 1 00CF9B 1 LCF9B: 00CF9B 1 A2 12 ldx #$12 00CF9D 1 86 83 stx SA 00CF9F 1 20 07 D1 jsr LD107 00CFA2 1 20 00 C1 jsr LC100 00CFA5 1 20 25 D1 jsr LD125 00CFA8 1 90 05 bcc @LCFAF 00CFAA 1 A9 20 lda #$20 00CFAC 1 20 9D DD jsr LDD9D 00CFAF 1 @LCFAF: 00CFAF 1 A5 83 lda SA 00CFB1 1 C9 0F cmp #$0F 00CFB3 1 F0 23 beq LCFD8 00CFB5 1 D0 08 bne LCFBF 00CFB7 1 ; ---------------- 00CFB7 1 00CFB7 1 LCFB7: 00CFB7 1 A5 84 lda ORGSA 00CFB9 1 29 8F and #$8F 00CFBB 1 C9 0F cmp #$0F 00CFBD 1 B0 19 bcs LCFD8 00CFBF 1 LCFBF: 00CFBF 1 20 25 D1 jsr LD125 00CFC2 1 B0 05 bcs @LCFC9 00CFC4 1 A5 85 lda DATA 00CFC6 1 4C 9D D1 jmp LD19D 00CFC9 1 ; ---------------- 00CFC9 1 00CFC9 1 @LCFC9: 00CFC9 1 D0 03 bne @LCFCE 00CFCB 1 4C AB E0 jmp LE0AB 00CFCE 1 ; ---------------- 00CFCE 1 00CFCE 1 @LCFCE: 00CFCE 1 A5 85 lda DATA 00CFD0 1 20 F1 CF jsr LCFF1 00CFD3 1 A4 82 ldy LINDX 00CFD5 1 4C EE D3 jmp LD3EE 00CFD8 1 ; ---------------- 00CFD8 1 00CFD8 1 LCFD8: 00CFD8 1 A9 04 lda #$04 00CFDA 1 85 82 sta LINDX 00CFDC 1 20 E8 D4 jsr LD4E8 00CFDF 1 C9 2A cmp #$2A 00CFE1 1 F0 05 beq @LCFE8 00CFE3 1 A5 85 lda DATA 00CFE5 1 20 F1 CF jsr LCFF1 00CFE8 1 @LCFE8: 00CFE8 1 A5 F8 lda EIOFLG 00CFEA 1 F0 01 beq @LCFED 00CFEC 1 60 rts 00CFED 1 ; ---------------- 00CFED 1 00CFED 1 @LCFED: 00CFED 1 EE 55 02 inc CMDWAT 00CFF0 1 60 rts 00CFF1 1 ; ---------------- 00CFF1 1 00CFF1 1 00CFF1 1 LCFF1: 00CFF1 1 48 pha 00CFF2 1 20 93 DF jsr LDF93 00CFF5 1 10 06 bpl LCFFD 00CFF7 1 68 pla 00CFF8 1 A9 61 lda #ERRORCODE_61_FILE_NOT_OPEN 00CFFA 1 4C C8 C1 jmp GenerateErrorMessage 00CFFD 1 ; ---------------- 00CFFD 1 00CFFD 1 LCFFD: 00CFFD 1 0A asl a 00CFFE 1 AA tax 00CFFF 1 68 pla 00D000 1 81 99 sta (BUFTAB0,x) 00D002 1 F6 99 inc BUFTAB0,x 00D004 1 60 rts 00D005 1 ; ---------------- 00D005 1 00D005 1 cmd_init: 00D005 1 20 D1 C1 jsr LC1D1 00D008 1 .if CompileDrive >= DRIVE_1571_05 00D008 1 jsr LABA6 00D008 1 .else 00D008 1 20 42 D0 jsr LD042 00D00B 1 .endif 00D00B 1 4C 94 C1 jmp CommandEnd 00D00E 1 ; ---------------- 00D00E 1 00D00E 1 LD00E: 00D00E 1 20 0F F1 jsr LF10F 00D011 1 A8 tay 00D012 1 B6 A7 ldx BUF0,y 00D014 1 E0 FF cpx #$FF 00D016 1 D0 14 bne @LD02C 00D018 1 48 pha 00D019 1 20 8E D2 jsr LD28E 00D01C 1 AA tax 00D01D 1 10 05 bpl @LD024 00D01F 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00D021 1 .if CompileDrive >= DRIVE_1571_05 00D021 1 jsr LE645 00D021 1 .else 00D021 1 20 48 E6 jsr LE648 00D024 1 .endif 00D024 1 00D024 1 @LD024: 00D024 1 68 pla 00D025 1 A8 tay 00D026 1 8A txa 00D027 1 09 80 ora #$80 00D029 1 99 A7 00 sta BUF0,y 00D02C 1 @LD02C: 00D02C 1 8A txa 00D02D 1 29 0F and #$0F 00D02F 1 85 F9 sta JOBNUM 00D031 1 A2 00 ldx #$00 00D033 1 86 81 stx SECTOR 00D035 1 AE 85 FE ldx LFE85 00D038 1 86 80 stx TRACK 00D03A 1 20 D3 D6 jsr LD6D3 00D03D 1 A9 B0 lda #$B0 00D03F 1 00D03F 1 .if CompileDrive >= DRIVE_1571 00D03F 1 jmp LA6E5 00D03F 1 .else 00D03F 1 4C 8C D5 jmp LD58C 00D042 1 .endif 00D042 1 ; ---------------- 00D042 1 00D042 1 LD042: 00D042 1 20 D1 F0 jsr LF0D1 00D045 1 20 13 D3 jsr LD313 00D048 1 20 0E D0 jsr LD00E 00D04B 1 A6 7F ldx DRVNUM 00D04D 1 A9 00 lda #$00 00D04F 1 9D 51 02 sta MDIRTY,x 00D052 1 8A txa 00D053 1 0A asl a 00D054 1 AA tax 00D055 1 A5 16 lda HEADER 00D057 1 95 12 sta DiskID0,x 00D059 1 A5 17 lda HEADER + 1 00D05B 1 95 13 sta DiskID0 + 1,x 00D05D 1 .if CompileDrive >= DRIVE_1571_05 00D05D 1 jsr LA667_PATCH 00D05D 1 .elseif CompileDrive >= DRIVE_1571 00D05D 1 jsr LA667 00D05D 1 .else 00D05D 1 20 86 D5 jsr LD586 00D060 1 .endif 00D060 1 A5 F9 lda JOBNUM 00D062 1 0A asl a 00D063 1 AA tax 00D064 1 A9 02 lda #$02 00D066 1 95 99 sta BUFTAB0,x 00D068 1 A1 99 lda (BUFTAB0,x) 00D06A 1 A6 7F ldx DRVNUM 00D06C 1 9D 01 01 sta DSKVER,x 00D06F 1 A9 00 lda #$00 00D071 1 .if CompileDrive >= DRIVE_1570 00D071 1 4C 1D AA jmp LAA1D 00D074 1 EA FillNOP 1 00D075 1 .elseif CompileDrive >= DRIVE_1541C_02 00D075 1 jmp LFFC7 00D075 1 FillNOP 1 00D075 1 .else 00D075 1 sta WPSW,x 00D075 1 sta NODRV,x 00D075 1 .endif 00D075 1 LD075: 00D075 1 20 3A EF jsr LEF3A 00D078 1 A0 04 ldy #$04 00D07A 1 A9 00 lda #$00 00D07C 1 AA tax 00D07D 1 LD07D: 00D07D 1 18 clc 00D07E 1 71 6D adc (BMPNT),y 00D080 1 90 01 bcc LD083 00D082 1 E8 inx 00D083 1 LD083: 00D083 1 C8 iny 00D084 1 C8 iny 00D085 1 C8 iny 00D086 1 C8 iny 00D087 1 C0 48 cpy #$48 00D089 1 F0 F8 beq LD083 00D08B 1 C0 90 cpy #$90 00D08D 1 D0 EE bne LD07D 00D08F 1 48 pha 00D090 1 8A txa 00D091 1 A6 7F ldx DRVNUM 00D093 1 9D FC 02 sta NDBH,x 00D096 1 68 pla 00D097 1 .if CompileDrive >= DRIVE_1571 00D097 1 jmp LA951 00D097 1 .else 00D097 1 9D FA 02 sta NDBL,x 00D09A 1 .endif 00D09A 1 60 rts 00D09B 1 LD09B: 00D09B 1 20 D0 D6 jsr LD6D0 00D09E 1 20 C3 D0 jsr LD0C3 00D0A1 1 20 99 D5 jsr LD599 00D0A4 1 20 37 D1 jsr LD137 00D0A7 1 85 80 sta TRACK 00D0A9 1 20 37 D1 jsr LD137 00D0AC 1 85 81 sta SECTOR 00D0AE 1 60 rts 00D0AF 1 LD0AF: 00D0AF 1 20 9B D0 jsr LD09B 00D0B2 1 A5 80 lda TRACK 00D0B4 1 D0 01 bne LD0B7 00D0B6 1 60 rts 00D0B7 1 LD0B7: 00D0B7 1 20 1E CF jsr LCF1E 00D0BA 1 20 D0 D6 jsr LD6D0 00D0BD 1 20 C3 D0 jsr LD0C3 00D0C0 1 4C 1E CF jmp LCF1E 00D0C3 1 LD0C3: 00D0C3 1 A9 80 lda #$80 00D0C5 1 D0 02 bne LD0C9 00D0C7 1 LD0C7: 00D0C7 1 A9 90 lda #$90 00D0C9 1 LD0C9: 00D0C9 1 8D 4D 02 sta CMD 00D0CC 1 20 93 DF jsr LDF93 00D0CF 1 AA tax 00D0D0 1 20 06 D5 jsr LD506 00D0D3 1 8A txa 00D0D4 1 48 pha 00D0D5 1 0A asl a 00D0D6 1 AA tax 00D0D7 1 A9 00 lda #$00 00D0D9 1 95 99 sta BUFTAB0,x 00D0DB 1 20 25 D1 jsr LD125 00D0DE 1 C9 04 cmp #$04 00D0E0 1 B0 06 bcs LD0E8 00D0E2 1 F6 B5 inc RECL,x 00D0E4 1 D0 02 bne LD0E8 00D0E6 1 F6 BB inc RECH,x 00D0E8 1 LD0E8: 00D0E8 1 68 pla 00D0E9 1 AA tax 00D0EA 1 60 rts 00D0EB 1 LD0EB: 00D0EB 1 A5 83 lda SA 00D0ED 1 C9 13 cmp #$13 00D0EF 1 90 02 bcc LD0F3 00D0F1 1 29 0F and #$0F 00D0F3 1 LD0F3: 00D0F3 1 C9 0F cmp #$0F 00D0F5 1 D0 02 bne LD0F9 00D0F7 1 A9 10 lda #$10 00D0F9 1 LD0F9: 00D0F9 1 AA tax 00D0FA 1 38 sec 00D0FB 1 BD 2B 02 lda LINTAB,x 00D0FE 1 30 06 bmi LD106 00D100 1 29 0F and #$0F 00D102 1 85 82 sta LINDX 00D104 1 AA tax 00D105 1 18 clc 00D106 1 LD106: 00D106 1 60 rts 00D107 1 LD107: 00D107 1 A5 83 lda SA 00D109 1 C9 13 cmp #$13 00D10B 1 90 02 bcc LD10F 00D10D 1 29 0F and #$0F 00D10F 1 LD10F: 00D10F 1 AA tax 00D110 1 BD 2B 02 lda LINTAB,x 00D113 1 A8 tay 00D114 1 0A asl a 00D115 1 90 0A bcc LD121 00D117 1 30 0A bmi LD123 00D119 1 LD119: 00D119 1 98 tya 00D11A 1 29 0F and #$0F 00D11C 1 85 82 sta LINDX 00D11E 1 AA tax 00D11F 1 18 clc 00D120 1 60 rts 00D121 1 LD121: 00D121 1 30 F6 bmi LD119 00D123 1 LD123: 00D123 1 38 sec 00D124 1 60 rts 00D125 1 LD125: 00D125 1 A6 82 ldx LINDX 00D127 1 B5 EC lda FILTYP,x 00D129 1 4A lsr a 00D12A 1 29 07 and #$07 00D12C 1 C9 04 cmp #$04 00D12E 1 60 rts 00D12F 1 LD12F: 00D12F 1 20 93 DF jsr LDF93 00D132 1 0A asl a 00D133 1 AA tax 00D134 1 A4 82 ldy LINDX 00D136 1 60 rts 00D137 1 LD137: 00D137 1 20 2F D1 jsr LD12F 00D13A 1 B9 44 02 lda LSTCHR,y 00D13D 1 F0 12 beq LD151 00D13F 1 A1 99 lda (BUFTAB0,x) 00D141 1 48 pha 00D142 1 B5 99 lda BUFTAB0,x 00D144 1 D9 44 02 cmp LSTCHR,y 00D147 1 D0 04 bne LD14D 00D149 1 A9 FF lda #$FF 00D14B 1 95 99 sta BUFTAB0,x 00D14D 1 LD14D: 00D14D 1 68 pla 00D14E 1 F6 99 inc BUFTAB0,x 00D150 1 60 rts 00D151 1 LD151: 00D151 1 A1 99 lda (BUFTAB0,x) 00D153 1 F6 99 inc BUFTAB0,x 00D155 1 60 rts 00D156 1 LD156: 00D156 1 20 37 D1 jsr LD137 00D159 1 D0 36 bne LD191 00D15B 1 85 85 sta DATA 00D15D 1 B9 44 02 lda LSTCHR,y 00D160 1 F0 08 beq LD16A 00D162 1 A9 80 lda #$80 00D164 1 99 F2 00 sta CHNRDY,y 00D167 1 A5 85 lda DATA 00D169 1 60 rts 00D16A 1 LD16A: 00D16A 1 20 1E CF jsr LCF1E 00D16D 1 A9 00 lda #$00 00D16F 1 20 C8 D4 jsr LD4C8 00D172 1 20 37 D1 jsr LD137 00D175 1 C9 00 cmp #$00 00D177 1 F0 19 beq LD192 00D179 1 85 80 sta TRACK 00D17B 1 20 37 D1 jsr LD137 00D17E 1 85 81 sta SECTOR 00D180 1 20 1E CF jsr LCF1E 00D183 1 20 D3 D1 jsr LD1D3 00D186 1 20 D0 D6 jsr LD6D0 00D189 1 20 C3 D0 jsr LD0C3 00D18C 1 20 1E CF jsr LCF1E 00D18F 1 A5 85 lda DATA 00D191 1 LD191: 00D191 1 60 rts 00D192 1 LD192: 00D192 1 20 37 D1 jsr LD137 00D195 1 A4 82 ldy LINDX 00D197 1 99 44 02 sta LSTCHR,y 00D19A 1 A5 85 lda DATA 00D19C 1 60 rts 00D19D 1 LD19D: 00D19D 1 20 F1 CF jsr LCFF1 00D1A0 1 F0 01 beq LD1A3 00D1A2 1 60 rts 00D1A3 1 LD1A3: 00D1A3 1 20 D3 D1 jsr LD1D3 00D1A6 1 20 1E F1 jsr LF11E 00D1A9 1 A9 00 lda #$00 00D1AB 1 20 C8 D4 jsr LD4C8 00D1AE 1 A5 80 lda TRACK 00D1B0 1 20 F1 CF jsr LCFF1 00D1B3 1 A5 81 lda SECTOR 00D1B5 1 20 F1 CF jsr LCFF1 00D1B8 1 20 C7 D0 jsr LD0C7 00D1BB 1 20 1E CF jsr LCF1E 00D1BE 1 20 D0 D6 jsr LD6D0 00D1C1 1 A9 02 lda #$02 00D1C3 1 4C C8 D4 jmp LD4C8 00D1C6 1 LD1C6: 00D1C6 1 85 6F sta T0 00D1C8 1 20 E8 D4 jsr LD4E8 00D1CB 1 18 clc 00D1CC 1 65 6F adc T0 00D1CE 1 95 99 sta BUFTAB0,x 00D1D0 1 85 94 sta DIRBUF 00D1D2 1 60 rts 00D1D3 1 LD1D3: 00D1D3 1 20 93 DF jsr LDF93 00D1D6 1 AA tax 00D1D7 1 BD 5B 02 lda LSTJOB,x 00D1DA 1 29 01 and #$01 00D1DC 1 85 7F sta DRVNUM 00D1DE 1 60 rts 00D1DF 1 LD1DF: 00D1DF 1 38 sec 00D1E0 1 B0 01 bcs LD1E3 00D1E2 1 LD1E2: 00D1E2 1 18 clc 00D1E3 1 LD1E3: 00D1E3 1 08 php 00D1E4 1 85 6F sta T0 00D1E6 1 20 27 D2 jsr LD227 00D1E9 1 20 7F D3 jsr LD37F 00D1EC 1 85 82 sta LINDX 00D1EE 1 A6 83 ldx SA 00D1F0 1 28 plp 00D1F1 1 90 02 bcc LD1F5 00D1F3 1 09 80 ora #$80 00D1F5 1 LD1F5: 00D1F5 1 9D 2B 02 sta LINTAB,x 00D1F8 1 29 3F and #$3F 00D1FA 1 A8 tay 00D1FB 1 A9 FF lda #$FF 00D1FD 1 99 A7 00 sta BUF0,y 00D200 1 99 AE 00 sta BUF1,y 00D203 1 99 CD 00 sta SS,y 00D206 1 C6 6F dec T0 00D208 1 30 1C bmi LD226 00D20A 1 20 8E D2 jsr LD28E 00D20D 1 10 08 bpl LD217 00D20F 1 LD20F: 00D20F 1 20 5A D2 jsr LD25A 00D212 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00D214 1 4C C8 C1 jmp GenerateErrorMessage 00D217 1 ; ---------------- 00D217 1 00D217 1 LD217: 00D217 1 99 A7 00 sta BUF0,y 00D21A 1 C6 6F dec T0 00D21C 1 30 08 bmi LD226 00D21E 1 20 8E D2 jsr LD28E 00D221 1 30 EC bmi LD20F 00D223 1 99 AE 00 sta BUF1,y 00D226 1 LD226: 00D226 1 60 rts 00D227 1 LD227: 00D227 1 A5 83 lda SA 00D229 1 C9 0F cmp #$0F 00D22B 1 D0 01 bne LD22E 00D22D 1 60 rts 00D22E 1 LD22E: 00D22E 1 A6 83 ldx SA 00D230 1 BD 2B 02 lda LINTAB,x 00D233 1 C9 FF cmp #$FF 00D235 1 F0 22 beq @LD259 00D237 1 29 3F and #$3F 00D239 1 85 82 sta LINDX 00D23B 1 A9 FF lda #$FF 00D23D 1 9D 2B 02 sta LINTAB,x 00D240 1 A6 82 ldx LINDX 00D242 1 A9 00 lda #$00 00D244 1 95 F2 sta CHNRDY,x 00D246 1 20 5A D2 jsr LD25A 00D249 1 A6 82 ldx LINDX 00D24B 1 A9 01 lda #$01 00D24D 1 @LD24D: 00D24D 1 CA dex 00D24E 1 30 03 bmi @LD253 00D250 1 0A asl a 00D251 1 D0 FA bne @LD24D 00D253 1 @LD253: 00D253 1 0D 56 02 ora LINUSE 00D256 1 8D 56 02 sta LINUSE 00D259 1 @LD259: 00D259 1 60 rts 00D25A 1 ; ---------- 00D25A 1 00D25A 1 LD25A: 00D25A 1 A6 82 ldx LINDX 00D25C 1 B5 A7 lda BUF0,x 00D25E 1 C9 FF cmp #$FF 00D260 1 F0 09 beq @LD26B 00D262 1 48 pha 00D263 1 A9 FF lda #$FF 00D265 1 95 A7 sta BUF0,x 00D267 1 68 pla 00D268 1 20 F3 D2 jsr LD2F3 00D26B 1 @LD26B: 00D26B 1 A6 82 ldx LINDX 00D26D 1 B5 AE lda BUF1,x 00D26F 1 C9 FF cmp #$FF 00D271 1 F0 09 beq @LD27C 00D273 1 48 pha 00D274 1 A9 FF lda #$FF 00D276 1 95 AE sta BUF1,x 00D278 1 68 pla 00D279 1 20 F3 D2 jsr LD2F3 00D27C 1 @LD27C: 00D27C 1 A6 82 ldx LINDX 00D27E 1 B5 CD lda SS,x 00D280 1 C9 FF cmp #$FF 00D282 1 F0 09 beq @LD28D 00D284 1 48 pha 00D285 1 A9 FF lda #$FF 00D287 1 95 CD sta SS,x 00D289 1 68 pla 00D28A 1 20 F3 D2 jsr LD2F3 00D28D 1 @LD28D: 00D28D 1 60 rts 00D28E 1 ; --------- 00D28E 1 00D28E 1 LD28E: 00D28E 1 98 tya 00D28F 1 48 pha 00D290 1 A0 01 ldy #$01 00D292 1 20 BA D2 jsr LD2BA 00D295 1 10 0C bpl LD2A3 00D297 1 88 dey 00D298 1 20 BA D2 jsr LD2BA 00D29B 1 10 06 bpl LD2A3 00D29D 1 20 39 D3 jsr LD339 00D2A0 1 AA tax 00D2A1 1 30 13 bmi LD2B6 00D2A3 1 LD2A3: 00D2A3 1 B5 00 lda JOBS0,x 00D2A5 1 30 FC bmi LD2A3 00D2A7 1 A5 7F lda DRVNUM 00D2A9 1 95 00 sta JOBS0,x 00D2AB 1 9D 5B 02 sta LSTJOB,x 00D2AE 1 8A txa 00D2AF 1 0A asl a 00D2B0 1 A8 tay 00D2B1 1 A9 02 lda #$02 00D2B3 1 99 99 00 sta BUFTAB0,y 00D2B6 1 LD2B6: 00D2B6 1 68 pla 00D2B7 1 A8 tay 00D2B8 1 8A txa 00D2B9 1 60 rts 00D2BA 1 LD2BA: 00D2BA 1 A2 07 ldx #$07 00D2BC 1 LD2BC: 00D2BC 1 B9 4F 02 lda BUFUSE,y 00D2BF 1 3D E9 EF and LEFE9,x 00D2C2 1 F0 04 beq LD2C8 00D2C4 1 CA dex 00D2C5 1 10 F5 bpl LD2BC 00D2C7 1 60 rts 00D2C8 1 LD2C8: 00D2C8 1 B9 4F 02 lda BUFUSE,y 00D2CB 1 5D E9 EF eor LEFE9,x 00D2CE 1 99 4F 02 sta BUFUSE,y 00D2D1 1 8A txa 00D2D2 1 88 dey 00D2D3 1 30 03 bmi LD2D8 00D2D5 1 18 clc 00D2D6 1 69 08 adc #$08 00D2D8 1 LD2D8: 00D2D8 1 AA tax 00D2D9 1 LD2D9: 00D2D9 1 60 rts 00D2DA 1 LD2DA: 00D2DA 1 A6 82 ldx LINDX 00D2DC 1 B5 A7 lda BUF0,x 00D2DE 1 30 09 bmi LD2E9 00D2E0 1 8A txa 00D2E1 1 18 clc 00D2E2 1 69 07 adc #$07 00D2E4 1 AA tax 00D2E5 1 B5 A7 lda BUF0,x 00D2E7 1 10 F0 bpl LD2D9 00D2E9 1 LD2E9: 00D2E9 1 C9 FF cmp #$FF 00D2EB 1 F0 EC beq LD2D9 00D2ED 1 48 pha 00D2EE 1 A9 FF lda #$FF 00D2F0 1 95 A7 sta BUF0,x 00D2F2 1 68 pla 00D2F3 1 00D2F3 1 LD2F3: 00D2F3 1 29 0F and #$0F 00D2F5 1 A8 tay 00D2F6 1 C8 iny 00D2F7 1 A2 10 ldx #$10 00D2F9 1 LD2F9: 00D2F9 1 6E 50 02 ror BUFUSE + 1 00D2FC 1 6E 4F 02 ror BUFUSE 00D2FF 1 88 dey 00D300 1 D0 01 bne LD303 00D302 1 18 clc 00D303 1 LD303: 00D303 1 CA dex 00D304 1 10 F3 bpl LD2F9 00D306 1 60 rts 00D307 1 LD307: 00D307 1 A9 0E lda #$0E 00D309 1 85 83 sta SA 00D30B 1 LD30B: 00D30B 1 20 27 D2 jsr LD227 00D30E 1 C6 83 dec SA 00D310 1 D0 F9 bne LD30B 00D312 1 60 rts 00D313 1 00D313 1 LD313: 00D313 1 A9 0E lda #$0E 00D315 1 85 83 sta SA 00D317 1 LD317: 00D317 1 A6 83 ldx SA 00D319 1 BD 2B 02 lda LINTAB,x 00D31C 1 C9 FF cmp #$FF 00D31E 1 F0 14 beq LD334 00D320 1 29 3F and #$3F 00D322 1 85 82 sta LINDX 00D324 1 20 93 DF jsr LDF93 00D327 1 AA tax 00D328 1 BD 5B 02 lda LSTJOB,x 00D32B 1 29 01 and #$01 00D32D 1 C5 7F cmp DRVNUM 00D32F 1 D0 03 bne LD334 00D331 1 20 27 D2 jsr LD227 00D334 1 LD334: 00D334 1 C6 83 dec SA 00D336 1 10 DF bpl LD317 00D338 1 60 rts 00D339 1 LD339: 00D339 1 A5 6F lda T0 00D33B 1 48 pha 00D33C 1 A0 00 ldy #$00 00D33E 1 LD33E: 00D33E 1 B6 FA ldx LRUTBL,y 00D340 1 B5 A7 lda BUF0,x 00D342 1 10 04 bpl LD348 00D344 1 C9 FF cmp #$FF 00D346 1 D0 16 bne LD35E 00D348 1 LD348: 00D348 1 8A txa 00D349 1 18 clc 00D34A 1 69 07 adc #$07 00D34C 1 AA tax 00D34D 1 B5 A7 lda BUF0,x 00D34F 1 10 04 bpl LD355 00D351 1 C9 FF cmp #$FF 00D353 1 D0 09 bne LD35E 00D355 1 LD355: 00D355 1 C8 iny 00D356 1 C0 05 cpy #$05 00D358 1 90 E4 bcc LD33E 00D35A 1 A2 FF ldx #$FF 00D35C 1 D0 1C bne LD37A 00D35E 1 LD35E: 00D35E 1 86 6F stx T0 00D360 1 29 3F and #$3F 00D362 1 AA tax 00D363 1 LD363: 00D363 1 B5 00 lda JOBS0,x 00D365 1 30 FC bmi LD363 00D367 1 .if CompileDrive >= DRIVE_1571_05 00D367 1 jmp LAA3F 00D367 1 FillNOP 1 00D367 1 .elseif CompileDrive >= DRIVE_1571 00D367 1 cmp #$02 00D367 1 bcc LD373 00D367 1 .elseif CompileDrive >= DRIVE_1570 00D367 1 4C 3F AA jmp LAA3F 00D36A 1 EA FillNOP 1 00D36B 1 .elseif CompileDrive >= DRIVE_1541C_02 00D36B 1 jmp LFF91 00D36B 1 FillNOP 1 00D36B 1 .else 00D36B 1 cmp #$02 00D36B 1 bcc LD373 00D36B 1 .endif 00D36B 1 LD36B: 00D36B 1 A6 6F ldx T0 00D36D 1 E0 07 cpx #$07 00D36F 1 90 D7 bcc LD348 00D371 1 B0 E2 bcs LD355 00D373 1 LD373: 00D373 1 A4 6F ldy T0 00D375 1 A9 FF lda #$FF 00D377 1 99 A7 00 sta BUF0,y 00D37A 1 LD37A: 00D37A 1 68 pla 00D37B 1 85 6F sta T0 00D37D 1 8A txa 00D37E 1 60 rts 00D37F 1 LD37F: 00D37F 1 A0 00 ldy #$00 00D381 1 A9 01 lda #$01 00D383 1 LD383: 00D383 1 2C 56 02 bit LINUSE 00D386 1 D0 09 bne LD391 00D388 1 C8 iny 00D389 1 0A asl a 00D38A 1 D0 F7 bne LD383 00D38C 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00D38E 1 4C C8 C1 jmp GenerateErrorMessage 00D391 1 ; ---------------- 00D391 1 00D391 1 LD391: 00D391 1 49 FF eor #$FF 00D393 1 2D 56 02 and LINUSE 00D396 1 8D 56 02 sta LINUSE 00D399 1 98 tya 00D39A 1 60 rts 00D39B 1 LD39B: 00D39B 1 20 EB D0 jsr LD0EB 00D39E 1 20 00 C1 jsr LC100 00D3A1 1 20 AA D3 jsr LD3AA 00D3A4 1 A6 82 ldx LINDX 00D3A6 1 BD 3E 02 lda L023E,x 00D3A9 1 60 rts 00D3AA 1 LD3AA: 00D3AA 1 A6 82 ldx LINDX 00D3AC 1 20 25 D1 jsr LD125 00D3AF 1 D0 03 bne LD3B4 00D3B1 1 4C 20 E1 jmp LE120 00D3B4 1 LD3B4: 00D3B4 1 A5 83 lda SA 00D3B6 1 C9 0F cmp #$0F 00D3B8 1 F0 5A beq LD414 00D3BA 1 B5 F2 lda CHNRDY,x 00D3BC 1 29 08 and #$08 00D3BE 1 D0 13 bne LD3D3 00D3C0 1 20 25 D1 jsr LD125 00D3C3 1 C9 07 cmp #$07 00D3C5 1 D0 07 bne LD3CE 00D3C7 1 A9 89 lda #$89 00D3C9 1 95 F2 sta CHNRDY,x 00D3CB 1 4C DE D3 jmp LD3DE 00D3CE 1 LD3CE: 00D3CE 1 A9 00 lda #$00 00D3D0 1 95 F2 sta CHNRDY,x 00D3D2 1 60 rts 00D3D3 1 LD3D3: 00D3D3 1 A5 83 lda SA 00D3D5 1 F0 32 beq LD409 00D3D7 1 20 25 D1 jsr LD125 00D3DA 1 C9 04 cmp #$04 00D3DC 1 90 22 bcc LD400 00D3DE 1 LD3DE: 00D3DE 1 20 2F D1 jsr LD12F 00D3E1 1 B5 99 lda BUFTAB0,x 00D3E3 1 D9 44 02 cmp LSTCHR,y 00D3E6 1 D0 04 bne LD3EC 00D3E8 1 A9 00 lda #$00 00D3EA 1 95 99 sta BUFTAB0,x 00D3EC 1 LD3EC: 00D3EC 1 F6 99 inc BUFTAB0,x 00D3EE 1 LD3EE: 00D3EE 1 A1 99 lda (BUFTAB0,x) 00D3F0 1 99 3E 02 sta L023E,y 00D3F3 1 B5 99 lda BUFTAB0,x 00D3F5 1 D9 44 02 cmp LSTCHR,y 00D3F8 1 D0 05 bne LD3FF 00D3FA 1 A9 81 lda #$81 00D3FC 1 99 F2 00 sta CHNRDY,y 00D3FF 1 LD3FF: 00D3FF 1 60 rts 00D400 1 LD400: 00D400 1 20 56 D1 jsr LD156 00D403 1 LD403: 00D403 1 A6 82 ldx LINDX 00D405 1 9D 3E 02 sta L023E,x 00D408 1 60 rts 00D409 1 LD409: 00D409 1 AD 54 02 lda DIRLST 00D40C 1 F0 F2 beq LD400 00D40E 1 20 67 ED jsr LED67 00D411 1 4C 03 D4 jmp LD403 00D414 1 LD414: 00D414 1 20 E8 D4 jsr LD4E8 00D417 1 C9 D4 cmp #<(ERRBUF - 1) 00D419 1 D0 18 bne LD433 00D41B 1 A5 95 lda DIRBUF + 1 00D41D 1 C9 02 cmp #>(ERRBUF - 1) 00D41F 1 D0 12 bne LD433 00D421 1 A9 0D lda #$0D 00D423 1 85 85 sta DATA 00D425 1 20 23 C1 jsr LC123 00D428 1 A9 00 lda #ERRORCODE_00_OK 00D42A 1 20 C1 E6 jsr SetErrorCodeNoTS 00D42D 1 C6 A5 dec BUFTABERR 00D42F 1 A9 80 lda #$80 00D431 1 D0 12 bne LD445 00D433 1 LD433: 00D433 1 20 37 D1 jsr LD137 00D436 1 85 85 sta DATA 00D438 1 D0 09 bne LD443 00D43A 1 LD43A: 00D43A 1 A9 D4 lda #<(ERRBUF - 1) 00D43C 1 20 C8 D4 jsr LD4C8 00D43F 1 A9 02 lda #$02 ; @@@TODO >(ERRBUF - 1)??? 00D441 1 95 9A sta BUFTAB0 + 1,x 00D443 1 LD443: 00D443 1 A9 88 lda #$88 00D445 1 LD445: 00D445 1 85 F7 sta CHNRDY + 5 00D447 1 A5 85 lda DATA 00D449 1 8D 43 02 sta L0243 00D44C 1 60 rts 00D44D 1 LD44D: 00D44D 1 20 93 DF jsr LDF93 00D450 1 0A asl a 00D451 1 AA tax 00D452 1 A9 00 lda #$00 00D454 1 95 99 sta BUFTAB0,x 00D456 1 A1 99 lda (BUFTAB0,x) 00D458 1 F0 05 beq LD45F 00D45A 1 D6 99 dec BUFTAB0,x 00D45C 1 4C 56 D1 jmp LD156 00D45F 1 LD45F: 00D45F 1 60 rts 00D460 1 LD460: 00D460 1 A9 80 lda #$80 00D462 1 D0 02 bne LD466 00D464 1 LD464: 00D464 1 A9 90 lda #$90 00D466 1 LD466: 00D466 1 05 7F ora DRVNUM 00D468 1 8D 4D 02 sta CMD 00D46B 1 A5 F9 lda JOBNUM 00D46D 1 20 D3 D6 jsr LD6D3 00D470 1 A6 F9 ldx JOBNUM 00D472 1 4C 93 D5 jmp LD593 00D475 1 LD475: 00D475 1 A9 01 lda #$01 00D477 1 LD477: 00D477 1 8D 4A 02 sta TYPE 00D47A 1 A9 11 lda #$11 00D47C 1 85 83 sta SA 00D47E 1 20 46 DC jsr LDC46 00D481 1 A9 02 lda #$02 00D483 1 4C C8 D4 jmp LD4C8 00D486 1 LD486: 00D486 1 A9 12 lda #$12 00D488 1 85 83 sta SA 00D48A 1 4C DA DC jmp LDCDA 00D48D 1 LD48D: 00D48D 1 20 3B DE jsr LDE3B 00D490 1 A9 01 lda #$01 00D492 1 85 6F sta T0 00D494 1 A5 69 lda SECINC 00D496 1 48 pha 00D497 1 A9 03 lda #$03 00D499 1 85 69 sta SECINC 00D49B 1 20 2D F1 jsr LF12D 00D49E 1 68 pla 00D49F 1 85 69 sta SECINC 00D4A1 1 A9 00 lda #$00 00D4A3 1 20 C8 D4 jsr LD4C8 00D4A6 1 A5 80 lda TRACK 00D4A8 1 20 F1 CF jsr LCFF1 00D4AB 1 A5 81 lda SECTOR 00D4AD 1 20 F1 CF jsr LCFF1 00D4B0 1 20 C7 D0 jsr LD0C7 00D4B3 1 20 99 D5 jsr LD599 00D4B6 1 A9 00 lda #$00 00D4B8 1 20 C8 D4 jsr LD4C8 00D4BB 1 LD4BB: 00D4BB 1 20 F1 CF jsr LCFF1 00D4BE 1 D0 FB bne LD4BB 00D4C0 1 20 F1 CF jsr LCFF1 00D4C3 1 A9 FF lda #$FF 00D4C5 1 4C F1 CF jmp LCFF1 00D4C8 1 LD4C8: 00D4C8 1 85 6F sta T0 00D4CA 1 20 93 DF jsr LDF93 00D4CD 1 0A asl a 00D4CE 1 AA tax 00D4CF 1 B5 9A lda BUFTAB0 + 1,x 00D4D1 1 85 95 sta DIRBUF + 1 00D4D3 1 A5 6F lda T0 00D4D5 1 95 99 sta BUFTAB0,x 00D4D7 1 85 94 sta DIRBUF 00D4D9 1 60 rts 00D4DA 1 LD4DA: 00D4DA 1 A9 11 lda #$11 00D4DC 1 85 83 sta SA 00D4DE 1 20 27 D2 jsr LD227 00D4E1 1 A9 12 lda #$12 00D4E3 1 85 83 sta SA 00D4E5 1 4C 27 D2 jmp LD227 00D4E8 1 ; ------------- 00D4E8 1 LD4E8: 00D4E8 1 20 93 DF jsr LDF93 00D4EB 1 LD4EB: 00D4EB 1 0A asl a 00D4EC 1 AA tax 00D4ED 1 B5 9A lda BUFTAB0 + 1,x 00D4EF 1 85 95 sta DIRBUF + 1 00D4F1 1 B5 99 lda BUFTAB0,x 00D4F3 1 85 94 sta DIRBUF 00D4F5 1 60 rts 00D4F6 1 LD4F6: 00D4F6 1 85 71 sta T2 00D4F8 1 20 93 DF jsr LDF93 00D4FB 1 AA tax 00D4FC 1 BD E0 FE lda TableHighBytesOfBuffers,x 00D4FF 1 85 72 sta T3 00D501 1 A0 00 ldy #$00 00D503 1 B1 71 lda (T2),y 00D505 1 60 rts 00D506 1 LD506: 00D506 1 BD 5B 02 lda LSTJOB,x 00D509 1 29 01 and #$01 00D50B 1 0D 4D 02 ora CMD 00D50E 1 LD50E: 00D50E 1 48 pha 00D50F 1 86 F9 stx JOBNUM 00D511 1 8A txa 00D512 1 0A asl a 00D513 1 AA tax 00D514 1 B5 07 lda SECTOR0,x 00D516 1 8D 4D 02 sta CMD 00D519 1 B5 06 lda TRACK0,x 00D51B 1 F0 2D beq LD54A 00D51D 1 CD D7 FE cmp MAXTRACK_ADJUSTED 00D520 1 B0 28 bcs LD54A 00D522 1 AA tax 00D523 1 68 pla 00D524 1 48 pha 00D525 1 29 F0 and #$F0 00D527 1 C9 90 cmp #$90 00D529 1 D0 4F bne LD57A 00D52B 1 68 pla 00D52C 1 48 pha 00D52D 1 4A lsr a 00D52E 1 B0 05 bcs LD535 00D530 1 AD 01 01 lda DSKVER 00D533 1 90 03 bcc LD538 00D535 1 LD535: 00D535 1 AD 02 01 lda DSKVER + 1 00D538 1 LD538: 00D538 1 F0 05 beq LD53F 00D53A 1 CD D5 FE cmp LFED5 00D53D 1 D0 33 bne LD572 00D53F 1 LD53F: 00D53F 1 8A txa 00D540 1 20 4B F2 jsr LF24B 00D543 1 CD 4D 02 cmp CMD 00D546 1 F0 02 beq LD54A 00D548 1 B0 30 bcs LD57A 00D54A 1 LD54A: 00D54A 1 20 52 D5 jsr LD552 00D54D 1 LD54D: 00D54D 1 A9 66 lda #ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR 00D54F 1 4C 45 E6 jmp LE645 00D552 1 LD552: 00D552 1 A5 F9 lda JOBNUM 00D554 1 0A asl a 00D555 1 AA tax 00D556 1 B5 06 lda TRACK0,x 00D558 1 85 80 sta TRACK 00D55A 1 B5 07 lda SECTOR0,x 00D55C 1 85 81 sta SECTOR 00D55E 1 60 rts 00D55F 1 LD55F: 00D55F 1 A5 80 lda TRACK 00D561 1 F0 EA beq LD54D 00D563 1 CD D7 FE cmp MAXTRACK_ADJUSTED 00D566 1 B0 E5 bcs LD54D 00D568 1 20 4B F2 jsr LF24B 00D56B 1 C5 81 cmp SECTOR 00D56D 1 F0 DE beq LD54D 00D56F 1 90 DC bcc LD54D 00D571 1 60 rts 00D572 1 LD572: 00D572 1 20 52 D5 jsr LD552 00D575 1 A9 73 lda #ERRORCODE_73_IDENTIFY 00D577 1 4C 45 E6 jmp LE645 00D57A 1 LD57A: 00D57A 1 A6 F9 ldx JOBNUM 00D57C 1 68 pla 00D57D 1 8D 4D 02 sta CMD 00D580 1 95 00 sta JOBS0,x 00D582 1 9D 5B 02 sta LSTJOB,x 00D585 1 60 rts 00D586 1 LD586: 00D586 1 A9 80 lda #$80 00D588 1 D0 02 bne LD58C 00D58A 1 LD58A: 00D58A 1 A9 90 lda #$90 00D58C 1 LD58C: 00D58C 1 05 7F ora DRVNUM 00D58E 1 A6 F9 ldx JOBNUM 00D590 1 LD590: 00D590 1 8D 4D 02 sta CMD 00D593 1 LD593: 00D593 1 AD 4D 02 lda CMD 00D596 1 20 0E D5 jsr LD50E 00D599 1 LD599: 00D599 1 20 A6 D5 jsr LD5A6 00D59C 1 B0 FB bcs LD599 00D59E 1 48 pha 00D59F 1 A9 00 lda #$00 00D5A1 1 8D 98 02 sta JOBRTN 00D5A4 1 68 pla 00D5A5 1 60 rts 00D5A6 1 LD5A6: 00D5A6 1 B5 00 lda JOBS0,x 00D5A8 1 30 1A bmi LD5C4 00D5AA 1 C9 02 cmp #$02 00D5AC 1 90 14 bcc LD5C2 00D5AE 1 C9 08 cmp #$08 00D5B0 1 F0 08 beq LD5BA 00D5B2 1 C9 0B cmp #$0B 00D5B4 1 F0 04 beq LD5BA 00D5B6 1 C9 0F cmp #$0F 00D5B8 1 D0 0C bne LD5C6 00D5BA 1 LD5BA: 00D5BA 1 2C 98 02 bit JOBRTN 00D5BD 1 30 03 bmi LD5C2 00D5BF 1 4C 3F D6 jmp LD63F 00D5C2 1 LD5C2: 00D5C2 1 18 clc 00D5C3 1 60 rts 00D5C4 1 LD5C4: 00D5C4 1 38 sec 00D5C5 1 60 rts 00D5C6 1 LD5C6: 00D5C6 1 98 tya 00D5C7 1 48 pha 00D5C8 1 A5 7F lda DRVNUM 00D5CA 1 48 pha 00D5CB 1 BD 5B 02 lda LSTJOB,x 00D5CE 1 29 01 and #$01 00D5D0 1 85 7F sta DRVNUM 00D5D2 1 A8 tay 00D5D3 1 B9 CA FE lda DriveLEDMasks,y 00D5D6 1 8D 6D 02 sta ERLED 00D5D9 1 20 A6 D6 jsr LD6A6 00D5DC 1 C9 02 cmp #$02 00D5DE 1 B0 03 bcs LD5E3 00D5E0 1 4C 6D D6 jmp LD66D 00D5E3 1 LD5E3: 00D5E3 1 BD 5B 02 lda LSTJOB,x 00D5E6 1 29 F0 and #$F0 00D5E8 1 48 pha 00D5E9 1 C9 90 cmp #$90 00D5EB 1 D0 07 bne LD5F4 00D5ED 1 A5 7F lda DRVNUM 00D5EF 1 09 B8 ora #$B8 00D5F1 1 9D 5B 02 sta LSTJOB,x 00D5F4 1 LD5F4: 00D5F4 1 24 6A bit REVCNT 00D5F6 1 70 39 bvs LD631 00D5F8 1 A9 00 lda #$00 00D5FA 1 8D 99 02 sta EPTR 00D5FD 1 8D 9A 02 sta TOFF 00D600 1 LD600: 00D600 1 AC 99 02 ldy EPTR 00D603 1 AD 9A 02 lda TOFF 00D606 1 38 sec 00D607 1 F9 DB FE sbc LFEDB,y 00D60A 1 8D 9A 02 sta TOFF 00D60D 1 B9 DB FE lda LFEDB,y 00D610 1 .if CompileDrive >= DRIVE_1570 00D610 1 20 A1 FF jsr LFFA1 00D613 1 .elseif CompileDrive = DRIVE_1541C_02 00D613 1 jsr LFF84 00D613 1 .else 00D613 1 jsr LD676 00D613 1 .endif 00D613 1 EE 99 02 inc EPTR 00D616 1 20 A6 D6 jsr LD6A6 00D619 1 C9 02 cmp #$02 00D61B 1 90 08 bcc LD625 00D61D 1 AC 99 02 ldy EPTR 00D620 1 B9 DB FE lda LFEDB,y 00D623 1 D0 DB bne LD600 00D625 1 LD625: 00D625 1 AD 9A 02 lda TOFF 00D628 1 .if CompileDrive >= DRIVE_1570 00D628 1 20 A6 FF jsr LFFA6 00D62B 1 .elseif CompileDrive = DRIVE_1541C_02 00D62B 1 jsr LFF89 00D62B 1 .else 00D62B 1 jsr LD676 00D62B 1 .endif 00D62B 1 B5 00 lda JOBS0,x 00D62D 1 C9 02 cmp #$02 00D62F 1 90 2B bcc LD65C 00D631 1 LD631: 00D631 1 24 6A bit REVCNT 00D633 1 10 0F bpl LD644 00D635 1 LD635: 00D635 1 68 pla 00D636 1 C9 90 cmp #$90 00D638 1 D0 05 bne LD63F 00D63A 1 05 7F ora DRVNUM 00D63C 1 9D 5B 02 sta LSTJOB,x 00D63F 1 LD63F: 00D63F 1 B5 00 lda JOBS0,x 00D641 1 20 0A E6 jsr LE60A 00D644 1 LD644: 00D644 1 68 pla 00D645 1 2C 98 02 bit JOBRTN 00D648 1 30 23 bmi LD66D 00D64A 1 48 pha 00D64B 1 A9 C0 lda #$C0 00D64D 1 05 7F ora DRVNUM 00D64F 1 95 00 sta JOBS0,x 00D651 1 LD651: 00D651 1 .if CompileDrive >= DRIVE_1570 00D651 1 20 B6 9F jsr L9FB6 00D654 1 EA FillNOP 1 00D655 1 .else 00D655 1 lda JOBS0,x 00D655 1 bmi LD651 00D655 1 .endif 00D655 1 20 A6 D6 jsr LD6A6 00D658 1 C9 02 cmp #$02 00D65A 1 B0 D9 bcs LD635 00D65C 1 LD65C: 00D65C 1 68 pla 00D65D 1 C9 90 cmp #$90 00D65F 1 D0 0C bne LD66D 00D661 1 05 7F ora DRVNUM 00D663 1 9D 5B 02 sta LSTJOB,x 00D666 1 20 A6 D6 jsr LD6A6 00D669 1 C9 02 cmp #$02 00D66B 1 B0 D2 bcs LD63F 00D66D 1 LD66D: 00D66D 1 68 pla 00D66E 1 85 7F sta DRVNUM 00D670 1 68 pla 00D671 1 A8 tay 00D672 1 B5 00 lda JOBS0,x 00D674 1 18 clc 00D675 1 60 rts 00D676 1 LD676: 00D676 1 C9 00 cmp #$00 00D678 1 F0 18 beq LD692 00D67A 1 30 0C bmi LD688 00D67C 1 LD67C: 00D67C 1 A0 01 ldy #$01 00D67E 1 20 93 D6 jsr LD693 00D681 1 38 sec 00D682 1 E9 01 sbc #$01 00D684 1 D0 F6 bne LD67C 00D686 1 F0 0A beq LD692 00D688 1 LD688: 00D688 1 A0 FF ldy #$FF 00D68A 1 20 93 D6 jsr LD693 00D68D 1 18 clc 00D68E 1 69 01 adc #$01 00D690 1 D0 F6 bne LD688 00D692 1 LD692: 00D692 1 60 rts 00D693 1 LD693: 00D693 1 48 pha 00D694 1 98 tya 00D695 1 A4 7F ldy DRVNUM 00D697 1 99 FE 02 sta PHASE,y 00D69A 1 LD69A: 00D69A 1 D9 FE 02 cmp PHASE,y 00D69D 1 F0 FB beq LD69A 00D69F 1 A9 00 lda #$00 00D6A1 1 99 FE 02 sta PHASE,y 00D6A4 1 68 pla 00D6A5 1 60 rts 00D6A6 1 LD6A6: 00D6A6 1 A5 6A lda REVCNT 00D6A8 1 29 3F and #$3F 00D6AA 1 A8 tay 00D6AB 1 LD6AB: 00D6AB 1 AD 6D 02 lda ERLED 00D6AE 1 4D 00 1C eor VDC_PB2 00D6B1 1 8D 00 1C sta VDC_PB2 00D6B4 1 BD 5B 02 lda LSTJOB,x 00D6B7 1 95 00 sta JOBS0,x 00D6B9 1 LD6B9: 00D6B9 1 .if CompileDrive >= DRIVE_1570 00D6B9 1 20 B6 9F jsr L9FB6 00D6BC 1 EA FillNOP 1 00D6BD 1 .else 00D6BD 1 lda JOBS0,x 00D6BD 1 bmi LD6B9 00D6BD 1 .endif 00D6BD 1 C9 02 cmp #$02 00D6BF 1 90 03 bcc LD6C4 00D6C1 1 88 dey 00D6C2 1 D0 E7 bne LD6AB 00D6C4 1 LD6C4: 00D6C4 1 48 pha 00D6C5 1 AD 6D 02 lda ERLED 00D6C8 1 0D 00 1C ora VDC_PB2 00D6CB 1 8D 00 1C sta VDC_PB2 00D6CE 1 68 pla 00D6CF 1 60 rts 00D6D0 1 LD6D0: 00D6D0 1 20 93 DF jsr LDF93 00D6D3 1 LD6D3: 00D6D3 1 0A asl a 00D6D4 1 A8 tay 00D6D5 1 A5 80 lda TRACK 00D6D7 1 99 06 00 sta TRACK0,y 00D6DA 1 A5 81 lda SECTOR 00D6DC 1 99 07 00 sta SECTOR0,y 00D6DF 1 A5 7F lda DRVNUM 00D6E1 1 0A asl a 00D6E2 1 AA tax 00D6E3 1 60 rts 00D6E4 1 LD6E4: 00D6E4 1 A5 83 lda SA 00D6E6 1 48 pha 00D6E7 1 A5 82 lda LINDX 00D6E9 1 48 pha 00D6EA 1 A5 81 lda SECTOR 00D6EC 1 48 pha 00D6ED 1 A5 80 lda TRACK 00D6EF 1 48 pha 00D6F0 1 A9 11 lda #$11 00D6F2 1 85 83 sta SA 00D6F4 1 20 3B DE jsr LDE3B 00D6F7 1 AD 4A 02 lda TYPE 00D6FA 1 48 pha 00D6FB 1 A5 E2 lda FILDRV 00D6FD 1 29 01 and #$01 00D6FF 1 85 7F sta DRVNUM 00D701 1 A6 F9 ldx JOBNUM 00D703 1 5D 5B 02 eor LSTJOB,x 00D706 1 4A lsr a 00D707 1 90 0C bcc LD715 00D709 1 A2 01 ldx #$01 00D70B 1 8E 92 02 stx DELIND 00D70E 1 20 AC C5 jsr LC5AC 00D711 1 F0 1D beq LD730 00D713 1 D0 28 bne LD73D 00D715 1 LD715: 00D715 1 AD 91 02 lda DELSEC 00D718 1 F0 0C beq LD726 00D71A 1 C5 81 cmp SECTOR 00D71C 1 F0 1F beq LD73D 00D71E 1 85 81 sta SECTOR 00D720 1 20 60 D4 jsr LD460 00D723 1 4C 3D D7 jmp LD73D 00D726 1 LD726: 00D726 1 A9 01 lda #$01 00D728 1 8D 92 02 sta DELIND 00D72B 1 20 17 C6 jsr LC617 00D72E 1 D0 0D bne LD73D 00D730 1 LD730: 00D730 1 20 8D D4 jsr LD48D 00D733 1 A5 81 lda SECTOR 00D735 1 8D 91 02 sta DELSEC 00D738 1 A9 02 lda #$02 00D73A 1 8D 92 02 sta DELIND 00D73D 1 LD73D: 00D73D 1 AD 92 02 lda DELIND 00D740 1 20 C8 D4 jsr LD4C8 00D743 1 68 pla 00D744 1 8D 4A 02 sta TYPE 00D747 1 C9 04 cmp #$04 00D749 1 D0 02 bne LD74D 00D74B 1 09 80 ora #$80 00D74D 1 LD74D: 00D74D 1 20 F1 CF jsr LCFF1 00D750 1 68 pla 00D751 1 8D 80 02 sta FILTRK 00D754 1 20 F1 CF jsr LCFF1 00D757 1 68 pla 00D758 1 8D 85 02 sta FILSEC 00D75B 1 20 F1 CF jsr LCFF1 00D75E 1 20 93 DF jsr LDF93 00D761 1 A8 tay 00D762 1 AD 7A 02 lda FILTBL 00D765 1 AA tax 00D766 1 A9 10 lda #$10 00D768 1 20 6E C6 jsr LC66E 00D76B 1 A0 10 ldy #$10 00D76D 1 A9 00 lda #$00 00D76F 1 LD76F: 00D76F 1 91 94 sta (DIRBUF),y 00D771 1 C8 iny 00D772 1 C0 1B cpy #$1B 00D774 1 90 F9 bcc LD76F 00D776 1 AD 4A 02 lda TYPE 00D779 1 C9 04 cmp #$04 00D77B 1 D0 13 bne LD790 00D77D 1 A0 10 ldy #$10 00D77F 1 AD 59 02 lda TRKSS 00D782 1 91 94 sta (DIRBUF),y 00D784 1 C8 iny 00D785 1 AD 5A 02 lda SECSS 00D788 1 91 94 sta (DIRBUF),y 00D78A 1 C8 iny 00D78B 1 AD 58 02 lda REC 00D78E 1 91 94 sta (DIRBUF),y 00D790 1 LD790: 00D790 1 20 64 D4 jsr LD464 00D793 1 68 pla 00D794 1 85 82 sta LINDX 00D796 1 AA tax 00D797 1 68 pla 00D798 1 85 83 sta SA 00D79A 1 AD 91 02 lda DELSEC 00D79D 1 85 D8 sta ENTSEC 00D79F 1 9D 60 02 sta DSEC,x 00D7A2 1 AD 92 02 lda DELIND 00D7A5 1 85 DD sta ENTIND 00D7A7 1 9D 66 02 sta DIND,x 00D7AA 1 AD 4A 02 lda TYPE 00D7AD 1 85 E7 sta PATTYP 00D7AF 1 A5 7F lda DRVNUM 00D7B1 1 85 E2 sta FILDRV 00D7B3 1 60 rts 00D7B4 1 00D7B4 1 ; @@@TODO IEC OPEN (?) / CLOSE (?) / BOTH? 00D7B4 1 LD7B4: 00D7B4 1 A5 83 lda SA 00D7B6 1 8D 4C 02 sta TEMPSA 00D7B9 1 20 B3 C2 jsr LC2B3 00D7BC 1 8E 2A 02 stx CMDNUM 00D7BF 1 AE 00 02 ldx CMDBUF 00D7C2 1 AD 4C 02 lda TEMPSA 00D7C5 1 D0 2C bne LD7F3 00D7C7 1 E0 2A cpx #$2A 00D7C9 1 D0 28 bne LD7F3 00D7CB 1 A5 7E lda PRGTRK 00D7CD 1 F0 4D beq LD81C 00D7CF 1 85 80 sta TRACK 00D7D1 1 AD 6E 02 lda PRGDRV 00D7D4 1 85 7F sta DRVNUM 00D7D6 1 85 E2 sta FILDRV 00D7D8 1 A9 02 lda #$02 00D7DA 1 85 E7 sta PATTYP 00D7DC 1 AD 6F 02 lda PRGSEC 00D7DF 1 85 81 sta SECTOR 00D7E1 1 20 00 C1 jsr LC100 00D7E4 1 20 46 DC jsr LDC46 00D7E7 1 A9 04 lda #$04 00D7E9 1 05 7F ora DRVNUM 00D7EB 1 LD7EB: 00D7EB 1 A6 82 ldx LINDX 00D7ED 1 99 EC 00 sta FILTYP,y 00D7F0 1 4C 94 C1 jmp CommandEnd 00D7F3 1 LD7F3: 00D7F3 1 E0 24 cpx #$24 00D7F5 1 D0 1E bne LD815 00D7F7 1 AD 4C 02 lda TEMPSA 00D7FA 1 D0 03 bne LD7FF 00D7FC 1 4C 55 DA jmp LDA55 00D7FF 1 LD7FF: 00D7FF 1 20 D1 C1 jsr LC1D1 00D802 1 AD 85 FE lda LFE85 00D805 1 85 80 sta TRACK 00D807 1 A9 00 lda #$00 00D809 1 85 81 sta SECTOR 00D80B 1 20 46 DC jsr LDC46 00D80E 1 A5 7F lda DRVNUM 00D810 1 09 02 ora #$02 00D812 1 4C EB D7 jmp LD7EB 00D815 1 LD815: 00D815 1 E0 23 cpx #$23 00D817 1 D0 12 bne LD82B 00D819 1 4C 84 CB jmp LCB84 00D81C 1 ; ---------------- 00D81C 1 00D81C 1 LD81C: 00D81C 1 A9 02 lda #$02 00D81E 1 8D 96 02 sta TYPFLG 00D821 1 A9 00 lda #$00 00D823 1 85 7F sta DRVNUM 00D825 1 8D 8E 02 sta LSTDRV 00D828 1 20 42 D0 jsr LD042 00D82B 1 LD82B: 00D82B 1 20 E5 C1 jsr LC1E5 00D82E 1 D0 04 bne LD834 00D830 1 A2 00 ldx #$00 00D832 1 F0 0C beq LD840 00D834 1 LD834: 00D834 1 8A txa 00D835 1 F0 05 beq LD83C 00D837 1 A9 30 lda #ERRORCODE_30_SYNTAX_ERROR 00D839 1 4C C8 C1 jmp GenerateErrorMessage 00D83C 1 ; ---------------- 00D83C 1 00D83C 1 LD83C: 00D83C 1 88 dey 00D83D 1 F0 01 beq LD840 00D83F 1 88 dey 00D840 1 LD840: 00D840 1 8C 7A 02 sty FILTBL 00D843 1 A9 8D lda #$8D 00D845 1 20 68 C2 jsr SearchInCmdline 00D848 1 E8 inx 00D849 1 8E 78 02 stx F2CNT 00D84C 1 20 12 C3 jsr LC312 00D84F 1 20 CA C3 jsr LC3CA 00D852 1 20 9D C4 jsr LC49D 00D855 1 A2 00 ldx #$00 00D857 1 8E 58 02 stx REC 00D85A 1 8E 97 02 stx MODE 00D85D 1 8E 4A 02 stx TYPE 00D860 1 E8 inx 00D861 1 EC 77 02 cpx F1CNT 00D864 1 B0 10 bcs LD876 00D866 1 20 09 DA jsr LDA09 00D869 1 E8 inx 00D86A 1 EC 77 02 cpx F1CNT 00D86D 1 B0 07 bcs LD876 00D86F 1 C0 04 cpy #$04 00D871 1 F0 3E beq LD8B1 00D873 1 20 09 DA jsr LDA09 00D876 1 LD876: 00D876 1 AE 4C 02 ldx TEMPSA 00D879 1 86 83 stx SA 00D87B 1 E0 02 cpx #$02 00D87D 1 B0 12 bcs LD891 00D87F 1 8E 97 02 stx MODE 00D882 1 A9 40 lda #$40 00D884 1 8D F9 02 sta WBAM 00D887 1 AD 4A 02 lda TYPE 00D88A 1 D0 1B bne LD8A7 00D88C 1 A9 02 lda #$02 00D88E 1 8D 4A 02 sta TYPE 00D891 1 LD891: 00D891 1 AD 4A 02 lda TYPE 00D894 1 D0 11 bne LD8A7 00D896 1 A5 E7 lda PATTYP 00D898 1 29 07 and #$07 00D89A 1 8D 4A 02 sta TYPE 00D89D 1 AD 80 02 lda FILTRK 00D8A0 1 D0 05 bne LD8A7 00D8A2 1 A9 01 lda #$01 00D8A4 1 8D 4A 02 sta TYPE 00D8A7 1 LD8A7: 00D8A7 1 AD 97 02 lda MODE 00D8AA 1 C9 01 cmp #$01 00D8AC 1 F0 18 beq LD8C6 00D8AE 1 4C 40 D9 jmp LD940 00D8B1 1 LD8B1: 00D8B1 1 BC 7A 02 ldy FILTBL,x 00D8B4 1 B9 00 02 lda CMDBUF,y 00D8B7 1 8D 58 02 sta REC 00D8BA 1 AD 80 02 lda FILTRK 00D8BD 1 D0 B7 bne LD876 00D8BF 1 A9 01 lda #$01 00D8C1 1 8D 97 02 sta MODE 00D8C4 1 D0 B0 bne LD876 00D8C6 1 LD8C6: 00D8C6 1 A5 E7 lda PATTYP 00D8C8 1 29 80 and #$80 00D8CA 1 AA tax 00D8CB 1 D0 14 bne LD8E1 00D8CD 1 A9 20 lda #$20 00D8CF 1 24 E7 bit PATTYP 00D8D1 1 F0 06 beq LD8D9 00D8D3 1 20 B6 C8 jsr LC8B6 00D8D6 1 4C E3 D9 jmp LD9E3 00D8D9 1 LD8D9: 00D8D9 1 AD 80 02 lda FILTRK 00D8DC 1 D0 03 bne LD8E1 00D8DE 1 4C E3 D9 jmp LD9E3 00D8E1 1 LD8E1: 00D8E1 1 AD 00 02 lda CMDBUF 00D8E4 1 C9 40 cmp #$40 00D8E6 1 F0 0D beq LD8F5 00D8E8 1 8A txa 00D8E9 1 D0 05 bne Error33 00D8EB 1 A9 63 lda #ERRORCODE_63_FILE_EXISTS 00D8ED 1 4C C8 C1 jmp GenerateErrorMessage 00D8F0 1 ; ---------------- 00D8F0 1 00D8F0 1 Error33: 00D8F0 1 A9 33 lda #ERRORCODE_33_SYNTAX_ERROR 00D8F2 1 4C C8 C1 jmp GenerateErrorMessage 00D8F5 1 ; ---------------- 00D8F5 1 00D8F5 1 LD8F5: 00D8F5 1 A5 E7 lda PATTYP 00D8F7 1 29 07 and #$07 00D8F9 1 CD 4A 02 cmp TYPE 00D8FC 1 D0 67 bne Error64 00D8FE 1 C9 04 cmp #$04 00D900 1 F0 63 beq Error64 00D902 1 20 DA DC jsr LDCDA 00D905 1 A5 82 lda LINDX 00D907 1 8D 70 02 sta WLINDX 00D90A 1 A9 11 lda #$11 00D90C 1 85 83 sta SA 00D90E 1 20 EB D0 jsr LD0EB 00D911 1 AD 94 02 lda INDEX 00D914 1 20 C8 D4 jsr LD4C8 00D917 1 A0 00 ldy #$00 00D919 1 B1 94 lda (DIRBUF),y 00D91B 1 09 20 ora #$20 00D91D 1 91 94 sta (DIRBUF),y 00D91F 1 A0 1A ldy #$1A 00D921 1 A5 80 lda TRACK 00D923 1 91 94 sta (DIRBUF),y 00D925 1 C8 iny 00D926 1 A5 81 lda SECTOR 00D928 1 91 94 sta (DIRBUF),y 00D92A 1 AE 70 02 ldx WLINDX 00D92D 1 A5 D8 lda ENTSEC 00D92F 1 9D 60 02 sta DSEC,x 00D932 1 A5 DD lda ENTIND 00D934 1 9D 66 02 sta DIND,x 00D937 1 20 3B DE jsr LDE3B 00D93A 1 20 64 D4 jsr LD464 00D93D 1 4C EF D9 jmp LD9EF 00D940 1 LD940: 00D940 1 AD 80 02 lda FILTRK 00D943 1 D0 05 bne LD94A 00D945 1 A9 62 lda #ERRORCODE_62_FILE_NOT_FOUND 00D947 1 4C C8 C1 jmp GenerateErrorMessage 00D94A 1 ; ---------------- 00D94A 1 00D94A 1 LD94A: 00D94A 1 AD 97 02 lda MODE 00D94D 1 C9 03 cmp #$03 00D94F 1 F0 0B beq LD95C 00D951 1 A9 20 lda #$20 00D953 1 24 E7 bit PATTYP 00D955 1 F0 05 beq LD95C 00D957 1 A9 60 lda #ERRORCODE_60_WRITE_FILE_OPEN 00D959 1 4C C8 C1 jmp GenerateErrorMessage 00D95C 1 ; ---------------- 00D95C 1 00D95C 1 LD95C: 00D95C 1 A5 E7 lda PATTYP 00D95E 1 29 07 and #$07 00D960 1 CD 4A 02 cmp TYPE 00D963 1 F0 05 beq LD96A 00D965 1 Error64: 00D965 1 A9 64 lda #ERRORCODE_64_FILE_TYPE_MISMATCH 00D967 1 4C C8 C1 jmp GenerateErrorMessage 00D96A 1 ; ---------------- 00D96A 1 00D96A 1 LD96A: 00D96A 1 A0 00 ldy #$00 00D96C 1 8C 79 02 sty F2PTR 00D96F 1 AE 97 02 ldx MODE 00D972 1 E0 02 cpx #$02 00D974 1 D0 1A bne LD990 00D976 1 C9 04 cmp #$04 00D978 1 F0 EB beq Error64 00D97A 1 B1 94 lda (DIRBUF),y 00D97C 1 29 4F and #$4F 00D97E 1 91 94 sta (DIRBUF),y 00D980 1 A5 83 lda SA 00D982 1 48 pha 00D983 1 A9 11 lda #$11 00D985 1 85 83 sta SA 00D987 1 20 3B DE jsr LDE3B 00D98A 1 20 64 D4 jsr LD464 00D98D 1 68 pla 00D98E 1 85 83 sta SA 00D990 1 LD990: 00D990 1 20 A0 D9 jsr LD9A0 00D993 1 AD 97 02 lda MODE 00D996 1 C9 02 cmp #$02 00D998 1 D0 55 bne LD9EF 00D99A 1 20 2A DA jsr LDA2A 00D99D 1 4C 94 C1 jmp CommandEnd 00D9A0 1 LD9A0: 00D9A0 1 A0 13 ldy #$13 00D9A2 1 B1 94 lda (DIRBUF),y 00D9A4 1 8D 59 02 sta TRKSS 00D9A7 1 C8 iny 00D9A8 1 B1 94 lda (DIRBUF),y 00D9AA 1 8D 5A 02 sta SECSS 00D9AD 1 C8 iny 00D9AE 1 B1 94 lda (DIRBUF),y 00D9B0 1 AE 58 02 ldx REC 00D9B3 1 8D 58 02 sta REC 00D9B6 1 8A txa 00D9B7 1 F0 0A beq LD9C3 00D9B9 1 CD 58 02 cmp REC 00D9BC 1 F0 05 beq LD9C3 00D9BE 1 A9 50 lda #ERRORCODE_50_RECORD_NOT_PRESENT 00D9C0 1 20 C8 C1 jsr GenerateErrorMessage 00D9C3 1 LD9C3: 00D9C3 1 AE 79 02 ldx F2PTR 00D9C6 1 BD 80 02 lda FILTRK,x 00D9C9 1 85 80 sta TRACK 00D9CB 1 BD 85 02 lda FILSEC,x 00D9CE 1 85 81 sta SECTOR 00D9D0 1 20 46 DC jsr LDC46 00D9D3 1 A4 82 ldy LINDX 00D9D5 1 AE 79 02 ldx F2PTR 00D9D8 1 B5 D8 lda ENTSEC,x 00D9DA 1 99 60 02 sta DSEC,y 00D9DD 1 B5 DD lda ENTIND,x 00D9DF 1 99 66 02 sta DIND,y 00D9E2 1 60 rts 00D9E3 1 LD9E3: 00D9E3 1 A5 E2 lda FILDRV 00D9E5 1 29 01 and #$01 00D9E7 1 85 7F sta DRVNUM 00D9E9 1 20 DA DC jsr LDCDA 00D9EC 1 20 E4 D6 jsr LD6E4 00D9EF 1 LD9EF: 00D9EF 1 A5 83 lda SA 00D9F1 1 C9 02 cmp #$02 00D9F3 1 B0 11 bcs LDA06 00D9F5 1 20 3E DE jsr LDE3E 00D9F8 1 A5 80 lda TRACK 00D9FA 1 85 7E sta PRGTRK 00D9FC 1 A5 7F lda DRVNUM 00D9FE 1 8D 6E 02 sta PRGDRV 00DA01 1 A5 81 lda SECTOR 00DA03 1 8D 6F 02 sta PRGSEC 00DA06 1 LDA06: 00DA06 1 4C 99 C1 jmp LC199 00DA09 1 LDA09: 00DA09 1 BC 7A 02 ldy FILTBL,x 00DA0C 1 B9 00 02 lda CMDBUF,y 00DA0F 1 A0 04 ldy #$04 00DA11 1 LDA11: 00DA11 1 88 dey 00DA12 1 30 08 bmi LDA1C 00DA14 1 D9 B2 FE cmp LFEB2,y 00DA17 1 D0 F8 bne LDA11 00DA19 1 8C 97 02 sty MODE 00DA1C 1 LDA1C: 00DA1C 1 A0 05 ldy #$05 00DA1E 1 LDA1E: 00DA1E 1 88 dey 00DA1F 1 30 08 bmi LDA29 00DA21 1 D9 B6 FE cmp LFEB6,y 00DA24 1 D0 F8 bne LDA1E 00DA26 1 8C 4A 02 sty TYPE 00DA29 1 LDA29: 00DA29 1 60 rts 00DA2A 1 LDA2A: 00DA2A 1 20 39 CA jsr LCA39 00DA2D 1 A9 80 lda #$80 00DA2F 1 20 A6 DD jsr LDDA6 00DA32 1 F0 F6 beq LDA2A 00DA34 1 20 95 DE jsr LDE95 00DA37 1 A6 81 ldx SECTOR 00DA39 1 E8 inx 00DA3A 1 8A txa 00DA3B 1 D0 05 bne LDA42 00DA3D 1 20 A3 D1 jsr LD1A3 00DA40 1 A9 02 lda #$02 00DA42 1 LDA42: 00DA42 1 20 C8 D4 jsr LD4C8 00DA45 1 A6 82 ldx LINDX 00DA47 1 A9 01 lda #$01 00DA49 1 95 F2 sta CHNRDY,x 00DA4B 1 A9 80 lda #$80 00DA4D 1 05 82 ora LINDX 00DA4F 1 A6 83 ldx SA 00DA51 1 9D 2B 02 sta LINTAB,x 00DA54 1 60 rts 00DA55 1 LDA55: 00DA55 1 A9 0C lda #$0C 00DA57 1 8D 2A 02 sta CMDNUM 00DA5A 1 A9 00 lda #$00 00DA5C 1 AE 74 02 ldx CMDSIZ 00DA5F 1 CA dex 00DA60 1 F0 0B beq LDA6D 00DA62 1 CA dex 00DA63 1 D0 21 bne LDA86 00DA65 1 AD 01 02 lda CMDBUF + 1 00DA68 1 20 BD C3 jsr CheckForValidDriveNumber 00DA6B 1 30 19 bmi LDA86 00DA6D 1 LDA6D: 00DA6D 1 85 E2 sta FILDRV 00DA6F 1 EE 77 02 inc F1CNT 00DA72 1 EE 78 02 inc F2CNT 00DA75 1 EE 7A 02 inc FILTBL 00DA78 1 A9 80 lda #$80 00DA7A 1 85 E7 sta PATTYP 00DA7C 1 A9 2A lda #$2A 00DA7E 1 8D 00 02 sta CMDBUF 00DA81 1 8D 01 02 sta CMDBUF + 1 00DA84 1 D0 18 bne LDA9E 00DA86 1 LDA86: 00DA86 1 20 E5 C1 jsr LC1E5 00DA89 1 D0 05 bne LDA90 00DA8B 1 20 DC C2 jsr LC2DC 00DA8E 1 A0 03 ldy #$03 00DA90 1 LDA90: 00DA90 1 88 dey 00DA91 1 88 dey 00DA92 1 8C 7A 02 sty FILTBL 00DA95 1 20 00 C2 jsr LC200 00DA98 1 20 98 C3 jsr LC398 00DA9B 1 20 20 C3 jsr LC320 00DA9E 1 LDA9E: 00DA9E 1 20 CA C3 jsr LC3CA 00DAA1 1 20 B7 C7 jsr LC7B7 00DAA4 1 20 9D C4 jsr LC49D 00DAA7 1 20 9E EC jsr LEC9E 00DAAA 1 20 37 D1 jsr LD137 00DAAD 1 A6 82 ldx LINDX 00DAAF 1 9D 3E 02 sta L023E,x 00DAB2 1 A5 7F lda DRVNUM 00DAB4 1 8D 8E 02 sta LSTDRV 00DAB7 1 09 04 ora #$04 00DAB9 1 95 EC sta FILTYP,x 00DABB 1 A9 00 lda #$00 00DABD 1 85 A3 sta BUFTABCMD 00DABF 1 60 rts 00DAC0 1 LDAC0: 00DAC0 1 A9 00 lda #$00 00DAC2 1 8D F9 02 sta WBAM 00DAC5 1 A5 83 lda SA 00DAC7 1 D0 0B bne LDAD4 00DAC9 1 A9 00 lda #$00 00DACB 1 8D 54 02 sta DIRLST 00DACE 1 20 27 D2 jsr LD227 00DAD1 1 LDAD1: 00DAD1 1 4C DA D4 jmp LD4DA 00DAD4 1 LDAD4: 00DAD4 1 C9 0F cmp #$0F 00DAD6 1 F0 14 beq LDAEC 00DAD8 1 20 02 DB jsr LDB02 00DADB 1 A5 83 lda SA 00DADD 1 C9 02 cmp #$02 00DADF 1 90 F0 bcc LDAD1 00DAE1 1 AD 6C 02 lda ERWORD 00DAE4 1 D0 03 bne LDAE9 00DAE6 1 4C 94 C1 jmp CommandEnd 00DAE9 1 LDAE9: 00DAE9 1 4C AD C1 jmp LC1AD 00DAEC 1 LDAEC: 00DAEC 1 A9 0E lda #$0E 00DAEE 1 85 83 sta SA 00DAF0 1 LDAF0: 00DAF0 1 20 02 DB jsr LDB02 00DAF3 1 C6 83 dec SA 00DAF5 1 10 F9 bpl LDAF0 00DAF7 1 AD 6C 02 lda ERWORD 00DAFA 1 D0 03 bne LDAFF 00DAFC 1 4C 94 C1 jmp CommandEnd 00DAFF 1 LDAFF: 00DAFF 1 4C AD C1 jmp LC1AD 00DB02 1 LDB02: 00DB02 1 A6 83 ldx SA 00DB04 1 BD 2B 02 lda LINTAB,x 00DB07 1 C9 FF cmp #$FF 00DB09 1 D0 01 bne LDB0C 00DB0B 1 60 rts 00DB0C 1 LDB0C: 00DB0C 1 29 0F and #$0F 00DB0E 1 85 82 sta LINDX 00DB10 1 20 25 D1 jsr LD125 00DB13 1 C9 07 cmp #$07 00DB15 1 F0 0F beq LDB26 00DB17 1 C9 04 cmp #$04 00DB19 1 F0 11 beq LDB2C 00DB1B 1 20 07 D1 jsr LD107 00DB1E 1 B0 09 bcs LDB29 00DB20 1 20 62 DB jsr LDB62 00DB23 1 20 A5 DB jsr LDBA5 00DB26 1 LDB26: 00DB26 1 20 F4 EE jsr LEEF4 00DB29 1 LDB29: 00DB29 1 4C 27 D2 jmp LD227 00DB2C 1 LDB2C: 00DB2C 1 20 F1 DD jsr LDDF1 00DB2F 1 20 1E CF jsr LCF1E 00DB32 1 20 CB E1 jsr LE1CB 00DB35 1 A6 D5 ldx SSNUM 00DB37 1 86 73 stx T4 00DB39 1 E6 73 inc T4 00DB3B 1 A9 00 lda #$00 00DB3D 1 85 70 sta T1 00DB3F 1 85 71 sta T2 00DB41 1 A5 D6 lda SSIND 00DB43 1 38 sec 00DB44 1 E9 0E sbc #$0E 00DB46 1 85 72 sta T3 00DB48 1 20 51 DF jsr LDF51 00DB4B 1 A6 82 ldx LINDX 00DB4D 1 A5 70 lda T1 00DB4F 1 95 B5 sta RECL,x 00DB51 1 A5 71 lda T2 00DB53 1 95 BB sta RECH,x 00DB55 1 A9 40 lda #$40 00DB57 1 20 A6 DD jsr LDDA6 00DB5A 1 F0 03 beq LDB5F 00DB5C 1 20 A5 DB jsr LDBA5 00DB5F 1 LDB5F: 00DB5F 1 4C 27 D2 jmp LD227 00DB62 1 LDB62: 00DB62 1 A6 82 ldx LINDX 00DB64 1 B5 B5 lda RECL,x 00DB66 1 15 BB ora RECH,x 00DB68 1 D0 0C bne LDB76 00DB6A 1 20 E8 D4 jsr LD4E8 00DB6D 1 C9 02 cmp #$02 00DB6F 1 D0 05 bne LDB76 00DB71 1 A9 0D lda #$0D 00DB73 1 20 F1 CF jsr LCFF1 00DB76 1 LDB76: 00DB76 1 20 E8 D4 jsr LD4E8 00DB79 1 C9 02 cmp #$02 00DB7B 1 D0 0F bne LDB8C 00DB7D 1 20 1E CF jsr LCF1E 00DB80 1 A6 82 ldx LINDX 00DB82 1 B5 B5 lda RECL,x 00DB84 1 D0 02 bne LDB88 00DB86 1 D6 BB dec RECH,x 00DB88 1 LDB88: 00DB88 1 D6 B5 dec RECL,x 00DB8A 1 A9 00 lda #$00 00DB8C 1 LDB8C: 00DB8C 1 38 sec 00DB8D 1 E9 01 sbc #$01 00DB8F 1 48 pha 00DB90 1 A9 00 lda #$00 00DB92 1 20 C8 D4 jsr LD4C8 00DB95 1 20 F1 CF jsr LCFF1 00DB98 1 68 pla 00DB99 1 20 F1 CF jsr LCFF1 00DB9C 1 20 C7 D0 jsr LD0C7 00DB9F 1 20 99 D5 jsr LD599 00DBA2 1 4C 1E CF jmp LCF1E 00DBA5 1 LDBA5: 00DBA5 1 A6 82 ldx LINDX 00DBA7 1 8E 70 02 stx WLINDX 00DBAA 1 A5 83 lda SA 00DBAC 1 48 pha 00DBAD 1 BD 60 02 lda DSEC,x 00DBB0 1 85 81 sta SECTOR 00DBB2 1 BD 66 02 lda DIND,x 00DBB5 1 8D 94 02 sta INDEX 00DBB8 1 B5 EC lda FILTYP,x 00DBBA 1 29 01 and #$01 00DBBC 1 85 7F sta DRVNUM 00DBBE 1 AD 85 FE lda LFE85 00DBC1 1 85 80 sta TRACK 00DBC3 1 20 93 DF jsr LDF93 00DBC6 1 48 pha 00DBC7 1 85 F9 sta JOBNUM 00DBC9 1 20 60 D4 jsr LD460 00DBCC 1 A0 00 ldy #$00 00DBCE 1 BD E0 FE lda TableHighBytesOfBuffers,x 00DBD1 1 85 87 sta R1 00DBD3 1 AD 94 02 lda INDEX 00DBD6 1 85 86 sta R0 00DBD8 1 B1 86 lda (R0),y 00DBDA 1 29 20 and #$20 00DBDC 1 F0 43 beq LDC21 00DBDE 1 20 25 D1 jsr LD125 00DBE1 1 C9 04 cmp #$04 00DBE3 1 F0 44 beq LDC29 00DBE5 1 B1 86 lda (R0),y 00DBE7 1 29 8F and #$8F 00DBE9 1 91 86 sta (R0),y 00DBEB 1 C8 iny 00DBEC 1 B1 86 lda (R0),y 00DBEE 1 85 80 sta TRACK 00DBF0 1 84 71 sty T2 00DBF2 1 A0 1B ldy #$1B 00DBF4 1 B1 86 lda (R0),y 00DBF6 1 48 pha 00DBF7 1 88 dey 00DBF8 1 B1 86 lda (R0),y 00DBFA 1 D0 0A bne LDC06 00DBFC 1 85 80 sta TRACK 00DBFE 1 68 pla 00DBFF 1 85 81 sta SECTOR 00DC01 1 A9 67 lda #ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR 00DC03 1 20 45 E6 jsr LE645 00DC06 1 LDC06: 00DC06 1 48 pha 00DC07 1 A9 00 lda #$00 00DC09 1 91 86 sta (R0),y 00DC0B 1 C8 iny 00DC0C 1 91 86 sta (R0),y 00DC0E 1 68 pla 00DC0F 1 A4 71 ldy T2 00DC11 1 91 86 sta (R0),y 00DC13 1 C8 iny 00DC14 1 B1 86 lda (R0),y 00DC16 1 85 81 sta SECTOR 00DC18 1 68 pla 00DC19 1 91 86 sta (R0),y 00DC1B 1 20 7D C8 jsr LC87D 00DC1E 1 4C 29 DC jmp LDC29 00DC21 1 LDC21: 00DC21 1 B1 86 lda (R0),y 00DC23 1 29 0F and #$0F 00DC25 1 09 80 ora #$80 00DC27 1 91 86 sta (R0),y 00DC29 1 LDC29: 00DC29 1 AE 70 02 ldx WLINDX 00DC2C 1 A0 1C ldy #$1C 00DC2E 1 B5 B5 lda RECL,x 00DC30 1 91 86 sta (R0),y 00DC32 1 C8 iny 00DC33 1 B5 BB lda RECH,x 00DC35 1 91 86 sta (R0),y 00DC37 1 68 pla 00DC38 1 AA tax 00DC39 1 A9 90 lda #$90 00DC3B 1 05 7F ora DRVNUM 00DC3D 1 20 90 D5 jsr LD590 00DC40 1 68 pla 00DC41 1 85 83 sta SA 00DC43 1 4C 07 D1 jmp LD107 00DC46 1 LDC46: 00DC46 1 A9 01 lda #$01 00DC48 1 20 E2 D1 jsr LD1E2 00DC4B 1 20 B6 DC jsr LDCB6 00DC4E 1 AD 4A 02 lda TYPE 00DC51 1 48 pha 00DC52 1 0A asl a 00DC53 1 05 7F ora DRVNUM 00DC55 1 95 EC sta FILTYP,x 00DC57 1 20 9B D0 jsr LD09B 00DC5A 1 A6 82 ldx LINDX 00DC5C 1 A5 80 lda TRACK 00DC5E 1 D0 05 bne LDC65 00DC60 1 A5 81 lda SECTOR 00DC62 1 9D 44 02 sta LSTCHR,x 00DC65 1 LDC65: 00DC65 1 68 pla 00DC66 1 C9 04 cmp #$04 00DC68 1 D0 3F bne LDCA9 00DC6A 1 A4 83 ldy SA 00DC6C 1 B9 2B 02 lda LINTAB,y 00DC6F 1 09 40 ora #$40 00DC71 1 99 2B 02 sta LINTAB,y 00DC74 1 AD 58 02 lda REC 00DC77 1 95 C7 sta RS,x 00DC79 1 20 8E D2 jsr LD28E 00DC7C 1 10 03 bpl LDC81 00DC7E 1 4C 0F D2 jmp LD20F 00DC81 1 LDC81: 00DC81 1 A6 82 ldx LINDX 00DC83 1 95 CD sta SS,x 00DC85 1 AC 59 02 ldy TRKSS 00DC88 1 84 80 sty TRACK 00DC8A 1 AC 5A 02 ldy SECSS 00DC8D 1 84 81 sty SECTOR 00DC8F 1 20 D3 D6 jsr LD6D3 00DC92 1 20 73 DE jsr LDE73 00DC95 1 20 99 D5 jsr LD599 00DC98 1 LDC98: 00DC98 1 A6 82 ldx LINDX 00DC9A 1 A9 02 lda #$02 00DC9C 1 95 C1 sta NR,x 00DC9E 1 A9 00 lda #$00 00DCA0 1 20 C8 D4 jsr LD4C8 00DCA3 1 20 53 E1 jsr LE153 00DCA6 1 4C 3E DE jmp LDE3E 00DCA9 1 LDCA9: 00DCA9 1 20 56 D1 jsr LD156 00DCAC 1 A6 82 ldx LINDX 00DCAE 1 9D 3E 02 sta L023E,x 00DCB1 1 A9 88 lda #$88 00DCB3 1 95 F2 sta CHNRDY,x 00DCB5 1 60 rts 00DCB6 1 LDCB6: 00DCB6 1 A6 82 ldx LINDX 00DCB8 1 B5 A7 lda BUF0,x 00DCBA 1 0A asl a 00DCBB 1 .if CompileDrive >= DRIVE_1570 .OR CompileDrive >= DRIVE_1541C_02 00DCBB 1 30 06 bmi LDCC3 00DCBD 1 .endif 00DCBD 1 A8 tay 00DCBE 1 A9 02 lda #$02 00DCC0 1 99 99 00 sta BUFTAB0,y 00DCC3 1 LDCC3: 00DCC3 1 B5 AE lda BUF1,x 00DCC5 1 09 80 ora #$80 00DCC7 1 95 AE sta BUF1,x 00DCC9 1 0A asl a 00DCCA 1 .if CompileDrive >= DRIVE_1570 .OR CompileDrive >= DRIVE_1541C_02 00DCCA 1 30 06 bmi LDCD2 00DCCC 1 .endif 00DCCC 1 A8 tay 00DCCD 1 A9 02 lda #$02 00DCCF 1 99 99 00 sta BUFTAB0,y 00DCD2 1 LDCD2: 00DCD2 1 A9 00 lda #$00 00DCD4 1 95 B5 sta RECL,x 00DCD6 1 .if CompileDrive >= DRIVE_1570 00DCD6 1 4C 7F A9 jmp LA97F 00DCD9 1 EA FillNOP 1 00DCDA 1 .elseif CompileDrive >= DRIVE_1541C_02 00DCDA 1 jmp LC029 00DCDA 1 FillNOP 1 00DCDA 1 .else 00DCDA 1 sta RECH,x 00DCDA 1 lda #$00 00DCDA 1 sta LSTCHR,x 00DCDA 1 rts 00DCDA 1 .endif 00DCDA 1 LDCDA: 00DCDA 1 20 A9 F1 jsr LF1A9 00DCDD 1 A9 01 lda #$01 00DCDF 1 20 DF D1 jsr LD1DF 00DCE2 1 20 D0 D6 jsr LD6D0 00DCE5 1 20 B6 DC jsr LDCB6 00DCE8 1 A6 82 ldx LINDX 00DCEA 1 AD 4A 02 lda TYPE 00DCED 1 48 pha 00DCEE 1 0A asl a 00DCEF 1 05 7F ora DRVNUM 00DCF1 1 95 EC sta FILTYP,x 00DCF3 1 68 pla 00DCF4 1 C9 04 cmp #$04 00DCF6 1 F0 05 beq LDCFD 00DCF8 1 A9 01 lda #$01 00DCFA 1 95 F2 sta CHNRDY,x 00DCFC 1 60 rts 00DCFD 1 LDCFD: 00DCFD 1 A4 83 ldy SA 00DCFF 1 B9 2B 02 lda LINTAB,y 00DD02 1 29 3F and #$3F 00DD04 1 09 40 ora #$40 00DD06 1 99 2B 02 sta LINTAB,y 00DD09 1 AD 58 02 lda REC 00DD0C 1 95 C7 sta RS,x 00DD0E 1 20 8E D2 jsr LD28E 00DD11 1 10 03 bpl LDD16 00DD13 1 4C 0F D2 jmp LD20F 00DD16 1 LDD16: 00DD16 1 A6 82 ldx LINDX 00DD18 1 95 CD sta SS,x 00DD1A 1 20 C1 DE jsr LDEC1 00DD1D 1 20 1E F1 jsr LF11E 00DD20 1 A5 80 lda TRACK 00DD22 1 8D 59 02 sta TRKSS 00DD25 1 A5 81 lda SECTOR 00DD27 1 8D 5A 02 sta SECSS 00DD2A 1 A6 82 ldx LINDX 00DD2C 1 B5 CD lda SS,x 00DD2E 1 20 D3 D6 jsr LD6D3 00DD31 1 A9 00 lda #$00 00DD33 1 20 E9 DE jsr LDEE9 00DD36 1 A9 00 lda #$00 00DD38 1 20 8D DD jsr LDD8D 00DD3B 1 A9 11 lda #$11 00DD3D 1 20 8D DD jsr LDD8D 00DD40 1 A9 00 lda #$00 00DD42 1 20 8D DD jsr LDD8D 00DD45 1 AD 58 02 lda REC 00DD48 1 20 8D DD jsr LDD8D 00DD4B 1 A5 80 lda TRACK 00DD4D 1 20 8D DD jsr LDD8D 00DD50 1 A5 81 lda SECTOR 00DD52 1 20 8D DD jsr LDD8D 00DD55 1 A9 10 lda #$10 00DD57 1 20 E9 DE jsr LDEE9 00DD5A 1 20 3E DE jsr LDE3E 00DD5D 1 A5 80 lda TRACK 00DD5F 1 20 8D DD jsr LDD8D 00DD62 1 A5 81 lda SECTOR 00DD64 1 20 8D DD jsr LDD8D 00DD67 1 20 6C DE jsr LDE6C 00DD6A 1 20 99 D5 jsr LD599 00DD6D 1 A9 02 lda #$02 00DD6F 1 20 C8 D4 jsr LD4C8 00DD72 1 A6 82 ldx LINDX 00DD74 1 38 sec 00DD75 1 A9 00 lda #$00 00DD77 1 F5 C7 sbc RS,x 00DD79 1 95 C1 sta NR,x 00DD7B 1 20 E2 E2 jsr LE2E2 00DD7E 1 20 19 DE jsr LDE19 00DD81 1 20 5E DE jsr LDE5E 00DD84 1 20 99 D5 jsr LD599 00DD87 1 20 F4 EE jsr LEEF4 00DD8A 1 4C 98 DC jmp LDC98 00DD8D 1 LDD8D: 00DD8D 1 48 pha 00DD8E 1 A6 82 ldx LINDX 00DD90 1 B5 CD lda SS,x 00DD92 1 4C FD CF jmp LCFFD 00DD95 1 90 06 bcc LDD9D 00DD97 1 LDD97: 00DD97 1 A6 82 ldx LINDX 00DD99 1 15 EC ora FILTYP,x 00DD9B 1 D0 06 bne LDDA3 00DD9D 1 LDD9D: 00DD9D 1 A6 82 ldx LINDX 00DD9F 1 49 FF eor #$FF 00DDA1 1 35 EC and FILTYP,x 00DDA3 1 LDDA3: 00DDA3 1 95 EC sta FILTYP,x 00DDA5 1 60 rts 00DDA6 1 LDDA6: 00DDA6 1 A6 82 ldx LINDX 00DDA8 1 35 EC and FILTYP,x 00DDAA 1 60 rts 00DDAB 1 LDDAB: 00DDAB 1 20 93 DF jsr LDF93 00DDAE 1 AA tax 00DDAF 1 BD 5B 02 lda LSTJOB,x 00DDB2 1 29 F0 and #$F0 00DDB4 1 C9 90 cmp #$90 00DDB6 1 60 rts 00DDB7 1 LDDB7: 00DDB7 1 A2 00 ldx #$00 00DDB9 1 LDDB9: 00DDB9 1 86 71 stx T2 00DDBB 1 BD 2B 02 lda LINTAB,x 00DDBE 1 C9 FF cmp #$FF 00DDC0 1 D0 08 bne LDDCA 00DDC2 1 LDDC2: 00DDC2 1 A6 71 ldx T2 00DDC4 1 E8 inx 00DDC5 1 E0 10 cpx #$10 00DDC7 1 90 F0 bcc LDDB9 00DDC9 1 60 rts 00DDCA 1 LDDCA: 00DDCA 1 86 71 stx T2 00DDCC 1 29 3F and #$3F 00DDCE 1 A8 tay 00DDCF 1 B9 EC 00 lda FILTYP,y 00DDD2 1 29 01 and #$01 00DDD4 1 85 70 sta T1 00DDD6 1 AE 53 02 ldx ENTFND 00DDD9 1 B5 E2 lda FILDRV,x 00DDDB 1 29 01 and #$01 00DDDD 1 C5 70 cmp T1 00DDDF 1 D0 E1 bne LDDC2 00DDE1 1 B9 60 02 lda DSEC,y 00DDE4 1 D5 D8 cmp ENTSEC,x 00DDE6 1 D0 DA bne LDDC2 00DDE8 1 B9 66 02 lda DIND,y 00DDEB 1 D5 DD cmp ENTIND,x 00DDED 1 D0 D3 bne LDDC2 00DDEF 1 18 clc 00DDF0 1 60 rts 00DDF1 1 00DDF1 1 LDDF1: 00DDF1 1 20 9E DF jsr LDF9E 00DDF4 1 50 06 bvc LDDFC 00DDF6 1 20 5E DE jsr LDE5E 00DDF9 1 20 99 D5 jsr LD599 00DDFC 1 LDDFC: 00DDFC 1 60 rts 00DDFD 1 LDDFD: 00DDFD 1 20 2B DE jsr LDE2B 00DE00 1 A5 80 lda TRACK 00DE02 1 91 94 sta (DIRBUF),y 00DE04 1 C8 iny 00DE05 1 A5 81 lda SECTOR 00DE07 1 91 94 sta (DIRBUF),y 00DE09 1 4C 05 E1 jmp LE105 00DE0C 1 LDE0C: 00DE0C 1 20 2B DE jsr LDE2B 00DE0F 1 B1 94 lda (DIRBUF),y 00DE11 1 85 80 sta TRACK 00DE13 1 C8 iny 00DE14 1 B1 94 lda (DIRBUF),y 00DE16 1 85 81 sta SECTOR 00DE18 1 60 rts 00DE19 1 LDE19: 00DE19 1 20 2B DE jsr LDE2B 00DE1C 1 A9 00 lda #$00 00DE1E 1 91 94 sta (DIRBUF),y 00DE20 1 C8 iny 00DE21 1 A6 82 ldx LINDX 00DE23 1 B5 C1 lda NR,x 00DE25 1 AA tax 00DE26 1 CA dex 00DE27 1 8A txa 00DE28 1 91 94 sta (DIRBUF),y 00DE2A 1 60 rts 00DE2B 1 LDE2B: 00DE2B 1 20 93 DF jsr LDF93 00DE2E 1 0A asl a 00DE2F 1 AA tax 00DE30 1 B5 9A lda BUFTAB0 + 1,x 00DE32 1 85 95 sta DIRBUF + 1 00DE34 1 A9 00 lda #$00 00DE36 1 85 94 sta DIRBUF 00DE38 1 A0 00 ldy #$00 00DE3A 1 60 rts 00DE3B 1 LDE3B: 00DE3B 1 20 EB D0 jsr LD0EB 00DE3E 1 LDE3E: 00DE3E 1 20 93 DF jsr LDF93 00DE41 1 85 F9 sta JOBNUM 00DE43 1 0A asl a 00DE44 1 A8 tay 00DE45 1 B9 06 00 lda TRACK0,y 00DE48 1 85 80 sta TRACK 00DE4A 1 B9 07 00 lda SECTOR0,y 00DE4D 1 85 81 sta SECTOR 00DE4F 1 60 rts 00DE50 1 LDE50: 00DE50 1 A9 90 lda #$90 00DE52 1 8D 4D 02 sta CMD 00DE55 1 D0 28 bne LDE7F 00DE57 1 LDE57: 00DE57 1 A9 80 lda #$80 00DE59 1 8D 4D 02 sta CMD 00DE5C 1 D0 21 bne LDE7F 00DE5E 1 LDE5E: 00DE5E 1 A9 90 lda #$90 00DE60 1 8D 4D 02 sta CMD 00DE63 1 D0 26 bne LDE8B 00DE65 1 A9 80 lda #$80 00DE67 1 8D 4D 02 sta CMD 00DE6A 1 D0 1F bne LDE8B 00DE6C 1 LDE6C: 00DE6C 1 A9 90 lda #$90 00DE6E 1 8D 4D 02 sta CMD 00DE71 1 D0 02 bne LDE75 00DE73 1 LDE73: 00DE73 1 A9 80 lda #$80 00DE75 1 LDE75: 00DE75 1 8D 4D 02 sta CMD 00DE78 1 A6 82 ldx LINDX 00DE7A 1 B5 CD lda SS,x 00DE7C 1 AA tax 00DE7D 1 10 13 bpl LDE92 00DE7F 1 LDE7F: 00DE7F 1 20 D0 D6 jsr LD6D0 00DE82 1 20 93 DF jsr LDF93 00DE85 1 AA tax 00DE86 1 A5 7F lda DRVNUM 00DE88 1 9D 5B 02 sta LSTJOB,x 00DE8B 1 LDE8B: 00DE8B 1 20 15 E1 jsr LE115 00DE8E 1 20 93 DF jsr LDF93 00DE91 1 AA tax 00DE92 1 LDE92: 00DE92 1 4C 06 D5 jmp LD506 00DE95 1 LDE95: 00DE95 1 A9 00 lda #$00 00DE97 1 20 C8 D4 jsr LD4C8 00DE9A 1 20 37 D1 jsr LD137 00DE9D 1 85 80 sta TRACK 00DE9F 1 20 37 D1 jsr LD137 00DEA2 1 85 81 sta SECTOR 00DEA4 1 60 rts 00DEA5 1 LDEA5: 00DEA5 1 48 pha 00DEA6 1 A9 00 lda #$00 00DEA8 1 85 6F sta T0 00DEAA 1 85 71 sta T2 00DEAC 1 B9 E0 FE lda TableHighBytesOfBuffers,y 00DEAF 1 85 70 sta T1 00DEB1 1 BD E0 FE lda TableHighBytesOfBuffers,x 00DEB4 1 85 72 sta T3 00DEB6 1 68 pla 00DEB7 1 A8 tay 00DEB8 1 88 dey 00DEB9 1 LDEB9: 00DEB9 1 B1 6F lda (T0),y 00DEBB 1 91 71 sta (T2),y 00DEBD 1 88 dey 00DEBE 1 10 F9 bpl LDEB9 00DEC0 1 60 rts 00DEC1 1 LDEC1: 00DEC1 1 A8 tay 00DEC2 1 B9 E0 FE lda TableHighBytesOfBuffers,y 00DEC5 1 85 70 sta T1 00DEC7 1 A9 00 lda #$00 00DEC9 1 85 6F sta T0 00DECB 1 A8 tay 00DECC 1 LDECC: 00DECC 1 91 6F sta (T0),y 00DECE 1 C8 iny 00DECF 1 D0 FB bne LDECC 00DED1 1 60 rts 00DED2 1 LDED2: 00DED2 1 A9 00 lda #$00 00DED4 1 20 DC DE jsr LDEDC 00DED7 1 A0 02 ldy #$02 00DED9 1 B1 94 lda (DIRBUF),y 00DEDB 1 60 rts 00DEDC 1 LDEDC: 00DEDC 1 85 94 sta DIRBUF 00DEDE 1 A6 82 ldx LINDX 00DEE0 1 B5 CD lda SS,x 00DEE2 1 AA tax 00DEE3 1 BD E0 FE lda TableHighBytesOfBuffers,x 00DEE6 1 85 95 sta DIRBUF + 1 00DEE8 1 60 rts 00DEE9 1 LDEE9: 00DEE9 1 48 pha 00DEEA 1 20 DC DE jsr LDEDC 00DEED 1 48 pha 00DEEE 1 8A txa 00DEEF 1 0A asl a 00DEF0 1 AA tax 00DEF1 1 68 pla 00DEF2 1 95 9A sta BUFTAB0 + 1,x 00DEF4 1 68 pla 00DEF5 1 95 99 sta BUFTAB0,x 00DEF7 1 60 rts 00DEF8 1 LDEF8: 00DEF8 1 20 66 DF jsr LDF66 00DEFB 1 30 0E bmi LDF0B 00DEFD 1 50 13 bvc LDF12 00DEFF 1 A6 82 ldx LINDX 00DF01 1 B5 CD lda SS,x 00DF03 1 20 1B DF jsr LDF1B 00DF06 1 20 66 DF jsr LDF66 00DF09 1 10 07 bpl LDF12 00DF0B 1 LDF0B: 00DF0B 1 20 CB E1 jsr LE1CB 00DF0E 1 2C CE FE bit LFECE 00DF11 1 60 rts 00DF12 1 LDF12: 00DF12 1 A5 D6 lda SSIND 00DF14 1 20 E9 DE jsr LDEE9 00DF17 1 2C CD FE bit LFECD 00DF1A 1 60 rts 00DF1B 1 LDF1B: 00DF1B 1 85 F9 sta JOBNUM 00DF1D 1 A9 80 lda #$80 00DF1F 1 D0 04 bne LDF25 00DF21 1 85 F9 sta JOBNUM 00DF23 1 A9 90 lda #$90 00DF25 1 LDF25: 00DF25 1 48 pha 00DF26 1 B5 EC lda FILTYP,x 00DF28 1 29 01 and #$01 00DF2A 1 85 7F sta DRVNUM 00DF2C 1 68 pla 00DF2D 1 05 7F ora DRVNUM 00DF2F 1 8D 4D 02 sta CMD 00DF32 1 B1 94 lda (DIRBUF),y 00DF34 1 85 80 sta TRACK 00DF36 1 C8 iny 00DF37 1 B1 94 lda (DIRBUF),y 00DF39 1 85 81 sta SECTOR 00DF3B 1 A5 F9 lda JOBNUM 00DF3D 1 20 D3 D6 jsr LD6D3 00DF40 1 A6 F9 ldx JOBNUM 00DF42 1 4C 93 D5 jmp LD593 00DF45 1 LDF45: 00DF45 1 A6 82 ldx LINDX 00DF47 1 B5 CD lda SS,x 00DF49 1 4C EB D4 jmp LD4EB 00DF4C 1 LDF4C: 00DF4C 1 A9 78 lda #$78 00DF4E 1 20 5C DF jsr LDF5C 00DF51 1 LDF51: 00DF51 1 CA dex 00DF52 1 10 F8 bpl LDF4C 00DF54 1 A5 72 lda T3 00DF56 1 4A lsr a 00DF57 1 20 5C DF jsr LDF5C 00DF5A 1 A5 73 lda T4 00DF5C 1 LDF5C: 00DF5C 1 18 clc 00DF5D 1 65 70 adc T1 00DF5F 1 85 70 sta T1 00DF61 1 90 02 bcc LDF65 00DF63 1 E6 71 inc T2 00DF65 1 LDF65: 00DF65 1 60 rts 00DF66 1 LDF66: 00DF66 1 20 D2 DE jsr LDED2 00DF69 1 C5 D5 cmp SSNUM 00DF6B 1 D0 0E bne LDF7B 00DF6D 1 A4 D6 ldy SSIND 00DF6F 1 B1 94 lda (DIRBUF),y 00DF71 1 F0 04 beq LDF77 00DF73 1 2C CD FE bit LFECD 00DF76 1 60 rts 00DF77 1 LDF77: 00DF77 1 2C CF FE bit LFECF 00DF7A 1 60 rts 00DF7B 1 LDF7B: 00DF7B 1 A5 D5 lda SSNUM 00DF7D 1 C9 06 cmp #$06 00DF7F 1 B0 0A bcs LDF8B 00DF81 1 0A asl a 00DF82 1 A8 tay 00DF83 1 A9 04 lda #$04 00DF85 1 85 94 sta DIRBUF 00DF87 1 B1 94 lda (DIRBUF),y 00DF89 1 D0 04 bne LDF8F 00DF8B 1 LDF8B: 00DF8B 1 2C D0 FE bit LFED0 00DF8E 1 60 rts 00DF8F 1 LDF8F: 00DF8F 1 2C CE FE bit LFECE 00DF92 1 60 rts 00DF93 1 LDF93: 00DF93 1 A6 82 ldx LINDX 00DF95 1 B5 A7 lda BUF0,x 00DF97 1 10 02 bpl @LDF9B 00DF99 1 B5 AE lda BUF1,x 00DF9B 1 @LDF9B: 00DF9B 1 29 BF and # ~ $40 00DF9D 1 60 rts 00DF9E 1 ; -------------- 00DF9E 1 00DF9E 1 LDF9E: 00DF9E 1 A6 82 ldx LINDX 00DFA0 1 8E 57 02 stx LBUSED 00DFA3 1 B5 A7 lda BUF0,x 00DFA5 1 10 09 bpl @LDFB0 00DFA7 1 8A txa 00DFA8 1 18 clc 00DFA9 1 69 07 adc #$07 00DFAB 1 8D 57 02 sta LBUSED 00DFAE 1 B5 AE lda BUF1,x 00DFB0 1 @LDFB0: 00DFB0 1 85 70 sta T1 00DFB2 1 29 1F and #$1F 00DFB4 1 24 70 bit T1 00DFB6 1 60 rts 00DFB7 1 ; ----------------- 00DFB7 1 00DFB7 1 LDFB7: 00DFB7 1 A6 82 ldx LINDX 00DFB9 1 B5 A7 lda BUF0,x 00DFBB 1 30 02 bmi @LDFBF 00DFBD 1 B5 AE lda BUF1,x 00DFBF 1 @LDFBF: 00DFBF 1 C9 FF cmp #$FF 00DFC1 1 60 rts 00DFC2 1 ; ----------------- 00DFC2 1 00DFC2 1 LDFC2: 00DFC2 1 A6 82 ldx LINDX 00DFC4 1 09 80 ora #$80 00DFC6 1 B4 A7 ldy BUF0,x 00DFC8 1 10 03 bpl @LDFCD 00DFCA 1 95 A7 sta BUF0,x 00DFCC 1 60 rts 00DFCD 1 00DFCD 1 @LDFCD: 00DFCD 1 95 AE sta BUF1,x 00DFCF 1 60 rts 00DFD0 1 ; -------------- 00DFD0 1 00DFD0 1 LDFD0: 00DFD0 1 A9 20 lda #$20 00DFD2 1 20 9D DD jsr LDD9D 00DFD5 1 A9 80 lda #$80 00DFD7 1 20 A6 DD jsr LDDA6 00DFDA 1 D0 41 bne LE01D 00DFDC 1 A6 82 ldx LINDX 00DFDE 1 F6 B5 inc RECL,x 00DFE0 1 D0 02 bne @LDFE4 00DFE2 1 F6 BB inc RECH,x 00DFE4 1 @LDFE4: 00DFE4 1 A6 82 ldx LINDX 00DFE6 1 B5 C1 lda NR,x 00DFE8 1 F0 2E beq LE018 00DFEA 1 20 E8 D4 jsr LD4E8 00DFED 1 A6 82 ldx LINDX 00DFEF 1 D5 C1 cmp NR,x 00DFF1 1 90 03 bcc @LDFF6 00DFF3 1 20 3C E0 jsr LE03C 00DFF6 1 @LDFF6: 00DFF6 1 A6 82 ldx LINDX 00DFF8 1 B5 C1 lda NR,x 00DFFA 1 20 C8 D4 jsr LD4C8 00DFFD 1 A1 99 lda (BUFTAB0,x) 00DFFF 1 85 85 sta DATA 00E001 1 A9 20 lda #$20 00E003 1 20 9D DD jsr LDD9D 00E006 1 20 04 E3 jsr LE304 00E009 1 00E009 1 LE009: 00E009 1 48 pha 00E00A 1 90 28 bcc LE034 00E00C 1 A9 00 lda #$00 00E00E 1 20 F6 D4 jsr LD4F6 00E011 1 D0 21 bne LE034 00E013 1 68 pla 00E014 1 C9 02 cmp #$02 00E016 1 F0 12 beq LE02A 00E018 1 LE018: 00E018 1 A9 80 lda #$80 00E01A 1 20 97 DD jsr LDD97 00E01D 1 LE01D: 00E01D 1 20 2F D1 jsr LD12F 00E020 1 B5 99 lda BUFTAB0,x 00E022 1 99 44 02 sta LSTCHR,y 00E025 1 A9 0D lda #$0D 00E027 1 85 85 sta DATA 00E029 1 60 rts 00E02A 1 ; ---------------- 00E02A 1 00E02A 1 LE02A: 00E02A 1 20 35 E0 jsr LE035 00E02D 1 A6 82 ldx LINDX 00E02F 1 A9 00 lda #$00 00E031 1 95 C1 sta NR,x 00E033 1 60 rts 00E034 1 LE034: 00E034 1 68 pla 00E035 1 LE035: 00E035 1 A6 82 ldx LINDX 00E037 1 95 C1 sta NR,x 00E039 1 4C 6E E1 jmp LE16E 00E03C 1 LE03C: 00E03C 1 20 D3 D1 jsr LD1D3 00E03F 1 20 95 DE jsr LDE95 00E042 1 20 9E DF jsr LDF9E 00E045 1 50 16 bvc @LE05D 00E047 1 20 5E DE jsr LDE5E 00E04A 1 20 1E CF jsr LCF1E 00E04D 1 A9 02 lda #$02 00E04F 1 20 C8 D4 jsr LD4C8 00E052 1 20 AB DD jsr LDDAB 00E055 1 D0 24 bne @LE07B 00E057 1 20 57 DE jsr LDE57 00E05A 1 4C 99 D5 jmp LD599 00E05D 1 00E05D 1 @LE05D: 00E05D 1 20 1E CF jsr LCF1E 00E060 1 20 AB DD jsr LDDAB 00E063 1 D0 06 bne @LE06B 00E065 1 20 57 DE jsr LDE57 00E068 1 20 99 D5 jsr LD599 00E06B 1 @LE06B: 00E06B 1 20 95 DE jsr LDE95 00E06E 1 A5 80 lda TRACK 00E070 1 F0 09 beq @LE07B 00E072 1 20 1E CF jsr LCF1E 00E075 1 20 57 DE jsr LDE57 00E078 1 20 1E CF jsr LCF1E 00E07B 1 @LE07B: 00E07B 1 60 rts 00E07C 1 ; ----------------- 00E07C 1 00E07C 1 LE07C: 00E07C 1 20 05 E1 jsr LE105 00E07F 1 20 93 DF jsr LDF93 00E082 1 0A asl a 00E083 1 AA tax 00E084 1 A5 85 lda DATA 00E086 1 81 99 sta (BUFTAB0,x) 00E088 1 B4 99 ldy BUFTAB0,x 00E08A 1 C8 iny 00E08B 1 D0 09 bne @LE096 00E08D 1 A4 82 ldy LINDX 00E08F 1 B9 C1 00 lda NR,y 00E092 1 F0 0A beq @LE09E 00E094 1 A0 02 ldy #$02 00E096 1 @LE096: 00E096 1 98 tya 00E097 1 A4 82 ldy LINDX 00E099 1 D9 C1 00 cmp NR,y 00E09C 1 D0 05 bne @LE0A3 00E09E 1 @LE09E: 00E09E 1 A9 20 lda #$20 00E0A0 1 4C 97 DD jmp LDD97 00E0A3 1 @LE0A3: 00E0A3 1 F6 99 inc BUFTAB0,x 00E0A5 1 D0 03 bne @LE0AA 00E0A7 1 20 3C E0 jsr LE03C 00E0AA 1 @LE0AA: 00E0AA 1 60 rts 00E0AB 1 ; ----------------- 00E0AB 1 00E0AB 1 LE0AB: 00E0AB 1 A9 A0 lda #$A0 00E0AD 1 20 A6 DD jsr LDDA6 00E0B0 1 D0 27 bne LE0D9 00E0B2 1 LE0B2: 00E0B2 1 A5 85 lda DATA 00E0B4 1 20 7C E0 jsr LE07C 00E0B7 1 A5 F8 lda EIOFLG 00E0B9 1 F0 0D beq LE0C8 00E0BB 1 60 rts 00E0BC 1 LE0BC: 00E0BC 1 A9 20 lda #$20 00E0BE 1 20 A6 DD jsr LDDA6 00E0C1 1 F0 05 beq LE0C8 00E0C3 1 A9 51 lda #ERRORCODE_51_OVERFLOW_IN_RECORD 00E0C5 1 8D 6C 02 sta ERWORD 00E0C8 1 LE0C8: 00E0C8 1 20 F3 E0 jsr LE0F3 00E0CB 1 20 53 E1 jsr LE153 00E0CE 1 AD 6C 02 lda ERWORD 00E0D1 1 F0 03 beq @LE0D6 00E0D3 1 4C C8 C1 jmp GenerateErrorMessage 00E0D6 1 ; ---------------- 00E0D6 1 00E0D6 1 @LE0D6: 00E0D6 1 4C BC E6 jmp SetNoError ; delete error status 00E0D9 1 ; ----------------- 00E0D9 1 00E0D9 1 LE0D9: 00E0D9 1 29 80 and #$80 00E0DB 1 D0 05 bne LE0E2 00E0DD 1 A5 F8 lda EIOFLG 00E0DF 1 F0 DB beq LE0BC 00E0E1 1 60 rts 00E0E2 1 LE0E2: 00E0E2 1 A5 85 lda DATA 00E0E4 1 48 pha 00E0E5 1 20 1C E3 jsr LE31C 00E0E8 1 68 pla 00E0E9 1 85 85 sta DATA 00E0EB 1 A9 80 lda #$80 00E0ED 1 20 9D DD jsr LDD9D 00E0F0 1 4C B2 E0 jmp LE0B2 00E0F3 1 LE0F3: 00E0F3 1 A9 20 lda #$20 00E0F5 1 20 A6 DD jsr LDDA6 00E0F8 1 D0 0A bne @LE104 00E0FA 1 A9 00 lda #$00 00E0FC 1 85 85 sta DATA 00E0FE 1 20 7C E0 jsr LE07C 00E101 1 4C F3 E0 jmp LE0F3 00E104 1 @LE104: 00E104 1 60 rts 00E105 1 LE105: 00E105 1 A9 40 lda #$40 00E107 1 20 97 DD jsr LDD97 00E10A 1 20 9E DF jsr LDF9E 00E10D 1 09 40 ora #$40 00E10F 1 AE 57 02 ldx LBUSED 00E112 1 95 A7 sta BUF0,x 00E114 1 60 rts 00E115 1 LE115: 00E115 1 20 9E DF jsr LDF9E 00E118 1 29 BF and #$BF 00E11A 1 AE 57 02 ldx LBUSED 00E11D 1 95 A7 sta BUF0,x 00E11F 1 60 rts 00E120 1 LE120: 00E120 1 A9 80 lda #$80 00E122 1 20 A6 DD jsr LDDA6 00E125 1 D0 37 bne LE15E 00E127 1 20 2F D1 jsr LD12F 00E12A 1 B5 99 lda BUFTAB0,x 00E12C 1 D9 44 02 cmp LSTCHR,y 00E12F 1 F0 22 beq LE153 00E131 1 F6 99 inc BUFTAB0,x 00E133 1 D0 06 bne LE13B 00E135 1 20 3C E0 jsr LE03C 00E138 1 LE138: 00E138 1 20 2F D1 jsr LD12F 00E13B 1 LE13B: 00E13B 1 A1 99 lda (BUFTAB0,x) 00E13D 1 LE13D: 00E13D 1 99 3E 02 sta L023E,y 00E140 1 A9 89 lda #$89 00E142 1 99 F2 00 sta CHNRDY,y 00E145 1 B5 99 lda BUFTAB0,x 00E147 1 D9 44 02 cmp LSTCHR,y 00E14A 1 F0 01 beq LE14D 00E14C 1 60 rts 00E14D 1 LE14D: 00E14D 1 A9 81 lda #$81 00E14F 1 99 F2 00 sta CHNRDY,y 00E152 1 60 rts 00E153 1 LE153: 00E153 1 20 D0 DF jsr LDFD0 00E156 1 20 2F D1 jsr LD12F 00E159 1 A5 85 lda DATA 00E15B 1 4C 3D E1 jmp LE13D 00E15E 1 LE15E: 00E15E 1 A6 82 ldx LINDX 00E160 1 A9 0D lda #$0D 00E162 1 9D 3E 02 sta L023E,x 00E165 1 A9 81 lda #$81 00E167 1 95 F2 sta CHNRDY,x 00E169 1 A9 50 lda #ERRORCODE_50_RECORD_NOT_PRESENT 00E16B 1 20 C8 C1 jsr GenerateErrorMessage 00E16E 1 LE16E: 00E16E 1 A6 82 ldx LINDX 00E170 1 B5 C1 lda NR,x 00E172 1 85 87 sta R1 00E174 1 C6 87 dec R1 00E176 1 C9 02 cmp #$02 00E178 1 D0 04 bne LE17E 00E17A 1 A9 FF lda #$FF 00E17C 1 85 87 sta R1 00E17E 1 LE17E: 00E17E 1 B5 C7 lda RS,x 00E180 1 85 88 sta R2 00E182 1 20 E8 D4 jsr LD4E8 00E185 1 A6 82 ldx LINDX 00E187 1 C5 87 cmp R1 00E189 1 90 19 bcc LE1A4 00E18B 1 F0 17 beq LE1A4 00E18D 1 20 1E CF jsr LCF1E 00E190 1 20 B2 E1 jsr LE1B2 00E193 1 90 08 bcc LE19D 00E195 1 A6 82 ldx LINDX 00E197 1 9D 44 02 sta LSTCHR,x 00E19A 1 4C 1E CF jmp LCF1E 00E19D 1 LE19D: 00E19D 1 20 1E CF jsr LCF1E 00E1A0 1 A9 FF lda #$FF 00E1A2 1 85 87 sta R1 00E1A4 1 LE1A4: 00E1A4 1 20 B2 E1 jsr LE1B2 00E1A7 1 B0 03 bcs LE1AC 00E1A9 1 20 E8 D4 jsr LD4E8 00E1AC 1 LE1AC: 00E1AC 1 A6 82 ldx LINDX 00E1AE 1 9D 44 02 sta LSTCHR,x 00E1B1 1 60 rts 00E1B2 1 LE1B2: 00E1B2 1 20 2B DE jsr LDE2B 00E1B5 1 A4 87 ldy R1 00E1B7 1 LE1B7: 00E1B7 1 B1 94 lda (DIRBUF),y 00E1B9 1 D0 0D bne LE1C8 00E1BB 1 88 dey 00E1BC 1 C0 02 cpy #$02 00E1BE 1 90 04 bcc LE1C4 00E1C0 1 C6 88 dec R2 00E1C2 1 D0 F3 bne LE1B7 00E1C4 1 LE1C4: 00E1C4 1 C6 88 dec R2 00E1C6 1 18 clc 00E1C7 1 60 rts 00E1C8 1 LE1C8: 00E1C8 1 98 tya 00E1C9 1 38 sec 00E1CA 1 60 rts 00E1CB 1 LE1CB: 00E1CB 1 20 D2 DE jsr LDED2 00E1CE 1 85 D5 sta SSNUM 00E1D0 1 A9 04 lda #$04 00E1D2 1 85 94 sta DIRBUF 00E1D4 1 A0 0A ldy #$0A 00E1D6 1 D0 04 bne LE1DC 00E1D8 1 LE1D8: 00E1D8 1 88 dey 00E1D9 1 88 dey 00E1DA 1 30 26 bmi LE202 00E1DC 1 LE1DC: 00E1DC 1 B1 94 lda (DIRBUF),y 00E1DE 1 F0 F8 beq LE1D8 00E1E0 1 98 tya 00E1E1 1 4A lsr a 00E1E2 1 C5 D5 cmp SSNUM 00E1E4 1 F0 09 beq LE1EF 00E1E6 1 85 D5 sta SSNUM 00E1E8 1 A6 82 ldx LINDX 00E1EA 1 B5 CD lda SS,x 00E1EC 1 20 1B DF jsr LDF1B 00E1EF 1 LE1EF: 00E1EF 1 A0 00 ldy #$00 00E1F1 1 84 94 sty DIRBUF 00E1F3 1 B1 94 lda (DIRBUF),y 00E1F5 1 D0 0B bne LE202 00E1F7 1 C8 iny 00E1F8 1 B1 94 lda (DIRBUF),y 00E1FA 1 A8 tay 00E1FB 1 88 dey 00E1FC 1 84 D6 sty SSIND 00E1FE 1 98 tya 00E1FF 1 4C E9 DE jmp LDEE9 00E202 1 LE202: 00E202 1 A9 67 lda #ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR 00E204 1 20 45 E6 jsr LE645 00E207 1 cmd_position: 00E207 1 20 B3 C2 jsr LC2B3 00E20A 1 AD 01 02 lda CMDBUF + 1 00E20D 1 85 83 sta SA 00E20F 1 20 EB D0 jsr LD0EB 00E212 1 90 05 bcc LE219 00E214 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00E216 1 20 C8 C1 jsr GenerateErrorMessage 00E219 1 LE219: 00E219 1 A9 A0 lda #$A0 00E21B 1 20 9D DD jsr LDD9D 00E21E 1 20 25 D1 jsr LD125 00E221 1 F0 05 beq LE228 00E223 1 A9 64 lda #ERRORCODE_64_FILE_TYPE_MISMATCH 00E225 1 20 C8 C1 jsr GenerateErrorMessage 00E228 1 LE228: 00E228 1 B5 EC lda FILTYP,x 00E22A 1 29 01 and #$01 00E22C 1 85 7F sta DRVNUM 00E22E 1 AD 02 02 lda CMDBUF + 2 00E231 1 95 B5 sta RECL,x 00E233 1 AD 03 02 lda CMDBUF + 3 00E236 1 95 BB sta RECH,x 00E238 1 A6 82 ldx LINDX 00E23A 1 A9 89 lda #$89 00E23C 1 95 F2 sta CHNRDY,x 00E23E 1 AD 04 02 lda CMDBUF + 4 00E241 1 F0 10 beq LE253 00E243 1 38 sec 00E244 1 E9 01 sbc #$01 00E246 1 F0 0B beq LE253 00E248 1 D5 C7 cmp RS,x 00E24A 1 90 07 bcc LE253 00E24C 1 A9 51 lda #ERRORCODE_51_OVERFLOW_IN_RECORD 00E24E 1 8D 6C 02 sta ERWORD 00E251 1 A9 00 lda #$00 00E253 1 LE253: 00E253 1 85 D4 sta RECPTR 00E255 1 20 0E CE jsr LCE0E 00E258 1 20 F8 DE jsr LDEF8 00E25B 1 50 08 bvc LE265 00E25D 1 A9 80 lda #$80 00E25F 1 20 97 DD jsr LDD97 00E262 1 4C 5E E1 jmp LE15E 00E265 1 LE265: 00E265 1 20 75 E2 jsr LE275 00E268 1 A9 80 lda #$80 00E26A 1 20 A6 DD jsr LDDA6 00E26D 1 F0 03 beq LE272 00E26F 1 4C 5E E1 jmp LE15E 00E272 1 LE272: 00E272 1 4C 94 C1 jmp CommandEnd 00E275 1 LE275: 00E275 1 20 9C E2 jsr LE29C 00E278 1 A5 D7 lda RELPTR 00E27A 1 20 C8 D4 jsr LD4C8 00E27D 1 A6 82 ldx LINDX 00E27F 1 B5 C7 lda RS,x 00E281 1 38 sec 00E282 1 E5 D4 sbc RECPTR 00E284 1 B0 03 bcs LE289 00E286 1 4C 02 E2 jmp LE202 00E289 1 LE289: 00E289 1 18 clc 00E28A 1 65 D7 adc RELPTR 00E28C 1 90 03 bcc LE291 00E28E 1 69 01 adc #$01 00E290 1 38 sec 00E291 1 LE291: 00E291 1 20 09 E0 jsr LE009 00E294 1 4C 38 E1 jmp LE138 00E297 1 A9 51 lda #ERRORCODE_51_OVERFLOW_IN_RECORD 00E299 1 20 C8 C1 jsr GenerateErrorMessage 00E29C 1 LE29C: 00E29C 1 A5 94 lda DIRBUF 00E29E 1 85 89 sta R3 00E2A0 1 A5 95 lda DIRBUF + 1 00E2A2 1 85 8A sta R4 00E2A4 1 20 D0 E2 jsr LE2D0 00E2A7 1 D0 01 bne LE2AA 00E2A9 1 60 rts 00E2AA 1 LE2AA: 00E2AA 1 20 F1 DD jsr LDDF1 00E2AD 1 20 0C DE jsr LDE0C 00E2B0 1 A5 80 lda TRACK 00E2B2 1 F0 0E beq LE2C2 00E2B4 1 20 D3 E2 jsr LE2D3 00E2B7 1 D0 06 bne LE2BF 00E2B9 1 20 1E CF jsr LCF1E 00E2BC 1 4C DA D2 jmp LD2DA 00E2BF 1 LE2BF: 00E2BF 1 20 DA D2 jsr LD2DA 00E2C2 1 LE2C2: 00E2C2 1 A0 00 ldy #$00 00E2C4 1 B1 89 lda (R3),y 00E2C6 1 85 80 sta TRACK 00E2C8 1 C8 iny 00E2C9 1 B1 89 lda (R3),y 00E2CB 1 85 81 sta SECTOR 00E2CD 1 4C AF D0 jmp LD0AF 00E2D0 1 LE2D0: 00E2D0 1 20 3E DE jsr LDE3E 00E2D3 1 LE2D3: 00E2D3 1 A0 00 ldy #$00 00E2D5 1 B1 89 lda (R3),y 00E2D7 1 C5 80 cmp TRACK 00E2D9 1 F0 01 beq LE2DC 00E2DB 1 60 rts 00E2DC 1 LE2DC: 00E2DC 1 C8 iny 00E2DD 1 B1 89 lda (R3),y 00E2DF 1 C5 81 cmp SECTOR 00E2E1 1 60 rts 00E2E2 1 LE2E2: 00E2E2 1 20 2B DE jsr LDE2B 00E2E5 1 A0 02 ldy #$02 00E2E7 1 A9 00 lda #$00 00E2E9 1 LE2E9: 00E2E9 1 91 94 sta (DIRBUF),y 00E2EB 1 C8 iny 00E2EC 1 D0 FB bne LE2E9 00E2EE 1 20 04 E3 jsr LE304 00E2F1 1 LE2F1: 00E2F1 1 95 C1 sta NR,x 00E2F3 1 A8 tay 00E2F4 1 A9 FF lda #$FF 00E2F6 1 91 94 sta (DIRBUF),y 00E2F8 1 20 04 E3 jsr LE304 00E2FB 1 90 F4 bcc LE2F1 00E2FD 1 D0 04 bne LE303 00E2FF 1 A9 00 lda #$00 00E301 1 95 C1 sta NR,x 00E303 1 LE303: 00E303 1 60 rts 00E304 1 LE304: 00E304 1 A6 82 ldx LINDX 00E306 1 B5 C1 lda NR,x 00E308 1 38 sec 00E309 1 F0 0D beq LE318 00E30B 1 18 clc 00E30C 1 75 C7 adc RS,x 00E30E 1 90 0B bcc LE31B 00E310 1 D0 06 bne LE318 00E312 1 A9 02 lda #$02 00E314 1 2C CC FE bit LFECC 00E317 1 60 rts 00E318 1 LE318: 00E318 1 69 01 adc #$01 00E31A 1 38 sec 00E31B 1 LE31B: 00E31B 1 60 rts 00E31C 1 LE31C: 00E31C 1 20 D3 D1 jsr LD1D3 00E31F 1 20 CB E1 jsr LE1CB 00E322 1 20 9C E2 jsr LE29C 00E325 1 20 7B CF jsr LCF7B 00E328 1 A5 D6 lda SSIND 00E32A 1 85 87 sta R1 00E32C 1 A5 D5 lda SSNUM 00E32E 1 85 86 sta R0 00E330 1 A9 00 lda #$00 00E332 1 85 88 sta R2 00E334 1 A9 00 lda #$00 00E336 1 85 D4 sta RECPTR 00E338 1 20 0E CE jsr LCE0E 00E33B 1 LE33B: 00E33B 1 20 4D EF jsr LEF4D 00E33E 1 A4 82 ldy LINDX 00E340 1 B6 C7 ldx RS,y 00E342 1 CA dex 00E343 1 8A txa 00E344 1 18 clc 00E345 1 65 D7 adc RELPTR 00E347 1 90 0C bcc LE355 00E349 1 E6 D6 inc SSIND 00E34B 1 E6 D6 inc SSIND 00E34D 1 D0 06 bne LE355 00E34F 1 E6 D5 inc SSNUM 00E351 1 A9 10 lda #$10 00E353 1 85 D6 sta SSIND 00E355 1 LE355: 00E355 1 A5 87 lda R1 00E357 1 18 clc 00E358 1 69 02 adc #$02 00E35A 1 20 E9 DE jsr LDEE9 00E35D 1 A5 D5 lda SSNUM 00E35F 1 C9 06 cmp #$06 00E361 1 90 05 bcc LE368 00E363 1 LE363: 00E363 1 A9 52 lda #ERRORCODE_52_FILE_TOO_LARGE 00E365 1 20 C8 C1 jsr GenerateErrorMessage 00E368 1 LE368: 00E368 1 A5 D6 lda SSIND 00E36A 1 38 sec 00E36B 1 E5 87 sbc R1 00E36D 1 B0 03 bcs LE372 00E36F 1 E9 0F sbc #$0F 00E371 1 18 clc 00E372 1 LE372: 00E372 1 85 72 sta T3 00E374 1 A5 D5 lda SSNUM 00E376 1 E5 86 sbc R0 00E378 1 85 73 sta T4 00E37A 1 A2 00 ldx #$00 00E37C 1 86 70 stx T1 00E37E 1 86 71 stx T2 00E380 1 AA tax 00E381 1 20 51 DF jsr LDF51 00E384 1 A5 71 lda T2 00E386 1 D0 07 bne LE38F 00E388 1 A6 70 ldx T1 00E38A 1 CA dex 00E38B 1 D0 02 bne LE38F 00E38D 1 E6 88 inc R2 00E38F 1 LE38F: 00E38F 1 CD 73 02 cmp NBTEMP + 1 00E392 1 90 09 bcc LE39D 00E394 1 D0 CD bne LE363 00E396 1 AD 72 02 lda NBTEMP 00E399 1 C5 70 cmp T1 00E39B 1 90 C6 bcc LE363 00E39D 1 LE39D: 00E39D 1 A9 01 lda #$01 00E39F 1 20 F6 D4 jsr LD4F6 00E3A2 1 18 clc 00E3A3 1 69 01 adc #$01 00E3A5 1 A6 82 ldx LINDX 00E3A7 1 95 C1 sta NR,x 00E3A9 1 20 1E F1 jsr LF11E 00E3AC 1 20 FD DD jsr LDDFD 00E3AF 1 A5 88 lda R2 00E3B1 1 D0 15 bne LE3C8 00E3B3 1 20 5E DE jsr LDE5E 00E3B6 1 LE3B6: 00E3B6 1 20 1E CF jsr LCF1E 00E3B9 1 20 D0 D6 jsr LD6D0 00E3BC 1 20 1E F1 jsr LF11E 00E3BF 1 20 FD DD jsr LDDFD 00E3C2 1 20 E2 E2 jsr LE2E2 00E3C5 1 4C D4 E3 jmp LE3D4 00E3C8 1 LE3C8: 00E3C8 1 20 1E CF jsr LCF1E 00E3CB 1 20 D0 D6 jsr LD6D0 00E3CE 1 20 E2 E2 jsr LE2E2 00E3D1 1 20 19 DE jsr LDE19 00E3D4 1 LE3D4: 00E3D4 1 20 5E DE jsr LDE5E 00E3D7 1 20 0C DE jsr LDE0C 00E3DA 1 A5 80 lda TRACK 00E3DC 1 48 pha 00E3DD 1 A5 81 lda SECTOR 00E3DF 1 48 pha 00E3E0 1 20 3E DE jsr LDE3E 00E3E3 1 A5 81 lda SECTOR 00E3E5 1 48 pha 00E3E6 1 A5 80 lda TRACK 00E3E8 1 48 pha 00E3E9 1 20 45 DF jsr LDF45 00E3EC 1 AA tax 00E3ED 1 D0 0A bne LE3F9 00E3EF 1 20 4E E4 jsr LE44E 00E3F2 1 A9 10 lda #$10 00E3F4 1 20 E9 DE jsr LDEE9 00E3F7 1 E6 86 inc R0 00E3F9 1 LE3F9: 00E3F9 1 68 pla 00E3FA 1 20 8D DD jsr LDD8D 00E3FD 1 68 pla 00E3FE 1 20 8D DD jsr LDD8D 00E401 1 68 pla 00E402 1 85 81 sta SECTOR 00E404 1 68 pla 00E405 1 85 80 sta TRACK 00E407 1 F0 0F beq LE418 00E409 1 A5 86 lda R0 00E40B 1 C5 D5 cmp SSNUM 00E40D 1 D0 A7 bne LE3B6 00E40F 1 20 45 DF jsr LDF45 00E412 1 C5 D6 cmp SSIND 00E414 1 90 A0 bcc LE3B6 00E416 1 F0 B0 beq LE3C8 00E418 1 LE418: 00E418 1 20 45 DF jsr LDF45 00E41B 1 48 pha 00E41C 1 A9 00 lda #$00 00E41E 1 20 DC DE jsr LDEDC 00E421 1 A9 00 lda #$00 00E423 1 A8 tay 00E424 1 91 94 sta (DIRBUF),y 00E426 1 C8 iny 00E427 1 68 pla 00E428 1 38 sec 00E429 1 E9 01 sbc #$01 00E42B 1 91 94 sta (DIRBUF),y 00E42D 1 20 6C DE jsr LDE6C 00E430 1 20 99 D5 jsr LD599 00E433 1 20 F4 EE jsr LEEF4 00E436 1 20 0E CE jsr LCE0E 00E439 1 20 1E CF jsr LCF1E 00E43C 1 20 F8 DE jsr LDEF8 00E43F 1 70 03 bvs LE444 00E441 1 4C 75 E2 jmp LE275 00E444 1 LE444: 00E444 1 A9 80 lda #$80 00E446 1 20 97 DD jsr LDD97 00E449 1 A9 50 lda #ERRORCODE_50_RECORD_NOT_PRESENT 00E44B 1 20 C8 C1 jsr GenerateErrorMessage 00E44E 1 LE44E: 00E44E 1 20 1E F1 jsr LF11E 00E451 1 20 1E CF jsr LCF1E 00E454 1 20 F1 DD jsr LDDF1 00E457 1 20 93 DF jsr LDF93 00E45A 1 48 pha 00E45B 1 20 C1 DE jsr LDEC1 00E45E 1 A6 82 ldx LINDX 00E460 1 B5 CD lda SS,x 00E462 1 A8 tay 00E463 1 68 pla 00E464 1 AA tax 00E465 1 A9 10 lda #$10 00E467 1 20 A5 DE jsr LDEA5 00E46A 1 A9 00 lda #$00 00E46C 1 20 DC DE jsr LDEDC 00E46F 1 A0 02 ldy #$02 00E471 1 B1 94 lda (DIRBUF),y 00E473 1 48 pha 00E474 1 A9 00 lda #$00 00E476 1 20 C8 D4 jsr LD4C8 00E479 1 68 pla 00E47A 1 18 clc 00E47B 1 69 01 adc #$01 00E47D 1 91 94 sta (DIRBUF),y 00E47F 1 0A asl a 00E480 1 69 04 adc #$04 00E482 1 85 89 sta R3 00E484 1 A8 tay 00E485 1 38 sec 00E486 1 E9 02 sbc #$02 00E488 1 85 8A sta R4 00E48A 1 A5 80 lda TRACK 00E48C 1 85 87 sta R1 00E48E 1 91 94 sta (DIRBUF),y 00E490 1 C8 iny 00E491 1 A5 81 lda SECTOR 00E493 1 85 88 sta R2 00E495 1 91 94 sta (DIRBUF),y 00E497 1 A0 00 ldy #$00 00E499 1 98 tya 00E49A 1 91 94 sta (DIRBUF),y 00E49C 1 C8 iny 00E49D 1 A9 11 lda #$11 00E49F 1 91 94 sta (DIRBUF),y 00E4A1 1 A9 10 lda #$10 00E4A3 1 20 C8 D4 jsr LD4C8 00E4A6 1 20 50 DE jsr LDE50 00E4A9 1 20 99 D5 jsr LD599 00E4AC 1 A6 82 ldx LINDX 00E4AE 1 B5 CD lda SS,x 00E4B0 1 48 pha 00E4B1 1 20 9E DF jsr LDF9E 00E4B4 1 A6 82 ldx LINDX 00E4B6 1 95 CD sta SS,x 00E4B8 1 68 pla 00E4B9 1 AE 57 02 ldx LBUSED 00E4BC 1 95 A7 sta BUF0,x 00E4BE 1 A9 00 lda #$00 00E4C0 1 20 C8 D4 jsr LD4C8 00E4C3 1 A0 00 ldy #$00 00E4C5 1 A5 80 lda TRACK 00E4C7 1 91 94 sta (DIRBUF),y 00E4C9 1 C8 iny 00E4CA 1 A5 81 lda SECTOR 00E4CC 1 91 94 sta (DIRBUF),y 00E4CE 1 4C DE E4 jmp LE4DE 00E4D1 1 LE4D1: 00E4D1 1 20 93 DF jsr LDF93 00E4D4 1 A6 82 ldx LINDX 00E4D6 1 20 1B DF jsr LDF1B 00E4D9 1 A9 00 lda #$00 00E4DB 1 20 C8 D4 jsr LD4C8 00E4DE 1 LE4DE: 00E4DE 1 C6 8A dec R4 00E4E0 1 C6 8A dec R4 00E4E2 1 A4 89 ldy R3 00E4E4 1 A5 87 lda R1 00E4E6 1 91 94 sta (DIRBUF),y 00E4E8 1 C8 iny 00E4E9 1 A5 88 lda R2 00E4EB 1 91 94 sta (DIRBUF),y 00E4ED 1 20 5E DE jsr LDE5E 00E4F0 1 20 99 D5 jsr LD599 00E4F3 1 A4 8A ldy R4 00E4F5 1 C0 03 cpy #$03 00E4F7 1 B0 D8 bcs LE4D1 00E4F9 1 4C 1E CF jmp LCF1E 00E4FC 1 00E4FC 1 ErrorCodeTable: 00E4FC 1 00 .byte ERRORCODE_00_OK 00E4FD 1 A0 4F CB htasc_floppy_error " OK" 00E500 1 00E500 1 20 .byte ERRORCODE_20_READ_ERROR 00E501 1 21 .byte ERRORCODE_21_READ_ERROR 00E502 1 22 .byte ERRORCODE_22_READ_ERROR 00E503 1 23 .byte ERRORCODE_23_READ_ERROR 00E504 1 24 .byte ERRORCODE_24_READ_ERROR 00E505 1 27 .byte ERRORCODE_27_READ_ERROR 00E506 1 D2 45 41 44 htasc_floppy_error .sprintf("READ%c", ERRORCODE_09_ERROR) 00E50A 1 89 00E50B 1 00E50B 1 52 .byte ERRORCODE_52_FILE_TOO_LARGE 00E50C 1 83 20 54 4F htasc_floppy_error .sprintf("%c TOO LARGE", ERRORCODE_03_FILE) 00E510 1 4F 20 4C 41 00E514 1 52 47 C5 00E517 1 00E517 1 50 .byte ERRORCODE_50_RECORD_NOT_PRESENT 00E518 1 8B 06 20 50 htasc_floppy_error .sprintf("%c%c PRESENT", ERRORCODE_0B_RECORD, ERRORCODE_06_NOT) 00E51C 1 52 45 53 45 00E520 1 4E D4 00E522 1 00E522 1 51 .byte ERRORCODE_51_OVERFLOW_IN_RECORD 00E523 1 CF 56 45 52 htasc_floppy_error .sprintf("OVERFLOW IN%c", ERRORCODE_0B_RECORD) 00E527 1 46 4C 4F 57 00E52B 1 20 49 4E 8B 00E52F 1 00E52F 1 25 .byte ERRORCODE_25_WRITE_ERROR 00E530 1 28 .byte ERRORCODE_28_WRITE_ERROR 00E531 1 8A 89 htasc_floppy_error .sprintf("%c%c", ERRORCODE_0A_WRITE, ERRORCODE_09_ERROR) 00E533 1 00E533 1 26 .byte ERRORCODE_26_WRITE_PROTECT_ON 00E534 1 8A 20 50 52 htasc_floppy_error .sprintf("%c PROTECT ON", ERRORCODE_0A_WRITE) 00E538 1 4F 54 45 43 00E53C 1 54 20 4F CE 00E540 1 00E540 1 29 .byte ERRORCODE_29_DISK_ID_MISMATCH 00E541 1 88 20 49 44 htasc_floppy_error .sprintf("%c ID%c", ERRORCODE_08_DISK, ERRORCODE_05_MISMATCH) 00E545 1 85 00E546 1 00E546 1 30 .byte ERRORCODE_30_SYNTAX_ERROR 00E547 1 31 .byte ERRORCODE_31_SYNTAX_ERROR 00E548 1 32 .byte ERRORCODE_32_SYNTAX_ERROR 00E549 1 33 .byte ERRORCODE_33_SYNTAX_ERROR 00E54A 1 34 .byte ERRORCODE_34_SYNTAX_ERROR 00E54B 1 D3 59 4E 54 htasc_floppy_error .sprintf("SYNTAX%c", ERRORCODE_09_ERROR) 00E54F 1 41 58 89 00E552 1 00E552 1 60 .byte ERRORCODE_60_WRITE_FILE_OPEN 00E553 1 8A 03 84 htasc_floppy_error .sprintf("%c%c%c", ERRORCODE_0A_WRITE, ERRORCODE_03_FILE, ERRORCODE_04_OPEN) 00E556 1 00E556 1 63 .byte ERRORCODE_63_FILE_EXISTS 00E557 1 83 20 45 58 htasc_floppy_error .sprintf("%c EXISTS", ERRORCODE_03_FILE) 00E55B 1 49 53 54 D3 00E55F 1 00E55F 1 64 .byte ERRORCODE_64_FILE_TYPE_MISMATCH 00E560 1 83 20 54 59 htasc_floppy_error .sprintf("%c TYPE%c", ERRORCODE_03_FILE, ERRORCODE_05_MISMATCH) 00E564 1 50 45 85 00E567 1 00E567 1 65 .byte ERRORCODE_65_NO_BLOCK 00E568 1 CE 4F 20 42 htasc_floppy_error "NO BLOCK" 00E56C 1 4C 4F 43 CB 00E570 1 00E570 1 66 .byte ERRORCODE_66_ILLEGAL_TRACK_OR_SECTOR 00E571 1 67 .byte ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR 00E572 1 C9 4C 4C 45 htasc_floppy_error "ILLEGAL TRACK OR SECTOR" 00E576 1 47 41 4C 20 00E57A 1 54 52 41 43 00E589 1 00E589 1 61 .byte ERRORCODE_61_FILE_NOT_OPEN 00E58A 1 83 06 84 htasc_floppy_error .sprintf("%c%c%c", ERRORCODE_03_FILE, ERRORCODE_06_NOT, ERRORCODE_04_OPEN) 00E58D 1 00E58D 1 39 .byte ERRORCODE_39_FILE_NOT_FOUND 00E58E 1 62 .byte ERRORCODE_62_FILE_NOT_FOUND 00E58F 1 83 06 87 htasc_floppy_error .sprintf("%c%c%c", ERRORCODE_03_FILE, ERRORCODE_06_NOT, ERRORCODE_07_FOUND) 00E592 1 00E592 1 01 .byte ERRORCODE_01_FILES_SCRATCHED 00E593 1 83 53 20 53 htasc_floppy_error .sprintf("%cS SCRATCHED", ERRORCODE_03_FILE) 00E597 1 43 52 41 54 00E59B 1 43 48 45 C4 00E59F 1 00E59F 1 70 .byte ERRORCODE_70_NO_CHANNEL 00E5A0 1 CE 4F 20 43 htasc_floppy_error "NO CHANNEL" 00E5A4 1 48 41 4E 4E 00E5A8 1 45 CC 00E5AA 1 00E5AA 1 71 .byte ERRORCODE_71_DIR_ERROR 00E5AB 1 C4 49 52 89 htasc_floppy_error .sprintf("DIR%c", ERRORCODE_09_ERROR) 00E5AF 1 00E5AF 1 72 .byte ERRORCODE_72_DISK_FULL 00E5B0 1 88 20 46 55 htasc_floppy_error .sprintf("%c FULL", ERRORCODE_08_DISK) 00E5B4 1 4C CC 00E5B6 1 00E5B6 1 73 .byte ERRORCODE_73_IDENTIFY 00E5B7 1 .if CompileDrive >= DRIVE_1571CR 00E5B7 1 htasc_floppy_error "CBM DOS V3.1 1571" 00E5B7 1 .elseif CompileDrive >= DRIVE_1571 00E5B7 1 htasc_floppy_error "CBM DOS V3.0 1571" 00E5B7 1 .elseif CompileDrive >= DRIVE_1570 00E5B7 1 C3 42 4D 20 htasc_floppy_error "CBM DOS V3.0 1570" 00E5BB 1 44 4F 53 20 00E5BF 1 56 33 2E 30 00E5C8 1 .elseif CompileDrive >= DRIVE_1541 00E5C8 1 htasc_floppy_error "CBM DOS V2.6 1541" 00E5C8 1 .elseif CompileDrive >= DRIVE_1540 00E5C8 1 htasc_floppy_error "CBM DOS V2.6 V170" 00E5C8 1 .else 00E5C8 1 htasc_floppy_error "CBM DOS V2.6 2031" 00E5C8 1 .endif 00E5C8 1 00E5C8 1 74 .byte ERRORCODE_74_DRIVE_NOT_READY 00E5C9 1 C4 52 49 56 htasc_floppy_error .sprintf("DRIVE%c READY", ERRORCODE_06_NOT) 00E5CD 1 45 06 20 52 00E5D1 1 45 41 44 D9 00E5D5 1 00E5D5 1 ; pseudo-errorcodes which are used for re-occuring words: 00E5D5 1 00E5D5 1 09 .byte ERRORCODE_09_ERROR 00E5D6 1 C5 52 52 4F htasc_floppy_error "ERROR" 00E5DA 1 D2 00E5DB 1 00E5DB 1 0A .byte ERRORCODE_0A_WRITE 00E5DC 1 D7 52 49 54 htasc_floppy_error "WRITE" 00E5E0 1 C5 00E5E1 1 00E5E1 1 03 .byte ERRORCODE_03_FILE 00E5E2 1 C6 49 4C C5 htasc_floppy_error "FILE" 00E5E6 1 00E5E6 1 04 .byte ERRORCODE_04_OPEN 00E5E7 1 CF 50 45 CE htasc_floppy_error "OPEN" 00E5EB 1 00E5EB 1 05 .byte ERRORCODE_05_MISMATCH 00E5EC 1 CD 49 53 4D htasc_floppy_error "MISMATCH" 00E5F0 1 41 54 43 C8 00E5F4 1 00E5F4 1 06 .byte ERRORCODE_06_NOT 00E5F5 1 CE 4F D4 htasc_floppy_error "NOT" 00E5F8 1 00E5F8 1 07 .byte ERRORCODE_07_FOUND 00E5F9 1 C6 4F 55 4E htasc_floppy_error "FOUND" 00E5FD 1 C4 00E5FE 1 00E5FE 1 08 .byte ERRORCODE_08_DISK 00E5FF 1 C4 49 53 CB htasc_floppy_error "DISK" 00E603 1 00E603 1 0B .byte ERRORCODE_0B_RECORD 00E604 1 D2 45 43 4F htasc_floppy_error "RECORD" 00E608 1 52 C4 00E60A 1 00E60A 1 ErrorCodeTable_End: 00E60A 1 00E60A 1 LE60A: 00E60A 1 .if CompileDrive >= DRIVE_1570 00E60A 1 4C B9 A9 jmp LA9B9 00E60D 1 .else 00E60D 1 pha 00E60D 1 stx JOBNUM 00E60D 1 .endif 00E60D 1 00E60D 1 LE60D: 00E60D 1 8A txa 00E60E 1 0A asl a 00E60F 1 AA tax 00E610 1 B5 06 lda TRACK0,x 00E612 1 85 80 sta TRACK 00E614 1 B5 07 lda SECTOR0,x 00E616 1 85 81 sta SECTOR 00E618 1 68 pla 00E619 1 00E619 1 ; map error code $02 - $10 to external error codes $20-$29: 00E619 1 ; $10 --> $24 00E619 1 ; $0F --> $74 DRIVE NOT READY 00E619 1 ; everything else: $0X --> $2X - 2 00E619 1 29 0F and #$0F 00E61B 1 F0 08 beq @LE625 00E61D 1 C9 0F cmp #$0F 00E61F 1 D0 06 bne @LE627 00E621 1 A9 74 lda #ERRORCODE_74_DRIVE_NOT_READY 00E623 1 D0 08 bne @LE62D 00E625 1 @LE625: 00E625 1 A9 06 lda #(ERRORCODE_24_READ_ERROR + 2) ^ ERRORCODE_20_READ_ERROR 00E627 1 @LE627: 00E627 1 09 20 ora #ERRORCODE_20_READ_ERROR ; generate errorcode in range $20 .. $29 00E629 1 AA tax 00E62A 1 CA dex 00E62B 1 CA dex 00E62C 1 8A txa 00E62D 1 @LE62D: 00E62D 1 48 pha 00E62E 1 AD 2A 02 lda CMDNUM 00E631 1 C9 00 cmp #$00 00E633 1 D0 0F bne @LE644 00E635 1 A9 FF lda #$FF 00E637 1 8D 2A 02 sta CMDNUM 00E63A 1 68 pla 00E63B 1 20 C7 E6 jsr SetErrorCode 00E63E 1 20 42 D0 jsr LD042 00E641 1 4C 48 E6 jmp LE648 00E644 1 @LE644: 00E644 1 68 pla 00E645 1 00E645 1 LE645: 00E645 1 20 C7 E6 jsr SetErrorCode 00E648 1 LE648: 00E648 1 20 BD C1 jsr ClearCMDBUF 00E64B 1 A9 00 lda #$00 00E64D 1 8D F9 02 sta WBAM 00E650 1 20 2C C1 jsr LC12C 00E653 1 20 DA D4 jsr LD4DA 00E656 1 A9 00 lda #$00 00E658 1 85 A3 sta BUFTABCMD 00E65A 1 A2 45 ldx # blocking job loop 00E668 1 A5 79 lda LSNACT 00E66A 1 D0 1C bne LE688 00E66C 1 A5 7A lda TLKACT 00E66E 1 D0 10 bne LE680 00E670 1 A6 83 ldx SA 00E672 1 BD 2B 02 lda LINTAB,x 00E675 1 C9 FF cmp #$FF 00E677 1 F0 1F beq LE698 00E679 1 29 0F and #$0F 00E67B 1 85 82 sta LINDX 00E67D 1 4C 8E E6 jmp LE68E 00E680 1 LE680: 00E680 1 20 EB D0 jsr LD0EB 00E683 1 .if CompileDrive >= DRIVE_1541_05 00E683 1 EA EA EA FillNOP 3 00E686 1 .elseif CompileDrive >= DRIVE_1540 00E686 1 jsr LEA4E 00E686 1 .else 00E686 1 jsr LEA7C 00E686 1 .endif 00E686 1 D0 06 bne LE68E 00E688 1 LE688: 00E688 1 20 07 D1 jsr LD107 00E68B 1 .if CompileDrive >= DRIVE_1541_05 00E68B 1 EA EA EA FillNOP 3 00E68E 1 .elseif CompileDrive >= DRIVE_1540 00E68E 1 jsr LEA4E 00E68E 1 .else 00E68E 1 jsr LEA85 00E68E 1 .endif 00E68E 1 LE68E: 00E68E 1 20 25 D1 jsr LD125 00E691 1 C9 04 cmp #$04 00E693 1 B0 03 bcs LE698 00E695 1 20 27 D2 jsr LD227 00E698 1 LE698: 00E698 1 .if CompileDrive >= DRIVE_1570 00E698 1 4C 6B 83 jmp MainLoopEntry1570 00E69B 1 ; -------------------------- 00E69B 1 .else 00E69B 1 jmp MainLoopEntry 00E69B 1 ; -------------------------- 00E69B 1 .endif 00E69B 1 00E69B 1 OutputBinIntoBUFTABERR: 00E69B 1 00E69B 1 AA tax 00E69C 1 00E69C 1 ; convert decimal to ascii representation 00E69C 1 ; the original routine contained a bug: 00E69C 1 ; As it switches to decimal mode, the interrupts must be inhibited 00E69C 1 ; or some bad things could happen. 00E69C 1 ; the patches (which are identical, only located differently) 00E69C 1 ; contain exactly the same code as the original one, only prepended 00E69C 1 ; with "php; sei" as header and "plp" as footer 00E69C 1 ; 00E69C 1 .if CompileDrive >= DRIVE_1571_05 00E69C 1 00E69C 1 jmp Convert_Bin_To_BCD_Patch_157x 00E69C 1 CONVERT_BIN_TO_BCD_PARTIAL ; unused garbage from original routine 00E69C 1 00E69C 1 .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00E69C 1 00E69C 1 jmp Convert_Bin_To_BCD_Patch_154x 00E69C 1 CONVERT_BIN_TO_BCD_PARTIAL ; unused garbage from original routine 00E69C 1 00E69C 1 .else 00E69C 1 A9 00 F8 E0 CONVERT_BIN_TO_BCD 00E6A0 1 00 F0 07 18 00E6A4 1 69 01 CA 4C 00E6AA 1 .endif 00E6AA 1 00E6AA 1 ; Output a BCD value in A into BUFTABERR (+ y), incrementing y by 2. 00E6AA 1 ; 00E6AA 1 OutputBCDIntoBUFTABERR: 00E6AA 1 D8 cld 00E6AB 1 00E6AB 1 ; this seems to be a wrong calling point, but as D is always 0, it 00E6AB 1 ; does not do any harm here. 00E6AB 1 ; 00E6AB 1 OutputBCDIntoBUFTABERR_NoCLD: 00E6AB 1 AA tax ; remember A for later (low nibble) 00E6AC 1 00E6AC 1 ; extract high nibble by shifting 4 to the right 00E6AC 1 4A lsr a 00E6AD 1 4A lsr a 00E6AE 1 4A lsr a 00E6AF 1 4A lsr a 00E6B0 1 00E6B0 1 ; output high nibble 00E6B0 1 20 B4 E6 jsr @OutputBCDDigitInA 00E6B3 1 00E6B3 1 ; get back original value (for outputting the low nibble) 00E6B3 1 8A txa 00E6B4 1 00E6B4 1 @OutputBCDDigitInA: 00E6B4 1 29 0F and #$0F ; extract the low nibble 00E6B6 1 09 30 ora #'0' ; convert into ASCII 00E6B8 1 00E6B8 1 ; store the value into BUFTABERR + y 00E6B8 1 91 A5 sta (BUFTABERR),y 00E6BA 1 C8 iny 00E6BB 1 00E6BB 1 60 rts 00E6BC 1 ; ------------ 00E6BC 1 00E6BC 1 SetNoError: 00E6BC 1 20 23 C1 jsr LC123 00E6BF 1 00E6BF 1 A9 00 lda #$00 ; error code for: 00, OK,00,00 00E6C1 1 00E6C1 1 SetErrorCodeNoTS: 00E6C1 1 A0 00 ldy #$00 00E6C3 1 84 80 sty TRACK 00E6C5 1 84 81 sty SECTOR 00E6C7 1 00E6C7 1 SetErrorCode: 00E6C7 1 ; init error buffer address (in BUFTABERR) and write pointer (in Y) 00E6C7 1 A0 00 ldy #$00 00E6C9 1 A2 D5 ldx #ERRBUF 00E6CF 1 86 A6 stx BUFTABERR + 1 00E6D1 1 00E6D1 1 ; output value of A into BUFTABERR (in ASCII) 00E6D1 1 20 AB E6 jsr OutputBCDIntoBUFTABERR_NoCLD 00E6D4 1 00E6D4 1 ; add a comma into the buffer 00E6D4 1 A9 2C lda #',' 00E6D6 1 91 A5 sta (BUFTABERR),y 00E6D8 1 C8 iny 00E6D9 1 00E6D9 1 ; @@@ TODO 00E6D9 1 AD D5 02 lda ERRBUF 00E6DC 1 8D 43 02 sta L0243 00E6DF 1 00E6DF 1 ; get back the error number 00E6DF 1 ; (it was written into X in OutputBCDIntoBUFTABERR_NoCLD) 00E6DF 1 8A txa 00E6E0 1 00E6E0 1 ; output the error text for the error in A 00E6E0 1 20 06 E7 jsr OutputErrorText 00E6E3 1 00E6E3 1 ; add a comma into the buffer 00E6E3 1 A9 2C lda #',' 00E6E5 1 91 A5 sta (BUFTABERR),y 00E6E7 1 C8 iny 00E6E8 1 00E6E8 1 ; output track 00E6E8 1 A5 80 lda TRACK 00E6EA 1 20 9B E6 jsr OutputBinIntoBUFTABERR 00E6ED 1 00E6ED 1 ; add a comma into the buffer 00E6ED 1 A9 2C lda #',' 00E6EF 1 91 A5 sta (BUFTABERR),y 00E6F1 1 C8 iny 00E6F2 1 00E6F2 1 ; output sector 00E6F2 1 A5 81 lda SECTOR 00E6F4 1 20 9B E6 jsr OutputBinIntoBUFTABERR 00E6F7 1 00E6F7 1 ; calculate the end address of the error buffer output 00E6F7 1 88 dey 00E6F8 1 98 tya 00E6F9 1 18 clc 00E6FA 1 69 D5 adc #ErrorCodeTable 00E713 1 85 87 sta R0+1 00E715 1 8A txa ; get back remembered error code 00E716 1 00E716 1 A2 00 ldx #$00 00E718 1 00E718 1 @CompareErrorCode: 00E718 1 C1 86 cmp (R0,x) ; compare error code to error code in error table 00E71A 1 F0 21 beq @Found ; found the code? Then jump. 00E71C 1 00E71C 1 48 pha ; remember error code 00E71D 1 00E71D 1 20 75 E7 jsr ReadCurrentByteFromErrorTableAndIncrementAfterwards 00E720 1 90 05 bcc @RetryTestIfNotEndOfTable ; still more error codes here --> try next one 00E722 1 00E722 1 ; if we reach here, the current entry in the table has ended. 00E722 1 ; now, skip the error text and try the next entry. 00E722 1 00E722 1 @SkipErrorText: 00E722 1 20 75 E7 jsr ReadCurrentByteFromErrorTableAndIncrementAfterwards 00E725 1 90 FB bcc @SkipErrorText 00E727 1 00E727 1 @RetryTestIfNotEndOfTable: 00E727 1 ; check if we did not reach the end of the error table yet 00E727 1 00E727 1 A5 87 lda R0+1 ; check high byte 00E729 1 C9 E6 cmp #>ErrorCodeTable_End ; lower than end of table? 00E72B 1 90 08 bcc @CheckNextErrorCode ; yes, branch --> retry finding the code 00E72D 1 00E72D 1 D0 0A bne @ErrorTableExhausted ; bigger than end of table --> table is exhausted, abort search --> branch 00E72F 1 00E72F 1 A9 0A lda # branch 00E735 1 00E735 1 @CheckNextErrorCode: 00E735 1 68 pla ; get back the error code 00E736 1 4C 18 E7 jmp @CompareErrorCode ; and retry finding the code 00E739 1 00E739 1 @ErrorTableExhausted: 00E739 1 68 pla ; discard the error code, we did not find it 00E73A 1 4C 4D E7 jmp @RestoreFromStackAndExit 00E73D 1 00E73D 1 00E73D 1 @Found: 00E73D 1 00E73D 1 ; skip until first byte that has bit 7 set is reached. 00E73D 1 ; This way, skip other error codes and proceed to the error text. 00E73D 1 ; 00E73D 1 @SkipOtherErrorCodes: 00E73D 1 20 67 E7 jsr ReadNextByteFromErrorTable 00E740 1 90 FB bcc @SkipOtherErrorCodes ; bit 7 unset --> branch, read next one 00E742 1 00E742 1 @OutputNextCharacter: 00E742 1 20 54 E7 jsr @OutputCharacterOrPseudoError ; output the character or whole string into the buffer 00E745 1 20 67 E7 jsr ReadNextByteFromErrorTable ; get next byte of error table 00E748 1 90 F8 bcc @OutputNextCharacter ; bit 7 unset --> read next one 00E74A 1 20 54 E7 jsr @OutputCharacterOrPseudoError ; output the last character or while string into the buffer 00E74D 1 00E74D 1 @RestoreFromStackAndExit: 00E74D 1 ; restore pointer at R0 from stack 00E74D 1 68 pla 00E74E 1 85 87 sta R0+1 00E750 1 68 pla 00E751 1 85 86 sta R0 00E753 1 60 rts 00E754 1 00E754 1 ; ----------------------------- 00E754 1 @OutputCharacterOrPseudoError: 00E754 1 C9 20 cmp #ERRORCODE_NO_PSEUDO ; is this a real PETSCII character? 00E756 1 B0 0B bcs @StoreCharacter ; yes --> branch, store the character and proceed 00E758 1 00E758 1 ; we have a pseudo error code 00E758 1 ; thus, recall ourself recursively in order to fill the buffer with the pseudo error code 00E758 1 00E758 1 AA tax ; remember pseudo error code 00E759 1 00E759 1 A9 20 lda #' ' ; add a blank 00E75B 1 91 A5 sta (BUFTABERR),y ; into the error text buffere 00E75D 1 C8 iny ; proceed error text pointer 00E75E 1 00E75E 1 8A txa ; restore pseudo error code 00E75F 1 20 06 E7 jsr OutputErrorText ; and output the error text into the buffer 00E762 1 00E762 1 60 rts 00E763 1 00E763 1 @StoreCharacter: 00E763 1 91 A5 sta (BUFTABERR),y ; store the character into the error buffer 00E765 1 C8 iny ; proceed pointer into error buffer 00E766 1 60 rts ; done 00E767 1 00E767 1 ; read the next byte from the error table 00E767 1 ; for this, the pointer is advanced by one. 00E767 1 ; 00E767 1 ; C contains bit 7 of the read byte. 00E767 1 ; The read byte has bit 7 cleared. 00E767 1 ; 00E767 1 ReadNextByteFromErrorTable: 00E767 1 E6 86 inc R0 00E769 1 D0 02 bne ReadCurrentByteFromErrorTable 00E76B 1 E6 87 inc R0+1 00E76D 1 00E76D 1 ; read the current byte from the error table 00E76D 1 ; 00E76D 1 ; C contains bit 7 of the read byte. 00E76D 1 ; The read byte has bit 7 cleared. 00E76D 1 ; 00E76D 1 ReadCurrentByteFromErrorTable: 00E76D 1 A1 86 lda (R0,x) 00E76F 1 0A asl a 00E770 1 A1 86 lda (R0,x) 00E772 1 29 7F and #$7F 00E774 1 60 rts 00E775 1 00E775 1 ReadCurrentByteFromErrorTableAndIncrementAfterwards: 00E775 1 20 6D E7 jsr ReadCurrentByteFromErrorTable 00E778 1 E6 86 inc R0 00E77A 1 D0 02 bne @LE77E 00E77C 1 E6 87 inc R0+1 00E77E 1 @LE77E: 00E77E 1 60 rts 00E77F 1 00E77F 1 00E77F 1 LE77F: 00E77F 1 00E77F 1 .if CompileDrive >= DRIVE_1540 00E77F 1 .else 00E77F 1 00E77F 1 ; 2031 00E77F 1 00E77F 1 lda VBC_PB1 00E77F 1 ora #VBC_PB1_2031_DAV 00E77F 1 sta VBC_PB1 00E77F 1 lda VBC_DDRB1 00E77F 1 and # ~ VBC_PB1_2031_DAV 00E77F 1 sta VBC_DDRB1 00E77F 1 00E77F 1 .endif 00E77F 1 60 rts 00E780 1 00E780 1 CheckAutostart: 00E780 1 00E780 1 .if CompileDrive = DRIVE_1541C_03 00E780 1 FillNOP 34 00E780 1 rts 00E780 1 .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00E780 1 jmp TestATN 00E780 1 FillNOP 31 00E780 1 rts 00E780 1 .elseif CompileDrive >= DRIVE_1541_05 00E780 1 60 rts 00E781 1 EA EA EA EA FillNOP 33 00E785 1 EA EA EA EA 00E789 1 EA EA EA EA 00E7A2 1 60 rts 00E7A3 1 .elseif CompileDrive >= DRIVE_1540 00E7A3 1 lda VBC_PB1 00E7A3 1 tax 00E7A3 1 and #VBC_PB1_1540_CLOCKIN 00E7A3 1 beq LE77F 00E7A3 1 txa 00E7A3 1 and #VBC_PB1_1540_DATAIN 00E7A3 1 beq LE77F 00E7A3 1 cli ; allow processing of job loop 00E7A3 1 LE78E: 00E7A3 1 lda VBC_PB1 00E7A3 1 and #VBC_PB1_1540_DATAIN | VBC_PB1_1540_CLOCKIN 00E7A3 1 bne LE78E 00E7A3 1 inc F2CNT 00E7A3 1 inc CMDSIZ 00E7A3 1 lda #$2A 00E7A3 1 sta CMDBUF 00E7A3 1 jmp LE7A8 00E7A3 1 00E7A3 1 .else ; 2031 00E7A3 1 lda VBC_PA1 00E7A3 1 bne LE77F 00E7A3 1 00E7A3 1 lda VBC_DDRB1 00E7A3 1 ora #VBC_PB1_2031_DAV 00E7A3 1 sta VBC_DDRB1 00E7A3 1 lda VBC_PB1 00E7A3 1 ora #VBC_PB1_2031_DAV 00E7A3 1 sta VBC_PB1 00E7A3 1 lda VBC_PB1 00E7A3 1 and #VBC_PB1_2031_NRFD 00E7A3 1 beq LE77F 00E7A3 1 lda VBC_PB1 00E7A3 1 and # ~ VBC_PB1_2031_DAV 00E7A3 1 sta VBC_PB1 00E7A3 1 lda VBC_PB1 00E7A3 1 and #VBC_PB1_2031_NRFD 00E7A3 1 bne LE77F 00E7A3 1 LE7BB: 00E7A3 1 lda VBC_PA1 00E7A3 1 beq LE7BB 00E7A3 1 inc F2CNT 00E7A3 1 inc CMDSIZ 00E7A3 1 lda #$2A 00E7A3 1 sta CMDBUF 00E7A3 1 jsr LE77F 00E7A3 1 jmp LE7A8 00E7A3 1 00E7A3 1 .endif 00E7A3 1 00E7A3 1 cmd_ampersand: 00E7A3 1 00E7A3 1 .if CompileDrive >= DRIVE_1570 00E7A3 1 4C FE A5 jmp LA5FE 00E7A6 1 EA EA FillNOP 2 00E7A8 1 .else 00E7A8 1 lda #$8D 00E7A8 1 jsr SearchInCmdline 00E7A8 1 .endif 00E7A8 1 00E7A8 1 LE7A8: 00E7A8 1 20 58 F2 jsr NoOp 00E7AB 1 AD 78 02 lda F2CNT 00E7AE 1 48 pha 00E7AF 1 A9 01 lda #$01 00E7B1 1 8D 78 02 sta F2CNT 00E7B4 1 A9 FF lda #$FF 00E7B6 1 85 86 sta R0 00E7B8 1 20 4F C4 jsr LC44F 00E7BB 1 AD 80 02 lda FILTRK 00E7BE 1 D0 05 bne @LE7C5 00E7C0 1 A9 39 lda #ERRORCODE_39_FILE_NOT_FOUND 00E7C2 1 20 C8 C1 jsr GenerateErrorMessage 00E7C5 1 @LE7C5: 00E7C5 1 68 pla 00E7C6 1 8D 78 02 sta F2CNT 00E7C9 1 AD 80 02 lda FILTRK 00E7CC 1 85 80 sta TRACK 00E7CE 1 AD 85 02 lda FILSEC 00E7D1 1 85 81 sta SECTOR 00E7D3 1 A9 03 lda #$03 00E7D5 1 20 77 D4 jsr LD477 00E7D8 1 @LE7D8: 00E7D8 1 A9 00 lda #$00 00E7DA 1 85 87 sta R1 00E7DC 1 20 39 E8 jsr @LE839 00E7DF 1 85 88 sta R2 00E7E1 1 20 4B E8 jsr @LE84B 00E7E4 1 20 39 E8 jsr @LE839 00E7E7 1 85 89 sta R3 00E7E9 1 20 4B E8 jsr @LE84B 00E7EC 1 A5 86 lda R0 00E7EE 1 F0 0A beq @LE7FA 00E7F0 1 A5 88 lda R2 00E7F2 1 48 pha 00E7F3 1 A5 89 lda R3 00E7F5 1 48 pha 00E7F6 1 A9 00 lda #$00 00E7F8 1 85 86 sta R0 00E7FA 1 @LE7FA: 00E7FA 1 20 39 E8 jsr @LE839 00E7FD 1 85 8A sta R4 00E7FF 1 20 4B E8 jsr @LE84B 00E802 1 @LE802: 00E802 1 20 39 E8 jsr @LE839 00E805 1 A0 00 ldy #$00 00E807 1 91 88 sta (R2),y 00E809 1 20 4B E8 jsr @LE84B 00E80C 1 A5 88 lda R2 00E80E 1 18 clc 00E80F 1 69 01 adc #$01 00E811 1 85 88 sta R2 00E813 1 90 02 bcc @LE817 00E815 1 E6 89 inc R3 00E817 1 @LE817: 00E817 1 C6 8A dec R4 00E819 1 D0 E7 bne @LE802 00E81B 1 20 35 CA jsr LCA35 00E81E 1 A5 85 lda DATA 00E820 1 C5 87 cmp R1 00E822 1 F0 08 beq @LE82C 00E824 1 20 3E DE jsr LDE3E 00E827 1 A9 50 lda #ERRORCODE_50_RECORD_NOT_PRESENT 00E829 1 20 45 E6 jsr LE645 00E82C 1 @LE82C: 00E82C 1 A5 F8 lda EIOFLG 00E82E 1 D0 A8 bne @LE7D8 00E830 1 68 pla 00E831 1 85 89 sta R3 00E833 1 68 pla 00E834 1 85 88 sta R2 00E836 1 6C 88 00 jmp (R2) 00E839 1 @LE839: 00E839 1 20 35 CA jsr LCA35 00E83C 1 A5 F8 lda EIOFLG 00E83E 1 D0 08 bne @LE848 00E840 1 20 3E DE jsr LDE3E 00E843 1 A9 51 lda #ERRORCODE_51_OVERFLOW_IN_RECORD 00E845 1 20 45 E6 jsr LE645 00E848 1 @LE848: 00E848 1 A5 85 lda DATA 00E84A 1 60 rts 00E84B 1 00E84B 1 @LE84B: 00E84B 1 18 clc 00E84C 1 65 87 adc R1 00E84E 1 69 00 adc #$00 00E850 1 85 87 sta R1 00E852 1 60 rts 00E853 1 00E853 1 ; Set the ATN pending flag to mark that the bus must be processed 00E853 1 ; 00E853 1 SetATNPending: 00E853 1 AD 01 18 lda VBC_PA1 00E856 1 00E856 1 ; set the ATN pending flag to mark that the bus must be processed 00E856 1 00E856 1 A9 01 lda #$01 00E858 1 85 7C sta ATNPND 00E85A 1 60 rts 00E85B 1 00E85B 1 00E85B 1 ; This routine is called after an ATN was issued by the bus controller. 00E85B 1 ; It processes the bus and gets the command from it. 00E85B 1 ; 00E85B 1 ProcessBus: 00E85B 1 00E85B 1 78 sei ; disallow interrupts --> blocking job loop 00E85C 1 00E85C 1 ; clear the ATN pending flag (as we already entered this routine, we do not need it anymore 00E85C 1 00E85C 1 A9 00 lda #$00 00E85E 1 85 7C sta ATNPND 00E860 1 00E860 1 .if CompileDrive >= DRIVE_1540 00E860 1 00E860 1 85 79 sta LSNACT 00E862 1 85 7A sta TLKACT 00E864 1 00E864 1 .endif 00E864 1 00E864 1 ; set the stack pointer, effectively clearing the stack 00E864 1 ; (Thus, we will NOT return with an RTS) 00E864 1 ; 00E864 1 A2 45 ldx #= DRIVE_1540 00E867 1 00E867 1 A9 80 lda #$80 00E869 1 85 F8 sta EIOFLG 00E86B 1 85 7D sta ATNMOD 00E86D 1 20 B7 E9 jsr ClearClockOut 00E870 1 20 A5 E9 jsr SetDataOut 00E873 1 00E873 1 ; Acknowledge ATN by dropping DATA 00E873 1 AD 00 18 lda VBC_PB1 00E876 1 09 10 ora #VBC_PB1_1540_ATNA 00E878 1 8D 00 18 sta VBC_PB1 00E87B 1 00E87B 1 @LE87B: 00E87B 1 AD 00 18 lda VBC_PB1 00E87E 1 10 57 bpl LE8D7 00E880 1 29 04 and #VBC_PB1_1540_CLOCKIN 00E882 1 D0 F7 bne @LE87B 00E884 1 00E884 1 @LE884: 00E884 1 20 C9 E9 jsr LE9C9 00E887 1 C9 3F cmp #$3F 00E889 1 D0 06 bne @LE891 00E88B 1 A9 00 lda #$00 00E88D 1 85 79 sta LSNACT 00E88F 1 F0 71 beq LE902 00E891 1 @LE891: 00E891 1 C9 5F cmp #$5F 00E893 1 D0 06 bne @LE89B 00E895 1 A9 00 lda #$00 00E897 1 85 7A sta TLKACT 00E899 1 F0 67 beq LE902 00E89B 1 @LE89B: 00E89B 1 C5 78 cmp TLKADR 00E89D 1 D0 0A bne @LE8A9 00E89F 1 A9 01 lda #$01 00E8A1 1 85 7A sta TLKACT 00E8A3 1 A9 00 lda #$00 00E8A5 1 85 79 sta LSNACT 00E8A7 1 F0 29 beq @LE8D2 00E8A9 1 @LE8A9: 00E8A9 1 C5 77 cmp LSNADR 00E8AB 1 D0 0A bne @LE8B7 00E8AD 1 A9 01 lda #$01 00E8AF 1 85 79 sta LSNACT 00E8B1 1 A9 00 lda #$00 00E8B3 1 85 7A sta TLKACT 00E8B5 1 F0 1B beq @LE8D2 00E8B7 1 @LE8B7: 00E8B7 1 AA tax 00E8B8 1 29 60 and #$60 00E8BA 1 C9 60 cmp #$60 00E8BC 1 D0 3F bne LE8FD 00E8BE 1 8A txa 00E8BF 1 85 84 sta ORGSA 00E8C1 1 29 0F and #$0F 00E8C3 1 85 83 sta SA 00E8C5 1 A5 84 lda ORGSA 00E8C7 1 29 F0 and #$F0 00E8C9 1 C9 E0 cmp #$E0 00E8CB 1 D0 35 bne LE902 00E8CD 1 58 cli ; allow processing of job loop 00E8CE 1 20 C0 DA jsr LDAC0 00E8D1 1 78 sei ; disallow interrupts --> blocking job loop 00E8D2 1 @LE8D2: 00E8D2 1 2C 00 18 bit VBC_PB1 00E8D5 1 30 AD bmi @LE884 00E8D7 1 00E8D7 1 LE8D7: 00E8D7 1 A9 00 lda #$00 00E8D9 1 85 7D sta ATNMOD 00E8DB 1 AD 00 18 lda VBC_PB1 00E8DE 1 29 EF and # ~ VBC_PB1_1540_ATNA 00E8E0 1 8D 00 18 sta VBC_PB1 00E8E3 1 A5 79 lda LSNACT 00E8E5 1 F0 06 beq LE8ED 00E8E7 1 20 2E EA jsr LEA2E 00E8EA 1 .if CompileDrive >= DRIVE_1570 00E8EA 1 4C 6B 83 jmp MainLoopEntry1570 00E8ED 1 ; -------------------------- 00E8ED 1 .else 00E8ED 1 jmp MainLoopEntry 00E8ED 1 ; -------------------------- 00E8ED 1 .endif 00E8ED 1 00E8ED 1 LE8ED: 00E8ED 1 A5 7A lda TLKACT 00E8EF 1 F0 09 beq LE8FA 00E8F1 1 20 9C E9 jsr ClearDataOut 00E8F4 1 20 AE E9 jsr SetClockOut 00E8F7 1 20 09 E9 jsr LE909 00E8FA 1 LE8FA: 00E8FA 1 4C 4E EA jmp LEA4E 00E8FD 1 LE8FD: 00E8FD 1 A9 10 lda #VBC_PB1_1540_ATNA 00E8FF 1 8D 00 18 sta VBC_PB1 00E902 1 LE902: 00E902 1 2C 00 18 bit VBC_PB1 00E905 1 10 D0 bpl LE8D7 00E907 1 30 F9 bmi LE902 00E909 1 LE909: 00E909 1 78 sei ; disallow interrupts --> blocking job loop 00E90A 1 20 EB D0 jsr LD0EB 00E90D 1 B0 06 bcs LE915 00E90F 1 LE90F: 00E90F 1 A6 82 ldx LINDX 00E911 1 B5 F2 lda CHNRDY,x 00E913 1 30 01 bmi LE916 00E915 1 LE915: 00E915 1 60 rts 00E916 1 ; -------------- 00E916 1 00E916 1 LE916: 00E916 1 20 59 EA jsr TestATN 00E919 1 20 C0 E9 jsr ReadIecBusIn 00E91C 1 29 01 and #VBC_PB1_1540_DATAIN 00E91E 1 08 php 00E91F 1 20 B7 E9 jsr ClearClockOut 00E922 1 28 plp 00E923 1 F0 12 beq @LE937 00E925 1 00E925 1 @LE925: 00E925 1 20 59 EA jsr TestATN 00E928 1 20 C0 E9 jsr ReadIecBusIn 00E92B 1 29 01 and #VBC_PB1_1540_DATAIN 00E92D 1 D0 F6 bne @LE925 00E92F 1 A6 82 ldx LINDX 00E931 1 B5 F2 lda CHNRDY,x 00E933 1 29 08 and #$08 00E935 1 D0 14 bne @LE94B 00E937 1 @LE937: 00E937 1 20 59 EA jsr TestATN 00E93A 1 20 C0 E9 jsr ReadIecBusIn 00E93D 1 29 01 and #VBC_PB1_1540_DATAIN 00E93F 1 D0 F6 bne @LE937 00E941 1 @LE941: 00E941 1 20 59 EA jsr TestATN 00E944 1 20 C0 E9 jsr ReadIecBusIn 00E947 1 29 01 and #VBC_PB1_1540_DATAIN 00E949 1 F0 F6 beq @LE941 00E94B 1 @LE94B: 00E94B 1 20 AE E9 jsr SetClockOut 00E94E 1 20 59 EA jsr TestATN 00E951 1 20 C0 E9 jsr ReadIecBusIn 00E954 1 29 01 and #VBC_PB1_1540_DATAIN 00E956 1 D0 F3 bne @LE94B 00E958 1 A9 08 lda #$08 00E95A 1 85 98 sta CONT 00E95C 1 @LE95C: 00E95C 1 20 C0 E9 jsr ReadIecBusIn 00E95F 1 29 01 and #VBC_PB1_1540_DATAIN 00E961 1 D0 36 bne @LE999 00E963 1 A6 82 ldx LINDX 00E965 1 BD 3E 02 lda L023E,x 00E968 1 6A ror a 00E969 1 9D 3E 02 sta L023E,x 00E96C 1 B0 05 bcs @LE973 00E96E 1 20 A5 E9 jsr SetDataOut 00E971 1 D0 03 bne @LE976 00E973 1 @LE973: 00E973 1 20 9C E9 jsr ClearDataOut 00E976 1 @LE976: 00E976 1 20 B7 E9 jsr ClearClockOut 00E979 1 .if CompileDrive >= DRIVE_1541_01 00E979 1 A5 23 lda DRVTRK + 1 00E97B 1 D0 03 bne @LE980 00E97D 1 20 F3 FE jsr LFEF3 00E980 1 @LE980: 00E980 1 20 FB FE jsr LFEFB 00E983 1 .else 00E983 1 FillNOP 4 00E983 1 jsr SetClockOut 00E983 1 jsr ClearDataOut 00E983 1 .endif 00E983 1 C6 98 dec CONT 00E985 1 D0 D5 bne @LE95C 00E987 1 @LE987: 00E987 1 20 59 EA jsr TestATN 00E98A 1 20 C0 E9 jsr ReadIecBusIn 00E98D 1 29 01 and #VBC_PB1_1540_DATAIN 00E98F 1 F0 F6 beq @LE987 00E991 1 58 cli ; allow processing of job loop 00E992 1 20 AA D3 jsr LD3AA 00E995 1 78 sei ; disallow interrupts --> blocking job loop 00E996 1 4C 0F E9 jmp LE90F 00E999 1 ; --------------------------------- 00E999 1 @LE999: 00E999 1 4C 4E EA jmp LEA4E 00E99C 1 ; --------------------------------- 00E99C 1 00E99C 1 ClearDataOut: 00E99C 1 AD 00 18 lda VBC_PB1 00E99F 1 29 FD and # ~ VBC_PB1_1540_DATAOUT 00E9A1 1 8D 00 18 sta VBC_PB1 00E9A4 1 60 rts 00E9A5 1 ; --------------------------------- 00E9A5 1 00E9A5 1 SetDataOut: 00E9A5 1 AD 00 18 lda VBC_PB1 00E9A8 1 09 02 ora #VBC_PB1_1540_DATAOUT 00E9AA 1 8D 00 18 sta VBC_PB1 00E9AD 1 60 rts 00E9AE 1 ; --------------------------------- 00E9AE 1 00E9AE 1 SetClockOut: 00E9AE 1 AD 00 18 lda VBC_PB1 00E9B1 1 09 08 ora #VBC_PB1_1540_CLOCKOUT 00E9B3 1 8D 00 18 sta VBC_PB1 00E9B6 1 60 rts 00E9B7 1 ; --------------------------------- 00E9B7 1 00E9B7 1 ClearClockOut: 00E9B7 1 AD 00 18 lda VBC_PB1 00E9BA 1 29 F7 and # ~ VBC_PB1_1540_CLOCKOUT 00E9BC 1 8D 00 18 sta VBC_PB1 00E9BF 1 60 rts 00E9C0 1 ; --------------------------------- 00E9C0 1 00E9C0 1 ReadIecBusIn: 00E9C0 1 AD 00 18 lda VBC_PB1 00E9C3 1 CD 00 18 cmp VBC_PB1 00E9C6 1 D0 F8 bne ReadIecBusIn 00E9C8 1 60 rts 00E9C9 1 ; --------------------------------- 00E9C9 1 00E9C9 1 LE9C9: 00E9C9 1 A9 08 lda #$08 00E9CB 1 85 98 sta CONT 00E9CD 1 @LE9CD: 00E9CD 1 20 59 EA jsr TestATN 00E9D0 1 20 C0 E9 jsr ReadIecBusIn 00E9D3 1 29 04 and #VBC_PB1_1540_CLOCKIN 00E9D5 1 D0 F6 bne @LE9CD 00E9D7 1 00E9D7 1 20 9C E9 jsr ClearDataOut 00E9DA 1 00E9DA 1 A9 01 lda #>$0100 00E9DC 1 .if CompileDrive >= DRIVE_1541_05 00E9DC 1 4C 20 FF jmp LFF20 00E9DF 1 .else 00E9DF 1 sta VBC_T1HC1 00E9DF 1 .endif 00E9DF 1 LE9DF: 00E9DF 1 20 59 EA jsr TestATN 00E9E2 1 AD 0D 18 lda VBC_IFR1 00E9E5 1 29 40 and #VIA_IFR_B_T1 00E9E7 1 D0 09 bne @LE9F2 00E9E9 1 20 C0 E9 jsr ReadIecBusIn 00E9EC 1 29 04 and #VBC_PB1_1540_CLOCKIN 00E9EE 1 F0 EF beq LE9DF 00E9F0 1 D0 19 bne @LEA0B 00E9F2 1 ; ---------------------- 00E9F2 1 00E9F2 1 @LE9F2: 00E9F2 1 20 A5 E9 jsr SetDataOut 00E9F5 1 A2 0A ldx #$0A 00E9F7 1 @LE9F7: 00E9F7 1 CA dex 00E9F8 1 D0 FD bne @LE9F7 00E9FA 1 20 9C E9 jsr ClearDataOut 00E9FD 1 @LE9FD: 00E9FD 1 20 59 EA jsr TestATN 00EA00 1 20 C0 E9 jsr ReadIecBusIn 00EA03 1 29 04 and #VBC_PB1_1540_CLOCKIN 00EA05 1 F0 F6 beq @LE9FD 00EA07 1 A9 00 lda #$00 00EA09 1 85 F8 sta EIOFLG 00EA0B 1 @LEA0B: 00EA0B 1 AD 00 18 lda VBC_PB1 00EA0E 1 .if CompileDrive >= DRIVE_1541_02 00EA0E 1 49 01 eor #VBC_PB1_1540_DATAIN 00EA10 1 4A lsr a 00EA11 1 29 02 and #VBC_PB1_1540_CLOCKIN / 2 00EA13 1 D0 F6 bne @LEA0B 00EA15 1 EA EA EA FillNOP 3 00EA18 1 .else 00EA18 1 and #VBC_PB1_1540_CLOCKIN 00EA18 1 bne @LEA0B 00EA18 1 lda VBC_PB1 00EA18 1 eor #VBC_PB1_1540_DATAIN 00EA18 1 lsr a 00EA18 1 .endif 00EA18 1 66 85 ror DATA 00EA1A 1 @LEA1A: 00EA1A 1 20 59 EA jsr TestATN 00EA1D 1 20 C0 E9 jsr ReadIecBusIn 00EA20 1 29 04 and #VBC_PB1_1540_CLOCKIN 00EA22 1 F0 F6 beq @LEA1A 00EA24 1 C6 98 dec CONT 00EA26 1 D0 E3 bne @LEA0B 00EA28 1 20 A5 E9 jsr SetDataOut 00EA2B 1 A5 85 lda DATA 00EA2D 1 60 rts 00EA2E 1 ; --------------------------------------- 00EA2E 1 00EA2E 1 LEA2E: 00EA2E 1 78 sei ; disallow interrupts --> blocking job loop 00EA2F 1 20 07 D1 jsr LD107 00EA32 1 B0 05 bcs @LEA39 00EA34 1 B5 F2 lda CHNRDY,x 00EA36 1 6A ror a 00EA37 1 B0 0B bcs @LEA44 00EA39 1 @LEA39: 00EA39 1 A5 84 lda ORGSA 00EA3B 1 29 F0 and #$F0 00EA3D 1 C9 F0 cmp #$F0 00EA3F 1 F0 03 beq @LEA44 00EA41 1 4C 4E EA jmp LEA4E 00EA44 1 @LEA44: 00EA44 1 20 C9 E9 jsr LE9C9 00EA47 1 58 cli ; allow processing of job loop 00EA48 1 20 B7 CF jsr LCFB7 00EA4B 1 4C 2E EA jmp LEA2E 00EA4E 1 ; --------------- 00EA4E 1 00EA4E 1 LEA4E: 00EA4E 1 A9 00 lda #0 00EA50 1 8D 00 18 sta VBC_PB1 00EA53 1 .if CompileDrive >= DRIVE_1570 00EA53 1 4C 6B 83 jmp MainLoopEntry1570 00EA56 1 ; -------------------------- 00EA56 1 .else 00EA56 1 jmp MainLoopEntry 00EA56 1 ; -------------------------- 00EA56 1 .endif 00EA56 1 00EA56 1 ; @@@ TODO unused leftover 00EA56 1 4C 5B E8 jmp ProcessBus 00EA59 1 ; -------------------------- 00EA59 1 00EA59 1 TSTATN: 00EA59 1 TestATN: 00EA59 1 A5 7D lda ATNMOD 00EA5B 1 F0 06 beq @LEA63 00EA5D 1 AD 00 18 lda VBC_PB1 00EA60 1 10 09 bpl @LEA6B 00EA62 1 @LEA62: 00EA62 1 60 rts 00EA63 1 @LEA63: 00EA63 1 AD 00 18 lda VBC_PB1 00EA66 1 10 FA bpl @LEA62 00EA68 1 00EA68 1 .if CompileDrive >= DRIVE_1570 00EA68 1 4C B3 A7 jmp ProcessBus1570 00EA6B 1 .elseif CompileDrive >= DRIVE_1541C_02 00EA6B 1 jmp Patch_ClearPALatch_ProcessBus 00EA6B 1 .else 00EA6B 1 jmp ProcessBus 00EA6B 1 .endif 00EA6B 1 00EA6B 1 @LEA6B: 00EA6B 1 00EA6B 1 .if CompileDrive >= DRIVE_1570 00EA6B 1 4C AC A9 jmp LA9AC 00EA6E 1 .else 00EA6E 1 jmp LE8D7 00EA6E 1 .endif 00EA6E 1 00EA6E 1 .else 00EA6E 1 00EA6E 1 ; 2031 00EA6E 1 00EA6E 1 lda #VBC_PB1_2031_DAV | VBC_PB1_2031_EOI |VBC_PB1_2031_NDAC 00EA6E 1 ora VBC_PB1 00EA6E 1 and # ~ (VBC_PB1_2031_TE | VBC_PB1_2031_NRFD) 00EA6E 1 sta VBC_PB1 00EA6E 1 00EA6E 1 lda #$00 00EA6E 1 sta VBC_DDRA1 ; PA (DIO) as input 00EA6E 1 00EA6E 1 lda #VBC_PB1_2031_ATNA | VBC_PB1_2031_NRFD | VBC_PB1_2031_NDAC | VBC_PB1_2031_TE 00EA6E 1 sta VBC_DDRB1 00EA6E 1 00EA6E 1 lda #$FF 00EA6E 1 sta VBC_PA1 00EA6E 1 00EA6E 1 LE8AA: 00EA6E 1 lda VBC_PB1 00EA6E 1 and # ~ VBC_PB1_2031_NDAC 00EA6E 1 ora #VBC_PB1_2031_NRFD | VBC_PB1_2031_ATNA 00EA6E 1 sta VBC_PB1 00EA6E 1 00EA6E 1 @LE8B4: 00EA6E 1 bit VBC_PB1 00EA6E 1 bvc @LE8BD ; DAV unset -> branch 00EA6E 1 bmi @LE8B4 ; -ATN set (ATN unset) -> branch 00EA6E 1 bpl @LE93A ; -ATN unsert (ATN set) -> branch 00EA6E 1 ; ----------------- 00EA6E 1 00EA6E 1 @LE8BD: 00EA6E 1 lda # ~ VBC_PB1_2031_NRFD 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 and #VBC_PB1_2031_EOI 00EA6E 1 sta EIOFLG 00EA6E 1 lda VBC_PA1 00EA6E 1 eor #$FF 00EA6E 1 sta ICMD 00EA6E 1 lda #VBC_PB1_2031_NDAC 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 ldy #$00 00EA6E 1 lda ICMD 00EA6E 1 and #IEEE_LISTEN | IEEE_TALK 00EA6E 1 cmp #IEEE_TALK 00EA6E 1 beq @LE90B 00EA6E 1 cmp #IEEE_LISTEN 00EA6E 1 beq @LE8EC 00EA6E 1 cmp #IEEE_OPEN 00EA6E 1 beq @LE919 00EA6E 1 bne @LE932 00EA6E 1 ; ------------------------- 00EA6E 1 00EA6E 1 @LE8EC: 00EA6E 1 lda ICMD 00EA6E 1 cmp LSNADR 00EA6E 1 beq @LE8FD 00EA6E 1 cmp #$3F 00EA6E 1 bne @LE8F8 00EA6E 1 sty LSNACT 00EA6E 1 @LE8F8: 00EA6E 1 sty ADRSED 00EA6E 1 jmp @LE932 00EA6E 1 00EA6E 1 @LE8FD: 00EA6E 1 sta LSNACT 00EA6E 1 sty TLKACT 00EA6E 1 @LE901: 00EA6E 1 lda #$20 00EA6E 1 sta SA 00EA6E 1 sta ORGSA 00EA6E 1 sta ADRSED 00EA6E 1 bne @LE932 00EA6E 1 @LE90B: 00EA6E 1 sty TLKACT 00EA6E 1 lda ICMD 00EA6E 1 cmp TLKADR 00EA6E 1 bne @LE8F8 00EA6E 1 sta TLKACT 00EA6E 1 sty LSNACT 00EA6E 1 beq @LE901 00EA6E 1 @LE919: 00EA6E 1 lda ADRSED 00EA6E 1 beq @LE932 00EA6E 1 lda ICMD 00EA6E 1 sta ORGSA 00EA6E 1 pha 00EA6E 1 and #$0F 00EA6E 1 sta SA 00EA6E 1 pla 00EA6E 1 and #$F0 00EA6E 1 cmp #$E0 00EA6E 1 bne @LE932 00EA6E 1 cli ; allow processing of job loop 00EA6E 1 jsr LDAC0 00EA6E 1 sei ; disallow interrupts --> blocking job loop 00EA6E 1 @LE932: 00EA6E 1 bit VBC_PB1 00EA6E 1 bvc @LE932 00EA6E 1 jmp LE8AA 00EA6E 1 @LE93A: 00EA6E 1 lda LSNACT 00EA6E 1 beq @LE94C 00EA6E 1 lda # ~ (VBC_PB1_2031_ATNA | VBC_PB1_2031_NRFD) 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 jsr LE960 00EA6E 1 jmp MainLoopEntry 00EA6E 1 ; --------------- 00EA6E 1 00EA6E 1 @LE94C: 00EA6E 1 lda # ~ (VBC_PB1_2031_ATNA | VBC_PB1_2031_NDAC) 00EA6E 1 and VBC_PB1 00EA6E 1 ora #VBC_PB1_2031_NDAC 00EA6E 1 sta VBC_PB1 00EA6E 1 lda TLKACT 00EA6E 1 beq @LE95D 00EA6E 1 jsr LEA0A 00EA6E 1 @LE95D: 00EA6E 1 jmp MainLoopEntry 00EA6E 1 ; ------------------ 00EA6E 1 00EA6E 1 LE960: 00EA6E 1 sei ; disallow interrupts --> blocking job loop 00EA6E 1 lda #VBC_PB1_2031_NRFD 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 @LE969: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LE998 00EA6E 1 bvs @LE969 00EA6E 1 jsr LD107 00EA6E 1 bcs @LE97A 00EA6E 1 lda CHNRDY,x 00EA6E 1 ror a 00EA6E 1 bcs LE9CD 00EA6E 1 @LE97A: 00EA6E 1 lda ORGSA 00EA6E 1 and #$F0 00EA6E 1 cmp #$F0 00EA6E 1 beq LE9CD 00EA6E 1 lda SA 00EA6E 1 cmp #$01 00EA6E 1 beq LE99B 00EA6E 1 @LE988: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LE998 00EA6E 1 bvc @LE988 00EA6E 1 lda # ~ VBC_PB1_2031_NDAC 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 rts 00EA6E 1 LE998: 00EA6E 1 jmp ProcessBus 00EA6E 1 ; ----------------------- 00EA6E 1 00EA6E 1 LE99B: 00EA6E 1 sei ; disallow interrupts --> blocking job loop 00EA6E 1 lda # ~ VBC_PB1_2031_NRFD 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 lda #VBC_PB1_2031_NDAC 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 @LE9AC: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LE998 00EA6E 1 bvc @LE9AC 00EA6E 1 lda VBC_PB1 00EA6E 1 and # ~ VBC_PB1_2031_NDAC 00EA6E 1 sta VBC_PB1 00EA6E 1 lda #VBC_PB1_2031_NRFD 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 @LE9C3: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LE998 00EA6E 1 bvc @LE9C3 00EA6E 1 jmp LE99B 00EA6E 1 ; ------------------- 00EA6E 1 00EA6E 1 LE9CD: 00EA6E 1 lda # ~ VBC_PB1_2031_NRFD 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 and #VBC_PB1_2031_EOI 00EA6E 1 sta EIOFLG 00EA6E 1 lda VBC_PA1 00EA6E 1 eor #$FF 00EA6E 1 sta DATA 00EA6E 1 sei ; disallow interrupts --> blocking job loop 00EA6E 1 lda #VBC_PB1_2031_NDAC 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 LE9E9: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LE998 00EA6E 1 bvc LE9E9 00EA6E 1 lda # ~ VBC_PB1_2031_NDAC 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 cli ; allow processing of job loop 00EA6E 1 jsr LCFB7 00EA6E 1 jmp LE960 00EA6E 1 ; -------------------------- 00EA6E 1 LE9FF: 00EA6E 1 lda #VBC_PB1_2031_DAV | VBC_PB1_2031_EOI 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 jmp MainLoopEntry 00EA6E 1 ; -------------------------- 00EA6E 1 LEA0A: 00EA6E 1 sei ; disallow interrupts --> blocking job loop 00EA6E 1 jsr LD0EB 00EA6E 1 bcs LEA16 00EA6E 1 LEA10: 00EA6E 1 ldx LINDX 00EA6E 1 lda CHNRDY,x 00EA6E 1 bmi LEA17 00EA6E 1 LEA16: 00EA6E 1 rts 00EA6E 1 LEA17: 00EA6E 1 lda #VBC_PB1_2031_DAV | VBC_PB1_2031_TE | VBC_PB1_2031_EOI | VBC_PB1_2031_ATNA 00EA6E 1 sta VBC_DDRB1 00EA6E 1 lda #$FF 00EA6E 1 sta VBC_DDRA1 00EA6E 1 lda VBC_PB1 00EA6E 1 ora #VBC_PB1_2031_TE 00EA6E 1 sta VBC_PB1 00EA6E 1 lda #VBC_PB1_2031_NRFD 00EA6E 1 LEA2B: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LEA79 00EA6E 1 beq LEA2B 00EA6E 1 lda L023E,x 00EA6E 1 eor #$FF 00EA6E 1 sta VBC_PA1 00EA6E 1 lda CHNRDY,x 00EA6E 1 ora # ~ (VBC_PB1_2031_DAV | VBC_PB1_2031_EOI) 00EA6E 1 and VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 LEA44: 00EA6E 1 lda VBC_PB1 00EA6E 1 bmi LEA79 00EA6E 1 and #VBC_PB1_2031_NRFD | VBC_PB1_2031_NDAC 00EA6E 1 cmp #VBC_PB1_2031_NRFD | VBC_PB1_2031_NDAC 00EA6E 1 beq LE9FF 00EA6E 1 and #VBC_PB1_2031_NRFD 00EA6E 1 bne LEA44 00EA6E 1 cli ; allow processing of job loop 00EA6E 1 jsr LD3AA 00EA6E 1 sei ; disallow interrupts --> blocking job loop 00EA6E 1 lda #VBC_PB1_2031_NDAC 00EA6E 1 LEA5A: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LEA79 00EA6E 1 beq LEA5A 00EA6E 1 lda #$FF 00EA6E 1 sta VBC_PA1 00EA6E 1 lda #VBC_PB1_2031_DAV | VBC_PB1_2031_EOI 00EA6E 1 ora VBC_PB1 00EA6E 1 sta VBC_PB1 00EA6E 1 lda #VBC_PB1_2031_NDAC 00EA6E 1 LEA70: 00EA6E 1 bit VBC_PB1 00EA6E 1 bmi LEA79 00EA6E 1 bne LEA70 00EA6E 1 beq LEA10 00EA6E 1 ; ----------------- 00EA6E 1 00EA6E 1 LEA79: 00EA6E 1 jmp ProcessBus 00EA6E 1 LEA7C: 00EA6E 1 lda VBC_PB1 00EA6E 1 ora #VBC_PB1_2031_DAV 00EA6E 1 sta VBC_PB1 00EA6E 1 rts 00EA6E 1 LEA85: 00EA6E 1 lda #VBC_PB1_2031_NRFD 00EA6E 1 ora VBC_PB1 00EA6E 1 and # ~ VBC_PB1_2031_ATNA 00EA6E 1 sta VBC_PB1 00EA6E 1 rts 00EA6E 1 .endif 00EA6E 1 00EA6E 1 00EA6E 1 ; Power On Self Test (POST) failed, signal it with blinking LEDs 00EA6E 1 ; This routine enters an endless loop. That is, the floppy 00EA6E 1 ; is blocked until a RESET occurs 00EA6E 1 ; 00EA6E 1 ; This routine entry point is used to tell about a ZP failure 00EA6E 1 ; 00EA6E 1 PostFailErrorZP: 00EA6E 1 A2 00 ldx #$00 ; number of blinks to signal (-1; that is, 0 means 1 blink) 00EA70 1 2C .byte ASM_BIT3 00EA71 1 00EA71 1 ; The routine entry point if used to tell about any non-ZP failure. 00EA71 1 ; For this, the number of blinks to perform is given as an input 00EA71 1 ; in T0 00EA71 1 ; 00EA71 1 PostFailError: 00EA71 1 A6 6F ldx T0 ; number of blinks to signal (-1; that is, T0 = 3 means 4 blinks) 00EA73 1 00EA73 1 9A txs ; remember it in the SP 00EA74 1 ; we do not need SP anymore, as we will not return 00EA74 1 ; thus, this is not a problem 00EA74 1 PostFailErrorRestartSequence: 00EA74 1 BA tsx ; get number of blinks to signal back to X 00EA75 1 00EA75 1 PostFailErrorLoop: 00EA75 1 00EA75 1 ; switch on the LED of drive 0 (the only one) 00EA75 1 00EA75 1 A9 08 lda #VDC_PB2_DRIVE0LED 00EA77 1 0D 00 1C ora VDC_PB2 00EA7A 1 00EA7A 1 .macro PATCH_POSTFAILERROR 00EA7A 1 sta VDC_PB2 00EA7A 1 sta VDC_DDRB2 00EA7A 1 .endmacro 00EA7A 1 00EA7A 1 .if CompileDrive >= DRIVE_1540 00EA7A 1 4C EA FE jmp PATCH_PostFailError 00EA7D 1 .else 00EA7D 1 PATCH_POSTFAILERROR 00EA7D 1 .endif 00EA7D 1 00EA7D 1 PATCH_PostFailError_END: 00EA7D 1 98 tya ; A = 0 00EA7E 1 00EA7E 1 ; perform a delay so the LED blinking will be visible 00EA7E 1 00EA7E 1 @DelayOuter: 00EA7E 1 18 clc 00EA7F 1 00EA7F 1 @DelayInner: 00EA7F 1 69 01 adc #$01 00EA81 1 D0 FC bne @DelayInner 00EA83 1 00EA83 1 88 dey 00EA84 1 D0 F8 bne @DelayOuter 00EA86 1 00EA86 1 ; switch off the LED of drive 0 (the only one) 00EA86 1 00EA86 1 AD 00 1C lda VDC_PB2 00EA89 1 29 F7 and # ~ VDC_PB2_DRIVELEDS 00EA8B 1 8D 00 1C sta VDC_PB2 00EA8E 1 00EA8E 1 @AdditionalEndDelay: 00EA8E 1 98 tya ; A = 0 00EA8F 1 00EA8F 1 ; perform a delay so the LED blinking will be visible 00EA8F 1 00EA8F 1 @DelayOuter2: 00EA8F 1 18 clc 00EA90 1 @DelayInner2: 00EA90 1 69 01 adc #$01 00EA92 1 D0 FC bne @DelayInner2 00EA94 1 00EA94 1 88 dey 00EA95 1 D0 F8 bne @DelayOuter2 00EA97 1 00EA97 1 00EA97 1 ; find out if the have to blink some more 00EA97 1 00EA97 1 CA dex ; decrement number of blinks to perform 00EA98 1 10 DB bpl PostFailErrorLoop ; >= 0 --> branch, there are still blinks to perform 00EA9A 1 00EA9A 1 ; here, the counter reached -1. Do an additional delay for two complete blink cycles 00EA9A 1 ; to make sure the additional delay is visible, to give an impression of blink counts 00EA9A 1 ; 00EA9A 1 E0 FC cpx #-4 00EA9C 1 D0 F0 bne @AdditionalEndDelay 00EA9E 1 F0 D4 beq PostFailErrorRestartSequence ; restart the complete sequence 00EAA0 1 ; -------------------- 00EAA0 1 00EAA0 1 00EAA0 1 ; This is the RESET routine of the 6502 00EAA0 1 00EAA0 1 RESET: 00EAA0 1 78 sei ; make sure we are not disturbed by interrupts 00EAA1 1 D8 cld ; make sure we are not in decimal mode 00EAA2 1 00EAA2 1 ; initialize the bus controller 00EAA2 1 00EAA2 1 A2 66 ldx #INIT_VBC_DDRA1 00EAA4 1 00EAA4 1 .if CompileDrive < DRIVE_1540 00EAA4 1 00EAA4 1 ; in case of the 2031, set DIO1-8 to high if configured as outputs 00EAA4 1 00EAA4 1 stx VBC_PA1 00EAA4 1 .endif 00EAA4 1 00EAA4 1 .if CompileDrive >= DRIVE_1541_05 00EAA4 1 4C 10 FF jmp PATCH_INIT_BC ; set the DDR of port A, as well as DDR of port B 00EAA7 1 ; (more patches for 1570/1571, and even more for 1571CR) 00EAA7 1 .else 00EAA7 1 stx VBC_DDRA1 ; set the DDR of the port A 00EAA7 1 .endif 00EAA7 1 00EAA7 1 PATCH_INIT_BC_END: 00EAA7 1 E8 inx 00EAA8 1 00EAA8 1 .if CompileDrive < DRIVE_1540 00EAA8 1 ; the 2031 initialises its port lines here. 00EAA8 1 ; It seems the 1540 "forgot" this; that's why the above patch PATCH_INIT_BC is needed in 1541-05 ROMs (and above) 00EAA8 1 00EAA8 1 lda #VBC_PB1_2031_NATN | VBC_PB1_2031_DAV | VBC_PB1_2031_EOI | VBC_PB1_2031_NDAC | VBC_PB1_2031_NRFD 00EAA8 1 sta VBC_PB1 00EAA8 1 00EAA8 1 ; set DDR for outputs ports 00EAA8 1 00EAA8 1 lda #VBC_PB1_2031_ATNA | VBC_PB1_2031_TE | VBC_PB1_2031_HDSEL 00EAA8 1 sta VBC_DDRB1 00EAA8 1 .endif 00EAA8 1 00EAA8 1 ; test and clear zeropage memory 00EAA8 1 00EAA8 1 ; equivalent of: 00EAA8 1 ; for (uint8_t * i=0; i < 256; i++) { 00EAA8 1 ; *i = (uint8_t) i; 00EAA8 1 ; } 00EAA8 1 ; that is, store into every ZP location a number which is the same as its own address 00EAA8 1 00EAA8 1 A0 00 ldy #$00 00EAAA 1 A2 00 ldx #$00 00EAAC 1 @PresetZPLocations: 00EAAC 1 8A txa 00EAAD 1 95 00 sta $0,x 00EAAF 1 E8 inx 00EAB0 1 D0 FA bne @PresetZPLocations 00EAB2 1 00EAB2 1 ; now, check if every ZP location still holds the value just written 00EAB2 1 @CheckZPLocation: 00EAB2 1 8A txa 00EAB3 1 D5 00 cmp $0,x ; is the value the one written in the loop above? 00EAB5 1 D0 B7 bne PostFailErrorZP ; no -> ZP error -> jump, error blinking for error in ZP 00EAB7 1 00EAB7 1 ; now, increment value 256 times, resulting in the same value because of wrap-around 00EAB7 1 @Inc256Times: 00EAB7 1 F6 00 inc $0,x 00EAB9 1 C8 iny 00EABA 1 D0 FB bne @Inc256Times 00EABC 1 00EABC 1 ; check: Do we *still* hold the value from above? 00EABC 1 D5 00 cmp $0,x 00EABE 1 D0 AE bne PostFailErrorZP ; no -> ZP error -> jump, error blinking for error in ZP 00EAC0 1 00EAC0 1 94 00 sty $0,x ; set ZP location to 0. (Y == 0 after the previous loop at @Inc256Times) 00EAC2 1 B5 00 lda $0,x ; get back the value. 00EAC4 1 D0 A8 bne PostFailErrorZP ; not 0 -> ZP error -> jump, error blinking for error in ZP 00EAC6 1 00EAC6 1 E8 inx ; test next ZP location 00EAC7 1 D0 E9 bne @CheckZPLocation ; and proceed until all ZP locations have been checked. 00EAC9 1 00EAC9 1 00EAC9 1 ; (X == 0) 00EAC9 1 00EAC9 1 ; from here on, all ZP locations are initialised to 0. 00EAC9 1 00EAC9 1 ; calculate ROM checksum(s) 00EAC9 1 ; 00EAC9 1 ; The details vary among the different drives, as there are different types of ROMs 00EAC9 1 ; involved. 00EAC9 1 ; the 2031/1540/1541 test $C000-$DFFF, and then $E000-$FFFF 00EAC9 1 ; 00EAC9 1 ; the 1570 and 1571 test $8002-$FFFF in one call. 00EAC9 1 ; BUG: the 1571-03 ROM has a bug, it does not test the area $8002-$8101; thus, it only tests $8102-$FFFF 00EAC9 1 ; 00EAC9 1 @CheckNextROM: 00EAC9 1 E6 6F inc T0 ; increment error blink counter for POST failures 00EACB 1 00EACB 1 ; set the high byte of the ROM area to test 00EACB 1 00EACB 1 .if CompileDrive >= DRIVE_1571_05 00EACB 1 ldx #$7F ; for 1571-05, start with $7F00 ($8000, as it is incremented immediately) 00EACB 1 .elseif CompileDrive >= DRIVE_1570 00EACB 1 A2 80 ldx #$80 ; for 1570 and 1571 before -05, start with $8000 00EACD 1 ; BUG: This is wrong, as $8000-$80FF is not included in the checksum this way! 00EACD 1 ; Note the "inc IP + 1" at @NextPage below, which skips $8000-$80FF. 00EACD 1 .else 00EACD 1 ; here, X == 0 already ; for 2031/1540/1541, start with $0000, going backwards! 00EACD 1 .endif 00EACD 1 86 76 stx IP + 1 ; set the high byte 00EACF 1 00EACF 1 .if CompileDrive >= DRIVE_1571_05 00EACF 1 inx ; X = $80 for 1571-05 ROMs and later. 00EACF 1 ; X is the number of pages of which to build the checksum 00EACF 1 ; For older 1570/1571 ROMs, it is already set this way 00EACF 1 .endif 00EACF 1 00EACF 1 A9 00 lda #$00 ; set the low byte of the start address 00EAD1 1 85 75 sta IP 00EAD3 1 00EAD3 1 .if CompileDrive >= DRIVE_1570 00EAD3 1 A0 02 ldy #$2000 ; number of pages of which to build the checksum 00EAD5 1 .endif 00EAD5 1 00EAD5 1 18 clc 00EAD6 1 00EAD6 1 @NextPage: 00EAD6 1 00EAD6 1 .if CompileDrive >= DRIVE_1570 00EAD6 1 ; 1570 and newer count forwards, pagewise: 00EAD6 1 00EAD6 1 E6 76 inc IP + 1 00EAD8 1 .else 00EAD8 1 ; 2031/1540/1541 count backwards, pagewise: 00EAD8 1 dec IP + 1 00EAD8 1 .endif 00EAD8 1 00EAD8 1 @AddNextValue: 00EAD8 1 71 75 adc (IP),y ; add the current value to the checksum 00EADA 1 C8 iny ; proceed to the next value 00EADB 1 D0 FB bne @AddNextValue ; add that, too, until the page is completely processed 00EADD 1 00EADD 1 CA dex ; are there still pages to check? 00EADE 1 D0 F6 bne @NextPage ; yes, proceed to next page 00EAE0 1 00EAE0 1 .if CompileDrive >= DRIVE_1570 00EAE0 1 69 FF adc #$FF ; add -1 and carry 00EAE2 1 85 76 sta IP + 1 ; should be zero; in this case, set IP + 1 to zero. 00EAE4 1 ; (if not zero, this is not a problem, as we will go into an endless loop, anyway) 00EAE4 1 .else 00EAE4 1 adc #$00 ; add carry 00EAE4 1 tax ; set X = $E0 (1st run) or $C0 (2nd run), if checksum is correct 00EAE4 1 ; (if not correct, this is not a problem, as we will go into an endless loop, anyway) 00EAE4 1 cmp IP + 1 ; test checksum 00EAE4 1 .endif 00EAE4 1 D0 39 bne @PostFailError ; checksum error -> branch, report failure 00EAE6 1 00EAE6 1 ; Check if there is another ROM to check, and repeat the check 00EAE6 1 ; This only applies to 2031/1540/1541, as the 1570/1571 check the ROM in one approach only 00EAE6 1 ; 00EAE6 1 .if CompileDrive >= DRIVE_1571_05 00EAE6 1 FillNOP 3 00EAE6 1 .elseif CompileDrive >= DRIVE_1570 00EAE6 1 EA EA EA EA FillNOP 4 00EAEA 1 .else 00EAEA 1 cpx #>LC000 ; check if we reached $C000 in our tests 00EAEA 1 bne @CheckNextROM ; no, there is another ROM to check -> branch, check the next ROM 00EAEA 1 .endif 00EAEA 1 00EAEA 1 00EAEA 1 ; Now, check RAM area starting with $0100 00EAEA 1 00EAEA 1 A9 01 lda #>RAM_PAGE1 00EAEC 1 85 76 sta IP + 1 00EAEE 1 00EAEE 1 E6 6F inc T0 ; increment error blink counter for POST failures 00EAF0 1 00EAF0 1 ; Preset values into the RAM area 00EAF0 1 ; equivalent to: 00EAF0 1 ; for (uint8_t * i = 0x100; i < 0x800; i++) { 00EAF0 1 ; uint8_t high = ((uint16_t) i) >> 8; 00EAF0 1 ; *i = (uint8_t) (high + (uint8_t) i); 00EAF0 1 ; } 00EAF0 1 ; That is, every page starts with the number of the page ($0x00 is set to $0x), 00EAF0 1 ; and every location after is incremented 00EAF0 1 00EAF0 1 A2 07 ldx #>(RAM_END - RAM_PAGE1 + 1) ; number of pages to check 00EAF2 1 00EAF2 1 ; (we start with Y == 0) 00EAF2 1 @RAMPresetValue: 00EAF2 1 00EAF2 1 ; calculate (page no + index into page) 00EAF2 1 98 tya ; get index into page into A 00EAF3 1 18 clc 00EAF4 1 65 76 adc IP + 1 ; add the page no. 00EAF6 1 91 75 sta (IP),y ; and store in into the location 00EAF8 1 C8 iny ; proceed to the next index into the current page 00EAF9 1 D0 F7 bne @RAMPresetValue ; still not reached end-of-page -> branch, preset next index 00EAFB 1 00EAFB 1 E6 76 inc IP + 1 ; proceed to next page 00EAFD 1 CA dex ; still pages to process? 00EAFE 1 D0 F2 bne @RAMPresetValue ; yes, continue 00EB00 1 00EB00 1 ; Now, check the RAM contents if they match the values we just wrote 00EB00 1 00EB00 1 A2 07 ldx #>(RAM_END - RAM_PAGE1 + 1) ; number of pages to check 00EB02 1 00EB02 1 ; We start checking from the end, as IP + 1 is already set beyond the end of the RAM area 00EB02 1 00EB02 1 @RAMCheckPreviousPage: 00EB02 1 C6 76 dec IP + 1 ; go back to the previous page 00EB04 1 00EB04 1 @RAMCheckPageContents: 00EB04 1 88 dey ; process previous index 00EB05 1 00EB05 1 98 tya ; get index into page into A 00EB06 1 18 clc 00EB07 1 65 76 adc IP + 1 ; add the page no. 00EB09 1 D1 75 cmp (IP),y ; and compare it with the current location 00EB0B 1 00EB0B 1 D0 12 bne @PostFailError ; not equal -> we have a failure, report POST fail error 00EB0D 1 00EB0D 1 49 FF eor #$FF ; write the opposite bit mask 00EB0F 1 91 75 sta (IP),y ; into the RAM 00EB11 1 00EB11 1 51 75 eor (IP),y ; set A = 0 (only if the last write succeeded, that is) 00EB13 1 91 75 sta (IP),y ; clear the location 00EB15 1 D0 08 bne @PostFailError ; if we did not reach 0 above, then there was an error --> fail POST 00EB17 1 00EB17 1 98 tya ; still locations in current page to check? 00EB18 1 D0 EA bne @RAMCheckPageContents ; yes -> branch, process next location 00EB1A 1 00EB1A 1 CA dex ; still pages to be processed? 00EB1B 1 D0 E5 bne @RAMCheckPreviousPage ; yes -> branch, check previous page 00EB1D 1 00EB1D 1 F0 03 beq ShortReset ; every test was successfull, proceed to the short reset routine 00EB1F 1 ; -------------------------------- 00EB1F 1 00EB1F 1 @PostFailError: 00EB1F 1 4C 71 EA jmp PostFailError 00EB22 1 00EB22 1 00EB22 1 ; This is the short RESET routine. It does not clear the buffers, nor does it check the RAM or ROM 00EB22 1 00EB22 1 ShortReset: 00EB22 1 00EB22 1 .if CompileDrive >= DRIVE_1541C_02 00EB22 1 4C C0 A7 jmp PATCH_ShortReset ; add a SEI before the next commands 00EB25 1 .else 00EB25 1 ldx #= DRIVE_1570 00EB2D 1 A9 03 lda #VIA_PCR_B_CA1_INPUT_POS_EDGE | VIA_PCR_B_CA2_INPUT_NEG 00EB2F 1 .else 00EB2F 1 lda #VIA_PCR_B_CA1_INPUT_POS_EDGE 00EB2F 1 .endif 00EB2F 1 8D 0C 18 sta VBC_PCR1 00EB32 1 A9 82 lda #VIA_IER_BW_SET | VIA_IER_B_CA1 00EB34 1 8D 0D 18 sta VBC_IFR1 ; @@@ TODO According to VIA documentation, this has no effect as the IFR for CA1 is reset by writing to PA 00EB37 1 8D 0E 18 sta VBC_IER1 ; enable interrupt on CA1 00EB3A 1 00EB3A 1 .if CompileDrive >= DRIVE_1540 00EB3A 1 00EB3A 1 ; find out the drive number to use 00EB3A 1 00EB3A 1 AD 00 18 lda VBC_PB1 ; get the drive no. switches 00EB3D 1 29 60 and #VBC_PB1_1540_DEVICENO0 | VBC_PB1_1540_DEVICENO1 ; isolate them 00EB3F 1 00EB3F 1 0A asl a ; move to the right position, resulting in index 0 - 3 00EB40 1 2A rol a 00EB41 1 2A rol a 00EB42 1 2A rol a 00EB43 1 00EB43 1 .else 00EB43 1 ; 2031 00EB43 1 ; set transmit enable (TE) in order to make sure no one is driving NRFD 00EB43 1 lda VBC_PB1 00EB43 1 ora #VBC_PB1_2031_TE 00EB43 1 sta VBC_PB1 00EB43 1 00EB43 1 ; set CA2 to low so we can read out the drive number diodes 00EB43 1 lda VBC_PCR1 00EB43 1 ora #VIA_PCR_B_CA2_OUTPUT_LOW 00EB43 1 and #~VIA_PCR_B_CA2_INPUT_NEG 00EB43 1 sta VBC_PCR1 00EB43 1 00EB43 1 ; set bit for DEVICENO0 to input (DEVICENO1 already is!) 00EB43 1 lda VBC_DDRB1 00EB43 1 and # ~ VBC_PB1_2031_DEVICENO0 00EB43 1 sta VBC_DDRB1 00EB43 1 00EB43 1 lda VBC_PB1 ; get the drive no. switches 00EB43 1 and #VBC_PB1_2031_DEVICENO0 | VBC_PB1_2031_DEVICENO1 ; isolate them 00EB43 1 .endif 00EB43 1 00EB43 1 09 48 ora #IEC_TALK | 8 ; generate address for TALK ($40) and add 8, so we get an address 8 - 11 00EB45 1 85 78 sta TLKADR ; store it 00EB47 1 00EB47 1 49 60 eor #IEC_TALK | IEC_LISTEN ; generate address for LISTEN ($20+address) 00EB49 1 85 77 sta LSNADR ; store it 00EB4B 1 00EB4B 1 .if CompileDrive >= DRIVE_1540 00EB4B 1 .else 00EB4B 1 ; restore CA2 to an input 00EB4B 1 lda VBC_PCR1 00EB4B 1 ora #VIA_PCR_B_CA2_INPUT_NEG 00EB4B 1 sta VBC_PCR1 00EB4B 1 00EB4B 1 ; set talk enable back, and also clear ATNA 00EB4B 1 lda VBC_PB1 00EB4B 1 and # ~ ( VBC_PB1_2031_TE | VBC_PB1_2031_ATNA ) 00EB4B 1 sta VBC_PB1 00EB4B 1 00EB4B 1 lda VBC_DDRB1 00EB4B 1 ora #VBC_PB1_2031_DEVICENO0 00EB4B 1 sta VBC_DDRB1 00EB4B 1 .endif 00EB4B 1 00EB4B 1 00EB4B 1 ; Set the buffer pointers for the disk buffers 00EB4B 1 00EB4B 1 A2 00 ldx #0 00EB4D 1 A0 00 ldy #0 00EB4F 1 00EB4F 1 : 00EB4F 1 A9 00 lda #0 ; set lower byte 00EB51 1 95 99 sta BUFTAB0,x ; into buffer table 00EB53 1 E8 inx 00EB54 1 B9 E0 FE lda TableHighBytesOfBuffers,y ; get higher byte 00EB57 1 95 99 sta BUFTAB0,x ; and set it into buffer table 00EB59 1 E8 inx 00EB5A 1 C8 iny ; proceed to next buffer 00EB5B 1 C0 05 cpy #BUFFERS_COUNT ; have we reached the last buffer 00EB5D 1 D0 F0 bne :- ; no -> jump, process the next buffer 00EB5F 1 00EB5F 1 ; set BUFTABCMD 00EB5F 1 A9 00 lda #CMDBUF 00EB66 1 95 99 sta BUFTAB0,x 00EB68 1 E8 inx 00EB69 1 00EB69 1 ; set BUFTABERR 00EB69 1 A9 D5 lda #ERRBUF 00EB70 1 95 99 sta BUFTAB0,x 00EB72 1 00EB72 1 ; @@@ TODO preset tables 00EB72 1 00EB72 1 A9 FF lda #$FF 00EB74 1 A2 12 ldx #$12 00EB76 1 : 00EB76 1 9D 2B 02 sta LINTAB,x 00EB79 1 CA dex 00EB7A 1 10 FA bpl :- 00EB7C 1 00EB7C 1 A2 05 ldx #BUFFERS_COUNT 00EB7E 1 : 00EB7E 1 95 A7 sta BUF0,x 00EB80 1 95 AE sta BUF1,x 00EB82 1 95 CD sta SS,x 00EB84 1 CA dex 00EB85 1 10 F7 bpl :- 00EB87 1 00EB87 1 A9 05 lda #>BUFFER2 00EB89 1 85 AB sta BUF0 + 4 00EB8B 1 A9 06 lda #>BUFFER3 00EB8D 1 85 AC sta BUF0 + 5 00EB8F 1 00EB8F 1 ; set buffer 6 as invalid 00EB8F 1 A9 FF lda #<$FFFF 00EB91 1 85 AD sta BUF0 + 6 00EB93 1 ; lda #>$FFFF ; unneeded, but it is logically here 00EB93 1 85 B4 sta BUF1 + 6 00EB95 1 00EB95 1 ; @@@ TODO 00EB95 1 A9 05 lda #$05 00EB97 1 8D 3B 02 sta L023B 00EB9A 1 00EB9A 1 ; @@@ TODO 00EB9A 1 A9 84 lda #$84 00EB9C 1 8D 3A 02 sta L023A 00EB9F 1 A9 0F lda #$0F 00EBA1 1 8D 56 02 sta LINUSE 00EBA4 1 A9 01 lda #$01 00EBA6 1 85 F6 sta CHNRDY + 4 00EBA8 1 A9 88 lda #$88 00EBAA 1 85 F7 sta CHNRDY + 5 00EBAC 1 A9 E0 lda #$E0 00EBAE 1 8D 4F 02 sta BUFUSE 00EBB1 1 A9 FF lda #$FF 00EBB3 1 8D 50 02 sta BUFUSE + 1 00EBB6 1 00EBB6 1 A9 01 85 1C SET_WPSW_DIRTY_NO_CR 00EBBA 1 00EBBA 1 85 1D sta WPSW + 1 00EBBC 1 00EBBC 1 20 63 CB jsr InitJumpTableForUxCommands 00EBBF 1 20 FA CE jsr LCEFA ; @@@ TODO 00EBC2 1 00EBC2 1 ; @@@ TODO: Initializes VDC T1 and IER, and tries to execute the job loop 00EBC2 1 .if CompileDrive >= DRIVE_1570 00EBC2 1 20 82 FF jsr LFF82 00EBC5 1 .elseif CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03 00EBC5 1 jsr LFF6F 00EBC5 1 .else 00EBC5 1 jsr LF259 00EBC5 1 .endif 00EBC5 1 00EBC5 1 ; set pointer to function to execute on NMI to ShortReset 00EBC5 1 A9 22 lda #ShortReset 00EBCB 1 85 66 sta VNMI + 1 00EBCD 1 00EBCD 1 .if CompileDrive >= DRIVE_1570 00EBCD 1 A9 06 lda #$06 00EBCF 1 .else 00EBCF 1 lda #$0A 00EBCF 1 .endif 00EBCF 1 85 69 sta SECINC ; set sector increment on allocation 00EBD1 1 00EBD1 1 ; @@@ TODO 00EBD1 1 00EBD1 1 A9 05 lda #$05 00EBD3 1 85 6A sta REVCNT 00EBD5 1 00EBD5 1 A9 73 lda #ERRORCODE_73_IDENTIFY ; error code for: 73,,00,00 00EBD7 1 20 C1 E6 jsr SetErrorCodeNoTS ; produce error message in error channel 00EBDA 1 00EBDA 1 ; initialize the IEC bus on IEC devices 00EBDA 1 ; for the 2031, this has already been done above 00EBDA 1 ; 00EBDA 1 .if CompileDrive >= DRIVE_1541_05 00EBDA 1 00EBDA 1 ; set all lines inactive 00EBDA 1 A9 00 lda #0 00EBDC 1 8D 00 18 sta VBC_PB1 00EBDF 1 00EBDF 1 ; now, set the DDR to mark the output lines DATAOUT, CLOCKOUT and ATNA 00EBDF 1 A9 1A lda #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA 00EBE1 1 8D 02 18 sta VBC_DDRB1 00EBE4 1 00EBE4 1 .elseif CompileDrive >= DRIVE_1540 00EBE4 1 00EBE4 1 ; the 1540 and 1541 up to 1541-05 made a small mistake in that 00EBE4 1 ; they first initialize DDRB, and then they initialize PB. 00EBE4 1 ; This can lead to some small signal on the IEC bus which can be 00EBE4 1 ; problematic. 00EBE4 1 ; 00EBE4 1 ; Otherwise, they do exactly the same initialization 00EBE4 1 ; as the 1541-05 and later 00EBE4 1 ; 00EBE4 1 lda #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA 00EBE4 1 sta VBC_DDRB1 00EBE4 1 00EBE4 1 lda #0 00EBE4 1 sta VBC_PB1 00EBE4 1 00EBE4 1 .endif 00EBE4 1 00EBE4 1 .if CompileDrive >= DRIVE_1570 00EBE4 1 20 86 A7 jsr LA786 ; @@@ TODO 00EBE7 1 .else 00EBE7 1 jsr CheckAutostart 00EBE7 1 .endif 00EBE7 1 00EBE7 1 ; This is the entry to the main loop of the floppy drive. 00EBE7 1 ; This entry is only used to come inside from "external". 00EBE7 1 ; The main loop itself only loops to MainLoop 00EBE7 1 ; 00EBE7 1 MainLoopEntry: 00EBE7 1 58 cli ; allow processing of job loop 00EBE8 1 00EBE8 1 .if CompileDrive >= DRIVE_1540 00EBE8 1 ; make sure to release IEC output lines 00EBE8 1 ; we are sure that no IEC communication takes place when we reach here 00EBE8 1 ; 00EBE8 1 AD 00 18 lda VBC_PB1 00EBEB 1 29 E5 and # ~ (VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA) 00EBED 1 8D 00 18 sta VBC_PB1 00EBF0 1 .endif 00EBF0 1 00EBF0 1 ; check if there is a command waiting in the command buffer (CMDBUF) 00EBF0 1 ; 00EBF0 1 AD 55 02 lda CMDWAT 00EBF3 1 F0 0A beq MainLoop ; no -> branch to the loop 00EBF5 1 00EBF5 1 A9 00 lda #$00 00EBF7 1 8D 55 02 sta CMDWAT ; delete flag so we do not execute this again next time we reach the loop 00EBFA 1 00EBFA 1 ; parse the command and execute it 00EBFA 1 00EBFA 1 .if CompileDrive >= DRIVE_1570 00EBFA 1 EA EA FillNOP 2 00EBFC 1 4C 1C A6 jmp Patch1570CallToParseCommandBufferAndExecuteCommand 00EBFF 1 .else 00EBFF 1 sta NMIFLG ; @@@ TODO WHY? Seems unnecessary to me (and has been left out for 1570 and above) 00EBFF 1 jsr ParseCommandBufferAndExecuteCommand 00EBFF 1 .endif 00EBFF 1 00EBFF 1 END_Patch1570CallToParseCommandBufferAndExecuteCommand: 00EBFF 1 00EBFF 1 MainLoop: 00EBFF 1 58 cli ; allow processing of job loop 00EC00 1 00EC00 1 A5 7C lda ATNPND ; is there currently an ATN pending? 00EC02 1 F0 03 beq @SkipBusProcessing ; no -> branch, skip bus processing 00EC04 1 00EC04 1 ; there is an ATN pending. 00EC04 1 ; Process the bus to get the command the computer wants to give us 00EC04 1 00EC04 1 .if CompileDrive >= DRIVE_1570 00EC04 1 4C B3 A7 jmp ProcessBus1570 ; for 1570 and above, check which bus routines have to be used 00EC07 1 .elseif CompileDrive >= DRIVE_1541C_02 00EC07 1 jmp Patch_ClearPALatch_ProcessBus ; like earlier drives, but make sure to "unlatch" the PA content to get current values upon read 00EC07 1 .else 00EC07 1 jmp ProcessBus 00EC07 1 .endif 00EC07 1 00EC07 1 @SkipBusProcessing: 00EC07 1 00EC07 1 58 cli ; allow processing of job loop 00EC08 1 00EC08 1 ; @@@ TODO 00EC08 1 ; most probably: determine how many open tasks there are for drive 0 (in T0) 00EC08 1 ; and for drive 1 (in T1) 00EC08 1 00EC08 1 A9 0E lda #LINTAB_End - LINTAB 00EC0A 1 85 72 sta T3 00EC0C 1 00EC0C 1 A9 00 lda #$00 ; delete the number of active jobs 00EC0E 1 85 6F sta T0 ; for drive 0 and 00EC10 1 85 70 sta T1 ; for drive 1 00EC12 1 00EC12 1 ; check the channels if there is something for a drive 00EC12 1 00EC12 1 @CheckNextChannel: 00EC12 1 A6 72 ldx T3 00EC14 1 BD 2B 02 lda LINTAB,x 00EC17 1 C9 FF cmp #$FF 00EC19 1 F0 10 beq @NoChannelActivity ; $FF -> channel inactive, skip incrementing 00EC1B 1 00EC1B 1 29 3F and #$3F 00EC1D 1 85 82 sta LINDX 00EC1F 1 20 93 DF jsr LDF93 ; @@@ TODO 00EC22 1 AA tax 00EC23 1 00EC23 1 BD 5B 02 lda LSTJOB,x 00EC26 1 29 01 and #$01 ; extract the drive number (0 or 1) 00EC28 1 AA tax 00EC29 1 F6 6F inc T0,x ; increment the counter of active jobs for the right drive (0 or 1) 00EC2B 1 00EC2B 1 @NoChannelActivity: 00EC2B 1 C6 72 dec T3 ; check the next channel 00EC2D 1 10 E3 bpl @CheckNextChannel 00EC2F 1 00EC2F 1 ; also check the job loop 00EC2F 1 ; 00EC2F 1 A0 04 ldy #JOBS4 - JOBS0 ; no of jobs to test. Note that JOB5 (which is essentially not available) will not be tested! 00EC31 1 @CheckNextJob: 00EC31 1 B9 00 00 lda JOBS0,y ; get job code 00EC34 1 10 05 bpl @NoJob ; positive -> no job available, skip incrementing 00EC36 1 29 01 and #$01 ; extract the drive number (0 or 1) 00EC38 1 AA tax 00EC39 1 F6 6F inc T0,x ; increment the counter of active jobs for the right drive (0 or 1) 00EC3B 1 @NoJob: 00EC3B 1 88 dey ; check the next job 00EC3C 1 10 F3 bpl @CheckNextJob 00EC3E 1 00EC3E 1 00EC3E 1 ; switch on the drive LEDs if necessary, or switch them off 00EC3E 1 ; according to the number of active jobs in T0 (drive 0) and T1 (drive 1) 00EC3E 1 00EC3E 1 78 sei ; disallow interrupts --> blocking job loop 00EC3F 1 00EC3F 1 AD 00 1C lda VDC_PB2 00EC42 1 29 F7 and # ~ VDC_PB2_DRIVELEDS ; get mask for everything but the drive LEDs 00EC44 1 48 pha ; and remember it for processing 00EC45 1 00EC45 1 ; remember current drive number for restoring at the end 00EC45 1 A5 7F lda DRVNUM 00EC47 1 85 86 sta R0 00EC49 1 00EC49 1 ; set drive number to 0 00EC49 1 A9 00 lda #$00 00EC4B 1 85 7F sta DRVNUM 00EC4D 1 00EC4D 1 ; check number of jobs for drive 0 00EC4D 1 A5 6F lda T0 00EC4F 1 F0 0B beq @NoJobForDrive0 ; is 0, no jump -> drive LED does not have to be switched on 00EC51 1 00EC51 1 ; check if disk has been changed 00EC51 1 A5 1C lda WPSW 00EC53 1 F0 03 beq @SkipInitDrive0 ; no -> branch, skip initialization for drive 0 00EC55 1 00EC55 1 20 13 D3 jsr LD313 ; @@@ TODO 00EC58 1 00EC58 1 @SkipInitDrive0: 00EC58 1 00EC58 1 ; remember to switch on LED for drive 0 when PB is written 00EC58 1 68 pla 00EC59 1 09 08 ora #VDC_PB2_DRIVE0LED 00EC5B 1 48 pha 00EC5C 1 00EC5C 1 @NoJobForDrive0: 00EC5C 1 00EC5C 1 ; set drive number to 1 00EC5C 1 E6 7F inc DRVNUM 00EC5E 1 00EC5E 1 ; check number of jobs for drive 1 00EC5E 1 A5 70 lda T1 00EC60 1 F0 0B beq @NoJobForDrive1 ; is 0, no jump -> drive LED does not have to be switched on 00EC62 1 00EC62 1 ; check if disk has been changed 00EC62 1 A5 1D lda WPSW + 1 00EC64 1 F0 03 beq @SkipInitDrive1 ; no -> branch, skip initialization for drive 1 00EC66 1 00EC66 1 20 13 D3 jsr LD313 ; @@@ TODO 00EC69 1 00EC69 1 @SkipInitDrive1: 00EC69 1 00EC69 1 ; remember to switch on LED for drive 0 when PB is written 00EC69 1 68 pla 00EC6A 1 09 00 ora #VDC_PB2_DRIVE1LED 00EC6C 1 48 pha 00EC6D 1 00EC6D 1 00EC6D 1 @NoJobForDrive1: 00EC6D 1 00EC6D 1 ; restore current drive number 00EC6D 1 A5 86 lda R0 00EC6F 1 85 7F sta DRVNUM 00EC71 1 00EC71 1 ; get back mask for VBC_PB 00EC71 1 68 pla 00EC72 1 00EC72 1 ; @@@ TODO: In case of an error, generate a blinking LED 00EC72 1 AE 6C 02 ldx ERWORD 00EC75 1 F0 21 beq @SwitchOnLEDs 00EC77 1 00EC77 1 AD 00 1C lda VDC_PB2 00EC7A 1 E0 80 cpx #$80 00EC7C 1 D0 03 bne @LEC81 00EC7E 1 4C 8B EC jmp @LEC8B 00EC81 1 @LEC81: 00EC81 1 AE 05 18 ldx VBC_T1HC1 00EC84 1 30 12 bmi @SwitchOnLEDs 00EC86 1 A2 A0 ldx #$A0 00EC88 1 8E 05 18 stx VBC_T1HC1 00EC8B 1 @LEC8B: 00EC8B 1 CE 6C 02 dec ERWORD 00EC8E 1 D0 08 bne @SwitchOnLEDs 00EC90 1 4D 6D 02 eor ERLED 00EC93 1 A2 10 ldx #$10 00EC95 1 8E 6C 02 stx ERWORD 00EC98 1 00EC98 1 @SwitchOnLEDs: 00EC98 1 8D 00 1C sta VDC_PB2 ; switch on drive LEDs as determined above 00EC9B 1 4C FF EB jmp MainLoop ; continue with the main loop 00EC9E 1 ; ---------------- 00EC9E 1 00EC9E 1 00EC9E 1 LEC9E: 00EC9E 1 A9 00 lda #$00 00ECA0 1 85 83 sta SA 00ECA2 1 A9 01 lda #$01 00ECA4 1 20 E2 D1 jsr LD1E2 00ECA7 1 A9 00 lda #$00 00ECA9 1 20 C8 D4 jsr LD4C8 00ECAC 1 A6 82 ldx LINDX 00ECAE 1 A9 00 lda #$00 00ECB0 1 9D 44 02 sta LSTCHR,x 00ECB3 1 20 93 DF jsr LDF93 00ECB6 1 AA tax 00ECB7 1 A5 7F lda DRVNUM 00ECB9 1 9D 5B 02 sta LSTJOB,x 00ECBC 1 A9 01 lda #$01 00ECBE 1 20 F1 CF jsr LCFF1 00ECC1 1 A9 04 lda #$04 00ECC3 1 20 F1 CF jsr LCFF1 00ECC6 1 A9 01 lda #$01 00ECC8 1 20 F1 CF jsr LCFF1 00ECCB 1 20 F1 CF jsr LCFF1 00ECCE 1 AD 72 02 lda NBTEMP 00ECD1 1 20 F1 CF jsr LCFF1 00ECD4 1 A9 00 lda #$00 00ECD6 1 20 F1 CF jsr LCFF1 00ECD9 1 20 59 ED jsr LED59 00ECDC 1 20 93 DF jsr LDF93 00ECDF 1 0A asl a 00ECE0 1 AA tax 00ECE1 1 D6 99 dec BUFTAB0,x 00ECE3 1 D6 99 dec BUFTAB0,x 00ECE5 1 A9 00 lda #$00 00ECE7 1 20 F1 CF jsr LCFF1 00ECEA 1 LECEA: 00ECEA 1 A9 01 lda #$01 00ECEC 1 20 F1 CF jsr LCFF1 00ECEF 1 20 F1 CF jsr LCFF1 00ECF2 1 20 CE C6 jsr LC6CE 00ECF5 1 90 2C bcc LED23 00ECF7 1 AD 72 02 lda NBTEMP 00ECFA 1 20 F1 CF jsr LCFF1 00ECFD 1 AD 73 02 lda NBTEMP + 1 00ED00 1 20 F1 CF jsr LCFF1 00ED03 1 20 59 ED jsr LED59 00ED06 1 A9 00 lda #$00 00ED08 1 20 F1 CF jsr LCFF1 00ED0B 1 D0 DD bne LECEA 00ED0D 1 LED0D: 00ED0D 1 20 93 DF jsr LDF93 00ED10 1 0A asl a 00ED11 1 AA tax 00ED12 1 A9 00 lda #$00 00ED14 1 95 99 sta BUFTAB0,x 00ED16 1 A9 88 lda #$88 00ED18 1 A4 82 ldy LINDX 00ED1A 1 8D 54 02 sta DIRLST 00ED1D 1 99 F2 00 sta CHNRDY,y 00ED20 1 A5 85 lda DATA 00ED22 1 60 rts 00ED23 1 00ED23 1 LED23: 00ED23 1 AD 72 02 lda NBTEMP 00ED26 1 20 F1 CF jsr LCFF1 00ED29 1 AD 73 02 lda NBTEMP + 1 00ED2C 1 20 F1 CF jsr LCFF1 00ED2F 1 20 59 ED jsr LED59 00ED32 1 20 93 DF jsr LDF93 00ED35 1 0A asl a 00ED36 1 AA tax 00ED37 1 D6 99 dec BUFTAB0,x 00ED39 1 D6 99 dec BUFTAB0,x 00ED3B 1 A9 00 lda #$00 00ED3D 1 20 F1 CF jsr LCFF1 00ED40 1 20 F1 CF jsr LCFF1 00ED43 1 20 F1 CF jsr LCFF1 00ED46 1 20 93 DF jsr LDF93 00ED49 1 0A asl a 00ED4A 1 A8 tay 00ED4B 1 B9 99 00 lda BUFTAB0,y 00ED4E 1 A6 82 ldx LINDX 00ED50 1 9D 44 02 sta LSTCHR,x 00ED53 1 DE 44 02 dec LSTCHR,x 00ED56 1 4C 0D ED jmp LED0D 00ED59 1 LED59: 00ED59 1 A0 00 ldy #$00 00ED5B 1 LED5B: 00ED5B 1 B9 B1 02 lda NAMBUF,y 00ED5E 1 20 F1 CF jsr LCFF1 00ED61 1 C8 iny 00ED62 1 C0 1B cpy #$1B 00ED64 1 D0 F5 bne LED5B 00ED66 1 60 rts 00ED67 1 LED67: 00ED67 1 20 37 D1 jsr LD137 00ED6A 1 F0 01 beq LED6D 00ED6C 1 60 rts 00ED6D 1 LED6D: 00ED6D 1 85 85 sta DATA 00ED6F 1 A4 82 ldy LINDX 00ED71 1 B9 44 02 lda LSTCHR,y 00ED74 1 F0 08 beq LED7E 00ED76 1 A9 80 lda #$80 00ED78 1 99 F2 00 sta CHNRDY,y 00ED7B 1 A5 85 lda DATA 00ED7D 1 60 rts 00ED7E 1 LED7E: 00ED7E 1 48 pha 00ED7F 1 20 EA EC jsr LECEA 00ED82 1 68 pla 00ED83 1 60 rts 00ED84 1 cmd_validate: 00ED84 1 20 D1 C1 jsr LC1D1 00ED87 1 20 42 D0 jsr LD042 00ED8A 1 A9 40 lda #$40 00ED8C 1 8D F9 02 sta WBAM 00ED8F 1 .if CompileDrive >= DRIVE_1571_05 00ED8F 1 jsr LAA69 00ED8F 1 .elseif CompileDrive >= DRIVE_1571 00ED8F 1 jsr LA7C7 00ED8F 1 .else 00ED8F 1 20 B7 EE jsr LEEB7 00ED92 1 .endif 00ED92 1 A9 00 lda #$00 00ED94 1 8D 92 02 sta DELIND 00ED97 1 20 AC C5 jsr LC5AC 00ED9A 1 D0 3D bne LEDD9 00ED9C 1 LED9C: 00ED9C 1 A9 00 lda #$00 00ED9E 1 85 81 sta SECTOR 00EDA0 1 AD 85 FE lda LFE85 00EDA3 1 85 80 sta TRACK 00EDA5 1 20 E5 ED jsr LEDE5 00EDA8 1 A9 00 lda #$00 00EDAA 1 8D F9 02 sta WBAM 00EDAD 1 20 FF EE jsr LEEFF 00EDB0 1 4C 94 C1 jmp CommandEnd 00EDB3 1 LEDB3: 00EDB3 1 C8 iny 00EDB4 1 B1 94 lda (DIRBUF),y 00EDB6 1 48 pha 00EDB7 1 C8 iny 00EDB8 1 B1 94 lda (DIRBUF),y 00EDBA 1 48 pha 00EDBB 1 A0 13 ldy #$13 00EDBD 1 B1 94 lda (DIRBUF),y 00EDBF 1 F0 0A beq LEDCB 00EDC1 1 85 80 sta TRACK 00EDC3 1 C8 iny 00EDC4 1 B1 94 lda (DIRBUF),y 00EDC6 1 85 81 sta SECTOR 00EDC8 1 20 E5 ED jsr LEDE5 00EDCB 1 LEDCB: 00EDCB 1 68 pla 00EDCC 1 85 81 sta SECTOR 00EDCE 1 68 pla 00EDCF 1 85 80 sta TRACK 00EDD1 1 20 E5 ED jsr LEDE5 00EDD4 1 LEDD4: 00EDD4 1 20 04 C6 jsr LC604 00EDD7 1 F0 C3 beq LED9C 00EDD9 1 LEDD9: 00EDD9 1 A0 00 ldy #$00 00EDDB 1 B1 94 lda (DIRBUF),y 00EDDD 1 30 D4 bmi LEDB3 00EDDF 1 20 B6 C8 jsr LC8B6 00EDE2 1 4C D4 ED jmp LEDD4 00EDE5 1 LEDE5: 00EDE5 1 20 5F D5 jsr LD55F 00EDE8 1 20 90 EF jsr LEF90 00EDEB 1 20 75 D4 jsr LD475 00EDEE 1 LEDEE: 00EDEE 1 A9 00 lda #$00 00EDF0 1 20 C8 D4 jsr LD4C8 00EDF3 1 20 37 D1 jsr LD137 00EDF6 1 85 80 sta TRACK 00EDF8 1 20 37 D1 jsr LD137 00EDFB 1 85 81 sta SECTOR 00EDFD 1 A5 80 lda TRACK 00EDFF 1 D0 03 bne LEE04 00EE01 1 4C 27 D2 jmp LD227 00EE04 1 LEE04: 00EE04 1 20 90 EF jsr LEF90 00EE07 1 20 4D D4 jsr LD44D 00EE0A 1 4C EE ED jmp LEDEE 00EE0D 1 20 12 C3 cmd_new:jsr LC312 00EE10 1 A5 E2 lda FILDRV 00EE12 1 10 05 bpl LEE19 00EE14 1 A9 33 lda #ERRORCODE_33_SYNTAX_ERROR 00EE16 1 4C C8 C1 jmp GenerateErrorMessage 00EE19 1 ; ---------------- 00EE19 1 00EE19 1 LEE19: 00EE19 1 29 01 and #$01 00EE1B 1 85 7F sta DRVNUM 00EE1D 1 .if CompileDrive >= DRIVE_1570 00EE1D 1 20 9C FF jsr LFF9C 00EE20 1 .elseif CompileDrive >= DRIVE_1541C_02 00EE20 1 jsr LFF7F 00EE20 1 .else 00EE20 1 jsr LC100 00EE20 1 .endif 00EE20 1 A5 7F lda DRVNUM 00EE22 1 0A asl a 00EE23 1 AA tax 00EE24 1 AC 7B 02 ldy FILTBL + 1 00EE27 1 CC 74 02 cpy CMDSIZ 00EE2A 1 F0 1A beq LEE46 00EE2C 1 B9 00 02 lda CMDBUF,y 00EE2F 1 95 12 sta DiskID0,x 00EE31 1 B9 01 02 lda CMDBUF + 1,y 00EE34 1 95 13 sta DiskID0 + 1,x 00EE36 1 20 07 D3 jsr LD307 00EE39 1 A9 01 lda #$01 00EE3B 1 85 80 sta TRACK 00EE3D 1 .if CompileDrive >= DRIVE_1541C_01 .or CompileDrive = DRIVE_1541_06AA 00EE3D 1 20 2F FF jsr LFF2F 00EE40 1 .else 00EE40 1 jsr LC8C6 00EE40 1 .endif 00EE40 1 00EE40 1 .if CompileDrive >= DRIVE_1571 00EE40 1 jmp LA764 00EE40 1 .else 00EE40 1 20 05 F0 jsr LF005 00EE43 1 .endif 00EE43 1 LEE43: 00EE43 1 4C 56 EE jmp LEE56 00EE46 1 LEE46: 00EE46 1 20 42 D0 jsr LD042 00EE49 1 A6 7F ldx DRVNUM 00EE4B 1 BD 01 01 lda DSKVER,x 00EE4E 1 CD D5 FE cmp LFED5 00EE51 1 F0 03 beq LEE56 00EE53 1 4C 72 D5 jmp LD572 00EE56 1 LEE56: 00EE56 1 .if CompileDrive >= DRIVE_1570 00EE56 1 20 C7 A7 jsr LA7C7 00EE59 1 .else 00EE59 1 jsr LEEB7 00EE59 1 .endif 00EE59 1 A5 F9 lda JOBNUM 00EE5B 1 A8 tay 00EE5C 1 0A asl a 00EE5D 1 AA tax 00EE5E 1 AD 88 FE lda LFE85 + 3 00EE61 1 95 99 sta BUFTAB0,x 00EE63 1 AE 7A 02 ldx FILTBL 00EE66 1 A9 1B lda #$1B 00EE68 1 20 6E C6 jsr LC66E 00EE6B 1 A0 12 ldy #$12 00EE6D 1 A6 7F ldx DRVNUM 00EE6F 1 AD D5 FE lda LFED5 00EE72 1 9D 01 01 sta DSKVER,x 00EE75 1 8A txa 00EE76 1 0A asl a 00EE77 1 AA tax 00EE78 1 B5 12 lda DiskID0,x 00EE7A 1 91 94 sta (DIRBUF),y 00EE7C 1 C8 iny 00EE7D 1 B5 13 lda DiskID0 + 1,x 00EE7F 1 91 94 sta (DIRBUF),y 00EE81 1 C8 iny 00EE82 1 C8 iny 00EE83 1 A9 32 lda #$32 00EE85 1 91 94 sta (DIRBUF),y 00EE87 1 C8 iny 00EE88 1 AD D5 FE lda LFED5 00EE8B 1 91 94 sta (DIRBUF),y 00EE8D 1 A0 02 ldy #$02 00EE8F 1 91 6D sta (BMPNT),y 00EE91 1 AD 85 FE lda LFE85 00EE94 1 85 80 sta TRACK 00EE96 1 20 93 EF jsr LEF93 00EE99 1 A9 01 lda #$01 00EE9B 1 85 81 sta SECTOR 00EE9D 1 20 93 EF jsr LEF93 00EEA0 1 20 FF EE jsr LEEFF 00EEA3 1 20 05 F0 jsr LF005 00EEA6 1 A0 01 ldy #$01 00EEA8 1 A9 FF lda #$FF 00EEAA 1 91 6D sta (BMPNT),y 00EEAC 1 20 64 D4 jsr LD464 00EEAF 1 C6 81 dec SECTOR 00EEB1 1 .if CompileDrive >= DRIVE_1571 00EEB1 1 jsr LD042 00EEB1 1 .else 00EEB1 1 20 60 D4 jsr LD460 00EEB4 1 .endif 00EEB4 1 4C 94 C1 jmp CommandEnd 00EEB7 1 LEEB7: 00EEB7 1 20 D1 F0 jsr LF0D1 00EEBA 1 A0 00 ldy #$00 00EEBC 1 A9 12 lda #$12 00EEBE 1 91 6D sta (BMPNT),y 00EEC0 1 C8 iny 00EEC1 1 98 tya 00EEC2 1 91 6D sta (BMPNT),y 00EEC4 1 C8 iny 00EEC5 1 C8 iny 00EEC6 1 C8 iny 00EEC7 1 LEEC7: 00EEC7 1 A9 00 lda #$00 00EEC9 1 85 6F sta T0 00EECB 1 85 70 sta T1 00EECD 1 85 71 sta T2 00EECF 1 98 tya 00EED0 1 4A lsr a 00EED1 1 4A lsr a 00EED2 1 20 4B F2 jsr LF24B 00EED5 1 91 6D sta (BMPNT),y 00EED7 1 C8 iny 00EED8 1 AA tax 00EED9 1 LEED9: 00EED9 1 38 sec 00EEDA 1 26 6F rol T0 00EEDC 1 26 70 rol T1 00EEDE 1 26 71 rol T2 00EEE0 1 CA dex 00EEE1 1 D0 F6 bne LEED9 00EEE3 1 LEEE3: 00EEE3 1 B5 6F lda T0,x 00EEE5 1 91 6D sta (BMPNT),y 00EEE7 1 C8 iny 00EEE8 1 E8 inx 00EEE9 1 E0 03 cpx #$03 00EEEB 1 90 F6 bcc LEEE3 00EEED 1 C0 90 cpy #$90 00EEEF 1 90 D6 bcc LEEC7 00EEF1 1 4C 75 D0 jmp LD075 00EEF4 1 LEEF4: 00EEF4 1 20 93 DF jsr LDF93 00EEF7 1 AA tax 00EEF8 1 BD 5B 02 lda LSTJOB,x 00EEFB 1 29 01 and #$01 00EEFD 1 85 7F sta DRVNUM 00EEFF 1 LEEFF: 00EEFF 1 A4 7F ldy DRVNUM 00EF01 1 B9 51 02 lda MDIRTY,y 00EF04 1 D0 01 bne LEF07 00EF06 1 60 rts 00EF07 1 LEF07: 00EF07 1 A9 00 lda #$00 00EF09 1 99 51 02 sta MDIRTY,y 00EF0C 1 20 3A EF jsr LEF3A 00EF0F 1 A5 7F lda DRVNUM 00EF11 1 0A asl a 00EF12 1 48 pha 00EF13 1 20 A5 F0 jsr LF0A5 00EF16 1 68 pla 00EF17 1 18 clc 00EF18 1 69 01 adc #$01 00EF1A 1 20 A5 F0 jsr LF0A5 00EF1D 1 A5 80 lda TRACK 00EF1F 1 48 pha 00EF20 1 A9 01 lda #$01 00EF22 1 85 80 sta TRACK 00EF24 1 LEF24: 00EF24 1 0A asl a 00EF25 1 0A asl a 00EF26 1 85 6D sta BMPNT 00EF28 1 .if CompileDrive >= DRIVE_1571 00EF28 1 jsr LA937 00EF28 1 .else 00EF28 1 20 20 F2 jsr LF220 00EF2B 1 .endif 00EF2B 1 E6 80 inc TRACK 00EF2D 1 A5 80 lda TRACK 00EF2F 1 CD D7 FE cmp MAXTRACK_ADJUSTED 00EF32 1 90 F0 bcc LEF24 00EF34 1 68 pla 00EF35 1 85 80 sta TRACK 00EF37 1 .if CompileDrive >= DRIVE_1571 00EF37 1 jmp LA58D 00EF37 1 .else 00EF37 1 4C 8A D5 jmp LD58A 00EF3A 1 .endif 00EF3A 1 LEF3A: 00EF3A 1 20 0F F1 jsr LF10F 00EF3D 1 AA tax 00EF3E 1 20 DF F0 jsr LF0DF 00EF41 1 A6 F9 ldx JOBNUM 00EF43 1 BD E0 FE lda TableHighBytesOfBuffers,x 00EF46 1 85 6E sta BMPNT + 1 00EF48 1 A9 00 lda #$00 00EF4A 1 85 6D sta BMPNT 00EF4C 1 60 rts 00EF4D 1 LEF4D: 00EF4D 1 A6 7F ldx DRVNUM 00EF4F 1 BD FA 02 lda NDBL,x 00EF52 1 8D 72 02 sta NBTEMP 00EF55 1 BD FC 02 lda NDBH,x 00EF58 1 8D 73 02 sta NBTEMP + 1 00EF5B 1 60 rts 00EF5C 1 20 F1 EF jsr LEFF1 00EF5F 1 LEF5F: 00EF5F 1 .if CompileDrive >= DRIVE_1571 00EF5F 1 jmp LA83E 00EF5F 1 .else 00EF5F 1 20 CF EF jsr LEFCF 00EF62 1 .endif 00EF62 1 LEF62: 00EF62 1 38 sec 00EF63 1 D0 22 bne LEF87 00EF65 1 B1 6D lda (BMPNT),y 00EF67 1 1D E9 EF ora LEFE9,x 00EF6A 1 91 6D sta (BMPNT),y 00EF6C 1 20 88 EF jsr LEF88 00EF6F 1 A4 6F ldy T0 00EF71 1 18 clc 00EF72 1 B1 6D lda (BMPNT),y 00EF74 1 69 01 adc #$01 00EF76 1 91 6D sta (BMPNT),y 00EF78 1 A5 80 lda TRACK 00EF7A 1 CD 85 FE cmp LFE85 00EF7D 1 F0 3B beq LEFBA 00EF7F 1 LEF7F: 00EF7F 1 FE FA 02 inc NDBL,x 00EF82 1 D0 03 bne LEF87 00EF84 1 FE FC 02 inc NDBH,x 00EF87 1 LEF87: 00EF87 1 60 rts 00EF88 1 LEF88: 00EF88 1 A6 7F ldx DRVNUM 00EF8A 1 A9 01 lda #$01 00EF8C 1 9D 51 02 sta MDIRTY,x 00EF8F 1 60 rts 00EF90 1 LEF90: 00EF90 1 20 F1 EF jsr LEFF1 00EF93 1 LEF93: 00EF93 1 .if CompileDrive >= DRIVE_1571 00EF93 1 jmp LA874 00EF93 1 .else 00EF93 1 20 CF EF jsr LEFCF 00EF96 1 .endif 00EF96 1 LEF96: 00EF96 1 F0 36 beq LEFCE 00EF98 1 B1 6D lda (BMPNT),y 00EF9A 1 5D E9 EF eor LEFE9,x 00EF9D 1 91 6D sta (BMPNT),y 00EF9F 1 20 88 EF jsr LEF88 00EFA2 1 A4 6F ldy T0 00EFA4 1 B1 6D lda (BMPNT),y 00EFA6 1 38 sec 00EFA7 1 E9 01 sbc #$01 00EFA9 1 91 6D sta (BMPNT),y 00EFAB 1 A5 80 lda TRACK 00EFAD 1 CD 85 FE cmp LFE85 00EFB0 1 F0 0B beq LEFBD 00EFB2 1 LEFB2: 00EFB2 1 BD FA 02 lda NDBL,x 00EFB5 1 D0 03 bne LEFBA 00EFB7 1 DE FC 02 dec NDBH,x 00EFBA 1 LEFBA: 00EFBA 1 DE FA 02 dec NDBL,x 00EFBD 1 LEFBD: 00EFBD 1 BD FC 02 lda NDBH,x 00EFC0 1 D0 0C bne LEFCE 00EFC2 1 BD FA 02 lda NDBL,x 00EFC5 1 .if CompileDrive >= DRIVE_1571_05 00EFC5 1 jmp LAAF0 00EFC5 1 FillNOP 1 00EFC5 1 .elseif CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00EFC5 1 jmp LC047 00EFC5 1 FillNOP 1 00EFC5 1 .else 00EFC5 1 C9 03 cmp #$03 00EFC7 1 B0 05 bcs LEFCE 00EFC9 1 .endif 00EFC9 1 00EFC9 1 A9 72 lda #ERRORCODE_72_DISK_FULL 00EFCB 1 20 C7 E6 jsr SetErrorCode 00EFCE 1 LEFCE: 00EFCE 1 60 rts 00EFCF 1 LEFCF: 00EFCF 1 20 11 F0 jsr LF011 00EFD2 1 98 tya 00EFD3 1 85 6F sta T0 00EFD5 1 LEFD5: 00EFD5 1 A5 81 lda SECTOR 00EFD7 1 4A lsr a 00EFD8 1 4A lsr a 00EFD9 1 4A lsr a 00EFDA 1 38 sec 00EFDB 1 65 6F adc T0 00EFDD 1 A8 tay 00EFDE 1 A5 81 lda SECTOR 00EFE0 1 29 07 and #$07 00EFE2 1 AA tax 00EFE3 1 B1 6D lda (BMPNT),y 00EFE5 1 3D E9 EF and LEFE9,x 00EFE8 1 60 rts 00EFE9 1 LEFE9: 00EFE9 1 01 02 04 08 .byte $01,$02,$04,$08,$10,$20,$40,$80 00EFED 1 10 20 40 80 00EFF1 1 LEFF1: 00EFF1 1 A9 FF lda #$FF 00EFF3 1 2C F9 02 bit WBAM 00EFF6 1 F0 0C beq LF004 00EFF8 1 10 0A bpl LF004 00EFFA 1 70 08 bvs LF004 00EFFC 1 A9 00 lda #$00 00EFFE 1 8D F9 02 sta WBAM 00F001 1 .if CompileDrive >= DRIVE_1571 00F001 1 jmp LA58D 00F001 1 .else 00F001 1 4C 8A D5 jmp LD58A 00F004 1 .endif 00F004 1 LF004: 00F004 1 60 rts 00F005 1 LF005: 00F005 1 .if CompileDrive >= DRIVE_1571 00F005 1 jmp LA738 00F005 1 .else 00F005 1 20 3A EF jsr LEF3A 00F008 1 .endif 00F008 1 LF008: 00F008 1 A0 00 ldy #$00 00F00A 1 98 tya 00F00B 1 LF00B: 00F00B 1 91 6D sta (BMPNT),y 00F00D 1 C8 iny 00F00E 1 D0 FB bne LF00B 00F010 1 60 rts 00F011 1 LF011: 00F011 1 A5 6F lda T0 00F013 1 48 pha 00F014 1 A5 70 lda T1 00F016 1 48 pha 00F017 1 .if CompileDrive >= DRIVE_1570 00F017 1 4C 25 AA jmp LAA25 00F01A 1 EA FillNOP 1 00F01B 1 .elseif CompileDrive >= DRIVE_1541C_02 00F01B 1 jmp LFFB0 00F01B 1 FillNOP 1 00F01B 1 .else 00F01B 1 ldx DRVNUM 00F01B 1 lda NODRV,x 00F01B 1 .endif 00F01B 1 LF01B: 00F01B 1 F0 05 beq LF022 00F01D 1 A9 74 lda #ERRORCODE_74_DRIVE_NOT_READY 00F01F 1 .if CompileDrive >= DRIVE_1571_05 00F01F 1 jsr LE645 00F01F 1 .else 00F01F 1 20 48 E6 jsr LE648 00F022 1 .endif 00F022 1 LF022: 00F022 1 20 0F F1 jsr LF10F 00F025 1 85 6F sta T0 00F027 1 8A txa 00F028 1 0A asl a 00F029 1 85 70 sta T1 00F02B 1 AA tax 00F02C 1 A5 80 lda TRACK 00F02E 1 DD 9D 02 cmp TBAM,x 00F031 1 F0 0B beq LF03E 00F033 1 E8 inx 00F034 1 86 70 stx T1 00F036 1 DD 9D 02 cmp TBAM,x 00F039 1 F0 03 beq LF03E 00F03B 1 20 5B F0 jsr LF05B 00F03E 1 LF03E: 00F03E 1 A5 70 lda T1 00F040 1 A6 7F ldx DRVNUM 00F042 1 9D 9B 02 sta UBAM,x 00F045 1 0A asl a 00F046 1 0A asl a 00F047 1 18 clc 00F048 1 69 A1 adc #$A1 00F04A 1 85 6D sta BMPNT 00F04C 1 A9 02 lda #$02 00F04E 1 69 00 adc #$00 00F050 1 85 6E sta BMPNT + 1 00F052 1 A0 00 ldy #$00 00F054 1 68 pla 00F055 1 85 70 sta T1 00F057 1 68 pla 00F058 1 85 6F sta T0 00F05A 1 60 rts 00F05B 1 LF05B: 00F05B 1 A6 6F ldx T0 00F05D 1 20 DF F0 jsr LF0DF 00F060 1 A5 7F lda DRVNUM 00F062 1 AA tax 00F063 1 0A asl a 00F064 1 1D 9B 02 ora UBAM,x 00F067 1 49 01 eor #$01 00F069 1 29 03 and #$03 00F06B 1 85 70 sta T1 00F06D 1 20 A5 F0 jsr LF0A5 00F070 1 A5 F9 lda JOBNUM 00F072 1 0A asl a 00F073 1 AA tax 00F074 1 A5 80 lda TRACK 00F076 1 0A asl a 00F077 1 0A asl a 00F078 1 95 99 sta BUFTAB0,x 00F07A 1 A5 70 lda T1 00F07C 1 0A asl a 00F07D 1 0A asl a 00F07E 1 A8 tay 00F07F 1 LF07F: 00F07F 1 A1 99 lda (BUFTAB0,x) 00F081 1 99 A1 02 sta BAM,y 00F084 1 A9 00 lda #$00 00F086 1 81 99 sta (BUFTAB0,x) 00F088 1 F6 99 inc BUFTAB0,x 00F08A 1 C8 iny 00F08B 1 98 tya 00F08C 1 29 03 and #$03 00F08E 1 D0 EF bne LF07F 00F090 1 A6 70 ldx T1 00F092 1 A5 80 lda TRACK 00F094 1 9D 9D 02 sta TBAM,x 00F097 1 AD F9 02 lda WBAM 00F09A 1 D0 03 bne LF09F 00F09C 1 .if CompileDrive >= DRIVE_1571 00F09C 1 jmp LA58D 00F09C 1 .else 00F09C 1 4C 8A D5 jmp LD58A 00F09F 1 .endif 00F09F 1 LF09F: 00F09F 1 09 80 ora #$80 00F0A1 1 8D F9 02 sta WBAM 00F0A4 1 60 rts 00F0A5 1 LF0A5: 00F0A5 1 A8 tay 00F0A6 1 B9 9D 02 lda TBAM,y 00F0A9 1 F0 25 beq LF0D0 00F0AB 1 48 pha 00F0AC 1 A9 00 lda #$00 00F0AE 1 99 9D 02 sta TBAM,y 00F0B1 1 A5 F9 lda JOBNUM 00F0B3 1 0A asl a 00F0B4 1 AA tax 00F0B5 1 68 pla 00F0B6 1 0A asl a 00F0B7 1 0A asl a 00F0B8 1 95 99 sta BUFTAB0,x 00F0BA 1 98 tya 00F0BB 1 0A asl a 00F0BC 1 0A asl a 00F0BD 1 A8 tay 00F0BE 1 LF0BE: 00F0BE 1 B9 A1 02 lda BAM,y 00F0C1 1 81 99 sta (BUFTAB0,x) 00F0C3 1 A9 00 lda #$00 00F0C5 1 99 A1 02 sta BAM,y 00F0C8 1 F6 99 inc BUFTAB0,x 00F0CA 1 C8 iny 00F0CB 1 98 tya 00F0CC 1 29 03 and #$03 00F0CE 1 D0 EE bne LF0BE 00F0D0 1 LF0D0: 00F0D0 1 60 rts 00F0D1 1 LF0D1: 00F0D1 1 A5 7F lda DRVNUM 00F0D3 1 0A asl a 00F0D4 1 AA tax 00F0D5 1 A9 00 lda #$00 00F0D7 1 9D 9D 02 sta TBAM,x 00F0DA 1 E8 inx 00F0DB 1 9D 9D 02 sta TBAM,x 00F0DE 1 60 rts 00F0DF 1 LF0DF: 00F0DF 1 B5 A7 lda BUF0,x 00F0E1 1 C9 FF cmp #$FF 00F0E3 1 D0 25 bne LF10A 00F0E5 1 8A txa 00F0E6 1 48 pha 00F0E7 1 20 8E D2 jsr LD28E 00F0EA 1 AA tax 00F0EB 1 10 05 bpl LF0F2 00F0ED 1 A9 70 lda #ERRORCODE_70_NO_CHANNEL 00F0EF 1 20 C8 C1 jsr GenerateErrorMessage 00F0F2 1 LF0F2: 00F0F2 1 86 F9 stx JOBNUM 00F0F4 1 68 pla 00F0F5 1 A8 tay 00F0F6 1 8A txa 00F0F7 1 09 80 ora #$80 00F0F9 1 99 A7 00 sta BUF0,y 00F0FC 1 0A asl a 00F0FD 1 AA tax 00F0FE 1 AD 85 FE lda LFE85 00F101 1 95 06 sta TRACK0,x 00F103 1 A9 00 lda #$00 00F105 1 95 07 sta SECTOR0,x 00F107 1 .if CompileDrive >= DRIVE_1571 00F107 1 jmp LA667 00F107 1 .else 00F107 1 4C 86 D5 jmp LD586 00F10A 1 .endif 00F10A 1 LF10A: 00F10A 1 29 0F and #$0F 00F10C 1 85 F9 sta JOBNUM 00F10E 1 60 rts 00F10F 1 LF10F: 00F10F 1 A9 06 lda #$06 00F111 1 A6 7F ldx DRVNUM 00F113 1 D0 03 bne LF118 00F115 1 18 clc 00F116 1 69 07 adc #$07 00F118 1 LF118: 00F118 1 60 rts 00F119 1 LF119: 00F119 1 20 0F F1 jsr LF10F 00F11C 1 AA tax 00F11D 1 60 rts 00F11E 1 LF11E: 00F11E 1 20 3E DE jsr LDE3E 00F121 1 A9 03 lda #$03 00F123 1 85 6F sta T0 00F125 1 A9 01 lda #$01 00F127 1 0D F9 02 ora WBAM 00F12A 1 8D F9 02 sta WBAM 00F12D 1 LF12D: 00F12D 1 .if CompileDrive >= DRIVE_1571 00F12D 1 jmp LA8DB 00F12D 1 .else 00F12D 1 A5 6F lda T0 00F12F 1 48 pha 00F130 1 .endif 00F130 1 LF130: 00F130 1 20 11 F0 jsr LF011 00F133 1 68 pla 00F134 1 85 6F sta T0 00F136 1 B1 6D lda (BMPNT),y 00F138 1 LF138: 00F138 1 D0 39 bne LF173 00F13A 1 A5 80 lda TRACK 00F13C 1 CD 85 FE cmp LFE85 00F13F 1 F0 19 beq LF15A 00F141 1 90 1C bcc LF15F 00F143 1 E6 80 inc TRACK 00F145 1 A5 80 lda TRACK 00F147 1 CD D7 FE cmp MAXTRACK_ADJUSTED 00F14A 1 D0 E1 bne LF12D 00F14C 1 AE 85 FE ldx LFE85 00F14F 1 CA dex 00F150 1 86 80 stx TRACK 00F152 1 A9 00 lda #$00 00F154 1 85 81 sta SECTOR 00F156 1 C6 6F dec T0 00F158 1 D0 D3 bne LF12D 00F15A 1 LF15A: 00F15A 1 A9 72 lda #ERRORCODE_72_DISK_FULL 00F15C 1 20 C8 C1 jsr GenerateErrorMessage 00F15F 1 LF15F: 00F15F 1 C6 80 dec TRACK 00F161 1 D0 CA bne LF12D 00F163 1 AE 85 FE ldx LFE85 00F166 1 E8 inx 00F167 1 86 80 stx TRACK 00F169 1 A9 00 lda #$00 00F16B 1 85 81 sta SECTOR 00F16D 1 C6 6F dec T0 00F16F 1 D0 BC bne LF12D 00F171 1 F0 E7 beq LF15A 00F173 1 LF173: 00F173 1 A5 81 lda SECTOR 00F175 1 18 clc 00F176 1 65 69 adc SECINC 00F178 1 85 81 sta SECTOR 00F17A 1 A5 80 lda TRACK 00F17C 1 20 4B F2 jsr LF24B 00F17F 1 8D 4E 02 sta LSTSEC 00F182 1 8D 4D 02 sta CMD 00F185 1 C5 81 cmp SECTOR 00F187 1 B0 0C bcs LF195 00F189 1 38 sec 00F18A 1 A5 81 lda SECTOR 00F18C 1 ED 4E 02 sbc LSTSEC 00F18F 1 85 81 sta SECTOR 00F191 1 F0 02 beq LF195 00F193 1 C6 81 dec SECTOR 00F195 1 LF195: 00F195 1 20 FA F1 jsr LF1FA 00F198 1 F0 03 beq LF19D 00F19A 1 LF19A: 00F19A 1 4C 90 EF jmp LEF90 00F19D 1 LF19D: 00F19D 1 A9 00 lda #$00 00F19F 1 85 81 sta SECTOR 00F1A1 1 20 FA F1 jsr LF1FA 00F1A4 1 D0 F4 bne LF19A 00F1A6 1 4C F5 F1 jmp LF1F5 00F1A9 1 LF1A9: 00F1A9 1 A9 01 lda #$01 00F1AB 1 0D F9 02 ora WBAM 00F1AE 1 8D F9 02 sta WBAM 00F1B1 1 A5 86 lda R0 00F1B3 1 48 pha 00F1B4 1 A9 01 lda #$01 00F1B6 1 85 86 sta R0 00F1B8 1 LF1B8: 00F1B8 1 AD 85 FE lda LFE85 00F1BB 1 38 sec 00F1BC 1 E5 86 sbc R0 00F1BE 1 85 80 sta TRACK 00F1C0 1 90 09 bcc LF1CB 00F1C2 1 F0 07 beq LF1CB 00F1C4 1 .if CompileDrive >= DRIVE_1571 00F1C4 1 jmp LA905 00F1C4 1 .else 00F1C4 1 20 11 F0 jsr LF011 00F1C7 1 .endif 00F1C7 1 LF1C7: 00F1C7 1 B1 6D lda (BMPNT),y 00F1C9 1 LF1C9: 00F1C9 1 D0 1B bne LF1E6 00F1CB 1 LF1CB: 00F1CB 1 AD 85 FE lda LFE85 00F1CE 1 18 clc 00F1CF 1 65 86 adc R0 00F1D1 1 85 80 sta TRACK 00F1D3 1 E6 86 inc R0 00F1D5 1 CD D7 FE cmp MAXTRACK_ADJUSTED 00F1D8 1 90 05 bcc LF1DF 00F1DA 1 A9 67 lda #ERRORCODE_67_ILLEGAL_TRACK_OR_SECTOR 00F1DC 1 20 45 E6 jsr LE645 00F1DF 1 LF1DF: 00F1DF 1 .if CompileDrive >= DRIVE_1571 00F1DF 1 jmp LA91E 00F1DF 1 .else 00F1DF 1 20 11 F0 jsr LF011 00F1E2 1 .endif 00F1E2 1 LF1E2: 00F1E2 1 B1 6D lda (BMPNT),y 00F1E4 1 LF1E4: 00F1E4 1 F0 D2 beq LF1B8 00F1E6 1 LF1E6: 00F1E6 1 68 pla 00F1E7 1 85 86 sta R0 00F1E9 1 A9 00 lda #$00 00F1EB 1 85 81 sta SECTOR 00F1ED 1 20 FA F1 jsr LF1FA 00F1F0 1 F0 03 beq LF1F5 00F1F2 1 4C 90 EF jmp LEF90 00F1F5 1 LF1F5: 00F1F5 1 A9 71 lda #ERRORCODE_71_DIR_ERROR 00F1F7 1 20 45 E6 jsr LE645 00F1FA 1 LF1FA: 00F1FA 1 .if CompileDrive >= DRIVE_1571 00F1FA 1 jmp LA8A9 00F1FA 1 .else 00F1FA 1 20 11 F0 jsr LF011 00F1FD 1 .endif 00F1FD 1 LF1FD: 00F1FD 1 98 tya 00F1FE 1 48 pha 00F1FF 1 20 20 F2 jsr LF220 00F202 1 A5 80 lda TRACK 00F204 1 20 4B F2 jsr LF24B 00F207 1 8D 4E 02 sta LSTSEC 00F20A 1 68 pla 00F20B 1 85 6F sta T0 00F20D 1 LF20D: 00F20D 1 A5 81 lda SECTOR 00F20F 1 CD 4E 02 cmp LSTSEC 00F212 1 B0 09 bcs LF21D 00F214 1 20 D5 EF jsr LEFD5 00F217 1 D0 06 bne LF21F 00F219 1 E6 81 inc SECTOR 00F21B 1 D0 F0 bne LF20D 00F21D 1 LF21D: 00F21D 1 A9 00 lda #$00 00F21F 1 LF21F: 00F21F 1 60 rts 00F220 1 LF220: 00F220 1 A5 6F lda T0 00F222 1 48 pha 00F223 1 A9 00 lda #$00 00F225 1 85 6F sta T0 00F227 1 AC 86 FE ldy LFE85 + 1 00F22A 1 88 dey 00F22B 1 LF22B: 00F22B 1 A2 07 ldx #$07 00F22D 1 LF22D: 00F22D 1 B1 6D lda (BMPNT),y 00F22F 1 3D E9 EF and LEFE9,x 00F232 1 F0 02 beq LF236 00F234 1 E6 6F inc T0 00F236 1 LF236: 00F236 1 CA dex 00F237 1 10 F4 bpl LF22D 00F239 1 88 dey 00F23A 1 D0 EF bne LF22B 00F23C 1 B1 6D lda (BMPNT),y 00F23E 1 C5 6F cmp T0 00F240 1 D0 04 bne LF246 00F242 1 68 pla 00F243 1 85 6F sta T0 00F245 1 60 rts 00F246 1 LF246: 00F246 1 A9 71 lda #ERRORCODE_71_DIR_ERROR 00F248 1 20 45 E6 jsr LE645 00F24B 1 LF24B: 00F24B 1 .if CompileDrive >= DRIVE_1571 00F24B 1 jsr LA74F 00F24B 1 .else 00F24B 1 AE D6 FE ldx LFED6 00F24E 1 .endif 00F24E 1 LF24E: 00F24E 1 DD D6 FE cmp SpeedZoneChange - 1,x 00F251 1 CA dex 00F252 1 B0 FA bcs LF24E 00F254 1 BD D1 FE lda LFED1,x 00F257 1 60 rts 00F258 1 00F258 1 NoOp: 00F258 1 60 rts 00F259 1 00F259 1 LF259: 00F259 1 A9 6F lda #VDC_PB2_STEPPER | VDC_PB2_DRIVE0MOTOR | VDC_PB2_DRIVELEDS | VDC_PB2_BITRATE 00F25B 1 8D 02 1C sta VDC_DDRB2 00F25E 1 29 F0 and # ~ (VDC_PB2_STEPPER | VDC_PB2_DRIVE0MOTOR | VDC_PB2_DRIVELEDS) 00F260 1 8D 00 1C sta VDC_PB2 00F263 1 .if CompileDrive >= DRIVE_1570 00F263 1 4C F8 A9 jmp LA9F8 00F266 1 .else 00F266 1 lda VDC_PCR2 00F266 1 .endif 00F266 1 00F266 1 LF266: 00F266 1 29 FE and # ~ VIA_PCR_B_CA1_INPUT_POS_EDGE 00F268 1 09 0E ora #VIA_PCR_B_CA2_OUTPUT_HIGH 00F26A 1 09 E0 ora #VIA_PCR_B_CB2_OUTPUT_HIGH 00F26C 1 8D 0C 1C sta VDC_PCR2 00F26F 1 A9 41 lda #VIA_ACR_B_T1_CONTROL_FREERUN | VIA_ACR_B_PA_LATCH_ENABLE 00F271 1 8D 0B 1C sta VDC_ACR2 00F274 1 A9 00 lda #$00 00F276 1 8D 06 1C sta VDC_T1LL2 00F279 1 .if CompileDrive = DRIVE_1541C_01 .OR (CompileDrive >= DRIVE_1570 .AND CompileDrive < DRIVE_1571_05) 00F279 1 A9 20 lda #$20 00F27B 1 .else 00F27B 1 lda #$3A 00F27B 1 .endif 00F27B 1 8D 07 1C sta VDC_T1HL2 00F27E 1 8D 05 1C sta VDC_T1HC2 00F281 1 00F281 1 A9 7F lda #VIA_IER_BW_UNSET | ~ VIA_IER_BW_SET ; clear all interrupt sources 00F283 1 8D 0E 1C sta VDC_IER2 00F286 1 00F286 1 A9 C0 lda #VIA_IER_B_T1 | VIA_IER_BW_SET 00F288 1 8D 0D 1C sta VDC_IFR2 ; @@@ TODO 00F28B 1 8D 0E 1C sta VDC_IER2 ; enable interrupt on T1 00F28E 1 00F28E 1 A9 FF lda #$FF 00F290 1 85 3E sta CDRIVE 00F292 1 85 51 sta FTNUM 00F294 1 A9 08 lda #$08 00F296 1 85 39 sta HBID 00F298 1 A9 07 lda #$07 00F29A 1 85 47 sta DBID 00F29C 1 A9 05 lda #LFA05 00F2A2 1 85 63 sta NXTST + 1 00F2A4 1 A9 C8 lda #$C8 00F2A6 1 85 64 sta MINSTP 00F2A8 1 A9 04 lda #$04 00F2AA 1 85 5E sta AS 00F2AC 1 A9 04 lda #$04 00F2AE 1 85 5F sta AF 00F2B0 1 LF2B0: 00F2B0 1 BA tsx 00F2B1 1 86 49 stx SAVSP 00F2B3 1 AD 04 1C lda VDC_T1LC2 00F2B6 1 AD 0C 1C lda VDC_PCR2 00F2B9 1 09 0E ora #VIA_PCR_B_CA2_OUTPUT_HIGH 00F2BB 1 8D 0C 1C sta VDC_PCR2 00F2BE 1 00F2BE 1 LF2BE: 00F2BE 1 A0 05 ldy #$05 00F2C0 1 LF2C0: 00F2C0 1 B9 00 00 lda JOBS0,y 00F2C3 1 10 2E bpl LF2F3 00F2C5 1 C9 D0 cmp #$D0 00F2C7 1 D0 04 bne LF2CD 00F2C9 1 98 tya 00F2CA 1 4C 70 F3 jmp LF370 00F2CD 1 LF2CD: 00F2CD 1 29 01 and #$01 00F2CF 1 F0 07 beq LF2D8 00F2D1 1 84 3F sty JOBN 00F2D3 1 A9 0F lda #$0F 00F2D5 1 4C 69 F9 jmp LF969 00F2D8 1 LF2D8: 00F2D8 1 AA tax 00F2D9 1 85 3D sta DRIVE 00F2DB 1 C5 3E cmp CDRIVE 00F2DD 1 F0 0A beq LF2E9 00F2DF 1 20 7E F9 jsr LF97E 00F2E2 1 A5 3D lda DRIVE 00F2E4 1 85 3E sta CDRIVE 00F2E6 1 4C 9C F9 jmp LF99C 00F2E9 1 LF2E9: 00F2E9 1 A5 20 lda DRVST 00F2EB 1 30 03 bmi LF2F0 00F2ED 1 0A asl a 00F2EE 1 10 09 bpl LF2F9 00F2F0 1 LF2F0: 00F2F0 1 4C 9C F9 jmp LF99C 00F2F3 1 LF2F3: 00F2F3 1 88 dey 00F2F4 1 10 CA bpl LF2C0 00F2F6 1 4C 9C F9 jmp LF99C 00F2F9 1 LF2F9: 00F2F9 1 A9 20 lda #$20 00F2FB 1 85 20 sta DRVST 00F2FD 1 A0 05 ldy #$05 00F2FF 1 84 3F sty JOBN 00F301 1 LF301: 00F301 1 20 93 F3 jsr LF393 00F304 1 30 1A bmi LF320 00F306 1 LF306: 00F306 1 C6 3F dec JOBN 00F308 1 10 F7 bpl LF301 00F30A 1 A4 41 ldy NXTJOB 00F30C 1 20 95 F3 jsr LF395 00F30F 1 A5 42 lda NXTRK 00F311 1 85 4A sta STEPS 00F313 1 06 4A asl STEPS 00F315 1 A9 60 lda #$60 00F317 1 85 20 sta DRVST 00F319 1 B1 32 lda (HDRPNT),y 00F31B 1 85 22 sta DRVTRK 00F31D 1 4C 9C F9 jmp LF99C 00F320 1 LF320: 00F320 1 29 01 and #$01 00F322 1 C5 3D cmp DRIVE 00F324 1 D0 E0 bne LF306 00F326 1 A5 22 lda DRVTRK 00F328 1 F0 12 beq LF33C 00F32A 1 38 sec 00F32B 1 F1 32 sbc (HDRPNT),y 00F32D 1 F0 0D beq LF33C 00F32F 1 49 FF eor #$FF 00F331 1 85 42 sta NXTRK 00F333 1 E6 42 inc NXTRK 00F335 1 A5 3F lda JOBN 00F337 1 85 41 sta NXTJOB 00F339 1 4C 06 F3 jmp LF306 00F33C 1 LF33C: 00F33C 1 A2 04 ldx #$04 00F33E 1 B1 32 lda (HDRPNT),y 00F340 1 85 40 sta TRACC 00F342 1 LF342: 00F342 1 .if CompileDrive >= DRIVE_1571_05 .OR CompileDrive = DRIVE_1541C_02 00F342 1 cmp LC048 - 1,x 00F342 1 .else 00F342 1 DD D6 FE cmp SpeedZoneChange - 1,x 00F345 1 .endif 00F345 1 CA dex 00F346 1 B0 FA bcs LF342 00F348 1 BD D1 FE lda LFED1,x 00F34B 1 85 43 sta SECTR 00F34D 1 8A txa 00F34E 1 0A asl a 00F34F 1 0A asl a 00F350 1 0A asl a 00F351 1 0A asl a 00F352 1 0A asl a 00F353 1 85 44 sta WORK 00F355 1 AD 00 1C lda VDC_PB2 00F358 1 29 9F and #VDC_PB2_STEPPER | VDC_PB2_DRIVE0MOTOR | VDC_PB2_DRIVELEDS | VDC_PB2_WRITEPROTECT | VDC_PB2_SYNC 00F35A 1 05 44 ora WORK 00F35C 1 8D 00 1C sta VDC_PB2 00F35F 1 A6 3D ldx DRIVE 00F361 1 A5 45 lda JOB 00F363 1 C9 40 cmp #$40 00F365 1 F0 15 beq LF37C 00F367 1 C9 60 cmp #$60 00F369 1 F0 03 beq LF36E 00F36B 1 4C B1 F3 jmp LF3B1 00F36E 1 LF36E: 00F36E 1 A5 3F lda JOBN 00F370 1 LF370: 00F370 1 18 clc 00F371 1 69 03 adc #$03 00F373 1 85 31 sta BUFPNT + 1 00F375 1 A9 00 lda #$00 00F377 1 85 30 sta BUFPNT 00F379 1 6C 30 00 jmp (BUFPNT) 00F37C 1 LF37C: 00F37C 1 A9 60 lda #$60 00F37E 1 85 20 sta DRVST 00F380 1 AD 00 1C lda VDC_PB2 00F383 1 29 FC and # ~ VDC_PB2_STEPPER 00F385 1 8D 00 1C sta VDC_PB2 00F388 1 A9 A4 lda #$A4 00F38A 1 85 4A sta STEPS 00F38C 1 A9 01 lda #$01 00F38E 1 85 22 sta DRVTRK 00F390 1 4C 69 F9 jmp LF969 00F393 1 LF393: 00F393 1 A4 3F ldy JOBN 00F395 1 LF395: 00F395 1 B9 00 00 lda JOBS0,y 00F398 1 48 pha 00F399 1 10 10 bpl LF3AB 00F39B 1 29 78 and #$78 00F39D 1 85 45 sta JOB 00F39F 1 98 tya 00F3A0 1 0A asl a 00F3A1 1 69 06 adc #$06 00F3A3 1 85 32 sta HDRPNT 00F3A5 1 98 tya 00F3A6 1 18 clc 00F3A7 1 69 03 adc #$03 00F3A9 1 85 31 sta BUFPNT + 1 00F3AB 1 LF3AB: 00F3AB 1 A0 00 ldy #$00 00F3AD 1 84 30 sty BUFPNT 00F3AF 1 68 pla 00F3B0 1 60 rts 00F3B1 1 LF3B1: 00F3B1 1 A2 5A ldx #$5A 00F3B3 1 86 4B stx TMP 00F3B5 1 A2 00 ldx #$00 00F3B7 1 A9 52 lda #$52 00F3B9 1 85 24 sta STAB 00F3BB 1 LF3BB: 00F3BB 1 20 56 F5 jsr LF556 00F3BE 1 LF3BE: 00F3BE 1 50 FE bvc LF3BE 00F3C0 1 B8 clv 00F3C1 1 AD 01 1C lda VDC_PA2 00F3C4 1 C5 24 cmp STAB 00F3C6 1 D0 3F bne LF407 00F3C8 1 LF3C8: 00F3C8 1 50 FE bvc LF3C8 00F3CA 1 B8 clv 00F3CB 1 AD 01 1C lda VDC_PA2 00F3CE 1 95 25 sta STAB + 1,x 00F3D0 1 E8 inx 00F3D1 1 E0 07 cpx #$07 00F3D3 1 D0 F3 bne LF3C8 00F3D5 1 20 97 F4 jsr LF497 00F3D8 1 A0 04 ldy #$04 00F3DA 1 A9 00 lda #$00 00F3DC 1 LF3DC: 00F3DC 1 59 16 00 eor HEADER,y 00F3DF 1 88 dey 00F3E0 1 10 FA bpl LF3DC 00F3E2 1 C9 00 cmp #$00 00F3E4 1 D0 38 bne LF41E 00F3E6 1 A6 3E ldx CDRIVE 00F3E8 1 A5 18 lda HEADER + 2 00F3EA 1 95 22 sta DRVTRK,x 00F3EC 1 A5 45 lda JOB 00F3EE 1 C9 30 cmp #$30 00F3F0 1 F0 1E beq LF410 00F3F2 1 A5 3E lda CDRIVE 00F3F4 1 0A asl a 00F3F5 1 A8 tay 00F3F6 1 B9 12 00 lda DiskID0,y 00F3F9 1 C5 16 cmp HEADER 00F3FB 1 D0 1E bne LF41B 00F3FD 1 B9 13 00 lda DiskID0 + 1,y 00F400 1 C5 17 cmp HEADER + 1 00F402 1 D0 17 bne LF41B 00F404 1 4C 23 F4 jmp LF423 00F407 1 LF407: 00F407 1 C6 4B dec TMP 00F409 1 D0 B0 bne LF3BB 00F40B 1 A9 02 lda #$02 00F40D 1 20 69 F9 jsr LF969 00F410 1 LF410: 00F410 1 A5 16 lda HEADER 00F412 1 85 12 sta DiskID0 00F414 1 A5 17 lda HEADER + 1 00F416 1 85 13 sta DiskID0 + 1 00F418 1 LF418: 00F418 1 A9 01 lda #$01 00F41A 1 2C .byte ASM_BIT3 00F41B 1 LF41B: 00F41B 1 A9 0B lda #$0B 00F41D 1 2C .byte ASM_BIT3 00F41E 1 LF41E: 00F41E 1 A9 09 lda #$09 00F420 1 4C 69 F9 jmp LF969 00F423 1 LF423: 00F423 1 A9 7F lda #$7F 00F425 1 85 4C sta CSECT 00F427 1 A5 19 lda HEADER + 3 00F429 1 18 clc 00F42A 1 69 02 adc #$02 00F42C 1 C5 43 cmp SECTR 00F42E 1 90 02 bcc LF432 00F430 1 E5 43 sbc SECTR 00F432 1 LF432: 00F432 1 85 4D sta NEXTS 00F434 1 A2 05 ldx #$05 00F436 1 86 3F stx JOBN 00F438 1 A2 FF ldx #$FF 00F43A 1 LF43A: 00F43A 1 20 93 F3 jsr LF393 00F43D 1 10 44 bpl LF483 00F43F 1 85 44 sta WORK 00F441 1 29 01 and #$01 00F443 1 C5 3E cmp CDRIVE 00F445 1 D0 3C bne LF483 00F447 1 A0 00 ldy #$00 00F449 1 B1 32 lda (HDRPNT),y 00F44B 1 C5 40 cmp TRACC 00F44D 1 D0 34 bne LF483 00F44F 1 A5 45 lda JOB 00F451 1 C9 60 cmp #$60 00F453 1 F0 0C beq LF461 00F455 1 A0 01 ldy #$01 00F457 1 38 sec 00F458 1 B1 32 lda (HDRPNT),y 00F45A 1 E5 4D sbc NEXTS 00F45C 1 10 03 bpl LF461 00F45E 1 18 clc 00F45F 1 65 43 adc SECTR 00F461 1 LF461: 00F461 1 C5 4C cmp CSECT 00F463 1 B0 1E bcs LF483 00F465 1 48 pha 00F466 1 A5 45 lda JOB 00F468 1 F0 14 beq LF47E 00F46A 1 68 pla 00F46B 1 .if CompileDrive >= DRIVE_1571_05 00F46B 1 cmp #$04 00F46B 1 .else 00F46B 1 C9 09 cmp #$09 00F46D 1 .endif 00F46D 1 90 14 bcc LF483 00F46F 1 .if CompileDrive >= DRIVE_1571_05 00F46F 1 cmp #$08 00F46F 1 .else 00F46F 1 C9 0C cmp #$0C 00F471 1 .endif 00F471 1 B0 10 bcs LF483 00F473 1 LF473: 00F473 1 85 4C sta CSECT 00F475 1 A5 3F lda JOBN 00F477 1 AA tax 00F478 1 69 03 adc #$03 00F47A 1 85 31 sta BUFPNT + 1 00F47C 1 D0 05 bne LF483 00F47E 1 LF47E: 00F47E 1 68 pla 00F47F 1 C9 06 cmp #$06 00F481 1 90 F0 bcc LF473 00F483 1 LF483: 00F483 1 C6 3F dec JOBN 00F485 1 10 B3 bpl LF43A 00F487 1 8A txa 00F488 1 10 03 bpl LF48D 00F48A 1 4C 9C F9 jmp LF99C 00F48D 1 LF48D: 00F48D 1 86 3F stx JOBN 00F48F 1 20 93 F3 jsr LF393 00F492 1 A5 45 lda JOB 00F494 1 4C CA F4 jmp LF4CA 00F497 1 LF497: 00F497 1 A5 30 lda BUFPNT 00F499 1 48 pha 00F49A 1 A5 31 lda BUFPNT + 1 00F49C 1 48 pha 00F49D 1 A9 24 lda #$24 00F49F 1 85 30 sta BUFPNT 00F4A1 1 A9 00 lda #$00 00F4A3 1 85 31 sta BUFPNT + 1 00F4A5 1 A9 00 lda #$00 00F4A7 1 85 34 sta GCRPNT 00F4A9 1 20 E6 F7 jsr LF7E6 00F4AC 1 A5 55 lda BTAB + 3 00F4AE 1 85 18 sta HEADER + 2 00F4B0 1 A5 54 lda BTAB + 2 00F4B2 1 85 19 sta HEADER + 3 00F4B4 1 A5 53 lda BTAB + 1 00F4B6 1 85 1A sta HEADER + 4 00F4B8 1 20 E6 F7 jsr LF7E6 00F4BB 1 A5 52 lda BTAB 00F4BD 1 85 17 sta HEADER + 1 00F4BF 1 A5 53 lda BTAB + 1 00F4C1 1 85 16 sta HEADER 00F4C3 1 68 pla 00F4C4 1 85 31 sta BUFPNT + 1 00F4C6 1 68 pla 00F4C7 1 85 30 sta BUFPNT 00F4C9 1 60 rts 00F4CA 1 LF4CA: 00F4CA 1 C9 00 cmp #$00 00F4CC 1 F0 03 beq LF4D1 00F4CE 1 4C 6E F5 jmp LF56E 00F4D1 1 LF4D1: 00F4D1 1 20 0A F5 jsr LF50A 00F4D4 1 LF4D4: 00F4D4 1 50 FE bvc LF4D4 00F4D6 1 B8 clv 00F4D7 1 AD 01 1C lda VDC_PA2 00F4DA 1 91 30 sta (BUFPNT),y 00F4DC 1 C8 iny 00F4DD 1 D0 F5 bne LF4D4 00F4DF 1 A0 BA ldy #$BA 00F4E1 1 LF4E1: 00F4E1 1 50 FE bvc LF4E1 00F4E3 1 B8 clv 00F4E4 1 AD 01 1C lda VDC_PA2 00F4E7 1 99 00 01 sta NODRV + 1,y 00F4EA 1 C8 iny 00F4EB 1 D0 F4 bne LF4E1 00F4ED 1 20 E0 F8 jsr LF8E0 00F4F0 1 A5 38 lda BID 00F4F2 1 C5 47 cmp DBID 00F4F4 1 F0 05 beq LF4FB 00F4F6 1 A9 04 lda #$04 00F4F8 1 4C 69 F9 jmp LF969 00F4FB 1 LF4FB: 00F4FB 1 20 E9 F5 jsr LF5E9 00F4FE 1 C5 3A cmp CHKSUM 00F500 1 F0 03 beq LF505 00F502 1 A9 05 lda #$05 00F504 1 2C .byte ASM_BIT3 00F505 1 LF505: 00F505 1 A9 01 lda #$01 00F507 1 4C 69 F9 jmp LF969 00F50A 1 LF50A: 00F50A 1 20 10 F5 jsr LF510 00F50D 1 4C 56 F5 jmp LF556 00F510 1 LF510: 00F510 1 A5 3D lda DRIVE 00F512 1 0A asl a 00F513 1 AA tax 00F514 1 B5 12 lda DiskID0,x 00F516 1 85 16 sta HEADER 00F518 1 B5 13 lda DiskID0 + 1,x 00F51A 1 85 17 sta HEADER + 1 00F51C 1 A0 00 ldy #$00 00F51E 1 B1 32 lda (HDRPNT),y 00F520 1 85 18 sta HEADER + 2 00F522 1 C8 iny 00F523 1 B1 32 lda (HDRPNT),y 00F525 1 85 19 sta HEADER + 3 00F527 1 A9 00 lda #$00 00F529 1 45 16 eor HEADER 00F52B 1 45 17 eor HEADER + 1 00F52D 1 45 18 eor HEADER + 2 00F52F 1 45 19 eor HEADER + 3 00F531 1 85 1A sta HEADER + 4 00F533 1 20 34 F9 jsr LF934 00F536 1 A2 5A ldx #$5A 00F538 1 LF538: 00F538 1 20 56 F5 jsr LF556 00F53B 1 A0 00 ldy #$00 00F53D 1 LF53D: 00F53D 1 50 FE bvc LF53D 00F53F 1 B8 clv 00F540 1 AD 01 1C lda VDC_PA2 00F543 1 D9 24 00 cmp STAB,y 00F546 1 D0 06 bne LF54E 00F548 1 C8 iny 00F549 1 C0 08 cpy #$08 00F54B 1 D0 F0 bne LF53D 00F54D 1 60 rts 00F54E 1 LF54E: 00F54E 1 CA dex 00F54F 1 D0 E7 bne LF538 00F551 1 A9 02 lda #$02 00F553 1 LF553: 00F553 1 4C 69 F9 jmp LF969 00F556 1 LF556: 00F556 1 A9 D0 lda #$D0 00F558 1 8D 05 18 sta VBC_T1HC1 00F55B 1 A9 03 lda #$03 00F55D 1 LF55D: 00F55D 1 2C 05 18 bit VBC_T1HC1 00F560 1 10 F1 bpl LF553 00F562 1 2C 00 1C bit VDC_PB2 00F565 1 30 F6 bmi LF55D 00F567 1 AD 01 1C lda VDC_PA2 00F56A 1 B8 clv 00F56B 1 A0 00 ldy #$00 00F56D 1 60 rts 00F56E 1 LF56E: 00F56E 1 C9 10 cmp #$10 00F570 1 F0 03 beq LF575 00F572 1 4C 91 F6 jmp LF691 00F575 1 LF575: 00F575 1 20 E9 F5 jsr LF5E9 00F578 1 85 3A sta CHKSUM 00F57A 1 AD 00 1C lda VDC_PB2 00F57D 1 29 10 and #VDC_PB2_WRITEPROTECT 00F57F 1 D0 05 bne LF586 00F581 1 A9 08 lda #$08 00F583 1 4C 69 F9 jmp LF969 00F586 1 LF586: 00F586 1 20 8F F7 jsr LF78F 00F589 1 20 10 F5 jsr LF510 00F58C 1 A2 09 ldx #INTRA_SECTOR_GAP 00F58E 1 LF58E: 00F58E 1 50 FE bvc LF58E 00F590 1 B8 clv 00F591 1 CA dex 00F592 1 D0 FA bne LF58E 00F594 1 A9 FF lda #$FF 00F596 1 8D 03 1C sta VDC_DDRA2 00F599 1 AD 0C 1C lda VDC_PCR2 00F59C 1 29 1F and #$1F 00F59E 1 09 C0 ora #$C0 00F5A0 1 8D 0C 1C sta VDC_PCR2 00F5A3 1 A9 FF lda #$FF 00F5A5 1 A2 05 ldx #$05 00F5A7 1 8D 01 1C sta VDC_PA2 00F5AA 1 B8 clv 00F5AB 1 LF5AB: 00F5AB 1 50 FE bvc LF5AB 00F5AD 1 B8 clv 00F5AE 1 CA dex 00F5AF 1 D0 FA bne LF5AB 00F5B1 1 A0 BB ldy #$BB 00F5B3 1 LF5B3: 00F5B3 1 B9 00 01 lda NODRV + 1,y 00F5B6 1 LF5B6: 00F5B6 1 50 FE bvc LF5B6 00F5B8 1 B8 clv 00F5B9 1 8D 01 1C sta VDC_PA2 00F5BC 1 C8 iny 00F5BD 1 D0 F4 bne LF5B3 00F5BF 1 LF5BF: 00F5BF 1 B1 30 lda (BUFPNT),y 00F5C1 1 LF5C1: 00F5C1 1 50 FE bvc LF5C1 00F5C3 1 B8 clv 00F5C4 1 8D 01 1C sta VDC_PA2 00F5C7 1 C8 iny 00F5C8 1 D0 F5 bne LF5BF 00F5CA 1 LF5CA: 00F5CA 1 50 FE bvc LF5CA 00F5CC 1 AD 0C 1C lda VDC_PCR2 00F5CF 1 09 E0 ora #$E0 00F5D1 1 8D 0C 1C sta VDC_PCR2 00F5D4 1 A9 00 lda #$00 00F5D6 1 8D 03 1C sta VDC_DDRA2 00F5D9 1 20 F2 F5 jsr LF5F2 00F5DC 1 A4 3F ldy JOBN 00F5DE 1 B9 00 00 lda JOBS0,y 00F5E1 1 49 30 eor #$30 00F5E3 1 99 00 00 sta JOBS0,y 00F5E6 1 4C B1 F3 jmp LF3B1 00F5E9 1 LF5E9: 00F5E9 1 A9 00 lda #$00 00F5EB 1 A8 tay 00F5EC 1 LF5EC: 00F5EC 1 51 30 eor (BUFPNT),y 00F5EE 1 C8 iny 00F5EF 1 D0 FB bne LF5EC 00F5F1 1 60 rts 00F5F2 1 LF5F2: 00F5F2 1 A9 00 lda #$00 00F5F4 1 85 2E sta SAVPNT 00F5F6 1 85 30 sta BUFPNT 00F5F8 1 85 4F sta NXTPNT 00F5FA 1 A5 31 lda BUFPNT + 1 00F5FC 1 85 4E sta NXTBF 00F5FE 1 A9 01 lda #$01 00F600 1 85 31 sta BUFPNT + 1 00F602 1 85 2F sta SAVPNT + 1 00F604 1 A9 BB lda #$BB 00F606 1 85 34 sta GCRPNT 00F608 1 85 36 sta BYTCNT 00F60A 1 20 E6 F7 jsr LF7E6 00F60D 1 A5 52 lda BTAB 00F60F 1 85 38 sta BID 00F611 1 A4 36 ldy BYTCNT 00F613 1 A5 53 lda BTAB + 1 00F615 1 91 2E sta (SAVPNT),y 00F617 1 C8 iny 00F618 1 A5 54 lda BTAB + 2 00F61A 1 91 2E sta (SAVPNT),y 00F61C 1 C8 iny 00F61D 1 A5 55 lda BTAB + 3 00F61F 1 91 2E sta (SAVPNT),y 00F621 1 C8 iny 00F622 1 84 36 sty BYTCNT 00F624 1 LF624: 00F624 1 20 E6 F7 jsr LF7E6 00F627 1 A4 36 ldy BYTCNT 00F629 1 A5 52 lda BTAB 00F62B 1 91 2E sta (SAVPNT),y 00F62D 1 C8 iny 00F62E 1 A5 53 lda BTAB + 1 00F630 1 91 2E sta (SAVPNT),y 00F632 1 C8 iny 00F633 1 F0 0E beq LF643 00F635 1 A5 54 lda BTAB + 2 00F637 1 91 2E sta (SAVPNT),y 00F639 1 C8 iny 00F63A 1 A5 55 lda BTAB + 3 00F63C 1 91 2E sta (SAVPNT),y 00F63E 1 C8 iny 00F63F 1 84 36 sty BYTCNT 00F641 1 D0 E1 bne LF624 00F643 1 LF643: 00F643 1 A5 54 lda BTAB + 2 00F645 1 91 30 sta (BUFPNT),y 00F647 1 C8 iny 00F648 1 A5 55 lda BTAB + 3 00F64A 1 91 30 sta (BUFPNT),y 00F64C 1 C8 iny 00F64D 1 84 36 sty BYTCNT 00F64F 1 LF64F: 00F64F 1 20 E6 F7 jsr LF7E6 00F652 1 A4 36 ldy BYTCNT 00F654 1 A5 52 lda BTAB 00F656 1 91 30 sta (BUFPNT),y 00F658 1 C8 iny 00F659 1 A5 53 lda BTAB + 1 00F65B 1 91 30 sta (BUFPNT),y 00F65D 1 C8 iny 00F65E 1 A5 54 lda BTAB + 2 00F660 1 91 30 sta (BUFPNT),y 00F662 1 C8 iny 00F663 1 A5 55 lda BTAB + 3 00F665 1 91 30 sta (BUFPNT),y 00F667 1 C8 iny 00F668 1 84 36 sty BYTCNT 00F66A 1 C0 BB cpy #$BB 00F66C 1 90 E1 bcc LF64F 00F66E 1 A9 45 lda #$45 00F670 1 85 2E sta SAVPNT 00F672 1 A5 31 lda BUFPNT + 1 00F674 1 85 2F sta SAVPNT + 1 00F676 1 A0 BA ldy #$BA 00F678 1 LF678: 00F678 1 B1 30 lda (BUFPNT),y 00F67A 1 91 2E sta (SAVPNT),y 00F67C 1 88 dey 00F67D 1 D0 F9 bne LF678 00F67F 1 B1 30 lda (BUFPNT),y 00F681 1 91 2E sta (SAVPNT),y 00F683 1 A2 BB ldx #$BB 00F685 1 LF685: 00F685 1 BD 00 01 lda NODRV + 1,x 00F688 1 91 30 sta (BUFPNT),y 00F68A 1 C8 iny 00F68B 1 E8 inx 00F68C 1 D0 F7 bne LF685 00F68E 1 86 50 stx GCRFLG 00F690 1 60 rts 00F691 1 LF691: 00F691 1 C9 20 cmp #$20 00F693 1 F0 03 beq LF698 00F695 1 4C CA F6 jmp LF6CA 00F698 1 LF698: 00F698 1 20 E9 F5 jsr LF5E9 00F69B 1 85 3A sta CHKSUM 00F69D 1 20 8F F7 jsr LF78F 00F6A0 1 20 0A F5 jsr LF50A 00F6A3 1 A0 BB ldy #$BB 00F6A5 1 LF6A5: 00F6A5 1 B9 00 01 lda NODRV + 1,y 00F6A8 1 LF6A8: 00F6A8 1 50 FE bvc LF6A8 00F6AA 1 B8 clv 00F6AB 1 4D 01 1C eor VDC_PA2 00F6AE 1 D0 15 bne LF6C5 00F6B0 1 C8 iny 00F6B1 1 D0 F2 bne LF6A5 00F6B3 1 LF6B3: 00F6B3 1 B1 30 lda (BUFPNT),y 00F6B5 1 LF6B5: 00F6B5 1 50 FE bvc LF6B5 00F6B7 1 B8 clv 00F6B8 1 4D 01 1C eor VDC_PA2 00F6BB 1 D0 08 bne LF6C5 00F6BD 1 C8 iny 00F6BE 1 C0 FD cpy #$FD 00F6C0 1 D0 F1 bne LF6B3 00F6C2 1 4C 18 F4 jmp LF418 00F6C5 1 LF6C5: 00F6C5 1 A9 07 lda #$07 00F6C7 1 4C 69 F9 jmp LF969 00F6CA 1 LF6CA: 00F6CA 1 20 10 F5 jsr LF510 00F6CD 1 4C 18 F4 jmp LF418 00F6D0 1 LF6D0: 00F6D0 1 A9 00 lda #$00 00F6D2 1 85 57 sta GTAB + 1 00F6D4 1 85 5A sta GTAB + 4 00F6D6 1 A4 34 ldy GCRPNT 00F6D8 1 A5 52 lda BTAB 00F6DA 1 29 F0 and #$F0 00F6DC 1 4A lsr a 00F6DD 1 4A lsr a 00F6DE 1 4A lsr a 00F6DF 1 4A lsr a 00F6E0 1 AA tax 00F6E1 1 BD 7F F7 lda LF77F,x 00F6E4 1 0A asl a 00F6E5 1 0A asl a 00F6E6 1 0A asl a 00F6E7 1 85 56 sta GTAB 00F6E9 1 A5 52 lda BTAB 00F6EB 1 29 0F and #$0F 00F6ED 1 AA tax 00F6EE 1 BD 7F F7 lda LF77F,x 00F6F1 1 6A ror a 00F6F2 1 66 57 ror GTAB + 1 00F6F4 1 6A ror a 00F6F5 1 66 57 ror GTAB + 1 00F6F7 1 29 07 and #$07 00F6F9 1 05 56 ora GTAB 00F6FB 1 91 30 sta (BUFPNT),y 00F6FD 1 C8 iny 00F6FE 1 A5 53 lda BTAB + 1 00F700 1 29 F0 and #$F0 00F702 1 4A lsr a 00F703 1 4A lsr a 00F704 1 4A lsr a 00F705 1 4A lsr a 00F706 1 AA tax 00F707 1 BD 7F F7 lda LF77F,x 00F70A 1 0A asl a 00F70B 1 05 57 ora GTAB + 1 00F70D 1 85 57 sta GTAB + 1 00F70F 1 A5 53 lda BTAB + 1 00F711 1 29 0F and #$0F 00F713 1 AA tax 00F714 1 BD 7F F7 lda LF77F,x 00F717 1 2A rol a 00F718 1 2A rol a 00F719 1 2A rol a 00F71A 1 2A rol a 00F71B 1 85 58 sta GTAB + 2 00F71D 1 2A rol a 00F71E 1 29 01 and #$01 00F720 1 05 57 ora GTAB + 1 00F722 1 91 30 sta (BUFPNT),y 00F724 1 C8 iny 00F725 1 A5 54 lda BTAB + 2 00F727 1 29 F0 and #$F0 00F729 1 4A lsr a 00F72A 1 4A lsr a 00F72B 1 4A lsr a 00F72C 1 4A lsr a 00F72D 1 AA tax 00F72E 1 BD 7F F7 lda LF77F,x 00F731 1 18 clc 00F732 1 6A ror a 00F733 1 05 58 ora GTAB + 2 00F735 1 91 30 sta (BUFPNT),y 00F737 1 C8 iny 00F738 1 6A ror a 00F739 1 29 80 and #$80 00F73B 1 85 59 sta GTAB + 3 00F73D 1 A5 54 lda BTAB + 2 00F73F 1 29 0F and #$0F 00F741 1 AA tax 00F742 1 BD 7F F7 lda LF77F,x 00F745 1 0A asl a 00F746 1 0A asl a 00F747 1 29 7C and #$7C 00F749 1 05 59 ora GTAB + 3 00F74B 1 85 59 sta GTAB + 3 00F74D 1 A5 55 lda BTAB + 3 00F74F 1 29 F0 and #$F0 00F751 1 4A lsr a 00F752 1 4A lsr a 00F753 1 4A lsr a 00F754 1 4A lsr a 00F755 1 AA tax 00F756 1 BD 7F F7 lda LF77F,x 00F759 1 6A ror a 00F75A 1 66 5A ror GTAB + 4 00F75C 1 6A ror a 00F75D 1 66 5A ror GTAB + 4 00F75F 1 6A ror a 00F760 1 66 5A ror GTAB + 4 00F762 1 29 03 and #$03 00F764 1 05 59 ora GTAB + 3 00F766 1 91 30 sta (BUFPNT),y 00F768 1 C8 iny 00F769 1 D0 04 bne LF76F 00F76B 1 A5 2F lda SAVPNT + 1 00F76D 1 85 31 sta BUFPNT + 1 00F76F 1 LF76F: 00F76F 1 A5 55 lda BTAB + 3 00F771 1 29 0F and #$0F 00F773 1 AA tax 00F774 1 BD 7F F7 lda LF77F,x 00F777 1 05 5A ora GTAB + 4 00F779 1 91 30 sta (BUFPNT),y 00F77B 1 C8 iny 00F77C 1 84 34 sty GCRPNT 00F77E 1 60 rts 00F77F 1 LF77F: 00F77F 1 0A 0B 12 13 .byte $0A,$0B,$12,$13,$0E,$0F,$16,$17 00F783 1 0E 0F 16 17 00F787 1 09 19 1A 1B .byte $09,$19,$1A,$1B,$0D,$1D,$1E,$15 00F78B 1 0D 1D 1E 15 00F78F 1 LF78F: 00F78F 1 A9 00 lda #$00 00F791 1 85 30 sta BUFPNT 00F793 1 85 2E sta SAVPNT 00F795 1 85 36 sta BYTCNT 00F797 1 A9 BB lda #$BB 00F799 1 85 34 sta GCRPNT 00F79B 1 85 50 sta GCRFLG 00F79D 1 A5 31 lda BUFPNT + 1 00F79F 1 85 2F sta SAVPNT + 1 00F7A1 1 A9 01 lda #$01 00F7A3 1 85 31 sta BUFPNT + 1 00F7A5 1 A5 47 lda DBID 00F7A7 1 85 52 sta BTAB 00F7A9 1 A4 36 ldy BYTCNT 00F7AB 1 B1 2E lda (SAVPNT),y 00F7AD 1 85 53 sta BTAB + 1 00F7AF 1 C8 iny 00F7B0 1 B1 2E lda (SAVPNT),y 00F7B2 1 85 54 sta BTAB + 2 00F7B4 1 C8 iny 00F7B5 1 B1 2E lda (SAVPNT),y 00F7B7 1 85 55 sta BTAB + 3 00F7B9 1 C8 iny 00F7BA 1 LF7BA: 00F7BA 1 84 36 sty BYTCNT 00F7BC 1 20 D0 F6 jsr LF6D0 00F7BF 1 A4 36 ldy BYTCNT 00F7C1 1 B1 2E lda (SAVPNT),y 00F7C3 1 85 52 sta BTAB 00F7C5 1 C8 iny 00F7C6 1 F0 11 beq LF7D9 00F7C8 1 B1 2E lda (SAVPNT),y 00F7CA 1 85 53 sta BTAB + 1 00F7CC 1 C8 iny 00F7CD 1 B1 2E lda (SAVPNT),y 00F7CF 1 85 54 sta BTAB + 2 00F7D1 1 C8 iny 00F7D2 1 B1 2E lda (SAVPNT),y 00F7D4 1 85 55 sta BTAB + 3 00F7D6 1 C8 iny 00F7D7 1 D0 E1 bne LF7BA 00F7D9 1 LF7D9: 00F7D9 1 A5 3A lda CHKSUM 00F7DB 1 85 53 sta BTAB + 1 00F7DD 1 A9 00 lda #$00 00F7DF 1 85 54 sta BTAB + 2 00F7E1 1 85 55 sta BTAB + 3 00F7E3 1 4C D0 F6 jmp LF6D0 00F7E6 1 LF7E6: 00F7E6 1 A4 34 ldy GCRPNT 00F7E8 1 B1 30 lda (BUFPNT),y 00F7EA 1 29 F8 and #$F8 00F7EC 1 4A lsr a 00F7ED 1 4A lsr a 00F7EE 1 4A lsr a 00F7EF 1 85 56 sta GTAB 00F7F1 1 B1 30 lda (BUFPNT),y 00F7F3 1 29 07 and #$07 00F7F5 1 0A asl a 00F7F6 1 0A asl a 00F7F7 1 85 57 sta GTAB + 1 00F7F9 1 C8 iny 00F7FA 1 D0 06 bne LF802 00F7FC 1 A5 4E lda NXTBF 00F7FE 1 85 31 sta BUFPNT + 1 00F800 1 A4 4F ldy NXTPNT 00F802 1 LF802: 00F802 1 B1 30 lda (BUFPNT),y 00F804 1 29 C0 and #$C0 00F806 1 2A rol a 00F807 1 2A rol a 00F808 1 2A rol a 00F809 1 05 57 ora GTAB + 1 00F80B 1 85 57 sta GTAB + 1 00F80D 1 B1 30 lda (BUFPNT),y 00F80F 1 29 3E and #$3E 00F811 1 4A lsr a 00F812 1 85 58 sta GTAB + 2 00F814 1 B1 30 lda (BUFPNT),y 00F816 1 29 01 and #$01 00F818 1 0A asl a 00F819 1 0A asl a 00F81A 1 0A asl a 00F81B 1 0A asl a 00F81C 1 85 59 sta GTAB + 3 00F81E 1 C8 iny 00F81F 1 B1 30 lda (BUFPNT),y 00F821 1 29 F0 and #$F0 00F823 1 4A lsr a 00F824 1 4A lsr a 00F825 1 4A lsr a 00F826 1 4A lsr a 00F827 1 05 59 ora GTAB + 3 00F829 1 85 59 sta GTAB + 3 00F82B 1 B1 30 lda (BUFPNT),y 00F82D 1 29 0F and #$0F 00F82F 1 0A asl a 00F830 1 85 5A sta GTAB + 4 00F832 1 C8 iny 00F833 1 B1 30 lda (BUFPNT),y 00F835 1 29 80 and #$80 00F837 1 18 clc 00F838 1 2A rol a 00F839 1 2A rol a 00F83A 1 29 01 and #$01 00F83C 1 05 5A ora GTAB + 4 00F83E 1 85 5A sta GTAB + 4 00F840 1 B1 30 lda (BUFPNT),y 00F842 1 29 7C and #$7C 00F844 1 4A lsr a 00F845 1 4A lsr a 00F846 1 85 5B sta GTAB + 5 00F848 1 B1 30 lda (BUFPNT),y 00F84A 1 29 03 and #$03 00F84C 1 0A asl a 00F84D 1 0A asl a 00F84E 1 0A asl a 00F84F 1 85 5C sta GTAB + 6 00F851 1 C8 iny 00F852 1 D0 06 bne LF85A 00F854 1 A5 4E lda NXTBF 00F856 1 85 31 sta BUFPNT + 1 00F858 1 A4 4F ldy NXTPNT 00F85A 1 LF85A: 00F85A 1 B1 30 lda (BUFPNT),y 00F85C 1 29 E0 and #$E0 00F85E 1 2A rol a 00F85F 1 2A rol a 00F860 1 2A rol a 00F861 1 2A rol a 00F862 1 05 5C ora GTAB + 6 00F864 1 85 5C sta GTAB + 6 00F866 1 B1 30 lda (BUFPNT),y 00F868 1 29 1F and #$1F 00F86A 1 85 5D sta GTAB + 7 00F86C 1 C8 iny 00F86D 1 84 34 sty GCRPNT 00F86F 1 A6 56 ldx GTAB 00F871 1 BD A0 F8 lda LF8A0,x 00F874 1 A6 57 ldx GTAB + 1 00F876 1 1D C0 F8 ora LF8C0,x 00F879 1 85 52 sta BTAB 00F87B 1 A6 58 ldx GTAB + 2 00F87D 1 BD A0 F8 lda LF8A0,x 00F880 1 A6 59 ldx GTAB + 3 00F882 1 1D C0 F8 ora LF8C0,x 00F885 1 85 53 sta BTAB + 1 00F887 1 A6 5A ldx GTAB + 4 00F889 1 BD A0 F8 lda LF8A0,x 00F88C 1 A6 5B ldx GTAB + 5 00F88E 1 1D C0 F8 ora LF8C0,x 00F891 1 85 54 sta BTAB + 2 00F893 1 A6 5C ldx GTAB + 6 00F895 1 BD A0 F8 lda LF8A0,x 00F898 1 A6 5D ldx GTAB + 7 00F89A 1 1D C0 F8 ora LF8C0,x 00F89D 1 85 55 sta BTAB + 3 00F89F 1 60 rts 00F8A0 1 LF8A0: 00F8A0 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00F8A4 1 FF FF FF FF 00F8A8 1 FF 80 00 10 .byte $FF,$80,$00,$10,$FF,$C0,$40,$50 00F8AC 1 FF C0 40 50 00F8B0 1 FF FF 20 30 .byte $FF,$FF,$20,$30,$FF,$F0,$60,$70 00F8B4 1 FF F0 60 70 00F8B8 1 FF 90 A0 B0 .byte $FF,$90,$A0,$B0,$FF,$D0,$E0,$FF 00F8BC 1 FF D0 E0 FF 00F8C0 1 LF8C0: 00F8C0 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 00F8C4 1 FF FF FF FF 00F8C8 1 FF 08 00 01 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 00F8CC 1 FF 0C 04 05 00F8D0 1 FF FF 02 03 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 00F8D4 1 FF 0F 06 07 00F8D8 1 FF 09 0A 0B .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 00F8DC 1 FF 0D 0E FF 00F8E0 1 LF8E0: 00F8E0 1 A9 00 lda #$00 00F8E2 1 85 34 sta GCRPNT 00F8E4 1 85 2E sta SAVPNT 00F8E6 1 85 36 sta BYTCNT 00F8E8 1 A9 01 lda #$01 00F8EA 1 85 4E sta NXTBF 00F8EC 1 A9 BA lda #$BA 00F8EE 1 85 4F sta NXTPNT 00F8F0 1 A5 31 lda BUFPNT + 1 00F8F2 1 85 2F sta SAVPNT + 1 00F8F4 1 20 E6 F7 jsr LF7E6 00F8F7 1 A5 52 lda BTAB 00F8F9 1 85 38 sta BID 00F8FB 1 A4 36 ldy BYTCNT 00F8FD 1 A5 53 lda BTAB + 1 00F8FF 1 91 2E sta (SAVPNT),y 00F901 1 C8 iny 00F902 1 A5 54 lda BTAB + 2 00F904 1 91 2E sta (SAVPNT),y 00F906 1 C8 iny 00F907 1 A5 55 lda BTAB + 3 00F909 1 91 2E sta (SAVPNT),y 00F90B 1 C8 iny 00F90C 1 LF90C: 00F90C 1 84 36 sty BYTCNT 00F90E 1 20 E6 F7 jsr LF7E6 00F911 1 A4 36 ldy BYTCNT 00F913 1 A5 52 lda BTAB 00F915 1 91 2E sta (SAVPNT),y 00F917 1 C8 iny 00F918 1 F0 11 beq LF92B 00F91A 1 A5 53 lda BTAB + 1 00F91C 1 91 2E sta (SAVPNT),y 00F91E 1 C8 iny 00F91F 1 A5 54 lda BTAB + 2 00F921 1 91 2E sta (SAVPNT),y 00F923 1 C8 iny 00F924 1 A5 55 lda BTAB + 3 00F926 1 91 2E sta (SAVPNT),y 00F928 1 C8 iny 00F929 1 D0 E1 bne LF90C 00F92B 1 LF92B: 00F92B 1 A5 53 lda BTAB + 1 00F92D 1 85 3A sta CHKSUM 00F92F 1 A5 2F lda SAVPNT + 1 00F931 1 85 31 sta BUFPNT + 1 00F933 1 60 rts 00F934 1 LF934: 00F934 1 A5 31 lda BUFPNT + 1 00F936 1 85 2F sta SAVPNT + 1 00F938 1 A9 00 lda #$00 00F93A 1 85 31 sta BUFPNT + 1 00F93C 1 A9 24 lda #$24 00F93E 1 85 34 sta GCRPNT 00F940 1 A5 39 lda HBID 00F942 1 85 52 sta BTAB 00F944 1 A5 1A lda HEADER + 4 00F946 1 85 53 sta BTAB + 1 00F948 1 A5 19 lda HEADER + 3 00F94A 1 85 54 sta BTAB + 2 00F94C 1 A5 18 lda HEADER + 2 00F94E 1 85 55 sta BTAB + 3 00F950 1 20 D0 F6 jsr LF6D0 00F953 1 A5 17 lda HEADER + 1 00F955 1 85 52 sta BTAB 00F957 1 A5 16 lda HEADER 00F959 1 85 53 sta BTAB + 1 00F95B 1 A9 00 lda #$00 00F95D 1 85 54 sta BTAB + 2 00F95F 1 85 55 sta BTAB + 3 00F961 1 20 D0 F6 jsr LF6D0 00F964 1 A5 2F lda SAVPNT + 1 00F966 1 85 31 sta BUFPNT + 1 00F968 1 60 rts 00F969 1 LF969: 00F969 1 A4 3F ldy JOBN 00F96B 1 99 00 00 sta JOBS0,y 00F96E 1 A5 50 lda GCRFLG 00F970 1 F0 03 beq LF975 00F972 1 20 F2 F5 jsr LF5F2 00F975 1 LF975: 00F975 1 20 8F F9 jsr LF98F 00F978 1 A6 49 ldx SAVSP 00F97A 1 9A txs 00F97B 1 4C BE F2 jmp LF2BE 00F97E 1 LF97E: 00F97E 1 A9 A0 lda #$A0 00F980 1 85 20 sta DRVST 00F982 1 AD 00 1C lda VDC_PB2 00F985 1 09 04 ora #VDC_PB2_DRIVE0MOTOR 00F987 1 8D 00 1C sta VDC_PB2 00F98A 1 .if CompileDrive >= DRIVE_1571 00F98A 1 lda #$32 00F98A 1 .elseif CompileDrive >= DRIVE_1570 00F98A 1 A9 7D lda #$7D 00F98C 1 .else 00F98C 1 lda #$3C 00F98C 1 .endif 00F98C 1 85 48 sta ACLTIM 00F98E 1 60 rts 00F98F 1 LF98F: 00F98F 1 A6 3E ldx CDRIVE 00F991 1 A5 20 lda DRVST 00F993 1 09 10 ora #$10 00F995 1 85 20 sta DRVST 00F997 1 .if CompileDrive >= DRIVE_1570 00F997 1 4C 2B A6 jmp LA62B 00F99A 1 EA EA FillNOP 2 00F99C 1 .else 00F99C 1 lda #$FF 00F99C 1 sta ACLTIM 00F99C 1 rts 00F99C 1 .endif 00F99C 1 LF99C: 00F99C 1 AD 07 1C lda VDC_T1HL2 00F99F 1 8D 05 1C sta VDC_T1HC2 00F9A2 1 AD 00 1C lda VDC_PB2 00F9A5 1 29 10 and #VDC_PB2_WRITEPROTECT 00F9A7 1 C5 1E cmp LWPT 00F9A9 1 85 1E sta LWPT 00F9AB 1 .if CompileDrive >= DRIVE_1570 00F9AB 1 4C 34 A6 jmp LA634 00F9AE 1 EA EA EA FillNOP 3 00F9B1 1 .else 00F9B1 1 beq LF9B1 00F9B1 1 lda #$01 00F9B1 1 sta WPSW 00F9B1 1 .endif 00F9B1 1 LF9B1: 00F9B1 1 AD FE 02 lda PHASE 00F9B4 1 F0 15 beq LF9CB 00F9B6 1 C9 02 cmp #$02 00F9B8 1 D0 07 bne LF9C1 00F9BA 1 A9 00 lda #$00 00F9BC 1 8D FE 02 sta PHASE 00F9BF 1 F0 0A beq LF9CB 00F9C1 1 LF9C1: 00F9C1 1 85 4A sta STEPS 00F9C3 1 A9 02 lda #$02 00F9C5 1 8D FE 02 sta PHASE 00F9C8 1 4C 2E FA jmp LFA2E 00F9CB 1 LF9CB: 00F9CB 1 A6 3E ldx CDRIVE 00F9CD 1 30 07 bmi LF9D6 00F9CF 1 A5 20 lda DRVST 00F9D1 1 A8 tay 00F9D2 1 C9 20 cmp #$20 00F9D4 1 D0 03 bne LF9D9 00F9D6 1 LF9D6: 00F9D6 1 4C BE FA jmp LFABE 00F9D9 1 LF9D9: 00F9D9 1 C6 48 dec ACLTIM 00F9DB 1 D0 1D bne LF9FA 00F9DD 1 98 tya 00F9DE 1 10 04 bpl LF9E4 00F9E0 1 29 7F and #$7F 00F9E2 1 85 20 sta DRVST 00F9E4 1 LF9E4: 00F9E4 1 29 10 and #$10 00F9E6 1 F0 12 beq LF9FA 00F9E8 1 .if CompileDrive >= DRIVE_1570 00F9E8 1 C6 35 dec GCRERR 00F9EA 1 D0 0E bne LF9FA 00F9EC 1 EA nop 00F9ED 1 20 70 87 jsr L8770 00F9F0 1 .else 00F9F0 1 lda VDC_PB2 00F9F0 1 and # ~ VDC_PB2_DRIVE0MOTOR 00F9F0 1 sta VDC_PB2 00F9F0 1 .endif 00F9F0 1 A9 FF lda #$FF 00F9F2 1 85 3E sta CDRIVE 00F9F4 1 A9 00 lda #$00 00F9F6 1 85 20 sta DRVST 00F9F8 1 F0 DC beq LF9D6 00F9FA 1 LF9FA: 00F9FA 1 98 tya 00F9FB 1 29 40 and #$40 00F9FD 1 D0 03 bne LFA02 00F9FF 1 4C BE FA jmp LFABE 00FA02 1 LFA02: 00FA02 1 6C 62 00 jmp (NXTST) 00FA05 1 LFA05: 00FA05 1 A5 4A lda STEPS 00FA07 1 10 05 bpl LFA0E 00FA09 1 49 FF eor #$FF 00FA0B 1 18 clc 00FA0C 1 69 01 adc #$01 00FA0E 1 LFA0E: 00FA0E 1 C5 64 cmp MINSTP 00FA10 1 B0 0A bcs LFA1C 00FA12 1 A9 3B lda #LFA3B 00FA18 1 85 63 sta NXTST + 1 00FA1A 1 D0 12 bne LFA2E 00FA1C 1 LFA1C: 00FA1C 1 E5 5E sbc AS 00FA1E 1 E5 5E sbc AS 00FA20 1 85 61 sta RSTEPS 00FA22 1 A5 5E lda AS 00FA24 1 85 60 sta ACLSTP 00FA26 1 A9 7B lda #LFA7B 00FA2C 1 85 63 sta NXTST + 1 00FA2E 1 LFA2E: 00FA2E 1 A5 4A lda STEPS 00FA30 1 10 31 bpl LFA63 00FA32 1 .if CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03 00FA32 1 .if CompileDrive >= DRIVE_1570 00FA32 1 4C 45 FF jmp LFF45 00FA35 1 .else 00FA35 1 jmp LFF36 00FA35 1 .endif 00FA35 1 EA EA EA FillNOP 3 00FA38 1 LFA38: 00FA38 1 4C 69 FA jmp LFA69 00FA3B 1 00FA3B 1 .else 00FA3B 1 00FA3B 1 inc STEPS 00FA3B 1 ldx VDC_PB2 00FA3B 1 dex 00FA3B 1 jmp LFA69 00FA3B 1 .endif 00FA3B 1 00FA3B 1 LFA3B: 00FA3B 1 A5 4A lda STEPS 00FA3D 1 D0 EF bne LFA2E 00FA3F 1 A9 4E lda #LFA4E 00FA45 1 85 63 sta NXTST + 1 00FA47 1 A9 05 lda #$05 00FA49 1 85 60 sta ACLSTP 00FA4B 1 4C BE FA jmp LFABE 00FA4E 1 LFA4E: 00FA4E 1 C6 60 dec ACLSTP 00FA50 1 D0 6C bne LFABE 00FA52 1 A5 20 lda DRVST 00FA54 1 29 BF and #$BF 00FA56 1 85 20 sta DRVST 00FA58 1 A9 05 lda #LFA05 00FA5E 1 85 63 sta NXTST + 1 00FA60 1 4C BE FA jmp LFABE 00FA63 1 LFA63: 00FA63 1 C6 4A dec STEPS 00FA65 1 AE 00 1C ldx VDC_PB2 00FA68 1 E8 inx 00FA69 1 LFA69: 00FA69 1 8A txa 00FA6A 1 29 03 and #VDC_PB2_STEPPER 00FA6C 1 85 4B sta TMP 00FA6E 1 AD 00 1C lda VDC_PB2 00FA71 1 29 FC and # ~ VDC_PB2_STEPPER 00FA73 1 05 4B ora TMP 00FA75 1 8D 00 1C sta VDC_PB2 00FA78 1 4C BE FA jmp LFABE 00FA7B 1 LFA7B: 00FA7B 1 38 sec 00FA7C 1 AD 07 1C lda VDC_T1HL2 00FA7F 1 E5 5F sbc AF 00FA81 1 8D 05 1C sta VDC_T1HC2 00FA84 1 C6 60 dec ACLSTP 00FA86 1 D0 0C bne LFA94 00FA88 1 A5 5E lda AS 00FA8A 1 85 60 sta ACLSTP 00FA8C 1 A9 97 lda #LFA97 00FA92 1 85 63 sta NXTST + 1 00FA94 1 LFA94: 00FA94 1 4C 2E FA jmp LFA2E 00FA97 1 LFA97: 00FA97 1 C6 61 dec RSTEPS 00FA99 1 D0 F9 bne LFA94 00FA9B 1 A9 A5 lda #LFAA5 00FAA1 1 85 63 sta NXTST + 1 00FAA3 1 D0 EF bne LFA94 00FAA5 1 LFAA5: 00FAA5 1 AD 07 1C lda VDC_T1HL2 00FAA8 1 18 clc 00FAA9 1 65 5F adc AF 00FAAB 1 8D 05 1C sta VDC_T1HC2 00FAAE 1 C6 60 dec ACLSTP 00FAB0 1 D0 E2 bne LFA94 00FAB2 1 A9 4E lda #LFA4E 00FAB8 1 85 63 sta NXTST + 1 00FABA 1 A9 05 lda #$05 00FABC 1 85 60 sta ACLSTP 00FABE 1 LFABE: 00FABE 1 AD 0C 1C lda VDC_PCR2 00FAC1 1 29 FD and #$FD 00FAC3 1 8D 0C 1C sta VDC_PCR2 00FAC6 1 60 rts 00FAC7 1 LFAC7: 00FAC7 1 A5 51 lda FTNUM 00FAC9 1 10 2A bpl LFAF5 00FACB 1 A6 3D ldx DRIVE 00FACD 1 A9 60 lda #$60 00FACF 1 95 20 sta DRVST,x 00FAD1 1 A9 01 lda #$01 00FAD3 1 95 22 sta DRVTRK,x 00FAD5 1 85 51 sta FTNUM 00FAD7 1 A9 A4 lda #$A4 00FAD9 1 85 4A sta STEPS 00FADB 1 AD 00 1C lda VDC_PB2 00FADE 1 29 FC and # ~ VDC_PB2_STEPPER 00FAE0 1 8D 00 1C sta VDC_PB2 00FAE3 1 A9 0A lda #$0A 00FAE5 1 8D 20 06 sta BUFFER3 + 32 00FAE8 1 A9 A0 lda #$A0 00FAEA 1 8D 21 06 sta BUFFER3 + 33 00FAED 1 A9 0F lda #$0F 00FAEF 1 8D 22 06 sta BUFFER3 + 34 00FAF2 1 4C 9C F9 jmp LF99C 00FAF5 1 LFAF5: 00FAF5 1 A0 00 ldy #$00 00FAF7 1 D1 32 cmp (HDRPNT),y 00FAF9 1 F0 05 beq LFB00 00FAFB 1 91 32 sta (HDRPNT),y 00FAFD 1 4C 9C F9 jmp LF99C 00FB00 1 LFB00: 00FB00 1 AD 00 1C lda VDC_PB2 00FB03 1 29 10 and #VDC_PB2_WRITEPROTECT 00FB05 1 D0 05 bne LFB0C 00FB07 1 A9 08 lda #$08 00FB09 1 4C D3 FD jmp LFDD3 00FB0C 1 LFB0C: 00FB0C 1 20 A3 FD jsr LFDA3 00FB0F 1 20 C3 FD jsr LFDC3 00FB12 1 A9 55 lda #$55 00FB14 1 8D 01 1C sta VDC_PA2 00FB17 1 20 C3 FD jsr LFDC3 00FB1A 1 20 00 FE jsr LFE00 00FB1D 1 20 56 F5 jsr LF556 00FB20 1 A9 40 lda #$40 00FB22 1 0D 0B 18 ora VBC_ACR1 00FB25 1 8D 0B 18 sta VBC_ACR1 00FB28 1 A9 62 lda #$62 00FB2A 1 8D 06 18 sta VBC_T1LL1 00FB2D 1 A9 00 lda #$00 00FB2F 1 8D 07 18 sta VBC_T1HL1 00FB32 1 8D 05 18 sta VBC_T1HC1 00FB35 1 A0 00 ldy #$00 00FB37 1 A2 00 ldx #$00 00FB39 1 LFB39: 00FB39 1 2C 00 1C bit VDC_PB2 00FB3C 1 30 FB bmi LFB39 00FB3E 1 LFB3E: 00FB3E 1 2C 00 1C bit VDC_PB2 00FB41 1 10 FB bpl LFB3E 00FB43 1 LFB43: 00FB43 1 AD 04 18 lda VBC_T1LC1 00FB46 1 LFB46: 00FB46 1 2C 00 1C bit VDC_PB2 00FB49 1 10 11 bpl LFB5C 00FB4B 1 AD 0D 18 lda VBC_IFR1 00FB4E 1 0A asl a 00FB4F 1 10 F5 bpl LFB46 00FB51 1 E8 inx 00FB52 1 D0 EF bne LFB43 00FB54 1 C8 iny 00FB55 1 D0 EC bne LFB43 00FB57 1 A9 02 lda #$02 00FB59 1 4C D3 FD jmp LFDD3 00FB5C 1 LFB5C: 00FB5C 1 86 71 stx T2 00FB5E 1 84 72 sty T3 00FB60 1 A2 00 ldx #$00 00FB62 1 A0 00 ldy #$00 00FB64 1 LFB64: 00FB64 1 AD 04 18 lda VBC_T1LC1 00FB67 1 LFB67: 00FB67 1 2C 00 1C bit VDC_PB2 00FB6A 1 30 11 bmi LFB7D 00FB6C 1 AD 0D 18 lda VBC_IFR1 00FB6F 1 0A asl a 00FB70 1 10 F5 bpl LFB67 00FB72 1 E8 inx 00FB73 1 D0 EF bne LFB64 00FB75 1 C8 iny 00FB76 1 D0 EC bne LFB64 00FB78 1 A9 02 lda #$02 00FB7A 1 4C D3 FD jmp LFDD3 00FB7D 1 LFB7D: 00FB7D 1 38 sec 00FB7E 1 8A txa 00FB7F 1 E5 71 sbc T2 00FB81 1 AA tax 00FB82 1 85 70 sta T1 00FB84 1 98 tya 00FB85 1 E5 72 sbc T3 00FB87 1 A8 tay 00FB88 1 85 71 sta T2 00FB8A 1 10 0B bpl LFB97 00FB8C 1 49 FF eor #$FF 00FB8E 1 A8 tay 00FB8F 1 8A txa 00FB90 1 49 FF eor #$FF 00FB92 1 AA tax 00FB93 1 E8 inx 00FB94 1 D0 01 bne LFB97 00FB96 1 C8 iny 00FB97 1 LFB97: 00FB97 1 98 tya 00FB98 1 D0 04 bne LFB9E 00FB9A 1 E0 04 cpx #$04 00FB9C 1 90 18 bcc LFBB6 00FB9E 1 LFB9E: 00FB9E 1 06 70 asl T1 00FBA0 1 26 71 rol T2 00FBA2 1 18 clc 00FBA3 1 A5 70 lda T1 00FBA5 1 6D 21 06 adc BUFFER3 + 33 00FBA8 1 8D 21 06 sta BUFFER3 + 33 00FBAB 1 A5 71 lda T2 00FBAD 1 6D 22 06 adc BUFFER3 + 34 00FBB0 1 8D 22 06 sta BUFFER3 + 34 00FBB3 1 4C 0C FB jmp LFB0C 00FBB6 1 LFBB6: 00FBB6 1 A2 00 ldx #$00 00FBB8 1 A0 00 ldy #$00 00FBBA 1 B8 clv 00FBBB 1 LFBBB: 00FBBB 1 AD 00 1C lda VDC_PB2 00FBBE 1 10 0E bpl LFBCE 00FBC0 1 50 F9 bvc LFBBB 00FBC2 1 B8 clv 00FBC3 1 E8 inx 00FBC4 1 D0 F5 bne LFBBB 00FBC6 1 C8 iny 00FBC7 1 D0 F2 bne LFBBB 00FBC9 1 A9 03 lda #$03 00FBCB 1 4C D3 FD jmp LFDD3 00FBCE 1 LFBCE: 00FBCE 1 8A txa 00FBCF 1 0A asl a 00FBD0 1 8D 25 06 sta BUFFER3 + 37 00FBD3 1 98 tya 00FBD4 1 2A rol a 00FBD5 1 8D 24 06 sta BUFFER3 + 36 00FBD8 1 A9 BF lda #$BF 00FBDA 1 2D 0B 18 and VBC_ACR1 00FBDD 1 8D 0B 18 sta VBC_ACR1 00FBE0 1 A9 66 lda #$66 00FBE2 1 8D 26 06 sta BUFFER3 + 38 00FBE5 1 A6 43 ldx SECTR 00FBE7 1 A0 00 ldy #$00 00FBE9 1 98 tya 00FBEA 1 LFBEA: 00FBEA 1 18 clc 00FBEB 1 6D 26 06 adc BUFFER3 + 38 00FBEE 1 90 01 bcc LFBF1 00FBF0 1 C8 iny 00FBF1 1 LFBF1: 00FBF1 1 C8 iny 00FBF2 1 CA dex 00FBF3 1 D0 F5 bne LFBEA 00FBF5 1 49 FF eor #$FF 00FBF7 1 38 sec 00FBF8 1 69 00 adc #$00 00FBFA 1 18 clc 00FBFB 1 6D 25 06 adc BUFFER3 + 37 00FBFE 1 B0 03 bcs LFC03 00FC00 1 CE 24 06 dec BUFFER3 + 36 00FC03 1 LFC03: 00FC03 1 AA tax 00FC04 1 98 tya 00FC05 1 49 FF eor #$FF 00FC07 1 38 sec 00FC08 1 69 00 adc #$00 00FC0A 1 18 clc 00FC0B 1 6D 24 06 adc BUFFER3 + 36 00FC0E 1 10 05 bpl LFC15 00FC10 1 A9 04 lda #$04 00FC12 1 4C D3 FD jmp LFDD3 00FC15 1 LFC15: 00FC15 1 A8 tay 00FC16 1 8A txa 00FC17 1 A2 00 ldx #$00 00FC19 1 LFC19: 00FC19 1 38 sec 00FC1A 1 E5 43 sbc SECTR 00FC1C 1 B0 03 bcs LFC21 00FC1E 1 88 dey 00FC1F 1 30 03 bmi LFC24 00FC21 1 LFC21: 00FC21 1 E8 inx 00FC22 1 D0 F5 bne LFC19 00FC24 1 LFC24: 00FC24 1 8E 26 06 stx BUFFER3 + 38 00FC27 1 .if CompileDrive = DRIVE_1541C_02 00FC27 1 cpx #$02 00FC27 1 .else 00FC27 1 E0 04 cpx #$04 00FC29 1 .endif 00FC29 1 B0 05 bcs LFC30 00FC2B 1 A9 05 lda #$05 00FC2D 1 4C D3 FD jmp LFDD3 00FC30 1 LFC30: 00FC30 1 18 clc 00FC31 1 65 43 adc SECTR 00FC33 1 8D 27 06 sta BUFFER3 + 39 00FC36 1 A9 00 lda #$00 00FC38 1 8D 28 06 sta BUFFER3 + 40 00FC3B 1 A0 00 ldy #$00 00FC3D 1 A6 3D ldx DRIVE 00FC3F 1 LFC3F: 00FC3F 1 A5 39 lda HBID 00FC41 1 99 00 03 sta BUFFER0,y 00FC44 1 C8 iny 00FC45 1 C8 iny 00FC46 1 AD 28 06 lda BUFFER3 + 40 00FC49 1 99 00 03 sta BUFFER0,y 00FC4C 1 C8 iny 00FC4D 1 A5 51 lda FTNUM 00FC4F 1 99 00 03 sta BUFFER0,y 00FC52 1 C8 iny 00FC53 1 B5 13 lda DiskID0 + 1,x 00FC55 1 99 00 03 sta BUFFER0,y 00FC58 1 C8 iny 00FC59 1 B5 12 lda DiskID0,x 00FC5B 1 99 00 03 sta BUFFER0,y 00FC5E 1 C8 iny 00FC5F 1 A9 0F lda #$0F 00FC61 1 99 00 03 sta BUFFER0,y 00FC64 1 C8 iny 00FC65 1 99 00 03 sta BUFFER0,y 00FC68 1 C8 iny 00FC69 1 A9 00 lda #$00 00FC6B 1 59 FA 02 eor NDBL,y 00FC6E 1 59 FB 02 eor NDBL + 1,y 00FC71 1 59 FC 02 eor NDBH,y 00FC74 1 59 FD 02 eor NDBH + 1,y 00FC77 1 99 F9 02 sta WBAM,y 00FC7A 1 EE 28 06 inc BUFFER3 + 40 00FC7D 1 AD 28 06 lda BUFFER3 + 40 00FC80 1 C5 43 cmp SECTR 00FC82 1 90 BB bcc LFC3F 00FC84 1 98 tya 00FC85 1 48 pha 00FC86 1 .if CompileDrive >= DRIVE_1541_01 00FC86 1 E8 inx 00FC87 1 .elseif CompileDrive >= DRIVE_1540 00FC87 1 nop 00FC87 1 .else 00FC87 1 ldx #$00 00FC87 1 .endif 00FC87 1 8A txa 00FC88 1 LFC88: 00FC88 1 9D 00 05 sta BUFFER2,x 00FC8B 1 E8 inx 00FC8C 1 D0 FA bne LFC88 00FC8E 1 A9 03 lda #$03 00FC90 1 85 31 sta BUFPNT + 1 00FC92 1 20 30 FE jsr LFE30 00FC95 1 68 pla 00FC96 1 A8 tay 00FC97 1 88 dey 00FC98 1 20 E5 FD jsr LFDE5 00FC9B 1 20 F5 FD jsr LFDF5 00FC9E 1 A9 05 lda #$05 00FCA0 1 85 31 sta BUFPNT + 1 00FCA2 1 20 E9 F5 jsr LF5E9 00FCA5 1 85 3A sta CHKSUM 00FCA7 1 20 8F F7 jsr LF78F 00FCAA 1 A9 00 lda #$00 00FCAC 1 85 32 sta HDRPNT 00FCAE 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FCAE 1 jsr LC002 00FCAE 1 .else 00FCAE 1 20 0E FE jsr LFE0E 00FCB1 1 .endif 00FCB1 1 00FCB1 1 LFCB1: 00FCB1 1 A9 FF lda #$FF 00FCB3 1 8D 01 1C sta VDC_PA2 00FCB6 1 A2 05 ldx #$05 00FCB8 1 LFCB8: 00FCB8 1 50 FE bvc LFCB8 00FCBA 1 B8 clv 00FCBB 1 CA dex 00FCBC 1 D0 FA bne LFCB8 00FCBE 1 A2 0A ldx #$0A 00FCC0 1 A4 32 ldy HDRPNT 00FCC2 1 LFCC2: 00FCC2 1 50 FE bvc LFCC2 00FCC4 1 B8 clv 00FCC5 1 B9 00 03 lda BUFFER0,y 00FCC8 1 8D 01 1C sta VDC_PA2 00FCCB 1 C8 iny 00FCCC 1 CA dex 00FCCD 1 D0 F3 bne LFCC2 00FCCF 1 A2 09 ldx #INTRA_SECTOR_GAP 00FCD1 1 LFCD1: 00FCD1 1 50 FE bvc LFCD1 00FCD3 1 B8 clv 00FCD4 1 A9 55 lda #$55 00FCD6 1 8D 01 1C sta VDC_PA2 00FCD9 1 CA dex 00FCDA 1 D0 F5 bne LFCD1 00FCDC 1 A9 FF lda #$FF 00FCDE 1 A2 05 ldx #$05 00FCE0 1 LFCE0: 00FCE0 1 50 FE bvc LFCE0 00FCE2 1 B8 clv 00FCE3 1 8D 01 1C sta VDC_PA2 00FCE6 1 CA dex 00FCE7 1 D0 F7 bne LFCE0 00FCE9 1 A2 BB ldx #$BB 00FCEB 1 LFCEB: 00FCEB 1 50 FE bvc LFCEB 00FCED 1 B8 clv 00FCEE 1 BD 00 01 lda NODRV + 1,x 00FCF1 1 8D 01 1C sta VDC_PA2 00FCF4 1 E8 inx 00FCF5 1 D0 F4 bne LFCEB 00FCF7 1 A0 00 ldy #$00 00FCF9 1 LFCF9: 00FCF9 1 50 FE bvc LFCF9 00FCFB 1 B8 clv 00FCFC 1 B1 30 lda (BUFPNT),y 00FCFE 1 8D 01 1C sta VDC_PA2 00FD01 1 C8 iny 00FD02 1 D0 F5 bne LFCF9 00FD04 1 A9 55 lda #$55 00FD06 1 AE 26 06 ldx BUFFER3 + 38 00FD09 1 LFD09: 00FD09 1 50 FE bvc LFD09 00FD0B 1 B8 clv 00FD0C 1 8D 01 1C sta VDC_PA2 00FD0F 1 CA dex 00FD10 1 D0 F7 bne LFD09 00FD12 1 A5 32 lda HDRPNT 00FD14 1 18 clc 00FD15 1 69 0A adc #$0A 00FD17 1 85 32 sta HDRPNT 00FD19 1 CE 28 06 dec BUFFER3 + 40 00FD1C 1 D0 93 bne LFCB1 00FD1E 1 LFD1E: 00FD1E 1 50 FE bvc LFD1E 00FD20 1 B8 clv 00FD21 1 LFD21: 00FD21 1 50 FE bvc LFD21 00FD23 1 B8 clv 00FD24 1 20 00 FE jsr LFE00 00FD27 1 A9 C8 lda #$C8 00FD29 1 8D 23 06 sta BUFFER3 + 35 00FD2C 1 LFD2C: 00FD2C 1 A9 00 lda #$00 00FD2E 1 85 30 sta BUFPNT 00FD30 1 A9 03 lda #$03 00FD32 1 85 31 sta BUFPNT + 1 00FD34 1 A5 43 lda SECTR 00FD36 1 8D 28 06 sta BUFFER3 + 40 00FD39 1 LFD39: 00FD39 1 20 56 F5 jsr LF556 00FD3C 1 A2 0A ldx #$0A 00FD3E 1 A0 00 ldy #$00 00FD40 1 LFD40: 00FD40 1 50 FE bvc LFD40 00FD42 1 B8 clv 00FD43 1 AD 01 1C lda VDC_PA2 00FD46 1 D1 30 cmp (BUFPNT),y 00FD48 1 D0 0E bne LFD58 00FD4A 1 C8 iny 00FD4B 1 CA dex 00FD4C 1 D0 F2 bne LFD40 00FD4E 1 18 clc 00FD4F 1 A5 30 lda BUFPNT 00FD51 1 69 0A adc #$0A 00FD53 1 85 30 sta BUFPNT 00FD55 1 4C 62 FD jmp LFD62 00FD58 1 LFD58: 00FD58 1 CE 23 06 dec BUFFER3 + 35 00FD5B 1 D0 CF bne LFD2C 00FD5D 1 A9 06 lda #$06 00FD5F 1 4C D3 FD jmp LFDD3 00FD62 1 LFD62: 00FD62 1 20 56 F5 jsr LF556 00FD65 1 A0 BB ldy #$BB 00FD67 1 LFD67: 00FD67 1 50 FE bvc LFD67 00FD69 1 B8 clv 00FD6A 1 AD 01 1C lda VDC_PA2 00FD6D 1 D9 00 01 cmp NODRV + 1,y 00FD70 1 D0 E6 bne LFD58 00FD72 1 C8 iny 00FD73 1 D0 F2 bne LFD67 00FD75 1 A2 FC ldx #$FC 00FD77 1 LFD77: 00FD77 1 50 FE bvc LFD77 00FD79 1 B8 clv 00FD7A 1 AD 01 1C lda VDC_PA2 00FD7D 1 D9 00 05 cmp BUFFER2,y 00FD80 1 D0 D6 bne LFD58 00FD82 1 C8 iny 00FD83 1 CA dex 00FD84 1 D0 F1 bne LFD77 00FD86 1 CE 28 06 dec BUFFER3 + 40 00FD89 1 D0 AE bne LFD39 00FD8B 1 E6 51 inc FTNUM 00FD8D 1 A5 51 lda FTNUM 00FD8F 1 C9 24 cmp #$24 00FD91 1 B0 03 bcs LFD96 00FD93 1 4C 9C F9 jmp LF99C 00FD96 1 LFD96: 00FD96 1 A9 FF lda #$FF 00FD98 1 85 51 sta FTNUM 00FD9A 1 A9 00 lda #$00 00FD9C 1 85 50 sta GCRFLG 00FD9E 1 A9 01 lda #$01 00FDA0 1 4C 69 F9 jmp LF969 00FDA3 1 LFDA3: 00FDA3 1 AD 0C 1C lda VDC_PCR2 00FDA6 1 29 1F and #$1F 00FDA8 1 09 C0 ora #$C0 00FDAA 1 8D 0C 1C sta VDC_PCR2 00FDAD 1 A9 FF lda #$FF 00FDAF 1 8D 03 1C sta VDC_DDRA2 00FDB2 1 8D 01 1C sta VDC_PA2 00FDB5 1 A2 28 ldx #$28 00FDB7 1 A0 00 ldy #$00 00FDB9 1 LFDB9: 00FDB9 1 50 FE bvc LFDB9 00FDBB 1 B8 clv 00FDBC 1 88 dey 00FDBD 1 D0 FA bne LFDB9 00FDBF 1 CA dex 00FDC0 1 D0 F7 bne LFDB9 00FDC2 1 60 rts 00FDC3 1 LFDC3: 00FDC3 1 AE 21 06 ldx BUFFER3 + 33 00FDC6 1 AC 22 06 ldy BUFFER3 + 34 00FDC9 1 LFDC9: 00FDC9 1 50 FE bvc LFDC9 00FDCB 1 B8 clv 00FDCC 1 CA dex 00FDCD 1 D0 FA bne LFDC9 00FDCF 1 88 dey 00FDD0 1 10 F7 bpl LFDC9 00FDD2 1 60 rts 00FDD3 1 LFDD3: 00FDD3 1 CE 20 06 dec BUFFER3 + 32 00FDD6 1 F0 03 beq LFDDB 00FDD8 1 4C 9C F9 jmp LF99C 00FDDB 1 LFDDB: 00FDDB 1 A0 FF ldy #$FF 00FDDD 1 84 51 sty FTNUM 00FDDF 1 C8 iny 00FDE0 1 84 50 sty GCRFLG 00FDE2 1 4C 69 F9 jmp LF969 00FDE5 1 LFDE5: 00FDE5 1 B9 00 03 lda BUFFER0,y 00FDE8 1 99 45 03 sta BUFFER0 + 69,y 00FDEB 1 88 dey 00FDEC 1 D0 F7 bne LFDE5 00FDEE 1 AD 00 03 lda BUFFER0 00FDF1 1 8D 45 03 sta BUFFER0 + 69 00FDF4 1 60 rts 00FDF5 1 LFDF5: 00FDF5 1 A0 44 ldy #$44 00FDF7 1 LFDF7: 00FDF7 1 B9 BB 01 lda L01BB,y 00FDFA 1 91 30 sta (BUFPNT),y 00FDFC 1 88 dey 00FDFD 1 10 F8 bpl LFDF7 00FDFF 1 60 rts 00FE00 1 LFE00: 00FE00 1 AD 0C 1C lda VDC_PCR2 00FE03 1 09 E0 ora #$E0 00FE05 1 8D 0C 1C sta VDC_PCR2 00FE08 1 A9 00 lda #$00 00FE0A 1 8D 03 1C sta VDC_DDRA2 00FE0D 1 60 rts 00FE0E 1 00FE0E 1 LFE0E: 00FE0E 1 AD 0C 1C 29 WRITE_55_TIMES $2800 00FE12 1 1F 09 C0 8D 00FE16 1 0C 1C A9 FF 00FE2F 1 60 rts 00FE30 1 ; -------------- 00FE30 1 00FE30 1 LFE30: 00FE30 1 A9 00 lda #$00 00FE32 1 85 30 sta BUFPNT 00FE34 1 85 2E sta SAVPNT 00FE36 1 85 36 sta BYTCNT 00FE38 1 A9 BB lda #$BB 00FE3A 1 85 34 sta GCRPNT 00FE3C 1 A5 31 lda BUFPNT + 1 00FE3E 1 85 2F sta SAVPNT + 1 00FE40 1 A9 01 lda #$01 00FE42 1 85 31 sta BUFPNT + 1 00FE44 1 LFE44: 00FE44 1 A4 36 ldy BYTCNT 00FE46 1 B1 2E lda (SAVPNT),y 00FE48 1 85 52 sta BTAB 00FE4A 1 C8 iny 00FE4B 1 B1 2E lda (SAVPNT),y 00FE4D 1 85 53 sta BTAB + 1 00FE4F 1 C8 iny 00FE50 1 B1 2E lda (SAVPNT),y 00FE52 1 85 54 sta BTAB + 2 00FE54 1 C8 iny 00FE55 1 B1 2E lda (SAVPNT),y 00FE57 1 85 55 sta BTAB + 3 00FE59 1 C8 iny 00FE5A 1 F0 08 beq LFE64 00FE5C 1 84 36 sty BYTCNT 00FE5E 1 20 D0 F6 jsr LF6D0 00FE61 1 4C 44 FE jmp LFE44 00FE64 1 LFE64: 00FE64 1 4C D0 F6 jmp LF6D0 00FE67 1 00FE67 1 IRQ: 00FE67 1 .if CompileDrive >= DRIVE_1570 00FE67 1 6C A9 02 jmp (VIRQJOB1570) 00FE6A 1 .else 00FE6A 1 pha 00FE6A 1 txa 00FE6A 1 pha 00FE6A 1 .endif 00FE6A 1 98 tya 00FE6B 1 48 pha 00FE6C 1 AD 0D 18 lda VBC_IFR1 00FE6F 1 29 02 and #$02 00FE71 1 F0 03 beq LFE76 00FE73 1 20 53 E8 jsr SetATNPending ; Set the ATN pending flag to mark that the bus must be processed 00FE76 1 LFE76: 00FE76 1 AD 0D 1C lda VDC_IFR2 00FE79 1 0A asl a 00FE7A 1 10 03 bpl LFE7F 00FE7C 1 20 B0 F2 jsr LF2B0 00FE7F 1 LFE7F: 00FE7F 1 68 pla 00FE80 1 A8 tay 00FE81 1 68 pla 00FE82 1 AA tax 00FE83 1 68 pla 00FE84 1 40 rti 00FE85 1 LFE85: 00FE85 1 12 04 04 90 .byte $12,$04,$04,$90 00FE89 1 00FE89 1 CmdChars: 00FE89 1 56 49 44 4D .byte "VIDMBUP&" 00FE8D 1 42 55 50 26 00FE91 1 CmdChars_With2Files: 00FE91 1 43 52 53 4E .byte "CRSN" 00FE95 1 CmdChars_END: 00FE95 1 00FE95 1 CmdAddresses_Low: 00FE95 1 84 05 C1 F8 .byte cmd_validate,>cmd_init,>cmd_duplicate,>cmd_memory,>cmd_block,>cmd_user 00FEA5 1 CC CB 00FEA7 1 E2 E7 C8 CA .byte >cmd_position,>cmd_ampersand,>cmd_copy,>cmd_rename,>cmd_scratch,>cmd_new 00FEAB 1 C8 EE 00FEAD 1 00FEAD 1 CmdSyntaxFlags: 00FEAD 1 ; syntax flags for the commands after CmdChars_With2Files 00FEAD 1 51 DD 1C 9E .byte $51,$DD,$1C,$9E,$1C 00FEB1 1 1C 00FEB2 1 00FEB2 1 LFEB2: 00FEB2 1 52 57 41 4D .byte "RWAM" 00FEB6 1 LFEB6: 00FEB6 1 44 53 50 55 .byte "DSPUL" 00FEBA 1 4C 00FEBB 1 LFEBB: 00FEBB 1 44 53 50 55 .byte "DSPUR" 00FEBF 1 52 00FEC0 1 LFEC0: 00FEC0 1 45 45 52 53 .byte "EERSE" 00FEC4 1 45 00FEC5 1 LFEC5: 00FEC5 1 4C 51 47 52 .byte "LQGRL" 00FEC9 1 4C 00FECA 1 00FECA 1 DriveLEDMasks: 00FECA 1 08 00 .byte VDC_PB2_DRIVE0LED, VDC_PB2_DRIVE1LED 00FECC 1 00FECC 1 LFECC: 00FECC 1 00 .byte $00 00FECD 1 LFECD: 00FECD 1 3F .byte $3F 00FECE 1 LFECE: 00FECE 1 7F .byte $7F 00FECF 1 LFECF: 00FECF 1 BF .byte $BF 00FED0 1 LFED0: 00FED0 1 FF .byte $FF 00FED1 1 LFED1: 00FED1 1 11 12 13 15 .byte $11,$12,$13,$15 00FED5 1 LFED5: 00FED5 1 41 .byte $41 00FED6 1 LFED6: 00FED6 1 04 .byte $04 00FED7 1 00FED7 1 MaxTrack1541: 00FED7 1 SpeedZoneChange: 00FED7 1 24 1F 19 12 .byte 36, 31, 25, 18 00FEDB 1 00FEDB 1 LFEDB: 00FEDB 1 01 FF FF 01 .byte $01,$FF,$FF,$01,$00 00FEDF 1 00 00FEE0 1 TableHighBytesOfBuffers: 00FEE0 1 03 04 05 06 .byte $03,$04,$05,$06,$07,$07 00FEE4 1 07 07 00FEE6 1 00FEE6 1 LFEE6: 00FEE6 1 FF .byte DRIVE_CHKSUM_FEE6 00FEE7 1 LFEE7: 00FEE7 1 6C 65 00 jmp (VNMI) 00FEEA 1 00FEEA 1 .if CompileDrive >= DRIVE_1540 00FEEA 1 PATCH_PostFailError: 00FEEA 1 8D 00 1C 8D PATCH_POSTFAILERROR 00FEEE 1 02 1C 00FEF0 1 4C 7D EA jmp PATCH_PostFailError_END 00FEF3 1 .else 00FEF3 1 FillCount 9 00FEF3 1 .endif 00FEF3 1 00FEF3 1 .if CompileDrive >= DRIVE_1541_01 00FEF3 1 LFEF3: 00FEF3 1 8A txa 00FEF4 1 A2 05 ldx #$05 00FEF6 1 LFEF6: 00FEF6 1 CA dex 00FEF7 1 D0 FD bne LFEF6 00FEF9 1 AA tax 00FEFA 1 60 rts 00FEFB 1 00FEFB 1 LFEFB: 00FEFB 1 20 AE E9 jsr SetClockOut 00FEFE 1 4C 9C E9 jmp ClearDataOut 00FF01 1 LFF01: 00FF01 1 AD 02 02 lda CMDBUF + 2 00FF04 1 C9 2D cmp #'-' 00FF06 1 F0 05 beq LFF0D 00FF08 1 38 sec 00FF09 1 E9 2B sbc #'+' 00FF0B 1 D0 DA bne LFEE7 00FF0D 1 LFF0D: 00FF0D 1 85 23 sta DRVTRK + 1 00FF0F 1 60 rts 00FF10 1 .endif 00FF10 1 00FF10 1 .if CompileDrive >= DRIVE_1541_05 00FF10 1 FillUntil $FF10 00FF10 1 00FF10 1 ; this is a patch in the RESET routine. 00FF10 1 ; Additionally to setting the DDRA of the BC, also set the DDRB and the PB of the BC, 00FF10 1 ; so the bus is initialized as soon as possible 00FF10 1 PATCH_INIT_BC: 00FF10 1 8E 03 18 stx VBC_DDRA1 ; set the DDR of the port A 00FF13 1 00FF13 1 ; set DATA OUT, reset CLOCK OUT and ATNA 00FF13 1 A9 02 lda #VBC_PB1_1540_DATAOUT 00FF15 1 .if CompileDrive >= DRIVE_1570 00FF15 1 4C 5A A6 jmp PATCH_INIT_BC_1570 00FF18 1 .else 00FF18 1 sta VBC_PB1 00FF18 1 .endif 00FF18 1 PATCH_INIT_BC_1570_END: 00FF18 1 A9 1A lda #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA 00FF1A 1 8D 02 18 sta VBC_DDRB1 00FF1D 1 4C A7 EA jmp PATCH_INIT_BC_END 00FF20 1 00FF20 1 LFF20: 00FF20 1 AD 00 18 lda VBC_PB1 00FF23 1 29 01 and #VBC_PB1_1540_DATAIN 00FF25 1 D0 F9 bne LFF20 00FF27 1 A9 01 lda #>$0100 00FF29 1 8D 05 18 sta VBC_T1HC1 00FF2C 1 4C DF E9 jmp LE9DF 00FF2F 1 .endif 00FF2F 1 00FF2F 1 LFF2F: 00FF2F 1 .if CompileDrive = DRIVE_1541_06AA 00FF2F 1 lda #$FF 00FF2F 1 sta FTNUM 00FF2F 1 jmp LC8C6 00FF2F 1 .endif 00FF2F 1 00FF2F 1 .if CompileDrive >= DRIVE_1541C_01 00FF2F 1 A9 FF lda #$FF 00FF31 1 85 51 sta FTNUM 00FF33 1 00FF33 1 .if CompileDrive >= DRIVE_1570 00FF33 1 AD 0F 18 lda VBC_PAUNBUF1 00FF36 1 29 20 and #VBC_PA1_20 00FF38 1 D0 03 bne LFF3D 00FF3A 1 A9 24 lda #$24 00FF3C 1 2C .byte ASM_BIT3 00FF3D 1 LFF3D: 00FF3D 1 A9 47 lda #MAXTRACK_DOUBLESIDED + 1 00FF3F 1 8D D7 FE sta MAXTRACK_ADJUSTED 00FF42 1 4C 79 A7 jmp LA779 00FF45 1 LFF45: 00FF45 1 98 tya 00FF46 1 48 pha 00FF47 1 A0 64 ldy #$64 00FF49 1 LFF49: 00FF49 1 AD 0F 18 lda VBC_PAUNBUF1 00FF4C 1 6A ror a 00FF4D 1 08 php 00FF4E 1 AD 0F 18 lda VBC_PAUNBUF1 00FF51 1 6A ror a 00FF52 1 6A ror a 00FF53 1 28 plp 00FF54 1 29 80 and #$80 00FF56 1 90 04 bcc LFF5C 00FF58 1 10 1D bpl LFF77 00FF5A 1 30 02 bmi LFF5E 00FF5C 1 LFF5C: 00FF5C 1 30 19 bmi LFF77 00FF5E 1 LFF5E: 00FF5E 1 88 dey 00FF5F 1 D0 E8 bne LFF49 00FF61 1 B0 14 bcs LFF77 00FF63 1 AD 00 1C lda VDC_PB2 00FF66 1 29 03 and #VDC_PB2_STEPPER 00FF68 1 D0 0D bne LFF77 00FF6A 1 A5 7B lda ADRSED 00FF6C 1 D0 09 bne LFF77 00FF6E 1 68 pla 00FF6F 1 A8 tay 00FF70 1 A9 00 lda #$00 00FF72 1 85 4A sta STEPS 00FF74 1 4C BE FA jmp LFABE 00FF77 1 LFF77: 00FF77 1 68 pla 00FF78 1 A8 tay 00FF79 1 E6 4A inc STEPS 00FF7B 1 AE 00 1C ldx VDC_PB2 00FF7E 1 CA dex 00FF7F 1 4C 38 FA jmp LFA38 00FF82 1 00FF82 1 LFF82: 00FF82 1 20 59 F2 jsr LF259 00FF85 1 A9 05 lda #$05 00FF87 1 85 3C sta BYTE 00FF89 1 A9 88 lda #$88 00FF8B 1 8D A9 02 sta VIRQJOB1570 00FF8E 1 A9 9D lda #$9D 00FF90 1 8D AA 02 sta VIRQJOB1570 + 1 00FF93 1 A9 24 lda #MAXTRACK_SINGLESIDED + 1 00FF95 1 8D D7 FE sta MAXTRACK_ADJUSTED 00FF98 1 18 clc 00FF99 1 4C F3 93 jmp L93F3 00FF9C 1 ; ------------------- 00FF9C 1 00FF9C 1 LFF9C: 00FF9C 1 85 FF sta NODRV 00FF9E 1 4C 00 C1 jmp LC100 00FFA1 1 LFFA1: 00FFA1 1 85 7B sta ADRSED 00FFA3 1 4C 76 D6 jmp LD676 00FFA6 1 ; ------------ 00FFA6 1 00FFA6 1 LFFA6: 00FFA6 1 20 76 D6 jsr LD676 00FFA9 1 A9 00 lda #$00 00FFAB 1 85 7B sta ADRSED 00FFAD 1 60 rts 00FFAE 1 LFFAE: 00FFAE 1 A4 82 ldy LINDX 00FFB0 1 4C DE D3 jmp LD3DE 00FFB3 1 00FFB3 1 .else 00FFB3 1 jmp LC8C6 00FFB3 1 .if CompileDrive <> DRIVE_1541C_03 00FFB3 1 LFF36: 00FFB3 1 txa 00FFB3 1 pha 00FFB3 1 tya 00FFB3 1 pha 00FFB3 1 ldx #$01 00FFB3 1 LFF3C: 00FFB3 1 ldy #$64 00FFB3 1 00FFB3 1 LFF3E: 00FFB3 1 lda VBC_PAUNBUF1 00FFB3 1 cmp VBC_PAUNBUF1 00FFB3 1 bne LFF62 00FFB3 1 dey 00FFB3 1 bne LFF3E 00FFB3 1 dex 00FFB3 1 bne LFF3C 00FFB3 1 and #VBC_PA1_01 00FFB3 1 beq LFF62 00FFB3 1 lda VDC_PB2 00FFB3 1 and #VDC_PB2_STEPPER 00FFB3 1 bne LFF62 00FFB3 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FFB3 1 lda ADRSED 00FFB3 1 bne LFF62 00FFB3 1 .endif 00FFB3 1 pla 00FFB3 1 tay 00FFB3 1 pla 00FFB3 1 tax 00FFB3 1 lda #$00 00FFB3 1 sta STEPS 00FFB3 1 jmp LFABE 00FFB3 1 LFF62: 00FFB3 1 pla 00FFB3 1 tay 00FFB3 1 pla 00FFB3 1 tax 00FFB3 1 inc STEPS 00FFB3 1 ldx VDC_PB2 00FFB3 1 dex 00FFB3 1 jmp LFA38 00FFB3 1 LFF6F: 00FFB3 1 jsr LF259 00FFB3 1 lda #$01 00FFB3 1 sta TRACK0 00FFB3 1 lda #$C0 00FFB3 1 sta JOBS0 00FFB3 1 rts 00FFB3 1 ; ------------ 00FFB3 1 00FFB3 1 .endif 00FFB3 1 00FFB3 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FFB3 1 00FFB3 1 LFF7F: 00FFB3 1 sta NODRV 00FFB3 1 jmp LC100 00FFB3 1 .if CompileDrive <> DRIVE_1541C_03 00FFB3 1 LFF84: 00FFB3 1 sta ADRSED 00FFB3 1 jmp LD676 00FFB3 1 LFF89: 00FFB3 1 jsr LD676 00FFB3 1 lda #$00 00FFB3 1 sta ADRSED 00FFB3 1 rts 00FFB3 1 .endif 00FFB3 1 LFF91: 00FFB3 1 cmp #$02 00FFB3 1 bcc LFF9C 00FFB3 1 cmp #$0F 00FFB3 1 beq LFF9C 00FFB3 1 jmp LD36B 00FFB3 1 LFF9C: 00FFB3 1 jmp LD373 00FFB3 1 00FFB3 1 PATCH_ShortReset: 00FFB3 1 sei ; disallow interrupts --> blocking job loop 00FFB3 1 00FFB3 1 ldx #= DRIVE_1541_02) .AND (CompileDrive <= DRIVE_1541_03) 00FFB3 1 FillUntil $FFE2 00FFB3 1 00FFB3 1 .byte "RSR" 00FFB3 1 .endif 00FFB3 1 00FFB3 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FFB3 1 00FFB3 1 FillUntil $FFE5 00FFB3 1 .byte DRIVE_CHKSUM_FFE5 00FFB3 1 00FFB3 1 .endif 00FFB3 1 00FFB3 1 FF FF FF FF FillUntil $FFE6 00FFB7 1 FF FF FF FF 00FFBB 1 FF FF FF FF 00FFE6 1 00FFE6 1 .if CompileDrive >= DRIVE_1540 00FFE6 1 C6 C8 .addr LC8C6 00FFE8 1 .else 00FFE8 1 .addr LFAC7 00FFE8 1 .endif 00FFE8 1 8F F9 .addr LF98F 00FFEA 1 00FFEA 1 ; addresses for the Ux commands (U1-U9) 00FFEA 1 00FFEA 1 AddressesUxCommands: 00FFEA 1 5F CD .addr CMD_U1 00FFEC 1 97 CD .addr CMD_U2 00FFEE 1 00 05 .addr BUFFER2 ; $0500 00FFF0 1 03 05 .addr BUFFER2 + 3 ; $0503 00FFF2 1 06 05 .addr BUFFER2 + 6 ; $0506 00FFF4 1 09 05 .addr BUFFER2 + 9 ; $0509 00FFF6 1 0C 05 .addr BUFFER2 + 12 ; $050C 00FFF8 1 0F 05 .addr BUFFER2 + 15 ; $050F 00FFFA 1 00FFFA 1 .if CompileDrive >= DRIVE_1541_01 00FFFA 1 01 FF .addr LFF01 00FFFC 1 .else 00FFFC 1 .addr LFEE7 00FFFC 1 .endif 00FFFC 1 A0 EA .addr RESET 00FFFE 1 67 FE .addr IRQ 010000 1 010000 1 010000 1 ; Blink codes: 010000 1 ; 1 blink --> ZP error 010000 1 ; 2 blinks --> 1570/1571: ROM checksum error 010000 1 ; 2031/1540/1541: ROM $E000-$FFFF checksum error 010000 1 ; 3 blinks --> 1570/1571: RAM failure ($0100-$07FF) 010000 1 ; 2031/1540/1541: ROM $C000-$DFFF checksum error 010000 1 ; 4 blinks --> 2031/1540/1541: RAM failure ($0100-$07FF) 010000 1 ; 010000 1