⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.asm

📁 FLASH烧录 麻将机。。。。 FLASH烧录 麻将机
💻 ASM
字号:

;***************************************************************************

                .PW             128
                .CHIP           W65C02S
                .GLOBALS	ON
                .INCLUDE        SYSTEM.CFG
                .INCLUDE       ST2205.DEF

;***************************************************************************
;* extenal label definition
;*
;***************************************************************************
.XREF	MUL16_16
.XREF	TEMP_H3
.XREF	TEMP_H2
.XREF	TEMP_H
.XREF	TEMP_L
.XREF	FPtrH
.XREF	FPtrL
.XREF	PtrH
.XREF	PtrL
.XREF	LCD_BUF_START
.XREF	DIVIDER_L
.XREF	DIVIDER_H
.XREF	DIVIDER_H2
.XREF	DIVIDER_H3
.XREF	LCD_SEG
.XREF	LCD_COM
.XREF	LCDX
.XREF	LCDY
.XREF	MULDATA_L
.XREF	MULDATA_H
.XREF	SecPtr
.XREF	PosPtr
.XREF	DRR
.XREF	STRCNT
.XREF	ResData
.XREF	TEMP
.XREF	CHARNUM
;***************************************************************************
;* global label definition
;*
;***************************************************************************
.PUBLIC DRAW_CHAR12x12
.PUBLIC	CLS_LINE
.PUBLIC	CLS_CHAR12x12
.PUBLIC InVideo
.PUBLIC DRAW_STRING
.PUBLIC	DIVIDETEN
.PUBLIC DISP_NUMBER
.PUBLIC	CLS_CHAR12x12
.PUBLIC	CLS_CHARMANY 
.PUBLIC DISP_NUMBER_IN
;***************************************************************************
;* Description: Section PS0
;*
;***************************************************************************
PS0     .SECTION
;***************************************************************************
;==================================================
; Function: printer a string in the display	   |
; Input: PtrL & PtrH & LCDX & LCDY		
;==================================================
DRAW_STRING:
		PHA
		PHY
DRAWSTRLOOP:
		LDA		(PtrL)
		CMP		#0
		BEQ		Draw_StrEnd
		STA		SecPtr	 
		LDY		#1
		LDA		(PtrL,Y)
		STA		PosPtr
		LDA		PtrL
		PHA
		LDA		PtrH
		PHA
		JSR		DRAW_CHAR12x12
		PLA
		STA		PtrH
		PLA
		STA		PtrL
		INC		LCDX
		CLC	
		LDA		#2
		ADC		PtrL
		STA		PtrL
		LDA		#0
		ADC		PtrH
		STA		PtrH
		BRA		DRAWSTRLOOP		
Draw_StrEnd:	
		PLY
		PLA	
		RTS

;;==============================================================================
;; Input: A LCDX LCDY
;; Useing Ram: TEMP_L
;;
;;==============================================================================
DISP_NUMBER:
		PHA
		PHX
		PHY
		CMP		#200
		BCS		MORE_TWOHANDRED
		CMP		#100
		BCS		MORE_ONEHANDRED
		JSR		DIVIDETEN
		CMP		#0
		BEQ		DISP_NUMNXT1
		JSR		DRAW_CHAR8x8
		INC		LCDX
DISP_NUMNXT1:
		LDA		ResData
		JSR		DRAW_CHAR8x8
		BRA		DISP_NUMEND
MORE_TWOHANDRED:
		SEC
		SBC		#200
		PHA
		LDA		#2
		JSR		DRAW_CHAR8x8
		PLA
		BRA		DISP_NUMNXT2
MORE_ONEHANDRED:
		SEC
		SBC		#100
		PHA
		LDA		#1
		JSR		DRAW_CHAR8x8
		PLA
DISP_NUMNXT2:
		INC		LCDX
		JSR		DIVIDETEN
		JSR		DRAW_CHAR8x8
		INC		LCDX
		LDA		ResData
		JSR		DRAW_CHAR8x8					
DISP_NUMEND:
		PLY
		PLX
		PLA
		RTS
;;==============================================================================
;; Input: A LCDX LCDY
;; Useing Ram: TEMP_L
;;
;;==============================================================================
DISP_NUMBER_IN:
		PHA
		PHX
		PHY
		CMP		#200
		BCS		MORE_TWOHANDRED_IN
		CMP		#100
		BCS		MORE_ONEHANDRED_IN
		JSR		DIVIDETEN
		CMP		#0
		BEQ		DISP_NUMNXT1_IN
		JSR		DRAW_CHAR8x8_IN
		INC		LCDX
