149 lines
3.6 KiB
Plaintext
149 lines
3.6 KiB
Plaintext
LOAD
|
|
;********************************
|
|
;* C64 KERNAL IEEE LOAD ROUTINE *
|
|
;********************************
|
|
;LOAD FROM CBM IEEE DEVICE
|
|
;
|
|
LDY FNLEN ;MUST HAVE FILE NAME
|
|
BNE LD25 ;YES...OK
|
|
;
|
|
JMP ERROR8 ;MISSING FILE NAME
|
|
;
|
|
LD25 LDX SA ;SAVE SA IN .X
|
|
JSR LUKING ;TELL USER LOOKING
|
|
LDA #$60 ;SPECIAL LOAD COMMAND
|
|
STA SA
|
|
JSR OPENI ;OPEN THE FILE
|
|
;
|
|
LDA FA
|
|
JSR TALK ;ESTABLISH THE CHANNEL
|
|
LDA SA
|
|
JSR TKSA ;TELL IT TO LOAD
|
|
;
|
|
JSR ACPTR ;GET FIRST BYTE
|
|
STA EAL
|
|
;
|
|
LDA STATUS ;TEST STATUS FOR ERROR
|
|
LSR
|
|
LSR
|
|
BCS LD90 ;FILE NOT FOUND...
|
|
JSR ACPTR ;GET SECOND BYTE
|
|
STA EAH
|
|
;
|
|
TXA ;FIND OUT OLD SA
|
|
BNE LD30 ;SA<>0 USE DISK ADDRESS
|
|
LDA MEMUSS ;ELSE LOAD WHERE USER WANTS
|
|
STA EAL
|
|
LDA MEMUSS+1
|
|
STA EAH
|
|
LD30 JSR LODING ;TELL USER LOADING
|
|
;
|
|
LD40 LDA #$FD ;MASK OFF TIMEOUT
|
|
AND STATUS
|
|
STA STATUS
|
|
;
|
|
;JSR STOP ;STOP KEY?
|
|
;BNE LD45 ;NO...
|
|
;
|
|
;JMP BREAK ;STOP KEY PRESSED
|
|
;
|
|
LD45 JSR ACPTR ;GET BYTE OFF IEEE
|
|
TAX
|
|
LDA STATUS ;WAS THERE A TIMEOUT?
|
|
LSR
|
|
LSR
|
|
BCS LD40 ;YES...TRY AGAIN
|
|
TXA
|
|
LDY VERCK ;PERFORMING VERIFY?
|
|
BEQ LD50 ;NO...LOAD
|
|
LDY #0
|
|
CMP (EAL),Y ;VERIFY IT
|
|
BEQ LD60 ;O.K....
|
|
LDA #SPERR ;NO GOOD...VERIFY ERROR
|
|
JSR UDST ;UPDATE STATUS
|
|
.BYTE $2C ;SKIP NEXT STORE
|
|
;
|
|
LD50 STA (EAL),Y
|
|
LD60 INC EAL ;INCREMENT STORE ADDR
|
|
BNE LD64
|
|
INC EAH
|
|
LD64 BIT STATUS ;EOI?
|
|
BVC LD40 ;NO...CONTINUE LOAD
|
|
;
|
|
JSR UNTLK ;CLOSE CHANNEL
|
|
JSR CLSEI ;CLOSE THE FILE
|
|
BCC LD180 ;BRANCH ALWAYS
|
|
;
|
|
LD90 JMP ERROR4 ;FILE NOT FOUND
|
|
;
|
|
OPENI LDA SA
|
|
BMI OP175 ;NO SA...DONE
|
|
|
|
LDY FNLEN
|
|
BEQ OP175 ;NO FILE NAME...DONE
|
|
;
|
|
LDA #0 ;CLEAR THE SERIAL STATUS
|
|
STA STATUS
|
|
;
|
|
LDA FA
|
|
JSR LISTN ;DEVICE LA TO LISTEN
|
|
;
|
|
LDA SA
|
|
ORA #$F0
|
|
JSR SECND
|
|
;
|
|
LDA STATUS ;ANYBODY HOME?
|
|
BPL OP35 ;YES...CONTINUE
|
|
;
|
|
;THIS ROUTINE IS CALLED BY OTHER
|
|
;KERNAL ROUTINES WHICH ARE CALLED
|
|
;DIRECTLY BY OS. KILL RETURN
|
|
;ADDRESS TO RETURN TO OS.
|
|
;
|
|
PLA
|
|
PLA
|
|
JMP ERROR5 ;DEVICE NOT PRESENT
|
|
;
|
|
OP35 LDA FNLEN
|
|
BEQ OP45 ;NO NAME...DONE SEQUENCE
|
|
;
|
|
;SEND FILE NAME OVER SERIAL
|
|
;
|
|
LDY #0
|
|
OP40 LDA (FNADR),Y
|
|
JSR CIOUT
|
|
INY
|
|
CPY FNLEN
|
|
BNE OP40
|
|
;
|
|
OP45 JMP CUNLSN ;JSR UNLSN: CLC: RTS
|
|
;
|
|
UDST ORA STATUS
|
|
STA STATUS
|
|
RTS
|
|
;
|
|
CLSEI BIT SA
|
|
BMI CLSEI2
|
|
LDA FA
|
|
JSR LISTN
|
|
LDA SA
|
|
AND #$EF
|
|
ORA #$E0
|
|
JSR SECND
|
|
;
|
|
CUNLSN JSR UNLSN ;ENTRY FOR OPENI
|
|
;
|
|
CLSEI2 CLC
|
|
RTS
|
|
;
|
|
LD180 CLC ;GOOD EXIT
|
|
;
|
|
; SET UP END LOAD ADDRESS
|
|
;
|
|
LDX EAL
|
|
LDY EAH
|
|
;
|
|
OP175 CLC ;FLAG GOOD OPEN
|
|
OP180 RTS ;EXIT IN PEACE
|
|
|