OpenCores
URL https://opencores.org/ocsvn/ffr16/ffr16/trunk

Subversion Repositories ffr16

[/] [ffr16/] [branches/] [APERT/] [sources/] [hau/] [240603KN/] [compile/] [CFREADER.LOG] - Rev 13

Compare with Previous | Blame | View Log

KCPSM Assembler log file for program 'cfreader.psm'.
Generated by KCPSM version 1.10
Ken Chapman (Xilinx Ltd) 2002.

Addr Code

 00                                  ;--===========================================================================--
 00                                  ;--
 00                                  ;--  CF SECTOR READER
 00                                  ;--
 00                                  ;--  - SEPTEMBER 2002
 00                                  ;--  - UPV / EHU.  
 00                                  ;--
 00                                  ;-- Design units   : FAT FILE LOADER
 00                                  ;--
 00                                  ;-- File name      : cf_sector_reader.txt
 00                                  ;--
 00                                  ;-- Purpose        : READ RAW SECTORS FROM CF
 00                                  ;--                  
 00                                  ;-- Library        : -
 00                                  ;--
 00                                  ;-- Languaje       : ASSEMBLER FOR XILINX PICOBLAZE
 00                                  ;--
 00                                  ;-- Compiler       : KCPSM ASSEMBLER V1.25
 00                                  ;--
 00                                  ;-- Debugger       : PSM DEBUG V1.00
 00                                  ;--===========================================================================--
 00                                  ;-------------------------------------------------------------------------------
 00                                  ;-- Revision list
 00                                  ;-- Version   Author                 Date           Changes
 00                                  ;--
 00                                  ;-- 260902    Armando Astarloa   27 September 2002  -
 00                                  ;-- 241002    Armando Astarloa   27 October   2002  Reset on error
 00                                  ;-- 031202    Armando Astarloa   27 December  2002  Load LBA information from data bus
 00                                  ;-- 120103   Armando Astarloa   12 January   2003  Quit status check when words reading
 00                                  ;-- 290103   Armando Astarloa   29 January   2003  Reset function. Reset after error
 00                                  ;-- 050503   Armando Astarloa   02 May         2003  Allow not all bytes of the sector read.
 00                                  ;--                                                                    do_reset_and_retry state
 00                                  ;-- 160503   Armando Astarloa   15 May         2003  Complete sector reading
 00                                  ;-- 170603   Armando Astarloa   17 June        2003  Bug in words per sector read
 00                                  ;-- 230603   Armando Astarloa   24 June        2003  Quit soft reset (KCPSM v.1002 has reset)
 00                                  ;--                                                                    
 00                                  ;-------------------------------------------------------------------------------
 00                                  ;-- Description    :  DUMMY CF SECTORS READ
 00                                  ;-------------------------------------------------------------------------------
 00                                  ;--
 00                                  ;-- CONSTANT DEFINITIONS
 00                                  ;--
 00                                  CONSTANT DELAY1, 03
 00                                  ; 50 MHZ DELAY1 => T(clk_i) => fastloop=DELAY1*T*2= 120ns sF=1 => delay= sF*fastloop
 00                                  ; 50 MHZ DELAY1=03 => T=20NS => fastloop=3*20*2= 120ns sF=1 => delay= 120ns
 00                                  CONSTANT IDENTIFY_COMMAND, EC
 00                                  CONSTANT WRITE_SECTOR_COMMAND, 30
 00                                  CONSTANT READ_SECTOR_COMMAND, 20
 00                                  CONSTANT WRITE_SEC_FEATURE, 00
 00                                  CONSTANT SOFT_RESET, 04
 00                                  ;--
 00                                  ;-- RAM REGISTERS
 00                                  ;--
 00                                  ;
 00                                  ; s0 
 00                                  ; s1
 00                                  ; s2
 00                                  ; s3 -> WISHBONE CONTROL
 00                                  ; s4 -> REGISTERS STACK
 00                                  ; s5 -> MY_STATUS
 00                                  ;          D3 = ERROR
 00                                  ;          D2 = DATA TRANSFER ALLOWED (0 NOT / 1 YES)
 00                                  ;          D1 = COMMAND ALLOWED (NOT BUSY) (0 NOT / 1 YES)
 00                                  ;          D0 = SECTOR AVAILABLE (0 NOT / 1 YES)
 00                                  CONSTANT SECTOR_AVAILABLE, 01
 00                                  CONSTANT COMMAND_ALLOWED, 02
 00                                  CONSTANT DATA_TRANSFER_ALLOWED, 04
 00                                  CONSTANT ERROR_MY_STATUS, 08
 00                                  ; s6 -> WORDS_READ
 00                                  ; s7 -> LBA_7_0
 00                                  ; s8 -> LBA_15_8
 00                                  ; s9 -> LBA_23_16
 00                                  ; sA -> LD_LBA_27_24
 00                                  ; sB -> data[7:0] in ide
 00                                  ; sC -> data[15:8] in ide
 00                                  ; sD -> data[7:0] out ide
 00                                  ; sE -> data[15:8] out ide
 00                                  ; sF -> acummulator
 00                                  ;
 00                                  ;--
 00                                  ;-- OUTPUT PORTS
 00                                  ;--
 00                                  ;--
 00                                  ;-- IDE INTERFACE PORTS - OUTPUTS
 00                                  ;--
 00                                  CONSTANT DATA_IDE_OUT_7_0, 00
 00                                  CONSTANT DATA_IDE_OUT_15_8, 01
 00                                  CONSTANT IDE_CONTROL_OUT, 02
 00                                  ; D7 = 
 00                                  ; D6 = 
 00                                  ; D5 = 
 00                                  ; D4 = 
 00                                  ; D3 = 
 00                                  ; D2 = 
 00                                  ; D1 = NIOWR
 00                                  ; D0 = NIORD
 00                                  CONSTANT NIOWR, FD
 00                                  CONSTANT NIORD, FE
 00                                  CONSTANT IDE_ADDRESS_OUT, 03
 00                                  ; D7 = 
 00                                  ; D6 = 
 00                                  ; D5 = 
 00                                  ; D4 = NCE1
 00                                  ; D3 = NCE0
 00                                  ; D2 = A2
 00                                  ; D1 = A1
 00                                  ; D0 = A0
 00                                  ;
 00                                  ; WRITE IDE REGISTERS
 00                                  ;
 00                                  ;    NCE1/NCE0/ A2/ A1/ A0
 00                                  CONSTANT CONTROL, 0E                 ; 000   0    1   1   1   0
 00                                  CONSTANT DATA, 10                    ; 000   1    0   0   0   0
 00                                  CONSTANT FEATURE, 11                 ; 000   1    0   0   0   1
 00                                  CONSTANT SECTOR_COUNT, 12            ; 000   1    0   0   1   0
 00                                  CONSTANT LBA_7_0, 13                 ; 000   1    0   0   1   1
 00                                  CONSTANT LBA_15_8, 14                ; 000   1    0   1   0   0
 00                                  CONSTANT LBA_23_16, 15               ; 000   1    0   1   0   1
 00                                  CONSTANT LD_LBA_27_24, 16            ; 000   1    0   1   1   0
 00                                  CONSTANT COMMAND, 17                 ; 000   1    0   1   1   1
 00                                  CONSTANT CF_OFF, 18                  ; 000 1    1   0   0   0              
 00                                  ;
 00                                  ; READ IDE REGISTERS
 00                                  ;    NCE1/NCE0/ A2/ A1/ A0
 00                                  CONSTANT A_STATUS, 0E                ; 000   0    1   1   1   0
 00                                  CONSTANT STATUS, 17                  ; 000   1    0   1   1   1
 00                                  ;--
 00                                  ;-- WISHBONE INTERFACE PORTS - OUTPUTS
 00                                  ;--
 00                                  CONSTANT DATA_WB_OUT_7_0, 04
 00                                  CONSTANT DATA_WB_OUT_15_8, 05
 00                                  CONSTANT CONTROL_WB_OUT, 06
 00                                  ; D7 = 
 00                                  ; D6 = 
 00                                  ; D5 = 
 00                                  ; D4 = 
 00                                  ; D3 = 
 00                                  ; D2 = 
 00                                  ; D1 = TAG0_WORD_AVAILABLE
 00                                  ; D0 = ACK_CF_READER
 00                                  CONSTANT ACK_CF_READER, 01
 00                                  CONSTANT TAG0_WORD_AVAILABLE, 02
 00                                  ;--
 00                                  ;-- BUS CONTROL SIGNALS
 00                                  ;--
 00                                  CONSTANT CONTROL_OUT, 07
 00                                  ; D7 = 
 00                                  ; D6 = 
 00                                  ; D5 = 
 00                                  ; D4 = 
 00                                  ; D3 = 
 00                                  ; D2 = ERROR
 00                                  ; D1 = WB_BUS_WRITE_ENABLE
 00                                  ; D0 = IDE_BUS_WRITE_ENABLE
 00                                  CONSTANT IDE_BUS_WRITE_ENABLE, 01
 00                                  CONSTANT WB_BUS_WRITE_ENABLE, 02
 00                                  CONSTANT ERROR, 04
 00                                  ;--
 00                                  ;-- INPUT PORTS
 00                                  ;--
 00                                  ;--
 00                                  ;-- IDE INTERFACE PORTS - INPUTS
 00                                  ;--
 00                                  CONSTANT DATA_IDE_IN_7_0, 00
 00                                  CONSTANT DATA_IDE_IN_15_8, 01
 00                                  ;--
 00                                  ;-- WISHBONE INTERFACE PORTS - INPUTS
 00                                  ;--
 00                                  CONSTANT CONTROL_WB_IN, 02
 00                                  ; D7 = 
 00                                  ; D6 = 
 00                                  ; D5 = 
 00                                  ; D4 = WB_A0
 00                                  ; D3 = -
 00                                  ; D2 = W_WE
 00                                  ; D1 = TAG1_WORD_REQUEST
 00                                  ; D0 = STROBE_CF_READER
 00                                  ;
 00                                  ; STROBE_CF_READER = 1 & W_WE=1 & WB_A0 = 0 
 00                                  CONSTANT WRITE_LBA_15_0, 05
 00                                  ; STROBE_CF_READER = 1 & W_WE=1 & WB_A0 = 1 
 00                                  CONSTANT WRITE_LBA_27_16, 15
 00                                  CONSTANT STROBE_CF_READER_AND_RD, 01
 00                                  CONSTANT TAG1_WORD_REQUEST, 02
 00                                  CONSTANT W_WE, 04
 00                                  
 00                                  
 00                                  ;--
 00                                  ;-- WISHBONE INTERFACE PORTS - INPUTS
 00                                  ;--
 00                                  CONSTANT DATA_WB_IN_7_0, 03
 00                                  CONSTANT DATA_WB_IN_15_8, 04
 00                                  ;--
 00                                  ;-- REGISTERS INITIALIZATION
 00                                  ;--
 00                  inicialization: 
 00                                  ;
 00                                  ; BUS CONTROL : WRITE NOT ENABLE
 00                                  ;
 00  0F00                            LOAD sF, 00
 01  EF07                            OUTPUT sF, CONTROL_OUT[07]
 02                                  ;
 02                                  ; WISHBONE BUS INIZIALIZATION
 02                                  ;
 02  0F00                            LOAD sF, 00
 03  EF04                            OUTPUT sF, DATA_WB_OUT_7_0[04]
 04  EF05                            OUTPUT sF, DATA_WB_OUT_15_8[05]
 05  EF06                            OUTPUT sF, CONTROL_WB_OUT[06]
 06                                  ;
 06                                  ; IDE BUS INICIALIZATION
 06                                  ;
 06  0F00                            LOAD sF, 00
 07  EF00                            OUTPUT sF, DATA_IDE_OUT_7_0[00]
 08  EF01                            OUTPUT sF, DATA_IDE_OUT_15_8[01]
 09  0F18                            LOAD sF, 18
 0A  EF03                            OUTPUT sF, IDE_ADDRESS_OUT[03]
 0B  0FFF                            LOAD sF, FF
 0C  EF02                            OUTPUT sF, IDE_CONTROL_OUT[02]
 0D                                  ;
 0D                                  ; WAIT FOR 210NS*31 (RESET DELAY)
 0D                                  ;
 0D  0500                            LOAD s5, 00
 0E  0600                            LOAD s6, 00
 0F  0FFF                            LOAD sF, FF
 10  8347                            CALL wait_loop[47]
 11  83CB                            CALL soft_reset[CB]
 12  0FFF                            LOAD sF, FF
 13  8347                            CALL wait_loop[47]
 14  0FFF                            LOAD sF, FF
 15  8347                            CALL wait_loop[47]
 16  0FFF                            LOAD sF, FF
 17  8347                            CALL wait_loop[47]
 18                            main: 
 18                                  ;
 18                                  ; CHECK WISHBONE BUS
 18                                  ;
 18                                  ; wait state for stb_i deassertion
 18                                  ;LOAD sF,01
 18                                  ;CALL wait_loop
 18  CFF1                            AND sF, sF
 19  CFF1                            AND sF, sF
 1A  CFF1                            AND sF, sF
 1B  CFF1                            AND sF, sF
 1C  A302                            INPUT s3, CONTROL_WB_IN[02]
 1D                                  ;
 1D                                  ; CHECK STROBE & READ
 1D                                  ;
 1D  CF30                            LOAD sF, s3
 1E  6F05                            SUB sF, WRITE_LBA_15_0[05]
 1F  912A                            JUMP Z, store_lba_15_0[2A]
 20  CF30                            LOAD sF, s3
 21  6F15                            SUB sF, WRITE_LBA_27_16[15]
 22  912F                            JUMP Z, store_lba_27_16[2F]
 23  CF30                            LOAD sF, s3
 24  6F01                            SUB sF, STROBE_CF_READER_AND_RD[01]
 25  9136                            JUMP Z, put_data_in_wb_bus[36]
 26                                  ;
 26                                  ; IF NOT READ REQUEST MAINTAIN SIGNAL
 26                                  ;
 26  0F00                            LOAD sF, 00
 27  EF07                            OUTPUT sF, CONTROL_OUT[07]
 28  EF06                            OUTPUT sF, CONTROL_WB_OUT[06]
 29  8118                            JUMP main[18]
 2A                  store_lba_15_0: 
 2A                                  ; DATA_WB_IN_7_0 -> s7 LBA_7_0
 2A  A703                            INPUT s7, DATA_WB_IN_7_0[03]
 2B                                  ; DATA_WB_IN_15_8 -> s8 LBA_15_8
 2B  A804                            INPUT s8, DATA_WB_IN_15_8[04]
 2C                                  ; SECTOR AVAILABLE / COMMAND AVAILABLE -> 0
 2C  0F00                            LOAD sF, 00
 2D  C5F1                            AND s5, sF
 2E  813E                            JUMP wishbone_ack[3E]
 2F                 store_lba_27_16: 
 2F                                  ; DATA_WB_IN_7_0 -> s9 LBA_23_16
 2F  A903                            INPUT s9, DATA_WB_IN_7_0[03]
 30                                  ; DATA_WB_IN_15_8 -> s10 LD_LBA_27_24
 30  AA04                            INPUT sA, DATA_WB_IN_15_8[04]
 31                                  ; SECTOR AVAILABLE -> 0
 31                                  ; antes 020503 LOAD sF,FE
 31  0F00                            LOAD sF, 00
 32  C5F1                            AND s5, sF
 33  813E                            JUMP wishbone_ack[3E]
 34              do_reset_and_retry: 
 34  83CB                            CALL soft_reset[CB]
 35  0500                            LOAD s5, 00
 36              put_data_in_wb_bus: 
 36  8396                            CALL read_word_from_cf[96]
 37                                  ; check for error
 37  CF50                            LOAD sF, s5
 38  1F08                            AND sF, ERROR_MY_STATUS[08]
 39  9534                            JUMP NZ, do_reset_and_retry[34]
 3A  EB04                            OUTPUT sB, DATA_WB_OUT_7_0[04]
 3B  EC05                            OUTPUT sC, DATA_WB_OUT_15_8[05]
 3C                                  ;
 3C                                  ; ENABLE WB ENABLE
 3C                                  ;
 3C  0F02                            LOAD sF, WB_BUS_WRITE_ENABLE[02]
 3D  EF07                            OUTPUT sF, CONTROL_OUT[07]
 3E                    wishbone_ack: 
 3E                                  ; 
 3E                                  ; WISHBONE ACK
 3E                                  ;
 3E  0F01                            LOAD sF, ACK_CF_READER[01]
 3F  EF06                            OUTPUT sF, CONTROL_WB_OUT[06]
 40                                  ; null - wait state
 40                                  ;
 40  CFF1                            AND sF, sF
 41  CFF1                            AND sF, sF
 42  CFF1                            AND sF, sF
 43  CFF1                            AND sF, sF
 44                                  ; WISHBONE MASTER MUST CHECK ACK SIGNAL
 44                                  ; IN THE RISING EDGE OF THE CLOCK AND DEASSERT 
 44                                  ; STROBE SIGNAL. SLAVE AUTOMATICALLY DEASSERT ACK
 44                                  ;
 44  0F00                            LOAD sF, 00
 45  EF06                            OUTPUT sF, CONTROL_WB_OUT[06]
 46                                  ;OUTPUT sF,CONTROL_OUT     
 46  8118                            JUMP main[18]
 47                       wait_loop: 
 47                                  ; 
 47                                  ; SOFTWARE DELAY LOOP
 47                                  ; TAKES SLOW LOOP VALUE FROM sF
 47                                  ;
 47                                  ; TWO CYCLES PER INSTRUCTION
 47                                  ;
 47                                  ; SLOW LOOP 3 INSTRUCTIONS * sF
 47                                  ; FAST LOOP 2 INSTRUCTIONS * DELAY1 
 47                                  ; 50 MHZ DELAY1=0A => T=20NS => fl=3*20*2= 120ns sF=1 => delay= 120ns
 47  C1F0                            LOAD s1, sF
 48                       slow_loop: 
 48  0003                            LOAD s0, DELAY1[03]
 49                       fast_loop: 
 49  6001                            SUB s0, 01
 4A  9549                            JUMP NZ, fast_loop[49]
 4B  6101                            SUB s1, 01
 4C  9548                            JUMP NZ, slow_loop[48]
 4D  8080                            RETURN
 4E              write_ide_register: 
 4E                                  ;
 4E                                  ; TAKE ADDRESS FROM SF REGISTER AND IT'S PUT INTO THE PORT
 4E                                  ;
 4E  EF03                            OUTPUT sF, IDE_ADDRESS_OUT[03]
 4F                                  ;
 4F                                  ; DATA OUT IDE
 4F                                  ;
 4F  ED00                            OUTPUT sD, DATA_IDE_OUT_7_0[00]
 50  EE01                            OUTPUT sE, DATA_IDE_OUT_15_8[01]
 51                                  ;
 51                                  ; DATA OUT BUS ENABLE
 51                                  ;
 51  0F01                            LOAD sF, IDE_BUS_WRITE_ENABLE[01]
 52  EF07                            OUTPUT sF, CONTROL_OUT[07]
 53                                  ;
 53                                  ; WAIT FOR 70 NS (MIN)
 53                                  ; (120ns/50Mhz)
 53  0F01                            LOAD sF, 01
 54  8347                            CALL wait_loop[47]
 55                                  ;
 55                                  ; WRITE STROBE ON
 55                                  ;
 55  0FFD                            LOAD sF, NIOWR[FD]
 56  EF02                            OUTPUT sF, IDE_CONTROL_OUT[02]
 57                                  ;
 57                                  ; WAIT FOR 165NS (MIN)
 57                                  ; (240ns/50Mhz)
 57                                  ; 020503
 57  0F02                            LOAD sF, 02
 58  8347                            CALL wait_loop[47]
 59                                  ;
 59                                  ; WRITE STROBE OFF
 59                                  ;
 59  0FFF                            LOAD sF, FF
 5A  EF02                            OUTPUT sF, IDE_CONTROL_OUT[02]
 5B                                  ;
 5B                                  ; WAIT FOR 20NS (MIN)
 5B                                  ; (410ns/50Mhz)
 5B                                  ; 020503
 5B                                  ;LOAD sF,01
 5B                                  ;CALL wait_loop
 5B                                  ;
 5B                                  ; CE AND ADRESSES OFF
 5B                                  ;
 5B  0F18                            LOAD sF, CF_OFF[18]
 5C  EF03                            OUTPUT sF, IDE_ADDRESS_OUT[03]
 5D                                  ;
 5D                                  ; WAIT FOR 30NS (MIN) (if delay of the two previos inst>30ns this is not necessary)
 5D                                  ; (put again 020503)
 5D  0F01                            LOAD sF, 01
 5E  8347                            CALL wait_loop[47]
 5F                                  ;
 5F                                  ; DATA OUT BUS DISABLE
 5F                                  ;
 5F  0F00                            LOAD sF, 00
 60  EF07                            OUTPUT sF, CONTROL_OUT[07]
 61                                  ;
 61                                  ; (put again 020503)
 61  0F02                            LOAD sF, 02
 62  8347                            CALL wait_loop[47]
 63  8080                            RETURN
 64               read_ide_register: 
 64                                  ;
 64                                  ; TAKE ADDRESS FROM SF REGISTER AND IT'S PUT INTO THE PORT
 64                                  ;
 64  EF03                            OUTPUT sF, IDE_ADDRESS_OUT[03]
 65                                  ;
 65                                  ; WAIT FOR 70 NS (MIN)
 65                                  ;
 65  0F01                            LOAD sF, 01
 66  8347                            CALL wait_loop[47]
 67                                  ;
 67                                  ; READ STROBE ON
 67                                  ; reset control_out (140503)
 67  0F00                            LOAD sF, 00
 68  EF07                            OUTPUT sF, CONTROL_OUT[07]
 69  0FFE                            LOAD sF, NIORD[FE]
 6A  EF02                            OUTPUT sF, IDE_CONTROL_OUT[02]
 6B                                  ;
 6B                                  ; WAIT FOR 165NS (MIN)
 6B                                  ; 
 6B  0F02                            LOAD sF, 02
 6C  8347                            CALL wait_loop[47]
 6D                                  ;
 6D                                  ; TAKE DE DATA FROM IDE BUS
 6D                                  ;
 6D  AB00                            INPUT sB, DATA_IDE_IN_7_0[00]
 6E  AC01                            INPUT sC, DATA_IDE_IN_15_8[01]
 6F                                  ;
 6F                                  ; READ STROBE OFF
 6F                                  ;
 6F  0FFF                            LOAD sF, FF
 70  EF02                            OUTPUT sF, IDE_CONTROL_OUT[02]
 71                                  ;
 71                                  ; WAIT FOR 20NS (MIN)
 71                                  ; 
 71                                  ;LOAD sF,01
 71                                  ;CALL wait_loop
 71                                  ;
 71                                  ; CE AND ADRESSES OFF
 71                                  ;
 71  0F18                            LOAD sF, CF_OFF[18]
 72  EF03                            OUTPUT sF, IDE_ADDRESS_OUT[03]
 73                                  ;
 73                                  ; WAIT FOR 20NS (MIN)
 73                                  ; (120ns/50mhz)
 73                                  ;LOAD sF,01
 73                                  ;CALL wait_loop
 73  8080                            RETURN
 74                     read_sector: 
 74                                  ;
 74                                  ; WRITE ATA COMMANDS TO THE CF
 74                                  ;
 74                                  ;
 74                                  ; IDE FEATURE REGISTER
 74                                  ;
 74  0D00                            LOAD sD, WRITE_SEC_FEATURE[00]
 75  0F11                            LOAD sF, FEATURE[11]
 76  834E                            CALL write_ide_register[4E]
 77                                  ;
 77                                  ; IDE SECTOR COUNT REGISTER
 77                                  ;
 77  0D01                            LOAD sD, 01
 78  0F12                            LOAD sF, SECTOR_COUNT[12]
 79  834E                            CALL write_ide_register[4E]
 7A                                  ;
 7A                                  ; IDE LBA_7_0
 7A                                  ;
 7A  CD70                            LOAD sD, s7
 7B  0F13                            LOAD sF, LBA_7_0[13]
 7C  834E                            CALL write_ide_register[4E]
 7D                                  ;
 7D                                  ; IDE LBA_15_8
 7D                                  ;
 7D  CD80                            LOAD sD, s8
 7E  0F14                            LOAD sF, LBA_15_8[14]
 7F  834E                            CALL write_ide_register[4E]
 80                                  ;
 80                                  ; IDE LBA_23_16
 80                                  ;
 80  CD90                            LOAD sD, s9
 81  0F15                            LOAD sF, LBA_23_16[15]
 82  834E                            CALL write_ide_register[4E]
 83                                  ;
 83                                  ; IDE LD_LBA_27_24
 83                                  ;  
 83                                  ; LBA_27_42 OR WITH 1110
 83                                  ;                  BIT7 : 1
 83                                  ;                  BIT6 : LBA=1
 83                                  ;                  BIT5 : 1
 83                                  ;                  BIT4 : DRV=0
 83                                  ;
 83                                  ;
 83  CFA0                            LOAD sF, sA
 84  2FE0                            OR sF, E0
 85  CDF0                            LOAD sD, sF
 86  0F16                            LOAD sF, LD_LBA_27_24[16]
 87  834E                            CALL write_ide_register[4E]
 88                                  ;
 88                                  ; IDE READ SECTOR COMMAND
 88                                  ;
 88  0D20                            LOAD sD, READ_SECTOR_COMMAND[20]
 89  0F17                            LOAD sF, COMMAND[17]
 8A  834E                            CALL write_ide_register[4E]
 8B                                  ;
 8B                                  ; PUT SECTOR ALLOWED FLAG INTO MY_STATUS
 8B                                  ;
 8B                                  ; 290103 Added data available check
 8B              retry_status_check: 
 8B  83B8                            CALL cf_status_check[B8]
 8C  CF50                            LOAD sF, s5
 8D  1F08                            AND sF, ERROR_MY_STATUS[08]
 8E  9480                            RETURN NZ
 8F  0F04                            LOAD sF, DATA_TRANSFER_ALLOWED[04]
 90  CF51                            AND sF, s5
 91                                  ; LOOPS UNTIL SECTOR DATA IS AVAILABLE
 91  918B                            JUMP Z, retry_status_check[8B]
 92  0F01                            LOAD sF, SECTOR_AVAILABLE[01]
 93  C5F2                            OR s5, sF
 94                                  ;
 94                                  ; RESET WORDS READ REGISTER
 94                                  ;
 94  06FF                            LOAD s6, FF
 95  8080                            RETURN
 96               read_word_from_cf: 
 96                                  ;
 96                                  ; CHECK IF THE SECTOR IS AVAILABLE
 96                                  ;
 96  0F01                            LOAD sF, SECTOR_AVAILABLE[01]
 97  CF51                            AND sF, s5
 98                                  ;
 98                                  ; IF SECTOR_AVAILABLE=0 JUMP TO READ_NEW_SECTOR
 98                                  ;
 98  93AC                            CALL Z, read_new_sector[AC]
 99                                  ; check for error
 99  CF50                            LOAD sF, s5
 9A  1F08                            AND sF, ERROR_MY_STATUS[08]
 9B  9480                            RETURN NZ
 9C                                  ;retry_status_check:
 9C                                  ;CALL cf_status_check
 9C                                  ;
 9C                                  ; CHECK IF DATA IS AVAILABLE
 9C                                  ;
 9C                                  ; 120103 - changed . When there is sector
 9C                                  ; available in the cf ram buffer it is not
 9C                                  ; necessary to check neither bsy or drq
 9C                                  ; only read words with the correct timing paramenters
 9C                                  ;
 9C                                  ;LOAD sF,DATA_TRANSFER_ALLOWED
 9C                                  ;AND sF,s5
 9C                                  ; LOOPS UNTIL SECTOR DATA IS AVAILABLE
 9C                                  ;JUMP Z,retry_status_check
 9C                                  ; end 120103
 9C                                  ;
 9C                                  ; IF 256 WORD READ -> SECTOR AVAILABLE=0
 9C                                  ;
 9C  83A5                            CALL read_word[A5]
 9D  C661                            AND s6, s6
 9E  91A1                            JUMP Z, reset_word_READ[A1]
 9F                                  ;
 9F                                  ; DECREMENT NUMBER OF WORDS READ
 9F                                  ;
 9F  6601                            SUB s6, 01
 A0  8080                            RETURN
 A1                 reset_word_READ: 
 A1                                  ;
 A1                                  ; IF 256 WORD READ -> SECTOR AVAILABLE=0
 A1                                  ;
 A1                                  ;ADD s7,01
 A1  06FF                            LOAD s6, FF
 A2  0FFE                            LOAD sF, FE
 A3  C5F1                            AND s5, sF
 A4  8080                            RETURN
 A5                                  
 A5                       read_word: 
 A5                                  ;
 A5                                  ; READ WORDS FROM IDE DATA REGISTERS
 A5                                  ; 
 A5  0F10                            LOAD sF, DATA[10]
 A6  8364                            CALL read_ide_register[64]
 A7                                  ;
 A7                                  ; DATA ARE IN sB , sC
 A7                                  ;
 A7                                  ; DATA AVAILABLE SIGNAL IS STORED
 A7  0F02                            LOAD sF, TAG0_WORD_AVAILABLE[02]
 A8  EF06                            OUTPUT sF, CONTROL_WB_OUT[06]
 A9  8080                            RETURN
 AA                 dummy_word_read: 
 AA  83A5                            CALL read_word[A5]
 AB  6601                            SUB s6, 01
 AC                 read_new_sector: 
 AC  83B8                            CALL cf_status_check[B8]
 AD  CF50                            LOAD sF, s5
 AE  1F04                            AND sF, DATA_TRANSFER_ALLOWED[04]
 AF                                  ;loops until previous non READ words are READ
 AF  95AA                            JUMP NZ, dummy_word_read[AA]
 B0  CF50                            LOAD sF, s5
 B1  1F08                            AND sF, ERROR_MY_STATUS[08]
 B2  9480                            RETURN NZ
 B3  CF50                            LOAD sF, s5
 B4  1F02                            AND sF, COMMAND_ALLOWED[02]
 B5                                  ; loops until commands are allowed
 B5  06FF                            LOAD s6, FF
 B6  91AC                            JUMP Z, read_new_sector[AC]
 B7  8174                            JUMP read_sector[74]
 B8                 cf_status_check: 
 B8                                  ;
 B8                                  ; CF STATUS REGISTER READ
 B8                                  ;
 B8  0F17                            LOAD sF, STATUS[17]
 B9  8364                            CALL read_ide_register[64]
 BA                                  ;
 BA                                  ; ERROR 
 BA                                  ;
 BA                                  ;    BSY/DRDY/DWF/DSC/DRQ/CORR/0/ERR
 BA                                  ; MASK    0    0   0   0   0    0 0   1    
 BA                                  ; ERR-ST  X    X   X   X   X    X X   1
 BA                                  ; AND     0    0   0   0   0    0 0   1
 BA  0F01                            LOAD sF, 01
 BB  CFB1                            AND sF, sB
 BC  95C6                            JUMP NZ, put_error_code[C6]
 BD                                  ;
 BD                                  ; DATA REQUEST MASK (READY=1 : BUSY=0 : DRQ=1) 
 BD                                  ;
 BD                                  ;    BSY/DRDY/DWF/DSC/DRQ/CORR/0/ERR
 BD                                  ; MASK    1    1   0   0   1    0 0   1    
 BD                                  ; DRQ-ST  0    1   X   X   1    X X   0
 BD                                  ; AND     0    1   0   0   1    0 0   0
 BD  0FC9                            LOAD sF, C9
 BE  CFB1                            AND sF, sB
 BF  6F48                            SUB sF, 48
 C0  91DA                            JUMP Z, put_data_request_allowed[DA]
 C1                                  
 C1                                  ;
 C1                                  ; COMMAND ALLOWED MASK (READY=1 : BUSY=0) 
 C1                                  ;
 C1                                  ;    BSY/DRDY/DWF/DSC/DRQ/CORR/0/ERR
 C1                                  ; MASK    1    1   0   0   0    0 0   1    
 C1                                  ; CMD-ST  0    1   X   X   0    X X   0
 C1                                  ; AND     0    1   0   0   0    0 0   0
 C1  0FC1                            LOAD sF, C1
 C2  CFB1                            AND sF, sB
 C3  6F40                            SUB sF, 40
 C4  91DE                            JUMP Z, put_command_allowed[DE]
 C5                                  ;
 C5                                  ; ELSE DATA_TRANSFER_ALLOWED & COMMAND_ALLOWED => 0
 C5                                  ;
 C5                                  ;JUMP put_error_code
 C5                                  ; REVISAR ???
 C5                                  ;AND s5,01
 C5  8080                            RETURN
 C6                  put_error_code: 
 C6                                  ; 
 C6                                  ; ERROR SIGNAL
 C6                                  ;
 C6                                  ; PUT ERROR CODE
 C6                                  ;
 C6  0F04                            LOAD sF, 04
 C7  EF07                            OUTPUT sF, CONTROL_OUT[07]
 C8  83CB                            CALL soft_reset[CB]
 C9  0508                            LOAD s5, ERROR_MY_STATUS[08]
 CA  8080                            RETURN
 CB                                  ;JUMP inicialization (STACK OVERFLOW???)
 CB                      soft_reset: 
 CB  0D04                            LOAD sD, SOFT_RESET[04]
 CC  0F0E                            LOAD sF, CONTROL[0E]
 CD  834E                            CALL write_ide_register[4E]
 CE  0FFF                            LOAD sF, FF
 CF  8347                            CALL wait_loop[47]
 D0  0FFF                            LOAD sF, FF
 D1  8347                            CALL wait_loop[47]
 D2  0FFF                            LOAD sF, FF
 D3  8347                            CALL wait_loop[47]
 D4  0FFF                            LOAD sF, FF
 D5  8347                            CALL wait_loop[47]
 D6  0D00                            LOAD sD, 00
 D7  0F0E                            LOAD sF, CONTROL[0E]
 D8  834E                            CALL write_ide_register[4E]
 D9  8080                            RETURN
 DA        put_data_request_allowed: 
 DA                                  ;
 DA                                  ; DRQ ALLOW -> MY STATUS REGISTER
 DA                                  ;
 DA  15FD                            AND s5, FD
 DB  0F04                            LOAD sF, DATA_TRANSFER_ALLOWED[04]
 DC  C5F2                            OR s5, sF
 DD  8080                            RETURN
 DE             put_command_allowed: 
 DE                                  ;
 DE                                  ; DRQ ALLOW -> MY STATUS REGISTER
 DE                                  ;
 DE  15FB                            AND s5, FB
 DF  0F02                            LOAD sF, COMMAND_ALLOWED[02]
 E0  C5F2                            OR s5, sF
 E1  8080                            RETURN
 FF                                  ADDRESS FF
 FF                       interrupt: 
 FF  80F0                            RETURNI ENABLE

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.