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 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 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 000000r 1 000000r 1 L8000: 000000r 1 .byte DRIVE_8000 000000r 1 L8001: 000000r 1 .byte DRIVE_8001 000000r 1 000000r 1 L8002: 000000r 1 .if CompileDrive >= DRIVE_1571CR_01 000000r 1 .byte "S/W BY DAVID G SIRACUSA",$0D 000000r 1 .byte "5710 BY C. HAUCK",$0D 000000r 1 .byte "1986",$0D 000000r 1 .else 000000r 1 .byte "S/W - DAVID G SIRACUSA",$0D 000000r 1 .byte "H/W - GREG BERLIN",$0D 000000r 1 .byte "1985",$0D 000000r 1 .endif 000000r 1 000000r 1 U0CommandPatch157x: 000000r 1 lda CMDSIZ 000000r 1 cmp #$03 000000r 1 bcc @OriginalUxCommand 000000r 1 lda CMDBUF + 2 000000r 1 sta HINIB 000000r 1 and #$1F 000000r 1 tax 000000r 1 asl a 000000r 1 tay 000000r 1 lda L808E,y 000000r 1 sta IP 000000r 1 lda L808E + 1,y 000000r 1 sta IP + 1 000000r 1 cpx #$1E 000000r 1 beq @L8056 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq @OriginalUxCommand 000000r 1 @L8056: 000000r 1 lda BITCNT 000000r 1 and #$EB 000000r 1 sta BITCNT 000000r 1 lda L806E,x 000000r 1 sta CMDBUF + 2 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp LAAE7 000000r 1 .else 000000r 1 jmp (IP) 000000r 1 .endif 000000r 1 @OriginalUxCommand: 000000r 1 lda #AddressesUxCommands 000000r 1 sta USRJMP + 1 000000r 1 L806D: 000000r 1 rts 000000r 1 000000r 1 L806E: 000000r 1 .byte $80,$81,$90,$91,$B0,$B1,$F0,$F1 000000r 1 .byte $00,$01,$B0,$01,$00,$01,$00,$01 000000r 1 .byte $80,$81,$90,$91,$B0,$B1,$F0,$F1 000000r 1 .byte $00,$01,$B0,$01,$00,$01,$00,$80 000000r 1 000000r 1 L808E: 000000r 1 .addr L8371 000000r 1 .addr L837F 000000r 1 .addr L83EC 000000r 1 .addr L83F8 000000r 1 .addr L848B 000000r 1 .addr L837F 000000r 1 .addr L84B7 000000r 1 .addr L84B7 000000r 1 .addr L84F1 000000r 1 .addr L84F1 000000r 1 .addr L8517 000000r 1 .addr L837F 000000r 1 .addr L856B 000000r 1 .addr L837F 000000r 1 .addr L85A5 000000r 1 .addr L85A5 000000r 1 .addr L8371 000000r 1 .addr L837F 000000r 1 .addr L83EC 000000r 1 .addr L83F8 000000r 1 .addr L848B 000000r 1 .addr L837F 000000r 1 .addr L84B7 000000r 1 .addr L84B7 000000r 1 .addr L806D 000000r 1 .addr L806D 000000r 1 .addr L8517 000000r 1 .addr L837F 000000r 1 .addr L806D 000000r 1 .addr L806D 000000r 1 .addr L8FE5 000000r 1 .addr L9080 000000r 1 L80CE: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda #$00 000000r 1 sta ATNPND 000000r 1 sta LSNACT 000000r 1 sta TLKACT 000000r 1 ldx #$45 000000r 1 txs 000000r 1 jsr L81B2 000000r 1 lda #$80 000000r 1 sta EIOFLG 000000r 1 sta ATNMOD 000000r 1 jsr ClearClockOut 000000r 1 jsr SetDataOut 000000r 1 lda VBC_PB1 000000r 1 ora #VBC_PB1_1540_ATNA 000000r 1 sta VBC_PB1 000000r 1 L80F1: 000000r 1 lda VBC_PB1 000000r 1 bpl L815A 000000r 1 and #VBC_PB1_1540_CLOCKIN 000000r 1 bne L80F1 000000r 1 L80FA: 000000r 1 jsr L82CA 000000r 1 cmp #$3F 000000r 1 bne L810D 000000r 1 lda BITCNT 000000r 1 and #$BF 000000r 1 sta BITCNT 000000r 1 lda #$00 000000r 1 sta LSNACT 000000r 1 beq L811B 000000r 1 L810D: 000000r 1 cmp #$5F 000000r 1 bne L811E 000000r 1 lda BITCNT 000000r 1 and #$BF 000000r 1 sta BITCNT 000000r 1 lda #$00 000000r 1 sta TLKACT 000000r 1 L811B: 000000r 1 jmp L8192 000000r 1 L811E: 000000r 1 cmp TLKADR 000000r 1 bne L812C 000000r 1 lda #$01 000000r 1 sta TLKACT 000000r 1 lda #$00 000000r 1 sta LSNACT 000000r 1 beq L8155 000000r 1 L812C: 000000r 1 cmp LSNADR 000000r 1 bne L813A 000000r 1 lda #$01 000000r 1 sta LSNACT 000000r 1 lda #$00 000000r 1 sta TLKACT 000000r 1 beq L8155 000000r 1 L813A: 000000r 1 tax 000000r 1 and #$60 000000r 1 cmp #$60 000000r 1 bne L818D 000000r 1 txa 000000r 1 sta ORGSA 000000r 1 and #$0F 000000r 1 sta SA 000000r 1 lda ORGSA 000000r 1 and #$F0 000000r 1 cmp #$E0 000000r 1 bne L8192 000000r 1 cli ; allow processing of job loop 000000r 1 jsr LDAC0 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 L8155: 000000r 1 bit VBC_PB1 000000r 1 bmi L80FA 000000r 1 L815A: 000000r 1 lda #$00 000000r 1 sta ATNMOD 000000r 1 lda VBC_PB1 000000r 1 and # ~ VBC_PB1_1540_ATNA 000000r 1 sta VBC_PB1 000000r 1 lda LSNACT 000000r 1 beq L8177 000000r 1 bit BITCNT 000000r 1 bvc L8171 000000r 1 jsr L8199 000000r 1 L8171: 000000r 1 jsr L8342 000000r 1 jmp MainLoopEntry1570 000000r 1 L8177: 000000r 1 lda TLKACT 000000r 1 beq L818A 000000r 1 jsr ClearDataOut 000000r 1 jsr SetClockOut 000000r 1 jsr LA483 000000r 1 jsr L81EA 000000r 1 jsr LA483 000000r 1 L818A: 000000r 1 jmp L8366 000000r 1 L818D: 000000r 1 lda #VBC_PB1_1540_ATNA 000000r 1 sta VBC_PB1 000000r 1 L8192: 000000r 1 bit VBC_PB1 000000r 1 bpl L815A 000000r 1 bmi L8192 000000r 1 L8199: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_CLOCKIN 000000r 1 bne L8199 000000r 1 jsr L81CE 000000r 1 lda #$00 000000r 1 sta CIA_SDR 000000r 1 lda #CIA_ICR_B_SP 000000r 1 L81AD: 000000r 1 bit CIA_ICR 000000r 1 beq L81AD 000000r 1 000000r 1 L81B2: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda CIA_CRA 000000r 1 and # ~ CIA_CRA_B_SP_OUTPUT 000000r 1 sta CIA_CRA 000000r 1 000000r 1 lda VBC_PAUNBUF1 000000r 1 and # ~ VBC_PA1_02 000000r 1 sta VBC_PAUNBUF1 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 lda #CIA_ICR_BW_SET | CIA_ICR_B_SP 000000r 1 .else 000000r 1 lda #CIA_ICR_BW_SET | CIA_ICR_B_TOD 000000r 1 .endif 000000r 1 sta CIA_ICR 000000r 1 bit CIA_ICR 000000r 1 plp 000000r 1 rts 000000r 1 000000r 1 L81CE: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VBC_PAUNBUF1 000000r 1 ora #VBC_PA1_02 000000r 1 sta VBC_PAUNBUF1 000000r 1 lda CIA_CRA 000000r 1 ora #CIA_CRA_B_SP_OUTPUT 000000r 1 sta CIA_CRA 000000r 1 lda #CIA_ICR_B_SP 000000r 1 sta CIA_ICR 000000r 1 bit CIA_ICR 000000r 1 plp 000000r 1 rts 000000r 1 L81EA: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr LD0EB 000000r 1 bcs L81F6 000000r 1 L81F0: 000000r 1 ldx LINDX 000000r 1 lda CHNRDY,x 000000r 1 bmi L81F7 000000r 1 L81F6: 000000r 1 rts 000000r 1 L81F7: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 php 000000r 1 jsr ClearClockOut 000000r 1 plp 000000r 1 beq L8218 000000r 1 L8206: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 bne L8206 000000r 1 ldx LINDX 000000r 1 lda CHNRDY,x 000000r 1 and #$08 000000r 1 bne L822C 000000r 1 L8218: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 bne L8218 000000r 1 L8222: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 beq L8222 000000r 1 L822C: 000000r 1 jsr SetClockOut 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 bne L822C 000000r 1 bit BITCNT 000000r 1 bvc L8276 000000r 1 lda VBC_PAUNBUF1 000000r 1 ora #VBC_PA1_02 000000r 1 sta VBC_PAUNBUF1 000000r 1 lda CIA_CRA 000000r 1 ora #CIA_CRA_B_SP_OUTPUT 000000r 1 sta CIA_CRA 000000r 1 bit CIA_ICR 000000r 1 ldx LINDX 000000r 1 lda L023E,x 000000r 1 sta CIA_SDR 000000r 1 L8258: 000000r 1 lda CIA_ICR 000000r 1 and #$08 000000r 1 beq L8258 000000r 1 lda CIA_CRA 000000r 1 and # ~ CIA_CRA_B_SP_OUTPUT 000000r 1 sta CIA_CRA 000000r 1 lda VBC_PAUNBUF1 000000r 1 and # ~ VBC_PA1_02 000000r 1 sta VBC_PAUNBUF1 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 lda #CIA_ICR_BW_SET | CIA_ICR_B_SP 000000r 1 .else 000000r 1 lda #CIA_ICR_BW_SET | CIA_ICR_B_TOD 000000r 1 .endif 000000r 1 sta CIA_ICR 000000r 1 bne L82B2 000000r 1 L8276: 000000r 1 lda #$08 000000r 1 sta CONT 000000r 1 L827A: 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 bne L82C4 000000r 1 L8281: 000000r 1 ldx LINDX 000000r 1 lda L023E,x 000000r 1 ror a 000000r 1 sta L023E,x 000000r 1 bcs L8291 000000r 1 jsr SetDataOut 000000r 1 bne L8294 000000r 1 L8291: 000000r 1 jsr ClearDataOut 000000r 1 L8294: 000000r 1 jsr LA47E 000000r 1 lda DRVTRK + 1 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 bne L829E 000000r 1 .else 000000r 1 bne L8281 000000r 1 .endif 000000r 1 jsr LA483 000000r 1 L829E: 000000r 1 jsr ClearClockOut 000000r 1 jsr LA47E 000000r 1 lda DRVTRK + 1 000000r 1 bne L82AB 000000r 1 jsr LA483 000000r 1 L82AB: 000000r 1 jsr LFEFB 000000r 1 dec CONT 000000r 1 bne L827A 000000r 1 L82B2: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_DATAIN 000000r 1 beq L82B2 000000r 1 cli ; allow processing of job loop 000000r 1 jsr LD3AA 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jmp L81F0 000000r 1 L82C4: 000000r 1 jmp L8362 000000r 1 L82C7: 000000r 1 bit CIA_ICR 000000r 1 L82CA: 000000r 1 lda #$08 000000r 1 sta CONT 000000r 1 L82CE: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_CLOCKIN 000000r 1 bne L82CE 000000r 1 jsr ClearDataOut 000000r 1 lda #$01 000000r 1 L82DD: 000000r 1 bit VBC_PB1 000000r 1 bne L82DD 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr LAA76 000000r 1 .else 000000r 1 sta VBC_T1HC1 000000r 1 .endif 000000r 1 L82E5: 000000r 1 jsr TestATN 000000r 1 lda VBC_IFR1 000000r 1 and #$40 000000r 1 bne L82F8 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_CLOCKIN 000000r 1 beq L82E5 000000r 1 bne L8311 000000r 1 L82F8: 000000r 1 jsr SetDataOut 000000r 1 ldx #$18 000000r 1 L82FD: 000000r 1 dex 000000r 1 bne L82FD 000000r 1 jsr ClearDataOut 000000r 1 L8303: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_CLOCKIN 000000r 1 beq L8303 000000r 1 lda #$00 000000r 1 sta EIOFLG 000000r 1 L8311: 000000r 1 lda VBC_PB1 000000r 1 eor #VBC_PB1_1540_DATAIN 000000r 1 tax 000000r 1 lda CIA_ICR 000000r 1 and #CIA_ICR_B_SP 000000r 1 beq L8326 000000r 1 lda CIA_SDR 000000r 1 sta DATA 000000r 1 jmp L833C 000000r 1 L8326: 000000r 1 txa 000000r 1 lsr a 000000r 1 and #$02 000000r 1 bne L8311 000000r 1 ror DATA 000000r 1 L832E: 000000r 1 jsr TestATN 000000r 1 jsr ReadIecBusIn 000000r 1 and #VBC_PB1_1540_CLOCKIN 000000r 1 beq L832E 000000r 1 dec CONT 000000r 1 bne L8311 000000r 1 L833C: 000000r 1 jsr SetDataOut 000000r 1 lda DATA 000000r 1 rts 000000r 1 L8342: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr LD107 000000r 1 bcs L834D 000000r 1 lda CHNRDY,x 000000r 1 ror a 000000r 1 bcs L8358 000000r 1 L834D: 000000r 1 lda ORGSA 000000r 1 and #$F0 000000r 1 cmp #$F0 000000r 1 beq L8358 000000r 1 jmp L8366 000000r 1 L8358: 000000r 1 jsr L82C7 000000r 1 cli ; allow processing of job loop 000000r 1 jsr LCFB7 000000r 1 jmp L8342 000000r 1 L8362: 000000r 1 lda #$00 000000r 1 sta BITCNT 000000r 1 L8366: 000000r 1 lda #0 000000r 1 sta VBC_PB1 000000r 1 MainLoopEntry1570: 000000r 1 jsr L81B2 000000r 1 jmp MainLoopEntry 000000r 1 L8371: 000000r 1 sta CMD 000000r 1 sta AF 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcc L8394 000000r 1 ldx #$0B 000000r 1 .byte ASM_BIT3 000000r 1 L837F: 000000r 1 ldx #$4F 000000r 1 L8381: 000000r 1 jsr L85E9 000000r 1 L8384: 000000r 1 jsr L8581 000000r 1 L8387: 000000r 1 cpx #$02 000000r 1 bcs L838C 000000r 1 rts 000000r 1 L838C: 000000r 1 txa 000000r 1 and #$0F 000000r 1 ldx #$00 000000r 1 jmp LE60A 000000r 1 L8394: 000000r 1 jsr L81CE 000000r 1 bit AS 000000r 1 bpl L83A0 000000r 1 lda #$09 000000r 1 jmp L86E6 000000r 1 L83A0: 000000r 1 jsr LC63D 000000r 1 L83A3: 000000r 1 cli ; allow processing of job loop 000000r 1 lda HINIB 000000r 1 and #$20 000000r 1 bne L83D0 000000r 1 lda CMDBUF + 3 000000r 1 sta TRACK0 000000r 1 lda CMDBUF + 4 000000r 1 sta SECTOR0 000000r 1 ldx #$00 000000r 1 lda AF 000000r 1 sta JOBS0,x 000000r 1 jsr L865E 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr L85E9 000000r 1 bit HINIB 000000r 1 bvs L83C9 000000r 1 cpx #$02 000000r 1 bcs L8381 000000r 1 L83C9: 000000r 1 jsr L85F9 000000r 1 lda HINIB 000000r 1 bmi L83DD 000000r 1 L83D0: 000000r 1 ldy #$00 000000r 1 L83D2: 000000r 1 lda BUFFER0,y 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 iny 000000r 1 bne L83D2 000000r 1 L83DD: 000000r 1 dec CMDBUF + 5 000000r 1 beq L83E8 000000r 1 jsr L861E 000000r 1 jmp L83A3 000000r 1 L83E8: 000000r 1 cli ; allow processing of job loop 000000r 1 jmp L85AF 000000r 1 L83EC: 000000r 1 sta CMD 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcc L8402 000000r 1 ldx #$0B 000000r 1 .byte ASM_BIT3 000000r 1 L83F8: 000000r 1 ldx #$4F 000000r 1 stx CTRACK 000000r 1 lda HINIB 000000r 1 ora #$08 000000r 1 sta HINIB 000000r 1 L8402: 000000r 1 bit AS 000000r 1 bpl L840B 000000r 1 lda #$0A 000000r 1 jmp L86E6 000000r 1 L840B: 000000r 1 jsr LC63D 000000r 1 lda HINIB 000000r 1 bmi L843B 000000r 1 L8412: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 ldy #$00 000000r 1 L8415: 000000r 1 lda VBC_PB1 000000r 1 eor #VBC_PB1_1540_CLOCKOUT 000000r 1 bit CIA_ICR 000000r 1 sta VBC_PB1 000000r 1 L8420: 000000r 1 lda VBC_PB1 000000r 1 bpl L8428 000000r 1 jsr TestATN 000000r 1 L8428: 000000r 1 lda CIA_ICR 000000r 1 and #CIA_ICR_B_SP 000000r 1 beq L8420 000000r 1 lda CIA_SDR 000000r 1 sta BUFFER0,y 000000r 1 iny 000000r 1 bne L8415 000000r 1 jsr ClearClockOut 000000r 1 L843B: 000000r 1 cli ; allow processing of job loop 000000r 1 lda HINIB 000000r 1 and #$20 000000r 1 bne L8479 000000r 1 lda HINIB 000000r 1 and #$08 000000r 1 beq L844D 000000r 1 ldx CTRACK 000000r 1 jmp L8381 000000r 1 L844D: 000000r 1 lda CMDBUF + 3 000000r 1 sta TRACK0 000000r 1 lda CMDBUF + 4 000000r 1 sta SECTOR0 000000r 1 ldx #$00 000000r 1 lda #$90 000000r 1 sta JOBS0,x 000000r 1 jsr L865E 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr L81CE 000000r 1 jsr L85E9 000000r 1 jsr L85F9 000000r 1 jsr L86A0 000000r 1 jsr L81B2 000000r 1 cli ; allow processing of job loop 000000r 1 bit HINIB 000000r 1 bvs L8479 000000r 1 cpx #$02 000000r 1 bcs L8484 000000r 1 L8479: 000000r 1 dec CMDBUF + 5 000000r 1 beq L8487 000000r 1 jsr L861E 000000r 1 jmp L8412 000000r 1 L8484: 000000r 1 jmp L838C 000000r 1 L8487: 000000r 1 cli ; allow processing of job loop 000000r 1 jmp L85AF 000000r 1 L848B: 000000r 1 lda CMDBUF + 2 000000r 1 and #$01 000000r 1 bne L84B2 000000r 1 lda #$01 000000r 1 sta VBC_IFR1 000000r 1 lda #$05 000000r 1 jsr L86E6 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 bcc L84B4 000000r 1 ldx #$00 000000r 1 stx AS 000000r 1 lda #$B0 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr LC075 000000r 1 .else 000000r 1 sta CMD 000000r 1 .endif 000000r 1 sta JOBS0,x 000000r 1 jsr L865E 000000r 1 .byte ASM_BIT3 000000r 1 L84B2: 000000r 1 ldx #$4F 000000r 1 L84B4: 000000r 1 jmp L8381 000000r 1 L84B7: 000000r 1 lda CMDBUF + 2 000000r 1 and #$01 000000r 1 bne L84E9 000000r 1 lda CMDBUF + 3 000000r 1 bpl L84C8 000000r 1 lda #$08 000000r 1 jmp L86E6 000000r 1 L84C8: 000000r 1 lda #$00 000000r 1 sta AS 000000r 1 sta NODRV 000000r 1 lda CMDBUF + 4 000000r 1 sta DiskID0 000000r 1 lda CMDBUF + 5 000000r 1 sta DiskID0 + 1 000000r 1 jsr LD307 000000r 1 lda #$01 000000r 1 sta TRACK 000000r 1 lda #$FF 000000r 1 sta JOBRTN 000000r 1 .if CompileDrive = DRIVE_1571_03 000000r 1 jsr LA989 000000r 1 .else 000000r 1 jsr LAA4D 000000r 1 .endif 000000r 1 tax 000000r 1 .byte ASM_BIT3 000000r 1 L84E9: 000000r 1 ldx #$4F 000000r 1 jsr L85E9 000000r 1 jmp L8387 000000r 1 L84F1: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 bit HINIB 000000r 1 bpl L8500 000000r 1 jsr L81CE 000000r 1 lda BYTE 000000r 1 sta CTRACK 000000r 1 jmp L85F9 000000r 1 L8500: 000000r 1 ldx CMDSIZ 000000r 1 cpx #$04 000000r 1 bcs L8511 000000r 1 ldx #$0E 000000r 1 jsr L85E9 000000r 1 lda #ERRORCODE_31_SYNTAX_ERROR 000000r 1 jmp GenerateErrorMessage 000000r 1 ; -------------- 000000r 1 000000r 1 L8511: 000000r 1 lda CMDBUF + 3 000000r 1 sta BYTE 000000r 1 rts 000000r 1 L8517: 000000r 1 jsr L848B 000000r 1 bit AS 000000r 1 bpl L8566 000000r 1 lda #$0D 000000r 1 jsr L86E6 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 bcs L8532 000000r 1 jsr L8961 000000r 1 jsr L8986 000000r 1 txa 000000r 1 pha 000000r 1 L8532: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr L81CE 000000r 1 lda AS 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 bcs L8567 000000r 1 lda MYPA 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 lda NMIFLG 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 lda ACLSTP 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 lda RSTEPS 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 pla 000000r 1 sta CTRACK 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp LAAC5 000000r 1 .else 000000r 1 jsr L85F9 000000r 1 .endif 000000r 1 L8566: 000000r 1 rts 000000r 1 L8567: 000000r 1 pla 000000r 1 jmp L838C 000000r 1 L856B: 000000r 1 bit HINIB 000000r 1 bpl L8596 000000r 1 bit HINIB 000000r 1 bvc L8581 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcc L8581 000000r 1 lda AS 000000r 1 and #$F0 000000r 1 ora #$0B 000000r 1 sta AS 000000r 1 L8581: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr L81CE 000000r 1 lda AS 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 lda #ERRORCODE_00_OK 000000r 1 sta ERWORD 000000r 1 jsr L81B2 000000r 1 cli ; allow processing of job loop 000000r 1 rts 000000r 1 L8596: 000000r 1 lda CMDBUF + 3 000000r 1 sta AS 000000r 1 bit HINIB 000000r 1 bvc L85A4 000000r 1 lda #$01 000000r 1 sta VBC_IFR1 000000r 1 L85A4: 000000r 1 rts 000000r 1 L85A5: 000000r 1 ldx #$0E 000000r 1 jsr L85E9 000000r 1 lda #ERRORCODE_31_SYNTAX_ERROR 000000r 1 jmp GenerateErrorMessage 000000r 1 ; -------------- 000000r 1 000000r 1 L85AF: 000000r 1 lda CMDSIZ 000000r 1 cmp #$07 000000r 1 bcc L85E8 000000r 1 lda TRACK0 000000r 1 tay 000000r 1 sbc #$01 000000r 1 asl a 000000r 1 sta MINSTP 000000r 1 cpy #$24 000000r 1 php 000000r 1 ldy CMDBUF + 6 000000r 1 sty DRVTRK 000000r 1 dey 000000r 1 sty NMIFLG 000000r 1 cpy #$23 000000r 1 ror a 000000r 1 plp 000000r 1 and #$80 000000r 1 bcc L85DC 000000r 1 bmi L85E5 000000r 1 clc 000000r 1 lda NMIFLG 000000r 1 adc #$23 000000r 1 sta NMIFLG 000000r 1 bmi L85E5 000000r 1 L85DC: 000000r 1 bpl L85E5 000000r 1 sec 000000r 1 lda NMIFLG 000000r 1 sbc #$23 000000r 1 sta NMIFLG 000000r 1 L85E5: 000000r 1 jmp L87BA 000000r 1 L85E8: 000000r 1 rts 000000r 1 L85E9: 000000r 1 stx CTRACK 000000r 1 lda AS 000000r 1 and #$F0 000000r 1 ora CTRACK 000000r 1 sta AS 000000r 1 sta CTRACK 000000r 1 rts 000000r 1 L85F6: 000000r 1 jsr TestATN 000000r 1 L85F9: 000000r 1 lda VBC_PB1 000000r 1 cmp VBC_PB1 000000r 1 bne L85F9 000000r 1 and #$FF 000000r 1 bmi L85F6 000000r 1 eor BITCNT 000000r 1 and #$04 ; VBC_PB1_1540_CLOCKIN? 000000r 1 beq L85F9 000000r 1 lda CTRACK 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp LAB10 000000r 1 .else 000000r 1 sta CIA_SDR 000000r 1 .endif 000000r 1 lda BITCNT 000000r 1 eor #$04 000000r 1 sta BITCNT 000000r 1 lda #CIA_ICR_B_SP 000000r 1 L8618: 000000r 1 bit CIA_ICR 000000r 1 beq L8618 000000r 1 rts 000000r 1 000000r 1 L861E: 000000r 1 lda CMDBUF + 3 000000r 1 cmp #$24 000000r 1 bcc L8627 000000r 1 sbc #$23 000000r 1 L8627: 000000r 1 tax 000000r 1 lda L9409 + 34,x 000000r 1 tax 000000r 1 dex 000000r 1 stx CTRACK 000000r 1 clc 000000r 1 lda CMDBUF + 4 000000r 1 adc BYTE 000000r 1 cmp CTRACK 000000r 1 bcc L8643 000000r 1 sbc CTRACK 000000r 1 beq L8641 000000r 1 sec 000000r 1 sbc #$01 000000r 1 .byte ASM_BIT3 000000r 1 L8641: 000000r 1 lda CTRACK 000000r 1 L8643: 000000r 1 sta CMDBUF + 4 000000r 1 lda #$88 000000r 1 sta AF 000000r 1 rts 000000r 1 L864B: 000000r 1 ldx JOBNUM 000000r 1 php 000000r 1 cli ; allow processing of job loop 000000r 1 jsr L9FB6 000000r 1 cmp #$02 000000r 1 bcc L865B 000000r 1 jsr L8683 000000r 1 lda JOBS0,x 000000r 1 L865B: 000000r 1 tax 000000r 1 plp 000000r 1 rts 000000r 1 L865E: 000000r 1 ldx #$00 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 ora #VDC_PB2_DRIVE0LED 000000r 1 sta VDC_PB2 000000r 1 cli ; allow processing of job loop 000000r 1 jsr L9FB6 000000r 1 cmp #$02 000000r 1 bcc L8675 000000r 1 jsr L8683 000000r 1 L8675: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_DRIVELEDS 000000r 1 sta VDC_PB2 000000r 1 lda JOBS0,x 000000r 1 tax 000000r 1 plp 000000r 1 rts 000000r 1 L8683: 000000r 1 lda #$FF 000000r 1 sta JOBRTN 000000r 1 stx JOBNUM 000000r 1 lda CMDBUF + 2 000000r 1 sta AF 000000r 1 sta CMD 000000r 1 sta LSTJOB,x 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 sta JOBS0,x 000000r 1 .else 000000r 1 sta JOBS0 000000r 1 .endif 000000r 1 jsr L9FB6 000000r 1 jmp LD599 000000r 1 L869D: 000000r 1 jsr TestATN 000000r 1 L86A0: 000000r 1 lda VBC_PB1 000000r 1 cmp VBC_PB1 000000r 1 bne L86A0 000000r 1 and #$FF 000000r 1 bmi L869D 000000r 1 eor BITCNT 000000r 1 and #$04 ; VBC_PB1_1540_CLOCKIN? 000000r 1 beq L86A0 000000r 1 lda BITCNT 000000r 1 eor #$04 000000r 1 sta BITCNT 000000r 1 rts 000000r 1 L86B9: 000000r 1 .byte $00,$15,$00,$00,$00,$15,$00,$BC 000000r 1 .byte $34,$DE,$FE,$DC,$15,$15,$00 000000r 1 L86C8: 000000r 1 .addr L89EC 000000r 1 .addr L89EF 000000r 1 .addr L89FD 000000r 1 .addr L8A03 000000r 1 .addr L8A08 000000r 1 .addr L8A09 000000r 1 .addr L87BA 000000r 1 .addr L8A86 000000r 1 .addr L8C57 000000r 1 .addr L8D67 000000r 1 .addr L8DF6 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .addr LACC7 000000r 1 .addr LAD2E 000000r 1 .addr LAD93 000000r 1 .else 000000r 1 .addr L8EC6 000000r 1 .addr L8F18 000000r 1 .addr L8F5F 000000r 1 .endif 000000r 1 .addr L89B3 000000r 1 000000r 1 L86E6: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 pha 000000r 1 tax 000000r 1 lda L86B9,x 000000r 1 sta ACTJOB 000000r 1 lda AS 000000r 1 ora #$80 000000r 1 sta AS 000000r 1 asl ACTJOB 000000r 1 bcc L86FD 000000r 1 lda CMDBUF + 3 000000r 1 sta NMIFLG 000000r 1 L86FD: 000000r 1 asl ACTJOB 000000r 1 bcc L8706 000000r 1 lda CMDBUF + 4 000000r 1 sta SECTR 000000r 1 L8706: 000000r 1 asl ACTJOB 000000r 1 bcc L871B 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_WRITEPROTECT 000000r 1 bne L871B 000000r 1 lda HINIB 000000r 1 ora #$08 000000r 1 sta HINIB 000000r 1 ldx #$08 000000r 1 stx CTRACK 000000r 1 L871B: 000000r 1 asl ACTJOB 000000r 1 bcc L8722 000000r 1 jsr L8794 000000r 1 L8722: 000000r 1 asl ACTJOB 000000r 1 bcc L8729 000000r 1 jsr L87BA 000000r 1 L8729: 000000r 1 asl ACTJOB 000000r 1 bcc L8730 000000r 1 jsr L87B0 000000r 1 L8730: 000000r 1 jsr L8954 000000r 1 asl ACTJOB 000000r 1 bcc L873A 000000r 1 jsr L892A 000000r 1 L873A: 000000r 1 lda #$00 000000r 1 pla 000000r 1 asl a 000000r 1 tax 000000r 1 lda L86C8,x 000000r 1 sta T0 000000r 1 lda L86C8 + 1,x 000000r 1 sta T1 000000r 1 .if CompileDrive >= DRIVE_1571CR_01 000000r 1 jsr L877C 000000r 1 .endif 000000r 1 jsr L8761 000000r 1 jsr LF98F 000000r 1 .if CompileDrive >= DRIVE_1571CR_01 000000r 1 jsr L8788 000000r 1 .endif 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 php 000000r 1 asl ACTJOB 000000r 1 bcs L875F 000000r 1 plp 000000r 1 bcc L8760 000000r 1 jmp L838C 000000r 1 L875F: 000000r 1 plp 000000r 1 L8760: 000000r 1 rts 000000r 1 000000r 1 L8761: 000000r 1 jmp (T0) 000000r 1 000000r 1 L8764: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 ora #VDC_PB2_DRIVE0MOTOR 000000r 1 sta VDC_PB2 000000r 1 plp 000000r 1 rts 000000r 1 L8770: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_DRIVE0MOTOR 000000r 1 sta VDC_PB2 000000r 1 plp 000000r 1 rts 000000r 1 L877C: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 ora #VDC_PB2_DRIVE0LED 000000r 1 sta VDC_PB2 000000r 1 plp 000000r 1 rts 000000r 1 L8788: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_DRIVELEDS 000000r 1 sta VDC_PB2 000000r 1 plp 000000r 1 rts 000000r 1 L8794: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda DRVST 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 bmi L87A2 000000r 1 and #$30 000000r 1 beq L87A4 000000r 1 lda #$20 000000r 1 .else 000000r 1 cmp #$20 000000r 1 beq L87AA 000000r 1 lda CMDBUF + 2 000000r 1 and #$01 000000r 1 sta CDRIVE 000000r 1 jsr L8764 000000r 1 lda #$A0 000000r 1 .endif 000000r 1 sta DRVST 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 L87A2: 000000r 1 plp 000000r 1 .else 000000r 1 L87AA: 000000r 1 lda #$32 000000r 1 sta ACLTIM 000000r 1 plp 000000r 1 .endif 000000r 1 rts 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 L87A4: 000000r 1 plp 000000r 1 sta CDRIVE 000000r 1 jmp LF97E 000000r 1 .if CompileDrive >= DRIVE_1571CR_01 000000r 1 .else 000000r 1 FillNOP 6 000000r 1 .endif 000000r 1 .endif 000000r 1 L87B0: 000000r 1 php 000000r 1 cli ; allow processing of job loop 000000r 1 L87B2: 000000r 1 lda DRVST 000000r 1 cmp #$20 000000r 1 bne L87B2 000000r 1 plp 000000r 1 rts 000000r 1 L87BA: 000000r 1 php 000000r 1 cli ; allow processing of job loop 000000r 1 lda NMIFLG 000000r 1 asl a 000000r 1 cmp MINSTP 000000r 1 beq L87DD 000000r 1 L87C3: 000000r 1 lda NMIFLG 000000r 1 asl a 000000r 1 cmp MINSTP 000000r 1 beq L87D8 000000r 1 bcs L87D2 000000r 1 jsr L87E7 000000r 1 jmp L87C3 000000r 1 L87D2: 000000r 1 jsr L87DF 000000r 1 jmp L87C3 000000r 1 L87D8: 000000r 1 .if CompileDrive >= DRIVE_1571 .AND CompileDrive < DRIVE_1571CR 000000r 1 ldy #$10 000000r 1 .else 000000r 1 ldy #$12 000000r 1 .endif 000000r 1 jsr L8829 000000r 1 L87DD: 000000r 1 plp 000000r 1 rts 000000r 1 L87DF: 000000r 1 lda MINSTP 000000r 1 clc 000000r 1 adc #$01 000000r 1 jmp L8814 000000r 1 L87E7: 000000r 1 ldy #$63 000000r 1 L87E9: 000000r 1 lda VBC_PAUNBUF1 000000r 1 ror a 000000r 1 php 000000r 1 lda VBC_PAUNBUF1 000000r 1 ror a 000000r 1 ror a 000000r 1 plp 000000r 1 and #$80 000000r 1 bcc L87FC 000000r 1 bpl L880F 000000r 1 bmi L87FE 000000r 1 L87FC: 000000r 1 bmi L880F 000000r 1 L87FE: 000000r 1 dey 000000r 1 bne L87E9 000000r 1 bcs L880F 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_STEPPER 000000r 1 bne L880F 000000r 1 lda #$00 000000r 1 sta MINSTP 000000r 1 rts 000000r 1 L880F: 000000r 1 lda MINSTP 000000r 1 sec 000000r 1 sbc #$01 000000r 1 L8814: 000000r 1 sta MINSTP 000000r 1 and #$03 000000r 1 sta T0 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_STEPPER 000000r 1 ora T0 000000r 1 sta VDC_PB2 000000r 1 plp 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 ldy #$05 000000r 1 .elseif CompileDrive >= DRIVE_1571 000000r 1 ldy #$06 000000r 1 .else 000000r 1 ldy #$08 000000r 1 .endif 000000r 1 L8829: 000000r 1 jsr L8830 000000r 1 dey 000000r 1 bne L8829 000000r 1 rts 000000r 1 L8830: 000000r 1 ldx #$02 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 lda #$6F 000000r 1 .else 000000r 1 lda #$00 000000r 1 .endif 000000r 1 L8834: 000000r 1 adc #$01 000000r 1 bne L8834 000000r 1 dex 000000r 1 bne L8834 000000r 1 rts 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 000000r 1 L883C: 000000r 1 nop 000000r 1 lda WD177x_STATUS 000000r 1 lsr a 000000r 1 lsr a 000000r 1 lsr a 000000r 1 and #$03 000000r 1 tax 000000r 1 lda L8A82,x 000000r 1 sta L01B0 000000r 1 tax 000000r 1 rts 000000r 1 L884E: 000000r 1 pha 000000r 1 jsr L877C 000000r 1 pla 000000r 1 sta WD177x_COMMAND 000000r 1 lda #$01 000000r 1 nop 000000r 1 L8859: 000000r 1 bit WD177x_STATUS 000000r 1 beq L8859 000000r 1 jmp LA47E 000000r 1 L8861: 000000r 1 jsr L8788 000000r 1 lda #$01 000000r 1 L8866: 000000r 1 bit WD177x_STATUS 000000r 1 bne L8866 000000r 1 rts 000000r 1 .endif 000000r 1 000000r 1 L886C: 000000r 1 lda ACLSTP 000000r 1 sec 000000r 1 sbc #$01 000000r 1 sta CTRACK 000000r 1 lda CMDBUF + 4 000000r 1 clc 000000r 1 adc BYTE 000000r 1 cmp RSTEPS 000000r 1 beq L8884 000000r 1 bcc L8884 000000r 1 sbc RSTEPS 000000r 1 clc 000000r 1 adc CTRACK 000000r 1 L8884: 000000r 1 sta CMDBUF + 4 000000r 1 rts 000000r 1 L8888: 000000r 1 ldy #$00 000000r 1 ldx #$00 000000r 1 lda CMDBUF + 3 000000r 1 and #$3F 000000r 1 sta CMDBUF + 3 000000r 1 sta ACLSTP 000000r 1 pha 000000r 1 lda CMDBUF + 7 000000r 1 pha 000000r 1 inc CMDBUF + 4 000000r 1 L889E: 000000r 1 lda CMDBUF + 3 000000r 1 sta CMDBUF + 11,y 000000r 1 inc CMDBUF + 3 000000r 1 inx 000000r 1 tya 000000r 1 clc 000000r 1 adc CMDBUF + 4 000000r 1 tay 000000r 1 cpy #$20 000000r 1 bcs L88BE 000000r 1 cpy CMDBUF + 7 000000r 1 bcc L88D1 000000r 1 bne L88CB 000000r 1 cpx CMDBUF + 7 000000r 1 beq L88CB 000000r 1 L88BE: 000000r 1 dec CMDBUF + 4 000000r 1 pla 000000r 1 sta CMDBUF + 7 000000r 1 pla 000000r 1 sta CMDBUF + 3 000000r 1 sec 000000r 1 rts 000000r 1 L88CB: 000000r 1 tya 000000r 1 sec 000000r 1 sbc CMDBUF + 7 000000r 1 tay 000000r 1 L88D1: 000000r 1 cpx CMDBUF + 7 000000r 1 bne L889E 000000r 1 stx MYPA 000000r 1 dex 000000r 1 txa 000000r 1 clc 000000r 1 adc ACLSTP 000000r 1 sta RSTEPS 000000r 1 cmp ACLSTP 000000r 1 bcc L88BE 000000r 1 pla 000000r 1 sta CMDBUF + 7 000000r 1 pla 000000r 1 sta CMDBUF + 3 000000r 1 dec CMDBUF + 4 000000r 1 clc 000000r 1 rts 000000r 1 L88F0: 000000r 1 lda L01B0 000000r 1 pha 000000r 1 ldy #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L88F8: 000000r 1 lda CMDBUF + 11,y 000000r 1 sta SECTR 000000r 1 tya 000000r 1 pha 000000r 1 jsr LAD2E 000000r 1 pla 000000r 1 tay 000000r 1 .else 000000r 1 sty STAB 000000r 1 L88F8: 000000r 1 ldy STAB 000000r 1 lda CMDBUF + 11,y 000000r 1 sta WD177x_SECTOR 000000r 1 jsr L8F18 000000r 1 .endif 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 bcs L8915 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 iny 000000r 1 .else 000000r 1 inc STAB 000000r 1 ldy STAB 000000r 1 .endif 000000r 1 cpy CMDBUF + 7 000000r 1 bne L88F8 000000r 1 clc 000000r 1 .byte ASM_BIT2 000000r 1 L8915: 000000r 1 sec 000000r 1 pla 000000r 1 sta L01B0 000000r 1 L891A: 000000r 1 rts 000000r 1 L891B: 000000r 1 lda CMDSIZ 000000r 1 cmp #$07 000000r 1 bcc L891A 000000r 1 lda CMDBUF + 6 000000r 1 sta NMIFLG 000000r 1 jmp L87BA 000000r 1 L892A: 000000r 1 lda L01B0 000000r 1 pha 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 lda REVCNT 000000r 1 asl a 000000r 1 sta TMP 000000r 1 L88FF: 000000r 1 jsr L89E8 000000r 1 .else 000000r 1 jsr L8A27 000000r 1 .endif 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bcc L8923 000000r 1 dec TMP 000000r 1 bne L88FF 000000r 1 jsr L89EF 000000r 1 lda REVCNT 000000r 1 asl a 000000r 1 sta TMP 000000r 1 L8915_CR: 000000r 1 jsr L89E8 000000r 1 .else 000000r 1 bcc L8945 000000r 1 jsr L89EF 000000r 1 jsr L8A27 000000r 1 .endif 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bcc L8923 000000r 1 dec TMP 000000r 1 bne L8915_CR 000000r 1 .else 000000r 1 bcs L894F 000000r 1 .endif 000000r 1 L8923: 000000r 1 L8945: 000000r 1 lda NMIFLG 000000r 1 asl a 000000r 1 cmp MINSTP 000000r 1 beq L894F 000000r 1 jsr L87BA 000000r 1 L894F: 000000r 1 pla 000000r 1 sta L01B0 000000r 1 rts 000000r 1 L8954: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda HINIB 000000r 1 and #$10 000000r 1 cmp #$10 000000r 1 jsr L93F3 000000r 1 plp 000000r 1 rts 000000r 1 L8961: 000000r 1 ldy MYPA 000000r 1 dey 000000r 1 lda #$FF 000000r 1 L8966: 000000r 1 cmp CMDBUF + 11,y 000000r 1 bcc L896E 000000r 1 lda CMDBUF + 11,y 000000r 1 L896E: 000000r 1 dey 000000r 1 bpl L8966 000000r 1 sta ACLSTP 000000r 1 ldy MYPA 000000r 1 dey 000000r 1 lda #$00 000000r 1 L8978: 000000r 1 cmp CMDBUF + 11,y 000000r 1 bcs L8980 000000r 1 lda CMDBUF + 11,y 000000r 1 L8980: 000000r 1 dey 000000r 1 bpl L8978 000000r 1 sta RSTEPS 000000r 1 rts 000000r 1 L8986: 000000r 1 ldx MYPA 000000r 1 ldy #$00 000000r 1 L898A: 000000r 1 lda CMDBUF + 11,y 000000r 1 cmp ACLSTP 000000r 1 beq L8996 000000r 1 iny 000000r 1 cpy MYPA 000000r 1 bne L898A 000000r 1 L8996: 000000r 1 sty AF 000000r 1 lda ACLSTP 000000r 1 clc 000000r 1 adc #$01 000000r 1 sta CTRACK 000000r 1 ldx #$FF 000000r 1 L89A1: 000000r 1 lda CMDBUF + 11,y 000000r 1 cmp CTRACK 000000r 1 beq L89B2 000000r 1 inx 000000r 1 iny 000000r 1 cpy MYPA 000000r 1 bne L89A1 000000r 1 ldy #$00 000000r 1 beq L89A1 000000r 1 L89B2: 000000r 1 rts 000000r 1 000000r 1 L89B3: 000000r 1 lda T0 000000r 1 pha 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 lda WD177x_TRACK 000000r 1 sta WD177x_DATA 000000r 1 lda #$18 000000r 1 jsr L884E 000000r 1 jsr L8861 000000r 1 .endif 000000r 1 ldx #$00 000000r 1 ldy #$80 000000r 1 lda WD177x_STATUS 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 and #$40 000000r 1 .else 000000r 1 and #$02 000000r 1 .endif 000000r 1 sta T0 000000r 1 L89D1: 000000r 1 lda WD177x_STATUS 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 and #$40 000000r 1 .else 000000r 1 and #$02 000000r 1 .endif 000000r 1 cmp T0 000000r 1 beq L89DE 000000r 1 plp 000000r 1 jmp L89E7 000000r 1 L89DE: 000000r 1 dex 000000r 1 bne L89D1 000000r 1 dey 000000r 1 bne L89D1 000000r 1 plp 000000r 1 sec 000000r 1 .byte ASM_BIT2 000000r 1 L89E7: 000000r 1 clc 000000r 1 pla 000000r 1 sta T0 000000r 1 rts 000000r 1 000000r 1 L89EC: 000000r 1 jmp RESET 000000r 1 000000r 1 L89EF: 000000r 1 lda #$B4 000000r 1 sta MINSTP 000000r 1 lda #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 sta WD177x_TRACK 000000r 1 .endif 000000r 1 sta NMIFLG 000000r 1 jmp L87BA 000000r 1 L89FD: 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_WRITEPROTECT 000000r 1 rts 000000r 1 L8A03: 000000r 1 sty NMIFLG 000000r 1 stx MINSTP 000000r 1 rts 000000r 1 L8A08: 000000r 1 rts 000000r 1 L8A09: 000000r 1 jsr L89EF 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 jsr L89E8 000000r 1 lda L8A7E,x 000000r 1 .else 000000r 1 jsr L89B3 000000r 1 bcs L8A20 000000r 1 jsr L8A27 000000r 1 lda L8A7E,x 000000r 1 .endif 000000r 1 000000r 1 sta MYPA 000000r 1 sta RSTEPS 000000r 1 lda #$01 000000r 1 sta ACLSTP 000000r 1 rts 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L89E8: 000000r 1 jsr LABEC 000000r 1 .else 000000r 1 L8A20: 000000r 1 lda #$0D 000000r 1 sta L01B0 000000r 1 bne L8A65 000000r 1 L8A27: 000000r 1 lda #$00 000000r 1 sta RLINDX 000000r 1 sta WORK 000000r 1 lda #$C8 000000r 1 jsr L884E 000000r 1 ldx #$00 000000r 1 ldy #$06 000000r 1 L8A37: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8A4A 000000r 1 beq L8A37 000000r 1 lda WD177x_DATA 000000r 1 sta STAB,x 000000r 1 inx 000000r 1 dey 000000r 1 bne L8A37 000000r 1 L8A4A: 000000r 1 jsr L8861 000000r 1 jsr L883C 000000r 1 .endif 000000r 1 000000r 1 lda STAB 000000r 1 asl a 000000r 1 sta MINSTP 000000r 1 lda STAB + 3 000000r 1 L8A57: 000000r 1 and #$03 000000r 1 tax 000000r 1 lda L8A72,x 000000r 1 sta RLINDX 000000r 1 lda L8A76,x 000000r 1 sta WORK 000000r 1 L8A65: 000000r 1 lda AS 000000r 1 and #$80 000000r 1 ora L01B0 000000r 1 ora L8A7A,x 000000r 1 sta AS 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 stx L01B5 000000r 1 .endif 000000r 1 rts 000000r 1 L8A72: 000000r 1 .byte $7F,$FF,$FF,$FF 000000r 1 L8A76: 000000r 1 .byte $01,$01,$02,$04 000000r 1 L8A7A: 000000r 1 .byte $00,$10,$20,$30 000000r 1 L8A7E: 000000r 1 .byte $1A,$10,$09,$05 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 L8A82: 000000r 1 .byte $01,$09,$02,$03 000000r 1 .endif 000000r 1 000000r 1 L8A86: 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bit WD177x_STATUS 000000r 1 bvc L8A86 000000r 1 L8A25_CR: 000000r 1 bit WD177x_STATUS 000000r 1 bvs L8A25_CR 000000r 1 bit L01B4 000000r 1 bmi L8A32 000000r 1 lda #$28 000000r 1 .byte ASM_BIT3 000000r 1 L8A32: 000000r 1 lda #$29 000000r 1 sta WD177x_COMMAND 000000r 1 lda WD177x_STATUS 000000r 1 ora #$02 000000r 1 sta WD177x_COMMAND 000000r 1 lda #$4E 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 lda #$F8 000000r 1 jsr L884E 000000r 1 .endif 000000r 1 bit HINIB 000000r 1 bvc L8AF1 000000r 1 ldx #$50 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 L8A91: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8AF9 000000r 1 beq L8A91 000000r 1 .endif 000000r 1 lda #$4E 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8A91: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8A91 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 bne L8A91 000000r 1 ldx #$0C 000000r 1 L8AA5: 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8AF9 000000r 1 beq L8AA5 000000r 1 .endif 000000r 1 lda #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8A5B: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8A5B 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8A5B 000000r 1 lda WD177x_TRACK 000000r 1 and #$F8 000000r 1 ora CSG5710_4010 + 3 000000r 1 sta WD177x_TRACK 000000r 1 000000r 1 lda CSG5710_4010 + 1 000000r 1 L8A74: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8A74 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$04 000000r 1 sta WD177x_COMMAND 000000r 1 ldx #$02 000000r 1 000000r 1 lda CSG5710_4010 + 1 000000r 1 L8A89: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8A89 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 bne L8AA5 000000r 1 ldx #$03 000000r 1 L8AB9: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8AF9 000000r 1 beq L8AB9 000000r 1 lda #$F6 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8A89 000000r 1 .else 000000r 1 bne L8AB9 000000r 1 L8ACB: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8AF9 000000r 1 beq L8ACB 000000r 1 .endif 000000r 1 lda #$FC 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8A96: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8A96 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$FB 000000r 1 sta WD177x_COMMAND 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 000000r 1 ldx #$32 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 nop 000000r 1 L8ADD: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8AF9 000000r 1 beq L8ADD 000000r 1 .endif 000000r 1 lda #$4E 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8AAA: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8AAA 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8AAA 000000r 1 beq L8AC6 000000r 1 L8AF1: 000000r 1 ldx #$3C 000000r 1 .else 000000r 1 bne L8ADD 000000r 1 beq L8B05 000000r 1 L8AF1: 000000r 1 ldx #$3C 000000r 1 L8AF3: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 L8AF9: 000000r 1 bcc L8B23 000000r 1 beq L8AF3 000000r 1 .endif 000000r 1 lda #$4E 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8ABB: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8ABB 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8ABB 000000r 1 L8AC6: 000000r 1 ldy #$01 000000r 1 L8AC8: 000000r 1 .else 000000r 1 bne L8AF3 000000r 1 L8B05: 000000r 1 ldy #$01 000000r 1 L8B07: 000000r 1 ldx #$0C 000000r 1 L8B09: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8B23 000000r 1 beq L8B09 000000r 1 .endif 000000r 1 lda #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 ldx #$0C 000000r 1 L8ACC: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8ACC 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8ACC 000000r 1 lda CSG5710_4010 + 0 000000r 1 L8ADA: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8ADA 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$14 000000r 1 sta WD177x_COMMAND 000000r 1 lda WD177x_TRACK 000000r 1 and #$F8 000000r 1 ora CSG5710_4010 + 2 000000r 1 sta WD177x_TRACK 000000r 1 ldx #$02 000000r 1 lda CSG5710_4010 + 0 000000r 1 L8AFA: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8AFA 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 bne L8B09 000000r 1 ldx #$03 000000r 1 L8B1D: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 L8B23: 000000r 1 bcc L8B7C 000000r 1 beq L8B1D 000000r 1 lda #$F5 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8AFA 000000r 1 lda CSG5710_4010 + 5 000000r 1 L8B08: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B08 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$FB 000000r 1 sta WD177x_COMMAND 000000r 1 .else 000000r 1 bne L8B1D 000000r 1 L8B2F: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8B7C 000000r 1 beq L8B2F 000000r 1 lda #$FE 000000r 1 sta WD177x_DATA 000000r 1 L8B3E: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8B7C 000000r 1 beq L8B3E 000000r 1 .endif 000000r 1 000000r 1 lda L01B0 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8B1B: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B1B 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 L8B4E: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8B7C 000000r 1 beq L8B4E 000000r 1 .endif 000000r 1 000000r 1 lda HINIB 000000r 1 and #$10 000000r 1 bne L8B61 000000r 1 lda #$00 000000r 1 .byte ASM_BIT3 000000r 1 L8B61: 000000r 1 lda #$01 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8B2E: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B2E 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 L8B66: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8B7C 000000r 1 beq L8B66 000000r 1 .endif 000000r 1 000000r 1 lda CMDBUF + 10,y 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8B39: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B39 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 L8B76: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 L8B7C: 000000r 1 bcc L8BB1 000000r 1 beq L8B76 000000r 1 .endif 000000r 1 000000r 1 lda CMDBUF + 5 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8B44: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B44 000000r 1 sta WD177x_SECTOR 000000r 1 L8B4C: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B4C 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$F7 000000r 1 sta WD177x_COMMAND 000000r 1 L8B5C: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B5C 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 L8B86: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8BB1 000000r 1 beq L8B86 000000r 1 lda #$F7 000000r 1 sta WD177x_DATA 000000r 1 ldx #$16 000000r 1 L8B97: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8BB1 000000r 1 beq L8B97 000000r 1 .endif 000000r 1 000000r 1 lda #$4E 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8B66_CR: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B66_CR 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$08 000000r 1 sta WD177x_COMMAND 000000r 1 lda #$4E 000000r 1 L8B78: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B78 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$EF 000000r 1 sta WD177x_COMMAND 000000r 1 ldx #$14 000000r 1 lda #$4E 000000r 1 L8B8C: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B8C 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 000000r 1 dex 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8B8C 000000r 1 .else 000000r 1 bne L8B97 000000r 1 .endif 000000r 1 000000r 1 ldx #$0C 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 L8BAB: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 L8BB1: 000000r 1 bcc L8BEB 000000r 1 beq L8BAB 000000r 1 .endif 000000r 1 lda #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8B9B: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8B9B 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8B9B 000000r 1 lda CSG5710_4010 + 0 000000r 1 L8BA9: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8BA9 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$14 000000r 1 sta WD177x_COMMAND 000000r 1 ldx #$02 000000r 1 lda CSG5710_4010 + 0 000000r 1 L8BBE: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8BBE 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 bne L8BAB 000000r 1 ldx #$03 000000r 1 L8BBF: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8BEB 000000r 1 beq L8BBF 000000r 1 lda #$F5 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8BBE 000000r 1 lda CSG5710_4010 + 4 000000r 1 L8BCC: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8BCC 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 bne L8BBF 000000r 1 L8BD1: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8BEB 000000r 1 beq L8BD1 000000r 1 lda #$FB 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 sty T0 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 lda WD177x_STATUS 000000r 1 and #$FB 000000r 1 sta WD177x_COMMAND 000000r 1 .endif 000000r 1 ldy WORK 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 nop 000000r 1 L8BE5: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 L8BEB: 000000r 1 bcc L8C4D 000000r 1 beq L8BE5 000000r 1 .endif 000000r 1 000000r 1 lda CMDBUF + 10 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8BE5: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8BE5 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 cpx RLINDX 000000r 1 beq L8BFE 000000r 1 inx 000000r 1 jmp L8BE5 000000r 1 L8BFE: 000000r 1 inx 000000r 1 dey 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bne L8BE5 000000r 1 L8BF8: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8BF8 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$F7 000000r 1 sta WD177x_COMMAND 000000r 1 L8C08: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8C08 000000r 1 sta WD177x_SECTOR 000000r 1 lda #$4E 000000r 1 L8C12: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8C12 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$08 000000r 1 sta WD177x_COMMAND 000000r 1 lda #$4E 000000r 1 L8C24: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8C24 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$EF 000000r 1 sta WD177x_COMMAND 000000r 1 .else 000000r 1 bne L8BE5 000000r 1 L8C02: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8C4D 000000r 1 beq L8C02 000000r 1 lda #$F7 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 000000r 1 ldy CMDBUF + 5 000000r 1 lda L8C4F,y 000000r 1 ldy T0 000000r 1 tax 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 dex 000000r 1 .else 000000r 1 L8C1A: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8C4D 000000r 1 beq L8C1A 000000r 1 .endif 000000r 1 lda #$4E 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8C1A: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8C1A 000000r 1 sta WD177x_SECTOR 000000r 1 .else 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 dex 000000r 1 bne L8C1A 000000r 1 cpy CMDBUF + 7 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 000000r 1 beq L8C54 000000r 1 iny 000000r 1 jmp L8AC8 000000r 1 000000r 1 L8C54: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8C54 000000r 1 sta WD177x_SECTOR 000000r 1 bit WD177x_STATUS 000000r 1 bvc L8C67 000000r 1 dey 000000r 1 bne L8C54 000000r 1 dex 000000r 1 bne L8C54 000000r 1 L8C67: 000000r 1 lda WD177x_STATUS 000000r 1 and #$DD 000000r 1 sta WD177x_COMMAND 000000r 1 ldy #$02 000000r 1 jmp L8829 000000r 1 000000r 1 .else 000000r 1 000000r 1 beq L8C35 000000r 1 iny 000000r 1 jmp L8B07 000000r 1 L8C35: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8C48 000000r 1 beq L8C35 000000r 1 clc 000000r 1 lda #$4E 000000r 1 sta WD177x_DATA 000000r 1 jmp L8C35 000000r 1 L8C48: 000000r 1 jsr L8861 000000r 1 clc 000000r 1 .byte ASM_BIT2 000000r 1 L8C4D: 000000r 1 sec 000000r 1 rts 000000r 1 .endif 000000r 1 000000r 1 L8C4F: 000000r 1 .byte $07,$0C,$17,$2C 000000r 1 L8C53: 000000r 1 .byte $1A,$10,$09,$05 000000r 1 000000r 1 L8C57: 000000r 1 lda HINIB 000000r 1 and #$08 000000r 1 beq L8C64 000000r 1 ldx CTRACK 000000r 1 stx L01B0 000000r 1 sec 000000r 1 rts 000000r 1 L8C64: 000000r 1 jsr LD307 000000r 1 lda CMDSIZ 000000r 1 sec 000000r 1 sbc #$04 000000r 1 tay 000000r 1 beq L8C90 000000r 1 dey 000000r 1 beq L8C95 000000r 1 lda #$00 000000r 1 sta L01B0 000000r 1 lda CMDBUF + 5 000000r 1 jsr L8A57 000000r 1 dey 000000r 1 beq L8CA2 000000r 1 dey 000000r 1 beq L8CA7 000000r 1 dey 000000r 1 beq L8CAD 000000r 1 dey 000000r 1 beq L8CB5 000000r 1 dey 000000r 1 beq L8CBA 000000r 1 jmp L8CBF 000000r 1 L8C90: 000000r 1 lda #$00 000000r 1 sta CMDBUF + 4 000000r 1 L8C95: 000000r 1 lda #$00 000000r 1 sta L01B0 000000r 1 lda #$01 000000r 1 sta CMDBUF + 5 000000r 1 jsr L8A57 000000r 1 L8CA2: 000000r 1 lda #$27 000000r 1 sta CMDBUF + 6 000000r 1 L8CA7: 000000r 1 lda L8C53,x 000000r 1 sta CMDBUF + 7 000000r 1 L8CAD: 000000r 1 lda #$00 000000r 1 sta CMDBUF + 8 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 sta WD177x_TRACK 000000r 1 .endif 000000r 1 L8CB5: 000000r 1 lda #$00 000000r 1 sta CMDBUF + 9 000000r 1 L8CBA: 000000r 1 lda #$E5 000000r 1 sta CMDBUF + 10 000000r 1 L8CBF: 000000r 1 jsr L8CDE 000000r 1 lda L01B0 000000r 1 cpx #$02 000000r 1 bcs L8CDB 000000r 1 lda HINIB 000000r 1 and #$20 000000r 1 beq L8CDB 000000r 1 lda HINIB 000000r 1 ora #$10 000000r 1 sta HINIB 000000r 1 jsr L8954 000000r 1 jsr L8CDE 000000r 1 L8CDB: 000000r 1 jmp L89EF 000000r 1 L8CDE: 000000r 1 jsr L89B3 000000r 1 bcs L8D5F 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 lda #$01 000000r 1 sta VBC_IFR1 000000r 1 .endif 000000r 1 jsr L89EF 000000r 1 lda CMDBUF + 8 000000r 1 sta L01B0 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 sta WD177x_TRACK 000000r 1 .endif 000000r 1 bit CMDBUF + 3 000000r 1 bvs L8CFE 000000r 1 jsr L8888 000000r 1 bcs L8D5F 000000r 1 L8CFE: 000000r 1 lda CMDBUF + 9 000000r 1 and #$7F 000000r 1 beq L8D0D 000000r 1 clc 000000r 1 adc NMIFLG 000000r 1 sta NMIFLG 000000r 1 jsr L87BA 000000r 1 L8D0D: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 jsr L8A86 000000r 1 jsr L88F0 000000r 1 bcs L8D5F 000000r 1 .else 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcs L8D5F 000000r 1 jsr L8A86 000000r 1 bcs L8D5F 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcs L8D5F 000000r 1 jsr L88F0 000000r 1 bcs L8D5F 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcs L8D5F 000000r 1 .endif 000000r 1 lda L01B0 000000r 1 cmp CMDBUF + 6 000000r 1 beq L8D40 000000r 1 inc NMIFLG 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 inc WD177x_TRACK 000000r 1 .endif 000000r 1 inc L01B0 000000r 1 jsr L87BA 000000r 1 jmp L8D0D 000000r 1 L8D40: 000000r 1 bit HINIB 000000r 1 bpl L8D5C 000000r 1 sec 000000r 1 lda CMDBUF + 6 000000r 1 sbc CMDBUF + 8 000000r 1 cmp #$27 000000r 1 bcs L8D5C 000000r 1 inc NMIFLG 000000r 1 jsr L87BA 000000r 1 ldx #$1C 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr LC07F 000000r 1 FillNOP 3 000000r 1 .else 000000r 1 jsr L9D63 000000r 1 jsr LFE00 000000r 1 .endif 000000r 1 L8D5C: 000000r 1 ldx #$00 000000r 1 .byte ASM_BIT3 000000r 1 L8D5F: 000000r 1 ldx #$06 000000r 1 stx L01B0 000000r 1 jmp L85E9 000000r 1 L8D67: 000000r 1 lda HINIB 000000r 1 and #$20 000000r 1 bne L8DC6 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 lda REVCNT 000000r 1 asl a 000000r 1 sta TMP 000000r 1 L8D75: 000000r 1 jsr L8EC6 000000r 1 jsr LAC9C 000000r 1 bcs L8DD1 000000r 1 jsr LAC38 000000r 1 bcs L8DC8 000000r 1 .else 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 .endif 000000r 1 ldy #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 sty BUFPNT 000000r 1 .endif 000000r 1 ldx WORK 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8D89: 000000r 1 bit WD177x_TRACK 000000r 1 bpl L8D89 000000r 1 lda WD177x_SECTOR 000000r 1 .else 000000r 1 lda CMDBUF + 3 000000r 1 sta WD177x_TRACK 000000r 1 lda CMDBUF + 4 000000r 1 sta WD177x_SECTOR 000000r 1 lda #$88 000000r 1 jsr L884E 000000r 1 nop 000000r 1 L8D89: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8DAB 000000r 1 and #$01 000000r 1 beq L8D89 000000r 1 lda WD177x_DATA 000000r 1 .endif 000000r 1 sta (BUFPNT),y 000000r 1 cpy RLINDX 000000r 1 beq L8DA2 000000r 1 iny 000000r 1 bne L8D89 000000r 1 L8DA2: 000000r 1 iny 000000r 1 dex 000000r 1 beq L8DAB 000000r 1 inc BUFPNT + 1 000000r 1 jmp L8D89 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8DAB: 000000r 1 bit WD177x_TRACK 000000r 1 bpl L8DAB 000000r 1 lda WD177x_SECTOR 000000r 1 L8DA9: 000000r 1 bit WD177x_TRACK 000000r 1 bpl L8DA9 000000r 1 lda WD177x_SECTOR 000000r 1 lda #$18 000000r 1 sta WD177x_TRACK 000000r 1 L8DB6: 000000r 1 bit WD177x_TRACK 000000r 1 bpl L8DB6 000000r 1 lda WD177x_SECTOR 000000r 1 lda WD177x_TRACK 000000r 1 and #$20 000000r 1 beq L8DCF 000000r 1 ldx #$05 000000r 1 .byte ASM_BIT3 000000r 1 L8DC8: 000000r 1 ldx #$03 000000r 1 dec TMP 000000r 1 bne L8D75 000000r 1 .byte ASM_BIT3 000000r 1 L8DCF: 000000r 1 ldx #$00 000000r 1 L8DD1: 000000r 1 jsr L85E9 000000r 1 000000r 1 .else 000000r 1 000000r 1 L8DAB: 000000r 1 jsr L8861 000000r 1 jsr L883C 000000r 1 jsr L85E9 000000r 1 bit HINIB 000000r 1 bvs L8DBF 000000r 1 .endif 000000r 1 cpx #$02 000000r 1 bcc L8DBF 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bit HINIB 000000r 1 bvs L8DBF 000000r 1 .endif 000000r 1 jmp L8384 000000r 1 L8DBF: 000000r 1 jsr L85F9 000000r 1 lda HINIB 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 bmi L8DE8 000000r 1 L8DC6: 000000r 1 jsr L8EC6 000000r 1 .else 000000r 1 bmi L8DE8 000000r 1 L8DC6: 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 ldy #$00 000000r 1 sty BUFPNT 000000r 1 ldx WORK 000000r 1 .endif 000000r 1 L8DD0: 000000r 1 lda (BUFPNT),y 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 cpy RLINDX 000000r 1 beq L8DDF 000000r 1 iny 000000r 1 bne L8DD0 000000r 1 L8DDF: 000000r 1 iny 000000r 1 dex 000000r 1 beq L8DE8 000000r 1 inc BUFPNT + 1 000000r 1 jmp L8DD0 000000r 1 L8DE8: 000000r 1 dec CMDBUF + 5 000000r 1 beq L8DF3 000000r 1 jsr L886C 000000r 1 jmp L8D67 000000r 1 L8DF3: 000000r 1 jmp L891B 000000r 1 L8DF6: 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 jsr L8EC6 000000r 1 .else 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 ldy #$00 000000r 1 sty BUFPNT 000000r 1 ldx WORK 000000r 1 .endif 000000r 1 lda HINIB 000000r 1 bmi L8E34 000000r 1 L8E04: 000000r 1 lda VBC_PB1 000000r 1 eor #VBC_PB1_1540_CLOCKOUT 000000r 1 bit CIA_ICR 000000r 1 sta VBC_PB1 000000r 1 L8E0F: 000000r 1 lda VBC_PB1 000000r 1 bpl L8E17 000000r 1 jsr TestATN 000000r 1 L8E17: 000000r 1 lda CIA_ICR 000000r 1 and #CIA_ICR_B_SP 000000r 1 beq L8E0F 000000r 1 lda CIA_SDR 000000r 1 sta (BUFPNT),y 000000r 1 cpy RLINDX 000000r 1 beq L8E2B 000000r 1 iny 000000r 1 bne L8E04 000000r 1 L8E2B: 000000r 1 iny 000000r 1 dex 000000r 1 beq L8E34 000000r 1 inc BUFPNT + 1 000000r 1 jmp L8E04 000000r 1 L8E34: 000000r 1 lda HINIB 000000r 1 and #$20 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 beq L8E4F 000000r 1 jmp L8EB7 000000r 1 L8E4F: 000000r 1 .else 000000r 1 bne L8EB7 000000r 1 .endif 000000r 1 lda HINIB 000000r 1 and #$08 000000r 1 beq L8E45 000000r 1 ldx CTRACK 000000r 1 jmp L8381 000000r 1 L8E45: 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 jsr L8EC6 000000r 1 jsr LAC9C 000000r 1 bcc L8E65 000000r 1 jmp L8F41 000000r 1 L8E65: 000000r 1 jsr LACB9 000000r 1 bit L01B4 000000r 1 bmi L8E70 000000r 1 lda #$28 000000r 1 .byte ASM_BIT3 000000r 1 L8E70: 000000r 1 lda #$29 000000r 1 sta WD177x_COMMAND 000000r 1 lda #$00 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$02 000000r 1 sta WD177x_COMMAND 000000r 1 ldx #$0C 000000r 1 L8E84: 000000r 1 lda #$00 000000r 1 L8E86: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8E86 000000r 1 sta WD177x_SECTOR 000000r 1 dex 000000r 1 bne L8E84 000000r 1 lda CSG5710_4010 + 0 000000r 1 L8E94: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8E94 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 ora #$14 000000r 1 sta WD177x_COMMAND 000000r 1 lda WD177x_TRACK 000000r 1 and #$F8 000000r 1 ora CSG5710_4010 + 2 000000r 1 sta WD177x_TRACK 000000r 1 ldx #$02 000000r 1 lda CSG5710_4010 + 0 000000r 1 L8EB4: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8EB4 000000r 1 sta WD177x_SECTOR 000000r 1 dex 000000r 1 bne L8EB4 000000r 1 lda CSG5710_4010 + 4 000000r 1 L8EC2_CR: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8EC2_CR 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$FB 000000r 1 sta WD177x_COMMAND 000000r 1 .else 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 .endif 000000r 1 ldy #$00 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 sty BUFPNT 000000r 1 .endif 000000r 1 ldx WORK 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8E66: 000000r 1 lda (BUFPNT),y 000000r 1 L8ED8: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8ED8 000000r 1 .else 000000r 1 lda CMDBUF + 3 000000r 1 sta WD177x_TRACK 000000r 1 lda CMDBUF + 4 000000r 1 .endif 000000r 1 sta WD177x_SECTOR 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcs L8E93 000000r 1 lda #$A8 000000r 1 jsr L884E 000000r 1 L8E66: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8E93 000000r 1 and #$01 000000r 1 beq L8E66 000000r 1 lda (BUFPNT),y 000000r 1 sta WD177x_DATA 000000r 1 .endif 000000r 1 000000r 1 cpy RLINDX 000000r 1 beq L8E7F 000000r 1 iny 000000r 1 bne L8E66 000000r 1 L8E7F: 000000r 1 iny 000000r 1 dex 000000r 1 beq L8E88 000000r 1 inc BUFPNT + 1 000000r 1 jmp L8E66 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 L8E88: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8E88 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$F7 000000r 1 sta WD177x_COMMAND 000000r 1 L8F01: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8F01 000000r 1 sta WD177x_SECTOR 000000r 1 L8F09: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8F09 000000r 1 sta WD177x_SECTOR 000000r 1 L8F11: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8F11 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$EF 000000r 1 sta WD177x_COMMAND 000000r 1 L8F21: 000000r 1 bit WD177x_STATUS 000000r 1 bpl L8F21 000000r 1 sta WD177x_SECTOR 000000r 1 lda WD177x_STATUS 000000r 1 and #$CD 000000r 1 sta WD177x_COMMAND 000000r 1 ldy #$02 000000r 1 jsr L8829 000000r 1 ldx #$00 000000r 1 bit L01B4 000000r 1 bvs L8F43_CR 000000r 1 jsr LACC7 000000r 1 .byte ASM_BIT3 000000r 1 L8F41: 000000r 1 ldx #$07 000000r 1 L8F43_CR: 000000r 1 stx L01B0 000000r 1 jsr L81CE 000000r 1 .else 000000r 1 L8E88: 000000r 1 lda VBC_IFR1 000000r 1 lsr a 000000r 1 bcs L8E93 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr PATCH_INIT_CSG5710 000000r 1 .else 000000r 1 jsr L8EC6 000000r 1 .endif 000000r 1 bcc L8E9A 000000r 1 L8E93: 000000r 1 jsr L81CE 000000r 1 ldx #$07 000000r 1 bne L8EA0 000000r 1 L8E9A: 000000r 1 jsr L81CE 000000r 1 jsr L883C 000000r 1 L8EA0: 000000r 1 stx L01B0 000000r 1 .endif 000000r 1 jsr L85E9 000000r 1 jsr L85F9 000000r 1 jsr L86A0 000000r 1 jsr L81B2 000000r 1 bit HINIB 000000r 1 bvs L8EB7 000000r 1 cpx #$02 000000r 1 bcs L8EC5 000000r 1 L8EB7: 000000r 1 dec CMDBUF + 5 000000r 1 beq L8EC2 000000r 1 jsr L886C 000000r 1 jmp L8DF6 000000r 1 L8EC2: 000000r 1 jmp L891B 000000r 1 L8EC5: 000000r 1 rts 000000r 1 L8EC6: 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 ldy #$00 000000r 1 sty BUFPNT 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 ldx WORK 000000r 1 .endif 000000r 1 lda CMDBUF + 3 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 sta NMIFLG 000000r 1 .else 000000r 1 sta WD177x_TRACK 000000r 1 .endif 000000r 1 lda CMDBUF + 4 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 sta SECTR 000000r 1 eor #$FF 000000r 1 sta STAB + 2 000000r 1 .else 000000r 1 sta WD177x_SECTOR 000000r 1 lda #$88 000000r 1 jsr L884E 000000r 1 L8EE1: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8F05 000000r 1 and #$01 000000r 1 beq L8EE1 000000r 1 lda WD177x_DATA 000000r 1 cmp (BUFPNT),y 000000r 1 bne L8F05 000000r 1 cpy RLINDX 000000r 1 beq L8EFC 000000r 1 iny 000000r 1 bne L8EE1 000000r 1 L8EFC: 000000r 1 iny 000000r 1 dex 000000r 1 beq L8F10 000000r 1 inc BUFPNT + 1 000000r 1 jmp L8EE1 000000r 1 L8F05: 000000r 1 lda #$D0 000000r 1 sta WD177x_COMMAND 000000r 1 jsr LA483 000000r 1 ldx #$07 000000r 1 .byte ASM_BIT3 000000r 1 L8F10: 000000r 1 ldx #$00 000000r 1 stx L01B0 000000r 1 jmp L8861 000000r 1 L8F18: 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 ldy #$00 000000r 1 sty BUFPNT 000000r 1 .endif 000000r 1 000000r 1 ldx WORK 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 .else 000000r 1 ldy RLINDX 000000r 1 .endif 000000r 1 lda #$88 000000r 1 jsr L884E 000000r 1 L8F2A: 000000r 1 lda WD177x_STATUS 000000r 1 and #$03 000000r 1 lsr a 000000r 1 bcc L8F4C 000000r 1 and #$01 000000r 1 beq L8F2A 000000r 1 lda WD177x_DATA 000000r 1 cmp CMDBUF + 10 000000r 1 bne L8F4C 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 cpy RLINDX 000000r 1 beq L8F43 000000r 1 iny 000000r 1 bne L8F2A 000000r 1 L8F43: 000000r 1 iny 000000r 1 .else 000000r 1 dey 000000r 1 bpl L8F2A 000000r 1 .endif 000000r 1 dex 000000r 1 beq L8F57 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 .else 000000r 1 ldy RLINDX 000000r 1 .endif 000000r 1 inc BUFPNT + 1 000000r 1 jmp L8F2A 000000r 1 L8F4C: 000000r 1 lda #$D0 000000r 1 sta WD177x_COMMAND 000000r 1 jsr LA483 000000r 1 ldx #$07 000000r 1 .byte ASM_BIT3 000000r 1 L8F57: 000000r 1 ldx #$00 000000r 1 stx L01B0 000000r 1 jmp L8861 000000r 1 L8F5F: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr L89EF 000000r 1 bit HINIB 000000r 1 bpl L8F70 000000r 1 lda CMDBUF + 3 000000r 1 sta NMIFLG 000000r 1 jsr L87BA 000000r 1 L8F70: 000000r 1 lda #$00 000000r 1 sta MYPA 000000r 1 jsr L8A27 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 bcs L8F9D 000000r 1 lda STAB + 2 000000r 1 sta ICMD 000000r 1 L8F82: 000000r 1 jsr L8A27 000000r 1 lda STAB + 2 000000r 1 ldy MYPA 000000r 1 sta CMDBUF + 11,y 000000r 1 inc MYPA 000000r 1 cpy #$1F 000000r 1 bcs L8F9D 000000r 1 cmp ICMD 000000r 1 bne L8F82 000000r 1 lda STAB 000000r 1 sta NMIFLG 000000r 1 ldx #$00 000000r 1 .byte ASM_BIT3 000000r 1 L8F9D: 000000r 1 ldx #$02 000000r 1 stx L01B0 000000r 1 plp 000000r 1 .endif 000000r 1 rts 000000r 1 000000r 1 FillUntil $8FA4 000000r 1 000000r 1 L8FA4: 000000r 1 lda CMDBUF + 4 000000r 1 sta SECINC 000000r 1 rts 000000r 1 L8FAA: 000000r 1 lda CMDBUF + 4 000000r 1 sta REVCNT 000000r 1 rts 000000r 1 L8FB0: 000000r 1 jmp L924E 000000r 1 L8FB3: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne L9021 000000r 1 lda CMDBUF + 4 000000r 1 cmp #$31 000000r 1 beq L8FD4 000000r 1 cmp #$30 000000r 1 bne L9021 000000r 1 lda VBC_PAUNBUF1 000000r 1 and # ~ VBC_PA1_04 000000r 1 sta VBC_PAUNBUF1 000000r 1 cli ; allow processing of job loop 000000r 1 bit HINIB 000000r 1 bpl L8FE1 000000r 1 rts 000000r 1 L8FD4: 000000r 1 .if CompileDrive >= DRIVE_1571 000000r 1 lda VBC_PAUNBUF1 000000r 1 .else 000000r 1 jmp L9021 000000r 1 .endif 000000r 1 ora #VBC_PA1_04 000000r 1 sta VBC_PAUNBUF1 000000r 1 cli ; allow processing of job loop 000000r 1 bit HINIB 000000r 1 bmi L8FE4 000000r 1 L8FE1: 000000r 1 jmp LD042 000000r 1 L8FE4: 000000r 1 rts 000000r 1 L8FE5: 000000r 1 ldx CMDSIZ 000000r 1 cpx #$04 000000r 1 bcc L9021 000000r 1 lda CMDBUF + 3 000000r 1 cmp #$53 000000r 1 beq L8FA4 000000r 1 cmp #$52 000000r 1 beq L8FAA 000000r 1 cmp #$54 000000r 1 beq L8FB0 000000r 1 cmp #$4D 000000r 1 beq L9026 000000r 1 cmp #$48 000000r 1 beq L8FB3 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 jmp LABA7 000000r 1 .elseif CompileDrive >= DRIVE_1571_05 000000r 1 jmp LAA86 000000r 1 .else 000000r 1 tay 000000r 1 cpy #$04 000000r 1 .endif 000000r 1 L9006: 000000r 1 bcc L9021 000000r 1 cpy #$1F 000000r 1 bcs L9021 000000r 1 lda #$40 000000r 1 sta TLKADR 000000r 1 lda #$20 000000r 1 sta LSNADR 000000r 1 tya 000000r 1 clc 000000r 1 adc TLKADR 000000r 1 sta TLKADR 000000r 1 tya 000000r 1 clc 000000r 1 adc LSNADR 000000r 1 sta LSNADR 000000r 1 rts 000000r 1 L9021: 000000r 1 lda #ERRORCODE_31_SYNTAX_ERROR 000000r 1 jmp GenerateErrorMessage 000000r 1 ; ------------ 000000r 1 000000r 1 L9026: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda CMDBUF + 4 000000r 1 cmp #$31 000000r 1 beq L904E 000000r 1 cmp #$30 000000r 1 bne L9021 000000r 1 lda VBC_PAUNBUF1 000000r 1 and # ~ VBC_PA1_20 000000r 1 sta VBC_PAUNBUF1 000000r 1 jsr LA483 000000r 1 jsr LFF82 000000r 1 lda FLGMODE1570 000000r 1 ora #$80 000000r 1 sta FLGMODE1570 000000r 1 cli ; allow processing of job loop 000000r 1 bit HINIB 000000r 1 bpl L907C 000000r 1 rts 000000r 1 L904E: 000000r 1 lda VBC_PAUNBUF1 000000r 1 ora #VBC_PA1_20 000000r 1 sta VBC_PAUNBUF1 000000r 1 jsr LA483 000000r 1 lda #$DE 000000r 1 sta VIRQJOB1570 000000r 1 lda #$9D 000000r 1 sta VIRQJOB1570 + 1 000000r 1 lda #$40 000000r 1 sta VDC_T1HL2 000000r 1 sta VDC_T1HC2 000000r 1 lda FLGMODE1570 000000r 1 and #$7F 000000r 1 sta FLGMODE1570 000000r 1 lda #$00 000000r 1 sta NXTST 000000r 1 cli ; allow processing of job loop 000000r 1 bit HINIB 000000r 1 bmi L907F 000000r 1 L907C: 000000r 1 jmp LD042 000000r 1 L907F: 000000r 1 rts 000000r 1 L9080: 000000r 1 jsr L81CE 000000r 1 jsr L91EA 000000r 1 bcs L90E7 000000r 1 jsr LC63D 000000r 1 lda NODRV 000000r 1 bne L90E7 000000r 1 lda BITCNT 000000r 1 ora #$81 000000r 1 sta BITCNT 000000r 1 jsr L91CA 000000r 1 lda CMDBUF 000000r 1 cmp #$2A 000000r 1 bne L90AE 000000r 1 lda PRGTRK 000000r 1 beq L90AE 000000r 1 pha 000000r 1 lda PRGSEC 000000r 1 sta FILSEC 000000r 1 pla 000000r 1 jmp L90EC 000000r 1 L90AE: 000000r 1 lda #$00 000000r 1 tay 000000r 1 tax 000000r 1 sta LSTDRV 000000r 1 sta FILTBL 000000r 1 jsr LC312 000000r 1 lda F2CNT 000000r 1 pha 000000r 1 lda #$01 000000r 1 sta F2CNT 000000r 1 lda #$FF 000000r 1 sta R0 000000r 1 jsr LC44F 000000r 1 pla 000000r 1 sta F2CNT 000000r 1 lda BITCNT 000000r 1 and #$7F 000000r 1 sta BITCNT 000000r 1 bit HINIB 000000r 1 bmi L90DF 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr LAA5B 000000r 1 FillNOP 1 000000r 1 .elseif CompileDrive >= DRIVE_1571 000000r 1 lda PATTYP 000000r 1 cmp #$02 000000r 1 .else 000000r 1 jsr LAA5B 000000r 1 FillNOP 1 000000r 1 .endif 000000r 1 bne L90E4 000000r 1 L90DF: 000000r 1 lda FILTRK 000000r 1 bne L90EC 000000r 1 L90E4: 000000r 1 ldx #$02 000000r 1 .byte ASM_BIT3 000000r 1 L90E7: 000000r 1 ldx #$0F 000000r 1 jmp L91AD 000000r 1 L90EC: 000000r 1 sta PRGTRK 000000r 1 pha 000000r 1 jsr L91DA 000000r 1 pla 000000r 1 ldx L02B0 000000r 1 sta TRACK0,x 000000r 1 lda FILSEC 000000r 1 sta PRGSEC 000000r 1 sta SECTOR0,x 000000r 1 lda #$80 000000r 1 sta CMDBUF + 2 000000r 1 sta AF 000000r 1 L9107: 000000r 1 cli ; allow processing of job loop 000000r 1 ldx JOBNUM 000000r 1 lda AF 000000r 1 sta JOBS0,x 000000r 1 jsr L864B 000000r 1 cpx #$02 000000r 1 bcc L9118 000000r 1 jmp L9199 000000r 1 L9118: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 ldy #$00 000000r 1 lda (DIRBUF),y 000000r 1 beq L914E 000000r 1 lda BITCNT 000000r 1 and #$FE 000000r 1 sta BITCNT 000000r 1 jsr L9228 000000r 1 ldy #$02 000000r 1 L912A: 000000r 1 lda (DIRBUF),y 000000r 1 tax 000000r 1 jsr L9228 000000r 1 iny 000000r 1 bne L912A 000000r 1 ldx L02B0 000000r 1 lda (DIRBUF),y 000000r 1 cmp TRACK0,x 000000r 1 beq L913F 000000r 1 ldy #$80 000000r 1 .byte ASM_BIT3 000000r 1 L913F: 000000r 1 ldy #$88 000000r 1 sty AF 000000r 1 sta TRACK0,x 000000r 1 ldy #$01 000000r 1 lda (DIRBUF),y 000000r 1 sta SECTOR0,x 000000r 1 jmp L9107 000000r 1 L914E: 000000r 1 ldx #$1F 000000r 1 jsr L9228 000000r 1 lda #$01 000000r 1 bit BITCNT 000000r 1 beq L9177 000000r 1 tay 000000r 1 lda (DIRBUF),y 000000r 1 sec 000000r 1 sbc #$03 000000r 1 sta CTRACK 000000r 1 tax 000000r 1 jsr L9228 000000r 1 iny 000000r 1 lda (DIRBUF),y 000000r 1 tax 000000r 1 jsr L9228 000000r 1 iny 000000r 1 lda (DIRBUF),y 000000r 1 tax 000000r 1 jsr L9228 000000r 1 ldy #$04 000000r 1 bne L9184 000000r 1 L9177: 000000r 1 ldy #$01 000000r 1 lda (DIRBUF),y 000000r 1 tax 000000r 1 dex 000000r 1 stx CTRACK 000000r 1 jsr L9228 000000r 1 ldy #$02 000000r 1 L9184: 000000r 1 lda (DIRBUF),y 000000r 1 tax 000000r 1 jsr L9228 000000r 1 iny 000000r 1 dec CTRACK 000000r 1 bne L9184 000000r 1 lda #$00 000000r 1 sta SA 000000r 1 jsr LDAC0 000000r 1 jmp CommandEnd 000000r 1 L9199: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 stx CTRACK 000000r 1 jsr L9228 000000r 1 lda #$00 000000r 1 sta SA 000000r 1 jsr LDAC0 000000r 1 ldx JOBNUM 000000r 1 lda CTRACK 000000r 1 jmp LE60A 000000r 1 L91AD: 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 stx CTRACK 000000r 1 ldx #$02 000000r 1 jsr L9228 000000r 1 lda #$00 000000r 1 sta SA 000000r 1 jsr LDAC0 000000r 1 lda CTRACK 000000r 1 cmp #$02 000000r 1 beq L91C5 000000r 1 lda #$74 000000r 1 .byte ASM_BIT3 000000r 1 L91C5: 000000r 1 lda #ERRORCODE_62_FILE_NOT_FOUND 000000r 1 jmp GenerateErrorMessage 000000r 1 ; ------------- 000000r 1 000000r 1 L91CA: 000000r 1 lda #$00 000000r 1 sta SA 000000r 1 lda #$01 000000r 1 jsr LD1E2 000000r 1 tax 000000r 1 lda TableHighBytesOfBuffers,x 000000r 1 sta DIRBUF + 1 000000r 1 rts 000000r 1 L91DA: 000000r 1 lda DIRBUF + 1 000000r 1 sec 000000r 1 sbc #$03 000000r 1 sta JOBNUM 000000r 1 asl a 000000r 1 sta L02B0 000000r 1 lda #$00 000000r 1 sta DIRBUF 000000r 1 rts 000000r 1 L91EA: 000000r 1 ldy #$03 000000r 1 lda CMDSIZ 000000r 1 sec 000000r 1 sbc #$03 000000r 1 sta CMDSIZ 000000r 1 lda CMDBUF + 4 000000r 1 cmp #$3A 000000r 1 bne L920A 000000r 1 lda CMDBUF + 3 000000r 1 tax 000000r 1 and #$30 000000r 1 cmp #$30 000000r 1 bne L920A 000000r 1 cpx #$31 000000r 1 beq L9226 000000r 1 L920A: 000000r 1 lda CMDBUF + 3 000000r 1 cmp #$3A 000000r 1 bne L9215 000000r 1 dec CMDSIZ 000000r 1 iny 000000r 1 L9215: 000000r 1 ldx #$00 000000r 1 L9217: 000000r 1 lda CMDBUF,y 000000r 1 sta CMDBUF,x 000000r 1 iny 000000r 1 inx 000000r 1 cpx CMDSIZ 000000r 1 bne L9217 000000r 1 clc 000000r 1 .byte ASM_BIT2 000000r 1 L9226: 000000r 1 sec 000000r 1 rts 000000r 1 L9228: 000000r 1 lda VBC_PB1 000000r 1 cmp VBC_PB1 000000r 1 bne L9228 000000r 1 and #$FF 000000r 1 bmi L924B 000000r 1 eor BITCNT 000000r 1 and #$04 ; VBC_PB1_1540_CLOCKIN? 000000r 1 beq L9228 000000r 1 stx CIA_SDR 000000r 1 lda BITCNT 000000r 1 eor #$04 000000r 1 sta BITCNT 000000r 1 lda #CIA_ICR_B_SP 000000r 1 L9245: 000000r 1 bit CIA_ICR 000000r 1 beq L9245 000000r 1 rts 000000r 1 000000r 1 L924B: 000000r 1 jmp ProcessBus1570 000000r 1 000000r 1 L924E: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 ldx #$00 000000r 1 stx JOBS0 000000r 1 stx JOBS1 000000r 1 lda #$03 000000r 1 sta IP 000000r 1 tay 000000r 1 lda #$80 000000r 1 sta IP + 1 000000r 1 L925F: 000000r 1 lda (IP),y 000000r 1 sta JOBS2 000000r 1 ldx #$08 000000r 1 L9265: 000000r 1 lda JOBS2 000000r 1 and #$01 000000r 1 sta JOBS3 000000r 1 lda JOBS1 000000r 1 bpl L9271 000000r 1 inc JOBS3 000000r 1 L9271: 000000r 1 ror a 000000r 1 bcc L9276 000000r 1 inc JOBS3 000000r 1 L9276: 000000r 1 ror a 000000r 1 ror a 000000r 1 ror a 000000r 1 bcc L927D 000000r 1 inc JOBS3 000000r 1 L927D: 000000r 1 lda JOBS0 000000r 1 rol a 000000r 1 rol a 000000r 1 bcc L9285 000000r 1 inc JOBS3 000000r 1 L9285: 000000r 1 ror JOBS3 000000r 1 rol JOBS0 000000r 1 rol JOBS1 000000r 1 ror JOBS2 000000r 1 dex 000000r 1 bne L9265 000000r 1 inc IP 000000r 1 bne L925F 000000r 1 inc IP + 1 000000r 1 bne L925F 000000r 1 dey 000000r 1 dey 000000r 1 dey 000000r 1 lda JOBS0 000000r 1 cmp L8000 000000r 1 bne L92B3 000000r 1 lda JOBS1 000000r 1 cmp L8001 000000r 1 bne L92B3 000000r 1 sty JOBS0 000000r 1 sty JOBS1 000000r 1 sty JOBS2 000000r 1 sty JOBS3 000000r 1 plp 000000r 1 rts 000000r 1 L92B3: 000000r 1 ldx #$03 000000r 1 stx T0 000000r 1 jmp PostFailError 000000r 1 L92BA: 000000r 1 tsx 000000r 1 stx SAVSP 000000r 1 bit VDC_T1LC2 000000r 1 lda VDC_PCR2 000000r 1 ora #$0E 000000r 1 sta VDC_PCR2 000000r 1 L92C8: 000000r 1 ldy #$05 000000r 1 L92CA: 000000r 1 lda JOBS0,y 000000r 1 bmi L92D5 000000r 1 dey 000000r 1 bpl L92CA 000000r 1 jmp L99CA 000000r 1 L92D5: 000000r 1 cmp #$88 000000r 1 bne L92DC 000000r 1 jmp L960D 000000r 1 L92DC: 000000r 1 cmp #$D0 000000r 1 bne L92E3 000000r 1 jmp L93A2 000000r 1 L92E3: 000000r 1 and #$01 000000r 1 beq L92EE 000000r 1 sty JOBN 000000r 1 lda #$0F 000000r 1 jmp L99B5 000000r 1 L92EE: 000000r 1 tax 000000r 1 cmp CDRIVE 000000r 1 beq L92FB 000000r 1 sta CDRIVE 000000r 1 jsr LF97E 000000r 1 jmp L99CA 000000r 1 L92FB: 000000r 1 lda DRVST 000000r 1 bmi L9302 000000r 1 asl a 000000r 1 bpl L9305 000000r 1 L9302: 000000r 1 jmp L99CA 000000r 1 L9305: 000000r 1 lda #$20 000000r 1 sta DRVST 000000r 1 ldy #$05 000000r 1 sty JOBN 000000r 1 L930D: 000000r 1 jsr L93D1 000000r 1 bmi L932C 000000r 1 L9312: 000000r 1 dec JOBN 000000r 1 bpl L930D 000000r 1 ldy NXTJOB 000000r 1 jsr L93D3 000000r 1 lda NXTRK 000000r 1 sta STEPS 000000r 1 asl STEPS 000000r 1 lda #$60 000000r 1 sta DRVST 000000r 1 lda (HDRPNT),y 000000r 1 sta DRVTRK 000000r 1 jmp L99CA 000000r 1 L932C: 000000r 1 and #$01 000000r 1 cmp CDRIVE 000000r 1 bne L9312 000000r 1 lda DRVTRK 000000r 1 beq L9368 000000r 1 lda DRVTRK 000000r 1 cmp #$24 000000r 1 php 000000r 1 lda (HDRPNT),y 000000r 1 cmp #$24 000000r 1 ror a 000000r 1 plp 000000r 1 and #$80 000000r 1 bcc L9350 000000r 1 bmi L9358 000000r 1 lda DRVTRK 000000r 1 sbc #$23 000000r 1 sta DRVTRK 000000r 1 jmp L9358 000000r 1 L9350: 000000r 1 bpl L9358 000000r 1 lda DRVTRK 000000r 1 adc #$23 000000r 1 sta DRVTRK 000000r 1 L9358: 000000r 1 sec 000000r 1 lda (HDRPNT),y 000000r 1 sbc DRVTRK 000000r 1 beq L9368 000000r 1 sta NXTRK 000000r 1 lda JOBN 000000r 1 sta NXTJOB 000000r 1 jmp L9312 000000r 1 L9368: 000000r 1 ldx #$04 000000r 1 lda (HDRPNT),y 000000r 1 sta TRACC 000000r 1 cmp #$24 000000r 1 tay 000000r 1 jsr L93F3 000000r 1 tya 000000r 1 bcc L9379 000000r 1 sbc #$23 000000r 1 L9379: 000000r 1 tax 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 lda LC04C - 1,x 000000r 1 .else 000000r 1 lda L9408,x 000000r 1 .endif 000000r 1 sta SECTR 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_BITRATE 000000r 1 ora SECTR 000000r 1 sta VDC_PB2 000000r 1 lda L9409 + 34,x 000000r 1 sta SECTR 000000r 1 lda JOB 000000r 1 cmp #$40 000000r 1 beq L93B0 000000r 1 cmp #$60 000000r 1 beq L93A2 000000r 1 cmp #$70 000000r 1 beq L939F 000000r 1 jmp L944F 000000r 1 L939F: 000000r 1 jmp L9B29 000000r 1 L93A2: 000000r 1 lda JOBN 000000r 1 clc 000000r 1 adc #$03 000000r 1 sta BUFPNT + 1 000000r 1 lda #$00 000000r 1 sta BUFPNT 000000r 1 jmp (BUFPNT) 000000r 1 L93B0: 000000r 1 lda #$60 000000r 1 sta DRVST 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_STEPPER 000000r 1 sta VDC_PB2 000000r 1 lda #$A4 000000r 1 sta STEPS 000000r 1 lda L01B1 000000r 1 bmi L93C8 000000r 1 lda #$01 000000r 1 .byte ASM_BIT3 000000r 1 L93C8: 000000r 1 lda #$24 000000r 1 sta DRVTRK 000000r 1 lda #$01 000000r 1 jmp L99B5 000000r 1 L93D1: 000000r 1 ldy JOBN 000000r 1 L93D3: 000000r 1 lda JOBS0,y 000000r 1 pha 000000r 1 bpl L93ED 000000r 1 and #$78 000000r 1 sta JOB 000000r 1 tya 000000r 1 asl a 000000r 1 adc #$06 000000r 1 sta HDRPNT 000000r 1 lda #$00 000000r 1 sta HDRPNT + 1 000000r 1 tya 000000r 1 clc 000000r 1 adc #$03 000000r 1 sta BUFPNT + 1 000000r 1 L93ED: 000000r 1 ldy #$00 000000r 1 sty BUFPNT 000000r 1 pla 000000r 1 rts 000000r 1 L93F3: 000000r 1 bcs L93F8 000000r 1 lda #$00 000000r 1 .byte ASM_BIT3 000000r 1 L93F8: 000000r 1 lda #$84 000000r 1 sta L01B1 000000r 1 lda VBC_PAUNBUF1 000000r 1 and # ~ VBC_PA1_04 000000r 1 ora L01B1 000000r 1 sta VBC_PAUNBUF1 000000r 1 L9408: 000000r 1 rts 000000r 1 L9409: 000000r 1 .byte $60,$60,$60,$60,$60,$60,$60,$60 000000r 1 .byte $60,$60,$60,$60,$60,$60,$60,$60 000000r 1 .byte $60,$40,$40,$40,$40,$40,$40,$40 000000r 1 .byte $20,$20,$20,$20,$20,$20,$00,$00 000000r 1 .byte $00,$00,$00 000000r 1 L942C: 000000r 1 .byte $15,$15,$15,$15,$15,$15,$15,$15 000000r 1 .byte $15,$15,$15,$15,$15,$15,$15,$15 000000r 1 .byte $15,$13,$13,$13,$13,$13,$13,$13 000000r 1 .byte $12,$12,$12,$12,$12,$12,$11,$11 000000r 1 .byte $11,$11,$11 000000r 1 L944F: 000000r 1 lda #$5A 000000r 1 sta TMP 000000r 1 L9453: 000000r 1 jsr L9754 000000r 1 L9456: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9456 000000r 1 lda VDC_PA2 000000r 1 cmp #$52 000000r 1 bne L94A0 000000r 1 sta STAB,y 000000r 1 iny 000000r 1 L9466: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9466 000000r 1 lda VDC_PA2 000000r 1 sta STAB,y 000000r 1 iny 000000r 1 cpy #$08 000000r 1 bne L9466 000000r 1 jsr L952F 000000r 1 ldy #$04 000000r 1 lda #$00 000000r 1 L947D: 000000r 1 eor HEADER,y 000000r 1 dey 000000r 1 bpl L947D 000000r 1 cmp #$00 000000r 1 bne L94B7 000000r 1 lda HEADER + 2 000000r 1 sta DRVTRK 000000r 1 lda JOB 000000r 1 cmp #$30 000000r 1 beq L94A9 000000r 1 lda DiskID0 000000r 1 cmp HEADER 000000r 1 bne L94B4 000000r 1 lda DiskID0 + 1 000000r 1 cmp HEADER + 1 000000r 1 bne L94B4 000000r 1 jmp L94BC 000000r 1 L94A0: 000000r 1 dec TMP 000000r 1 bne L9453 000000r 1 lda #$02 000000r 1 jsr L99B5 000000r 1 L94A9: 000000r 1 lda HEADER 000000r 1 sta DiskID0 000000r 1 lda HEADER + 1 000000r 1 sta DiskID0 + 1 000000r 1 L94B1: 000000r 1 lda #$01 000000r 1 .byte ASM_BIT3 000000r 1 L94B4: 000000r 1 lda #$0B 000000r 1 .byte ASM_BIT3 000000r 1 L94B7: 000000r 1 lda #$09 000000r 1 jmp L99B5 000000r 1 L94BC: 000000r 1 lda #$7F 000000r 1 sta CSECT 000000r 1 lda HEADER + 3 000000r 1 clc 000000r 1 adc #$02 000000r 1 cmp SECTR 000000r 1 bcc L94CB 000000r 1 sbc SECTR 000000r 1 L94CB: 000000r 1 sta NEXTS 000000r 1 ldx #$05 000000r 1 stx JOBN 000000r 1 ldx #$FF 000000r 1 L94D3: 000000r 1 jsr L93D1 000000r 1 bpl L951B 000000r 1 and #$01 000000r 1 cmp CDRIVE 000000r 1 bne L951B 000000r 1 ldy #$00 000000r 1 lda (HDRPNT),y 000000r 1 cmp TRACC 000000r 1 bne L951B 000000r 1 lda JOB 000000r 1 cmp #$60 000000r 1 beq L94F8 000000r 1 ldy #$01 000000r 1 sec 000000r 1 lda (HDRPNT),y 000000r 1 sbc NEXTS 000000r 1 bpl L94F8 000000r 1 clc 000000r 1 adc SECTR 000000r 1 L94F8: 000000r 1 cmp CSECT 000000r 1 bcs L951B 000000r 1 pha 000000r 1 lda JOB 000000r 1 beq L9516 000000r 1 pla 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 cmp #$04 000000r 1 .else 000000r 1 cmp #$09 000000r 1 .endif 000000r 1 bcc L951B 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 cmp #$08 000000r 1 .else 000000r 1 cmp #$0C 000000r 1 .endif 000000r 1 bcs L951B 000000r 1 L950A: 000000r 1 sta CSECT 000000r 1 lda JOBN 000000r 1 tax 000000r 1 clc 000000r 1 adc #$03 000000r 1 sta BUFPNT + 1 000000r 1 bne L951B 000000r 1 L9516: 000000r 1 pla 000000r 1 cmp #$06 000000r 1 bcc L950A 000000r 1 L951B: 000000r 1 dec JOBN 000000r 1 bpl L94D3 000000r 1 txa 000000r 1 bpl L9525 000000r 1 jmp L99CA 000000r 1 L9525: 000000r 1 stx JOBN 000000r 1 jsr L93D1 000000r 1 lda JOB 000000r 1 jmp L9606 000000r 1 L952F: 000000r 1 lda BUFPNT 000000r 1 pha 000000r 1 lda BUFPNT + 1 000000r 1 pha 000000r 1 lda #$24 000000r 1 sta BUFPNT 000000r 1 lda #$00 000000r 1 sta BUFPNT + 1 000000r 1 lda #$00 000000r 1 sta GCRPNT 000000r 1 jsr L98D9 000000r 1 lda BTAB + 3 000000r 1 sta HEADER + 2 000000r 1 lda BTAB + 2 000000r 1 sta HEADER + 3 000000r 1 lda BTAB + 1 000000r 1 sta HEADER + 4 000000r 1 jsr L98D9 000000r 1 lda BTAB 000000r 1 sta HEADER + 1 000000r 1 lda BTAB + 1 000000r 1 sta HEADER 000000r 1 pla 000000r 1 sta BUFPNT + 1 000000r 1 pla 000000r 1 sta BUFPNT 000000r 1 rts 000000r 1 empty9562: 000000r 1 000000r 1 FillUntil $9600 000000r 1 000000r 1 L9600: 000000r 1 jsr L970F 000000r 1 jmp L9754 000000r 1 L9606: 000000r 1 cmp #$00 000000r 1 beq L960D 000000r 1 jmp L976E 000000r 1 L960D: 000000r 1 jsr L9600 000000r 1 L9610: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9610 000000r 1 lda VDC_PA2 000000r 1 tax 000000r 1 lda LA00D,x 000000r 1 sta BTAB 000000r 1 txa 000000r 1 and #$07 000000r 1 sta BTAB + 1 000000r 1 L9623: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9623 000000r 1 lda VDC_PA2 000000r 1 sta BTAB + 2 000000r 1 and #$C0 000000r 1 ora BTAB + 1 000000r 1 tax 000000r 1 lda L9F0D,x 000000r 1 ora BTAB 000000r 1 pha 000000r 1 jmp L9667 000000r 1 L963B: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L963B 000000r 1 lda VDC_PA2 000000r 1 tax 000000r 1 lda LA00D,x 000000r 1 sta BTAB 000000r 1 txa 000000r 1 and #$07 000000r 1 sta BTAB + 1 000000r 1 L964E: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L964E 000000r 1 lda VDC_PA2 000000r 1 sta BTAB + 2 000000r 1 and #$C0 000000r 1 ora BTAB + 1 000000r 1 tax 000000r 1 lda L9F0D,x 000000r 1 ora BTAB 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 beq L96D7 000000r 1 L9667: 000000r 1 lda BTAB + 2 000000r 1 tax 000000r 1 lda LA10D,x 000000r 1 sta BTAB 000000r 1 txa 000000r 1 and #$01 000000r 1 sta BTAB + 2 000000r 1 L9674: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9674 000000r 1 lda VDC_PA2 000000r 1 sta BTAB + 3 000000r 1 and #$F0 000000r 1 ora BTAB + 2 000000r 1 tax 000000r 1 lda L9F0D + 2,x 000000r 1 ora BTAB 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 and #$0F 000000r 1 sta BTAB + 3 000000r 1 L9691: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9691 000000r 1 lda VDC_PA2 000000r 1 sta CHKSUM 000000r 1 and #$80 000000r 1 ora BTAB + 3 000000r 1 tax 000000r 1 lda L9F0D + 16,x 000000r 1 sta BTAB 000000r 1 lda CHKSUM 000000r 1 tax 000000r 1 lda LA20D,x 000000r 1 ora BTAB 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 txa 000000r 1 and #$03 000000r 1 sta CHKSUM 000000r 1 L96B5: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L96B5 000000r 1 lda VDC_PA2 000000r 1 sta BTAB + 1 000000r 1 and #$E0 000000r 1 ora CHKSUM 000000r 1 tax 000000r 1 lda L9F0D + 29,x 000000r 1 sta BTAB 000000r 1 lda BTAB + 1 000000r 1 tax 000000r 1 lda LA30D,x 000000r 1 ora BTAB 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 jmp L963B 000000r 1 L96D7: 000000r 1 lda BTAB + 2 000000r 1 tax 000000r 1 lda LA10D,x 000000r 1 sta BTAB 000000r 1 txa 000000r 1 and #$01 000000r 1 sta BTAB + 2 000000r 1 L96E4: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L96E4 000000r 1 lda VDC_PA2 000000r 1 and #$F0 000000r 1 ora BTAB + 2 000000r 1 tax 000000r 1 lda L9F0D + 2,x 000000r 1 ora BTAB 000000r 1 sta BTAB + 1 000000r 1 pla 000000r 1 cmp DBID 000000r 1 bne L9707 000000r 1 jsr LF5E9 000000r 1 cmp BTAB + 1 000000r 1 beq L970A 000000r 1 lda #$05 000000r 1 .byte ASM_BIT3 000000r 1 L9707: 000000r 1 lda #$04 000000r 1 .byte ASM_BIT3 000000r 1 L970A: 000000r 1 lda #$01 000000r 1 jmp L99B5 000000r 1 L970F: 000000r 1 lda DiskID0 000000r 1 sta HEADER 000000r 1 lda DiskID0 + 1 000000r 1 sta HEADER + 1 000000r 1 ldy #$00 000000r 1 lda (HDRPNT),y 000000r 1 sta HEADER + 2 000000r 1 iny 000000r 1 lda (HDRPNT),y 000000r 1 sta HEADER + 3 000000r 1 lda #$00 000000r 1 eor HEADER 000000r 1 eor HEADER + 1 000000r 1 eor HEADER + 2 000000r 1 eor HEADER + 3 000000r 1 sta HEADER + 4 000000r 1 jsr LF934 000000r 1 lda #$5A 000000r 1 sta TMP 000000r 1 L9735: 000000r 1 jsr L9754 000000r 1 L9738: 000000r 1 lda STAB,y 000000r 1 L973B: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L973B 000000r 1 cmp VDC_PA2 000000r 1 bne L974B 000000r 1 iny 000000r 1 cpy #$08 000000r 1 bne L9738 000000r 1 rts 000000r 1 L974B: 000000r 1 dec TMP 000000r 1 bne L9735 000000r 1 lda #$02 000000r 1 jmp L99B5 000000r 1 L9754: 000000r 1 ldx #$0F 000000r 1 ldy #$00 000000r 1 L9758: 000000r 1 bit VDC_PB2 000000r 1 bpl L9768 000000r 1 dey 000000r 1 bne L9758 000000r 1 dex 000000r 1 bne L9758 000000r 1 lda #$03 000000r 1 jmp L99B5 000000r 1 L9768: 000000r 1 lda VDC_PA2 000000r 1 ldy #$00 000000r 1 rts 000000r 1 L976E: 000000r 1 cmp #$10 000000r 1 beq L9775 000000r 1 jmp L9898 000000r 1 L9775: 000000r 1 jsr LF5E9 000000r 1 sta CHKSUM 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_WRITEPROTECT 000000r 1 bne L9786 000000r 1 lda #$08 000000r 1 jmp L99B5 000000r 1 L9786: 000000r 1 jsr LF78F 000000r 1 jsr L970F 000000r 1 ldy #$09 000000r 1 L978E: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L978E 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L978E 000000r 1 lda #$FF 000000r 1 sta VDC_DDRA2 000000r 1 lda VDC_PCR2 000000r 1 and #$1F 000000r 1 ora #$C0 000000r 1 sta VDC_PCR2 000000r 1 lda #$FF 000000r 1 ldy #$05 000000r 1 sta VDC_PA2 000000r 1 L97AF: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L97AF 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L97AF 000000r 1 ldy #$BB 000000r 1 L97BC: 000000r 1 lda NODRV + 1,y 000000r 1 L97BF: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L97BF 000000r 1 sta VDC_PA2 000000r 1 iny 000000r 1 bne L97BC 000000r 1 L97CA: 000000r 1 lda (BUFPNT),y 000000r 1 L97CC: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L97CC 000000r 1 sta VDC_PA2 000000r 1 iny 000000r 1 bne L97CA 000000r 1 L97D7: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L97D7 000000r 1 lda VDC_PCR2 000000r 1 ora #$E0 000000r 1 sta VDC_PCR2 000000r 1 lda #$00 000000r 1 sta VDC_DDRA2 000000r 1 jsr L97F9 000000r 1 ldy JOBN 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp LAAAD 000000r 1 .else 000000r 1 lda JOBS0,y 000000r 1 .endif 000000r 1 eor #$30 000000r 1 sta JOBS0,y 000000r 1 jmp L944F 000000r 1 L97F9: 000000r 1 lda #$00 000000r 1 sta SAVPNT 000000r 1 sta BUFPNT 000000r 1 sta NXTPNT 000000r 1 lda BUFPNT + 1 000000r 1 sta NXTBF 000000r 1 lda #$01 000000r 1 sta BUFPNT + 1 000000r 1 sta SAVPNT + 1 000000r 1 lda #$BB 000000r 1 sta GCRPNT 000000r 1 sta BYTCNT 000000r 1 jsr L98D9 000000r 1 lda BTAB 000000r 1 sta BID 000000r 1 ldy BYTCNT 000000r 1 lda BTAB + 1 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 2 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 sty BYTCNT 000000r 1 L982B: 000000r 1 jsr L98D9 000000r 1 ldy BYTCNT 000000r 1 lda BTAB 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 1 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 beq L984A 000000r 1 lda BTAB + 2 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 sty BYTCNT 000000r 1 bne L982B 000000r 1 L984A: 000000r 1 lda BTAB + 2 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 sty BYTCNT 000000r 1 L9856: 000000r 1 jsr L98D9 000000r 1 ldy BYTCNT 000000r 1 lda BTAB 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 lda BTAB + 1 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 lda BTAB + 2 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 sty BYTCNT 000000r 1 cpy #$BB 000000r 1 bcc L9856 000000r 1 lda #$45 000000r 1 sta SAVPNT 000000r 1 lda BUFPNT + 1 000000r 1 sta SAVPNT + 1 000000r 1 ldy #$BA 000000r 1 L987F: 000000r 1 lda (BUFPNT),y 000000r 1 sta (SAVPNT),y 000000r 1 dey 000000r 1 bne L987F 000000r 1 lda (BUFPNT),y 000000r 1 sta (SAVPNT),y 000000r 1 ldx #$BB 000000r 1 L988C: 000000r 1 lda NODRV + 1,x 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 inx 000000r 1 bne L988C 000000r 1 stx GCRFLG 000000r 1 rts 000000r 1 L9898: 000000r 1 cmp #$20 000000r 1 beq L989E 000000r 1 bne L98CE 000000r 1 L989E: 000000r 1 jsr LF5E9 000000r 1 sta CHKSUM 000000r 1 jsr LF78F 000000r 1 jsr L9600 000000r 1 ldy #$BB 000000r 1 L98AB: 000000r 1 lda NODRV + 1,y 000000r 1 L98AE: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L98AE 000000r 1 eor VDC_PA2 000000r 1 bne L98D4 000000r 1 iny 000000r 1 bne L98AB 000000r 1 L98BB: 000000r 1 lda (BUFPNT),y 000000r 1 L98BD: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L98BD 000000r 1 eor VDC_PA2 000000r 1 bne L98D4 000000r 1 iny 000000r 1 cpy #$FD 000000r 1 bne L98BB 000000r 1 beq L98D1 000000r 1 L98CE: 000000r 1 jsr L970F 000000r 1 L98D1: 000000r 1 lda #$01 000000r 1 .byte ASM_BIT3 000000r 1 L98D4: 000000r 1 lda #$07 000000r 1 jmp L99B5 000000r 1 L98D9: 000000r 1 ldy GCRPNT 000000r 1 lda (BUFPNT),y 000000r 1 sta GTAB 000000r 1 and #$07 000000r 1 sta GTAB + 1 000000r 1 iny 000000r 1 bne L98EC 000000r 1 lda NXTBF 000000r 1 sta BUFPNT + 1 000000r 1 ldy NXTPNT 000000r 1 L98EC: 000000r 1 lda (BUFPNT),y 000000r 1 sta GTAB + 2 000000r 1 and #$C0 000000r 1 ora GTAB + 1 000000r 1 sta GTAB + 1 000000r 1 lda GTAB + 2 000000r 1 and #$01 000000r 1 sta GTAB + 3 000000r 1 iny 000000r 1 lda (BUFPNT),y 000000r 1 tax 000000r 1 and #$F0 000000r 1 ora GTAB + 3 000000r 1 sta GTAB + 3 000000r 1 txa 000000r 1 and #$0F 000000r 1 sta GTAB + 4 000000r 1 iny 000000r 1 lda (BUFPNT),y 000000r 1 sta GTAB + 5 000000r 1 and #$80 000000r 1 ora GTAB + 4 000000r 1 sta GTAB + 4 000000r 1 lda GTAB + 5 000000r 1 and #$03 000000r 1 sta GTAB + 6 000000r 1 iny 000000r 1 bne L9927 000000r 1 lda NXTBF 000000r 1 sta BUFPNT + 1 000000r 1 ldy NXTPNT 000000r 1 sty BUFPNT 000000r 1 L9927: 000000r 1 lda (BUFPNT),y 000000r 1 sta GTAB + 7 000000r 1 and #$E0 000000r 1 ora GTAB + 6 000000r 1 sta GTAB + 6 000000r 1 iny 000000r 1 sty GCRPNT 000000r 1 ldx GTAB 000000r 1 lda LA00D,x 000000r 1 ldx GTAB + 1 000000r 1 ora L9F0D,x 000000r 1 sta BTAB 000000r 1 ldx GTAB + 2 000000r 1 lda LA10D,x 000000r 1 ldx GTAB + 3 000000r 1 ora L9F0D + 2,x 000000r 1 sta BTAB + 1 000000r 1 ldx GTAB + 4 000000r 1 lda L9F0D + 16,x 000000r 1 ldx GTAB + 5 000000r 1 ora LA20D,x 000000r 1 sta BTAB + 2 000000r 1 ldx GTAB + 6 000000r 1 lda L9F0D + 29,x 000000r 1 ldx GTAB + 7 000000r 1 ora LA30D,x 000000r 1 sta BTAB + 3 000000r 1 rts 000000r 1 L9965: 000000r 1 lda #$00 000000r 1 sta GCRPNT 000000r 1 sta SAVPNT 000000r 1 sta BYTCNT 000000r 1 lda #$01 000000r 1 sta NXTBF 000000r 1 lda #$BA 000000r 1 sta NXTPNT 000000r 1 lda BUFPNT + 1 000000r 1 sta SAVPNT + 1 000000r 1 jsr L98D9 000000r 1 lda BTAB 000000r 1 sta BID 000000r 1 ldy BYTCNT 000000r 1 lda BTAB + 1 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 2 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 L9991: 000000r 1 sty BYTCNT 000000r 1 jsr L98D9 000000r 1 ldy BYTCNT 000000r 1 lda BTAB 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 beq L99B0 000000r 1 lda BTAB + 1 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 2 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 lda BTAB + 3 000000r 1 sta (SAVPNT),y 000000r 1 iny 000000r 1 bne L9991 000000r 1 L99B0: 000000r 1 lda SAVPNT + 1 000000r 1 sta BUFPNT + 1 000000r 1 rts 000000r 1 L99B5: 000000r 1 ldy JOBN 000000r 1 sta JOBS0,y 000000r 1 lda GCRFLG 000000r 1 beq L99C1 000000r 1 jsr L97F9 000000r 1 L99C1: 000000r 1 jsr LF98F 000000r 1 ldx SAVSP 000000r 1 txs 000000r 1 jmp L92C8 000000r 1 L99CA: 000000r 1 lda VDC_T1HL2 000000r 1 sta VDC_T1HC2 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_WRITEPROTECT 000000r 1 cmp LWPT 000000r 1 sta LWPT 000000r 1 bne L99E2 000000r 1 lda CNTMOTOR1570 000000r 1 bne L99F0 000000r 1 beq L99FE 000000r 1 L99E2: 000000r 1 lda #$FF 000000r 1 sta CNTMOTOR1570 000000r 1 jsr L8764 000000r 1 000000r 1 SET_WPSW_DIRTY_NO_CR 000000r 1 000000r 1 bne L99FE 000000r 1 L99F0: 000000r 1 dec CNTMOTOR1570 000000r 1 bne L99FE 000000r 1 lda DRVST 000000r 1 cmp #$00 000000r 1 bne L99FE 000000r 1 jsr L8770 000000r 1 L99FE: 000000r 1 lda PHASE 000000r 1 beq L9A18 000000r 1 cmp #$02 000000r 1 bne L9A0E 000000r 1 lda #$00 000000r 1 sta PHASE 000000r 1 beq L9A18 000000r 1 L9A0E: 000000r 1 sta STEPS 000000r 1 lda #$02 000000r 1 sta PHASE 000000r 1 jmp L9A56 000000r 1 L9A18: 000000r 1 ldx CDRIVE 000000r 1 bmi L9A23 000000r 1 lda DRVST 000000r 1 tay 000000r 1 cmp #$20 000000r 1 bne L9A26 000000r 1 L9A23: 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp L9AC6 000000r 1 .else 000000r 1 jmp L9AC9 000000r 1 .endif 000000r 1 L9A26: 000000r 1 dec ACLTIM 000000r 1 bne L9A46 000000r 1 tya 000000r 1 bpl L9A31 000000r 1 and #$7F 000000r 1 sta DRVST 000000r 1 L9A31: 000000r 1 and #$10 000000r 1 beq L9A46 000000r 1 dec GCRERR 000000r 1 bne L9A46 000000r 1 jsr L8770 000000r 1 lda #$FF 000000r 1 sta CDRIVE 000000r 1 lda #$00 000000r 1 sta DRVST 000000r 1 beq L9A23 000000r 1 L9A46: 000000r 1 tya 000000r 1 and #$40 000000r 1 bne L9A4E 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp L9AC6 000000r 1 .else 000000r 1 jmp L9AC9 000000r 1 .endif 000000r 1 L9A4E: 000000r 1 lda NXTST 000000r 1 bne L9AA2 000000r 1 lda STEPS 000000r 1 beq L9A99 000000r 1 L9A56: 000000r 1 lda STEPS 000000r 1 bpl L9AB3 000000r 1 tya 000000r 1 pha 000000r 1 ldy #$63 000000r 1 L9A5E: 000000r 1 lda VBC_PAUNBUF1 000000r 1 ror a 000000r 1 php 000000r 1 lda VBC_PAUNBUF1 000000r 1 ror a 000000r 1 ror a 000000r 1 plp 000000r 1 and #$80 000000r 1 bcc L9A71 000000r 1 bpl L9A8C 000000r 1 bmi L9A73 000000r 1 L9A71: 000000r 1 bmi L9A8C 000000r 1 L9A73: 000000r 1 dey 000000r 1 bne L9A5E 000000r 1 bcs L9A8C 000000r 1 lda ADRSED 000000r 1 bne L9A8C 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_STEPPER 000000r 1 bne L9A8C 000000r 1 pla 000000r 1 tay 000000r 1 lda #$00 000000r 1 sta STEPS 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp L9AC6 000000r 1 .else 000000r 1 jmp L9AC9 000000r 1 .endif 000000r 1 L9A8C: 000000r 1 pla 000000r 1 tay 000000r 1 inc STEPS 000000r 1 lda VDC_PB2 000000r 1 sec 000000r 1 sbc #$01 000000r 1 jmp L9ABB 000000r 1 L9A99: 000000r 1 lda #$02 000000r 1 sta ACLTIM 000000r 1 sta NXTST 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp L9AC6 000000r 1 .else 000000r 1 jmp L9AC9 000000r 1 .endif 000000r 1 L9AA2: 000000r 1 dec ACLTIM 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 bne L9AC6 000000r 1 .else 000000r 1 bne L9AC9 000000r 1 .endif 000000r 1 lda DRVST 000000r 1 and #$BF 000000r 1 sta DRVST 000000r 1 lda #$00 000000r 1 sta NXTST 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp L9AC6 000000r 1 .else 000000r 1 jmp L9AC9 000000r 1 .endif 000000r 1 L9AB3: 000000r 1 dec STEPS 000000r 1 lda VDC_PB2 000000r 1 clc 000000r 1 adc #$01 000000r 1 L9ABB: 000000r 1 and #$03 000000r 1 sta TMP 000000r 1 lda VDC_PB2 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp LC038 000000r 1 nop 000000r 1 L9AC6: 000000r 1 jmp LC03F 000000r 1 .else 000000r 1 and # ~ VDC_PB2_STEPPER 000000r 1 ora TMP 000000r 1 sta VDC_PB2 000000r 1 .endif 000000r 1 L9AC9: 000000r 1 rts 000000r 1 L9ACA: 000000r 1 .byte $21,$22,$23,$24,$25,$26,$27,$28,$29 000000r 1 L9AD3: 000000r 1 .byte $02,$02,$04,$06,$08,$08,$0B,$13,$16 000000r 1 L9ADC: 000000r 1 ldy #$00 000000r 1 ldx #$1C 000000r 1 jsr L9D63 000000r 1 jsr L9B73 000000r 1 jsr LFE00 000000r 1 ldy #$FF 000000r 1 L9AEB: 000000r 1 ldx #$FF 000000r 1 L9AED: 000000r 1 bit VDC_PB2 000000r 1 bpl L9AFD 000000r 1 dex 000000r 1 bne L9AED 000000r 1 dey 000000r 1 bne L9AEB 000000r 1 L9AF8: 000000r 1 lda #$02 000000r 1 jmp L9D59 000000r 1 L9AFD: 000000r 1 ldy #$00 000000r 1 ldx #$00 000000r 1 L9B01: 000000r 1 bit VDC_PB2 000000r 1 bpl L9B01 000000r 1 L9B06: 000000r 1 lda VDC_PB2 000000r 1 iny 000000r 1 bne L9B0D 000000r 1 inx 000000r 1 L9B0D: 000000r 1 and #VDC_PB2_SYNC 000000r 1 bne L9B06 000000r 1 lda #$00 000000r 1 sta HINIB 000000r 1 txa 000000r 1 ldx #$08 000000r 1 L9B18: 000000r 1 cmp L9ACA,x 000000r 1 beq L9B22 000000r 1 dex 000000r 1 bpl L9B18 000000r 1 bmi L9AF8 000000r 1 L9B22: 000000r 1 lda L9AD3,x 000000r 1 sta BUFFER3 + 38 000000r 1 rts 000000r 1 L9B29: 000000r 1 lda FTNUM 000000r 1 bpl L9B58 000000r 1 lda #$60 000000r 1 sta DRVST 000000r 1 lda L01B2 000000r 1 bne L9B39 000000r 1 lda #$01 000000r 1 .byte ASM_BIT3 000000r 1 L9B39: 000000r 1 lda #$24 000000r 1 sta DRVTRK 000000r 1 sta FTNUM 000000r 1 cmp #$24 000000r 1 jsr L93F3 000000r 1 lda #$A4 000000r 1 sta STEPS 000000r 1 lda VDC_PB2 000000r 1 and # ~ VDC_PB2_STEPPER 000000r 1 sta VDC_PB2 000000r 1 lda #$0A 000000r 1 sta BUFFER3 + 32 000000r 1 jmp L99CA 000000r 1 L9B58: 000000r 1 ldy #$00 000000r 1 lda (HDRPNT),y 000000r 1 cmp FTNUM 000000r 1 beq L9B67 000000r 1 lda FTNUM 000000r 1 sta (HDRPNT),y 000000r 1 jmp L99CA 000000r 1 L9B67: 000000r 1 lda VDC_PB2 000000r 1 and #VDC_PB2_WRITEPROTECT 000000r 1 bne L9B89 000000r 1 lda #$08 000000r 1 jmp L9D51 000000r 1 L9B73: 000000r 1 ldx #$14 000000r 1 lda #$FF 000000r 1 L9B77: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9B77 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L9B77 000000r 1 dex 000000r 1 bne L9B77 000000r 1 rts 000000r 1 L9B89: 000000r 1 lda HINIB 000000r 1 bpl L9B90 000000r 1 jsr L9ADC 000000r 1 L9B90: 000000r 1 lda BUFFER3 + 38 000000r 1 clc 000000r 1 lda #$03 000000r 1 sta HDRPNT + 1 000000r 1 lda #$00 000000r 1 sta HDRPNT 000000r 1 sta BUFFER3 + 40 000000r 1 ldy #$00 000000r 1 L9BA1: 000000r 1 lda HBID 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 lda #$00 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 lda BUFFER3 + 40 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 lda FTNUM 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 lda DiskID0 + 1 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 lda DiskID0 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 lda #$0F 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 sta (HDRPNT),y 000000r 1 iny 000000r 1 tya 000000r 1 pha 000000r 1 ldx #$07 000000r 1 lda #$00 000000r 1 sta CHKSUM 000000r 1 L9BD0: 000000r 1 dey 000000r 1 lda (HDRPNT),y 000000r 1 eor CHKSUM 000000r 1 sta CHKSUM 000000r 1 dex 000000r 1 bne L9BD0 000000r 1 sta (HDRPNT),y 000000r 1 pla 000000r 1 tay 000000r 1 inc BUFFER3 + 40 000000r 1 lda BUFFER3 + 40 000000r 1 cmp SECTR 000000r 1 bcc L9BA1 000000r 1 lda #$03 000000r 1 sta BUFPNT + 1 000000r 1 jsr LFE30 000000r 1 ldy #$BA 000000r 1 L9BF1: 000000r 1 lda (HDRPNT),y 000000r 1 ldx #$45 000000r 1 stx HDRPNT 000000r 1 sta (HDRPNT),y 000000r 1 ldx #$00 000000r 1 stx HDRPNT 000000r 1 dey 000000r 1 cpy #$FF 000000r 1 bne L9BF1 000000r 1 ldy #$44 000000r 1 L9C04: 000000r 1 lda L01BB,y 000000r 1 sta (HDRPNT),y 000000r 1 dey 000000r 1 bpl L9C04 000000r 1 clc 000000r 1 lda #$03 000000r 1 adc #$02 000000r 1 sta BUFPNT + 1 000000r 1 lda #$00 000000r 1 tay 000000r 1 L9C16: 000000r 1 sta (BUFPNT),y 000000r 1 iny 000000r 1 bne L9C16 000000r 1 jsr LF5E9 000000r 1 sta CHKSUM 000000r 1 jsr LF78F 000000r 1 lda #$00 000000r 1 sta ACTJOB 000000r 1 ldx #$06 000000r 1 jsr L9D63 000000r 1 L9C2C: 000000r 1 ldy #$05 000000r 1 L9C2E: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C2E 000000r 1 lda #$FF 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L9C2E 000000r 1 ldx #$0A 000000r 1 ldy ACTJOB 000000r 1 L9C42: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C42 000000r 1 lda (HDRPNT),y 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 iny 000000r 1 dex 000000r 1 bne L9C42 000000r 1 ldy #$09 000000r 1 L9C55: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C55 000000r 1 lda #$55 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L9C55 000000r 1 lda #$FF 000000r 1 ldy #$05 000000r 1 L9C69: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C69 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L9C69 000000r 1 ldy #$BB 000000r 1 L9C79: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C79 000000r 1 lda NODRV + 1,y 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 iny 000000r 1 bne L9C79 000000r 1 L9C8A: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C8A 000000r 1 lda (BUFPNT),y 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 iny 000000r 1 bne L9C8A 000000r 1 lda #$55 000000r 1 ldy BUFFER3 + 38 000000r 1 L9C9F: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9C9F 000000r 1 sta VDC_PA2 000000r 1 bit VDC_PB2 000000r 1 dey 000000r 1 bne L9C9F 000000r 1 lda ACTJOB 000000r 1 clc 000000r 1 adc #$0A 000000r 1 sta ACTJOB 000000r 1 dec BUFFER3 + 40 000000r 1 beq L9CBC 000000r 1 jmp L9C2C 000000r 1 L9CBC: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9CBC 000000r 1 bit VDC_PB2 000000r 1 L9CC4: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9CC4 000000r 1 bit VDC_PB2 000000r 1 jsr LFE00 000000r 1 lda #$C8 000000r 1 sta BUFFER3 + 35 000000r 1 L9CD4: 000000r 1 lda #$00 000000r 1 sta ACTJOB 000000r 1 lda SECTR 000000r 1 sta BUFFER3 + 40 000000r 1 L9CDD: 000000r 1 jsr L9754 000000r 1 ldx #$0A 000000r 1 ldy ACTJOB 000000r 1 L9CE4: 000000r 1 lda (HDRPNT),y 000000r 1 L9CE6: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9CE6 000000r 1 cmp VDC_PA2 000000r 1 bne L9CFE 000000r 1 iny 000000r 1 dex 000000r 1 bne L9CE4 000000r 1 clc 000000r 1 lda ACTJOB 000000r 1 adc #$0A 000000r 1 sta ACTJOB 000000r 1 jmp L9D08 000000r 1 L9CFE: 000000r 1 dec BUFFER3 + 35 000000r 1 bne L9CD4 000000r 1 lda #$06 000000r 1 jmp L9D51 000000r 1 L9D08: 000000r 1 jsr L9754 000000r 1 ldy #$BB 000000r 1 L9D0D: 000000r 1 lda NODRV + 1,y 000000r 1 L9D10: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9D10 000000r 1 cmp VDC_PA2 000000r 1 bne L9CFE 000000r 1 iny 000000r 1 bne L9D0D 000000r 1 L9D1D: 000000r 1 lda (BUFPNT),y 000000r 1 L9D1F: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9D1F 000000r 1 cmp VDC_PA2 000000r 1 bne L9CFE 000000r 1 iny 000000r 1 bne L9D1D 000000r 1 dec BUFFER3 + 40 000000r 1 bne L9CDD 000000r 1 inc FTNUM 000000r 1 lda FTNUM 000000r 1 bit L01B1 000000r 1 bmi L9D3D 000000r 1 cmp #$24 000000r 1 .byte ASM_BIT3 000000r 1 L9D3D: 000000r 1 cmp #$47 000000r 1 bcs L9D44 000000r 1 jmp L99CA 000000r 1 L9D44: 000000r 1 lda #$FF 000000r 1 sta FTNUM 000000r 1 lda #$00 000000r 1 sta GCRFLG 000000r 1 lda #$01 000000r 1 jmp L99B5 000000r 1 L9D51: 000000r 1 dec BUFFER3 + 32 000000r 1 beq L9D59 000000r 1 jmp L99CA 000000r 1 L9D59: 000000r 1 ldy #$FF 000000r 1 sty FTNUM 000000r 1 iny 000000r 1 sty GCRFLG 000000r 1 jmp L99B5 000000r 1 L9D63: 000000r 1 lda VDC_PCR2 000000r 1 and #$1F 000000r 1 ora #$C0 000000r 1 sta VDC_PCR2 000000r 1 lda #$FF 000000r 1 sta VDC_DDRA2 000000r 1 lda #$55 000000r 1 ldy #$00 000000r 1 L9D76: 000000r 1 bit VBC_PAUNBUF1 000000r 1 bmi L9D76 000000r 1 bit VDC_PB2 000000r 1 sta VDC_PA2 000000r 1 dey 000000r 1 bne L9D76 000000r 1 dex 000000r 1 bne L9D76 000000r 1 rts 000000r 1 L9D88: 000000r 1 pha 000000r 1 txa 000000r 1 pha 000000r 1 tya 000000r 1 pha 000000r 1 lda CIA_ICR 000000r 1 and #CIA_ICR_B_SP 000000r 1 beq L9DBA 000000r 1 bit FLGMODE1570 000000r 1 bmi L9DBA 000000r 1 lda VBC_PAUNBUF1 000000r 1 ora #VBC_PA1_20 000000r 1 sta VBC_PAUNBUF1 000000r 1 lda #$DE 000000r 1 sta VIRQJOB1570 000000r 1 lda #$9D 000000r 1 sta VIRQJOB1570 + 1 000000r 1 lda #$40 000000r 1 sta VDC_T1HL2 000000r 1 sta VDC_T1HC2 000000r 1 lda #$00 000000r 1 sta NXTST 000000r 1 jmp L9DEA 000000r 1 L9DBA: 000000r 1 lda VBC_IFR1 000000r 1 and #$02 000000r 1 beq L9DC4 000000r 1 jsr SetATNPending ; Set the ATN pending flag to mark that the bus must be processed 000000r 1 L9DC4: 000000r 1 lda VDC_IFR2 000000r 1 asl a 000000r 1 bpl L9DCD 000000r 1 jsr LF2B0 000000r 1 L9DCD: 000000r 1 tsx 000000r 1 lda L0104,x 000000r 1 and #$10 000000r 1 beq L9DD8 000000r 1 jsr LF2B0 000000r 1 L9DD8: 000000r 1 pla 000000r 1 tay 000000r 1 pla 000000r 1 tax 000000r 1 pla 000000r 1 rti 000000r 1 L9DDE: 000000r 1 pha 000000r 1 txa 000000r 1 pha 000000r 1 tya 000000r 1 pha 000000r 1 lda CIA_ICR 000000r 1 and #CIA_ICR_B_SP 000000r 1 beq L9DF2 000000r 1 L9DEA: 000000r 1 lda BITCNT 000000r 1 ora #$40 000000r 1 sta BITCNT 000000r 1 bne L9E14 000000r 1 L9DF2: 000000r 1 lda VBC_IFR1 000000r 1 and #$02 000000r 1 beq L9E00 000000r 1 bit VBC_PA1 000000r 1 lda #$01 000000r 1 sta ATNPND 000000r 1 L9E00: 000000r 1 tsx 000000r 1 lda L0104,x 000000r 1 and #$10 000000r 1 beq L9E0B 000000r 1 jsr L92BA 000000r 1 L9E0B: 000000r 1 lda VDC_IFR2 000000r 1 asl a 000000r 1 bpl L9E14 000000r 1 jsr L92BA 000000r 1 L9E14: 000000r 1 pla 000000r 1 tay 000000r 1 pla 000000r 1 tax 000000r 1 pla 000000r 1 rti 000000r 1 empty9e1a: 000000r 1 000000r 1 FillUntil $9F09 000000r 1 000000r 1 .byte $08,$00,$01,$FF 000000r 1 000000r 1 L9F0D: 000000r 1 .byte $0C,$04,$05,$FF,$FF,$02,$03,$FF 000000r 1 .byte $0F,$06,$07,$FF,$09,$0A,$0B,$FF 000000r 1 .byte $0D,$0E,$80,$FF,$00,$00,$10,$40 000000r 1 .byte $FF,$20,$C0,$60,$40,$A0,$50,$E0 000000r 1 .byte $FF,$FF,$FF,$02,$20,$08,$30,$FF 000000r 1 .byte $FF,$00,$F0,$FF,$60,$01,$70,$FF 000000r 1 .byte $FF,$FF,$90,$03,$A0,$0C,$B0,$FF 000000r 1 .byte $FF,$04,$D0,$FF,$E0,$05,$80,$FF 000000r 1 .byte $90,$FF,$08,$0C,$FF,$0F,$09,$0D 000000r 1 .byte $80,$02,$FF,$FF,$FF,$03,$FF,$FF 000000r 1 .byte $00,$FF,$FF,$0F,$FF,$0F,$FF,$FF 000000r 1 .byte $10,$06,$FF,$FF,$FF,$07,$00,$20 000000r 1 .byte $A0,$FF,$FF,$06,$FF,$09,$FF,$FF 000000r 1 .byte $C0,$0A,$FF,$FF,$FF,$0B,$FF,$FF 000000r 1 .byte $40,$FF,$FF,$07,$FF,$0D,$FF,$FF 000000r 1 .byte $50,$0E,$FF,$FF,$FF,$FF,$10,$30 000000r 1 .byte $B0,$FF,$00,$04,$02,$06,$0A,$0E 000000r 1 .byte $80,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $20,$FF,$08,$09,$80,$10,$C0,$50 000000r 1 .byte $30,$30,$F0,$70,$90,$B0,$D0,$FF 000000r 1 .byte $FF,$FF,$00,$0A,$FF,$FF,$FF,$FF 000000r 1 .byte $F0 000000r 1 L9FB6: 000000r 1 brk 000000r 1 nop 000000r 1 L9FB8: 000000r 1 lda JOBS0,x 000000r 1 bmi L9FB8 000000r 1 rts 000000r 1 000000r 1 L9FBD: 000000r 1 .byte $60,$FF,$01,$0B,$FF,$FF,$FF,$FF 000000r 1 .byte $70,$FF,$FF,$FF,$FF,$FF,$C0,$F0 000000r 1 .byte $D0,$FF,$01,$05,$03,$07,$0B,$FF 000000r 1 .byte $90,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $A0,$FF,$0C,$0D,$FF,$FF,$FF,$FF 000000r 1 .byte $B0,$FF,$FF,$FF,$FF,$FF,$40,$60 000000r 1 .byte $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF 000000r 1 .byte $D0,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $E0,$FF,$05,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$50,$70 000000r 1 LA00D: 000000r 1 .byte $0C,$04,$05,$FF,$FF,$02,$03,$FF 000000r 1 .byte $0F,$06,$07,$FF,$09,$0A,$0B,$FF 000000r 1 .byte $0D,$0E,$80,$FF,$00,$00,$10,$40 000000r 1 .byte $FF,$20,$C0,$60,$40,$A0,$50,$E0 000000r 1 .byte $FF,$FF,$FF,$02,$20,$08,$30,$30 000000r 1 .byte $30,$00,$F0,$FF,$60,$01,$70,$FF 000000r 1 .byte $FF,$FF,$90,$03,$A0,$0C,$B0,$FF 000000r 1 .byte $FF,$04,$D0,$FF,$E0,$05,$80,$FF 000000r 1 .byte $90,$FF,$08,$0C,$FF,$0F,$09,$0D 000000r 1 .byte $80,$80,$80,$80,$80,$80,$80,$80 000000r 1 .byte $00,$00,$00,$00,$00,$00,$00,$00 000000r 1 .byte $10,$10,$10,$10,$10,$10,$10,$10 000000r 1 .byte $A0,$FF,$FF,$06,$FF,$09,$FF,$FF 000000r 1 .byte $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 000000r 1 .byte $40,$40,$40,$40,$40,$40,$40,$40 000000r 1 .byte $50,$50,$50,$50,$50,$50,$50,$50 000000r 1 .byte $B0,$FF,$00,$04,$02,$06,$0A,$0E 000000r 1 .byte $80,$80,$80,$80,$80,$80,$80,$80 000000r 1 .byte $20,$20,$20,$20,$20,$20,$20,$20 000000r 1 .byte $30,$30,$30,$30,$30,$30,$30,$30 000000r 1 .byte $FF,$FF,$00,$0A,$0A,$0A,$0A,$0A 000000r 1 .byte $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 000000r 1 .byte $60,$60,$60,$60,$60,$60,$60,$60 000000r 1 .byte $70,$70,$70,$70,$70,$70,$70,$70 000000r 1 .byte $D0,$FF,$01,$05,$03,$07,$0B,$FF 000000r 1 .byte $90,$90,$90,$90,$90,$90,$90,$90 000000r 1 .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 000000r 1 .byte $B0,$B0,$B0,$B0,$B0,$B0,$B0,$B0 000000r 1 .byte $E0,$FF,$04,$0E,$FF,$FF,$FF,$FF 000000r 1 .byte $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0 000000r 1 .byte $E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0 000000r 1 .byte $05,$05,$05,$05,$05,$05,$50,$70 000000r 1 000000r 1 LA10D: 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 000000r 1 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 000000r 1 .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 000000r 1 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 000000r 1 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 000000r 1 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 000000r 1 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 000000r 1 .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 000000r 1 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 000000r 1 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 000000r 1 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 000000r 1 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 000000r 1 .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 000000r 1 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 000000r 1 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 000000r 1 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$80,$80,$00,$00,$10,$10 000000r 1 .byte $FF,$FF,$C0,$C0,$40,$40,$50,$50 000000r 1 .byte $FF,$FF,$FF,$FF,$20,$20,$30,$30 000000r 1 .byte $FF,$FF,$F0,$F0,$60,$60,$70,$70 000000r 1 .byte $FF,$FF,$90,$90,$A0,$A0,$B0,$B0 000000r 1 .byte $FF,$FF,$D0,$D0,$E0,$E0,$FF,$FF 000000r 1 000000r 1 LA20D: 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$08,$08,$08,$08 000000r 1 .byte $00,$00,$00,$00,$01,$01,$01,$01 000000r 1 .byte $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C 000000r 1 .byte $04,$04,$04,$04,$05,$05,$05,$05 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $02,$02,$02,$02,$03,$03,$03,$03 000000r 1 .byte $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F 000000r 1 .byte $06,$06,$06,$06,$07,$07,$07,$07 000000r 1 .byte $FF,$FF,$FF,$FF,$09,$09,$09,$09 000000r 1 .byte $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B 000000r 1 .byte $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D 000000r 1 .byte $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$08,$08,$08,$08 000000r 1 .byte $00,$00,$00,$00,$01,$01,$01,$01 000000r 1 .byte $FF,$FF,$FF,$FF,$0C,$0C,$0C,$0C 000000r 1 .byte $04,$04,$04,$04,$05,$05,$05,$05 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $02,$02,$02,$02,$03,$03,$03,$03 000000r 1 .byte $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F 000000r 1 .byte $06,$06,$06,$06,$07,$07,$07,$07 000000r 1 .byte $FF,$FF,$FF,$FF,$09,$09,$09,$09 000000r 1 .byte $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B 000000r 1 .byte $FF,$FF,$FF,$FF,$0D,$0D,$0D,$0D 000000r 1 .byte $0E,$0E,$0E,$0E,$FF,$FF,$FF,$FF 000000r 1 000000r 1 LA30D: 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 000000r 1 .byte $FF,$08,$00,$01,$FF,$0C,$04,$05 000000r 1 .byte $FF,$FF,$02,$03,$FF,$0F,$06,$07 000000r 1 .byte $FF,$09,$0A,$0B,$FF,$0D,$0E,$FF 000000r 1 000000r 1 LA40D: 000000r 1 lda #MAXTRACK_DOUBLESIDED + 1 000000r 1 sta MAXTRACK_ADJUSTED 000000r 1 lda #$03 000000r 1 jsr LD6D3 000000r 1 ldx #$03 000000r 1 lda #$00 000000r 1 sta L01B2 000000r 1 lda #$F0 000000r 1 sta HINIB 000000r 1 sta JOBS0,x 000000r 1 jsr L9FB6 000000r 1 cmp #$02 000000r 1 bcs LA470 000000r 1 ldy #$03 000000r 1 LA42D: 000000r 1 lda #$01 000000r 1 sta TRACK3 000000r 1 lda #$00 000000r 1 sta SECTOR3 000000r 1 lda #$80 000000r 1 sta JOBS0,x 000000r 1 jsr L9FB6 000000r 1 cmp #$02 000000r 1 bcc LA445 000000r 1 dey 000000r 1 bpl LA42D 000000r 1 bcs LA470 000000r 1 LA445: 000000r 1 .if CompileDrive >= DRIVE_1571 000000r 1 lda #$01 000000r 1 .else 000000r 1 rts 000000r 1 nop 000000r 1 .endif 000000r 1 sta L01B2 000000r 1 lda #$F0 000000r 1 sta HINIB 000000r 1 sta JOBS0,x 000000r 1 jsr L9FB6 000000r 1 cmp #$02 000000r 1 bcs LA470 000000r 1 ldy #$03 000000r 1 LA459: 000000r 1 lda #$24 000000r 1 sta TRACK3 000000r 1 lda #$00 000000r 1 sta SECTOR3 000000r 1 lda #$80 000000r 1 sta JOBS0,x 000000r 1 jsr L9FB6 000000r 1 cmp #$02 000000r 1 bcs LA46D 000000r 1 rts 000000r 1 LA46D: 000000r 1 dey 000000r 1 bpl LA459 000000r 1 LA470: 000000r 1 ldx #$00 000000r 1 bit JOBRTN 000000r 1 stx JOBRTN 000000r 1 bpl LA47B 000000r 1 rts 000000r 1 LA47B: 000000r 1 jmp LE60A 000000r 1 LA47E: 000000r 1 txa 000000r 1 ldx #$05 000000r 1 bne LA486 000000r 1 LA483: 000000r 1 txa 000000r 1 ldx #$0D 000000r 1 LA486: 000000r 1 dex 000000r 1 bne LA486 000000r 1 tax 000000r 1 rts 000000r 1 LA48B: 000000r 1 lda BMPNT 000000r 1 sta TMP1570 000000r 1 lda BMPNT + 1 000000r 1 sta TMP1570 + 1 000000r 1 rts 000000r 1 000000r 1 LA496: 000000r 1 lda TMP1570 000000r 1 sta BMPNT 000000r 1 lda TMP1570 + 1 000000r 1 sta BMPNT + 1 000000r 1 rts 000000r 1 ; -------------------- 000000r 1 000000r 1 LA4A1: 000000r 1 ldx DRVNUM 000000r 1 000000r 1 lda a:NODRV,x 000000r 1 beq LA4AD 000000r 1 lda #ERRORCODE_74_DRIVE_NOT_READY 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr LE645 000000r 1 .else 000000r 1 jsr LE648 000000r 1 .endif 000000r 1 LA4AD: 000000r 1 jsr LF119 000000r 1 jsr LF0DF 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp LA4C2 000000r 1 .else 000000r 1 lda WBAM 000000r 1 .endif 000000r 1 beq LA4BF 000000r 1 ora #$80 000000r 1 sta WBAM 000000r 1 bne LA4C2 000000r 1 LA4BF: 000000r 1 jsr LA58D 000000r 1 LA4C2: 000000r 1 jsr LA48B 000000r 1 jsr LA534 000000r 1 lda TRACK 000000r 1 sec 000000r 1 sbc #$24 000000r 1 tay 000000r 1 lda (BMPNT),y 000000r 1 pha 000000r 1 jsr LA496 000000r 1 pla 000000r 1 rts 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 .byte "DAVID G. SIRACUSA" 000000r 1 .elseif CompileDrive >= DRIVE_1571 000000r 1 .else 000000r 1 FillUntil $A4DD 000000r 1 .byte "STEVE LAM",$0D 000000r 1 .endif 000000r 1 000000r 1 FillUntil $A4E7 000000r 1 000000r 1 LA4E7: 000000r 1 lda TRACK 000000r 1 sec 000000r 1 sbc #$24 000000r 1 tay 000000r 1 lda SECTOR 000000r 1 lsr a 000000r 1 lsr a 000000r 1 lsr a 000000r 1 clc 000000r 1 adc LA5DB,y 000000r 1 tay 000000r 1 lda SECTOR 000000r 1 and #$07 000000r 1 tax 000000r 1 lda L0146,y 000000r 1 and LEFE9,x 000000r 1 php 000000r 1 lda L0146,y 000000r 1 plp 000000r 1 rts 000000r 1 LA508: 000000r 1 jsr LA48B 000000r 1 jsr LA534 000000r 1 lda TRACK 000000r 1 sec 000000r 1 sbc #$24 000000r 1 tay 000000r 1 clc 000000r 1 lda (BMPNT),y 000000r 1 adc #$01 000000r 1 sta (BMPNT),y 000000r 1 jmp LA496 000000r 1 LA51E: 000000r 1 jsr LA48B 000000r 1 jsr LA534 000000r 1 lda TRACK 000000r 1 sec 000000r 1 sbc #$24 000000r 1 tay 000000r 1 sec 000000r 1 lda (BMPNT),y 000000r 1 sbc #$01 000000r 1 sta (BMPNT),y 000000r 1 jmp LA496 000000r 1 LA534: 000000r 1 ldx #$0D 000000r 1 lda BUF0,x 000000r 1 and #$0F 000000r 1 tax 000000r 1 lda TableHighBytesOfBuffers,x 000000r 1 sta BMPNT + 1 000000r 1 lda #$DD 000000r 1 sta BMPNT 000000r 1 rts 000000r 1 LA545: 000000r 1 lda T0 000000r 1 pha 000000r 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 000000r 1 jsr LAB8D 000000r 1 .endif 000000r 1 lda TRACK 000000r 1 sec 000000r 1 sbc #$24 000000r 1 tay 000000r 1 pha 000000r 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 000000r 1 .else 000000r 1 jsr LA48B 000000r 1 .endif 000000r 1 jsr LA534 000000r 1 lda (BMPNT),y 000000r 1 pha 000000r 1 lda #$00 000000r 1 sta T0 000000r 1 lda #$01 000000r 1 sta BMPNT + 1 000000r 1 lda LA5DB,y 000000r 1 clc 000000r 1 adc #$46 000000r 1 sta BMPNT 000000r 1 ldy #$02 000000r 1 LA56A: 000000r 1 ldx #$07 000000r 1 LA56C: 000000r 1 lda (BMPNT),y 000000r 1 and LEFE9,x 000000r 1 beq LA575 000000r 1 inc T0 000000r 1 LA575: 000000r 1 dex 000000r 1 bpl LA56C 000000r 1 dey 000000r 1 bpl LA56A 000000r 1 pla 000000r 1 cmp T0 000000r 1 beq LA585 000000r 1 lda #ERRORCODE_71_DIR_ERROR 000000r 1 jsr LE645 000000r 1 LA585: 000000r 1 pla 000000r 1 tay 000000r 1 pla 000000r 1 sta T0 000000r 1 jmp LA496 000000r 1 LA58D: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA597 000000r 1 LA594: 000000r 1 jmp LD58A 000000r 1 LA597: 000000r 1 lda MAXTRACK_ADJUSTED 000000r 1 cmp #MAXTRACK_SINGLESIDED + 2 000000r 1 bcc LA594 000000r 1 ldx JOBNUM 000000r 1 lda LSTJOB,x 000000r 1 pha 000000r 1 jsr LD58A 000000r 1 jsr LA48B 000000r 1 jsr LEF3A 000000r 1 jsr LF008 000000r 1 lda JOBNUM 000000r 1 asl a 000000r 1 tax 000000r 1 lda #$35 000000r 1 sta TRACK0,x 000000r 1 ldy #$68 000000r 1 LA5BA: 000000r 1 lda L0146,y 000000r 1 sta (BMPNT),y 000000r 1 dey 000000r 1 bpl LA5BA 000000r 1 jsr LA496 000000r 1 jsr LD58A 000000r 1 lda JOBNUM 000000r 1 asl a 000000r 1 tax 000000r 1 lda LFE85 000000r 1 sta TRACK0,x 000000r 1 jsr LD586 000000r 1 pla 000000r 1 ldx JOBNUM 000000r 1 sta LSTJOB,x 000000r 1 rts 000000r 1 LA5DB: 000000r 1 .byte $00,$03,$06,$09,$0C,$0F,$12,$15 000000r 1 .byte $18,$1B,$1E,$21,$24,$27,$2A,$2D 000000r 1 .byte $30,$33,$36,$39,$3C,$3F,$42,$45 000000r 1 .byte $48,$4B,$4E,$51,$54,$57,$5A,$5D 000000r 1 .byte $60,$63,$66 000000r 1 LA5FE: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA614 000000r 1 ldy #$00 000000r 1 ldx #$00 000000r 1 lda #$01 000000r 1 sta FILTBL 000000r 1 jsr LC312 000000r 1 jmp LE7A8 000000r 1 LA614: 000000r 1 lda #$8D 000000r 1 jsr SearchInCmdline 000000r 1 jmp LE7A8 000000r 1 000000r 1 Patch1570CallToParseCommandBufferAndExecuteCommand: 000000r 1 jsr ParseCommandBufferAndExecuteCommand 000000r 1 jsr L81B2 000000r 1 lda BITCNT 000000r 1 and #$7F 000000r 1 sta BITCNT 000000r 1 jmp END_Patch1570CallToParseCommandBufferAndExecuteCommand 000000r 1 ; ----------------- 000000r 1 000000r 1 LA62B: 000000r 1 lda #$FF 000000r 1 sta ACLTIM 000000r 1 lda #$06 000000r 1 sta GCRERR 000000r 1 rts 000000r 1 LA634: 000000r 1 bne LA63D 000000r 1 lda CNTMOTOR1570 000000r 1 bne LA64B 000000r 1 beq LA657 000000r 1 LA63D: 000000r 1 lda #$FF 000000r 1 sta CNTMOTOR1570 000000r 1 jsr L8764 000000r 1 SET_WPSW_DIRTY 000000r 1 bne LA657 000000r 1 LA64B: 000000r 1 dec CNTMOTOR1570 000000r 1 bne LA657 000000r 1 lda DRVST 000000r 1 bne LA657 000000r 1 jsr L8770 000000r 1 LA657: 000000r 1 jmp LF9B1 000000r 1 000000r 1 PATCH_INIT_BC_1570: 000000r 1 lda #VBC_PB1_1540_DATAOUT 000000r 1 sta VBC_PB1 000000r 1 lda #VBC_PA1_20 000000r 1 sta VBC_PA1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 jmp PATCH_INIT_CSG5710 000000r 1 .else 000000r 1 jmp PATCH_INIT_BC_1570_END 000000r 1 .endif 000000r 1 ; -------------------------------- 000000r 1 000000r 1 LA667: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA671 000000r 1 LA66E: 000000r 1 jmp LD586 000000r 1 ; ---------------------------- 000000r 1 000000r 1 LA671: 000000r 1 lda MAXTRACK_ADJUSTED 000000r 1 cmp #MAXTRACK_SINGLESIDED + 2 000000r 1 bcc LA66E 000000r 1 jsr LA48B 000000r 1 lda #$00 000000r 1 sta BMPNT 000000r 1 ldx JOBNUM 000000r 1 lda TableHighBytesOfBuffers,x 000000r 1 sta BMPNT + 1 000000r 1 lda #$FF 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jmp PATCH_LAB72 000000r 1 PATCH_LAB72_END: 000000r 1 000000r 1 .else 000000r 1 sta JOBRTN 000000r 1 .endif 000000r 1 lda JOBNUM 000000r 1 asl a 000000r 1 tax 000000r 1 lda #$35 000000r 1 sta TRACK0,x 000000r 1 jsr LD586 000000r 1 cmp #$02 000000r 1 ror a 000000r 1 and #$80 000000r 1 eor #$80 000000r 1 sta L01AF 000000r 1 bpl LA6AC 000000r 1 ldy #$68 000000r 1 LA6A4: 000000r 1 lda (BMPNT),y 000000r 1 sta L0146,y 000000r 1 dey 000000r 1 bpl LA6A4 000000r 1 LA6AC: 000000r 1 lda #$FF 000000r 1 sta JOBRTN 000000r 1 000000r 1 LA6B1: 000000r 1 lda JOBNUM 000000r 1 asl a 000000r 1 tax 000000r 1 lda LFE85 000000r 1 sta TRACK0,x 000000r 1 jsr LD586 000000r 1 cmp #$02 000000r 1 bcc LA6D1 000000r 1 tax 000000r 1 lda #MAXTRACK_SINGLESIDED + 1 000000r 1 sta MAXTRACK_ADJUSTED 000000r 1 jsr LA496 000000r 1 txa 000000r 1 jsr LE60A 000000r 1 jmp LD644 000000r 1 LA6D1: 000000r 1 ldy #$03 000000r 1 lda (BMPNT),y 000000r 1 and L01AF 000000r 1 bmi LA6DD 000000r 1 lda #$24 000000r 1 .byte ASM_BIT3 000000r 1 LA6DD: 000000r 1 lda #MAXTRACK_DOUBLESIDED + 1 000000r 1 sta MAXTRACK_ADJUSTED 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571_05 .AND CompileDrive < DRIVE_1571CR 000000r 1 jmp LAB24 000000r 1 .else 000000r 1 jmp LA496 000000r 1 .endif 000000r 1 LA6E5: 000000r 1 jsr LD58C 000000r 1 pha 000000r 1 cmp #$02 000000r 1 bcs LA736 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA736 000000r 1 lda #MAXTRACK_DOUBLESIDED + 1 000000r 1 sta MAXTRACK_ADJUSTED 000000r 1 lda #$FF 000000r 1 sta JOBRTN 000000r 1 lda HEADER 000000r 1 pha 000000r 1 lda HEADER + 1 000000r 1 pha 000000r 1 lda JOBNUM 000000r 1 asl a 000000r 1 tax 000000r 1 lda #$35 000000r 1 sta TRACK0,x 000000r 1 lda #$B0 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 jsr LAADE 000000r 1 .else 000000r 1 jsr LD58C 000000r 1 .endif 000000r 1 cmp #$02 000000r 1 pla 000000r 1 tay 000000r 1 pla 000000r 1 tax 000000r 1 bcs LA724 000000r 1 cpx HEADER 000000r 1 bne LA724 000000r 1 cpy HEADER + 1 000000r 1 bne LA724 000000r 1 lda #$47 000000r 1 .byte ASM_BIT3 000000r 1 LA724: 000000r 1 lda #MAXTRACK_SINGLESIDED + 1 000000r 1 sta MAXTRACK_ADJUSTED 000000r 1 sty HEADER + 1 000000r 1 stx HEADER 000000r 1 lda JOBNUM 000000r 1 asl a 000000r 1 tax 000000r 1 lda LFE85 000000r 1 sta TRACK0,x 000000r 1 LA736: 000000r 1 pla 000000r 1 rts 000000r 1 LA738: 000000r 1 jsr LEF3A 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA74C 000000r 1 lda #$00 000000r 1 ldy #$68 000000r 1 LA746: 000000r 1 sta L0146,y 000000r 1 dey 000000r 1 bpl LA746 000000r 1 LA74C: 000000r 1 jmp LF008 000000r 1 LA74F: 000000r 1 pha 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA75F 000000r 1 pla 000000r 1 cmp #$24 000000r 1 bcc LA760 000000r 1 sbc #$23 000000r 1 .byte ASM_BIT2 000000r 1 LA75F: 000000r 1 pla 000000r 1 LA760: 000000r 1 ldx LFED6 000000r 1 rts 000000r 1 000000r 1 LA764: 000000r 1 jsr LF005 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA771 000000r 1 lda #$24 000000r 1 .byte ASM_BIT3 000000r 1 LA771: 000000r 1 lda #MAXTRACK_DOUBLESIDED + 1 000000r 1 sta MAXTRACK_ADJUSTED 000000r 1 000000r 1 jmp LEE43 000000r 1 LA779: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA783 000000r 1 jmp LC8C6 000000r 1 LA783: 000000r 1 jmp LA40D 000000r 1 000000r 1 LA786: 000000r 1 lda VBC_PA1 000000r 1 and # ~ VBC_PA1_20 000000r 1 sta VBC_PA1 000000r 1 000000r 1 jsr LA483 000000r 1 000000r 1 ; also initialize the CIA 000000r 1 000000r 1 lda #CIA_ICR_BW_UNSET | ~ CIA_ICR_BW_SET 000000r 1 sta CIA_ICR 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 lda #CIA_CRA_B_ONESHOT 000000r 1 sta CIA_CRA 000000r 1 ; lda #CIA_CRB_B_ONESHOT ; same as CIA_CRA_B_ONESHOT, thus, it can be ommitted 000000r 1 sta CIA_CRB 000000r 1 lda #>$0006 000000r 1 sta CIA_TAHI 000000r 1 lda #<$0006 000000r 1 sta CIA_TALO 000000r 1 000000r 1 lda #CIA_CRA_B_START 000000r 1 sta CIA_CRA 000000r 1 .endif 000000r 1 000000r 1 jsr L81B2 000000r 1 jmp TestATN 000000r 1 000000r 1 FillUntil $A7B3 000000r 1 000000r 1 ProcessBus1570: 000000r 1 .if CompileDrive = DRIVE_1571_03 000000r 1 lda VBC_PAUNBUF1 000000r 1 .else 000000r 1 jsr LAA62 000000r 1 .endif 000000r 1 and #VBC_PA1_20 000000r 1 beq LA7BD 000000r 1 jmp L80CE 000000r 1 LA7BD: 000000r 1 jmp ProcessBus 000000r 1 000000r 1 PATCH_ShortReset: 000000r 1 ; this is the actual patch 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 000000r 1 ldx #= DRIVE_1571 000000r 1 lda VBC_PAUNBUF1 000000r 1 .else 000000r 1 jmp LA7CE 000000r 1 .endif 000000r 1 and #VBC_PA1_20 000000r 1 LA7CC: 000000r 1 bne LA7D7 000000r 1 LA7CE: 000000r 1 ldy #$03 000000r 1 lda #$00 000000r 1 sta (BMPNT),y 000000r 1 jmp LEEB7 000000r 1 LA7D7: 000000r 1 lda MAXTRACK_ADJUSTED 000000r 1 cmp #MAXTRACK_SINGLESIDED + 2 000000r 1 bcc LA7CE 000000r 1 ldy #$01 000000r 1 ldx #$00 000000r 1 LA7E2: 000000r 1 cpy #$12 000000r 1 beq LA81A 000000r 1 txa 000000r 1 pha 000000r 1 lda #$00 000000r 1 sta T0 000000r 1 sta T1 000000r 1 sta T2 000000r 1 lda L9409 + 34,y 000000r 1 tax 000000r 1 LA7F4: 000000r 1 sec 000000r 1 rol T0 000000r 1 rol T1 000000r 1 rol T2 000000r 1 dex 000000r 1 bne LA7F4 000000r 1 pla 000000r 1 tax 000000r 1 lda T0 000000r 1 sta L0146,x 000000r 1 lda T1 000000r 1 sta L0147,x 000000r 1 lda T2 000000r 1 sta L0148,x 000000r 1 inx 000000r 1 inx 000000r 1 inx 000000r 1 cpx #$33 000000r 1 bne LA81A 000000r 1 inx 000000r 1 inx 000000r 1 inx 000000r 1 iny 000000r 1 LA81A: 000000r 1 iny 000000r 1 cpy #$24 000000r 1 bcc LA7E2 000000r 1 jsr LEEB7 000000r 1 ldy #$03 000000r 1 lda #$80 000000r 1 sta (BMPNT),y 000000r 1 ldy #$FF 000000r 1 ldx #$22 000000r 1 LA82C: 000000r 1 lda L942C,x 000000r 1 sta (BMPNT),y 000000r 1 dey 000000r 1 dex 000000r 1 bpl LA82C 000000r 1 ldy #$EE 000000r 1 lda #$00 000000r 1 sta (BMPNT),y 000000r 1 jmp LD075 000000r 1 LA83E: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA84B 000000r 1 LA845: 000000r 1 jsr LEFCF 000000r 1 jmp LEF62 000000r 1 LA84B: 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA845 000000r 1 jsr LA4A1 000000r 1 jsr LA4E7 000000r 1 bne LA872 000000r 1 ora LEFE9,x 000000r 1 sta L0146,y 000000r 1 jsr LEF88 000000r 1 jsr LA508 000000r 1 lda TRACK 000000r 1 cmp #$35 000000r 1 beq LA873 000000r 1 lda DRVNUM 000000r 1 asl a 000000r 1 tax 000000r 1 jmp LEF7F 000000r 1 LA872: 000000r 1 sec 000000r 1 LA873: 000000r 1 rts 000000r 1 LA874: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA881 000000r 1 LA87B: 000000r 1 jsr LEFCF 000000r 1 jmp LEF96 000000r 1 LA881: 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA87B 000000r 1 jsr LA4A1 000000r 1 jsr LA4E7 000000r 1 beq LA8A8 000000r 1 eor LEFE9,x 000000r 1 sta L0146,y 000000r 1 jsr LEF88 000000r 1 jsr LA51E 000000r 1 lda TRACK 000000r 1 cmp #$35 000000r 1 beq LA8A8 000000r 1 lda DRVNUM 000000r 1 asl a 000000r 1 tax 000000r 1 jmp LEFB2 000000r 1 LA8A8: 000000r 1 rts 000000r 1 LA8A9: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA8B6 000000r 1 LA8B0: 000000r 1 jsr LF011 000000r 1 jmp LF1FD 000000r 1 LA8B6: 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA8B0 000000r 1 jsr LA4A1 000000r 1 jsr LA545 000000r 1 lda L942C,y 000000r 1 sta LSTSEC 000000r 1 LA8C8: 000000r 1 lda SECTOR 000000r 1 cmp LSTSEC 000000r 1 bcs LA8D8 000000r 1 jsr LA4E7 000000r 1 bne LA8DA 000000r 1 inc SECTOR 000000r 1 bne LA8C8 000000r 1 LA8D8: 000000r 1 lda #$00 000000r 1 LA8DA: 000000r 1 rts 000000r 1 LA8DB: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA8E8 000000r 1 LA8E2: 000000r 1 lda T0 000000r 1 pha 000000r 1 jmp LF130 000000r 1 LA8E8: 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA8E2 000000r 1 cmp #$35 000000r 1 beq LA900 000000r 1 lda T0 000000r 1 pha 000000r 1 jsr LA4A1 000000r 1 tay 000000r 1 pla 000000r 1 sta T0 000000r 1 tya 000000r 1 jmp LF138 000000r 1 LA900: 000000r 1 lda #$00 000000r 1 jmp LF138 000000r 1 LA905: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA912 000000r 1 LA90C: 000000r 1 jsr LF011 000000r 1 jmp LF1C7 000000r 1 LA912: 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA90C 000000r 1 jsr LA4A1 000000r 1 jmp LF1C9 000000r 1 LA91E: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA92B 000000r 1 LA925: 000000r 1 jsr LF011 000000r 1 jmp LF1E2 000000r 1 LA92B: 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA925 000000r 1 jsr LA4A1 000000r 1 jmp LF1E4 000000r 1 LA937: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LA941 000000r 1 LA93E: 000000r 1 jmp LF220 000000r 1 LA941: 000000r 1 lda MAXTRACK_ADJUSTED 000000r 1 cmp #MAXTRACK_SINGLESIDED + 2 000000r 1 bcc LA93E 000000r 1 lda TRACK 000000r 1 cmp #$24 000000r 1 bcc LA93E 000000r 1 jmp LA545 000000r 1 LA951: 000000r 1 sta NDBL,x 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA97E 000000r 1 lda MAXTRACK_ADJUSTED 000000r 1 cmp #MAXTRACK_SINGLESIDED + 2 000000r 1 bcc LA97E 000000r 1 jsr LA48B 000000r 1 jsr LA534 000000r 1 ldy #$22 000000r 1 lda NDBL 000000r 1 LA96D: 000000r 1 clc 000000r 1 adc (BMPNT),y 000000r 1 sta NDBL 000000r 1 bcc LA978 000000r 1 inc NDBH 000000r 1 LA978: 000000r 1 dey 000000r 1 bpl LA96D 000000r 1 jmp LA496 000000r 1 LA97E: 000000r 1 rts 000000r 1 LA97F: 000000r 1 sta RECL,x 000000r 1 sta RECH,x 000000r 1 lda #$00 000000r 1 sta LSTCHR,x 000000r 1 rts 000000r 1 LA989: 000000r 1 jsr LA40D 000000r 1 ldy #$00 000000r 1 sty JOBRTN 000000r 1 rts 000000r 1 000000r 1 emptya992: 000000r 1 FillUntil $A99D 000000r 1 000000r 1 LA99D: 000000r 1 lda #$00 000000r 1 sta a:NODRV,x 000000r 1 jmp LC1B7 000000r 1 LA9A5: 000000r 1 tya 000000r 1 sta a:NODRV,x 000000r 1 jmp LC664 000000r 1 LA9AC: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA9B6 000000r 1 jmp L815A 000000r 1 LA9B6: 000000r 1 jmp LE8D7 000000r 1 LA9B9: 000000r 1 pha 000000r 1 stx JOBNUM 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq LA9D2 000000r 1 bit BITCNT 000000r 1 bpl LA9D2 000000r 1 lda BITCNT 000000r 1 and #$7F 000000r 1 sta BITCNT 000000r 1 pla 000000r 1 tax 000000r 1 jmp L9199 000000r 1 LA9D2: 000000r 1 jmp LE60D 000000r 1 000000r 1 LA9D5: 000000r 1 pha 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 beq @LA9F4 000000r 1 bit BITCNT 000000r 1 bpl @LA9F4 000000r 1 lda BITCNT 000000r 1 and #$7F 000000r 1 sta BITCNT 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 ldx #$02 000000r 1 jsr L9228 000000r 1 lda #$00 000000r 1 sta SA 000000r 1 jsr LDAC0 000000r 1 @LA9F4: 000000r 1 pla 000000r 1 jmp LE645 000000r 1 LA9F8: 000000r 1 lda #$00 000000r 1 sta DRVST 000000r 1 lda VDC_PCR2 000000r 1 jmp LF266 000000r 1 000000r 1 READ_CMDBUF_BUT_SPECIAL_CASE_U0: 000000r 1 ; first, check if the command is "U0" 000000r 1 lda CMDBUF 000000r 1 cmp #'U' 000000r 1 bne @NoU0 ; first char is not 'U' --> read next char from command buffer 000000r 1 lda CMDBUF + 1 000000r 1 cmp #'0' 000000r 1 beq @ReturnAsc_NUL ; 2nd char is '0' --> it is 'U0' --> return ASC_NUL. 000000r 1 @NoU0: 000000r 1 ; read next char from command buffer 000000r 1 lda CMDBUF,y 000000r 1 000000r 1 .byte ASM_BIT3 000000r 1 000000r 1 @ReturnAsc_NUL: 000000r 1 lda #$00 000000r 1 rts 000000r 1 000000r 1 LAA17: 000000r 1 ldx DRVNUM 000000r 1 lda a:NODRV,x 000000r 1 rts 000000r 1 LAA1D: 000000r 1 sta WPSW,x 000000r 1 sta a:NODRV,x 000000r 1 jmp LD075 000000r 1 LAA25: 000000r 1 ldx DRVNUM 000000r 1 lda a:NODRV,x 000000r 1 jmp LF01B 000000r 1 ; ----------------- 000000r 1 000000r 1 ; before executing the U command, make sure it is not 000000r 1 ; the IRQ vector. 000000r 1 ; The 6502 would behave erratically, as the IRQ requires 000000r 1 ; the stack to contain a status register, which it will not 000000r 1 ; have in the case of a JMP (or JSR, which was used to call 000000r 1 ; us). 000000r 1 ; Thus, in this case, execute a BRK instead. 000000r 1 ; 000000r 1 Patch1570ExecutionOfUCommand: 000000r 1 000000r 1 ; compare address of U command 000000r 1 000000r 1 lda IP 000000r 1 cmp #IRQ 000000r 1 bne @NoIRQVector 000000r 1 000000r 1 ; if we reach here, it is the IRQ vector 000000r 1 ; call it via BRK 000000r 1 brk 000000r 1 nop 000000r 1 000000r 1 rts 000000r 1 000000r 1 @NoIRQVector: 000000r 1 jmp (IP) 000000r 1 ; ----------------- 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 LAA3F: 000000r 1 cmp #$02 000000r 1 bcc LAA4A 000000r 1 cmp #$0F 000000r 1 beq LAA4A 000000r 1 jmp LD36B 000000r 1 LAA4A: 000000r 1 jmp LD373 000000r 1 LAA4D: 000000r 1 sta FTNUM 000000r 1 jsr L877C 000000r 1 jsr LA989 000000r 1 pha 000000r 1 jsr L8788 000000r 1 pla 000000r 1 rts 000000r 1 LAA5B: 000000r 1 lda PATTYP 000000r 1 and #$07 000000r 1 cmp #$02 000000r 1 rts 000000r 1 LAA62: 000000r 1 lda VBC_PAUNBUF1 000000r 1 bit VBC_PA1 000000r 1 rts 000000r 1 LAA69: 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LAA73 000000r 1 jmp LEEB7 000000r 1 LAA73: 000000r 1 jmp LA7CC 000000r 1 LAA76: 000000r 1 lda #$02 000000r 1 sta VBC_T1HC1 000000r 1 rts 000000r 1 000000r 1 PATCH_INIT_CSG5710: 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 lda #$FB 000000r 1 sta CSG5710_4010 + 4 000000r 1 lda #$FE 000000r 1 sta CSG5710_4010 + 5 000000r 1 lda #$A1 000000r 1 sta CSG5710_4010 + 0 000000r 1 lda #$C2 000000r 1 sta CSG5710_4010 + 1 000000r 1 lda #$0A 000000r 1 sta CSG5710_4010 + 6 000000r 1 lda #$14 000000r 1 sta CSG5710_4010 + 7 000000r 1 lda #$02 000000r 1 sta CSG5710_4010 + 2 000000r 1 lda #$03 000000r 1 sta CSG5710_4010 + 3 000000r 1 lda #$40 000000r 1 sta L01B4 000000r 1 jmp PATCH_INIT_BC_1570_END 000000r 1 LAAAD: 000000r 1 lda L01B3 000000r 1 bne LAAB6 000000r 1 .else 000000r 1 lda L01B3 000000r 1 bne LAA84 000000r 1 jmp L8EC6 000000r 1 LAA84: 000000r 1 clc 000000r 1 rts 000000r 1 000000r 1 LAA86: 000000r 1 tay 000000r 1 cmp #$56 000000r 1 bne LAAA8 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LAA96 000000r 1 LAA93: 000000r 1 jmp L9021 000000r 1 LAA96: 000000r 1 lda CMDBUF + 4 000000r 1 cmp #$31 000000r 1 beq LAAA1 000000r 1 cmp #$30 000000r 1 bne LAA93 000000r 1 LAAA1: 000000r 1 and #$CF 000000r 1 sta L01B3 000000r 1 cli ; allow processing of job loop 000000r 1 rts 000000r 1 LAAA8: 000000r 1 cpy #$04 000000r 1 jmp L9006 000000r 1 LAAAD: 000000r 1 lda L01B3 000000r 1 bne LAAB6 000000r 1 .endif 000000r 1 lda JOBS0,y 000000r 1 .byte ASM_BIT3 000000r 1 LAAB6: 000000r 1 lda #$30 000000r 1 eor #$30 000000r 1 sta JOBS0,y 000000r 1 bne LAAC2 000000r 1 jmp L99B5 000000r 1 LAAC2: 000000r 1 jmp L944F 000000r 1 LAAC5: 000000r 1 jsr L85F9 000000r 1 lda #$20 000000r 1 bit HINIB 000000r 1 beq LAADD 000000r 1 ldy #$00 000000r 1 LAAD0: 000000r 1 lda CMDBUF + 11,y 000000r 1 sta CTRACK 000000r 1 jsr L85F9 000000r 1 iny 000000r 1 cpy MYPA 000000r 1 bne LAAD0 000000r 1 LAADD: 000000r 1 rts 000000r 1 LAADE: 000000r 1 ldx JOBNUM 000000r 1 ora #$08 000000r 1 sta JOBS0,x 000000r 1 jmp L9FB6 000000r 1 LAAE7: 000000r 1 jsr LAAED 000000r 1 jmp CommandEnd 000000r 1 LAAED: 000000r 1 jmp (IP) 000000r 1 LAAF0: 000000r 1 cmp #$03 000000r 1 bcs LAAF9 000000r 1 lda #ERRORCODE_72_DISK_FULL 000000r 1 jsr SetErrorCode 000000r 1 LAAF9: 000000r 1 lda #$01 000000r 1 rts 000000r 1 Convert_Bin_To_BCD_Patch_157x: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 000000r 1 CONVERT_BIN_TO_BCD 000000r 1 000000r 1 plp 000000r 1 jmp OutputBCDIntoBUFTABERR 000000r 1 000000r 1 LAB10: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 sta CIA_SDR 000000r 1 lda BITCNT 000000r 1 eor #$04 000000r 1 sta BITCNT 000000r 1 lda #CIA_ICR_B_SP 000000r 1 LAB1D: 000000r 1 bit CIA_ICR 000000r 1 beq LAB1D 000000r 1 plp 000000r 1 rts 000000r 1 000000r 1 LAB24: 000000r 1 lda BAM + 11 000000r 1 cmp #$25 000000r 1 bcc LAB6F 000000r 1 lda T0 000000r 1 pha 000000r 1 lda TRACK 000000r 1 pha 000000r 1 ldy #$00 000000r 1 sty TRACK 000000r 1 LAB35: 000000r 1 lda #$00 000000r 1 sta T0 000000r 1 lda #$01 000000r 1 sta BMPNT + 1 000000r 1 lda LA5DB,y 000000r 1 clc 000000r 1 adc #$46 000000r 1 sta BMPNT 000000r 1 ldy #$02 000000r 1 LAB47: 000000r 1 ldx #$07 000000r 1 LAB49: 000000r 1 lda (BMPNT),y 000000r 1 and LEFE9,x 000000r 1 beq LAB52 000000r 1 inc T0 000000r 1 LAB52: 000000r 1 dex 000000r 1 bpl LAB49 000000r 1 dey 000000r 1 bpl LAB47 000000r 1 jsr LA534 000000r 1 lda T0 000000r 1 ldy TRACK 000000r 1 sta (BMPNT),y 000000r 1 inc TRACK 000000r 1 ldy TRACK 000000r 1 cpy #$23 000000r 1 bcc LAB35 000000r 1 pla 000000r 1 sta TRACK 000000r 1 pla 000000r 1 sta T0 000000r 1 LAB6F: 000000r 1 jmp LA496 000000r 1 ; -------------- 000000r 1 000000r 1 PATCH_LAB72: 000000r 1 sta JOBRTN 000000r 1 pha 000000r 1 lda L01B6 000000r 1 beq LAB84 000000r 1 lda #$00 000000r 1 sta L01B6 000000r 1 pla 000000r 1 jmp PATCH_LAB72_END 000000r 1 ; -------------- 000000r 1 000000r 1 LAB84: 000000r 1 lda #$80 000000r 1 sta L01AF 000000r 1 pla 000000r 1 jmp LA6B1 000000r 1 ; -------------- 000000r 1 000000r 1 LAB8D: 000000r 1 jsr LA48B 000000r 1 jsr LAB24 000000r 1 jmp LA48B 000000r 1 000000r 1 PATCH_WPSW: 000000r 1 lda #$01 000000r 1 sta WPSW 000000r 1 sta L01B6 000000r 1 rts 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 .else 000000r 1 LA667_PATCH: 000000r 1 lda #$01 000000r 1 sta L01B6 000000r 1 jmp LA667 000000r 1 ; --------------------- 000000r 1 .endif 000000r 1 000000r 1 LABA6: 000000r 1 lda #$01 000000r 1 sta WPSW 000000r 1 sta L01B6 000000r 1 jmp LD042 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571CR 000000r 1 000000r 1 LABA7: 000000r 1 tay 000000r 1 cmp #$56 000000r 1 bne LABDF 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 lda VBC_PAUNBUF1 000000r 1 and #VBC_PA1_20 000000r 1 bne LABB7 000000r 1 LABB4: 000000r 1 jmp L9021 000000r 1 LABB7: 000000r 1 lda CMDBUF + 4 000000r 1 cmp #$31 000000r 1 beq LABC2 000000r 1 cmp #$30 000000r 1 bne LABB4 000000r 1 LABC2: 000000r 1 and #$CF 000000r 1 sta L01B3 000000r 1 pha 000000r 1 lda L01B4 000000r 1 and #$BF 000000r 1 sta L01B4 000000r 1 pla 000000r 1 asl a 000000r 1 asl a 000000r 1 asl a 000000r 1 asl a 000000r 1 asl a 000000r 1 asl a 000000r 1 ora L01B4 000000r 1 sta L01B4 000000r 1 cli ; allow processing of job loop 000000r 1 rts 000000r 1 LABDF: 000000r 1 cpy #$04 000000r 1 jmp L9006 000000r 1 000000r 1 LA667_PATCH: 000000r 1 lda #$01 000000r 1 sta L01B6 000000r 1 jmp LA667 000000r 1 ; --------------------- 000000r 1 000000r 1 LABEC: 000000r 1 lda #$5A 000000r 1 LABEE: 000000r 1 pha 000000r 1 jsr LAC38 000000r 1 pla 000000r 1 tay 000000r 1 bcs LAC02 000000r 1 lda WD177x_SECTOR 000000r 1 cmp CSG5710_4010 + 5 000000r 1 beq LAC0C 000000r 1 dey 000000r 1 tya 000000r 1 bne LABEE 000000r 1 LAC02: 000000r 1 ldx #$03 000000r 1 .byte ASM_BIT3 000000r 1 LAC05: 000000r 1 ldx #$09 000000r 1 stx L01B0 000000r 1 sec 000000r 1 rts 000000r 1 LAC0C: 000000r 1 ldx #$00 000000r 1 LAC0E: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAC0E 000000r 1 lda WD177x_SECTOR 000000r 1 sta STAB,x 000000r 1 inx 000000r 1 cpx #$06 000000r 1 bcc LAC0E 000000r 1 lda #$18 000000r 1 sta WD177x_TRACK 000000r 1 LAC22: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAC22 000000r 1 lda WD177x_SECTOR 000000r 1 lda WD177x_TRACK 000000r 1 and #$20 000000r 1 bne LAC05 000000r 1 ldx #$00 000000r 1 stx L01B0 000000r 1 clc 000000r 1 rts 000000r 1 LAC38: 000000r 1 lda CSG5710_5 000000r 1 and #$7F 000000r 1 sta CSG5710_5 000000r 1 lda L01B4 000000r 1 and #$20 000000r 1 asl a 000000r 1 asl a 000000r 1 ora CSG5710_5 000000r 1 sta CSG5710_5 000000r 1 lda #$00 000000r 1 sta WD177x_TRACK 000000r 1 lda CSG5710_4010 + 0 000000r 1 sta CSG5710_4 000000r 1 lda CSG5710_4010 + 6 000000r 1 sta WD177x_DATA 000000r 1 lda #$10 000000r 1 sta WD177x_TRACK 000000r 1 lda WD177x_SECTOR 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 ldx #$00 000000r 1 ldy #$32 000000r 1 LAC6D: 000000r 1 bit WD177x_TRACK 000000r 1 bvs LAC7A 000000r 1 dex 000000r 1 bne LAC6D 000000r 1 dey 000000r 1 bne LAC6D 000000r 1 sec 000000r 1 rts 000000r 1 LAC7A: 000000r 1 ldy #$00 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 lda WD177x_SECTOR 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 nop 000000r 1 LAC8B: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAC8B 000000r 1 lda WD177x_SECTOR 000000r 1 iny 000000r 1 bvs LAC8B 000000r 1 cpy #$03 000000r 1 bne LAC38 000000r 1 clc 000000r 1 rts 000000r 1 LAC9C: 000000r 1 lda #$B4 000000r 1 LAC9E: 000000r 1 pha 000000r 1 jsr LABEC 000000r 1 pla 000000r 1 tay 000000r 1 php 000000r 1 lda STAB + 2 000000r 1 cmp SECTR 000000r 1 beq LACB7 000000r 1 plp 000000r 1 dey 000000r 1 tya 000000r 1 bne LAC9E 000000r 1 ldx #$02 000000r 1 stx L01B0 000000r 1 sec 000000r 1 rts 000000r 1 LACB7: 000000r 1 plp 000000r 1 rts 000000r 1 LACB9: 000000r 1 ldx #$16 000000r 1 LACBB: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LACBB 000000r 1 lda WD177x_SECTOR 000000r 1 dex 000000r 1 bne LACBB 000000r 1 rts 000000r 1 LACC7: 000000r 1 lda REVCNT 000000r 1 asl a 000000r 1 sta TMP 000000r 1 LACCC: 000000r 1 jsr L8EC6 000000r 1 jsr LAC9C 000000r 1 bcs LAD21 000000r 1 jsr LAC38 000000r 1 bcs LAD21 000000r 1 ldy #$00 000000r 1 ldx WORK 000000r 1 LACDD: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LACDD 000000r 1 lda WD177x_SECTOR 000000r 1 cmp (BUFPNT),y 000000r 1 bne LAD21 000000r 1 cpy RLINDX 000000r 1 beq LACF1 000000r 1 iny 000000r 1 bne LACDD 000000r 1 LACF1: 000000r 1 iny 000000r 1 dex 000000r 1 beq LACFA 000000r 1 inc BUFPNT + 1 000000r 1 jmp LACDD 000000r 1 LACFA: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LACFA 000000r 1 lda WD177x_SECTOR 000000r 1 LAD02: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAD02 000000r 1 lda WD177x_SECTOR 000000r 1 lda #$18 000000r 1 sta WD177x_TRACK 000000r 1 LAD0F: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAD0F 000000r 1 lda WD177x_SECTOR 000000r 1 lda WD177x_TRACK 000000r 1 and #$20 000000r 1 beq LAD28 000000r 1 ldx #$05 000000r 1 .byte ASM_BIT3 000000r 1 LAD21: 000000r 1 ldx #$07 000000r 1 dec TMP 000000r 1 bne LACCC 000000r 1 .byte ASM_BIT3 000000r 1 LAD28: 000000r 1 ldx #$00 000000r 1 stx L01B0 000000r 1 rts 000000r 1 LAD2E: 000000r 1 lda REVCNT 000000r 1 asl a 000000r 1 sta TMP 000000r 1 LAD33: 000000r 1 jsr LAC9C 000000r 1 bcs LAD86 000000r 1 jsr LAC38 000000r 1 bcs LAD86 000000r 1 ldy #$00 000000r 1 ldx WORK 000000r 1 LAD41: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAD41 000000r 1 lda WD177x_SECTOR 000000r 1 cmp CMDBUF + 10 000000r 1 bne LAD86 000000r 1 cpy RLINDX 000000r 1 beq LAD56 000000r 1 iny 000000r 1 bne LAD41 000000r 1 LAD56: 000000r 1 iny 000000r 1 dex 000000r 1 beq LAD5F 000000r 1 inc BUFPNT + 1 000000r 1 jmp LAD41 000000r 1 LAD5F: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAD5F 000000r 1 lda WD177x_SECTOR 000000r 1 LAD67: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAD67 000000r 1 lda WD177x_SECTOR 000000r 1 lda #$18 000000r 1 sta WD177x_TRACK 000000r 1 LAD74: 000000r 1 bit WD177x_TRACK 000000r 1 bpl LAD74 000000r 1 lda WD177x_SECTOR 000000r 1 lda WD177x_TRACK 000000r 1 and #$20 000000r 1 beq LAD8D 000000r 1 ldx #$05 000000r 1 .byte ASM_BIT3 000000r 1 LAD86: 000000r 1 ldx #$07 000000r 1 dec TMP 000000r 1 bne LAD33 000000r 1 .byte ASM_BIT3 000000r 1 LAD8D: 000000r 1 ldx #$00 000000r 1 stx L01B0 000000r 1 rts 000000r 1 LAD93: 000000r 1 php 000000r 1 sei ; disallow interrupts --> blocking job loop 000000r 1 jsr L89EF 000000r 1 bit HINIB 000000r 1 bpl LADA4 000000r 1 lda CMDBUF + 3 000000r 1 sta NMIFLG 000000r 1 jsr L87BA 000000r 1 LADA4: 000000r 1 lda #$00 000000r 1 sta MYPA 000000r 1 jsr L89E8 000000r 1 ldx L01B0 000000r 1 cpx #$02 000000r 1 bcs LADD1 000000r 1 lda STAB + 2 000000r 1 sta ICMD 000000r 1 LADB6: 000000r 1 jsr L89E8 000000r 1 lda STAB + 2 000000r 1 ldy MYPA 000000r 1 sta CMDBUF + 11,y 000000r 1 inc MYPA 000000r 1 cpy #$1F 000000r 1 bcs LADD1 000000r 1 cmp ICMD 000000r 1 bne LADB6 000000r 1 lda STAB 000000r 1 sta NMIFLG 000000r 1 ldx #$00 000000r 1 .byte ASM_BIT3 000000r 1 LADD1: 000000r 1 ldx #$02 000000r 1 stx L01B0 000000r 1 plp 000000r 1 rts 000000r 1 .endif 000000r 1 .elseif CompileDrive >= DRIVE_1571 000000r 1 .else 000000r 1 LAA3F: 000000r 1 cmp #$02 000000r 1 bcc LAA4A 000000r 1 cmp #$0F 000000r 1 beq LAA4A 000000r 1 jmp LD36B 000000r 1 LAA4A: 000000r 1 jmp LD373 000000r 1 LAA4D: 000000r 1 sta FTNUM 000000r 1 jsr L877C 000000r 1 jsr LA989 000000r 1 pha 000000r 1 jsr L8788 000000r 1 pla 000000r 1 rts 000000r 1 LAA5B: 000000r 1 lda PATTYP 000000r 1 and #$07 000000r 1 cmp #$02 000000r 1 rts 000000r 1 LAA62: 000000r 1 lda VBC_PAUNBUF1 000000r 1 bit VBC_PA1 000000r 1 rts 000000r 1 .endif 000000r 1 000000r 1 FillUntil $BF00 000000r 1 000000r 1 jmp L9D88 000000r 1 jmp L9DDE 000000r 1 jmp LF2B0 000000r 1 jmp L92BA 000000r 1 jmp LF393 000000r 1 jmp L93D1 000000r 1 jmp LF969 000000r 1 jmp L99B5 000000r 1 jmp LFE00 000000r 1 jmp LF934 000000r 1 jmp LF556 000000r 1 jmp L9754 000000r 1 jmp LF8E0 000000r 1 jmp L9965 000000r 1 jmp LF5E9 000000r 1 jmp LF7E6 000000r 1 jmp L98D9 000000r 1 jmp LA483 000000r 1 jmp LFEF3 000000r 1 jmp LA47E 000000r 1 jmp LF005 000000r 1 jmp LF0D1 000000r 1 jmp ParseCommandBufferAndExecuteCommand 000000r 1 jmp SearchInCmdline 000000r 1 jmp LC2B3 000000r 1 jmp LC2DC 000000r 1 jmp L86E6 000000r 1 jmp L8764 000000r 1 jmp L8770 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 lda L808E 000000r 1 .else 000000r 1 jmp L808E 000000r 1 .endif 000000r 1 jmp LCF1E 000000r 1 jmp LD7B4 000000r 1 jmp LDAC0 000000r 1 jmp LE60A 000000r 1 jmp L9080 000000r 1 jmp L924E 000000r 1 jmp LF259 000000r 1 jmp LF99C 000000r 1 jmp L99CA 000000r 1 ; ------------ 000000r 1 000000r 1 ; @@@ TODO This is no routine, what do they want here? 000000r 1 000000r 1 .if CompileDrive >= DRIVE_1571_05 000000r 1 lda $FE95 000000r 1 .else 000000r 1 jmp $FE95 000000r 1 .endif 000000r 1 000000r 1 emptybf78: 000000r 1 000000r 1 FillUntil $bf96 000000r 1 .byte $C8,$86 000000r 1 FillUntil $C000 000000r 1 000000r 1 .else 000000r 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 AA AA AA AA FillUntil $C100 00C005 1 AA AA AA AA 00C009 1 AA AA AA AA 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 jmp LA99D 00C1B3 1 FillNOP 1 00C1B3 1 .elseif CompileDrive >= DRIVE_1541C_02 00C1B3 1 jmp LFFB8 00C1B3 1 FillNOP 1 00C1B3 1 .else 00C1B3 1 A9 00 lda #$00 00C1B5 1 95 FF 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 jmp LA9D5 00C1CE 1 ; --- contains jmp LE645 at the end 00C1CE 1 .else 00C1CE 1 4C 45 E6 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 jsr READ_CMDBUF_BUT_SPECIAL_CASE_U0 00C2BA 1 .else 00C2BA 1 B9 00 02 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 jsr READ_CMDBUF_BUT_SPECIAL_CASE_U0 00C2C2 1 .else 00C2C2 1 B9 00 02 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 jmp LA9A5 00C661 1 .elseif CompileDrive >= DRIVE_1541C_02 00C661 1 jmp LFFC0 00C661 1 .else 00C661 1 98 tya 00C662 1 95 FF 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 jmp LAA17 00C66B 1 .elseif CompileDrive >= DRIVE_1541C_02 00C66B 1 jmp LFFAC 00C66B 1 .else 00C66B 1 B5 FF lda NODRV,x 00C66D 1 60 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 jmp U0CommandPatch157x 00CB63 1 ; ------------------------- 00CB63 1 00CB63 1 FillNOP 6 00CB63 1 00CB63 1 .else 00CB63 1 00CB63 1 A9 EA lda #AddressesUxCommands ; into the location 00CB69 1 85 6C sta USRJMP + 1 00CB6B 1 60 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 jmp Patch1570ExecutionOfUCommand 00CB81 1 .else 00CB81 1 ; the 154x and 2031 do not care and execute everything. 00CB81 1 6C 75 00 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 jsr LFFAE 00CD91 1 .elseif CompileDrive >= DRIVE_1541C_02 00CD91 1 jsr LC024 00CD91 1 .else 00CD91 1 20 EE D3 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 jmp LAA1D 00D071 1 FillNOP 1 00D071 1 .elseif CompileDrive >= DRIVE_1541C_02 00D071 1 jmp LFFC7 00D071 1 FillNOP 1 00D071 1 .else 00D071 1 95 1C sta WPSW,x 00D073 1 95 FF 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 jmp LAA3F 00D367 1 FillNOP 1 00D367 1 .elseif CompileDrive >= DRIVE_1541C_02 00D367 1 jmp LFF91 00D367 1 FillNOP 1 00D367 1 .else 00D367 1 C9 02 cmp #$02 00D369 1 90 08 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 jsr LFFA1 00D610 1 .elseif CompileDrive = DRIVE_1541C_02 00D610 1 jsr LFF84 00D610 1 .else 00D610 1 20 76 D6 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 jsr LFFA6 00D628 1 .elseif CompileDrive = DRIVE_1541C_02 00D628 1 jsr LFF89 00D628 1 .else 00D628 1 20 76 D6 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 jsr L9FB6 00D651 1 FillNOP 1 00D651 1 .else 00D651 1 B5 00 lda JOBS0,x 00D653 1 30 FC 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 jsr L9FB6 00D6B9 1 FillNOP 1 00D6B9 1 .else 00D6B9 1 B5 00 lda JOBS0,x 00D6BB 1 30 FC 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 bmi LDCC3 00DCBB 1 .endif 00DCBB 1 A8 tay 00DCBC 1 A9 02 lda #$02 00DCBE 1 99 99 00 sta BUFTAB0,y 00DCC1 1 LDCC3: 00DCC1 1 B5 AE lda BUF1,x 00DCC3 1 09 80 ora #$80 00DCC5 1 95 AE sta BUF1,x 00DCC7 1 0A asl a 00DCC8 1 .if CompileDrive >= DRIVE_1570 .OR CompileDrive >= DRIVE_1541C_02 00DCC8 1 bmi LDCD2 00DCC8 1 .endif 00DCC8 1 A8 tay 00DCC9 1 A9 02 lda #$02 00DCCB 1 99 99 00 sta BUFTAB0,y 00DCCE 1 LDCD2: 00DCCE 1 A9 00 lda #$00 00DCD0 1 95 B5 sta RECL,x 00DCD2 1 .if CompileDrive >= DRIVE_1570 00DCD2 1 jmp LA97F 00DCD2 1 FillNOP 1 00DCD2 1 .elseif CompileDrive >= DRIVE_1541C_02 00DCD2 1 jmp LC029 00DCD2 1 FillNOP 1 00DCD2 1 .else 00DCD2 1 95 BB sta RECH,x 00DCD4 1 A9 00 lda #$00 00DCD6 1 9D 44 02 sta LSTCHR,x 00DCD9 1 60 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 htasc_floppy_error "CBM DOS V3.0 1570" 00E5B7 1 .elseif CompileDrive >= DRIVE_1541 00E5B7 1 C3 42 4D 20 htasc_floppy_error "CBM DOS V2.6 1541" 00E5BB 1 44 4F 53 20 00E5BF 1 56 32 2E 36 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 jmp LA9B9 00E60A 1 .else 00E60A 1 48 pha 00E60B 1 86 F9 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 FillNOP 3 00E683 1 .elseif CompileDrive >= DRIVE_1540 00E683 1 20 4E EA 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 FillNOP 3 00E68B 1 .elseif CompileDrive >= DRIVE_1540 00E68B 1 20 4E EA 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 jmp MainLoopEntry1570 00E698 1 ; -------------------------- 00E698 1 .else 00E698 1 4C E7 EB 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 rts 00E780 1 FillNOP 33 00E780 1 rts 00E780 1 .elseif CompileDrive >= DRIVE_1540 00E780 1 AD 00 18 lda VBC_PB1 00E783 1 AA tax 00E784 1 29 04 and #VBC_PB1_1540_CLOCKIN 00E786 1 F0 F7 beq LE77F 00E788 1 8A txa 00E789 1 29 01 and #VBC_PB1_1540_DATAIN 00E78B 1 F0 F2 beq LE77F 00E78D 1 58 cli ; allow processing of job loop 00E78E 1 LE78E: 00E78E 1 AD 00 18 lda VBC_PB1 00E791 1 29 05 and #VBC_PB1_1540_DATAIN | VBC_PB1_1540_CLOCKIN 00E793 1 D0 F9 bne LE78E 00E795 1 EE 78 02 inc F2CNT 00E798 1 EE 74 02 inc CMDSIZ 00E79B 1 A9 2A lda #$2A 00E79D 1 8D 00 02 sta CMDBUF 00E7A0 1 4C A8 E7 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 jmp LA5FE 00E7A3 1 FillNOP 2 00E7A3 1 .else 00E7A3 1 A9 8D lda #$8D 00E7A5 1 20 68 C2 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 jmp MainLoopEntry1570 00E8EA 1 ; -------------------------- 00E8EA 1 .else 00E8EA 1 4C E7 EB 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 jmp LFF20 00E9DC 1 .else 00E9DC 1 8D 05 18 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 eor #VBC_PB1_1540_DATAIN 00EA0E 1 lsr a 00EA0E 1 and #VBC_PB1_1540_CLOCKIN / 2 00EA0E 1 bne @LEA0B 00EA0E 1 FillNOP 3 00EA0E 1 .else 00EA0E 1 29 04 and #VBC_PB1_1540_CLOCKIN 00EA10 1 D0 F9 bne @LEA0B 00EA12 1 AD 00 18 lda VBC_PB1 00EA15 1 49 01 eor #VBC_PB1_1540_DATAIN 00EA17 1 4A 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 jmp MainLoopEntry1570 00EA53 1 ; -------------------------- 00EA53 1 .else 00EA53 1 4C E7 EB 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 jmp ProcessBus1570 00EA68 1 .elseif CompileDrive >= DRIVE_1541C_02 00EA68 1 jmp Patch_ClearPALatch_ProcessBus 00EA68 1 .else 00EA68 1 4C 5B E8 jmp ProcessBus 00EA6B 1 .endif 00EA6B 1 00EA6B 1 @LEA6B: 00EA6B 1 00EA6B 1 .if CompileDrive >= DRIVE_1570 00EA6B 1 jmp LA9AC 00EA6B 1 .else 00EA6B 1 4C D7 E8 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 FF 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 jmp PATCH_INIT_BC ; set the DDR of port A, as well as DDR of port B 00EAA4 1 ; (more patches for 1570/1571, and even more for 1571CR) 00EAA4 1 .else 00EAA4 1 8E 03 18 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 ldx #$80 ; for 1570 and 1571 before -05, start with $8000 00EACB 1 ; BUG: This is wrong, as $8000-$80FF is not included in the checksum this way! 00EACB 1 ; Note the "inc IP + 1" at @NextPage below, which skips $8000-$80FF. 00EACB 1 .else 00EACB 1 ; here, X == 0 already ; for 2031/1540/1541, start with $0000, going backwards! 00EACB 1 .endif 00EACB 1 86 76 stx IP + 1 ; set the high byte 00EACD 1 00EACD 1 .if CompileDrive >= DRIVE_1571_05 00EACD 1 inx ; X = $80 for 1571-05 ROMs and later. 00EACD 1 ; X is the number of pages of which to build the checksum 00EACD 1 ; For older 1570/1571 ROMs, it is already set this way 00EACD 1 .endif 00EACD 1 00EACD 1 A9 00 lda #$00 ; set the low byte of the start address 00EACF 1 85 75 sta IP 00EAD1 1 00EAD1 1 .if CompileDrive >= DRIVE_1570 00EAD1 1 ldy #$2000 ; number of pages of which to build the checksum 00EAD4 1 .endif 00EAD4 1 00EAD4 1 18 clc 00EAD5 1 00EAD5 1 @NextPage: 00EAD5 1 00EAD5 1 .if CompileDrive >= DRIVE_1570 00EAD5 1 ; 1570 and newer count forwards, pagewise: 00EAD5 1 00EAD5 1 inc IP + 1 00EAD5 1 .else 00EAD5 1 ; 2031/1540/1541 count backwards, pagewise: 00EAD5 1 C6 76 dec IP + 1 00EAD7 1 .endif 00EAD7 1 00EAD7 1 @AddNextValue: 00EAD7 1 71 75 adc (IP),y ; add the current value to the checksum 00EAD9 1 C8 iny ; proceed to the next value 00EADA 1 D0 FB bne @AddNextValue ; add that, too, until the page is completely processed 00EADC 1 00EADC 1 CA dex ; are there still pages to check? 00EADD 1 D0 F6 bne @NextPage ; yes, proceed to next page 00EADF 1 00EADF 1 .if CompileDrive >= DRIVE_1570 00EADF 1 adc #$FF ; add -1 and carry 00EADF 1 sta IP + 1 ; should be zero; in this case, set IP + 1 to zero. 00EADF 1 ; (if not zero, this is not a problem, as we will go into an endless loop, anyway) 00EADF 1 .else 00EADF 1 69 00 adc #$00 ; add carry 00EAE1 1 AA tax ; set X = $E0 (1st run) or $C0 (2nd run), if checksum is correct 00EAE2 1 ; (if not correct, this is not a problem, as we will go into an endless loop, anyway) 00EAE2 1 C5 76 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 FillNOP 4 00EAE6 1 .else 00EAE6 1 E0 C0 cpx #>LC000 ; check if we reached $C000 in our tests 00EAE8 1 D0 DF 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 jmp PATCH_ShortReset ; add a SEI before the next commands 00EB22 1 .else 00EB22 1 A2 45 ldx #= DRIVE_1570 00EB2D 1 lda #VIA_PCR_B_CA1_INPUT_POS_EDGE | VIA_PCR_B_CA2_INPUT_NEG 00EB2D 1 .else 00EB2D 1 A9 01 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 jsr LFF82 00EBC2 1 .elseif CompileDrive >= DRIVE_1541C_01 .AND CompileDrive <> DRIVE_1541C_03 00EBC2 1 jsr LFF6F 00EBC2 1 .else 00EBC2 1 20 59 F2 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 lda #$06 00EBCD 1 .else 00EBCD 1 A9 0A 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 lda #0 00EBDA 1 sta VBC_PB1 00EBDA 1 00EBDA 1 ; now, set the DDR to mark the output lines DATAOUT, CLOCKOUT and ATNA 00EBDA 1 lda #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA 00EBDA 1 sta VBC_DDRB1 00EBDA 1 00EBDA 1 .elseif CompileDrive >= DRIVE_1540 00EBDA 1 00EBDA 1 ; the 1540 and 1541 up to 1541-05 made a small mistake in that 00EBDA 1 ; they first initialize DDRB, and then they initialize PB. 00EBDA 1 ; This can lead to some small signal on the IEC bus which can be 00EBDA 1 ; problematic. 00EBDA 1 ; 00EBDA 1 ; Otherwise, they do exactly the same initialization 00EBDA 1 ; as the 1541-05 and later 00EBDA 1 ; 00EBDA 1 A9 1A lda #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA 00EBDC 1 8D 02 18 sta VBC_DDRB1 00EBDF 1 00EBDF 1 A9 00 lda #0 00EBE1 1 8D 00 18 sta VBC_PB1 00EBE4 1 00EBE4 1 .endif 00EBE4 1 00EBE4 1 .if CompileDrive >= DRIVE_1570 00EBE4 1 jsr LA786 ; @@@ TODO 00EBE4 1 .else 00EBE4 1 20 80 E7 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 FillNOP 2 00EBFA 1 jmp Patch1570CallToParseCommandBufferAndExecuteCommand 00EBFA 1 .else 00EBFA 1 85 67 sta NMIFLG ; @@@ TODO WHY? Seems unnecessary to me (and has been left out for 1570 and above) 00EBFC 1 20 46 C1 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 jmp ProcessBus1570 ; for 1570 and above, check which bus routines have to be used 00EC04 1 .elseif CompileDrive >= DRIVE_1541C_02 00EC04 1 jmp Patch_ClearPALatch_ProcessBus ; like earlier drives, but make sure to "unlatch" the PA content to get current values upon read 00EC04 1 .else 00EC04 1 4C 5B E8 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 jsr LFF9C 00EE1D 1 .elseif CompileDrive >= DRIVE_1541C_02 00EE1D 1 jsr LFF7F 00EE1D 1 .else 00EE1D 1 20 00 C1 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 jsr LFF2F 00EE3D 1 .else 00EE3D 1 20 C6 C8 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 jsr LA7C7 00EE56 1 .else 00EE56 1 20 B7 EE 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 jmp LAA25 00F017 1 FillNOP 1 00F017 1 .elseif CompileDrive >= DRIVE_1541C_02 00F017 1 jmp LFFB0 00F017 1 FillNOP 1 00F017 1 .else 00F017 1 A6 7F ldx DRVNUM 00F019 1 B5 FF 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 jmp LA9F8 00F263 1 .else 00F263 1 AD 0C 1C 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 lda #$20 00F279 1 .else 00F279 1 A9 3A 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 08 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 lda #$7D 00F98A 1 .else 00F98A 1 A9 3C 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 jmp LA62B 00F997 1 FillNOP 2 00F997 1 .else 00F997 1 A9 FF lda #$FF 00F999 1 85 48 sta ACLTIM 00F99B 1 60 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 jmp LA634 00F9AB 1 FillNOP 3 00F9AB 1 .else 00F9AB 1 F0 04 beq LF9B1 00F9AD 1 A9 01 lda #$01 00F9AF 1 85 1C 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 dec GCRERR 00F9E8 1 bne LF9FA 00F9E8 1 nop 00F9E8 1 jsr L8770 00F9E8 1 .else 00F9E8 1 AD 00 1C lda VDC_PB2 00F9EB 1 29 FB and # ~ VDC_PB2_DRIVE0MOTOR 00F9ED 1 8D 00 1C 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 jmp LFF45 00FA32 1 .else 00FA32 1 jmp LFF36 00FA32 1 .endif 00FA32 1 FillNOP 3 00FA32 1 LFA38: 00FA32 1 jmp LFA69 00FA32 1 00FA32 1 .else 00FA32 1 00FA32 1 E6 4A inc STEPS 00FA34 1 AE 00 1C ldx VDC_PB2 00FA37 1 CA dex 00FA38 1 4C 69 FA 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 08 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 jmp (VIRQJOB1570) 00FE67 1 .else 00FE67 1 48 pha 00FE68 1 8A txa 00FE69 1 48 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 FD .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 stx VBC_DDRA1 ; set the DDR of the port A 00FF10 1 00FF10 1 ; set DATA OUT, reset CLOCK OUT and ATNA 00FF10 1 lda #VBC_PB1_1540_DATAOUT 00FF10 1 .if CompileDrive >= DRIVE_1570 00FF10 1 jmp PATCH_INIT_BC_1570 00FF10 1 .else 00FF10 1 sta VBC_PB1 00FF10 1 .endif 00FF10 1 PATCH_INIT_BC_1570_END: 00FF10 1 lda #VBC_PB1_1540_DATAOUT | VBC_PB1_1540_CLOCKOUT | VBC_PB1_1540_ATNA 00FF10 1 sta VBC_DDRB1 00FF10 1 jmp PATCH_INIT_BC_END 00FF10 1 00FF10 1 LFF20: 00FF10 1 lda VBC_PB1 00FF10 1 and #VBC_PB1_1540_DATAIN 00FF10 1 bne LFF20 00FF10 1 lda #>$0100 00FF10 1 sta VBC_T1HC1 00FF10 1 jmp LE9DF 00FF10 1 .endif 00FF10 1 00FF10 1 LFF2F: 00FF10 1 .if CompileDrive = DRIVE_1541_06AA 00FF10 1 lda #$FF 00FF10 1 sta FTNUM 00FF10 1 jmp LC8C6 00FF10 1 .endif 00FF10 1 00FF10 1 .if CompileDrive >= DRIVE_1541C_01 00FF10 1 lda #$FF 00FF10 1 sta FTNUM 00FF10 1 00FF10 1 .if CompileDrive >= DRIVE_1570 00FF10 1 lda VBC_PAUNBUF1 00FF10 1 and #VBC_PA1_20 00FF10 1 bne LFF3D 00FF10 1 lda #$24 00FF10 1 .byte ASM_BIT3 00FF10 1 LFF3D: 00FF10 1 lda #MAXTRACK_DOUBLESIDED + 1 00FF10 1 sta MAXTRACK_ADJUSTED 00FF10 1 jmp LA779 00FF10 1 LFF45: 00FF10 1 tya 00FF10 1 pha 00FF10 1 ldy #$64 00FF10 1 LFF49: 00FF10 1 lda VBC_PAUNBUF1 00FF10 1 ror a 00FF10 1 php 00FF10 1 lda VBC_PAUNBUF1 00FF10 1 ror a 00FF10 1 ror a 00FF10 1 plp 00FF10 1 and #$80 00FF10 1 bcc LFF5C 00FF10 1 bpl LFF77 00FF10 1 bmi LFF5E 00FF10 1 LFF5C: 00FF10 1 bmi LFF77 00FF10 1 LFF5E: 00FF10 1 dey 00FF10 1 bne LFF49 00FF10 1 bcs LFF77 00FF10 1 lda VDC_PB2 00FF10 1 and #VDC_PB2_STEPPER 00FF10 1 bne LFF77 00FF10 1 lda ADRSED 00FF10 1 bne LFF77 00FF10 1 pla 00FF10 1 tay 00FF10 1 lda #$00 00FF10 1 sta STEPS 00FF10 1 jmp LFABE 00FF10 1 LFF77: 00FF10 1 pla 00FF10 1 tay 00FF10 1 inc STEPS 00FF10 1 ldx VDC_PB2 00FF10 1 dex 00FF10 1 jmp LFA38 00FF10 1 00FF10 1 LFF82: 00FF10 1 jsr LF259 00FF10 1 lda #$05 00FF10 1 sta BYTE 00FF10 1 lda #$88 00FF10 1 sta VIRQJOB1570 00FF10 1 lda #$9D 00FF10 1 sta VIRQJOB1570 + 1 00FF10 1 lda #MAXTRACK_SINGLESIDED + 1 00FF10 1 sta MAXTRACK_ADJUSTED 00FF10 1 clc 00FF10 1 jmp L93F3 00FF10 1 ; ------------------- 00FF10 1 00FF10 1 LFF9C: 00FF10 1 sta NODRV 00FF10 1 jmp LC100 00FF10 1 LFFA1: 00FF10 1 sta ADRSED 00FF10 1 jmp LD676 00FF10 1 ; ------------ 00FF10 1 00FF10 1 LFFA6: 00FF10 1 jsr LD676 00FF10 1 lda #$00 00FF10 1 sta ADRSED 00FF10 1 rts 00FF10 1 LFFAE: 00FF10 1 ldy LINDX 00FF10 1 jmp LD3DE 00FF10 1 00FF10 1 .else 00FF10 1 jmp LC8C6 00FF10 1 .if CompileDrive <> DRIVE_1541C_03 00FF10 1 LFF36: 00FF10 1 txa 00FF10 1 pha 00FF10 1 tya 00FF10 1 pha 00FF10 1 ldx #$01 00FF10 1 LFF3C: 00FF10 1 ldy #$64 00FF10 1 00FF10 1 LFF3E: 00FF10 1 lda VBC_PAUNBUF1 00FF10 1 cmp VBC_PAUNBUF1 00FF10 1 bne LFF62 00FF10 1 dey 00FF10 1 bne LFF3E 00FF10 1 dex 00FF10 1 bne LFF3C 00FF10 1 and #VBC_PA1_01 00FF10 1 beq LFF62 00FF10 1 lda VDC_PB2 00FF10 1 and #VDC_PB2_STEPPER 00FF10 1 bne LFF62 00FF10 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FF10 1 lda ADRSED 00FF10 1 bne LFF62 00FF10 1 .endif 00FF10 1 pla 00FF10 1 tay 00FF10 1 pla 00FF10 1 tax 00FF10 1 lda #$00 00FF10 1 sta STEPS 00FF10 1 jmp LFABE 00FF10 1 LFF62: 00FF10 1 pla 00FF10 1 tay 00FF10 1 pla 00FF10 1 tax 00FF10 1 inc STEPS 00FF10 1 ldx VDC_PB2 00FF10 1 dex 00FF10 1 jmp LFA38 00FF10 1 LFF6F: 00FF10 1 jsr LF259 00FF10 1 lda #$01 00FF10 1 sta TRACK0 00FF10 1 lda #$C0 00FF10 1 sta JOBS0 00FF10 1 rts 00FF10 1 ; ------------ 00FF10 1 00FF10 1 .endif 00FF10 1 00FF10 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FF10 1 00FF10 1 LFF7F: 00FF10 1 sta NODRV 00FF10 1 jmp LC100 00FF10 1 .if CompileDrive <> DRIVE_1541C_03 00FF10 1 LFF84: 00FF10 1 sta ADRSED 00FF10 1 jmp LD676 00FF10 1 LFF89: 00FF10 1 jsr LD676 00FF10 1 lda #$00 00FF10 1 sta ADRSED 00FF10 1 rts 00FF10 1 .endif 00FF10 1 LFF91: 00FF10 1 cmp #$02 00FF10 1 bcc LFF9C 00FF10 1 cmp #$0F 00FF10 1 beq LFF9C 00FF10 1 jmp LD36B 00FF10 1 LFF9C: 00FF10 1 jmp LD373 00FF10 1 00FF10 1 PATCH_ShortReset: 00FF10 1 sei ; disallow interrupts --> blocking job loop 00FF10 1 00FF10 1 ldx #= DRIVE_1541_02) .AND (CompileDrive <= DRIVE_1541_03) 00FF10 1 FillUntil $FFE2 00FF10 1 00FF10 1 .byte "RSR" 00FF10 1 .endif 00FF10 1 00FF10 1 .if CompileDrive >= DRIVE_1541C_02 .AND CompileDrive < DRIVE_1570 00FF10 1 00FF10 1 FillUntil $FFE5 00FF10 1 .byte DRIVE_CHKSUM_FFE5 00FF10 1 00FF10 1 .endif 00FF10 1 00FF10 1 AA AA AA AA FillUntil $FFE6 00FF14 1 AA AA AA AA 00FF18 1 AA AA AA AA 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