glq.asm

来自「一卡通源码程序是我公司的一卡通源码程序,绝对难得」· 汇编 代码 · 共 4,777 行 · 第 1/5 页

ASM
4,777
字号
	setb f_tx
	ret


rd_qu0: mov r0,#tihed
	mov @r0,#20h
	inc r0
	mov @r0,#0

	mov r0,#tidat

	mov dptr,#r_2051
	movx a,@dptr

	mov @r0,#4

	anl a,#0c0h
	cjne a,#0c0h,rd_q00

	mov @r0,#1

rd_q00: ;
	inc r0

rd_q05: mov r2,#15

rd_q07: inc r0
	mov @r0,#0

	djnz r2,rd_q07

	lcall chktis

	mov ticon,#49
	mov tir0,#tibuf
	setb ti

	ret


read51: ;----------------------
	; Read Special Region 1
	;----------------------
	lcall quhead

	inc r0
	mov rec_h,@r0
	inc r0
	mov rec_l,@r0

	mov a,rec_h
	cjne a,max_h,rd_q10

	mov a,rec_l
	cjne a,max_l,rd_q10
rd_q10: jc rd_q11

	mov r0,#tihed

	mov @r0,#20h
	inc r0

	mov @r0,#0

	inc r0
	inc r0
	inc r0

	mov @r0,#0ffh
	inc r0

	mov @r0,#0ffh

	mov a,#over
	sjmp rd_q13

rd_q11: lcall get_ar

	mov r2,#1
	lcall n_dptr

	movx a,@dptr

	mov r0,#tihed

	mov @r0,#20h
	inc r0

	mov @r0,#0

rd_q13: mov r0,#tidat

	mov @r0,a
	inc r0
	;
	mov r2,#15

rd_q15: mov @r0,#0
	inc r0
	djnz r2,rd_q15

	lcall chktis

	mov ticon,#49
	mov tir0,#tibuf
	setb ti
	ret


read52: ;----------------------
	; Read Special Region 2
	;----------------------
	lcall quhead

	inc r0
	mov rec_h,@r0
	inc r0
	mov rec_l,@r0

	mov a,rec_h
	cjne a,max_h,rd_q20

	mov a,rec_l
	cjne a,max_l,rd_q20
rd_q20: jc rd_q21


	mov r0,#tihed

	mov @r0,#20h
	inc r0

	mov @r0,#30h

	inc r0
	inc r0
	inc r0

	mov @r0,#0ffh
	inc r0

	mov @r0,#0ffh

	mov a,#over
	sjmp rd_q23


rd_q21: lcall get_ar

	movx a,@dptr

	mov r0,#tihed

	mov @r0,#20h
	inc r0

	mov @r0,#0

rd_q23: mov r0,#tidat

	mov @r0,a
	inc r0
	;
	mov r2,#15

rd_q25: mov @r0,#0
	inc r0
	djnz r2,rd_q25

	lcall chktis

	mov ticon,#49
	mov tir0,#tibuf
	setb ti
	ret




;****************************
;****************************
;       Write Record
;****************************
write:  inc r0
	inc r0

	mov a,@r0
	anl a,#7
	mov b,a
	rl a
	add a,b
	mov dptr,#wrtab
	jmp @a+dptr
wrtab:  ljmp w_cpin
	ljmp wr_clk
	ljmp wr_pos
	ljmp wr_pos
	ljmp w_card
	ljmp writ5
	ljmp second_write

 writ7: setb f_tx
	ret


	;------------------------------
	; Special Write Second Region
	;-------------------------------
second_write:
	inc r0
	mov a,@r0
	anl a,#0fh
	cjne a,#2,writ7

	mov region,a

	lcall quhead
	;
	inc r0
	mov rec_h,@r0
	inc r0
	mov rec_l,@r0

	mov a,rec_h
	cjne a,max_h,s_writ1

	mov a,rec_l
	cjne a,max_l,s_writ1

s_writ1: jc s_writ5

	mov subsq,#0
	mov r_err,#0
	lcall er_ans
	ret



s_writ5: lcall get_ar
	;
	mov r2,#7
	mov b,#0

s_writ6: movx a,@dptr
	add a,b
	mov b,a
	lcall indptr
	djnz r2,s_writ6

	mov r2,#12
	mov r0,#ridat

s_writ7: mov a,@r0
	movx @dptr,a
	add a,b
	mov b,a

	lcall indptr
	inc r0

	djnz r2,s_writ7

	mov a,b
	movx @dptr,a
	;
	mov subsq,#0
	mov r_err,#0
	lcall ok_ans
	ret




	;----------------------
	; Write   ChipIn
	;----------------------
w_cpin: inc r0
	mov a,@r0
	;
	anl a,#0fh
	mov region,a
	rl a
	add a,region
	mov dptr,#wcitb
	jmp @a+dptr
 wcitb: ljmp w_qu0		;write 0 region
	ljmp w_qu1		;write 1 region
	ljmp w_qu2		;write 2 region
	ljmp w_qu9
	ljmp w_qu4		;write 4 region
	ljmp w_qu9
	ljmp w_qu4            	;write 6 region
	ljmp w_qu7	;	;write  7 qu(new)
	ljmp w_qu8		;write 8 qu(new)

 w_qu9: setb f_tx
	ret


 w_qu0: ;--------------------
	;  Write Region 0
	;--------------------
	mov a,#00000000b
	mov dptr,#d_374
	movx @dptr,a

	inc r0
	inc r0
	mov a,@r0
	jnz wqu05

	mov r0,#ridat

	mov a,#b_buf
	add a,#16
	mov r1,a

	mov r2,#16
	lcall copy_s

	mov dptr,#adr_offset
	mov r0,#b_buf

	mov r2,#24

 wqu00: mov b,@r0
	movx a,@dptr

	cjne a,b,wqu01

	sjmp wqu02

 wqu01: mov idsc,#3fh
	mov a,b
	movx @dptr,a

 wqu02: inc r0
	inc dptr

	djnz r2,wqu00

	;
	mov dptr,#d_idsc
	mov r0,#b_buf

	mov r2,#24

 wqu03: mov a,@r0
	movx @dptr,a

	inc r0
	inc dptr

	djnz r2,wqu03
	;

	clr f_ini

	mov r_err,#0
	mov subsq,#0
	lcall ok_ans
	ret


	;---------------------
	;---------------------
 wqu05: mov region,a
	dec a
	anl a,#0fh

	mov dptr,#area_offset
	mov b,#hedlen
	mul ab
	add a,dpl
	mov dpl,a
	mov a,b
	addc a,dph
	mov dph,a

	mov r2,#hedlen
	mov r0,#ridat

 wqu06: mov a,@r0
	movx @dptr,a
	inc r0
	inc dptr
	djnz r2,wqu06
	;
	mov r_err,#0
	mov subsq,#0
	lcall ok_ans

	lcall clear_pos_func
	ret


	;
 w_qu1: ;-------------------
	;  Write Region 1
	;-------------------
	lcall quhead

	mov r0,#ridat

	mov a,#b_buf
	add a,#16
	mov r1,a

	mov r2,#16
	lcall copy_s

	mov r0,#ridat

	dec r0
	dec r0

	mov rec_h,@r0
	inc r0

	mov rec_l,@r0
	mov r_nme,@r0
	;
	mov a,rec_h
	cjne a,max_h,wqu11

	mov a,rec_l
	cjne a,max_l,wqu11
 wqu11: jc wqu13

 wqu12: mov subsq,#0
	mov r_err,#0
	lcall er_ans
	ret



 wqu13: mov a,r_nme
	cjne a,#251,wqu14
 wqu14: jnc wqu12

	lcall get_ar

	mov r0,#b_buf

	mov r2,reclen

	dec r2
	dec r2

	mov a,@r0

	mov b,a

	orl a,#80h
	movx @dptr,a

	inc r0
	lcall indptr

 wqu16: mov a,@r0
	movx @dptr,a

	add a,b
	mov b,a

	lcall indptr
	inc r0

	djnz r2,wqu16
	;
	mov a,b                        ;CheckSum
	movx @dptr,a

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans

	lcall clr_pos_in

	mov r0,#b_buf
	cjne @r0,#0,wqu17

	ret


