home *** CD-ROM | disk | FTP | other *** search
-
- **********************************************************
- * *
- * Fmon V1.8 - load.a: the loader *
- * *
- * (c) 1991 Michael Schröder *
- * *
- * This program is freely distributable as long as *
- * the above copyright message is left intact *
- * *
- **********************************************************
-
-
- xdef _load
-
- xref _DOSBase
- xref @addax
- xref @adds
- xref @addd
- xref app
- xref @pril
- xref _wrilc
- xref _wril
- xref _wric
- xref _clearl
- xref @cnopen
-
- _LVOOpen equ -30
- _LVORead equ -42
- _LVOClose equ -36
- _LVOAllocMem equ -198
- _LVOFreeMem equ -210
-
- csect text,0,,2,2
-
- xref _sp
- xref _st
- xref _clearl
- xref _qual
- xref _cl
- xref _iins
-
- AbsExecBase equ 4
-
- _load movem.l d2-d7/a2-a6,-(a7)
- move.l a7,d3
- sub.l a2,a2
- move.l 12+4*11(a7),d5
- clr.l d4
- move.l _DOSBase(a4),a6
- move.l 8+4*11(a7),a3
- clr.w _sp(a4)
- moveq.l #'$',d0
- jsr app(pc)
- move.l a3,d0
- jsr @addax(pc)
- btst.l #0,d5
- beq.s lnos
- lea ls1(a4),a0
- jsr @adds(pc)
- move.l a3,d0
- lsr.l #2,d0
- jsr @addax(pc)
- moveq.l #')',d0
- jsr app(pc)
- lnos lea ls2(a4),a0
- jsr @adds(pc)
- move.l 4+4*11(a7),d1
- move.l #1005,d2
- jsr _LVOOpen(a6)
- move.l d1,d7
- bne.s ll1
- lea snotfound(a4),a0
- jsr @pril(pc)
- bra fin1
- ll1 bsr read
- cmpi.l #1011,d0
- beq.s ll3
- lea snoobj(a4),a0
- bra errout
- ll3 clr.l -(a7)
- l3 bsr read
- move.l d0,d2
- beq.s nolib
- bsr alloc
- move.l a2,a1
- move.l d2,d0
- bsr readd0a1
- move.l a2,a1
- clr.l d0
- move.l a6,-(a7)
- move.l AbsExecBase.w,a6
- jsr -552(a6)
- move.l (a7)+,a6
- tst.l d0
- bne.s ll2
- move.l a2,a0
- jsr @cnopen(pc)
- bra fin
- ll2 move.l d0,-(a7)
- bsr free
- bra l3
- nolib bsr read
- move.l d0,d2
- bsr alloc
- move.l a2,a5
- clr.l d4
- l5 move.l (a7)+,d0
- beq.s l4
- bsr adent
- bra.s l5
- l4 bsr read
- move.l d0,d1
- l7 cmp.l d4,d1
- bcs error
- beq.s l6
- clr.l d0
- bsr adent
- bra.s l7
- l6 move.l a5,-(a7)
- bsr read
- sub.l d1,d0
- bcs error
- move.l d0,d1
- move.l d0,d6
- l8 btst.l #0,d5
- beq.s lll1
- addq.l #4,a3
- lll1 move.l a3,d0
- bsr adent
- bsr read
- lsl.l #2,d0
- adda.l d0,a3
- dbf d1,l8
- move.l a3,d0
- subq.l #1,d0
- jsr @addax(pc)
- jsr _wrilc(pc)
- btst.l #2,d5
- beq.s noinf
- lea _iins(a4),a0
- jsr @pril(pc)
- moveq.l #0,d4
- move.l (a7),a5
- iloop jsr _clearl(pc)
- addq.l #1,d4
- move.l d4,d0
- jsr @addd(pc)
- move.b #'$',_st+4(a4)
- move.w #5,_sp(a4)
- move.l (a5)+,d0
- jsr @addax(pc)
- moveq.l #'-',d0
- jsr app(pc)
- moveq.l #'$',d0
- jsr app(pc)
- move.l a3,d0
- cmp.l d4,d6
- bcs.s notb
- move.l (a5),d0
- btst.l #0,d5
- beq.s notb
- subq.l #4,d0
- notb move.l d0,-(a7)
- subq.l #1,d0
- jsr @addax(pc)
- addq.w #1,_sp(a4)
- moveq.l #'$',d0
- jsr app(pc)
- move.l (a7)+,d0
- sub.l -4(a5),d0
- jsr @addax(pc)
- jsr _wril(pc)
- iwait btst.b #2,_qual+1(a4)
- bne.s iwait
- jsr _wric(pc)
- cmp.l d4,d6
- bcc.b iloop
- noinf move.l (a7)+,a5
- sub.l a3,a3
- lll bsr read
- lsl.l #2,d0
- lsr.l #2,d0
- cmpi.l #1010,d0
- bne.s l9
- sub.l a3,a3
- tst.l d6
- bmi theend
- bra.s lll
- l9 cmpi.l #1000,d0
- beq.s l10
- cmpi.l #1009,d0
- bne.s l11
- l10 bsr read
- lsl.l #2,d0
- beq.s lll
- move.l d0,d4
- l102 move.l d3,-(a7)
- move.l d4,d3
- cmpi.l #81,d3
- bcs.s l101
- moveq.l #80,d3
- l101 move.l d7,d1
- lea _cl(a4),a0
- move.l a0,d2
- jsr _LVORead(a6)
- move.l (a7)+,d3
- tst.l d0
- beq erruneof
- bmi rerr
- sub.l d0,d4
- bne.s l102
- bra.s lll
- l11 cmpi.l #1001,d0
- beq.s l12
- cmpi.l #1002,d0
- bne.s l13
- l12 bsr readnext
- bsr readd0a1
- bra.s lll
- l13 cmpi.l #1003,d0
- bne.s l14
- bsr readnext
- lsl.l #2,d0
- bra.s l15
- l16 clr.b (a1)+
- l15 subq.l #1,d0
- bcc.s l16
- bra lll
- l14 cmpi.l #1004,d0
- bne.s l17
- move.l a3,d0
- beq error
- move.l d3,a0
- move.l 16+4*11(a7),d4
- l20 bsr read
- move.l d0,d1
- beq lll
- bsr read
- lsl.l #2,d0
- move.l 0(a2,d0.l),-(a7)
- add.l d4,(a7)
- bra.s l18
- l19 bsr read
- lea 3(a3,d0.l),a0
- lea 3(a7),a1
- move.b (a1),d0
- add.b d0,(a0)
- addx.b -(a1),-(a0)
- addx.b -(a1),-(a0)
- addx.b -(a1),-(a0)
- l18 dbf d1,l19
- addq.l #4,a7
- bra.s l20
- l17 cmpi.l #1008,d0
- bne l21
- move.l a3,d0
- beq error
- l28 jsr _clearl(pc)
- move.b #'$',_st+1(a4)
- move.b #':',_st+8(a4)
- move.w #10,_sp(a4)
- bsr read
- move.l d0,d4
- beq lll
- bra.s l23
- l26 bsr read
- moveq.l #3,d2
- l25 rol.l #8,d0
- tst.b d0
- beq.s l24
- jsr app(pc)
- l24 dbf d2,l25
- l23 dbf d4,l26
- bsr read
- btst.l #1,d5
- beq.s l28
- add.l a3,d0
- move.w _sp(a4),-(a7)
- move.w #2,_sp(a4)
- jsr @addax(pc)
- move.w (a7)+,_sp(a4)
- jsr _wril(pc)
- lw btst.b #2,_qual+1(a4)
- bne.s lw
- jsr _wric(pc)
- l27 bra.s l28
- l21 move.l d0,-(a7)
- clr.w _sp(a4)
- lea sinvhunk(a4),a0
- jsr @adds(pc)
- move.l (a7)+,d0
- jsr @addd(pc)
- jsr _wrilc(pc)
- bra.s fin
- theend movem.l d1/d3,-(a7)
- move.l d7,d1
- move.l a7,d2
- moveq.l #1,d3
- jsr _LVORead(a6)
- movem.l (a7)+,d1/d3
- tst.l d0
- bmi.s rerr
- beq.s fin
- lea stoolong(a4),a0
- bra.s errout
- fin bsr free
- move.l d7,d1
- jsr _LVOClose(a6)
- fin1 move.l d3,a7
- movem.l (a7)+,d2-d7/a2-a6
- rts
-
- adent subq.l #1,d2
- bcs.s error
- move.l d0,(a5)+
- addq.l #1,d4
- rts
- error lea serror(a4),a0
- errout jsr @pril(pc)
- bra.s fin
-
- rerr lea srerr(a4),a0
- bra.s errout
-
- readnext tst.l d6
- bmi error
- subq.l #1,d6
- move.l (a5)+,a1
- move.l a1,a3
- btst.l #0,d5
- beq.s read
- move.l (a5),d0
- beq.s llx1
- lsr.l #2,d0
- subq.l #1,d0
- llx1 move.l d0,-4(a1)
- read movem.l d0/a1,-(a7)
- move.l a7,a1
- moveq.l #1,d0
- bsr.s readd0a1
- movem.l (a7)+,d0/a1
- rts
-
- readd0a1 lsl.l #2,d0
- beq.s noth
- movem.l d0-d2/d4/d5/a0,-(a7)
- move.l a1,d4
- move.l d0,d5
- rrl move.l d4,d2
- move.l d7,d1
- move.l d3,-(a7)
- move.l d5,d3
- jsr _LVORead(a6)
- move.l (a7)+,d3
- tst.l d0
- beq.s erruneof
- bmi.s rerr
- add.l d0,d4
- sub.l d0,d5
- bne.s rrl
- move.l d4,a1
- movem.l (a7)+,d0-d2/d4/d5/a0
- noth rts
- erruneof lea suneof(a4),a0
- bra.s errout
-
- alloc addq.l #2,d0
- lsl.l #2,d0
- move.l d0,-(a7)
- move.l #$10001,d1
- move.l a6,-(a7)
- move.l AbsExecBase.w,a6
- jsr _LVOAllocMem(a6)
- move.l (a7)+,a6
- move.l d0,a2
- tst.l d0
- beq.s errnomem
- move.l (a7)+,(a2)+
- rts
- errnomem lea snomem(a4),a0
- bra errout
-
- free move.l a2,d0
- beq.s freer
- move.l a2,a1
- move.l -(a1),d0
- move.l a6,-(a7)
- move.l AbsExecBase.w,a6
- jsr _LVOFreeMem(a6)
- move.l (a7)+,a6
- sub.l a2,a2
- freer rts
-
- csect data,1
-
- serror dc.b 'object module corrupt',0
- srerr dc.b 'read error',0
- suneof dc.b 'unexpected end of file',0
- snoobj dc.b 'file is not an object module',0
- snotfound dc.b 'file not found',0
- snomem dc.b 'out of memory',0
- sinvhunk dc.b 'invalid hunk type: ',0
- stoolong dc.b 'warning: file is too long',0
-
- ls1 dc.b ' ($',0
- ls2 dc.b ' - $',0
-
- end
-
-