📄 hf0803.asm
字号:
;;==============================================================================
;============= << 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 + -