wqu17:  mov a,r_nme
	cjne a,end_l,wqu18
wqu18:  jc wqu19

	mov end_l,a
	lcall w_pos

wqu19:
	ret



	;
 w_qu2: ;------------------
	;  Write Region 2
	;------------------
	lcall quhead

	mov r0,#ridat

	mov a,#b_buf
	add a,#16
	mov r1,a

	mov r2,#16
	lcall copy_s

	mov r0,#ridat

	dec r0
	dec r0

	mov rec_h,@r0
	mov beg_h,@r0

	inc r0

	mov rec_l,@r0
	mov beg_l,@r0

	;
	mov a,rec_h
	cjne a,max_h,wqu21

	mov a,rec_l
	cjne a,max_l,wqu21

wqu21:  jc wqu23

	mov subsq,#0
	mov r_err,#0
	lcall er_ans
	ret



wqu23:  lcall get_ar

	mov r0,#b_buf

	mov r2,reclen
	dec r2

	mov b,#0

 wqu26: mov a,@r0
	movx @dptr,a

	add a,b
	mov b,a

	lcall indptr
	inc r0

	djnz r2,wqu26
	;
	mov a,b                        ;CheckSum
	movx @dptr,a

	mov a,beg_h
	cjne a,end_h,wqu27

	mov a,beg_l
	cjne a,end_l,wqu27

	sjmp wqu28

wqu27:  jc wqu28

	mov end_h,beg_h
	mov end_l,beg_l

	lcall w_max


wqu28:  mov subsq,#0
	mov r_err,#0
	lcall ok_ans
	ret
	;



 w_qu4: ;------------------
	;  Write Region 4&&6
	;------------------
	lcall quhead

	mov r0,#ridat

	mov a,#b_buf
	add a,#16
	mov r1,a

	mov r2,#16
	lcall copy_s

	mov r0,#ridat

	dec r0
	dec r0

	mov rec_h,@r0
	inc r0

	mov rec_l,@r0
	;
	mov a,rec_h
	cjne a,max_h,wqu41

	mov a,rec_l
	cjne a,max_l,wqu41

wqu41:  jc wqu43

	mov r_err,#0
	mov subsq,#0
	lcall er_ans
	ret



wqu43:  lcall get_ar

	mov r0,#b_buf

	mov r2,reclen
	dec r2

	mov b,#0

 wqu46: mov a,@r0
	movx @dptr,a

	add a,b
	mov b,a

	lcall indptr
	inc r0

	djnz r2,wqu46
	;
	mov a,b                        ;CheckSum
	movx @dptr,a

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans
	ret


;--------------------------------
;   write region 7  新增加写7区功能
;--------------------------------
w_qu7:	lcall quhead7
	mov r0,#ridat
	dec r0
	dec r0

	mov rec_h,@r0
	inc r0

	mov rec_l,@r0

	mov a,rec_h
	cjne a,max_h,wqu71

	mov a,rec_l
	cjne a,max_l,wqu71

wqu71:	jc wqu73

	mov r_err,#0
	mov subsq,#0
	lcall er_ans
	ret

wqu73:	mov r0,#ridat	;将接收的数据再次异或,恢复成原数据送ridat单元
	mov a,@r0
	xrl a,#64h
	mov @r0,a	;1

	inc r0
	mov a,@r0
	xrl a,#95h
	mov @r0,a	;2

	inc r0
	mov a,@r0
	xrl a,#78h
	mov @r0,a	;3

	inc r0
	mov a,@r0
	xrl a,#47h
	mov @r0,a	;4

	inc r0
	mov a,@r0
	xrl a,#0ach
	mov @r0,a	;5

	inc r0
	mov a,@r0
	xrl a,#64h
	mov @r0,a	;6

	inc r0
	mov a,@r0
	xrl a,#95h
	mov @r0,a	;7

	inc r0
	mov a,@r0
	xrl a,#78h
	mov @r0,a	;8

	inc r0
	mov a,@r0
	xrl a,#47h
	mov @r0,a	;9

	inc r0
	mov a,@r0
	xrl a,#0ach
	mov @r0,a	;10

	lcall get_ar

	mov r0,#ridat

	mov r2,reclen	;r2=10
	dec r2

	mov b,#0

