亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? flashcarddrive.bas

?? fat16 in compact flash
?? BAS
字號:
' This files contains the Routines


Declare Sub ReadSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
Declare Sub WriteSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
Declare Sub GetDriveIdentity(pwSRAMPointer as Word )
Declare Sub DriveInit()
Declare Sub DriveReset()
Declare Function DriveCheck() as Byte


' Register - definitions for ASM-Routines

rByteCount_Low alias r20
rByteCount_High alias r21
rCF_SectorCount alias r21
rCF_Reg alias r22
rData alias r23

nop
nop

Sub ReadSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
    ' Read Sector(s) from CF-Card to SRAM
    ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to transfer Sector(s) from Card
    ' plSectorNumber: (Long) CF-Startingsector from which data should be transfered
    ' pbSectorCount: (Byte) Count of 512-Byte Sector(s) to transfer (largest Value = &H7F)
    loadadr pbSectorCount , X
    ld rCF_SectorCount, X
    loadadr pwSRAMPointer , X
    ld zl, X+
    ld zh, X+
    loadadr plSectorNumber , X
    !call _CF_Read_Sector
End Sub



Sub WriteSector(pwSRAMPointer as Word , plSectorNumber as Long , byVal pbSectorCount as Byte)
    ' Write Sector(s) from CF-Card to SRAM Byte
    ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to transfer Sector(s) from Card
    ' plSectorNumber: (Long) CF-Startingsector from which data should be transfered
    ' pbSectorCount: (Byte) Count of 512-Byte Sector(s) to transfer (largest Value = &H7F)
    loadadr pbSectorCount , X
    ld rCF_SectorCount, X
    loadadr pwSRAMPointer , X
    ld zl, x+
    ld zh, x+
    loadadr plSectorNumber , X
    !call _CF_Write_Sector
End Sub



Sub GetDriveIdentity(pwSRAMPointer as Word )
    ' Read the Identity Drive from CF-Card to SRAM Byte
    ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to transfer Sector(s) from Card
    ' 512 Bytes will be written
    loadadr pwSRAMPointer , X
    ld zl, x+
    ld zh, x+
    !call _CF_Read_DriveIdentity
End Sub



Sub DRIVEINIT()
    ' Setup Pins to CF-Card for Input/Output and reset CF-Card
    !Call _CF_Setup
End Sub



Sub DRIVERESET()
    ' Reset CF-Card
    !Call _CF_Reset
End Sub



Function DriveCheck() as Byte
    ' Check, if drive is ready (plugged in)
    !Call _CF_CheckCard
    loadadr DriveCheck , X
    st x, r24
End Function

nop


' =============================================================================
' ASM - Routines
' -----------------------------------------------------------------------------

' Hardware Definitions
' Port und Pin - Definitionen

' Data Port
CF_Data_Out alias PortA
CF_Data_In alias PinA
CF_Data_DDR alias DDRA

' Register - addressing
CF_ADDR_Out alias PortC
' CF_Addr_in alias PinC                ' Port C nur Output
' CF_Addr_DDR alias DDRC
' remove Comment-mark ' if bidirectional Port is used

' Control - Port
CF_Control_Out alias PortB
CF_Control_In alias PinB
CF_Control_DDR alias DDRB

' Pins at Control-Port
CF_CE1 alias 0                          ' Card enable
CF_CD1 alias 1                          ' Card detect
CF_RESET alias 2                        ' Reset-Pin
CF_OE alias 3                           ' Output enable
CF_WE alias 4                           ' Write enable
CF_RDY alias 5                          ' Card ready

' Input: CF_CD1, CF_RDY: Input
Const CF_Control_Direction = &B00011101 ' I/O Richtungen am Control-Port

Const CF_Control_Init = &B00011000      ' Setup-Ausgabe  f黵 Control-Port
Const CF_Control_Dir_Mask = &B11000000  'Maske f黵 belegte Pin's am Controlport

' CF-Card Register
' addresses uses 3 LSB Bit x x x x x A2 A1 A0

' Register addresses
Const Data_Reg = &H00
Const Error_Reg = &H01
Const Feature_Reg = &H01
Const Sec_Cnt_Reg = &H02
Const Sec_Num_Reg = &H03
Const Cyl_Lo_Reg = &H04
Const Cyl_Hi_Reg = &H05
Const Head_Reg = &H06
Const Status_Reg = &H07
Const Command_Reg = &H07

' Commands for Compact Flash Card

Const CF_Identify = &HEC
Const CF_Write_Sec = &H30
Const CF_Read_Sec = &H20

'------------------------------------------------------------------------------
' Read Identity Info from the CF-Card
_CF_Read_DriveIdentity:
   ldi rCF_SectorCount, 1               ' 512 Bytes = 1 Sector to read
   ldi rData, CF_Identify               ' Command for Card identity
   rcall _CF_Write_CommandReg           ' send to card
   rjmp _CF_Read_Sector_LBASet          ' Read Info to SRAM (mit return)


'------------------------------------------------------------------------------
' Pin CF_Rdy is Low at Ready
_CF_Check_Ready:
   sbis CF_Control_In, CF_Rdy           ' no timeout!!!
   rjmp _CF_Check_Ready
   Ret

'------------------------------------------------------------------------------
' give a pulse to WE to force Compactflash Card to read Data
' Registeraddress (A0-A2) and Data (D0-D7) must be set
_CF_Write:
   rcall _CF_Check_ready
   cbi CF_Control_Out, CF_WE            ' WE Line to Low
   nop                                  ' 600 ns at 3.3 V VCC is enough
   nop
   sbi CF_Control_Out, CF_WE            ' WE Line to High
   ret

'------------------------------------------------------------------------------
' Read 1 Byte from the CF
' Register address must be set.
_CF_Read:
   rcall _CF_Check_Ready
   ldi _temp1, &H00                     ' change data-port to Input
   !out Cf_Data_DDR , _temp1
   cbi CF_Control_out, CF_OE            ' OE Line to Low
   nop
   nop
   nop
   in rData,CF_Data_in                  ' Read Byte
   sbi CF_Control_Out, CF_OE            ' OE - Line to High
   ldi _temp1, &HFF                     ' change Data-port back to OUTPUT
   !out CF_Data_DDR, _temp1
   ret

'------------------------------------------------------------------------------
' Set register address, and leave pins 3 - 7 unchanged
' two entry-points to routine
' 1: CF_Set_RegAddr: Register address must passed in rCF_Reg
' 2: CF_Set_RegAddrData: register address is Data
_CF_Set_RegAddrData:
   ldi rCF_Reg, Data_Reg
_CF_Set_RegAddr:
   in _temp1, CF_Addr_Out               ' get current output at Port
   andi _temp1, &B11111000              ' CF-Address-bits masked out
   or _temp1, rCF_Reg                   ' add CF-Address with OR
   !out CF_Addr_Out, _temp1
   ret


' -----------------------------------------------------------------------------
' Read Sector(s) from CF-Card to SRAM
' Entry with following parameters set:
' Register rCF_SectorCount: Count of Sector(s) to transfer
' Register X: Pointer to Sectornumber (LONG)
' Register Z: SRAM-Address, where the data to transfer
_CF_Read_Sector:
   rcall _CF_Set_CntLBA                 ' LBA-Sector to CF
   ldi rData, CF_Read_Sec               ' read command
   rcall _CF_Write_CommandReg           ' to Compactflash
_CF_Read_Sector_LBASet:
   rcall _CF_Set_RegAddrData            ' turn register-address to data
   clr rByteCount_Low                   ' Low-Byte of Byte-Count always zero
   lsl rByteCount_High                  ' Change Sector-Count to HighByte of Transferlenght
_CF_Read_Sector1:
   rcall _CF_Read                       ' read 1 Byte
   st z+, rData
   dec rByteCount_Low
   brne  _CF_READ_SECTOR1
   dec rByteCount_High
   brne  _CF_READ_SECTOR1               ' all bytes read?
   Ret


' -----------------------------------------------------------------------------
' write Sector(s) to CF-Card
' Entry with following parameter set:
' Register rCF_SectorCount: Count of sector(s) to transfer
' Register X: Pointer to Sectornumber (LONG)
' Register Z: SRAM-Address, at which Data to transfer starts
_CF_Write_Sector:
   rcall _CF_Set_CntLBA                 ' LBA-Sector to CF
   ldi rData, CF_Write_Sec              ' write command
   rcall _CF_Write_CommandReg           ' to compactflash
_CF_Write_Sector_LBASet:
   rcall _CF_Set_RegAddrData            ' turn register-address to data
   clr rByteCount_Low                   ' Low-Byte of Byte-Count alwas zero
   lsl rByteCount_High                  ' Change Sector-Count to HighByte of Transferlenght
_CF_Write_Sector1:
   ld rData, z+
   !out CF_Data_out, rData              ' Byte to data port
   rcall _CF_Write                      ' force CF to read byte
   dec rByteCount_low
   brne  _CF_Write_SECTOR1
   dec rByteCount_High
   brne  _CF_Write_SECTOR1              ' last byte written?
   Ret

'------------------------------------------------------------------------------
' write a value to a specified register address, value is passed in rData
' two different entry points
' 1: CF_Write_CommandReg: write value to command-register (default)
' 2: CF_Write_Reg: Register passed in rCF_Reg
_CF_Write_CommandReg:
   ldi rCF_Reg, Command_Reg             ' Default register: Command
_CF_Write_Reg:
   !out CF_Data_out, rData              ' set data to data port
   rcall _CF_Set_RegAddr                ' set register address
   rjmp _CF_Write                       ' force CF to accept register and data

' -----------------------------------------------------------------------------
' Write count of sector(s) (read or write) and Sectornumber (LBA) to CF-Card
' following parameter must be set:
' Register CF_SectorCount: Count of Sector(s) (max &7F)
' Register X: Pointer to sectornumber
'
_CF_Set_CntLBA:
   ldi rCF_Reg, Sec_Cnt_Reg             ' Start with Sector-Count Register in CF (2)
   mov rData, rCF_SectorCount           ' prepare for output
   rjmp _CF_Set_LBA2
_CF_Set_LBA1:
   ld rData, X+                         ' load next byte of sectornumber
_CF_Set_LBA2:
   rcall _CF_Write_Reg                  ' set register-address
   inc rCF_Reg                          ' set to next register address
   cpi rCF_Reg, 6
   brmi  _CF_Set_LBA1                   ' Reg. 6 reached? (LBA/Disk/Header)
   ld rData, X+                         ' need special handling
   andi rData, &B00001111               ' mask upper nibble (LBA-Sign and drive)
   ori rData, &HE0                      ' set to LBA
   rjmp _CF_Write_Reg                   ' write to CF; incl Ret

' -----------------------------------------------------------------------------
' Setup the pins needed for the CF-Card
_CF_Setup:
   ' Data port to OUTPUT
   ldi _temp1, &H00                     ' all Data pins to low
   !out CF_Data_Out, _temp1

   ldi _temp1, &HFF
   !Out CF_Data_DDR , _temp1            ' Data pins to output

   ' Controlport: prepare 6 pins, leave other two unchanged
   in _temp1, CF_Control_Out            '
   andi _temp1, CF_Control_Dir_Mask     '
   ori _temp1, CF_Control_Init
   !Out CF_Control_Out, _temp1

   in _temp1, CF_Control_DDR            ' read direction of pins at control port
   andi _temp1, CF_Control_Dir_Mask     ' mask out used pins
   ori _temp1, CF_Control_Direction     ' set direction in and Out
   !Out CF_Control_DDR, _temp1          ' set new direction configuration

   ' Address port: attention: adjust if not on Port C at ATMega103
   ' ATMega103 Port C have only output, so here no configuration is necessary
   'in _temp1, CF_ADDR_DDR
   'ori _temp1, &B00000111
   '!Out CF_Addr_DDR, _temp1
   waitms 1
   rjmp _CF_Reset

