📄 nec16312.asm
字号:
.ifnz NEC16312
;;==============================================================
init_16312:
smb VFD_STB_bit,VFD_PORT_CFG
lda #$02
sta rOutBuffer
jsr fSendOneByte
rmb VFD_STB_bit,VFD_PORT_CFG
jsr fDelay1
smb VFD_STB_bit,VFD_PORT_CFG
lda #$8b
sta rOutBuffer
jsr fSendOneByte
rmb VFD_STB_bit,VFD_PORT_CFG
rts
;;==============================================================
.ifnz NEC16312_SW
fProcessVfdReadsw:
smb VFD_STB_bit,VFD_PORT_CFG
lda #%01000011
sta rOutBuffer
jsr fSendOneByte
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
jsr fRecvOneByte
lda rOutBuffer
and #$F0
sta IOP_DATA7_L
smb VFD_DATA_bit,VFD_DATA_PORT_CFG
rmb VFD_STB_bit,VFD_PORT_CFG
rts
.endif
;;==============================================================
fProcessVfdWrite:
;;STB = 0
;;rmb VFD_STB_bit,VFD_PORT
smb VFD_STB_bit,VFD_PORT_CFG
;;send out command
.ifnz STANDBY_6313
lda IOP_DATA1_L
cmp #$41
bne normal_write
lda #1
sta standby_flag_first ;;led_flag_1
normal_write:
.endif
lda IOP_DATA1_L ;;cmd0
sta rOutBuffer
jsr fSendOneByte
;;get data size
lda IOP_DATA0_L
and #VFD_DAT_LN_MASK
beq lExitPorcessVfdWrite ;;if data len =0 then exit
lProcessDataOut:
sta rDataLen
ldx #0
lSendOutNextByte:
.ifnz STANDBY_6313
lda IOP_DATA2_L,x
sta rOutBuffer
lda rOutBuffer
cmp #$0a
beq cmp_standby_flag
bra s6313_end
cmp_standby_flag:
lda standby_flag_first
cmp #1
bne s6313_end
lda #1
sta standby_flag_end
s6313_end:
.else
lda IOP_DATA2_L,x
sta rOutBuffer
.endif
jsr fSendOneByte
inx
cpx rDataLen
bne lSendOutNextByte
lExitPorcessVfdWrite:
jsr fDelay1
;;STB = 1
;;smb VFD_STB_bit,VFD_PORT
rmb VFD_STB_bit,VFD_PORT_CFG
rts
;;*************************************************************
;;Function : fProcessVfdRead
;;Description : process VFD read function
;;Input : parameter on memory
;;Output : data memory
;;**************************************************************
fProcessVfdRead:
;;fProcessVfdReadkey:
;;STB = 0
;;rmb VFD_STB_bit,VFD_PORT
smb VFD_STB_bit,VFD_PORT_CFG
rmb 0,rSysCtrlFlag
;;send out command
lda VfdScanCode ;;cmd
sta rOutBuffer
jsr fSendOneByte
;;start to read data
;;change port to INPUT
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
;;get data
ldx #0
lRecvNextByte_1:
jsr fRecvOneByte
lda rOutBuffer
sta VfdResponse,x
beq lResponseIs0
;;has new response
smb 0,rSysCtrlFlag
lResponseIs0:
inx
cpx VfdRespLen
bne lRecvNextByte_1
;;check has any new key push
bbr 0,rSysCtrlFlag,lSkipUpdateVfdData
;;copy to latch
ldx #0
.ifnz GET_5BYTES_KEY_DATA
lCopyNext:
lda VfdResponse,x
sta VfdResponse1,x
inx
cpx #4
bne lCopyNext
ldx #4
lCopyNext1:
lda VfdResponse,x
sta VfdResponse2
inx
cpx VfdRespLen
bne lCopyNext1
.else
lCopyNext:
lda VfdResponse,x
sta VfdResponse1,x
inx
cpx VfdRespLen
bne lCopyNext
.endif
lSkipUpdateVfdData:
;;STB = 1
;;smb VFD_STB_bit, VFD_PORT
rmb VFD_STB_bit, VFD_PORT_CFG
smb VFD_DATA_bit,VFD_DATA_PORT_CFG
;;flush out cache
lda $460
lda $480
rts
;;**************************************************************
;;Function : fSendOneByte
;;Description : output one byte data to VFD port
;;Input : rOutBuffer
;;Output : NONE
;;**************************************************************
fSendOneByte:
ldy #8
lSendNextBit:
ror rOutBuffer
bcc lOutLow
smb VFD_DATA_bit,VFD_DATA_PORT ;;DATA=1
bra lSendOutOk
lOutLow:
rmb VFD_DATA_bit,VFD_DATA_PORT ;;DATA=0
lSendOutOk:
rmb VFD_CLK_bit,VFD_PORT ;; set CLK = 0
;;hold at least 200ns
jsr delay_time
smb VFD_CLK_bit,VFD_PORT ;; set CLK = 1
jsr delay_time
dey
bne lSendNextBit
rts
;;**************************************************************
;;Function : fRecvOneByte
;;Description : read one byte data to VFD port
;;Input : NONE
;;Output : rOutBuffer
;;**************************************************************
fRecvOneByte:
ldy #8
lRecvNextBit:
rmb VFD_CLK_bit,VFD_PORT ;; set CLK = 0
jsr delay_time
;;out clock high
smb VFD_CLK_bit,VFD_PORT ;; set CLK = 1
;;hold at least 100ns
jsr delay_time
bbr VFD_DATA_bit,VFD_DATA_PORT,lIsLow
sec
bra lMakeData
lIsLow:
clc
lMakeData:
;;ror rOutBuffer
rol rOutBuffer ;;fix reverse_fun on vfd.c
dey
bne lRecvNextBit
rts
delay_time:
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
rts
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -