#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
@.