DISP_NUMNXT1_IN:
		LDA		ResData
		JSR		DRAW_CHAR8x8_IN
		BRA		DISP_NUMEND_IN
MORE_TWOHANDRED_IN:
		SEC
		SBC		#200
		PHA
		LDA		#2
		JSR		DRAW_CHAR8x8_IN
		PLA
		BRA		DISP_NUMNXT2_IN
MORE_ONEHANDRED_IN:
		SEC
		SBC		#100
		PHA
		LDA		#1
		JSR		DRAW_CHAR8x8_IN
		PLA
DISP_NUMNXT2_IN:
		INC		LCDX
		JSR		DIVIDETEN
		JSR		DRAW_CHAR8x8_IN
		INC		LCDX
		LDA		ResData
		JSR		DRAW_CHAR8x8_IN					
DISP_NUMEND_IN:
		PLY
		PLX
		PLA
		RTS		
;;==============================================================================
;; Input: A -> ASSCII code  LCDX -> rang (0-29) LCDY -> rang (0-12)
;; Output: char
;; Use Ram: FPtrL/FPtrH,PtrL/PtrH  
;;==============================================================================
DRAW_CHAR8x8:
		PHA
		PHX
		PHY
		STZ		FPtrH
		STA		FPtrL

		ASL		FPtrL
		ROL		FPtrH
		
		ASL		FPtrL
		ROL		FPtrH
		
		ASL		FPtrL
		ROL		FPtrH			;mul * 8
		
		LDA		#<ASCIIFont5x7
		CLC
		ADC		FPtrL
		STA		FPtrL
		LDA		#>ASCIIFont5x7
		ADC		FPtrH
		STA		FPtrH			;load font input port
;===...............................................===		
		LDA		#<LCD_BUF_START 
		STA		PtrL
		LDA		#>LCD_BUF_START 
		STA		PtrH
		
		LDA		LCDY
		ASL
		TAX
		LDA		Mult240Tab1,X		
		CLC
		ADC		PtrL
		STA		PtrL
		LDA		Mult240Tab1+1,X
		ADC		PtrH
		STA		PtrH
		
		LDX		#8
		
		LDY		LCDX
Disp_8x8LP:		
		LDA		(FPtrL)
		STA		(PtrL),Y
		
		CLC		
		LDA		PtrL
		ADC		#30
		STA		PtrL
		LDA		PtrH
		ADC		#0
		STA		PtrH

		CLC
		INC		FPtrL
		LDA		FPtrL
		CMP		#0
		BNE		Disp_skip
		INC		FPtrH
Disp_skip:		
		DEX		
		CPX		#0
		BNE		Disp_8x8LP
		
		PLY
		PLX
		PLA
		RTS
;;==============================================================================
;; Input: A -> ASSCII code  LCDX -> rang (0-29) LCDY -> rang (0-12)
;; Output: char
;; Use Ram: FPtrL/FPtrH,PtrL/PtrH  
;;==============================================================================
DRAW_CHAR8x8_IN:
		PHA
		PHX
		PHY
		STZ		FPtrH
		STA		FPtrL

		ASL		FPtrL
		ROL		FPtrH
		
		ASL		FPtrL
		ROL		FPtrH
		
		ASL		FPtrL
		ROL		FPtrH			;mul * 8
		
		LDA		#<ASCIIFont5x7
		CLC
		ADC		FPtrL
		STA		FPtrL
		LDA		#>ASCIIFont5x7
		ADC		FPtrH
		STA		FPtrH			;load font input port
;===...............................................===		
		LDA		#<LCD_BUF_START 
		STA		PtrL
		LDA		#>LCD_BUF_START 
		STA		PtrH
		
		LDA		LCDY
		ASL
		TAX
		LDA		Mult240Tab1,X		
		CLC
		ADC		PtrL
		STA		PtrL
		LDA		Mult240Tab1+1,X
		ADC		PtrH
		STA		PtrH
		
		LDX		#8
		
		LDY		LCDX
Disp_8x8LP_IN:		
		LDA		(FPtrL)
		EOR		#FFH
		STA		(PtrL),Y
		
		CLC		
		LDA		PtrL
		ADC		#30
		STA		PtrL
		LDA		PtrH
		ADC		#0
		STA		PtrH

		CLC
		INC		FPtrL
		LDA		FPtrL
		CMP		#0
		BNE		Disp_skip_IN
		INC		FPtrH
Disp_skip_IN:		
		DEX		
		CPX		#0
		BNE		Disp_8x8LP_IN
		
		PLY
		PLX
		PLA
		RTS		
;==================================================
; Function: clean line in the display
; Input: LCDY
;==================================================
CLS_LINE:
		PHX
		PHY
		PHA
		LDA		#<LCD_BUF_START 
		STA		PtrL
		LDA		#>LCD_BUF_START 
		STA		PtrH
		
		LDA		LCDY
		ASL
		TAX
		LDA		Mult240Tab,X		
		CLC
		ADC		PtrL
		STA		PtrL
		LDA		Mult240Tab+1,X
		ADC		PtrH
		STA		PtrH

		LDA		#0
		LDX		#0CH
FILL_L_LP:		
		LDY		#30
FILL_0_LP:		
		STA		(PtrL)
		CLC
		INC		PtrL
		BNE		FILL_1_LP
		PHA
		LDA		PtrH
		ADC		#1
		STA		PtrH
		PLA
FILL_1_LP:
		DEY
		CPY		#0
		BNE		FILL_0_LP
		DEX
		CPX		#0
		BNE		FILL_L_LP	   	

		PLA
		PLY
		PLX
		RTS

;==================================================
; Function: clean A char
; Input: LCDX LCDY
;==================================================
CLS_CHAR12x12:
		LDA		#A1H
		STA		SecPtr
		STA		PosPtr
		JSR		DRAW_CHAR12x12
		RTS
;==================================================
; Function: clean A char
; Input: LCDX LCDY CHARNUM
; CHARNUM rang: 1-20
;==================================================
CLS_CHARMANY:
		JSR		CLS_CHAR12x12
		INC		LCDX
		DEC		CHARNUM
		LDA		CHARNUM
		CMP		#0
		BNE		CLS_CHARMANY
		RTS
		
;==================================================
; Function: reverse video char			  ||
; Input: LCDX LCDY			 	  ||
; Input: STRCNT					  ||
;==================================================
InVideo:
		PHA
		PHX
		PHY
InVideo1:	
		LDA		#<LCD_BUF_START 
		STA		PtrL
		LDA		#>LCD_BUF_START 
		STA		PtrH
		
		LDA		LCDY
		ASL
		TAX
		LDA		Mult240Tab,X		
		CLC
		ADC		PtrL
		STA		PtrL
		LDA		Mult240Tab+1,X
		ADC		PtrH
		STA		PtrH

		BBS0		<LCDX,InVideo_Offset4bitHD
		LDA		#12
		STA		TEMP_L

InvideoLP:
		LDX		LCDX
		LDA		XoffsetTab,X
		TAY
		
		LDA		(PtrL),Y
		EOR		#0FFH
		STA		(PtrL),Y
		
		INY
		
		LDA		(PtrL),Y
		EOR		#0F0H
		STA		(PtrL),Y
		
		CLC		
		LDA		PtrL
		ADC		#30
		STA		PtrL
		LDA		PtrH
		ADC		#0
		STA		PtrH
		
		DEC		TEMP_L
		BNE		InvideoLP
		BRA		InvideoEnd1
InVideo_Offset4bitHD:
		LDA		#12
		STA		TEMP_L
InvideoLP2:
		LDX		LCDX
		LDA		XoffsetTab,X
		TAY
		
		LDA		(PtrL),Y
		EOR		#0FH
		STA		(PtrL),Y
		
		INY

		LDA		(PtrL),Y
		EOR		#0FFH
		STA		(PtrL),Y
		
		
		CLC		
		LDA		PtrL
		ADC		#30
		STA		PtrL
		LDA		PtrH
		ADC		#0
		STA		PtrH

		DEC		TEMP_L
		BNE		InvideoLP2	
InvideoEnd1:
		DEC		STRCNT
		LDA		STRCNT
		CMP		#0
		BEQ		InvideoEnd2
		INC		LCDX
		JMP		InVideo1
InvideoEnd2:
		PLY
		PLX
		PLA
		RTS
;***************************************************************************
;* Func:        LCD_Init
;* Input:       none
;* Output:      none
;*
;* Description: LCD Init
;*
;***************************************************************************
LCD_Init:
        stz     LCDX
        stz     LCDY
        rts
