📄 mt28f008_driver.s
字号:
; ZiLOG eZ80 ANSI C Compiler Release 2.12
; -noglobalopt -nolocalcse -optsize -modsect -debug -peephole
; -const=ROM -doublesize=32 -floatsize=32 -bitfieldsize=24
; -longsize=32 -charsize=8 -intsize=24
DEFINE _driver_TEXT,SPACE=ROM
FILE "..\FLASH\SRC\MT28F008_DRIVER.C"
.assume ADL=1
.DEBUG "C"
SEGMENT DATA
_gucReadbackFailed:
DB 0
.DEFINE "gucReadbackFailed"
.ALIAS "_gucReadbackFailed"
.CLASS 69
.VALUE _gucReadbackFailed
.TYPE 12
.ENDEF
; 1 /*
; 2 * File : MT28F008_Driver.c
; 3 * Description: This file contains the Flash driver for use in ZiLOG File System
; 4 * Author : (Reused from Prototype fs driver code)
; 5 * Created on : 30-APR-2003
; 6 *
; 7 * Copyright 2004 ZiLOG Inc. ALL RIGHTS RESERVED.
; 8 *
; 9 * This file contains unpublished confidential and proprietary information
; 10 * of ZiLOG, Inc.
; 11 * NO PART OF THIS WORK MAY BE DUPLICATED, STORED, PUBLISHED OR DISCLOSED
; 12 * IN ANY FORM WITHOUT THE PRIOR WRITTEN CONSENT OF ZiLOG, INC.
; 13 * This is not a license and no use of any kind of this work is authorized
; 14 * in the absence of a written license granted by ZiLOG, Inc. in ZiLOG's
; 15 * sole discretion
; 16 */
; 17
; 18 #include "MT28F008_Driver.h"
; 19
; 20 /*Readback Fail Flag: Every line flashed is read back to verify whether
; 21 * flashing happened properly. This flag is set when there is a readback
; 22 * fail.
; 23 */
; 24 UINT8 gucReadbackFailed = 0 ; //default to no readback fails
SEGMENT _driver_TEXT
; 25
; 26 INT32 FlashError(UINT8 ucStatus)
; 27 #ifdef _IAR_CODE
; 28 @ "DATA_PER_RAM"
; 29 #endif
; 30 {
_FlashError:
.DEFINE "_FlashError"
.VALUE _FlashError
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "FlashError",30,"_FlashError"
.LINE 30
.DEFINE "ucStatus"
.CLASS 65
.VALUE 6
.TYPE 12
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
; 31 // printf("\n FLASHERROR" ) ;
; 32 // while(1) ;
; 33 if(ucStatus & MT28F008_ERASE_SUSPENDED)
.LINE 33
LD A,(IX+6)
AND A,64
JR Z,L_2
; 34 return -MT28F008_ERASE_SUSPENDED;
.LINE 34
LD HL,16777152
LD E,255
JR L_8
L_2:
; 35
; 36 if(ucStatus & MT28F008_ERASE_ERROR)
.LINE 36
LD A,(IX+6)
AND A,32
JR Z,L_4
; 37 return -MT28F008_ERASE_ERROR;
.LINE 37
LD HL,16777184
LD E,255
JR L_8
L_4:
; 38
; 39 if(ucStatus & MT28F008_WRITE_ERROR)
.LINE 39
LD A,(IX+6)
AND A,16
JR Z,L_6
; 40 return -MT28F008_WRITE_ERROR;
.LINE 40
LD HL,16777200
LD E,255
JR L_8
L_6:
; 41
; 42 if(ucStatus & MT28F008_NO_VOLTAGE)
.LINE 42
LD A,(IX+6)
AND A,8
JR Z,L_7
; 43 return -MT28F008_NO_VOLTAGE;
.LINE 43
LD HL,16777208
LD E,255
JR L_8
L_7:
; 44
; 45 return SUCCESS;
.LINE 45
LD HL,0
LD E,0
; 46 }
L_8:
.LINE 46
LD SP,IX
POP IX
RET
;**************************** _FlashError ***************************
;Name Addr/Register Size Type
;ucStatus IX+6 1 parameter
; Stack Frame Size: 9 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "FlashError",46,"_FlashError"
; 47
; 48 INT MT28F008_Init( void *paddr, UINT32 num_bytes )
; 49 #ifdef _IAR_CODE
; 50 @ "DATA_PER_RAM"
; 51 #endif
; 52 {
_MT28F008_Init:
.DEFINE "_MT28F008_Init"
.VALUE _MT28F008_Init
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "MT28F008_Init",52,"_MT28F008_Init"
.LINE 52
.DEFINE "paddr"
.CLASS 65
.VALUE 6
.TYPE 33
.ENDEF
.DEFINE "num_bytes"
.CLASS 65
.VALUE 9
.TYPE 15
.ENDEF
.DEFINE "ucPtr"
.CLASS 65
.VALUE -3
.TYPE 44
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
; 53 volatile UINT8 *ucPtr = ( UINT8 * ) paddr ;
.LINE 53
LD BC,(IX+6)
LD (IX+-3),BC
; 54 *ucPtr=MT28F008_RESET;
.LINE 54
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 55 *ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 55
LD IY,(IX+-3)
LD A,80
LD (IY),A
; 56 *ucPtr=MT28F008_READ_ARRAY;
.LINE 56
LD IY,(IX+-3)
LD A,255
LD (IY),A
; 57 return SUCCESS ;
.LINE 57
LD HL,0
; 58 }
.LINE 58
LD SP,IX
POP IX
RET
;**************************** _MT28F008_Init ***************************
;Name Addr/Register Size Type
;ucPtr IX-3 3 variable
;num_bytes IX+9 4 parameter
;paddr IX+6 3 parameter
; Stack Frame Size: 18 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "MT28F008_Init",58,"_MT28F008_Init"
; 59
; 60 INT32 MT28F008_Read( void *paddr, void *pbuf, UINT num_bytes )
; 61 #ifdef _IAR_CODE
; 62 @ "DATA_PER_RAM"
; 63 #endif
; 64 {
_MT28F008_Read:
.DEFINE "_MT28F008_Read"
.VALUE _MT28F008_Read
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "MT28F008_Read",64,"_MT28F008_Read"
.LINE 64
.DEFINE "paddr"
.CLASS 65
.VALUE 6
.TYPE 33
.ENDEF
.DEFINE "pbuf"
.CLASS 65
.VALUE 9
.TYPE 33
.ENDEF
.DEFINE "num_bytes"
.CLASS 65
.VALUE 12
.TYPE 14
.ENDEF
.DEFINE "pcaddr"
.CLASS 65
.VALUE -3
.TYPE 44
.ENDEF
.DEFINE "nbytes"
.CLASS 65
.VALUE -6
.TYPE 14
.ENDEF
.DEFINE "pcbuf"
.CLASS 65
.VALUE -9
.TYPE 44
.ENDEF
.DEFINE "ptr"
.CLASS 65
.VALUE -12
.TYPE 44
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
LEA IY,IX+-12
LD SP,IY
; 65 volatile UINT8 *ptr ;
; 66 UINT8 *pcaddr = ( UINT8 * ) paddr ;
.LINE 66
LD BC,(IX+6)
LD (IX+-3),BC
; 67 UINT8 *pcbuf = ( UINT8 * ) pbuf ;
.LINE 67
LD BC,(IX+9)
LD (IX+-9),BC
; 68 UINT nbytes ;
; 69
; 70 ptr = pcaddr ;
.LINE 70
LD BC,(IX+-3)
LD (IX+-12),BC
; 71
; 72 // Read set up
; 73 *ptr=MT28F008_RESET;
.LINE 73
LD IY,(IX+-12)
LD A,255
LD (IY),A
; 74 *ptr=MT28F008_CLEAR_STATUS_REG;
.LINE 74
LD IY,(IX+-12)
LD A,80
LD (IY),A
; 75 *ptr=MT28F008_READ_ARRAY;
.LINE 75
LD IY,(IX+-12)
LD A,255
LD (IY),A
LD BC,0
LD (IX+-6),BC
; 76
; 77 for( nbytes = 0 ; nbytes < num_bytes ; nbytes++ )
.LINE 77
JR L_15
L_13:
; 78 {
; 79 *pcbuf = *pcaddr ;
LD HL,(IX+-9)
.LINE 79
LD IY,(IX+-3)
LD A,(IY)
LD (HL),A
; 80 pcbuf++ ;
.LINE 80
LD BC,(IX+-9)
INC BC
LD (IX+-9),BC
; 81 pcaddr++ ;
.LINE 81
LD BC,(IX+-3)
INC BC
LD (IX+-3),BC
LD BC,(IX+-6)
INC BC
LD (IX+-6),BC
; 82 }
L_15:
.LINE 82
LD BC,(IX+12)
LD HL,(IX+-6)
OR A,A
SBC HL,BC
JR C,L_13
; 83 return num_bytes ;
.LINE 83
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 84 }
.LINE 84
LD SP,IX
POP IX
RET
;**************************** _MT28F008_Read ***************************
;Name Addr/Register Size Type
;ptr IX-12 3 variable
;pcbuf IX-9 3 variable
;nbytes IX-6 3 variable
;pcaddr IX-3 3 variable
;num_bytes IX+12 3 parameter
;pbuf IX+9 3 parameter
;paddr IX+6 3 parameter
; Stack Frame Size: 27 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "MT28F008_Read",84,"_MT28F008_Read"
; 85
; 86 INT32 MT28F008_Write( void *paddr, void *pbuf, UINT num_bytes )
; 87 #ifdef _IAR_CODE
; 88 @ "DATA_PER_RAM"
; 89 #endif
; 90 {
_MT28F008_Write:
.DEFINE "_MT28F008_Write"
.VALUE _MT28F008_Write
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "MT28F008_Write",90,"_MT28F008_Write"
.LINE 90
.DEFINE "paddr"
.CLASS 65
.VALUE 6
.TYPE 33
.ENDEF
.DEFINE "pbuf"
.CLASS 65
.VALUE 9
.TYPE 33
.ENDEF
.DEFINE "num_bytes"
.CLASS 65
.VALUE 12
.TYPE 14
.ENDEF
.DEFINE "ucPtr"
.CLASS 65
.VALUE -3
.TYPE 44
.ENDEF
.DEFINE "ucStatus"
.CLASS 65
.VALUE -4
.TYPE 12
.ENDEF
.DEFINE "ucSrcAddr"
.CLASS 65
.VALUE -7
.TYPE 44
.ENDEF
.DEFINE "i"
.CLASS 65
.VALUE -10
.TYPE 14
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -