mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 19:29:37 +00:00
59 lines
1.5 KiB
ArmAsm
59 lines
1.5 KiB
ArmAsm
;
|
|
; 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 axlong
|
|
jsr tosandeax
|
|
eor #$FF
|
|
pha
|
|
txa
|
|
eor #$FF
|
|
tay
|
|
plx
|
|
jsr lynxskip0
|
|
ldy #$05
|
|
jsr ldeaxysp
|
|
jmp incsp8
|
|
|
|
.endproc
|
|
|