*IPLを参考にした飛翔鮫のデータ読み出しプログラム .include doscall.mac .text .even lea __stack,sp move.b #$7D,d0 *0111_1101 move.b #$01,d1 move.w #$0005,d2 *0000_0101 * movea.l #$00006400,a0 lea __data_buf,a0 BSR READ lea __f1,a0 BSR WRITE move.b #$75,d0 move.b #$01,d1 move.w #$0011,d2 * movea.l #$00033000,a0 lea __data_buf,a0 BSR READ lea __f2,a0 BSR WRITE move.b #$78,d0 move.b #$01,d1 move.w #$0024,d2 * movea.l #$00038000,a0 lea __data_buf,a0 BSR READ lea __f3,a0 BSR WRITE move.b #$7E,d0 move.b #$01,d1 move.w #$0003,d2 * movea.l #$00041000,a0 lea __data_buf,a0 BSR READ lea __f4,a0 BSR WRITE move.b #$00,D0 *こいつが次に実行される move.b #$02,D1 move.w #$000F,D2 * movea.l #$00002400,A0 lea __data_buf,a0 bsr READ lea __f5,a0 BSR WRITE DOS _EXIT *-------- READ movem.l d0-d4/a0-a1,-(sp) movea.l a0,a1 moveq #0,d3 move.w d2,d3 asl.l #8,d3 asl.l #2,d3 move.l #$00000300,d2 move.b d0,d4 lsr.b #1,d4 move.b d4,d2 swap d2 move.w #$0100,d2 lsr.b #1,d0 bcs.s @F move.w #0,d2 @@ move.b d1,d2 move.w #$9070,d1 move.l d3,__data_size *データサイズをとっとく moveq #$46,d0 trap #$0F *diskから読み込み move.l d0,d1 swap d1 and.w #$C000,d1 bne.s @F movem.l (sp)+,d0-d4/a0-a1 RTS *--------- @@: movem.l (A7)+,D0-D4/A0-A1 bra.s READ *もう一回 bset.b #$0005,$00E82601 RTS *--------------------- WRITE movem.l d0-d7/a0-a6,-(sp) move #%100000,-(sp) move.l a0,-(sp) DOS _CREATE addq.l #6,sp move #2,-(sp) move.l a0,-(sp) DOS _OPEN addq.l #6,sp move d0,__fn move.l __data_size,-(sp) pea __data_buf move __fn,-(sp) DOS _WRITE lea 10(sp),sp move __fn,-(sp) DOS _CLOSE addq.l #2,sp movem.l (sp)+,d0-d7/a0-a6 RTS *====================== .data __f1 .dc.b 'data1',0 __f2 .dc.b 'data2',0 __f3 .dc.b 'data3',0 __f4 .dc.b 'data4',0 __f5 .dc.b 'data5',0 .bss .even __fn .ds.w 1 __data_size .ds.l 1 __data_buf .ds.b 1024*1024 .stack .even __stack0 .ds.b 128 __stack