📄 iop.asm
字号:
rmb VFDB_STB,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG ;;set VFD_STB input
.endif
rts
.endif
.ifnz SUPPORT_SPL10
do_spl10_service:
bbs 0,spl10_service_status,spl10_read
jsr do_spl10_wr
bcc service_wr_not_ok
smb 0,spl10_service_status
service_wr_not_ok:
bra service_exit
spl10_read:
bbs 1,spl10_service_status,reset_spl10
jsr do_spl10_rd
bcc service_rd_not_ok
smb 1,spl10_service_status
lda #90
sta spl10_wr_data
lda #8
sta spl10_write_count
service_rd_not_ok:
bra service_exit
reset_spl10:
bbs 2,spl10_service_status,reset_write
jsr do_spl10_sync
bcc service_exit
smb 2,spl10_service_status
bra service_exit
reset_write:
jsr do_write_bytes
bcc service_exit
restart_service:
stz spl10_service_status
service_exit:
rts
do_spl10_wr:
bbs 0,spl10_wr_status,wr_write_cmd
jsr do_spl10_sync
bcc sync_not_ok
smb 0,spl10_wr_status
lda #SPL10_WR_CMD
ora spl10_buf_count
sta spl10_wr_data
lda #8
sta spl10_write_count
sync_not_ok:
bra wr_exit
wr_write_cmd:
bbs 1,spl10_wr_status,wr_write_data
jsr do_write_bytes
bcc write_cmd_not_ok
smb 1,spl10_wr_status
ldx spl10_buf_count
lda SPL10_BUFFER_BASE,x
sta spl10_wr_data
lda #8
sta spl10_write_count
inc spl10_buf_count
lda spl10_buf_count
cmp #SPL10_BUFFER_SIZE
bne count_is_free
stz spl10_buf_count
count_is_free:
write_cmd_not_ok:
bra wr_exit
wr_write_data:
bbs 2,spl10_wr_status,write_next
jsr do_write_bytes
bcc write_data_not_ok
smb 2,spl10_wr_status
write_data_not_ok:
bra wr_exit
write_next:
stz spl10_wr_status
sec
rts
wr_exit:
clc
rts
do_spl10_rd:
bbs 0,spl10_rd_status,rd_write_cmd
jsr do_spl10_sync
bcc rd_sync_not_ok
smb 0,spl10_rd_status
lda #SPL10_RD_CMD
sta spl10_wr_data
lda #8
sta spl10_write_count
rd_sync_not_ok:
bra rd_exit
rd_write_cmd:
bbs 1,spl10_rd_status,rd_read_data
jsr do_write_bytes
bcc rd_cmd_not_ok
smb 1,spl10_rd_status
lda #8
sta spl10_read_count
rd_cmd_not_ok:
bra rd_exit
rd_read_data:
bbs 2,spl10_rd_status,restart_read
jsr do_read_bytes
bcc rd_data_no_ok
smb 2,spl10_rd_status
rd_data_no_ok:
bra rd_exit
restart_read:
lda spl10_rd_data
;;cmp rd_old_data
;;beq key_is_null
;;lda spl10_rd_data
;;sta rd_old_data
;;beq key_is_null
and #!VFD_REPEAT
ora #VFD_READY
sta IOP_DATA5_L
key_is_null:
stz spl10_rd_status
sec
rts
rd_exit:
clc
rts
do_write_bytes:
bbs 0,write_byte_status,wr_set_stb_low
rol spl10_wr_data
bcs wr_set_data_high
smb VFDB_DAT,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
rmb VFDB_DAT,VFD_PORT
smb 0,write_byte_status
bra write_exit
wr_set_data_high:
rmb VFDB_DAT,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
smb 0,write_byte_status
bra write_exit
wr_set_stb_low:
bbs 1,write_byte_status,wr_wait_ack_low
smb VFDB_STB,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
rmb VFDB_STB,VFD_PORT
smb 1,write_byte_status
bra write_exit
wr_wait_ack_low:
bbs 2,write_byte_status,wr_wait_ack_high
bbr VFDB_CLK,VFD_PORT,wr_ack_is_low
bra write_exit
wr_ack_is_low:
rmb VFDB_STB,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
smb 2,write_byte_status
bra write_exit
wr_wait_ack_high:
bbs VFDB_CLK,VFD_PORT,wr_next_bit
bra write_exit
wr_next_bit:
stz write_byte_status
dec spl10_write_count
beq write_byte_ok
write_exit:
clc
rts
write_byte_ok:
sec
rts
do_read_bytes:
bbs 0,read_byte_status,rd_wait_ack_low
smb VFDB_STB,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
rmb VFDB_STB,VFD_PORT
smb 0,read_byte_status
bra read_exit
rd_wait_ack_low:
bbs 1,read_byte_status,rd_set_stb_high
bbr VFDB_CLK,VFD_PORT,rd_ack_is_low
bra read_exit
rd_ack_is_low:
rmb VFDB_DAT,Vfd_init1
lda Vfd_init1
sta VFD_PORT_CFG
bbs VFDB_DAT,VFD_PORT,rd_dat_is_high
clc
rol spl10_rd_data
smb 1,read_byte_status
bra read_exit
rd_dat_is_high:
sec
rol spl10_rd_data
smb 1,read_byte_status
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -