Lynx update including file routines that access a file system on a cartridge
by Karri Kaksonen. git-svn-id: svn://svn.cc65.org/cc65/trunk@4892 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
59
libsrc/lynx/lseek.s
Normal file
59
libsrc/lynx/lseek.s
Normal file
@@ -0,0 +1,59 @@
|
||||
;
|
||||
; Karri Kaksonen, 2010
|
||||
;
|
||||
; This function is used to place the Lynx hardware to point to any byte in
|
||||
; the Lynx cart.
|
||||
;
|
||||
; This function supports all available block sizes (512, 1024 and 2048 bytes).
|
||||
; No other block sizes have been used afaik.
|
||||
;
|
||||
; Only SEEK_SET operation mode is implemented.
|
||||
;
|
||||
; off_t __fastcall__ lseek(int fd, off_t offset, int whence);
|
||||
|
||||
.importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2
|
||||
.macpack longbranch
|
||||
.export _lseek
|
||||
.import addysp, stax0sp, tosand0ax, pusheax, asreax2
|
||||
.import ldeaxysp, decsp2, pushax, incsp8
|
||||
.import tosandeax,decax1,tosdiveax,axlong,ldaxysp
|
||||
.import lynxskip0, lynxblock,tosasreax
|
||||
.import __BLOCKSIZE__
|
||||
.importzp _FileCurrBlock
|
||||
|
||||
.segment "CODE"
|
||||
|
||||
.proc _lseek: near
|
||||
|
||||
.segment "CODE"
|
||||
|
||||
jsr pushax
|
||||
ldy #$05
|
||||
jsr ldeaxysp
|
||||
jsr pusheax
|
||||
ldx #$00
|
||||
lda #<(__BLOCKSIZE__/1024 + 9)
|
||||
jsr tosasreax
|
||||
sta _FileCurrBlock
|
||||
jsr lynxblock
|
||||
ldy #$05
|
||||
jsr ldeaxysp
|
||||
jsr pusheax
|
||||
lda #<(__BLOCKSIZE__-1)
|
||||
ldx #>(__BLOCKSIZE__-1)
|
||||
jsr decax1
|
||||
jsr axlong
|
||||
jsr tosandeax
|
||||
eor #$FF
|
||||
pha
|
||||
txa
|
||||
eor #$FF
|
||||
tay
|
||||
plx
|
||||
jsr lynxskip0
|
||||
ldy #$05
|
||||
jsr ldeaxysp
|
||||
jmp incsp8
|
||||
|
||||
.endproc
|
||||
|
||||
Reference in New Issue
Block a user