📄 iop.asm
字号:
bra read_exit
rd_set_stb_high:
bbs 2,read_byte_status,rd_wait_ack_high
rmb VFDB_STB,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
smb 2,read_byte_status
bra read_exit
rd_wait_ack_high:
bbs VFDB_CLK,VFD_PORT,rd_next_bit
bra read_exit
rd_next_bit:
stz read_byte_status
dec spl10_read_count
beq read_byte_ok
read_exit:
clc
rts
read_byte_ok:
sec
rts
.endif
.ifnz SUPPORT_DSA
Dsaservice: ;ssss
bbs 0,rDsastatus,Dsaiswrite ;if status bit 0 is high
bbs 7,IOP_DATA4_H,Dsanotsync ;is read in ok,but not next
bbs 5,rDsastate,Dsaread5 ;ack phase
bbs 4,rDsastate,Dsaread4 ;ack phase
bbs 3,rDsastate,Dsaread3
bbs 2,rDsastate,Dsaread2
bbs 1,rDsastate,Dsaread1
bbs 0,rDsastate,Dsaread0
bbs DSAB_DAT,DSA_PORT,Dsanotsync
stz rDsatimeout
lda #DSA_ACK
sta DSA_PORT_CFG
rmb DSAB_ACK,DSA_PORT
smb 0,rDsastate ;sync phase
rts
Dsanotsync:
smb 0,rDsastatus ;write state
rts
Dsaread0:
bbr DSAB_DAT,DSA_PORT,Dsanotsync1
stz DSA_PORT_CFG
rol rDsastate
lda #16
sta rDsaloopcount
Dsanotsync1:
rts
Dsaread1:
bbs DSAB_STB,DSA_PORT,Dsatran2
sec
bbs DSAB_DAT,DSA_PORT,Dsadatahigh
clc
Dsadatahigh:
rol IOP_DATA2_L ;rDsadata+1
rol IOP_DATA2_H ;rDsadata
lda #DSA_ACK
sta DSA_PORT_CFG
rmb DSAB_ACK,DSA_PORT
Dsatran3:
rol rDsastate ; dsastate2
rts
Dsaread2:
bbr DSAB_STB,DSA_PORT,Dsatran2
stz DSA_PORT_CFG
dec rDsaloopcount
beq Dsatran3 ;Dsatran3
Dsatran4:
ror rDsastate
Dsatran2:
rts
Dsaread3:
stz DSA_PORT_CFG
bra Dsatran3
Dsaread4:
bbs DSAB_ACK,DSA_PORT,Dsatran2
lda #DSA_STB
sta DSA_PORT_CFG
rmb DSAB_STB,DSA_PORT
bra Dsatran3
Dsaread5:
bbr DSAB_ACK,DSA_PORT,Dsatran2
stz DSA_PORT_CFG
stz rDsastate
smb 7,IOP_DATA4_H
rts
Dsaiswrite:
bbr 6,IOP_DATA4_H,Dsatran12 ;when low is write ok
bbs 5,rDsastate,Dsawrite5 ;ack phase
bbs 4,rDsastate,Dsawrite4 ;ack phase
bbs 3,rDsastate,Dsawrite3
bbs 2,rDsastate,Dsawrite2
bbs 1,rDsastate,Dsawrite1
bbs 0,rDsastate,Dsawrite0
stz rDsatimeout
lda #DSA_DAT
sta DSA_PORT_CFG
rmb DSAB_DAT,DSA_PORT
bbs DSAB_ACK,DSA_PORT,Dsatran10
stz DSA_PORT_CFG
smb 0,rDsastate ;dsawrite0
rts
Dsawrite0:
bbr DSAB_ACK,DSA_PORT,Dsatran10
rol rDsastate ;dsawrite1
lda #16
sta rDsaloopcount
Dsatran10:
rts
Dsawrite1:
lda #0
bbr 7,IOP_DATA3_H,Dsasetdataplow
sta DSA_PORT_CFG
bra Dsadatasetok
Dsasetdataplow:
ora #DSA_DAT
sta DSA_PORT_CFG
rmb DSAB_DAT,DSA_PORT
Dsadatasetok:
sta DSA_PORT_CFG
jsr Flashinout
ora #DSA_STB
sta DSA_PORT_CFG
rmb DSAB_STB,DSA_PORT
Dsanextstate:
rol rDsastate ;dsawrite2
rts
Dsawrite2:
bbs DSAB_ACK,DSA_PORT,Dsatran10
lda #0
bbs 7,IOP_DATA3_H,Dsasetdataphigh
ora #DSA_DAT
Dsasetdataphigh:
sta DSA_PORT_CFG
rol IOP_DATA3_L
rol IOP_DATA3_H
bra Dsanextstate
Dsawrite3:
bbr DSAB_ACK,DSA_PORT,Dsatran10
dec rDsaloopcount
beq Dsatran11
ror rDsastate ;dsawrite2
ror rDsastate ;dsawrite1
rts
Dsatran11:
lda #DSA_ACK
sta DSA_PORT_CFG
rmb DSAB_ACK,DSA_PORT
bra Dsanextstate
Dsawrite4:
bbs DSAB_STB,DSA_PORT,Dsatran10
stz DSA_PORT_CFG
;smb DSAB_ACK,DSA_PORT
bra Dsanextstate
Dsawrite5:
bbr DSAB_STB,DSA_PORT,Dsatran10
rmb 6,IOP_DATA4_H
Dsatran12:
stz rDsastatus
stz rDsastate
stz DSA_PORT_CFG
rts ;kevin
.endif
.ifnz SUPPORT_LCD
;;**************************************************************************;;
;; Lcd send byte ;;
;;**************************************************************************;;
Lcdsendbyte:
lda rLcdsendcount
beq Lcdsendreturn
dec rLcdsendcount
bbs 0,rLcdsendcount,Lcdclklow
lda rLcdloopcount
cmp #2
bne Lcdclkhigh
lda rLcdgamecount
beq Lcdclkhigh
; lda IOP_DATA5_H
; and #%00110000
; bne Lcdclkhigh
lda #(GAME_D1.or.GAME_D2)
sta GAME_PORT_CFG
sta GAME_PORT
stz GAME_PORT_CFG
sec
bbs GAMEP_D1,GAME_PORT, Game1high
clc
Game1high:
;ror IOP_DATA7_H ;GAME_PAD1_BASE
ror rGamepad1_data
sec
bbs GAMEP_D2,GAME_PORT, Game2high
clc
Game2high:
;ror IOP_DATA7_L ;GAME_PAD2_BASE
ror rGamepad2_data
dec rLcdgamecount
bne Lcdclkhigh
jsr Flashinout
lda rGamepad1_data
sta IOP_DATA7_H
lda rGamepad2_data
;smb 0,rGameflag
sta IOP_DATA7_L
bra Lcdclkhigh
Lcdclklow:
.ifnz SUPPORT_DEMO
;.ifnz 0
smb VFDB_CLK,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG ;;set VFD_CLK output
.endif
rmb VFDB_CLK,VFD_PORT
bbr 0,rLcdtemp,Lcdsend16
ror rLcdtemp
ror rLcddata+1
bcc Lcddatalow
bra Lcddatahigh
Lcddatalow:
.ifnz SUPPORT_DEMO
;.ifnz 0
smb VFDB_DAT,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG ;;set VFD_CLK output
.endif
rmb VFDB_DAT,VFD_PORT
rts
Lcdsend16:
ror rLcddata
bcc Lcddatalow
Lcddatahigh:
.ifnz SUPPORT_DEMO
;.ifnz 0
rmb VFDB_DAT,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG ;;set VFD_CLK output
.endif
rts
Lcdclkhigh:
.ifnz SUPPORT_DEMO
;.ifnz 0
rmb VFDB_CLK,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG ;;set VFD_CLK output
.endif
Lcdsendreturn:
rts
.endif
.ifnz SUPPORT_QCODE
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
.else
nop
nop
nop
nop
nop
nop
nop
nop
nop
.endif
; .org $220 ;((($+15)/16)*16+64)
;;**************************************************************************;;
;; VFD memory init ;;
;;**************************************************************************;;
.ifnz 0; SUPPORT_VFD
Vfdreset:
; ldx 31
;Vfdloop:
; stz VFD_BUFFER_BASE,x
; dex
; bne Vfdloop
; lda #02H
; sta VFD_BUFFER_BASE
; lda #8CH
; sta VFD_BUFFER_BASE+1
; lda #C0H
; sta VFD_BUFFER_BASE+2
; lda #0fH
; sta VFD_COUNT_BASE
rts
.endif
.ifnz SUPPORT_LCD
Vfdreset:
ldx 31
Vfdloop:
stz VFD_BUFFER_BASE,x
dex
bne Vfdloop
;lda #0cH
;sta VFD_BUFFER_BASE
lda #40H
sta VFD_BUFFER_BASE
lda #10H
sta VFD_BUFFER_BASE+1
lda #50H
sta VFD_BUFFER_BASE+2
lda #4aH
sta VFD_BUFFER_BASE+3
lda #60H
sta VFD_BUFFER_BASE+4
lda #02H
sta VFD_BUFFER_BASE+5
lda #22
sta VFD_COUNT_BASE
rts
.endif
.ifnz 0 ;SUPPORT_VFD
.org (VFD_COUNT_BASE-$200-6)
ddata0 .EQUAL 0fH
ddata1 .EQUAL 02H
ddata2 .EQUAL 8cH
ddata3 .EQUAL c0H
.endif
.ifnz 0; SUPPORT_LCD
.org (VFD_COUNT_BASE-$200-6)
ddata0 .EQUAL 16H
ddata1 .EQUAL 40H
ddata2 .EQUAL 10H
ddata3 .EQUAL 50H
ddata3 .EQUAL 4aH
ddata3 .EQUAL 60H
ddata3 .EQUAL 02H
.endif
;;**************************************************************************;;
;; vector ;;$200 ;;
;;**************************************************************************;;
Vector: .section
DW vReset
DW vNmi
DW vIrq
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -