$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