📄 telecrd2.lst
字号:
0033 1208 0085 bcf EECON1,EEIF ; Reset Write Completion Flag
0034 1108 0086 bcf EECON1,WREN ; EEPROM Write Disable
0035 1283 0087 bcf STATUS,RP0 ; Access register bank 0
0036 1C1B 0088 btfss EE_FLAG,LSB ; Check for EEPROM Write Flag
0037 2830 0089 goto MAIN ; If not set, jump back and wait some more
0038 019B 0090 clrf EE_FLAG ; Clear EEPROM Write Flag
0039 300C 0091 movlw 0c ; Units is stored in byte $0c
003A 0089 0092 movwf EEADR ; Store in EEPROM Address Counter
003B 0818 0093 movfw FUSCNT ; Get fused units counter
003C 0088 0094 movwf EEDATA ; Store in EEDATA
003D 1683 0095 bsf STATUS,RP0 ; Access register bank 1
003E 1508 0096 bsf EECON1,WREN ; EEPROM Write Enable
003F 138B 0097 bcf INTCON,GIE ; Disable all interupts
0040 3055 0098 movlw 055 ; Magic Number #1 for EEPROM Write
0041 0089 0099 movwf EECON2 ; Store in EECON2
0042 30AA 0100 movlw 0aa ; Magic Number #2 for EEPROM Write
0043 0089 0101 movwf EECON2 ; Store in EECON2
0044 1488 0102 bsf EECON1,WR ; Execute EEPROM Write
0045 178B 0103 bsf INTCON,GIE ; Enable all interupts again!
0046 1283 0104 bcf STATUS,RP0 ; Access register bank 0
0047 2830 0105 goto MAIN ; Program main loop!
0106
0048 188B 0107 INTMAIN btfsc INTCON,INTF ; Check for INT Interupt
0049 284D 0108 goto INTMAIN2 ; If set, jump to INTMAIN2
004A 3010 0109 movlw B'00010000' ; Enable INT Interupt
004B 008B 0110 movwf INTCON ; Store in INTCON
004C 0008 0111 return
0112
004D 0113 INTMAIN2
004D 1283 0114 bcf STATUS,RP0 ; Access register bank 0
004E 1405 0115 bsf PORTA,CRD_DTA ; Set Data Output High
004F 1886 0116 btfsc PORTB,CRD_RST ; Check if reset is low
0050 285D 0117 goto NO_RST ; If not, skip reset sequence
0051 0801 0118 movfw RTCC ; Get RTCC Value
0052 009F 0119 movwf TEMP4 ; Store in TEMP4
0053 0181 0120 clrf RTCC ; Clear RTCC
0054 3055 0121 movlw 055 ; Subtract $55 from TEMP4
0055 021F 0122 subwf TEMP4,0 ; to check for card reset....
0056 1D03 285B 0123 bnz NO_RST2 ; If not zero, jump to NO_RST
MPASM 01.02 Released TELECRD2.ASM 9-16-1994 10:19:25 PAGE 6
ISO 7816 Synchronous Memory Card Emulator
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0058 3002 0124 movlw 02 ; Unused one has $02 in FUSCNT
0059 0098 0125 movwf FUSCNT ; Store full value in FUSCNT
005A 141B 0126 bsf EE_FLAG,LSB ; Set EEPROM Write Flag
005B 108B 0127 NO_RST2 bcf INTCON,INTF ; Clear INT Interupt Flag
005C 0008 0128 return ; Mission Accomplished, return to sender
0129
005D 0801 0130 NO_RST movfw RTCC ; Get RTCC Value
005E 0099 0131 movwf BITCNT ; Copy it to BITCNT
005F 009C 0132 movwf TEMP1 ; Copy it to TEMP1
0060 009D 0133 movwf TEMP2 ; Copy it to TEMP2
0061 3060 0134 movlw 060 ; Load W with $60
0062 021C 0135 subwf TEMP1,0 ; Subtract $60 from TEMP1
0063 1903 287C 0136 bz CREDIT ; If it is equal to $60
0065 1803 287C 0137 bc CREDIT ; or greater, then skip to units area
0067 0C9D 0138 rrf TEMP2 ; Rotate TEMP2 one step right
0068 0C9D 0139 rrf TEMP2 ; Rotate TEMP2 one step right
0069 0C9D 0140 rrf TEMP2 ; Rotate TEMP2 one step right
006A 300F 0141 movlw 0f ; Load W with $f
006B 059D 0142 andwf TEMP2,1 ; And TEMP2 with W register
006C 081D 0143 movfw TEMP2 ; Load W with TEMP2
006D 3E0C 0144 addlw 0c ; Add W with $0c
006E 0084 0145 movwf FSR ; Store data address in FSR
006F 0800 0146 movfw INDIR ; Get databyte pointed at by FSR
0070 009E 0147 movwf TEMP3 ; Store it in TEMP3
0071 3007 0148 movlw 07 ; Load W with $07
0072 059C 0149 andwf TEMP1,1 ; And TEMP1 with $07
0073 1903 2878 0150 bz NO_ROT ; If result is zero, skip shift loop
0075 0D9E 0151 ROTLOOP rlf TEMP3 ; Shift TEMP3 one step left
0076 0B9C 0152 decfsz TEMP1,1 ; Decrement TEMP1 until zero
0077 2875 0153 goto ROTLOOP ; If not zero, repeat until it is!
0078 1F9E 0154 NO_ROT btfss TEMP3,MSB ; Check if MSB of TEMP3 is set
0079 1005 0155 bcf PORTA,CRD_DTA ; Clear Data Output
007A 108B 0156 bcf INTCON,INTF ; Clear INT Interupt Flag
007B 0008 0157 return ; Mission Accomplished, return to sender
0158
007C 1F86 0159 CREDIT btfss PORTB,CRD_WE ; Check if Card Write Enable is High
007D 2884 0160 goto NO_WRT ; Abort write operation if not...
007E 1C86 0161 btfss PORTB,CRD_RST ; Check if Card Reset is High
007F 2884 0162 goto NO_WRT ; Abort write operation if not...
0080 0A98 0163 incf FUSCNT ; Increase used-up units counter
0081 141B 0164 bsf EE_FLAG,LSB ; Set EEPROM Write-Flag
0082 108B 0165 bcf INTCON,INTF ; Clear INT Interupt Flag
0083 0008 0166 return ; Mission Accomplished, return to sender
0167
0084 3060 0168 NO_WRT movlw 060 ; Load W with $60
0085 0299 0169 subwf BITCNT,1 ; Subtract $60 from BITCNT
0086 0818 0170 movfw FUSCNT ; Load W with FUSCNT
0087 0299 0171 subwf BITCNT,1 ; Subtract FUSCNT from BITCNT
0088 1C03 288B 0172 bnc FUSED ; If result is negative, unit is fused
008A 1005 0173 bcf PORTA,CRD_DTA ; Clear Data Output
008B 108B 0174 FUSED bcf INTCON,INTF ; Clear INT Interupt Flag
008C 0008 0175 return ; Mission Accomplished, return to sender
0176
MPASM 01.02 Released TELECRD2.ASM 9-16-1994 10:19:25 PAGE 7
ISO 7816 Synchronous Memory Card Emulator
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0177 END
0178
MPASM 01.02 Released TELECRD2.ASM 9-16-1994 10:19:25 PAGE 8
ISO 7816 Synchronous Memory Card Emulator
SYMBOL TABLE
LABEL VALUE
ADCON0 0008
ADCON1 0008
ADCS0 0006
ADCS1 0007
ADGO 0002
ADIE 0006
ADIF 0001
ADON 0000
ADRES 0009
BITCNT 0019
C 0000
CARRY 0000
CHS0 0003
CHS1 0004
CRD_CLK 0000
CRD_DTA 0000
CRD_ID 000C
CRD_RST 0001
CRD_WE 0007
CREDIT 007C
DC 0001
DCARRY 0001
EEADR 0009
EECON1 0008
EECON2 0009
EECOPY 0021
EEDATA 0008
EEIE 0006
EEIF 0004
EE_FLAG 001B
FALSE 0000
FSR 0004
FUSCNT 0018
FUSED 008B
GIE 0007
INDIR 0000
INIT 0010
INTCON 000B
INTE 0004
INTEDG 0006
INTF 0001
INTMAIN 0048
INTMAIN2 004D
INTVEC 0004
IRP 0007
LOOPCNT 001A
LSB 0000
MAIN 0030
MSB 0007
NO 0000
NO_ROT 0078
NO_RST 005D MPASM 01.02 Released TELECRD2.ASM 9-16-1994 10:19:25 PAGE 9
ISO 7816 Synchronous Memory Card Emulator
SYMBOL TABLE - Continued
LABEL VALUE
NO_RST2 005B
NO_WRT 0084
OPTION 0001
PCFG0 0000
PCFG1 0001
PCL 0002
PCLATH 000A
PD 0003
PIC54 01FF
PIC55 01FF
PIC56 03FF
PIC57 07FF
PIC71 0000
PIC84 0000
PORTA 0005
PORTB 0006
PORTC 0007
PS0 0000
PS1 0001
PS2 0002
PSA 0003
P_DOWN 0003
RBIE 0003
RBIF 0000
RBPU 0007
RD 0000
ROTLOOP 0075
RP0 0005
RP1 0006
RTCC 0001
RTE 0004
RTIE 0005
RTIF 0002
RTS 0005
STATUS 0003
TEMP1 001C
TEMP2 001D
TEMP3 001E
TEMP4 001F
TEMP_S 002F
TEMP_W 002E
TO 0004
TRISA 0005
TRISB 0006
TRISC 0007
TRUE 0001
T_OUT 0004
WR 0001
WREN 0002
WRERR 0003
YES 0001
Z 0002 MPASM 01.02 Released TELECRD2.ASM 9-16-1994 10:19:25 PAGE 10
ISO 7816 Synchronous Memory Card Emulator
SYMBOL TABLE - Continued
LABEL VALUE
Z_BIT 0002
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : X---XXXXXXXXX--- XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0080 : XXXXXXXXXXXXX--- ---------------- ---------------- ----------------
00C0 : ---------------- ---------------- ---------------- ----------------
2000 : XXXX---X-------- ---------------- ---------------- ----------------
2040 : ---------------- ---------------- ---------------- ----------------
2100 : XXXXXXX--------- ---------------- ---------------- ----------------
2140 : ---------------- ---------------- ---------------- ----------------
All other memory blocks unused.
Errors : 0
Warnings : 12
Messages : 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -