$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