     $E207/57863:   Perform [P] - Position command

    E207: 20 B3 C2  JSR $C2B3       ; verify lines
    E20A: AD 01 02  LDA $0201       ; secondary address
    E20D: 85 83     STA $83
    E20F: 20 EB D0  JSR $D0EB       ; find channel number
    E212: 90 05     BCC $E219       ; found?
    E214: A9 70     LDA #$70
    E216: 20 C8 C1  JSR $C1C8       ; 70, 'no block'

    Jump from $E212:

    E219: A9 A0     LDA #$A0
    E21B: 20 9D DD  JSR $DD9D       ; erase bits 6 & 7
    E21E: 20 25 D1  JSR $D125       ; verify if 'REL'-file
    E221: F0 05     BEQ $E228       ; yes
    E223: A9 64     LDA #$64
    E225: 20 C8 C1  JSR $C1C8       ; 64, 'file type mismatch'

    Jump from $E221:

    E228: B5 EC     LDA $EC,X
    E22A: 29 01     AND #$01
    E22C: 85 7F     STA $7F         ; drive number
    E22E: AD 02 02  LDA $0202       ; record number lo
    E231: 95 B5     STA $B5,X
    E233: AD 03 02  LDA $0203       ; record number hi
    E236: 95 BB     STA $BB,X
    E238: A6 82     LDX $82         ; channel number
    E23A: A9 89     LDA #$89
    E23C: 95 F2     STA $F2,X       ; READ and WRITE flag
    E23E: AD 04 02  LDA $0204       ; byte-pointer
    E241: F0 10     BEQ $E253       ; zero?
    E243: 38        SEC
    E244: E9 01     SBC #$01
    E246: F0 0B     BEQ $E253
    E248: D5 C7     CMP $C7,X       ; compare with record length
    E24A: 90 07     BCC $E253
    E24C: A9 51     LDA #$51
    E24E: 8D 6C 02  STA $026C       ; 51, 'overflow in record'
    E251: A9 00     LDA #$00

    Jump from $E241, $E246, $E24A:

    E253: 85 D4     STA $D4
    E255: 20 0E CE  JSR $CE0E       ; calculate pointer in rel-file
    E258: 20 F8 DE  JSR $DEF8       ; and read appropriate side-sector
    E25B: 50 08     BVC $E265       ; does block exist?
    E25D: A9 80     LDA #$80
    E25F: 20 97 DD  JSR $DD97       ; set bit 7
    E262: 4C 5E E1  JMP $E15E       ; and 50, 'record not present'

    Jump from $E25B:

    E265: 20 75 E2  JSR $E275
    E268: A9 80     LDA #$80
    E26A: 20 A6 DD  JSR $DDA6       ; test bit 7
    E26D: F0 03     BEQ $E272       ; not set
    E26F: 4C 5E E1  JMP $E15E       ; 50, 'record not present'

    Jump from $E26D:

    E272: 4C 94 C1  JMP $C194       ; done

    Jump from $E265, $E441:

    E275: 20 9C E2  JSR $E29C
    E278: A5 D7     LDA $D7         ; pointer in rel-file
    E27A: 20 C8 D4  JSR $D4C8       ; set buffer pointer
    E27D: A6 82     LDX $82         ; channel number
    E27F: B5 C7     LDA $C7,X       ; record length
    E281: 38        SEC
    E282: E5 D4     SBC $D4         ; minus position
    E284: B0 03     BCS $E289       ; positive?
    E286: 4C 02 E2  JMP $E202       ; 67, 'illegal track or sector'

    Jump from $E284:

    E289: 18        CLC
    E28A: 65 D7     ADC $D7         ; add pointer in data block
    E28C: 90 03     BCC $E291       ; no overflow
    E28E: 69 01     ADC #$01        ; plus 2
    E290: 38        SEC

    Jump from $E28C:

    E291: 20 09 E0  JSR $E009       ; set pointer
    E294: 4C 38 E1  JMP $E138       ; get byte from buffer
    E297: A9 51     LDA #$51
    E299: 20 C8 C1  JSR $C1C8       ; 51, 'overflow in record'

    Jump from $E275, $CA6C, $E322:

    E29C: A5 94     LDA $94         ; buffer pointer lo
    E29E: 85 89     STA $89
    E2A0: A5 95     LDA $95         ; buffer pointer hi
    E2A2: 85 8A     STA $8A
    E2A4: 20 D0 E2  JSR $E2D0       ; compare track and sector
    E2A7: D0 01     BNE $E2AA       ; not equal?
    E2A9: 60        RTS

    Jump from $E2A7:

    E2AA: 20 F1 DD  JSR $DDF1
    E2AD: 20 0C DE  JSR $DE0C
    E2B0: A5 80     LDA $80         ; track
    E2B2: F0 0E     BEQ $E2C2       ; no block following?
    E2B4: 20 D3 E2  JSR $E2D3       ; compare track and sector number
    E2B7: D0 06     BNE $E2BF       ; not equal?
    E2B9: 20 1E CF  JSR $CF1E       ; change buffer
    E2BC: 4C DA D2  JMP $D2DA

    Jump from $E2B7:

    E2BF: 20 DA D2  JSR $D2DA

    Jump from $E2B2:

    E2C2: A0 00     LDY #$00
    E2C4: B1 89     LDA ($89),Y     ; track
    E2C6: 85 80     STA $80
    E2C8: C8        INY
    E2C9: B1 89     LDA ($89),Y     ; and sector of the next block
    E2CB: 85 81     STA $81
    E2CD: 4C AF D0  JMP $D0AF       ; read block

    Jump from $E2A4:

    E2D0: 20 3E DE  JSR $DE3E

    Jump from $E2B4:

    E2D3: A0 00     LDY #$00
    E2D5: B1 89     LDA ($89),Y     ; track number
    E2D7: C5 80     CMP $80         ; compare
    E2D9: F0 01     BEQ $E2DC
    E2DB: 60        RTS

    Jump from $E2D9:

    E2DC: C8        INY
    E2DD: B1 89     LDA ($89),Y     ; sector number
    E2DF: C5 81     CMP $81         ; compare
    E2E1: 60        RTS

        Previous Page / Next Page