Annotation of 42BSD/sys/mdec/hpboot.s, revision 1.1.1.1

1.1       root        1: /*     hpboot.s        6.1     83/07/29        */
                      2: 
                      3: /*
                      4:  * RP??/RM?? 1st level boot program: loads next 7.5Kbytes from
                      5:  * boot sector of file system and sets it up to run.
                      6:  * Always reads from drive 0.
                      7:  */
                      8:        .set    BOOTSIZE,15             /* size of boot in sectors */
                      9:        .set    RELOC,0x70000
                     10: /* MBA registers */
                     11:        .set    M_cr,4                  /* MBA control reg */
                     12:        .set    M_var,12                /* MBA virt addr reg */
                     13:        .set    M_bc,16                 /* MBA byte count reg */
                     14:        .set    M_map,0x800             /* start of MBA map reg's */
                     15:        .set    MBAinit,1               /* MBA init bit in MBA control reg */
                     16: /* Drive information */
                     17:        .set    RP,0x400                /* start of drive registers */
                     18:        .set    RP_cr,RP+0              /* control status register */
                     19:        .set    RP_sr,RP+4              /* drive status reg */
                     20:        .set    RP_stk,RP+0x14          /* desired track/sector reg */
                     21:        .set    RP_dt,RP+0x18           /* drive type reg */
                     22:        .set    RP_off,RP+0x24          /* RP offset reg */
                     23:        .set    RP_cyl,RP+0x28          /* desired cyl reg */
                     24:        .set    RPBPSECT,512            /* bytes per sector */
                     25: /* RP?? function codes, status bits  */
                     26:        .set    RP_GO,1                 /* go */
                     27:        .set    RP_RED,070              /* read */
                     28:        .set    RP_DC,010               /* drive clear */
                     29:        .set    RP_RIP,020              /* read in preset */
                     30:        .set    RP_FMT,0x1000           /* format 22 */
                     31:        .set    RP_MOL,0x1000           /* medium on line */
                     32:        .set    RP_DRY,0200             /* drive ready */
                     33:        .set    RP_ERR,040000           /* composite error */
                     34:        .set    RP_pDRY,7               /* bit position of RP_DRY */
                     35:        .set    RP_pERR,14              /* bit position of RP_ERR */
                     36: 
                     37: init:
                     38:        .word   0                       /* entry mask for DEC monitor */
                     39:        nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
                     40:        nop;nop;
                     41: start:
                     42:        movl    r5,r11
                     43:        movl    $RELOC,sp
                     44:        moval   init,r6
                     45:        movc3   $end,(r6),(sp)
                     46:        jmp     *$RELOC+start1
                     47: /* running relocated */
                     48: start1:
                     49: /* get cpu type */
                     50:        .set    SID,0x3e
                     51:        mfpr    $SID,r0
                     52:        extzv   $24,$8,r0,r0
                     53:        ashl    $2,r0,r1
                     54: /* get mba location and init it */
                     55:        moval   physMBA,r2
                     56:        addl3   r1,r2,r3
                     57:        movl    (r3),r9
                     58:        movl    $MBAinit,M_cr(r9)
                     59: /* read-in-preset the drive and set format */
                     60:        movl    $RP_RIP+RP_GO,RP_cr(r9)
                     61:        movl    $RP_FMT,RP_off(r9) 
                     62: 
                     63:        .set    PROGSIZE,(BOOTSIZE*RPBPSECT)
                     64: start2:
                     65:        movl    $0,RP_cyl(r9)
                     66:        movl    $1,RP_stk(r9)
                     67:        movl    $-PROGSIZE,M_bc(r9)
                     68: /* set up MASSBUS map for DMA */
                     69:        clrl    r0
                     70: 1:
                     71:        bisl3   $0x80000000,r0,M_map(r9)[r0]
                     72:        aobleq  $BOOTSIZE,r0,1b
                     73:        clrl    M_var(r9)
                     74:        movl    $RP_RED+RP_GO,RP_cr(r9)
                     75: rprdy:
                     76:        movl    RP_sr(r9),r0
                     77:        bbc     $RP_pDRY,r0,rprdy
                     78:        bbs     $RP_pERR,r0,rperr
                     79:        clrl    r3
                     80: /* Eagle's are too fast for the controller. Slow the thing down. */
                     81: buzz:  acbl    $2000,$1,r3,buzz
                     82:        bicpsw  $2
                     83:        jbr     clear
                     84: rperr:
                     85:        halt
                     86: /* clear core and execute program */
                     87: clear:
                     88:        movl    $PROGSIZE,r3
                     89: clrcor:
                     90:        clrq    (r3)
                     91:        acbl    $RELOC,$8,r3,clrcor
                     92: /* run loaded program */
                     93:        clrl    r10                     /* major("/dev/hp0a") */
                     94:        calls   $0,*$0
                     95:        brw     start2
                     96: 
                     97:        .align  2
                     98: physMBA:
                     99:        .long   0
                    100:        .long   0x20010000
                    101:        .long   0xf28000
                    102: 
                    103: end:

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.