Sync from Fredi's source tree 13/05/2017
This commit is contained in:
134
sources/set_ide_access_mode.c
Normal file
134
sources/set_ide_access_mode.c
Normal file
@@ -0,0 +1,134 @@
|
||||
|
||||
/******************************************
|
||||
// setze zugriffsgeschwindigkeit cf card
|
||||
/********************************************************************/
|
||||
|
||||
#include "MCF5475.h"
|
||||
|
||||
#define error_reg (0x05)
|
||||
#define seccnt (0x09)
|
||||
#define stasec (0x0d)
|
||||
#define cmd_reg (0x1d)
|
||||
#define status_reg (0x1d)
|
||||
#define wati (200)
|
||||
|
||||
extern void warte_10ms();
|
||||
extern void warte_10us();
|
||||
|
||||
void ds_rx(void)
|
||||
{
|
||||
asm
|
||||
{
|
||||
// 1 sector lesen word
|
||||
ds_rx:
|
||||
move.l #128,d0
|
||||
move.l a1,a0
|
||||
ds_rx_loop:
|
||||
move.l (a2),(a0)+
|
||||
subq.l #1,d0
|
||||
bne ds_rx_loop
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
void test_drive(void)
|
||||
{
|
||||
asm
|
||||
{
|
||||
moveq.l #11,d1 // default access (3) mode not wait (+8)
|
||||
// reset
|
||||
ide_reset:
|
||||
clr.b 0x19(a2)
|
||||
move.b #0x8,cmd_reg(a2) // device reset
|
||||
move.l #wati,d0 // max. 2s warten
|
||||
wait_ready:
|
||||
tst.b status_reg(a2) // comando fertig?
|
||||
bpl ide_ready // nein
|
||||
subq.l #1,d0
|
||||
bmi dam_nok // nicht da -> default werwenden
|
||||
bsr warte_10ms
|
||||
bra wait_ready
|
||||
|
||||
ide_ready:
|
||||
clr.b 0x19(a2)
|
||||
move.b #0xec,cmd_reg(a2) // identify devcie
|
||||
move.l #wati,d0 // max. 2s warten
|
||||
wait_busy:
|
||||
tst.b status_reg(a2) // laufwerk bereit?
|
||||
bpl ide_busy
|
||||
subq.l #1,d0
|
||||
bmi dam_nok // nicht da -> default werwenden
|
||||
bsr warte_10ms
|
||||
bra wait_busy
|
||||
ide_busy:
|
||||
clr.l (a1)
|
||||
btst #3,status_reg(a2)
|
||||
beq non_data
|
||||
bsr ds_rx
|
||||
tst.l (a1)
|
||||
bne dam_ok
|
||||
non_data:
|
||||
subq.l #1,d3
|
||||
bmi dam_nok
|
||||
bra ide_ready
|
||||
dam_ok:
|
||||
tst.b status_reg(a2) // interrupt r<>ckstellen
|
||||
|
||||
lea MCF_PSC0_PSCTB_8BIT,a2 // name ausgeben
|
||||
lea 54(a1),a0
|
||||
moveq.l #40,d0
|
||||
name_loop:
|
||||
move.b (a0)+,(a2)
|
||||
subq.l #1,d0
|
||||
bne name_loop
|
||||
move.l #' OK!',(a2)
|
||||
move.l #0x0a0d,(a2)
|
||||
|
||||
moveq.l #3,d1
|
||||
clr.l d0
|
||||
move.w 2*68(a1),d0 // pio cycle time
|
||||
lsr.l #5,d0 // :32(ns)
|
||||
subq.l #1,d0
|
||||
bmi siam_fertig
|
||||
move.w d0,d1
|
||||
siam_fertig:
|
||||
cmp.w #3,d1 // gr<67>sser als max?
|
||||
ble dam_nok
|
||||
moveq.l #3,d1 // sonst default
|
||||
dam_nok:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void set_ide_access_mode(void)
|
||||
{
|
||||
|
||||
asm
|
||||
{
|
||||
lea 0xf0040000,a3
|
||||
bset.b #1,(a3) // ide reset
|
||||
bsr warte_10ms
|
||||
move.w #0x1033,(a3) // 1.cf 2.ide, ide int activ, scsi int disable, speed = min
|
||||
bsr warte_10ms
|
||||
lea 0xfff00000,a2
|
||||
lea 0xc00000,a1
|
||||
}
|
||||
test_drive();
|
||||
asm
|
||||
{
|
||||
move.b d1,d2
|
||||
}
|
||||
asm
|
||||
{
|
||||
lea 0xfff00040,a2
|
||||
lea 0xc00000,a1
|
||||
}
|
||||
test_drive();
|
||||
asm
|
||||
{
|
||||
lsl.l #4,d1
|
||||
or.l d1,d2
|
||||
move.b d2,1(a3)
|
||||
}
|
||||
/********************************************************************/
|
||||
};
|
||||
Reference in New Issue
Block a user