apple1-videocard-lib/demos/iec/kernal_load.lm

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