include doscall2.mac include iocscall.mac include fefunc.h include hasmacro.mac include CONST.H include naw.mac _mbuf_size equ 10240*50 * $800で割り切れる必要がある *_mbuf_size equ $1000 text even ENT ; 書き込みmediaによって以下の3行の内1行のみ選び有効にさせるべし m <~NEWFILE #__fname,#%100000>, * m <~CREATE #__fname,#%100000>, * m <~OPEN #__fnametape,#2>, m , , add.l #1,__para_readcap * * move.l #$246+1,__para_readcap ******* * move.l 4(a1),d1 *size of block * lsr #8,d1 move __scsi_block_size,d0 *ここは論理式にせなあかんわ ifEQ move #3,__block_size_for_scsicall elseifEQ move #2,__block_size_for_scsicall elseifEQ move #1,__block_size_for_scsicall elseifEQ move #0,__block_size_for_scsicall else ~~PRINT <'読み込み元のデバイスはワイが対応してへんBLOCK SIZE持っとる',CR,LF,EOF> ~EXIT endif 1: M , , *need TST BSR PRINT_COUNTER m , BSR READ BSR WRITE sub.l d3,__para_readcap BRA 1B 9: ~CLOSE __fn ~EXIT *---------------- LEFT_BLOCK_CHECK move.l #_mbuf_size,d0 m , FPACK __UDIV *l/l move.l d0,d3 IFn LE, , RTS ( d3:残りSCSIblock ) *--------------- PRINT_COUNTER m , , PRINT __counter RTS () *--------------- READ move.l d3,-(sp) move.l __scsi_id,d4 m , m , , move.l (sp)+,d3 RTS () *---------------- WRITE move.l d3,-(sp) move.l d3,d0 m , FPACK __UMUL *l*l move.l d0,d3 ~WRITE __fn,#__mbuf,d3 cmp.l d0,d3 bEQ @F ~~PRINT <' メディアが満杯かもしれへんで',CR,LF,EOS> ~EXIT @@: move.l (sp)+,d3 RTS () *----------------- data even __scsi_access_ptr dc.l 0 __scsi_id dc.l 0 ; scsi id for read __fname dc.b 'diskimage_',EOS __fnametape dc.b 'rst0',EOS __counter dcb.b 16,' ' bss even __para_readcap ds.l 1 ; ds 1 ; __scsi_block_size ds 5 ; TOO MANY for safety __fn ds 1 __block_size_for_scsicall ds 1 quad __mbuf ds.b _mbuf_size __END__mbuf end ENT