;====================================== ; _basicload.a (load BASIC from ML) ; ; To be called from Power C. This code ; relocates itself to $c000 and then ; passes control there. ; ; param: pointer to filename ; param: device number ; return: does not return ;====================================== .ref c$start, c$funct_init .def basload ;-------------------------------------- c$parms = $033c fname = $c000 device = $c002 fnlen = $c003 reloc = $c004 IOINIT = $ff84 RAMTAS = $ff87 RESTOR = $ff8a CINT = $ff81 CLOSE = $ffc3 SETLFS = $ffba SETNAM = $ffbd LOAD = $ffd5 ;-------------------------------------- jmp c$start ;in case linked first basload jsr c$funct_init stx $4b lda c$parms,x sta $4c ;to get length sta fname lda c$parms+1,x sta $4d sta fname+1 lda c$parms+2,x sta device ldy #0 getlen lda ($4c),y beq gotlen iny bne getlen gotlen sty fnlen ;------------------------------ ; close any open files ;------------------------------ ldx #9 clall lda $0259,x ;active file nos. beq clmore tay txa pha tya jsr CLOSE pla tax clmore dex bpl clall ;------------------------------ ; relocate somewhere safe ;------------------------------ ldx #[end-setup] move lda setup,x sta reloc,x dex bpl move jmp reloc ;------------------------------ ; initialize for BASIC ;------------------------------ setup sei jsr IOINIT ;init CIAs jsr RAMTAS ;check memory clc jsr RESTOR jsr CINT cli jsr $e453 ;set BASIC vectors jsr $e3bf ;initialize BASIC ;------------------------------ ; load and start BASIC program ;------------------------------ load lda fnlen ldx fname ldy fname+1 jsr SETNAM lda #5 ldx device ldy #0 ;ignore load addr. jsr SETLFS lda #0 ldx #$01 ldy #$08 ;load at $0801 jsr LOAD jsr $a68e ;CHRGET to start jsr $a533 ;renumber lines ldx $22 ;end-of-BASIC ptr ldy $23 stx $2d sty $2e jsr $a659 ;CLR jmp $a7ae ;to interpreter end .bss 1 ;--------------------------------------