URL
https://opencores.org/ocsvn/ffr16/ffr16/trunk
Subversion Repositories ffr16
[/] [ffr16/] [branches/] [APERT/] [sources/] [fpu/] [050803KN/] [compile/] [PASS2.DAT] - Rev 2
Go to most recent revision | Compare with Previous | Blame | View Log
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; FAT16 READER V.050303 - Armando Astarloa - 16 BIT VER.
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; APERT - UPV/EHU 2003 - DISTRIBUTED UNDER GPL LICENCE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0 -> TMP0 s1 -> TMP1 s2 -> TMP2 s3 -> TMP3 s4 -> TMP4 / SECTORS_PER_CLUSTER_READED s5 -> TMP5/SECTOR_WORDS_READED (256 TO 0)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s6 -> TMP s7 -> SECTORS_PER_CLUSTER s8 -> CLUSTER_BEGIN_LBA0 (FAT) s9 -> CLUSTER_BEGIN_LBA1 sA -> CLUSTER_BEGIN_LBA2
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; sB -> CLUSTER_BEGIN_LBA3 sC -> ROOT_DIRECTORY_FIRST_CLUSTER0 (SUPPOSED LESS THAN 256 - USUALLY 2)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; sD -> data[7:0] WB MASTER sE -> data[15:8] WB MASTER sF -> acummulator
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-DATA_WB_OUT_7_0_MASTER
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-DATA_WB_OUT_15_8_MASTER
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-CONTROL_WB_OUT_MASTER
OPERAND2-02
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D7 = D6 = D5 = D4 = D3 = D2 = A0_MASTER D1 = W_WE_MASTER D0 = STB_O_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STROBE_O_MASTER = 1 & W_WE=0 & WB_A0 = 0
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-READ_SLAVE
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STROBE_O_MASTER = 1 & W_WE=1 & WB_A0 = 0
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-WRITE_LBA_15_0
OPERAND2-03
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STROBE_CF_READER = 1 & W_WE=1 & WB_A0 = 1
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-WRITE_LBA_27_16
OPERAND2-07
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- SLAVE INTERFACE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-DATA_WB_OUT_7_0_SLAVE
OPERAND2-03
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-DATA_WB_OUT_15_8_SLAVE
OPERAND2-04
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-CONTROL_WB_OUT_SLAVE
OPERAND2-05
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D7 = D6 = D5 D4 = D3 =
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D2 = TAG1_ERROR
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D1 = TAG0_WORD_AVAILABLE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D0 = ACK_O_SLAVE
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-ACK_O_SLAVE
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TAG0_WORD_AVAILABLE
OPERAND2-02
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-ERROR
OPERAND2-04
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- BUS CONTROL SIGNALS
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-CONTROL_OUT_MASTER
OPERAND2-06
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D7 = D6 = D5 = D4 = D3 = D2 = D1 =
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D0 = WB_BUS_MASTER_WRITE_ENABLE
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-WB_BUS_MASTER_WRITE_ENABLE
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-CONTROL_OUT_SLAVE
OPERAND2-07
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D7 = D6 = D5 = D4 = D3 = D2 = D1 =
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D0 = WB_BUS_SLAVE_WRITE_ENABLE
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-WB_BUS_SLAVE_WRITE_ENABLE
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- EXTERNAL REGISTERS FOR MORE DATA ALLOCATION (OTHER OPTION IS THE USE OF
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- ANOTHER BLOCK RAM IF IT IS AVALIABLE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_0
OPERAND2-08
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_1
OPERAND2-09
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_2
OPERAND2-0A
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_3
OPERAND2-0B
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_4
OPERAND2-0C
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_5
OPERAND2-0D
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_6
OPERAND2-0E
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_OUT_7
OPERAND2-0F
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- INPUT PORTS
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- WISHBONE INTERFACE PORTS - INPUTS
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-CONTROL_WB_IN_MASTER
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D7 = D6 = D5 = D4 = D3 = D2 =
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D1 = ERROR_INPUT
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D0 = ACK_I_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-ACK_I_MASTER
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-ERROR_INPUT
OPERAND2-02
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-CONTROL_WB_IN_SLAVE
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D7 = D6 = D5 = D4 = D3 = D2 =
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D1 = -
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; D0 = STB_I_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-STB_I_SLAVE
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;CONSTANT TAG0_FORCE_RESET,02
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- WISHBONE INTERFACE PORTS - INPUTS
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-DATA_WB_IN_7_0_MASTER
OPERAND2-02
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-DATA_WB_IN_15_8_MASTER
OPERAND2-03
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- EXTERNAL REGISTERS FOR MORE DATA ALLOCATION (OTHER OPTION IS THE USE OF
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- ANOTHER BLOCK RAM IF IT IS AVALIABLE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_0
OPERAND2-04
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_1
OPERAND2-05
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_2
OPERAND2-06
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_3
OPERAND2-07
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_4
OPERAND2-08
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_5
OPERAND2-09
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_6
OPERAND2-0A
COMMENT-
LABEL-
INSTRUCTION-CONSTANT
OPERAND1-TMP_IN_7
OPERAND2-0B
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;-- REGISTERS INITIALIZATION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;--
LABEL-inicialization
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WISHBONE INTERFACES INIZIALIZATION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-DATA_WB_OUT_7_0_MASTER
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-DATA_WB_OUT_15_8_MASTER
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-DATA_WB_OUT_7_0_SLAVE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-DATA_WB_OUT_15_8_SLAVE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_SLAVE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WAIT FOR 410NS*3 (RESET DELAY)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-main
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; PROCESS MASTER BOOT RECORD
LABEL-
INSTRUCTION-CALL
OPERAND1-process_master_boot_record
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; PROCESS ROOT DIRECTORY
LABEL-
INSTRUCTION-CALL
OPERAND1-process_root_directory
OPERAND2-
COMMENT-
LABEL-start
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-cluster_2_lba
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;CALL write_lba_to_slave
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; sector_per_cluster -> sector_per_cluster_readed
LABEL-
INSTRUCTION-LOAD
OPERAND1-s4
OPERAND2-s7
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; 256 -> (s6) SECTOR_WORDS_READED
LABEL-
INSTRUCTION-CALL
OPERAND1-read_sector
OPERAND2-
COMMENT-
LABEL-idle
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-s6
OPERAND2-CONTROL_WB_IN_SLAVE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CHECK STB INPUT
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CONTROL_WB_IN_SLAVE-> TMP (s6)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; IF STB=1 GO TO THE NEXT STATE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; IF STB=0 GO TO THE IDLE STATE
LABEL-
INSTRUCTION-AND
OPERAND1-s6
OPERAND2-STB_I_SLAVE
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-Z
OPERAND2-idle
COMMENT-
LABEL-transfer_word_to_master
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-write_a_word_to_master
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (SECTOR WORDS READED)-1
LABEL-
INSTRUCTION-SUB
OPERAND1-s5
OPERAND2-01
COMMENT-
LABEL-check_sectors_words_readed
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; IF sector_words_readed = 0 THEN READ_NEW_SECTOR
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; IF sector_words_readed > 0 THEN TRANSFER_WORD_TO_MASTER
LABEL-
INSTRUCTION-AND
OPERAND1-s5
OPERAND2-s5
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-Z
OPERAND2-check_sector_per_cluster_readed
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-idle
OPERAND2-
COMMENT-
LABEL-track_new_cluster
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; save the number of dummy reads that must be done when the fat sector will be readed
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; an are stored into s5 register
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; in s0 bits 6-0 of the cluster number (offset in the sector -> 256 words-fat16 entries)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; as is each read operation a word is readed no multiplication is needed
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; RESTORE CLUSTER NUMBER
LABEL-
INSTRUCTION-INPUT
OPERAND1-s0
OPERAND2-TMP_IN_4
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-s1
OPERAND2-TMP_IN_5
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-s2
OPERAND2-TMP_IN_6
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-s3
OPERAND2-TMP_IN_7
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; compose LBA address of the sector of the fat that must be readed
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; SHIFT RIGHT 15-8 TO 7-0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-07
COMMENT-
LABEL-do_shift
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SR0
OPERAND1-s3
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; uses the carry for the MSB and stores LSB into the carry
LABEL-
INSTRUCTION-SRA
OPERAND1-s2
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SRA
OPERAND1-s1
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SRA
OPERAND1-s0
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-sF
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-do_shift
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-add_load_fat_begin_lba
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; adds fat_begin_lba to the sector relative to the fat obteined from the cluster
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; now there is the lba of the FAT sector that must be readed in s0,s1,s2,s3
LABEL-
INSTRUCTION-CALL
OPERAND1-write_lba_to_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- DUMMY READ OF THE WORDS OF THE SECTOR TILL THE ONE OF THE CLUSTER INTEGER
LABEL-
INSTRUCTION-INPUT
OPERAND1-sF
OPERAND2-TMP_IN_4
COMMENT-
LABEL-
INSTRUCTION-AND
OPERAND1-sF
OPERAND2-7F
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s0) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s1) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ 2 BYTES
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s0
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s1
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s2) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s3) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ 2 BYTES
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CHECK IF ITS THE LAST ONE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CB3-CL2-CB1-CB0 IN FAT LITTLE ENDIAN ORDER CB0-CB1 CB2-CB3
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-sF
OPERAND2-FF
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-continue_file_processing
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-sF
OPERAND2-FF
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-continue_file_processing
COMMENT-
LABEL-file_end
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; infinite loop (file readed and tranferred)
LABEL-
INSTRUCTION-JUMP
OPERAND1-file_end
OPERAND2-
COMMENT-
LABEL-continue_file_processing
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; in s0,s1 is the cluster name
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (SECTOR WORDS READED)= 256
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; sector_per_cluster -> sector_per_cluster_readed
LABEL-
INSTRUCTION-LOAD
OPERAND1-s2
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s3
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s4
OPERAND2-s7
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-cluster_2_lba
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-read_sector
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-add_load_fat_begin_lba
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-sF
OPERAND2-TMP_IN_0
COMMENT-
LABEL-
INSTRUCTION-ADD
OPERAND1-s0
OPERAND2-sF
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-sF
OPERAND2-TMP_IN_1
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s1
OPERAND2-sF
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-sF
OPERAND2-TMP_IN_2
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s2
OPERAND2-sF
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-sF
OPERAND2-TMP_IN_3
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s3
OPERAND2-sF
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-check_sector_per_cluster_readed
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; IF sector_per_cluster_readed = 0 THEN TRACK_NEW_CLUSTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; IF sector_per_cluster_readed > 0 THEN CHECK SECTOR WORDS READED
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sector_per_cluster_readed)-1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (SECTOR WORDS READED)= 256
LABEL-
INSTRUCTION-SUB
OPERAND1-s4
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-AND
OPERAND1-s4
OPERAND2-s4
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-Z
OPERAND2-track_new_cluster
COMMENT-
LABEL-read_new_sector
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (SECTOR WORDS READED)= 256
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; increment LBA
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; sector_per_cluster -> sector_per_cluster_readed-1
LABEL-
INSTRUCTION-ADD
OPERAND1-s0
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s1
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s2
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s3
OPERAND2-00
COMMENT-
LABEL-read_sector
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s5
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-write_lba_to_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- PROCESS MASTER BOOT RECORD (READ LBA BEGIN OF THE FIRST PARTITION)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-process_master_boot_record
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; LOAD LBA FOR MBR READ
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-s0
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s1
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s2
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s3
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-write_lba_to_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; information of the lba begin for the first partition
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; has an offset of 454 bytes -> 227(0xE3) words
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-E3
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- MBR READ - Partition_LBA_Begin EXTRACTION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s0) lba
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[15:8] WB MASTER -> (s1) lba
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s2) lba
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[15:8] WB MASTER -> (s3) lba
LABEL-
INSTRUCTION-CALL
OPERAND1-store_all_temporal_registers
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s8
OPERAND2-s0
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s9
OPERAND2-s1
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sA
OPERAND2-s2
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sB
OPERAND2-s3
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; NOW IS THE LBA_BEGIN ON THE TMP REGISTERS
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --------------------
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ FIRST SECTOR (FAT32 VOLUMEN ID) OF THE PARTITION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; ---------------------
LABEL-
INSTRUCTION-CALL
OPERAND1-write_lba_to_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> SECTORS_PER_CLUSTER (OFFSET 0x0D)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x0D (13) => READ 13 bytes -> 6(0x06) words and drop LSB in the next
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-06
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s7) SECTORS PER CLUSTER
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s7
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> Number_of_Reserved_Sectors (2 bytes) (OFFSET 0x0E)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x0E (14) => READ 2 bytes -> 1(0x01) words
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[15:8] WB MASTER -> (s6) TEMPORAL REGISTER
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s6
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s4) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-s4
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;fat_begin_lba = Partition_LBA_Begin + Number_of_Reserved_Sectors
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-ADD
OPERAND1-s8
OPERAND2-s6
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s9
OPERAND2-s4
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-sA
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-sB
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; store fat_begin_lba in external registers
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s8
OPERAND2-TMP_OUT_0
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s9
OPERAND2-TMP_OUT_1
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sA
OPERAND2-TMP_OUT_2
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sB
OPERAND2-TMP_OUT_3
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;cluster_begin_lba = Partition_LBA_Begin + Number_of_Reserved_Sectors +
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (Number_of_FATs * Sectors_Per_FAT)+ RootDirSectors;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;cluster_begin_lba = fat_begin_lba + (Number_of_FATs * Sectors_Per_FAT)+ RootDirSectors;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> Number_of_Fats (OFFSET 0x10) (always 2)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x10 (16) => READ 2 bytes -> 1(0x01) words
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s6) TEMPORAL REGISTER
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s6
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; FOR FAT16 => NUMBER OF SECTORS OCCUPIED BY THE ROOT DIRECTORY (BYTES_PER_SEC=512)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> RootEntCnt (OFFSET 0x11) (FAT16 PROCESSING)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; RootDirSectors=((BPB_RootEntCnt*32)+(BPB_BytesPerSec-1))/BPB_BytesPerSec
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x11 (17) => READ 1 bytes
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s0) TEMPORAL REGISTER
LABEL-
INSTRUCTION-LOAD
OPERAND1-s0
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[15:0] WB MASTER -> (sD) TEMPORAL REGISTER - offset 0x12 (18) => READ 1 bytes
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s1
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; MULTIPLY BY 32 (100000) 5 SHIFTS TO THE LEFT
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-05
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; LSB '0'
LABEL-mult_32
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SL0
OPERAND1-s0
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CARRY -> LSB , MSB -> CARRY
LABEL-
INSTRUCTION-SLA
OPERAND1-s1
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-sF
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-mult_32
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;BPB_RootEntCnt*32+(BPB_BytesPerSec-1) 511 (0x1FF)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;ADD s0,FF (if rounds up => not necessary??)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;ADDCY s1,01
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;/BPB_BytesPerSec (512) (1000000000)9 SHIFTS TO THE RIGHT
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-09
COMMENT-
LABEL-div_512
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; uses the carry for the MSB and stores LSB into the carry
LABEL-
INSTRUCTION-SR0
OPERAND1-s1
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SRA
OPERAND1-s0
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-sF
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-div_512
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; ROUNDs UP
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;ADD s0,01
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;ADDCY s1,00
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;fat_begin_lba + RootDirSectors
LABEL-
INSTRUCTION-ADD
OPERAND1-s8
OPERAND2-s0
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s9
OPERAND2-s1
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-sA
OPERAND2-s2
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-sB
OPERAND2-s3
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> Sectors_per_fat (OFFSET 0x24)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x16 (22) => READ 2 bytes -> 01(0x01) words
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-store_all_temporal_registers
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (Number_of_FATs * Sectors_Per_FAT)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; Number_of_FATs = 2 (10) . Do a shift to the left of the Sectors_Per_Fat
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; *** FAT16 = Sectors_per_fat(BPB_FATSz16)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; LSB '0'
LABEL-
INSTRUCTION-SL0
OPERAND1-s0
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CARRY -> LSB , MSB -> CARRY
LABEL-
INSTRUCTION-SLA
OPERAND1-s1
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;SLA s2 for fat16 only 2 bytes
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;SLA s3
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; fat_begin_lba + RootDirSectors + (Number_of_FATs * Sectors_Per_FAT)
LABEL-
INSTRUCTION-ADD
OPERAND1-s8
OPERAND2-s0
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s9
OPERAND2-s1
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-sA
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-sB
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; cluster_begin_lba is stored in s8, s9, sA, SB
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; FOR FAT16 ROOT DIRECTORY POSITION IS FIXED
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; root_first_lba = fat_begin_lba(in external regs) + (Number_of_FATs * Sectors_Per_FAT) (s0,s1,s2,s3)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-s2
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s3
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-add_load_fat_begin_lba
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0,s1,s2,s3 have Root directory begin lba
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-store_all_temporal_registers
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ 2 BYTES
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s0) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s1) TEMPORAL REGISTER
LABEL-
INSTRUCTION-LOAD
OPERAND1-s0
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s1
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s2) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> (s3) TEMPORAL REGISTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ 2 BYTES
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s2
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s3
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-process_root_directory
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; INPUT :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0,s1,s2,s3 root directory lba (FAT16- FIXED)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CALL cluster_2_lba
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; now s0,s1,s2,s3 contains the lba for the root directory
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; the first 32 byte record on the sector must be the root directory information
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; check if EOF (first byte of the 32 bytes is 0)
LABEL-
INSTRUCTION-CALL
OPERAND1-write_lba_to_slave
OPERAND2-
COMMENT-
LABEL-check_for_a_file
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s6) TEMPORAL REGISTER
LABEL-
INSTRUCTION-LOAD
OPERAND1-s6
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-s6
COMMENT-
LABEL-
INSTRUCTION-AND
OPERAND1-sF
OPERAND2-sF
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; if sF=0 the is not directory => error
LABEL-
INSTRUCTION-JUMP
OPERAND1-Z
OPERAND2-put_error_code
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; check that is not a deleted entry
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s6) TEMPORAL REGISTER
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-E5
COMMENT-
LABEL-
INSTRUCTION-AND
OPERAND1-sF
OPERAND2-s6
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; if s6=E5 is a deteled entry => check for new one (offset => sF)
LABEL-
INSTRUCTION-JUMP
OPERAND1-Z
OPERAND2-check_next_directory_entry
COMMENT-
LABEL-check_attribute
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; ATTRIBUTE -> OFFSET Bh
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; check that is not a directory or LONG NAME
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; 00arshdv - DV for long name - D for directory
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> (s6) TEMPORAL REGISTER
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-04
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s6
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-03
COMMENT-
LABEL-
INSTRUCTION-AND
OPERAND1-sF
OPERAND2-s6
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-check_next_directory_entry_attribute
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; if s6=0 that is not a file => error
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;JUMP Z,check_next_directory_entry
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; check that is not a directory
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; check that is a file (short filename entry)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; in other case error
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ CLUSTER INFORMATION FOR THE FILE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-CALL
OPERAND1-read_dir_cluster_hi_cluster_low
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-check_next_directory_entry
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; go fwd 11 words
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-05
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-check_next_directory_entry_attribute
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; go fwd 5 words
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-0A
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-check_for_a_file
OPERAND2-
COMMENT-
LABEL-read_dir_cluster_hi_cluster_low
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; INPUT :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; before arrive here first two bytes of the directory
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; structure must be readed
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; OUTPUT :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0,s1 : CLUS_LOW
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s2,s3 : CLUS_HI
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> cluster_HI (OFFSET 0x14)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x14 (20) => READ 18 bytes -> 9(0x09) words
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-04
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> s2
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> s3
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ 2 BYTES
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s2
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s3
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sE
OPERAND2-TMP_OUT_7
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ -> cluster_low(OFFSET 0x1A)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; offset 0x1A (26) => READ 4 bytes -> 2(0x02) words
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-02
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-do_dummy_reads_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sD) data[7:0] WB MASTER -> s0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (sE) data[7:0] WB MASTER -> s1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; READ 2 BYTES
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s0
OPERAND2-sD
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s1
OPERAND2-sE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0,s1 clus_low s3,s4 - clus_high
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- MBR READ OPERATION - LBA BEGIN DETERMINATION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; '00' -> LBA_7_0,LBA_15_8,LBA_23_16,LD_LBA_27_24
LABEL-cluster_2_lba
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- LBA ADDRESS DETERMINATION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; lba_addr = cluster_begin_lba + (cluster_number - 2) * sectors_per_cluster;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; INPUT :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0 : CLUSTER_NUMBER0, s1 : CLUSTER_NUMBER1, s2: CLUSTER_NUMBER2, s3 : CLUSTER_NUMBER3
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; OUTPUT :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; s0 : LBA_ADDR_7_0 TMP1, s1 : LBA_ADDR_15_8, s2 : LBA_ADDR_24_16, s3 : LBA_ADDR_27_24
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; cluster_number - 2
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s0
OPERAND2-TMP_OUT_4
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s1
OPERAND2-TMP_OUT_5
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s2
OPERAND2-TMP_OUT_6
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s3
OPERAND2-TMP_OUT_7
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-s0
OPERAND2-02
COMMENT-
LABEL-
INSTRUCTION-SUBCY
OPERAND1-s1
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-SUBCY
OPERAND1-s2
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-SUBCY
OPERAND1-s3
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (cluster_number - 2) * sectors_per_cluster(s7);
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; to perform the multiplication as sector_per_cluster is 2 multiple must be known
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; who many times must be shifted
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; (use sD as temporal register)
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-08
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sD
OPERAND2-s7
COMMENT-
LABEL-multiply
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SR0
OPERAND1-sD
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; loop until detection of the 1 (2 multiple) - Add timeout!!!
LABEL-
INSTRUCTION-JUMP
OPERAND1-C
OPERAND2-add_cluster_begin_lba
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; LSB '0'
LABEL-
INSTRUCTION-SL0
OPERAND1-s0
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CARRY -> LSB , MSB -> CARRY
LABEL-
INSTRUCTION-SLA
OPERAND1-s1
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SLA
OPERAND1-s2
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SLA
OPERAND1-s3
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-multiply
OPERAND2-
COMMENT-
LABEL-add_cluster_begin_lba
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; lba_addr (TMP0,TMP1,TMP2,TMP3)= cluster_begin_lba + (cluster_number - 2) * sectors_per_cluster;
LABEL-
INSTRUCTION-ADD
OPERAND1-s0
OPERAND2-s8
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s1
OPERAND2-s9
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s2
OPERAND2-sA
COMMENT-
LABEL-
INSTRUCTION-ADDCY
OPERAND1-s3
OPERAND2-sB
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- WRITE A WORD INTO THE WB SLAVE INTERFACE (TO THE MASTER)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; INPUTS :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP0 : LSB TO DATA_WB_OUT_7_0_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP1 : MSB TO DATA_WB_OUT_15_8_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-write_a_word_to_master
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP0 => DATA_WB_OUT_7_0_SLAVE
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sD
OPERAND2-DATA_WB_OUT_7_0_SLAVE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; 00 => DATA_WB_OUT_15_8_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;LOAD sF,00 -- 8 BIT VERSION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;OUTPUT sF,DATA_WB_OUT_15_8_SLAVE -- 8 BIT VERSION
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sE
OPERAND2-DATA_WB_OUT_15_8_SLAVE
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-write_a_byte_to_master
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CHECK STB INPUT | CONTROL_WB_IN_SLAVE-> TMP (s6)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-wait_strobe
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-s6
OPERAND2-CONTROL_WB_IN_SLAVE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-AND
OPERAND1-s6
OPERAND2-STB_I_SLAVE
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-Z
OPERAND2-wait_strobe
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP1 => DATA_WB_OUT_7_0_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; OUTPUT sE,DATA_WB_OUT_7_0_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; 00 =>DATA_WB_OUT_15_8_SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;LOAD sF,00 -- 8 BIT VERSION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;OUTPUT sF,DATA_WB_OUT_15_8_SLAVE -- 8 BIT VERSION
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;CALL write_a_byte_to_master -- 8 BIT VERSION
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-write_a_byte_to_master
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WB SLAVE WRITE ENABLE ACTIVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-WB_BUS_SLAVE_WRITE_ENABLE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_OUT_SLAVE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; ACK TO THE MASTER UNTIL STB FINISH
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-ack_to_the_master
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-ACK_O_SLAVE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_SLAVE
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_OUT_SLAVE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_SLAVE
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- WRITE A LBA INTO THE WB MASTER INTERFACE (TO THE SLAVE)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; INPUTS :
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP0 : LBA_ADDR_7_0, TMP1 : LBA_ADDR_15_8, TMP2 : LBA_ADDR_24_16, TMP3 : LBA_ADDR_27_24
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-write_lba_to_slave
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WB MASTER WRITE ENABLE ACTIVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-WB_BUS_MASTER_WRITE_ENABLE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;write_lba_15_0_to_slave:
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP0 : LBA_ADDR_7_0 (s0) => DATA_WB_OUT_7_0_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP1 : LBA_ADDR_15_8 (s1) => DATA_WB_OUT_15_8_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s0
OPERAND2-DATA_WB_OUT_7_0_MASTER
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s1
OPERAND2-DATA_WB_OUT_15_8_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- WRITE LBA 15-0 TO THE SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WB_CONTROL_OUT_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; W_WE_MASTER = 1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STB_O_MASTER = 1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; A0 = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-WRITE_LBA_15_0
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WAIT FOR THE ACK
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-CALL
OPERAND1-wait_for_the_ack
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;write_lba_27_16_to_slave:
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP2 : LBA_ADDR_23_16 (s2) => DATA_WB_OUT_7_0_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; TMP3 : LBA_ADDR_27_24 (s3) => DATA_WB_OUT_15_8_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s2
OPERAND2-DATA_WB_OUT_7_0_MASTER
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-s3
OPERAND2-DATA_WB_OUT_15_8_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- WRITE LBA 27-16 TO THE SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WB_CONTROL_OUT_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; W_WE_MASTER = 1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STB_O_MASTER = 1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; A0 = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-WRITE_LBA_27_16
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WAIT FOR THE ACK
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-CALL
OPERAND1-wait_for_the_ack
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- FINISH WRITE OPERATION ON THE MASTER WB INTERFACE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WB_CONTROL_OUT_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; W_WE_MASTER = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STB_O_MASTER = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; A0 = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- PERFORM DUMMY READS FROM THE WB SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- IN sF ARE THE NUMBER OF WORDS THAT MUST BE READED
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-do_dummy_reads_from_slave
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-s6
OPERAND2-sF
COMMENT-
LABEL-dummy_reads_from_slave
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-CALL
OPERAND1-read_word_from_slave
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-SUB
OPERAND1-s6
OPERAND2-01
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-NZ
OPERAND2-dummy_reads_from_slave
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; -- PERFORM A WORD READING FROM THE WB SLAVE
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; --
LABEL-read_word_from_slave
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WB_CONTROL_OUT_MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; W_WE_MASTER = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; STB_O_MASTER = 1
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; A0 = 0
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; wait state
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-READ_SLAVE
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; WAIT FOR THE ACK
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CALL wait_for_the_ack
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;JUMP Z,data_available_on_wb_master
LABEL-wait_for_the_ack
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; CONTROL_WB_IN_MASTER -> TMP (s6)
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-INPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_IN_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-;
LABEL-
INSTRUCTION-AND
OPERAND1-sF
OPERAND2-ACK_I_MASTER
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-Z
OPERAND2-wait_for_the_ack
COMMENT-
LABEL-data_available_on_wb_master
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; This part is not necessary in write operations
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; DATA_WB_IN_7_0_MASTER -> (sD) data[7:0] WB MASTER
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; DATA_WB_IN_15_8_MASTER -> (sE) data[15:8] WB MASTER
LABEL-
INSTRUCTION-INPUT
OPERAND1-sD
OPERAND2-DATA_WB_IN_7_0_MASTER
COMMENT-
LABEL-
INSTRUCTION-INPUT
OPERAND1-sE
OPERAND2-DATA_WB_IN_15_8_MASTER
COMMENT-
LABEL-
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-; DISABLE RD/WR OPERATION REQUEST
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-00
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_MASTER
COMMENT-
LABEL-
INSTRUCTION-RETURN
OPERAND1-
OPERAND2-
COMMENT-
LABEL-put_error_code
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-LOAD
OPERAND1-sF
OPERAND2-ERROR
COMMENT-
LABEL-
INSTRUCTION-OUTPUT
OPERAND1-sF
OPERAND2-CONTROL_WB_OUT_SLAVE
COMMENT-
LABEL-
INSTRUCTION-JUMP
OPERAND1-put_error_code
OPERAND2-
COMMENT-
LABEL-interrupt
INSTRUCTION-
OPERAND1-
OPERAND2-
COMMENT-
LABEL-
INSTRUCTION-RETURNI
OPERAND1-ENABLE
OPERAND2-
COMMENT-
Go to most recent revision | Compare with Previous | Blame | View Log