'------------------------------------------------------------------------------
' force CF-Card to a Hardware-reset
_CF_Reset:
   sbi CF_Control_Out, CF_Reset
   waitms 1
   cbi CF_Control_Out, CF_Reset
   waitms 500
   ret

'------------------------------------------------------------------------------
' Checks, whether Card is plugged in: Pin CD1 is LOW
' if OK r24 = 1; otherwise 0
_CF_CheckCard:
   ldi r24, 1
   sbic CF_Control_In, CF_CD1           ' flashcard plugged in?
   ldi r24, 0
   ret

nop
nop
nop   

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品欧美一区二区三区综合在 | 成人av在线看| 久久久美女艺术照精彩视频福利播放| 美女一区二区三区在线观看| 欧美成人三级在线| 国产一区久久久| 欧美一区二区在线免费观看| 69久久夜色精品国产69蝌蚪网| 亚洲自拍都市欧美小说| 欧美肥妇bbw| 精品一区二区三区日韩| 国产精品妹子av| 欧美三级三级三级爽爽爽| 免费在线观看成人| 国产女人aaa级久久久级| 91啪亚洲精品| 日本强好片久久久久久aaa| 久久综合精品国产一区二区三区| 欧美日韩免费一区二区三区| 毛片基地黄久久久久久天堂| 国产精品麻豆视频| 欧美日韩一区二区三区四区| 老司机午夜精品| 美女性感视频久久| 亚洲精品在线三区| 91丨porny丨国产入口| 日日嗨av一区二区三区四区| 久久精品一区四区| 欧美三级在线播放| 国产成人精品1024| 日韩电影在线观看电影| 国产精品每日更新| 日韩欧美一级在线播放| 91性感美女视频| 精品一区二区三区av| 亚洲美女免费在线| 久久先锋资源网| 欧美日韩一卡二卡| 成人黄色777网| 麻豆精品一区二区综合av| 亚洲你懂的在线视频| 久久久九九九九| 91精品国产综合久久久久久久 | 亚洲国产一区二区视频| 久久精子c满五个校花| 偷拍日韩校园综合在线| 亚洲一级片在线观看| wwww国产精品欧美| 欧美亚州韩日在线看免费版国语版| 国产一区二区主播在线| 亚洲国产cao| 18欧美亚洲精品| 久久蜜桃一区二区| 91精品国产色综合久久不卡电影 | 欧洲中文字幕精品| 懂色av中文字幕一区二区三区| 奇米精品一区二区三区四区| 亚洲欧洲一区二区三区| 亚洲国产成人午夜在线一区| 精品日韩欧美一区二区| 7799精品视频| 欧美色偷偷大香| 91成人看片片| 久久精品免费看| 国产一区二区免费视频| 亚洲激情在线激情| 国产视频视频一区| 日韩免费观看高清完整版| 色噜噜狠狠成人中文综合 | 欧美性一级生活| 91在线国产福利| 成人精品国产福利| 成人一区二区三区| 国产91精品一区二区| 国产成人午夜高潮毛片| 欧美乱熟臀69xxxxxx| 色婷婷综合久久久中文字幕| 色综合久久久网| 在线中文字幕一区| 欧美在线视频不卡| 欧美日韩一区二区在线观看视频| 国产精品麻豆久久久| 日韩一级二级三级| 欧美电影免费提供在线观看| 日韩欧美国产综合| ww久久中文字幕| 欧美激情综合五月色丁香| 国产欧美一区二区精品性色超碰 | 久久久久久久久久久99999| 久久久五月婷婷| 国产精品乱码人人做人人爱| 自拍偷拍亚洲欧美日韩| 亚洲高清在线视频| 麻豆国产精品777777在线| 国产一区二区视频在线播放| 成人国产精品免费观看动漫| 91色婷婷久久久久合中文| 欧美少妇一区二区| 欧美精品一区二区三区在线| 国产精品系列在线| 亚洲综合一区在线| 久久国产欧美日韩精品| 成人永久看片免费视频天堂| 色香蕉久久蜜桃| 日韩一区二区三区四区五区六区| 久久嫩草精品久久久久| 亚洲乱码中文字幕| 日韩高清国产一区在线| 国产一本一道久久香蕉| 91国偷自产一区二区开放时间 | 国产在线观看免费一区| 国产福利一区二区| 色综合夜色一区| 日韩精品综合一本久道在线视频| 国产嫩草影院久久久久| 亚洲一区二区三区影院| 美女诱惑一区二区| 亚洲一区二区黄色| 国内精品久久久久影院一蜜桃| 成人av综合一区| 91精品欧美一区二区三区综合在| 国产欧美一区二区三区在线看蜜臀 | 中文字幕一区二区三区精华液| 亚洲国产精品影院| 精品一区二区三区视频| 欧美性生活影院| 国产拍揄自揄精品视频麻豆| 日韩国产欧美在线观看| 成av人片一区二区| 欧美一区二区观看视频| 国产精品一区在线观看你懂的| 91麻豆成人久久精品二区三区| 日韩欧美一级二级三级久久久| 亚洲三级理论片| 国产又黄又大久久| 欧美一区二区三区思思人| 亚洲欧美综合另类在线卡通| 免播放器亚洲一区| 欧洲精品视频在线观看| 欧美国产精品久久| 精品系列免费在线观看| 欧美猛男gaygay网站| 亚洲人成在线观看一区二区| 国产成人在线影院| 日韩欧美久久久| 日韩中文欧美在线| 在线观看免费视频综合| 亚洲视频一区二区免费在线观看| 国产麻豆视频一区二区| 日韩一级二级三级精品视频| 亚洲图片欧美一区| 色av成人天堂桃色av| 亚洲私人影院在线观看| 成人午夜av影视| 欧美激情资源网| 国产成人啪免费观看软件| 精品国产露脸精彩对白| 美女视频一区二区三区| 欧美精品在线观看一区二区| 亚洲宅男天堂在线观看无病毒| 色狠狠一区二区三区香蕉| 1000部国产精品成人观看| 国产成人福利片| 国产免费成人在线视频| 国产成人午夜视频| 中文字幕精品在线不卡| 国产成人午夜精品影院观看视频| 久久精品人人爽人人爽| 国产成人久久精品77777最新版本| 久久久久国产精品麻豆ai换脸 | 久久久亚洲精华液精华液精华液 | 亚洲精品在线免费播放| 国产一区二区福利视频| 久久久久久久久蜜桃| 国产精品123| 国产精品丝袜在线| 99视频精品在线| 亚洲裸体xxx| 欧美日韩视频不卡| 美女网站色91| 国产亚洲成aⅴ人片在线观看 | 精品一区二区三区影院在线午夜 | 亚洲第一主播视频| 日韩一二三区不卡| 国产乱对白刺激视频不卡| 久久久夜色精品亚洲| 成人av在线电影| 亚洲夂夂婷婷色拍ww47| 日韩一区二区三区精品视频| 国产揄拍国内精品对白| 亚洲欧洲国产日韩| 欧美日韩黄视频| 韩日精品视频一区| 亚洲天堂av一区| 欧美精品黑人性xxxx| 国产在线精品一区二区不卡了| 中文字幕日韩欧美一区二区三区| 欧美日韩在线一区二区| 国内精品免费**视频| 亚洲乱码中文字幕|