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

📄 hf0803.asm

📁 FLASH烧录 麻将机。。。。 FLASH烧录 麻将机
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;;==============================================================================
;=============       <<  USB ENUMERATION TEST  >>       ========================
;===============================================================================
                 CHIP W65C02S

                .PL             0
                .PW             128
                
                .GLOBALS		ON
                
                .INCLUDE       ST2205.DEF
                .INCLUDE       COMMON.INC
                .INCLUDE       ST22XX.INC
		.INCLUDE       ram.def              
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.XREF	  DRAW_CHAR12x12
.XREF	  DRAW_STRING
.XREF     InVideo
.XREF	  CLS_LINE
.XREF	  DIVIDETEN
.XREF	  DISP_NUMBER
.XREF	  CLS_CHAR12x12
.XREF	  DISP_NUMBER_IN
.XREF	  CLS_CHARMANY
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--<< EQU >>
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BKO             EQU             200H
BKI             EQU             240H
EPZOUT          EQU             280H
EPZIN           EQU             288H

DEBUG_MEM       EQU             300H
DEBUG_MEM2      EQU             310H
BaseAddr		EQU	1FF0H
;------------------------------------------------------------------------
ProgramRam		EQU		D2EH		;18byte program
;------------------------------------------------------------------------
LCD_BUF_START           EQU             D40H
LCD_SEG                 EQU             240
LCD_COM                 EQU             160
LCD_CONTROL             EQU             00000000b
LCD_LCK                 EQU             00010011b               ;4bit mode; LCDCK=SYSCK/8
LCD_LFRA                EQU             6
LCD_CONTRAST            EQU             1
LCD_AC                  EQU             (1-1)/2

LCD_DATA_WIDTH          .EQU    18H		;10h     ; 1-bit:00h  4-bit 10h
LCD_VIRTUAL_PAGE_WIDTH  .EQU    (LCD_SEG)/2/2
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;key define
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;key config
;      pa0	pa1	pa2		
;pe0   on/off	up	cancel
;pe1	left	enter	right
;pe2	write	down	pageup
;pe3	/	/	pagedown
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
updatakey		EQU	01H
upkey			EQU	02H
cancelkey		EQU	03H
leftkey			EQU	04H
enterkey		EQU	05H
rightkey		EQU	06H
writekey		EQU	07H
downkey			EQU	08H
pageupkey		EQU	09H
pagedownkey		EQU	10H
onoffkey		EQU	11H
NULLKEY			EQU	FFH
Stack_point      	EQU     3Fh
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;***************************************************************************
;* VARS Section
;*
;***************************************************************************
SYSRAM                  .SECTION                REF_ONLY
;*************************************************************************
STATUS_FLAG	.DS		1
LCDX           	.DS             1       
LCDY            .DS             1 
Ptr		      
PtrL            .DS		1
PtrH           	.DS		1
FPtrL		.DS		1
FPtrH		.DS		1
SecPtr		.DS		1
PosPtr		.DS		1
DIVIDER_H3	.DS		1
DIVIDER_H2	.DS		1
DIVIDER_H	.DS		1
DIVIDER_L	.DS		1
TEMP_H3		.DS		1
TEMP_H2		.DS		1
TEMP_H		.DS		1
TEMP_L		.DS		1
MULDATA_H	.DS		1
MULDATA_L	.DS		1
STRCNT		.DS		1
SystemFlag	.DS		1
KeyCode		.DS		1
PageNum		.DS		1
OldPageNum	.DS		1
EPPAddL		.DS		1
EPPAddH		.DS		1
WriteBuff	.DS		1
SDBuff		.DS		1
RDBuff		.DS		1
DelayCntH	.DS		1
DelayCntL	.DS		1
BuffCntL	.DS		1
BuffCntH	.DS		1
ResData		.DS		1
TEMP		.DS		1
SCardID		.DS		1
SPtrL		.DS		1
SPtrH		.DS		1
Page0Menu	.DS		1
CardNum		.DS		1
PerNum1		.DS		1
PerNum2		.DS		1
ForbidCard	.DS		1
ProSelec	.DS		1
CardNumKind	.DS		1
WashTimeKind	.DS		1
PChangeM	.DS		1
TurnPM		.DS		1
TuchM		.DS		1
Page1Menu	.DS		1
;Page1Menu	.DS		1
KeyFlag		.DS		1
OldKey		.DS		1
SameaddrL	.DS		1
SameaddrH	.DS		1
Page2Menu	.DS		1
Page9Menu	.DS		1
B1CNT		.DS		1
CardCountTaddrL	.DS		1
CardCountTaddrH	.DS		1
A1CardCnt	.DS		1
InitRamAddrL	.DS		1
InitRamAddrH	.DS		1
PageABNum	.DS		1
FirstDataAddrL	.DS		1
FirstDataAddrH	.DS		1
EndDataAddrL	.DS		1
EndDataAddrH	.DS		1
ACntAddrL	.DS		1
ACntAddrH	.DS		1
BCntAddrL	.DS		1
BCntAddrH	.DS		1
ACardCnt	.DS		1
ADataAddrL	.DS		1
ADataAddrH	.DS		1
BDataAddrL	.DS		1
BDataAddrH	.DS		1
ACCNT		.DS		1
BCardCnt	.DS		1
BCCNT		.DS		1
RamAddrL	.DS		1
RamAddrH	.DS		1
CardAData	.DS		1
PositionID	.DS		1
PositionDataL	.DS		1
PositionDataH	.DS		1
OddID		.DS		1
PositionKind	.DS		1
CharCnt		.DS		1
StartAddr	.DS		1
StopAddr	.DS		1
FillComData	.DS		1
AddrL		.DS		1
AddrH		.DS		1
NumKindStart	.DS		1
CHARNUM		.DS		1
MoveStartAddrL	.DS		1
MoveStartAddrH	.DS		1
MoveEndAddrL	.DS		1
MoveEndAddrH	.DS		1
;==========================================================
SYSRAM1			.SECTION		REF_ONLY
;==========================================================
Card1Count	.DS		35
Card2Count	.DS		35
Card3Count	.DS		35
Card4Count	.DS		35
Card5Count	.DS		35
Card6Count	.DS		35
Card7Count	.DS		35
Card8Count	.DS		35
Card9Count	.DS		35
Card10Count	.DS		35
Card11Count	.DS		35
Card12Count	.DS		35
Card13Count	.DS		35
Card14Count	.DS		35
Card15Count	.DS		35
Card16Count	.DS		35
A1Data		.DS		25
A2Data		.DS		25
A3Data		.DS		25
A4Data		.DS		25
A5Data		.DS		25
A6Data		.DS		25
A7Data		.DS		25
A8Data		.DS		25
A9Data		.DS		25
A10Data		.DS		25
A11Data		.DS		25
A12Data		.DS		25
A13Data		.DS		25
A14Data		.DS		25
A15Data		.DS		25
A16Data		.DS		30
B1Data		.DS		25
B2Data		.DS		25
B3Data		.DS		25
B4Data		.DS		25
B5Data		.DS		25
B6Data		.DS		25
B7Data		.DS		25
B8Data		.DS		25
B9Data		.DS		25
B10Data		.DS		25
B11Data		.DS		25
B12Data		.DS		25
B13Data		.DS		25
B14Data		.DS		25
B15Data		.DS		25
B16Data		.DS		30
ACNT		.DS		16
BCNT		.DS		16
PositionData	.DS		20
SameA1Data	.DS		35
SameA2Data	.DS		35
SameA3Data	.DS		35
SameA4Data	.DS		35
SameA5Data	.DS		35
SameA6Data	.DS		35
SameA7Data	.DS		35
SameA8Data	.DS		35
SameA9Data	.DS		35
SameA10Data	.DS		35
SameA11Data	.DS		35
SameA12Data	.DS		35
SameA13Data	.DS		35
SameA14Data	.DS		35
SameA15Data	.DS		35
SameA16Data	.DS		35
SameB1Data	.DS		35
SameB2Data	.DS		35
SameB3Data	.DS		35
SameB4Data	.DS		35
SameB5Data	.DS		35
SameB6Data	.DS		35
SameB7Data	.DS		35
SameB8Data	.DS		35
SameB9Data	.DS		35
SameB10Data	.DS		35
SameB11Data	.DS		35
SameB12Data	.DS		35
SameB13Data	.DS		35
SameB14Data	.DS		35
SameB15Data	.DS		35
SameB16Data	.DS		35
SameDailFlag	.DS		35
OddIDin		.DS		13
OddIDinB	.DS		13
Card1CountAddr	.DS		1
CardCountT	.DS		1
Etime1		.DS		1
Etime2		.DS		1
Etime3		.DS		1
Stime1		.DS		1
Stime2		.DS		1
Stime3		.DS		1
Wtime1		.DS		1
Wtime2		.DS		1
Wtime3		.DS		1
Ntime1		.DS		1
Ntime2		.DS		1
Ntime3		.DS		1
WahMAXTime	.DS		1
TuchOpenM	.DS		1
BrushDelay	.DS		1
TurnPm		.DS		1
ChageMm		.DS		1
AllowErTim 	.DS		1
TakeCardCount	.DS		1
PositionData0	.DS		1
PositionData1	.DS		1
PositionData2	.DS		1
PositionData3	.DS		1
PositionDataB0	.DS		1
PositionDataB1	.DS		1
PositionDataB2	.DS		1
PositionDataB3	.DS		1
OddID1		.DS		1
OddID2		.DS		1
OddID3		.DS		1
SaveOddID	.DS		1
PositionIDMax	.DS		1
Page3Sub1Memu	.DS		1
Page3Menu	.DS		1
TurnPMType	.DS		1
SameCount	.DS		1
SameACount	.DS		1
SameBCount	.DS		1
SameDoneFlag	.DS		1
SameABFlag	.DS		1
NumKindEnd	.DS		1
Page2SubPage	.DS		1
NeedP2SubPa	.DS		1
NumID		.DS		1
EndOddID	.DS		1
StartOddID	.DS		1
PositonEndIDE	.DS		1
PositonEndIDS	.DS		1
PositonEndIDW	.DS		1
PositonEndIDN	.DS		1
StartOddNum	.DS		1
LeftORRight	.DS		1
ABCKind		.DS		1
SeleCardQLKind	.DS		1
PrintColorDKind	.DS		1
AllowErTimeKind	.DS		1
TakeCardCKind	.DS		1
ForbidCardKind	.DS		1
SaveOddIDB	.DS		1
PercentNum	.DS		1
LeftArray	.DS		8
RightArray	.DS		8
LiangODDA	.DS		1
RLiangODDA	.DS		1
LiangODDB	.DS		1
RLiangODDB	.DS		1
QiangODDC	.DS		1
RQiangODDC	.DS		1
DailTemp	.DS		1
MoveDataFlag	.DS		1
PowerCnt	.DS		1
SysSave		.DS		1
;-------------------------------------------------------------------------------
PS0             .SECTION
USB_VECT:       	JMP     USB_VT
UART_R_VECT:    	JMP     UART_R_VT
UART_T_VECT:    	JMP     UART_T_VT
SPI_R_VECT:     	JMP     SPI_R_VT
SPI_T_VECT:     	JMP     SPI_T_VT
LCD_VECT:       	JMP     LCD_VT
RESERVED_VECT:  	JMP     RESERVED_VT
BASETIMER_VECT: 	JMP     BASETIMER_VT
PORT_VECT:      	JMP     PORT_VT
TIMER3_VECT:    	JMP     TIMER3_VT
TIMER2_VECT:    	JMP     TIMER2_VT 
TIMER1_VECT:    	JMP     TIMER1_VT 
TIMER0_VECT:    	JMP     TIMER0_VT 
INTX_VECT:      	JMP     INTX_VT  
BRK_VECT:       	JMP     BRK_VT 
RESET_VECT:     	JMP     RESET_VT
;;================                            ===================
;;================ < INTERRUPT SUBGRAM BEGIN >===================
;;================                            ===================
USB_VT: 
                RTI
BASETIMER_VT:   
                RTI
PORT_VT:
		PHA
		PHX
		PHY
		BBS7	<SystemFlag,PowerUp
		JMP	PORT_VT1
PowerUp:
		LDA	SysSave
		STA	<SYS
PORT_VT1:
		LDA	<PA	
		PLY
		PLX
		PLA
                RTI
TIMER3_VT:      
                RTI
TIMER2_VT:      
                RTI
UART_R_VT:
UART_T_VT:
SPI_R_VT:
SPI_T_VT:
		RTI
LCD_VT:
		RTI
INTX_VT:
		RTI
RESERVED_VT:
		RTI
BRK_VT: 
		RTI
TIMER0_VT:
		PHA
		PHX
		PHY
		SMB0	<SystemFlag
		PLY
		PLX
		PLA		
                RTI
TIMER1_VT:
		PHA
		PHX
		PHY
		SMB5	<SystemFlag
		PLY
		PLX
		PLA		
                RTI
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;;*******************                        *********************
;;******************* < POWER ON RESET PRG > *********************
;;*******************                        *********************
RESET_VT:
		SEI                             ; Interrupt disable.
		STZ	MISC
		LDA	#80H
		STA	PMCR
		LDX	#FFH
		TXS
		NOP
		SMB5	<IENAL


;		SMB7	<DRRH
		
;		LDA	#55H
;		STA	8000H+4000H

;		LDA	C000H	


	
		JSR	BankRam
		JSR	BankRamHigh
		JSR	InitDefRam
		JSR		InitIO
		JSR		InitPage
                 ; Initial data ROM bank register.		
                ldx     #000h                   ; Black screen.
                JSR     FillScreen
		LDX     #FFH
                TXS                            ; Initial stack pointer.
                JSR     InitialLCDC             ; Initial LCD control registers.
                LDA     #01h
                STA     <DRR 
		JSR	InitTime
		JSR	LoadLongCallToRam
		LDA	#<STRInit
		STA	PtrL
		LDA	#>STRInit
		STA	PtrH
		LDA	#6
		STA	LCDX
		LDA	#5
		STA	LCDY
		JSR	DRAW_STRING
		LDA	#<STRInit1
		STA	PtrL
		LDA	#>STRInit1
		STA	PtrH
		LDA	#6
		STA	LCDY
		LDA	#6
		STA	LCDX
		JSR	DRAW_STRING 
		LDA	#F8H
		STA	PE
		LDY	#<DelayTimeLs
		LDX	#>DelayTimeLs
		LDA	#1
		JSR	ProgramRam
		LDA	#0	
		STA	PageNum
		STA	OldPageNum
		LDA	#1
		STA	ProSelec
		STA	SCardID
		STZ	CardCountT	
		JSR	SetupPage0
		JSR	LoadDEFPage
		JSR	InitTime	
		CLI
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
;main loop
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MAIN:
		BBS5		<SystemFlag,PowerCheck
PowerNext:
		BBR0		<SystemFlag,MAIN
		RMB0		<SystemFlag
		SEI
		LDY		#<KeyScan
		LDX		#>KeyScan
		LDA		#1
		JSR		ProgramRam
		CLI

;		JSR		KeyScan
		LDA		KeyCode
		CMP		OldKey
		BEQ		CheckKeySame
		STA		OldKey
		RMB0		<KeyFlag
		JMP		MAIN
CheckKeySame:
		CMP		#NULLKEY
		BEQ		MAIN
		LDA		PageNum
		CMP		#2
		BEQ		PageNoSameKey
CheckKeySameNext1:
		BBS0		<KeyFlag,MAIN
CheckKeySameNext2:
		JSR		KeyDone
		JSR		IsPageChange
		SMB0		<KeyFlag
		JMP		MAIN
PageNoSameKey:
		LDA		KeyCode
		CMP		#leftkey
		BEQ		PageNoSameKey1
		CMP		#rightkey
		BEQ		PageNoSameKey1
		JMP		CheckKeySameNext1
PageNoSameKey1:		
		LDA		Page2Menu
		CMP	#1
		BEQ		PageNoSameKeyNext
		CMP	#2
		BEQ		PageNoSameKeyNext
		JMP		CheckKeySameNext1
		
PageNoSameKeyNext:
		LDY	#<DelayTime50ms
		LDX	#>DelayTime50ms
		LDA	#1
		SEI
		JSR	ProgramRam
		CLI
		JMP	CheckKeySameNext2
PowerCheck:
		LDA	PowerCnt
		CMP	#30
		BEQ	PowerDown
		INC	PowerCnt
		RMB5	<SystemFlag
		JMP	PowerNext
PowerDown:
		BBR3	<PA,PowerDown
		SMB6	<LCTR
		NOP
		SMB7	<LCTR
		LDA	SYS
		STA	SysSave
		STZ	PowerCnt
		SMB7	<SystemFlag
		STZ	<IREQL
		STZ	<IREQH
		STZ	<IENAH
		STZ	<IENAL
		RMB5	<IREQL
		SMB5	<IENAL
		STZ	PE
		LDA	#FFH
		STA	PA
		LDA	<PA
		LDA	#$04
		STA	<SYS
WaitWai:
		WAI
		BBS3	<PA,WaitWai
		NOP
		RMB7	<LCTR
		NOP
		RMB6	<LCTR
		SMB1	<IENAL
		SMB2	<IENAL
		JMP	MAIN			
;;===============================================================		
InitTime:
		LDA	#50
		STA	T0CL
		LDA	#CFH
		STA	T0CH
		LDA	#C0H
		STA	PRS
		SMB0	TIEN
		SMB1	IENAL
		LDA	#00
		STA	T1CL
		LDA	#C8H
		STA	T1CH
		SMB1	TIEN
		SMB2	IENAL		
		RTS
InitPage:
		LDA	#1
		STA	CardNumKind
		STA	ProSelec
		STZ	ForbidCard
		LDA	#1
		STA	WashTimeKind
		STA	PChangeM
		STA	TurnPM
		STA	TuchM
		LDA	#6
		STA	BrushDelay
		LDA	#15
		STA	AllowErTim
		LDA	#3
		STA	TakeCardCount
		STZ	A1CardCnt
		LDA	#1
		STA	PageABNum
		LDA	#1
		STA	Page2SubPage
		LDA	#1
		STA	LeftORRight
		STA	ABCKind	
		STA	SeleCardQLKind
		STA	PrintColorDKind
		STA	AllowErTimeKind
		STA	TakeCardCKind
		STA	ForbidCardKind
		LDA	#0
		STA	Page9Menu
		STZ	Page2Menu
		LDA	#1
		STA	Page0Menu
		LDA	#1
		STA	Page1Menu
		RTS				
InitDefRam:
		JSR	CLEAN_RAM
		STZ	InitRamAddrL
		LDA	#2
		STA	InitRamAddrH
InitRamLoop:
		LDA	#0
		STA	(InitRamAddrL)
		LDA	InitRamAddrL
		CMP	#FFH
		BEQ	InitDefRamH
InitRamLoop1:
		CLC
		INC	InitRamAddrL
		JMP	InitRamLoop
InitDefRamH:
		LDA	InitRamAddrH
		CMP	#1FH
		BEQ	InitDefRamEnd
		INC	InitRamAddrH
		STZ	InitRamAddrL
		JMP	InitRamLoop
InitDefRamEnd:
		RTS
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CLEAN_RAM:
                LDX             #00H
CLEAN_RAM_LOOP:
                STZ             80H,X
                INX 
                CPX             #80H
                BNE             CLEAN_RAM_LOOP
                RTS
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
								
InitIO:
		LDA	#10H
		STA	PCA
		LDA	#EFH
		STA	PA
		STZ	PCB
		STZ	PB
		LDA	#17H
		STA	PCC
		LDA	#07H
		STA	PC
		STZ	PCD
		LDA	#FFH
		STA	PCE
		LDA	#EFH
		STA	PE
		STZ	PCF
		STZ	PF
		LDA	#FFH
		STA	PCF
		STZ	PF
		RTS				
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IsPageChange:
		LDA		OldPageNum
		CMP		PageNum
		BNE		LoadPage
IsPageChangeEnd:
		RTS
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LoadPage:
		LDA	PageNum
		CMP	#0
		BEQ	ToPage0			
		CMP	#1
		BEQ	ToPage1
		CMP	#2
		BEQ	ToPage2
		CMP	#9
		BEQ	ToPage9
		JMP	IsPageChangeEnd
ToPage0:
		JMP	SetupPage0
ToPage1:
		JMP	SetupPage1
ToPage2:
		JMP	SetupPage2New
ToPage9:
		JMP	SetupPage9
KeyDone:
		LDA	PageNum
		CMP	#0
		BEQ	Page0KeyDonePR
		CMP	#1
		BEQ	Page1KeyDonePR
		CMP	#2
		BEQ	Page2KeyDonePR
		CMP	#9
		BEQ	Page9KeyDonePR
KeyDoneEnd:
		LDA	#FFH
		STA	KeyCode
		RTS
Page0KeyDonePR:
		JMP	Page0KeyDone
Page1KeyDonePR:	
		JMP	Page1KeyDone
Page2KeyDonePR:
		JMP	Page2KeyDone
Page9KeyDonePR:
		JMP	Page9KeyDone
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++					
;--<< Initial user RAM for system >>--
;===============================================================                
SetupPage0:
		JSR	JugeCardNum
		JSR	JugePerNum
		STZ	OldPageNum
		STZ	LCDY
		LDA	#01
		STA	LCDX
		LDA	#<STR02
		STA	PtrL
		LDA	#>STR02
		STA	PtrH
		JSR	DRAW_STRING
		LDA	#9
		STA	LCDX
		STZ	LCDY
		LDA	#108
		JSR	DISP_NUMBER
		LDA	#15
		STA	LCDX
		STZ	LCDY
		LDA	#136
		JSR	DISP_NUMBER

⌨️ 快捷键说明

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