mirror of
https://github.com/cc65/cc65.git
synced 2024-11-03 10:07:02 +00:00
419eb700b5
The way we want to use the INITBSS segment - and especially the fact that it won't have the type bss on all ROM based targets - means that the name INITBSS is misleading. After all INIT is the best name from my perspective as it serves several purposes and therefore needs a rather generic name. Unfortunately this means that the current INIT segment needs to be renamed too. Looking for a short (ideally 4 letter) name I came up with ONCE as it contains all code (and data) accessed only once during initialization.
96 lines
1.9 KiB
ArmAsm
96 lines
1.9 KiB
ArmAsm
;
|
|
; Oliver Schmidt, 15.09.2009
|
|
;
|
|
; ProDOS 8 I/O buffer management for memory between
|
|
; location $0800 and the cc65 program start address
|
|
;
|
|
|
|
.constructor initiobuf
|
|
.export iobuf_alloc, iobuf_free
|
|
.import __STARTUP_RUN__
|
|
.import incsp2, popax
|
|
|
|
.include "zeropage.inc"
|
|
.include "errno.inc"
|
|
.include "../filedes.inc"
|
|
|
|
.segment "ONCE"
|
|
|
|
initiobuf:
|
|
; Convert end address highbyte to table index
|
|
lda #>__STARTUP_RUN__
|
|
sec
|
|
sbc #>$0800
|
|
lsr
|
|
lsr
|
|
|
|
; Mark all remaining table entries as used
|
|
tax
|
|
lda #$FF
|
|
: cpx #MAX_FDS
|
|
bcc :+
|
|
rts
|
|
: sta table,x
|
|
inx
|
|
bne :-- ; Branch always
|
|
|
|
; ------------------------------------------------------------------------
|
|
|
|
.code
|
|
|
|
iobuf_alloc:
|
|
; Get and save "memptr"
|
|
jsr incsp2
|
|
jsr popax
|
|
sta ptr1
|
|
stx ptr1+1
|
|
|
|
; Search table for free entry
|
|
ldx #$00
|
|
: lda table,x
|
|
beq :+
|
|
inx
|
|
cpx #MAX_FDS
|
|
bcc :-
|
|
lda #ENOMEM
|
|
rts
|
|
|
|
; Mark table entry as used
|
|
: lda #$FF
|
|
sta table,x
|
|
|
|
; Convert table index to address hibyte
|
|
txa
|
|
asl
|
|
asl
|
|
clc
|
|
adc #>$0800
|
|
|
|
; Store address in "memptr"
|
|
ldy #$01
|
|
sta (ptr1),y
|
|
dey
|
|
tya
|
|
sta (ptr1),y
|
|
rts
|
|
|
|
iobuf_free:
|
|
; Convert address hibyte to table index
|
|
txa
|
|
sec
|
|
sbc #>$0800
|
|
lsr
|
|
lsr
|
|
|
|
; Mark table entry as free
|
|
tax
|
|
lda #$00
|
|
sta table,x
|
|
rts
|
|
|
|
; ------------------------------------------------------------------------
|
|
|
|
.bss
|
|
|
|
table: .res MAX_FDS
|