NEW AUTO 3,1 *-------------------------------------- ILDR.START jsr MLI check for file 'atinit' .DA #MLIGETFILEINFO .DA gfi_list bcc gfi_ok branch if 'atinit' file found cmp #MLI.E.FNOTFND beq ILDR.SYSTEM if so, continue loading interpreter ATINIT.KO jmp badatinit gfi_ok lda gfi_type cmp #$E2 is 'atinit' correct file type? bne ATINIT.KO error - wrong file type jsr MLI open 'atinit' file .DA #MLIOPEN .DA atopen bne ATINIT.KO error lda #$9F max size = 39.75k ($2000-$BF00) sta rdlen+1 stz rdlen jsr MLI read 'atinit' file to 'sysentry' .DA #MLIREAD .DA rdparm bne ATINIT.KO error - too big jsr MLI close 'atinit' file .DA #MLICLOSE .DA clparm bne ATINIT.KO error lda RROMBNK2 enable ROM jsr sysentry execute ATinit *-------------------------------------- ILDR.SYSTEM lda /dbuf search directory buffer sta idxl+1 lda #$04 start 1 entry past header bne H2434 always. H2432 lda idxl calc next entry position H2434 clc adc dbuf+35 inc to next entry address sta idxl bcs H2451 branch if page cross. adc dbuf+35 test for end of block. bcc H2453 branch if not page cross lda idxl+1 lsr end of block? bcc H2453 no. cmp #$09 end of directory? bne H244D no. jmp nointrp no interpreter, go quit. H244D lda #$04 reset index to 1st entry in next block. sta idxl H2451 inc idxl+1 inc to next page. H2453 ldy #$10 check file type. lda #$FF must be a prodos sys file eor (idxl),y bne H2432 if not sys. tay see if active lda (idxl),y beq H2432 if deleted file. and #$0F strip file 'kind'. sta pbuf save length of name. cmp #$08 must be at least 'x.system' bcc H2432 else, ignore it. tay compare last 7 chars for '.system' ldx #$06 H246C lda (idxl),y eor iterp,x asl ignore bit 7 bne H2432 branch if something else dey dex bpl H246C ldy #$00 H247A iny lda (idxl),y sta pbuf,y cpy pbuf bne H247A jsr MLI open interpreter file .DA #$C8 .DA opparm bne badlod jsr MLI get eof (length of file) .DA #$D1 .DA efparm bne badlod lda eof+2 bne toolong lda eof+1 cmp #$9F max size = 39.75k ($2000-$BF00) bcs toolong sta rdlen+1 lda eof sta rdlen (read entire file) jsr MLI read interpreter file .DA #$CA .DA rdparm beq H24C8 go close if successfully read. cmp #$56 memory conflict? beq toolong then too large bne badlod else, unable to load. H24C8 jsr MLI close interpreter file .DA #$CC .DA clparm bne badlod hopefully never taken lda RROMBNK2 enable ROM sta CLR80DISP sta CLR80STORE jsr init jsr setvid jsr setkbd jsr home jmp sysentry go run interpreter nointrp jsr MLI no interpreter found,so quit. .DA #$65 .DA quitparm badatinit ldy #6 .1 lda atinitname,y sta pbuf,y dey bpl .1 badlod ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG .HS 2C BIT ABS toolong ldx #ILDR.MSG.SYSTOOLARG-ILDR.MSG jsr ILDR.PrintX ldy #0 .1 iny lda pbuf,y jsr COUT cpy pbuf bne .1 bra * *-------------------------------------- ILDR.PrintX bit RROMBNK2 lda INVFLG pha jsr SETINV .1 lda ILDR.MSG,x pha ora #$80 jsr COUT inx pla bpl .1 lda #$A0 jsr COUT pla sta INVFLG rts *-------------------------------------- ILDR.MSG .EQ * ILDR.MSG.SYSLOADERR .AT "Unable to load" ILDR.MSG.SYSTOOLARG .AT "Too Large" *-------------------------------------- gfi_list .DA #$0A .DA atinitname .HS 00 gfi_type .HS 00000000 .HS 0000000000000000 .HS 0000 *-------------------------------------- atopen .HS 03 .DA atinitname .DA iobuf i/o buffer .HS 01 ref# hard coded since no other files *-------------------------------------- atinitname .DA #06 length of name .AS "ATINIT" name of appletalk config file *-------------------------------------- opparm .HS 03 .DA pbuf .DA iobuf .HS 01 efparm .HS 02 .DA #01 eof .HS 000000 length of file. rdparm .HS 04 .HS 01 .DA sysentry rdlen .HS 0000 .HS 0000 clparm .HS 01 .HS 00 quitparm .HS 04 .HS 00 .HS 0000 .HS 00 .HS 0000 iterp .AS ".SYSTEM" interpreter suffix that is required *-------------------------------------- ILDR.LEN .EQ *-ILDR.START MAN SAVE usr/src/prodos.fx/prodos.s.ildr LOAD usr/src/prodos.fx/prodos.s ASM