NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF sbin/initd *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY .OR ZPBIN ZS.START BufPtr .BS 2 hBuf .BS 1 hFile .BS 1 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA #0 S.PS.F.EVENT .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize .DA #16 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.MSG.CTRLR .DA MSG.CTRLR L.BINSH .DA BINSH L.ETCINIT .DA ETCINIT L.BINMEM .DA BINMEM L.BINPS .DA BINPS L.BINSHUTDOWN .DA BINSHUTDOWN .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN ldy #S.PS.PID lda (pPS),y cmp #1 bne .9 ldy #S.PS.hStdIn lda (pPS),y >SYSCALL feof bcs .99 tay bne .1 >SYSCALL getchar bcs .99 cmp #18 CTRL-R for Root mode bne .1 >LDYA L.MSG.CTRLR >SYSCALL PutS >LDYA L.BINSH jsr CS.RUN.EXEC.YA >SLEEP .1 jsr CS.RUN.ETCINIT bcs .99 .2 >SYSCALL getchar bcs .99 cmp #C.CR Ctrl.M bne .3 >LDYA L.BINMEM jsr CS.RUN.EXEC.YA bra .2 .3 cmp #16 Ctrl.P bne .4 >LDYA L.BINPS jsr CS.RUN.EXEC.YA bra .2 .4 cmp #4 Ctrl.D bne .2 >LDYA L.BINSHUTDOWN jsr CS.RUN.EXEC.YA bcs .2 sec rts .9 lda #E.SYN sec .99 rts *-------------------------------------- CS.RUN.ETCINIT >LDYAI 256 >SYSCALL GetMem >STYA BufPtr stx hBuf >PUSHW L.ETCINIT >PUSHBI O.RDONLY+O.TEXT >PUSHBI S.FI.T.TXT >PUSHWZ >SYSCALL FOpen bcs .90 sta hFile .1 >PUSHWI 256 >PUSHW BufPtr lda hFile >SYSCALL fgets bcs .80 lda (BufPtr) cmp #'#' beq .1 >LDYA BufPtr jsr CS.RUN.EXEC.YA bra .1 .90 pha jsr .81 pla sec rts .80 lda hFile >SYSCALL FClose .81 lda hBuf >SYSCALL FreeMem rts *-------------------------------------- CS.RUN.EXEC.YA >PUSHYA >PUSHBI S.PS.F.HOLD >SYSCALL ExecL rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- CS.END *-------------------------------------- MSG.CTRLR .AZ "INITD:Entering ROOT mode..." BINSH .AZ "${ROOT}bin/sh" ETCINIT .AZ "${ROOT}etc/init" BINMEM .AZ "${ROOT}bin/mem" BINPS .AZ "${ROOT}bin/ps" BINSHUTDOWN .AZ "${ROOT}bin/shutdown" *-------------------------------------- .DUMMY .OR 0 DS.START DS.END .ED *-------------------------------------- MAN SAVE usr/src/sbin/initd ASM