     $E7A3/59299:   Perform [&] - USR file execute command

    E7A3: A9 8D     LDA #$8D
    E7A5: 20 68 C2  JSR $C268       ; check command line to end

    Jump from $E7A0:

    E7A8: 20 58 F2  JSR $F258       ; (RTS)
    E7AB: AD 78 02  LDA $0278       ; number of file names
    E7AE: 48        PHA             ; save
    E7AF: A9 01     LDA #$01
    E7B1: 8D 78 02  STA $0278       ; file name
    E7B4: A9 FF     LDA #$FF
    E7B6: 85 86     STA $86
    E7B8: 20 4F C4  JSR $C44F       ; find file
    E7BB: AD 80 02  LDA $0280
    E7BE: D0 05     BNE $E7C5       ; found?
    E7C0: A9 39     LDA #$39
    E7C2: 20 C8 C1  JSR $C1C8       ; 39, 'file not found'

    Jump from $E7BE:

    E7C5: 68        PLA
    E7C6: 8D 78 02  STA $0278       ; get number of file names back
    E7C9: AD 80 02  LDA $0280
    E7CC: 85 80     STA $80         ; track
    E7CE: AD 85 02  LDA $0285
    E7D1: 85 81     STA $81         ; and sector
    E7D3: A9 03     LDA #$03        ; file type 'USR'
    E7D5: 20 77 D4  JSR $D477       ; buffer allocated, read 1st block

    Jump from $E82E:

    E7D8: A9 00     LDA #$00
    E7DA: 85 87     STA $87         ; erase checksum
    E7DC: 20 39 E8  JSR $E839       ; get byte from file
    E7DF: 85 88     STA $88         ; save as start address lo
    E7E1: 20 4B E8  JSR $E84B       ; from checksum
    E7E4: 20 39 E8  JSR $E839       ; get byte from file
    E7E7: 85 89     STA $89         ; as start address hi
    E7E9: 20 4B E8  JSR $E84B       ; form checksum
    E7EC: A5 86     LDA $86
    E7EE: F0 0A     BEQ $E7FA
    E7F0: A5 88     LDA $88
    E7F2: 48        PHA             ; save program start address
    E7F3: A5 89     LDA $89
    E7F5: 48        PHA
    E7F6: A9 00     LDA #$00
    E7F8: 85 86     STA $86

    Jump from $E7EE:

    E7FA: 20 39 E8  JSR $E839       ; get byte from file
    E7FD: 85 8A     STA $8A         ; save as counter
    E7FF: 20 4B E8  JSR $E84B       ; form checksum

    Jump from $E819:

    E802: 20 39 E8  JSR $E839       ; get byte from file
    E805: A0 00     LDY #$00
    E807: 91 88     STA ($88),Y     ; save as program bytes
    E809: 20 4B E8  JSR $E84B       ; form checksum
    E80C: A5 88     LDA $88
    E80E: 18        CLC
    E80F: 69 01     ADC #$01
    E811: 85 88     STA $88         ; increment $88/$89
    E813: 90 02     BCC $E817
    E815: E6 89     INC $89

    Jump from $E813:

    E817: C6 8A     DEC $8A         ; decrement pointer
    E819: D0 E7     BNE $E802
    E81B: 20 35 CA  JSR $CA35       ; get next byte
    E81E: A5 85     LDA $85         ; data byte
    E820: C5 87     CMP $87         ; equal to checksum?
    E822: F0 08     BEQ $E82C       ; yes
    E824: 20 3E DE  JSR $DE3E       ; transmit parameter to disk controller
    E827: A9 50     LDA #$50
    E829: 20 45 E6  JSR $E645       ; 50, 'record not present'

    Jump from $E822:

    E82C: A5 F8     LDA $F8         ; end?
    E82E: D0 A8     BNE $E7D8       ; no, next data block
    E830: 68        PLA
    E831: 85 89     STA $89
    E833: 68        PLA             ; get program start address back
    E834: 85 88     STA $88
    E836: 6C 88 00  JMP ($0088)     ; and execute program

    Jump from $E7DC, $E7E4, $E7FA, $E802:

    E839: 20 35 CA  JSR $CA35       ; get byte from file
    E83C: A5 F8     LDA $F8         ; end?
    E83E: D0 08     BNE $E848       ; no
    E840: 20 3E DE  JSR $DE3E       ; transmit parameter to disk controller
    E843: A9 51     LDA #$51
    E845: 20 45 E6  JSR $E645       ; 51, 'overflow in record'

    Jump from $E83E:

    E848: A5 85     LDA $85         ; data byte
    E84A: 60        RTS

        Previous Page / Next Page