ProDOS 8 requires an page-aligned 1kB IO-buffer for every open file. The implementation using posix_memalign() is universally correct but quite expensive. There I added support for overriding this implementation with maybe limited (i.e. to one open file) but cheaper custom implementations.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4142 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
ol.sc 2009-09-10 09:59:26 +00:00
parent 19397b742d
commit d91fe6b877
5 changed files with 28 additions and 5 deletions

View File

@ -78,6 +78,7 @@ S_OBJS= _scrsize.o \
gotoy.o \
home.o \
initcwd.o \
iobuf.o \
joy_stddrv.o \
kbhit.o \
mainargs.o \

15
libsrc/apple2/iobuf.s Normal file
View File

@ -0,0 +1,15 @@
;
; Oliver Schmidt, 10.9.2009
;
; Default ProDOS 8 I/O buffer management
;
.export iobuf_alloc, iobuf_free
.export iobuf_init, iobuf_done
.import iobuf_nop
.import _posix_memalign, _free
iobuf_alloc := _posix_memalign
iobuf_free := _free
iobuf_init := iobuf_nop
iobuf_done := iobuf_nop

View File

@ -5,6 +5,8 @@
;
.import __dos_type
.import iobuf_init, iobuf_done
.export iobuf_nop
.include "mli.inc"
@ -24,12 +26,16 @@ callmli:
beq oserr
; Call MLI and return
jsr iobuf_init
jsr ENTRY
call: .byte $00
.addr mliparam
rts
jmp iobuf_done
; Load oserror code and return
oserr: lda #$01 ; "Invalid MLI function code number"
sec
rts
; Fall through
iobuf_nop:
rts

View File

@ -12,7 +12,7 @@
.import pushname, popname
.import errnoexit, oserrexit
.import _posix_memalign, _free
.import iobuf_alloc, iobuf_free
.import addysp, incsp4, incaxy, pushax, popax
.include "zeropage.inc"
@ -70,7 +70,7 @@ found: tya
ldx #>$0100
jsr pushax ; Preserves A
ldx #>$0400
jsr _posix_memalign
jsr iobuf_alloc
tay ; Save errno code
; Restore fdtab slot
@ -206,7 +206,7 @@ freebuffer:
; Free I/O buffer
lda #$00
ldx fdtab + FD::BUFFER+1,y
jmp _free
jmp iobuf_free
closeallfiles:
; All open files

View File

@ -78,6 +78,7 @@ S_OBJS= _scrsize.o \
gotoy.o \
home.o \
initcwd.o \
iobuf.o \
joy_stddrv.o \
kbhit.o \
mainargs.o \