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

📄 iop.asm

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 ASM
📖 第 1 页 / 共 5 页
字号:
             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 + -