.IF     ASSEMBLER=ZARDOZ
.EFUNC  ;LCD_Init
.ENDIF  ;ASSEMBLER=ZARDOZ
;===============================================================================
;;input parameter: LCDX  LCDY/ SecPtr PosPtr
;;Find way: ((SecPrt-0xA1)*94+ PosPrt-0xA1)*24
;;LCDX rang -> 0-19; LCDY rang (0-12)
;;
;;
;;------------------------------------------------------------------------------
DRAW_CHAR12x12:
		PHA
		PHX
		PHY
		LDA		DRRL
		PHA
		LDA		DRRH
		PHA
		SEC
		LDA		SecPtr
		SBC		#0A1H		;MULDATA_L
		STA		MULDATA_L
		STZ		MULDATA_H
		LDA		#94
		STA		TEMP_L
		STZ		TEMP_H
		STZ		TEMP_H2
		STZ		TEMP_H3		; section prt * 24 byte
		JSR		MUL16_16
		
		SEC
		LDA		PosPtr
		SBC		#0A1H
		CLC
		ADC		DIVIDER_L
		STA		DIVIDER_L
		LDA		DIVIDER_H
		ADC		#0
		STA		DIVIDER_H
;-------------------------------------------------
;The befor cal: Sec*96 + Pos 			 |
;-------------------------------------------------
;The follow cal: x* 24				 |
;-------------------------------------------------
		LDA		#24
		STA		MULDATA_L
		STZ		MULDATA_H
		LDA		DIVIDER_L
		STA		TEMP_L
		LDA		DIVIDER_H
		STA		TEMP_H
		STZ		TEMP_H2
		STZ		TEMP_H3
		JSR		MUL16_16
;; offset = DIVIDER_H/DIVIDER_L b14-b0 
;; DS = DIVIDER_H2/DIVIDER_H b15-b7
		LDA		DIVIDER_H2
		STA		TEMP_L
		LDA		DIVIDER_H
		STA		TEMP_H
		ASL		TEMP_H
		ROL		TEMP_L		; b0<C
		LDA		TEMP_L
		AND		#07H		;每8000H加1 
		CLC
		ADC		#2		;从10000H开始 
		STA		TEMP_L		;DRR
		
		STA		DRR
		
		LDA		DIVIDER_L
		STA		FPtrL
		LDA		DIVIDER_H
		AND		#7FH
		STA		FPtrH
		SMB7		<FPtrH		; + 8000H
		
;<<<<< (FPtr)= Font offset >>>>> ----------------
;<<<<<     TEMP_L= DS	   >>>>> ----------------
		
		LDA		#<LCD_BUF_START 
		STA		PtrL
		LDA		#>LCD_BUF_START 
		STA		PtrH
		
		LDA		LCDY
		ASL
		TAX
		LDA		Mult240Tab,X		
		CLC
		ADC		PtrL
		STA		PtrL
		LDA		Mult240Tab+1,X
		ADC		PtrH
		STA		PtrH
		
		BBS0		<LCDX,Offset4bitHD
		LDA		#12
		STA		TEMP_L

DispCharLP:
		LDX		LCDX
		LDA		XoffsetTab,X
		TAY
		
		LDA		(FPtrL)
		STA		(PtrL),Y
		
		INY
		INC		FPtrL
		
		BNE		DispCharNext
		INC		FPtrH
DispCharNext:		
		LDA		(PtrL),Y
		AND		#0FH
		ORA		(FPtrL)
		STA		(PtrL),Y
		
		CLC		
		LDA		PtrL
		ADC		#30
		STA		PtrL
		LDA		PtrH
		ADC		#0
		STA		PtrH

		INC		FPtrL
		LDA		FPtrL
		CMP		#0
		BNE		DispCharNext1	
		INC		FPtrH
DispCharNext1:
		DEC		TEMP_L
		BNE		DispCharLP		
		
		JMP		DispCharEnd	
		
Offset4bitHD:
		LDA		#12
		STA		TEMP_L

DispCharLP2:
		
		LDA		(FPtrL)
		STA		TEMP_H2
		INC		FPtrL
		LDA		FPtrL
		CMP		#0
		BNE		DispCharNext2
		INC		FPtrH
DispCharNext2:		
		LDA		(FPtrL)
		STA		TEMP_H
		
		CLC		
		LSR		TEMP_H2
		ROR		TEMP_H
		CLC		
		LSR		TEMP_H2
		ROR		TEMP_H
		CLC		
		LSR		TEMP_H2
		ROR		TEMP_H
		CLC		
		LSR		TEMP_H2
		ROR		TEMP_H		;shit 4 bit by right

		LDX		LCDX
		LDA		XoffsetTab,X
		TAY
		LDA		TEMP_H2
		
		LDA		#F0H
		AND		(PtrL),Y
		ORA		TEMP_H2
		STA		(PtrL),Y
		
		
;		ORA		(PtrL),Y
;		STA		(PtrL),Y
		
		INY
		
		LDA		TEMP_H
		STA		(PtrL),Y
		
		CLC		
		LDA		PtrL
		ADC		#30
		STA		PtrL
		LDA		PtrH
		ADC		#0
		STA		PtrH

		INC		FPtrL
		LDA		FPtrL
		CMP		#0
		BNE		DispCharNext3
		INC		FPtrH
DispCharNext3:
		DEC		TEMP_L
		LDA		TEMP_L
		CMP		#0
		BNE		DispCharLP2
DispCharEnd:
		PLA
		STA		DRRH
		PLA
		STA		DRRL
		PLY
		PLX
		PLA		
		RTS
;=================================================

;=================================================
;Input:A
;Output: Residue--> ResData    Quotient-->A
;=================================================
DIVIDETEN:
		PHX
		PHY
                STZ             TEMP
DivLoop:
                CMP             #10
                bcc             DivEnd
                SEC
                SBC             #10
                INC             TEMP
                JMP             DivLoop
DivEnd:
                STA             ResData
                LDA             TEMP
		PLX
		PLY
                RTS             
;=================================================	
 ;;==============================================================================
Mult240Tab:
		DW	0
		DW	360
		DW	720
		DW	1080
		DW	1440
		DW	1800
		DW	2160
		DW	2520
		DW	2880
		DW	3240
		DW	3600
		DW	3960
		DW	4320
		DW	4680
XoffsetTab:
		DB      0
		DB	1
		DB	3
		DB	4
		DB	6
		DB	7
		DB	9
		DB	10
		DB	12
		DB	13
		DB	15
		DB	16
		DB	18
		DB	19
		DB	21
		DB	22
		DB	24
		DB	25
		DB	27
		DB	28
Mult240Tab1:
		DW	0+90
		DW	360+90
		DW	720+90
		DW	1080+90
		DW	1440+90
		DW	1800+90
		DW	2160+90
		DW	2520+90
		DW	2880+90
		DW	3240+90
		DW	3600+90
		DW	3960+90
		DW	4320+90
		DW	4680+90
;;==============================================================================		
ASCIIFont5x7:

	; 16h
	DB    0Eh
	DB    11h
	DB    13h
	DB    15h
	DB    19h
	DB    11h
	DB    0Eh
	DB    00h

	; 17h
	DB    04h
	DB    0Ch
	DB    04h
	DB    04h
	DB    04h
	DB    04h
	DB    0Eh
	DB    00h

	; 18h
	DB    0Eh
	DB    11h
	DB    01h
	DB    02h
	DB    04h
	DB    08h
	DB    1Fh
	DB    00h

	; 19h
	DB    1Fh
	DB    02h
	DB    04h
	DB    02h
	DB    01h
	DB    11h
	DB    0Eh
	DB    00h

	; 1Ah
	DB    02h
	DB    06h
	DB    0Ah
	DB    12h
	DB    1Fh
	DB    02h
	DB    02h
	DB    00h

	; 1Bh
	DB    1Fh
	DB    10h
	DB    1Eh
	DB    01h
	DB    01h
	DB    11h
	DB    0Eh
	DB    00h

	; 1Ch
	DB    06h
	DB    08h
	DB    10h
	DB    1Eh
	DB    11h
	DB    11h
	DB    0Eh
	DB    00h

	; 1Dh
	DB    1Fh
	DB    01h
	DB    02h
	DB    04h
	DB    08h
	DB    08h
	DB    08h
	DB    00h

	; 1Eh
	DB    0Eh
	DB    11h
	DB    11h
	DB    0Eh
	DB    11h
	DB    11h
	DB    0Eh
	DB    00h

	; 1Fh
	DB    0Eh
	DB    11h
	DB    11h
	DB    0Fh
	DB    01h
	DB    02h
	DB    0Ch
	DB    00h
	
	; empty
	DB    00h
	DB    00h	
	DB    00h
	DB    00h		
	DB    00h
	DB    00h		
	DB    00h
	DB    00h		
;==================================================== 		
;==================================================== 
        .END

⌨️ 快捷键说明

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