diff --git a/BaS_gcc/.cproject b/BaS_gcc/.cproject index c19c953..a6c7af5 100644 --- a/BaS_gcc/.cproject +++ b/BaS_gcc/.cproject @@ -39,6 +39,7 @@ + @@ -71,255 +72,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -369,6 +121,7 @@ + @@ -407,255 +160,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BaS_gcc/Makefile b/BaS_gcc/Makefile index dd71710..58bce8a 100644 --- a/BaS_gcc/Makefile +++ b/BaS_gcc/Makefile @@ -10,7 +10,7 @@ # can be either "Y" or "N" (without quotes). "Y" for using the m68k-elf-, "N" for using the m68k-atari-mint # toolchain -COMPILE_ELF=Y +COMPILE_ELF=N ifeq (Y,$(COMPILE_ELF)) TCPREFIX=m68k-elf- diff --git a/BaS_gcc/sources/cc932.c b/BaS_gcc/sources/cc932.c index a5bb707..3d80d44 100644 --- a/BaS_gcc/sources/cc932.c +++ b/BaS_gcc/sources/cc932.c @@ -4,7 +4,7 @@ /* CP932 (Japanese Shift-JIS) */ /*------------------------------------------------------------------------*/ -#include "../ff.h" +#include #define _TINY_TABLE 0 diff --git a/BaS_gcc/sources/cc936.c b/BaS_gcc/sources/cc936.c index 6e58e89..2bd40c6 100644 --- a/BaS_gcc/sources/cc936.c +++ b/BaS_gcc/sources/cc936.c @@ -4,7 +4,7 @@ /* CP936 (Simplified Chinese GBK) */ /*------------------------------------------------------------------------*/ -#include "../ff.h" +#include #if !_USE_LFN || _CODE_PAGE != 936 diff --git a/BaS_gcc/sources/cc949.c b/BaS_gcc/sources/cc949.c index 626268b..edaca5f 100644 --- a/BaS_gcc/sources/cc949.c +++ b/BaS_gcc/sources/cc949.c @@ -4,7 +4,7 @@ /* CP949 (Korean EUC-KR) */ /*------------------------------------------------------------------------*/ -#include "../ff.h" +#include #if !_USE_LFN || _CODE_PAGE != 949 diff --git a/BaS_gcc/sources/cc950.c b/BaS_gcc/sources/cc950.c index f58c9a4..f004129 100644 --- a/BaS_gcc/sources/cc950.c +++ b/BaS_gcc/sources/cc950.c @@ -4,7 +4,7 @@ /* CP950 (Traditional Chinese Big5) */ /*------------------------------------------------------------------------*/ -#include "../ff.h" +#include #if !_USE_LFN || _CODE_PAGE != 950 diff --git a/BaS_gcc/sources/div.s b/BaS_gcc/sources/div.s deleted file mode 100644 index f5f151c..0000000 --- a/BaS_gcc/sources/div.s +++ /dev/null @@ -1,1326 +0,0 @@ - -/********************************************************************/ -// sd card -/********************************************************************/ -#define dspi_dtar0 0x0c -#define dspi_dsr 0x2c -#define dspi_dtfr 0x34 -#define dspi_drfr 0x38 - -sd_test: - lea 0x40000,a5 // basis addresse - move.l #0x1fffffff,d0 // normal dspi - move.l d0,MCF_PAD_PAR_DSPI - lea MCF_DSPI_DMCR,a0 - move.l #0x802d3c00,(a0) // 8 bit 4MHz - move.l #0x38551120,d0 - move.l d0,dspi_dtar0(a0) // - move.l #0x08200000,d4 // tx vorbesetzen - mov3q.l #-1,dspi_dsr(a0) - - move.b #0xc0,(a0) // 8 bit 4MHz - bsr warte_1ms - move.b #0x80,(a0) // 8 bit 4MHz -// sd idle - moveq.l #100,d6 // 100 versuche -sd_idle: - bsr sd_16clk - move.b #0x40,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x95,d4 - bsr sd_com - - bsr sd_get_status - cmp.b #0x01,d5 - beq wait_of_aktiv - subq.l #1,d6 - beq sd_not - bra sd_idle - -// acdm 41 -wait_of_aktiv: - bsr sd_16clk - move.b #0x77,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - - bsr sd_get_status - cmp.b #0x05,d5 - beq wait_of_aktiv - - -wait_of_aktiv2: - bsr sd_16clk - move.b #0x69,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x02,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - - bsr sd_get_status - tst.b d5 - beq sd_init_ok - cmp.b #0x05,d5 - beq wait_of_aktiv2 - bra wait_of_aktiv - -sd_init_ok: - -// blockgrösse 512byt -sd_bg: - bsr sd_16clk - move.b #0x50,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #02,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - - bsr sd_get_status - tst.b d5 - bne sd_bg - -// read block -sd_rb: - bsr sd_16clk - move.b #0x51,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x08,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - - bsr sd_get_status - tst.b d5 - bne sd_rb - - move.l a5,a4 // adresse setzen - bsr sd_rcv_block - -// write block -sd_wb: - bsr sd_16clk - move.b #0x58,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x08,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - - bsr sd_get_status - tst.b d5 - bne sd_wb - - bsr sd_send_block - -// read block 2 -sd_rb2: - bsr sd_16clk - move.b #0x51,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x08,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - - bsr sd_get_status - tst.b d5 - bne sd_rb - - bsr sd_rcv_block - clr.l d0 - halt - halt - rts -// status holen ------------------------------- -sd_not: - moveq.l #-1,d0 - halt - halt - rts - -// status holen ------------------------------- -sd_get_status: - move.b #0xff,d4 - bsr sd_com - cmp.b #0xff,d5 - beq sd_get_status - rts -// byt senden und holen --------------------- -sd_com: - move.l d4,dspi_dtfr(a0) -wait_auf_complett: - btst.b #7,dspi_dsr(a0) - beq wait_auf_complett - move.l dspi_drfr(a0),d5 - mov3q.l #-1,dspi_dsr(a0) // clr status register - rts - -// daten holen ---------------------------- -sd_rcv_block: - move.l #512,d3 // 512 byts + 2 ccr byts - move.b #0xff,d4 -sd_rcv_rb_w: - bsr sd_get_status - cmp.b #0xfe,d5 // daten bereit? - bne sd_rcv_rb_w // nein-> -sd_rcv_rd_rb: - bsr sd_com - move.b d5,(a4)+ - subq.l #1,d3 - bne sd_rcv_rd_rb -// crc holen - bsr sd_com // crc 1.byt - move.b d5,d1 - bsr sd_com // crc 2.byt - move.b d5,d2 - rts - -// daten schreiben ----------------------- -sd_send_block: - move.l #512,d3 - move.b #0xfe,d4 // start token - bsr sd_com // senden -sd_send_wr_wb: - move.b #0xc7,d4 // data - bsr sd_com // senden - subq.l #1,d3 - bne sd_send_wr_wb -// send crc - move.b d1,d4 - bsr sd_com // crc 1.byt - move.b d2,d4 - bsr sd_com // crc 2.byt -sd_send_wr_ww: - bsr sd_get_status - and.l #0x1f,d5 - cmp.b #0x05,d5 - bne sd_send_wr_ww -sd_sendwait_wr_f: - bsr sd_com - cmp.b #0xff,d5 - bne sd_sendwait_wr_f - rts -// clock einfügen ------------------------------------- -sd_16clk: - move.b #0xc0,(a0) // 8 bit 4MHz - nop - move.b #0x80,(a0) // 8 bit 4MHz - rts -// cdm 58 -read_ocr: - bsr sd_16clk - move.b #0x7a,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #00,d4 - bsr sd_com - move.b #0x01,d4 - bsr sd_com - move.b #0xaa,d4 - bsr sd_com - move.b #0x87,d4 - bsr sd_com - - bsr sd_get_status - - halt - - move.l #'Ver1',d6 - cmp.b #5,d5 - beq sd_v1 - cmp.b #1,d5 - bne read_csd - - move.b #0xff,d4 - bsr sd_com - move.b d5,d0 - bsr sd_com - move.b d5,d1 - bsr sd_com - move.b d5,d2 - bsr sd_com -/******************************************/ -#include "MCF5475.h" -#include "startcf.h" - -extern unsigned long far __SP_AFTER_RESET[]; -extern unsigned long far __Bas_base[]; - - /* imported routines */ -//extern int warten_20ms(); -//extern int warten_200us(); -//extern int warten_10us(); - -/********************************************************************/ -void asm sd_test(void) -{ - clr.w MCF_PAD_PAR_DSPI - lea MCF_GPIO_PPDSDR_DSPI,a2 // data in - lea MCF_GPIO_PODR_DSPI,a1 // data out - move.b #0x00,(a1) // alle auf 0 - lea MCF_GPIO_PDDR_DSPI,a0 - move.b #0x7d,(a0) // din = input rest output - - bsr warten_20ms - - move.b #0x7f,(a1) // alle auf 1 - - bsr sd_16clk - bsr sd_16clk - bsr sd_16clk - bsr sd_16clk - bsr sd_16clk - bsr sd_16clk - bsr sd_16clk - bsr sd_16clk -// sd idle -sd_idle: - bsr sd_16clk - moveq #0x40,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x95,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x05,d5 - beq sd_test - cmp.b #0x01,d5 - beq wait_of_aktiv - cmp.b #0x04,d5 - beq sd_init_ok - cmp.b #0x00,d5 - beq sd_init_ok - bra sd_idle - -// acdm 41 -wait_of_aktiv: - bsr sd_16clk - - moveq #0x77,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - bsr sd_16clk - - move.l #0xff,d6 - moveq #0x69,d4 - bsr sd_com - and d5,d6 - moveq #00,d4 - bsr sd_com - and d5,d6 - moveq #00,d4 - bsr sd_com - and d5,d6 - moveq #0x02,d4 - bsr sd_com - and d5,d6 - moveq #00,d4 - bsr sd_com - and d5,d6 - moveq #0x01,d4 - bsr sd_com - and d5,d6 - - bsr sd_receive - - cmp.b #0x00,d5 - beq sd_init_ok - cmp.b #0x05,d5 - beq sd_test - bra wait_of_aktiv - -sd_init_ok: - -// blockgrösse 512byt -sd_bg: - bsr sd_16clk - moveq #0x50,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #02,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_bg - -// read block -sd_rb: - bsr sd_16clk - moveq #0x51,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x08,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_rb - - lea 0xc00000,a4 - move.l #513,d7 -rd_rb: - bsr sd_receive - move.b d5,(a4)+ - subq.l #1,d7 - bne rd_rb - -// write block -sd_wb: - bsr sd_16clk - moveq #0x58,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x08,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_wb - - lea 0xc00000,a4 - move.l #513,d7 - moveq.l #0x66,d4 -wr_wb: - bsr sd_com -// subq.l #1,d4 - moveq #0x66,d4 - subq.l #1,d7 - bne wr_wb - - bsr sd_receive - -wr_wb_el: - moveq #0xff,d4 - bsr sd_com - cmp.b #0xff,d5 - bne wr_wb_el - - -// read block 2 -sd_rb2: - bsr sd_16clk - moveq #0x51,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x08,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_rb2 - - lea 0xc00400,a4 - move.l #513,d7 -rd_rb2: - bsr sd_receive - move.b d5,(a4)+ - subq.l #1,d7 - bne rd_rb2 - - - nop - nop - - rts - -sd_receive: - moveq #0xff,d4 - bsr sd_com - cmp.b #0xff,d5 - beq sd_receive - rts - -sd_com: - bclr.b #6,(a1) -sd_comb: - bsr warten_10us - moveq #7,d2 - clr.l d5 -sd_com_loop: - btst d2,d4 - beq sd_com2 - bset.b #0,(a1) - bra sd_com2_1 -sd_com2: - bclr.b #0,(a1) -sd_com2_1: - bsr sd_clk - and.l #0x02,d3 - beq sd_com3 - bset.b d2,d5 -sd_com3: - subq.l #1,d2 - bge sd_com_loop - bsr warten_10us - bset.b #6,(a1) - bset.b #0,(a1) - bsr warten_200us - rts -sd_clk: - tst.b 0xfffff700 - tst.b 0xfffff700 - bset.b #2,(a1) - tst.b 0xfffff700 - tst.b 0xfffff700 - move.b (a2),d3 - tst.b 0xfffff700 - bclr.b #2,(a1) - rts - -sd_15clk: - move #15,d0 - bra sd_16clk -sd_16clk: - moveq #16,d0 -sd_16clk1: - bsr sd_clk - subq.l #1,d0 - bne sd_16clk1 - bsr warten_10us - rts -// warteschleife ca. 20ms -warten_20ms: - move.l a0,-(sp) - move.l d6,-(sp) - move.l d1,-(sp) - move.l d0,-(sp) - lea MCF_SLT0_SCNT,a0 - move.l (a0),d0 - move.l #700000,d6 - bra warten_loop -// warteschleife ca. 200us -warten_200us: - move.l a0,-(sp) - move.l d6,-(sp) - move.l d1,-(sp) - move.l d0,-(sp) - lea MCF_SLT0_SCNT,a0 - move.l (a0),d0 - move.l #7000,d6 - bra warten_loop -// warteschleife ca. 10us -warten_10us: - move.l a0,-(sp) - move.l d6,-(sp) - move.l d1,-(sp) - move.l d0,-(sp) - lea MCF_SLT0_SCNT,a0 - move.l (a0),d0 - move.l #333,d6 -warten_loop: - move.l (a0),d1 - sub.l d0,d1 - add.l d6,d1 - bpl warten_loop - move.l (sp)+,d0 - move.l (sp)+,d1 - move.l (sp)+,d6 - move.l (sp)+,a0 - rts; -} - - -/**************************************************/ -void asm ide_test(void) -{ - lea MCF_PAD_PAR_DSPI,a0 - move.w #0x1fff,(a0) - lea MCF_DSPI_DCTAR0,a0 - move.l #0x38a644e4,(a0) - lea MCF_DSPI_DMCR,a0 - move.l #0x802d3c00,(a0) - clr.l MCF_DSPI_DTCR - bsr warten_20ms - lea MCF_DSPI_DTFR,a0 - lea MCF_DSPI_DRFR,a1 - - moveq #10,d0 -sd_reset: - move.l #0x000100ff,(a0) - bsr warten_20ms - and.l (a1),d0 - subq.l #1,d0 - bne sd_reset - - moveq #10,d1 -sd_loop1: - bsr warten_20ms - moveq #-1,d0 -// cmd 0 set to idle - move.l #0x00200040,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200095,(a0) - bsr warten_20ms - and.l (a1),d0 - cmp.w #0x0001,d0 - beq sd_loop2 - subq.l #1,d1 - bne sd_loop1 - moveq #10,d1 - bra sd_test -sd_loop2: - moveq #-1,d0 -// cmd 41 - move.l #0x00200069,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200000,(a0) - bsr warten_20ms - and.l (a1),d0 - move.l #0x00200001,(a0) - bsr warten_20ms - and.l (a1),d0 - tst.w d0 - bne sd_loop2 - - nop - nop -/********************************************************************/ -#define cmd_reg (0x1d) -#define status_reg (0x1d) -#define seccnt (0x09) - -ide_test: - lea 0xfff00040,a0 - lea 0xc00000,a1 - move.b #0xec,cmd_reg(a0) //identify devcie cmd - bsr wait_int - bsr ds_rx -// read sector normal - move.b #1,seccnt(a0) // 1 sector - move.b #0x20,cmd_reg(a0) // read cmd - bsr wait_int - bsr ds_rx - -// write testpattern sector - move.b #1,seccnt(a0) // 1 sector - move.b #0x30,cmd_reg(a0) // write cmd - bsr drq_wait -// write pattern - move.l #256,d0 -ide_test_loop3: - move.w #0xa55a,(a0) - subq.l #1,d0 - bne ide_test_loop3 - bsr wait_int -// read testpattern sector - move.b #1,seccnt(a0) // 1 sector - move.b #0x20,cmd_reg(a0) // read - bsr wait_int - bsr ds_rx -// sector restauriern - move.b #1,seccnt(a0) // 1 sector - move.b #0x30,cmd_reg(a0) // write - lea -0x400(a1),a1 // vorletzer - bsr drq_wait - bsr ds_tx - bsr wait_int -// fertig und zurück - nop - rts -// wait auf int -wait_int: - move.b 0xfffffa01,d0 - btst.b #5,d0 - bne wait_int - move.b status_reg(a0),d0 - rts -// wait auf drq -drq_wait: - move.b status_reg(a0),d0 - btst #3,d0 - beq drq_wait - rts - -// 1 sector lesen word -ds_rx: - move.l #256,d0 -ds_rx_loop: - move.w (a0),(a1)+ - subq.l #1,d0 - bne ds_rx_loop - rts -// 1 sector lesen long -ds_rxl: - move.l #128,d0 -ds_rxl_loop: - move.l (a0),(a1)+ - subq.l #1,d0 - bne ds_rxl_loop - rts -// 1 sector schreiben word -ds_tx: - move.l #256,d0 -ds_tx_loop: - move.w (a1)+,(a0) - subq.l #1,d0 - bne ds_tx_loop - rts -// 1 sector schreiben word -ds_txl: - move.l #128,d0 -ds_txl_loop: - move.l (a1)+,(a0) - subq.l #1,d0 - bne ds_txl_loop - rts -// warteschleife ca. 20ms -warten_20ms: - move.l a0,-(sp) - move.l d6,-(sp) - move.l d1,-(sp) - move.l d0,-(sp) - lea MCF_SLT0_SCNT,a0 - move.l (a0),d0 - move.l #700000,d6 - bra warten_loop -// warteschleife ca. 200us -warten_200us: - move.l a0,-(sp) - move.l d6,-(sp) - move.l d1,-(sp) - move.l d0,-(sp) - lea MCF_SLT0_SCNT,a0 - move.l (a0),d0 - move.l #7000,d6 - bra warten_loop -// warteschleife ca. 10us -warten_10us: - move.l a0,-(sp) - move.l d6,-(sp) - move.l d1,-(sp) - move.l d0,-(sp) - lea MCF_SLT0_SCNT,a0 - move.l (a0),d0 - move.l #333,d6 -warten_loop: - move.l (a0),d1 - sub.l d0,d1 - add.l d6,d1 - bpl warten_loop - move.l (sp)+,d0 - move.l (sp)+,d1 - move.l (sp)+,d6 - move.l (sp)+,a0 - rts; -} -/********************************************************************/ -//.include "startcf.h" - -//.extern ___MBAR -//#define MCF_SLT0_SCNT ___MBAR+0x908 - -//.global ide_test - -.text -/********************************************************************/ -// sd card -/********************************************************************/ -sd_test: - lea 0x40000,a5 // basis addresse - clr.w MCF_PAD_PAR_DSPI - lea MCF_GPIO_PPDSDR_DSPI,a2 // data in - lea MCF_GPIO_PODR_DSPI,a1 // data out - move.b #0x00,(a1) // alle auf 0 - lea MCF_GPIO_PDDR_DSPI,a0 - move.b #0x7d,(a0) // din = input rest output - - bsr warten_20ms - - move.b #0x7f,(a1) // alle auf 1 - - bsr sd_16clk - -// sd idle -sd_idle: - bsr sd_16clk - moveq #0x40,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x95,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x05,d5 - beq sd_test - cmp.b #0x01,d5 - beq wait_of_aktiv - cmp.b #0x04,d5 - beq sd_init_ok - cmp.b #0x00,d5 - beq sd_init_ok - bra sd_idle - -// acdm 41 -wait_of_aktiv: - bsr sd_16clk - - moveq #0x77,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - bsr sd_16clk - - move.l #0xff,d6 - moveq #0x69,d4 - bsr sd_com - and d5,d6 - moveq #00,d4 - bsr sd_com - and d5,d6 - moveq #00,d4 - bsr sd_com - and d5,d6 - moveq #0x02,d4 - bsr sd_com - and d5,d6 - moveq #00,d4 - bsr sd_com - and d5,d6 - moveq #0x01,d4 - bsr sd_com - and d5,d6 - - bsr sd_receive - - cmp.b #0x00,d5 - beq sd_init_ok - cmp.b #0x05,d5 - beq sd_test - bra wait_of_aktiv - -sd_init_ok: - -// blockgrösse 512byt -sd_bg: - bsr sd_16clk - moveq #0x50,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #02,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_bg - -// read block -sd_rb: - bsr sd_16clk - moveq #0x51,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x08,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_rb - - move.l a5,a4 - move.l #513,d7 -rd_rb: - bsr sd_receive - move.b d5,(a4)+ - subq.l #1,d7 - bne rd_rb - -// write block -sd_wb: - bsr sd_16clk - moveq #0x58,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x08,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_wb - - move.l #513,d7 - moveq.l #0xbb,d4 -wr_wb: - bsr sd_com -// subq.l #1,d4 - moveq #0xbb,d4 - subq.l #1,d7 - bne wr_wb - - bsr sd_receive - -wr_wb_el: - moveq #0xff,d4 - bsr sd_com - cmp.b #0xff,d5 - bne wr_wb_el - - -// read block 2 -sd_rb2: - bsr sd_16clk - moveq #0x51,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x08,d4 - bsr sd_com - moveq #00,d4 - bsr sd_com - moveq #0x01,d4 - bsr sd_com - - bsr sd_receive - - cmp.b #0x00,d5 - bne sd_rb2 - - move.l #513,d7 -rd_rb2: - bsr sd_receive - move.b d5,(a4)+ - subq.l #1,d7 - bne rd_rb2 - -halt -halt - nop - nop - - rts - -sd_receive: - moveq #0xff,d4 - bsr sd_com - cmp.b #0xff,d5 - beq sd_receive - rts - -sd_com: - bclr.b #6,(a1) // nCS=0 -sd_comb: - bsr warten_10us - moveq #7,d2 - clr.l d5 -sd_com_loop: - bclr.b #0,(a1) // default 0 bit senden - btst d2,d4 // ist 0? - beq sd_com2 // ja-> - bset.b #0,(a1) // sonst auf 1 -sd_com2: - bsr sd_clk // clocken - and.l #0x02,d3 - beq sd_com3 - bset.b d2,d5 -sd_com3: - subq.l #1,d2 - bge sd_com_loop - bsr warten_10us - bset.b #6,(a1) // nCS=1 - bset.b #0,(a1) // daten = 0 - bsr warten_200us - rts -// clocken -sd_clk: - tst.b 0xfffff700 // wait - tst.b 0xfffff700 - bset.b #2,(a1) // clock high - tst.b 0xfffff700 // wait - tst.b 0xfffff700 // wait - move.b (a2),d3 // bit holen - bclr.b #2,(a1) // clock low - rts - -sd_16clk: - move.l #160,d0 -sd_16clk1: - bsr sd_clk - subq.l #1,d0 - bne sd_16clk1 - bsr warten_10us - rts -/********************************************************************/ -// video pll -/********************************************************************/ - lea 0xf0000800,a1 - - lea 0xf0000600,a0 - move.l #128,d0 -clr_pll: - bsr wait_pll - clr.w (a0) - addq.l #4,a0 - subq.l #1,d0 - bne clr_pll - - lea 0xf0000600,a0 - bsr wait_pll - move.w #27,0x48(a0) // loopfilter r - bsr wait_pll - move.w #1,0x08(a0) // charge pump I - bsr wait_pll - move.w #12,0x0(a0) // N counter high = 12 - bsr wait_pll - move.w #12,0x40(a0) // N counter low = 12 - bsr wait_pll - move.w #1,0x114(a0) // ck1 bypass - bsr wait_pll - move.w #1,0x118(a0) // ck2 bypass - bsr wait_pll - move.w #1,0x11c(a0) // ck3 bypass - bsr wait_pll - move.w #1,0x10(a0) // ck0 high = 1 - bsr wait_pll - move.w #1,0x50(a0) // ck0 low = 1 - - bsr wait_pll - move.w #1,0x144(a0) // M odd division - bsr wait_pll - move.w #1,0x44(a0) // M low = 1 - - bsr wait_pll - move.w #99,0x04(a0) // M high = 100 - - bsr wait_pll - clr.b (a1) // set - -set_pll: - bsr read_pll - halt - move.w d0,(a0) - bsr wait_pll - clr.b (a1) - bra set_pll - -read_pll: - lea 0xf0000600,a3 - lea 0x10000,a2 - move.l #128,d3 -read1_pll: - bsr wait_pll - move.w (a3),d1 - bsr wait_pll - move.w (a3),(a2) - addq.l #4,a3 - addq.l #4,a2 - subq.l #1,d3 - bne read1_pll - rts -wait_pll: - tst.w (a1) - bmi wait_pll - rts - -/********************************************************************/ -void ide_test(void) -/********************************************************************/ -{ - asm - { - halt - lea 0xfff00000,a0 - lea 0x80000,a1 - move.b #0xec,cmd_reg(a0) //identify devcie cmd - bsr wait_int - bsr ds_rxl -// read sector normal - move.b #1,seccnt(a0) // 1 sector 0x200 - move.b #0x20,cmd_reg(a0) // read cmd - bsr wait_int - bsr ds_rxl -// write pattern 0x400 - move.l a1,a4 //a4=400 - move.l #256,d0 - clr.l d1 -ide_test_loop3: - move.w d1,(a1)+ - addq.l #1,d1 - subq.l #1,d0 - bne ide_test_loop3 - move.l a4,a1 -// write testpattern sector 0x400 - move.b #10,sector(a0) // sector 10 - move.b #1,seccnt(a0) // 1 sector - move.b #0x30,cmd_reg(a0) // write cmd - bsr drq_wait - bsr ds_txl - bsr wait_int - move.l a1,a2 //a2=600 - move.l #256,d4 -loop_rw: -// read testpattern sector 0x600 - move.l a2,a1 -// halt - move.b #10,sector(a0) // sector 10 - move.b #1,seccnt(a0) // 1 sector - move.b #0x20,cmd_reg(a0) // read - bsr wait_int - bsr ds_rxl -// verändere testpattern - move.l a2,a1 -// halt - move.l #256,d0 - move.l #0x100,d1 -verae_loop: - move.w (a1),d2 - add.l d1,d2 - move.w d2,(a1)+ - subq.l #1,d0 - bne verae_loop -// write testpattern sector 0x600 - move.l a2,a1 -// halt - move.b #10,sector(a0) // sector 10 - move.b #1,seccnt(a0) // 1 sector - move.b #0x30,cmd_reg(a0) // write cmd - bsr drq_wait - bsr ds_txl - bsr wait_int - subq.l #1,d4 -// bra verae_loop - bne loop_rw -// sector vergleichen -// halt - move.l #128,d0 - moveq.l #-1,d1 -verg_loop: - move.l (a2)+,d2 - cmp.l (a4)+,d2 - bne error - subq.l #1,d0 - bne verg_loop - clr.l d1 -error: - halt - rts -// sector restauriern - move.b #1,seccnt(a0) // 1 sector - move.b #0x30,cmd_reg(a0) // write - lea -0x400(a1),a1 // vorletzer - bsr drq_wait - bsr ds_txl - - bsr wait_int -// fertig und zurück - nop - rts -// wait auf int -wait_int: - move.b 0xfffffa01,d0 - btst #5,d0 - bne wait_int - move.b status_reg(a0),d0 - rts -// wait auf drq -drq_wait: - move.b status_reg(a0),d0 - btst #3,d0 - beq drq_wait - rts - -// 1 sector lesen word -ds_rx: - move.l #256,d0 -ds_rx_loop: - move.w (a0),(a1)+ - subq.l #1,d0 - bne ds_rx_loop - rts -// 1 sector lesen long -ds_rxl: - move.l #128,d0 -ds_rxl_loop: - move.l (a0),(a1)+ - subq.l #1,d0 - bne ds_rxl_loop - rts -// 1 sector schreiben word -ds_tx: - move.l #256,d0 -ds_tx_loop: - move.w (a1)+,(a0) - subq.l #1,d0 - bne ds_tx_loop - rts -// 1 sector schreiben long -ds_txl: - move.l #128,d0 -ds_txl_loop: - move.l (a1)+,(a0) - subq.l #1,d0 - bne ds_txl_loop - rts - } -} -/********************************************************************/