wqu76:	mov a,@r0
	movx @dptr,a

	add a,b
	mov b,a

	inc dptr
	inc r0

	djnz r2,wqu76	;将接收的10字节内容送对应7区地址中

	mov a,b
	movx @dptr,a	;计算的校验和送记录校验和单元

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans	;发送正确应答至pc

	mov r0,#ridat
	dec r0		;R0指向记录号(低字节)

	mov a,@r0
	cjne a,end_l,wqu78
wqu78:	jc wqu79	;若记录号<=尾指针,转wqu79
			;若记录号>尾指针
	mov end_l,a	;将记录号送尾指针单元
	lcall w_area	;刷新7区区头信息中的尾指针单元

wqu79:	ret

	;----------------------
	;write 8 region
	;----------------------
w_qu8:	lcall quhead		;确定8区区头信息

	mov r0,#ridat

	dec r0			;record(l)
	dec r0			;record(h)

	mov rec_h,@r0
	inc r0

	mov rec_l,@r0

	mov a,rec_h
	cjne a,max_h,wqu81

	mov a,rec_l
	cjne a,max_l,wqu81

wqu81:	jc wqu83

	mov r_err,#0
	mov subsq,#0
	lcall er_ans
	ret

wqu83:	lcall get_ar

	mov r0,#ridat

	mov r2,reclen		;reclen=3
	dec r2			;r2=2

	mov b,#0

wqu86:	mov a,@r0
	movx @dptr,a

	add a,b
	mov b,a

	lcall indptr
	inc r0

	djnz r2,wqu86

	mov a,b
	movx @dptr,a		;校验和送入校验和字节中保存

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans		;发送正确应答至POS
	ret


	;----------------------
	; Write GLQ Date && Time
	;----------------------
wr_clk: mov r0,#tidat
	lcall w_887

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans

	mov uptim,#3fh
	ret




	;----------------------------
	; Write Pos: Close All Pos
	;----------------------------
wr_pos: mov close,#3fh

	mov subsq,#0
	mov r_err,#0
	lcall ok_ans

	mov uptim,#3fh
	ret



	;------------------------------
	; Write   Card
	; Region=0a0h:  Set CardServer
	;       =0a1h:  Reset CardServer
	;       =0a2h:  ReWrite Card
	;       =0a3h:  Write New Card
	;       =0a4h:  Renew Card
	;------------------------------
w_card: inc r0
	cjne @r0,#0a0h,wcd00

	clr f_s16
	setb f_s00
	mov r_s00,#16
	sjmp wcd08


wcd00:  cjne @r0,#0a1h,wcd01

	mov f16cnt,#7

	setb f_s16

	setb f_s00
	mov r_s00,#16


wcd08:  setb tr1
	ret


	;
wcd01:  cjne @r0,#0a2h,wcd03

	setb f_s00
	mov r_s00,#18


wcd02:  mov r0,#ridat

	mov a,#b_buf
	add a,#16
	mov r1,a

	mov r2,#16
	lcall copy_s
	;
	setb tr1
	ret


wcd03:  cjne @r0,#0a3h,wcd04

	setb f_s00
	mov r_s00,#17
	sjmp wcd02


wcd04:  cjne @r0,#0a4h,wcd05

	setb f_s00
	mov r_s00,#20
	sjmp wcd08


wcd05:  setb f_tx
	ret



	;----------------------
	;  Special Write
	;----------------------
writ5:  inc r0

	mov a,@r0
	anl a,#0fh
	mov region,a

	rl a
	add a,region

	mov dptr,#wrdtab
	jmp @a+dptr

wrdtab: ljmp writ50
	ljmp writ51
	ljmp writ52
	ljmp writ59
	ljmp writ59
	ljmp writ59
	ljmp writ59
	ljmp writ59
	ljmp writ59

writ59: setb f_tx
	ret

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?