#11 Article 348 Posted at 1987/08/31 20:30:54 by クリィミーセッケン (MAP270) [PRG.NL3]

Subject: nloader for X68k

随分ときたないプログラムに成ってしまいましたが、X68K用のローダーです。

しかし、このソフトを使える人がこのネットに何人居るんでせうか?

>as nloader
>lk nloader
>copy nloader.x \basic\nloader.fnc

とやってbasic.cnfファイルの最後にfunc = nloaderと書き足します。

詳しい手順が判らなかったらMAIL下さい。

そうそうTA(O)君、プロジェクトA子でマックス5000を操縦してる

女の子は、優ちゃんがモデルなのかな~?

                        By MAP270 クリィミーセッケン

********************************************
*
*       BASIC外部関数
*
*               nloader
*
********************************************

_fflush         equ             $ff0d
_open           equ             $ff3d
_read           equ             $ff3f
_close          equ             $ff3e
_malloc         equ             $ff48
_mfree          equ             $ff49

gpalet          equ             $94
fill            equ             $ba
str_val         equ             $0008
void_ret        equ             $ffff

adr_init        dc.l            return
adr_run         dc.l            return
adr_end         dc.l            return
adr_system      dc.l            return
adr_break       dc.l            return
adr_input       dc.l            return
adr_reserve1    dc.l            return
adr_reserve2    dc.l            return
adr_token       dc.l            token_table
adr_parameter   dc.l            param_adr_table
adr_exec        dc.l            exec_table
reserve         dc.l            0,0,0,0,0

                .even
token_table
                dc.b            "nloader",0,0

                .even
param_adr_table
                dc.l            param_table

                .even
param_table
                dc.w            str_val,void_ret

                .even
exec_table
                dc.l            NLOADER

****************************************
* 書式         nloader(str)
* 引数         file name
* 帰り値       void
****************************************
NLOADER:
                link            a6,#0

                move.l          #17000,-(sp)
                dc.w            _malloc
                addq.l          #4,sp
                tst.l           d0
                bmi             memerr
                movea.l         d0,a5
                move.l          d0,memptr

                dc.w            _fflush
                move.l          16(a6),a0
                clr.w           -(sp)
                move.l          a0,-(sp)
                dc.w            _open
                addq.l          #6,sp
                tst.l           d0
                bmi             doserror
                move.w          d0,fileno

                move.l          #17000,-(sp)
                move.l          a5,-(sp)
                move.w          fileno,-(sp)
                dc.w            _read
                lea             10(sp),sp
                tst.l           d0
                bmi             doserror

                clr.l           d1
ploop
                bsr             read
                move.l          d0,d2
                bsr             read
                lsl.l           #7,d0
                or.l            d0,d2
                move.l          d2,d4
                move.l          d2,d5
                move.l          d2,d6
                divu            #81,d4
                move.w          d4,d0
                mulu            #81,d0
                sub.w           d0,d5
                sub.w           d0,d6
                divu            #9,d5
                move.w          d5,d0
                mulu            #9,d0
                sub.w           d0,d6

                mulu            #3,d4
                lsl.w           #6,d4
                mulu            #3,d5
                lsl.w           #6,d5
                lsl.w           #5,d5
                mulu            #6,d6

                clr.l           d2
                or.w            d4,d2
                or.w            d5,d2
                or.w            d6,d2

                moveq.l         #gpalet,d0
                trap            #15

                addq.w          #1,d1
                cmp.w           #64,d1
                bne             ploop

                clr.l           d2
                clr.l           d3
                lea             grbuff,a1
loopg
                bsr             read

                bclr.l          #6,d0
                beq             one

                move.w          d0,8(a1)
                bsr             read
                move.w          d0,d4
                addq.w          #1,d4
loopc
                move.w          d2,(a1)
                move.w          d3,2(a1)
                move.w          d2,4(a1)
                addq.w          #2,4(a1)
                move.w          d3,6(a1)
                addq.w          #3,6(a1)

                moveq.l         #fill,d0
                trap            #15

                add.w           #4,d3
                cmp.w           #400,d3
                bne             skip2
                clr.l           d3
                add.w           #3,d2
                cmp.w           #480,d2
                beq             exit
skip2:          dbra            d4,loopc
                bra             loopg


one
                move.w          d2,(a1)
                move.w          d3,2(a1)
                move.w          d2,4(a1)
                addq.w          #2,4(a1)
                move.w          d3,6(a1)
                addq.w          #3,6(a1)

                move.w          d0,8(a1)
                moveq.l         #fill,d0
                trap            #15

                add.w           #4,d3
                cmp.w           #400,d3
                bne             loopg
                clr.l           d3
                add.w           #3,d2
                cmp.w           #480,d2
                bne             loopg
exit
                move.w          fileno,-(sp)
                dc.w            _close
                addq.l          #2,sp

                move.l          memptr,-(sp)
                dc.w            _mfree
                addq.l          #4,sp
                clr.l           d0
                unlk            a6
return:         rts

read
                clr.l           d0
                move.b          (a5)+,d0
                cmp.b           #32,d0
                bcs             read
                sub.b           #32,d0
                cmp.b           #128,d0
                bcs             next
                sub.b           #32,d0
next:           rts


memerr
                moveq.l         #1,d0
                lea             memerr_msg,a1
                unlk            a6
                rts

doserror
                move.l          d0,-(sp)
                move.l          memptr,-(sp)
                dc.w            _mfree
                addq.l          #4,sp
                move.l          (sp)+,d0
                unlk            a6
                rts


fileno:         ds.w            1
memptr:         ds.l            1

grbuff:         ds.w            5

memerr_msg:     dc.b            "メモリを確保できません",0

                .end
@.