Merge branch 'cc65:master' into master
This commit is contained in:
@@ -33,8 +33,8 @@ zerofd: lda #$00
|
||||
; Return success
|
||||
lda #$00
|
||||
|
||||
; Set __oserror
|
||||
oserr: jmp __mappederrno
|
||||
; Set ___oserror
|
||||
oserr: jmp ___mappederrno
|
||||
|
||||
; Set __errno
|
||||
errno: jmp __directerrno
|
||||
errno: jmp ___directerrno
|
||||
|
||||
@@ -45,9 +45,9 @@ _getdevicedir:
|
||||
|
||||
; Handle errors
|
||||
erange: lda #<ERANGE
|
||||
jsr __directerrno
|
||||
jsr ___directerrno
|
||||
bne :+ ; Branch always
|
||||
oserr: jsr __mappederrno
|
||||
oserr: jsr ___mappederrno
|
||||
: lda #$00 ; Return NULL
|
||||
tax
|
||||
rts
|
||||
@@ -73,7 +73,7 @@ oserr: jsr __mappederrno
|
||||
iny
|
||||
lda #$00
|
||||
sta (ptr1),y
|
||||
sta __oserror ; Clear _oserror
|
||||
sta ___oserror ; Clear __oserror
|
||||
|
||||
; Success, return buf
|
||||
lda ptr1
|
||||
|
||||
@@ -30,6 +30,6 @@ diocommon:
|
||||
|
||||
dioepilog:
|
||||
; Return success or error
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
ldx #$00
|
||||
rts
|
||||
|
||||
@@ -24,7 +24,7 @@ _dio_open:
|
||||
lda #$28 ; "No device connected"
|
||||
|
||||
; Return oserror
|
||||
oserr: sta __oserror
|
||||
oserr: sta ___oserror
|
||||
jmp return0
|
||||
|
||||
; Return success
|
||||
@@ -34,5 +34,5 @@ oserr: sta __oserror
|
||||
asl
|
||||
asl
|
||||
ldx #$00
|
||||
stx __oserror
|
||||
stx ___oserror
|
||||
rts
|
||||
|
||||
@@ -16,7 +16,7 @@ _dio_query_sectcount:
|
||||
; Set handle
|
||||
sta mliparam + MLI::ON_LINE::UNIT_NUM
|
||||
|
||||
; Get ProDOS 8 block size (clears __oserror)
|
||||
; Get ProDOS 8 block size (clears ___oserror)
|
||||
jsr _dio_query_sectsize
|
||||
|
||||
; Alloc buffer
|
||||
@@ -74,7 +74,7 @@ done: lda ptr4
|
||||
rts
|
||||
|
||||
nomem: lda #$FF ; Error code for sure not used by MLI
|
||||
oserr: sta __oserror
|
||||
oserr: sta ___oserror
|
||||
|
||||
; Save total blocks for failure
|
||||
lda #$00
|
||||
@@ -85,7 +85,7 @@ oserr: sta __oserror
|
||||
; Check for non-ProDOS disk
|
||||
check: cmp #$52 ; "Not a ProDOS volume"
|
||||
bne oserr
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
|
||||
; Save total blocks for a 16-sector disk
|
||||
lda #<280
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
_dio_query_sectsize:
|
||||
; Clear error
|
||||
stx __oserror ; X = 0
|
||||
stx ___oserror ; X = 0
|
||||
|
||||
; Return ProDOS 8 block size
|
||||
txa ; X = 0
|
||||
|
||||
@@ -19,8 +19,8 @@ typerr: lda #$4A ; "Incompatible file format"
|
||||
; Cleanup name
|
||||
oserr: jsr popname ; Preserves A
|
||||
|
||||
; Set __oserror
|
||||
jmp __mappederrno
|
||||
; Set ___oserror
|
||||
jmp ___mappederrno
|
||||
|
||||
_exec:
|
||||
; Save cmdline
|
||||
|
||||
@@ -52,7 +52,7 @@ _clock_getres:
|
||||
enosys: lda #ENOSYS
|
||||
|
||||
; Set __errno
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
.rodata
|
||||
|
||||
|
||||
@@ -81,13 +81,13 @@ erange: lda #ERANGE
|
||||
jsr incsp3 ; Preserves A
|
||||
|
||||
; Set __errno
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
; Cleanup stack
|
||||
oserr: jsr incsp3 ; Preserves A
|
||||
|
||||
; Set __oserror
|
||||
jmp __mappederrno
|
||||
; Set ___oserror
|
||||
jmp ___mappederrno
|
||||
|
||||
.bss
|
||||
|
||||
|
||||
@@ -107,13 +107,13 @@ seek_common:
|
||||
einval: lda #EINVAL
|
||||
|
||||
; Set __errno
|
||||
errno: jsr __directerrno ; leaves -1 in AX
|
||||
errno: jsr ___directerrno ; leaves -1 in AX
|
||||
stx sreg ; extend return value to 32 bits
|
||||
stx sreg+1
|
||||
rts
|
||||
|
||||
; Set __oserror
|
||||
oserr: jsr __mappederrno ; leaves -1 in AX
|
||||
; Set ___oserror
|
||||
oserr: jsr ___mappederrno ; leaves -1 in AX
|
||||
stx sreg ; extend return value to 32 bits
|
||||
stx sreg+1
|
||||
rts
|
||||
|
||||
@@ -64,7 +64,7 @@ _open:
|
||||
errno: jsr incsp4 ; Preserves A
|
||||
|
||||
; Set __errno
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
; Save fdtab slot
|
||||
found: tya
|
||||
@@ -147,8 +147,8 @@ oserr1: ldy tmp2 ; Restore fdtab slot
|
||||
jsr freebuffer
|
||||
pla ; Restore oserror code
|
||||
|
||||
; Set __oserror
|
||||
jmp __mappederrno
|
||||
; Set ___oserror
|
||||
jmp ___mappederrno
|
||||
|
||||
open: ldy tmp2 ; Restore fdtab slot
|
||||
|
||||
@@ -209,7 +209,7 @@ done: lda tmp1 ; Restore fd
|
||||
|
||||
; Return success
|
||||
ldx #$00
|
||||
stx __oserror
|
||||
stx ___oserror
|
||||
rts
|
||||
|
||||
freebuffer:
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 17.05.2000
|
||||
;
|
||||
; int __fastcall__ _osmaperrno (unsigned char oserror);
|
||||
; int __fastcall__ __osmaperrno (unsigned char oserror);
|
||||
;
|
||||
|
||||
.export __osmaperrno
|
||||
.export ___osmaperrno
|
||||
|
||||
.include "errno.inc"
|
||||
|
||||
__osmaperrno:
|
||||
___osmaperrno:
|
||||
ldx #ErrTabSize
|
||||
: cmp ErrTab-2,x ; Search for the error code
|
||||
beq :+ ; Jump if found
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 07.11.2002
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
|
||||
.include "apple2.inc"
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx RNDH ; Use random value supplied by ROM
|
||||
lda RNDL
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
@@ -52,7 +52,7 @@ _read:
|
||||
|
||||
; Device succeeds always
|
||||
device: lda #$00
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
|
||||
; Set counter to zero
|
||||
sta ptr3
|
||||
@@ -107,4 +107,4 @@ check: lda ptr3
|
||||
einval: lda #EINVAL
|
||||
|
||||
; Set __errno
|
||||
errno: jmp __directerrno
|
||||
errno: jmp ___directerrno
|
||||
|
||||
@@ -49,10 +49,10 @@ rwcommon:
|
||||
|
||||
rwepilog:
|
||||
; Return success
|
||||
sta __oserror ; A = 0
|
||||
sta ___oserror ; A = 0
|
||||
lda mliparam + MLI::RW::TRANS_COUNT
|
||||
ldx mliparam + MLI::RW::TRANS_COUNT+1
|
||||
rts
|
||||
|
||||
; Set __oserror
|
||||
oserr: jmp __mappederrno
|
||||
; Set ___oserror
|
||||
oserr: jmp ___mappederrno
|
||||
|
||||
@@ -199,7 +199,7 @@ SER_OPEN:
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
adc Offset ; Assume carry to be clear
|
||||
adc #Offset ; Assume carry to be clear
|
||||
tax
|
||||
|
||||
; Check if the handshake setting is valid
|
||||
|
||||
22
libsrc/apple2/ser_stat_stddrv.s
Normal file
22
libsrc/apple2/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,22 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.ifdef __APPLE2ENH__
|
||||
.import _a2e_ssc_ser
|
||||
.else
|
||||
.import _a2_ssc_ser
|
||||
.endif
|
||||
|
||||
.rodata
|
||||
|
||||
.ifdef __APPLE2ENH__
|
||||
_ser_static_stddrv := _a2e_ssc_ser
|
||||
.else
|
||||
_ser_static_stddrv := _a2_ssc_ser
|
||||
.endif
|
||||
18
libsrc/apple2/ser_stddrv.s
Normal file
18
libsrc/apple2/ser_stddrv.s
Normal file
@@ -0,0 +1,18 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv:
|
||||
.ifdef __APPLE2ENH__
|
||||
.asciiz "A2E.SSC.SER"
|
||||
.else
|
||||
.asciiz "A2.SSC.SER"
|
||||
.endif
|
||||
@@ -68,4 +68,4 @@ enosys: lda #ENOSYS
|
||||
erange: lda #ERANGE
|
||||
|
||||
; Set __errno
|
||||
errno: jmp __directerrno
|
||||
errno: jmp ___directerrno
|
||||
|
||||
@@ -107,8 +107,8 @@ done: lda #$00
|
||||
einval: lda #EINVAL
|
||||
|
||||
; Set __errno
|
||||
errno: jmp __directerrno
|
||||
errno: jmp ___directerrno
|
||||
|
||||
; Set __oserror
|
||||
oserr: jmp __mappederrno
|
||||
; Set ___oserror
|
||||
oserr: jmp ___mappederrno
|
||||
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
; originally by Ullrich von Bassewitz and Sidney Cadot
|
||||
;
|
||||
; clock_t clock (void);
|
||||
; clock_t _clocks_per_sec (void);
|
||||
; clock_t __clocks_per_sec (void);
|
||||
;
|
||||
|
||||
.export _clock, __clocks_per_sec
|
||||
.export _clock, ___clocks_per_sec
|
||||
.importzp sreg
|
||||
|
||||
.include "atari.inc"
|
||||
@@ -28,7 +28,7 @@
|
||||
.endproc
|
||||
|
||||
|
||||
.proc __clocks_per_sec
|
||||
.proc ___clocks_per_sec
|
||||
|
||||
ldx #$00 ; Clear byte 1 of return value
|
||||
stx sreg ; Clear byte 2 of return value
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
.include "atari.inc"
|
||||
.export _close
|
||||
.import __do_oserror,popax,__oserror
|
||||
.import __do_oserror,popax,___oserror
|
||||
.import fdtoiocb_down,__inviocb
|
||||
|
||||
.proc _close
|
||||
@@ -18,7 +18,7 @@
|
||||
jsr CIOV
|
||||
bmi closerr
|
||||
ok: ldx #0
|
||||
stx __oserror ; clear system specific error code
|
||||
stx ___oserror ; clear system specific error code
|
||||
txa
|
||||
rts
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
;
|
||||
|
||||
.export _dio_phys_to_log
|
||||
.import popax,__oserror
|
||||
.import popax,___oserror
|
||||
.importzp ptr1,ptr2,ptr3
|
||||
.include "atari.inc"
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
ldx #0
|
||||
txa
|
||||
ret:
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
rts ; return success
|
||||
|
||||
; invalid handle
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
.export _dio_log_to_phys
|
||||
.include "atari.inc"
|
||||
.importzp ptr1,ptr2,ptr3
|
||||
.import popax,popptr1,__oserror
|
||||
.import popax,popptr1,___oserror
|
||||
|
||||
.proc _dio_log_to_phys
|
||||
|
||||
@@ -56,7 +56,7 @@ _l1: lda (ptr1,x)
|
||||
|
||||
txa
|
||||
ret:
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
rts ; return success
|
||||
|
||||
; invalid handle
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
.export _dio_open, _dio_close
|
||||
.export sectsizetab
|
||||
.import __oserror, __sio_call, _dio_read
|
||||
.import ___oserror, __sio_call, _dio_read
|
||||
.import pushax, addysp, subysp
|
||||
.importzp ptr2, sp
|
||||
.include "atari.inc"
|
||||
@@ -31,7 +31,7 @@ sectsizetab:
|
||||
|
||||
_inv_drive:
|
||||
lda #NONDEV ; non-existent device
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
lda #0
|
||||
tax
|
||||
rts ; return NULL
|
||||
@@ -49,7 +49,7 @@ _dio_open:
|
||||
sta sectsizetab+sst_flag,x ; set flag that drive is "open"
|
||||
lda #0
|
||||
sta sectsizetab+sst_sectsize+1,x
|
||||
sta __oserror ; success
|
||||
sta ___oserror ; success
|
||||
tya
|
||||
sta sectsizetab+sst_driveno,x
|
||||
stx ptr2
|
||||
@@ -156,7 +156,7 @@ s128: lda #128
|
||||
lda #0
|
||||
ldy #sst_flag
|
||||
sta (ptr2),y
|
||||
sta __oserror ; success
|
||||
sta ___oserror ; success
|
||||
tax
|
||||
rts ; return no error
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
.include "atari.inc"
|
||||
.export _dio_query_sectsize
|
||||
.importzp ptr1,tmp1
|
||||
.import popax, __oserror
|
||||
.import popax, ___oserror
|
||||
|
||||
.proc _dio_query_sectsize
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
stx ptr1+1
|
||||
|
||||
lda #0
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
|
||||
ldy #sst_sectsize+1
|
||||
lda (ptr1),y
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;
|
||||
; __do_oserror updates __oserror and errno. Do a JMP here right after
|
||||
; __do_oserror updates ___oserror and errno. Do a JMP here right after
|
||||
; calling CIOV. It will return with AX set to -1 ($FFFF). It expects the CIO
|
||||
; status in Y.
|
||||
;
|
||||
@@ -9,4 +9,4 @@
|
||||
|
||||
__do_oserror:
|
||||
tya
|
||||
jmp __mappederrno
|
||||
jmp ___mappederrno
|
||||
|
||||
@@ -34,7 +34,7 @@ notsupp:lda #ENOSYS ; "unsupported system call"
|
||||
.byte $2C ; bit opcode, eats the next 2 bytes
|
||||
noiocb: lda #EMFILE ; "too many open files"
|
||||
jsr incsp2 ; clean up stack
|
||||
seterr: jmp __directerrno
|
||||
seterr: jmp ___directerrno
|
||||
|
||||
|
||||
; entry point
|
||||
@@ -148,7 +148,7 @@ copycd: lda #ATEOL
|
||||
pha ; remember error code
|
||||
jsr close ; close the IOCB (required even if open failed)
|
||||
pla ; put error code back into A
|
||||
setmerr:jmp __mappederrno ; update errno from OS specific error code in A
|
||||
setmerr:jmp ___mappederrno ; update errno from OS specific error code in A
|
||||
|
||||
openok: lda #>buf
|
||||
sta ICBAH,x ; set buffer address
|
||||
|
||||
@@ -41,7 +41,7 @@ _clock_getres:
|
||||
enosys: lda #ENOSYS
|
||||
|
||||
; Set __errno
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; timespec struct with tv_sec set to 1 second
|
||||
|
||||
@@ -105,7 +105,7 @@ errexit:jsr incsp3 ; Preserves A
|
||||
|
||||
; set __errno
|
||||
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
; -------
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
.export __graphics
|
||||
|
||||
.import findfreeiocb
|
||||
.import __oserror
|
||||
.import ___oserror
|
||||
.import fddecusage
|
||||
.import clriocb
|
||||
.import fdtoiocb
|
||||
@@ -45,7 +45,7 @@ parmok: jsr findfreeiocb
|
||||
beq iocbok ; we found one
|
||||
|
||||
lda #<EMFILE ; "too many open files"
|
||||
seterr: jsr __mappederrno ; @@@ probably not correct to set errno here @@@
|
||||
seterr: jsr ___mappederrno ; @@@ probably not correct to set errno here @@@
|
||||
rts ; return -1
|
||||
|
||||
;invmode:ldx #>EINVAL
|
||||
@@ -94,7 +94,7 @@ doopen: txa
|
||||
|
||||
lda tmp2 ; get fd
|
||||
ldx #0
|
||||
stx __oserror
|
||||
stx ___oserror
|
||||
rts
|
||||
|
||||
cioerr: sty tmp3 ; remember error code
|
||||
@@ -103,6 +103,6 @@ cioerr: sty tmp3 ; remember error code
|
||||
jsr CIOV ; close IOCB again since open failed
|
||||
jsr fddecusage ; and decrement usage counter of fd
|
||||
lda tmp3 ; put error code into A
|
||||
jmp __mappederrno
|
||||
jmp ___mappederrno
|
||||
|
||||
.endproc ; __graphics
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
|
||||
__inviocb:
|
||||
lda #<EINVAL
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
.export _lseek
|
||||
.import incsp6,__oserror
|
||||
.import incsp6,___oserror
|
||||
.import __inviocb,ldax0sp,ldaxysp,fdtoiocb
|
||||
.import __dos_type
|
||||
.import fd_table
|
||||
@@ -21,7 +21,7 @@
|
||||
; seeking not supported, return -1 and ENOSYS errno value
|
||||
no_supp:jsr incsp6
|
||||
lda #<ENOSYS
|
||||
jsr __directerrno ; returns with $FFFF in AX
|
||||
jsr ___directerrno ; returns with $FFFF in AX
|
||||
sta sreg
|
||||
sta sreg+1
|
||||
rts
|
||||
@@ -94,7 +94,7 @@ xxerr: tya
|
||||
pha
|
||||
jsr incsp6
|
||||
pla
|
||||
jsr __mappederrno ; returns with $FFFF in AX
|
||||
jsr ___mappederrno ; returns with $FFFF in AX
|
||||
sta sreg
|
||||
sta sreg+1
|
||||
rts
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
.import findfreeiocb
|
||||
.import incsp4
|
||||
.import ldaxysp,addysp
|
||||
.import __oserror
|
||||
.import ___oserror
|
||||
.ifdef UCASE_FILENAME
|
||||
.import ucase_fn
|
||||
.endif
|
||||
@@ -37,7 +37,7 @@ parmok: jsr findfreeiocb
|
||||
beq iocbok ; we found one
|
||||
|
||||
lda #<EMFILE ; "too many open files"
|
||||
seterr: jsr __directerrno
|
||||
seterr: jsr ___directerrno
|
||||
jsr incsp4 ; clean up stack
|
||||
lda #$FF
|
||||
tax
|
||||
@@ -150,11 +150,11 @@ finish: php
|
||||
jsr CIOV ; close IOCB again since open failed
|
||||
jsr fddecusage ; and decrement usage counter of fd
|
||||
lda tmp3 ; put error code into A
|
||||
jmp __mappederrno
|
||||
jmp ___mappederrno
|
||||
|
||||
ok: lda tmp2 ; get fd
|
||||
ldx #0
|
||||
stx __oserror
|
||||
stx ___oserror
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
; Christian Groessler, May-2000
|
||||
;
|
||||
; os specific error code mapping
|
||||
; int __fastcall__ _osmaperrno (unsigned char oserror);
|
||||
; int __fastcall__ __osmaperrno (unsigned char oserror);
|
||||
;
|
||||
|
||||
.include "errno.inc"
|
||||
.export __osmaperrno
|
||||
.export ___osmaperrno
|
||||
|
||||
.proc __osmaperrno
|
||||
.proc ___osmaperrno
|
||||
|
||||
cmp #$80 ; error or success
|
||||
bcs errcode ; error, jump
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.include "atari.inc"
|
||||
.export _opendir, _readdir, _closedir
|
||||
.import findfreeiocb, clriocb
|
||||
.import __oserror, return0, __do_oserror
|
||||
.import ___oserror, return0, __do_oserror
|
||||
.importzp ptr1, tmp1
|
||||
.ifdef DEFAULT_DEVICE
|
||||
.import __defdev
|
||||
@@ -56,13 +56,13 @@
|
||||
jsr CIOV
|
||||
bmi cioerr
|
||||
lda #0
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
tax
|
||||
lda diriocb
|
||||
rts
|
||||
.endproc
|
||||
|
||||
cioerr: sty __oserror
|
||||
cioerr: sty ___oserror
|
||||
lda #CLOSE
|
||||
sta ICCOM,x
|
||||
jsr CIOV ; close IOCB again since open failed
|
||||
@@ -147,7 +147,7 @@ copychar: lda (ptr1),y ; src=y dest=tmp1
|
||||
jsr CIOV
|
||||
bmi @cioerr
|
||||
ldx #0
|
||||
stx __oserror ; clear system specific error code
|
||||
stx ___oserror ; clear system specific error code
|
||||
txa
|
||||
rts
|
||||
@cioerr: jmp __do_oserror
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
;
|
||||
; Christian Groessler, 06.11.2002
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
|
||||
.include "atari.inc"
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx VCOUNT ; Use vertical line counter as high byte
|
||||
lda RTCLOK+2 ; Use clock as low byte
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
;
|
||||
|
||||
.include "atari.inc"
|
||||
.import __rwsetup,__do_oserror,__inviocb,__oserror
|
||||
.import __rwsetup,__do_oserror,__inviocb,___oserror
|
||||
.export _read
|
||||
|
||||
_read: jsr __rwsetup ; do common setup for read and write
|
||||
@@ -33,7 +33,7 @@ done: lda ICBLL,x ; buf len lo
|
||||
lda ICBLH,x ; get buf len hi
|
||||
tax ; to X
|
||||
okdone: lda #0
|
||||
sta __oserror ; clear system dependend error code
|
||||
sta ___oserror ; clear system dependend error code
|
||||
pla ; get buf len lo
|
||||
rts
|
||||
|
||||
|
||||
22
libsrc/atari/ser_stat_stddrv.s
Normal file
22
libsrc/atari/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,22 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.ifdef __ATARIXL__
|
||||
.import _atrxrdev_ser
|
||||
.else
|
||||
.import _atrrdev_ser
|
||||
.endif
|
||||
|
||||
.rodata
|
||||
|
||||
.ifdef __ATARIXL__
|
||||
_ser_static_stddrv := _atrxrdev_ser
|
||||
.else
|
||||
_ser_static_stddrv := _atrrdev_ser
|
||||
.endif
|
||||
18
libsrc/atari/ser_stddrv.s
Normal file
18
libsrc/atari/ser_stddrv.s
Normal file
@@ -0,0 +1,18 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv:
|
||||
.ifdef __ATARIXL__
|
||||
.asciiz "atrxrdev.ser"
|
||||
.else
|
||||
.asciiz "atrrdev.ser"
|
||||
.endif
|
||||
@@ -96,4 +96,4 @@ done: jmp return0
|
||||
; load errno code
|
||||
|
||||
enosys: lda #ENOSYS
|
||||
drcter: jmp __directerrno
|
||||
drcter: jmp ___directerrno
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
.export __sio_call
|
||||
.include "atari.inc"
|
||||
.import popa,popax,popptr1
|
||||
.import sectsizetab,__oserror
|
||||
.import sectsizetab,___oserror
|
||||
.importzp ptr1
|
||||
|
||||
.proc __sio_call
|
||||
@@ -76,7 +76,7 @@ _cont: lda #DISKID ; SIO bus ID of diskette drive
|
||||
bmi _req_err ; error occurred
|
||||
txa ; no error occurred
|
||||
_req_err:
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
rts
|
||||
|
||||
_inv_hand:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
; int __fastcall__ write (int fd, const void* buf, unsigned count);
|
||||
;
|
||||
.include "atari.inc"
|
||||
.import __rwsetup,__do_oserror,__inviocb,__oserror
|
||||
.import __rwsetup,__do_oserror,__inviocb,___oserror
|
||||
.export _write
|
||||
_write:
|
||||
jsr __rwsetup ; do common setup
|
||||
@@ -21,7 +21,7 @@ write9:
|
||||
lda ICBLH,x ; buf len high
|
||||
tax
|
||||
lda #0
|
||||
sta __oserror ; clear system dependend error code
|
||||
sta ___oserror ; clear system dependend error code
|
||||
pla
|
||||
rts
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
;
|
||||
; Christian Groessler, 01-Mar-2014
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
|
||||
.include "atari5200.inc"
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx VCOUNT ; Use vertical line counter as high byte
|
||||
lda RTCLOK+1 ; Use clock as low byte
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
;
|
||||
; 2022-03-15, Karri Kaksonen
|
||||
;
|
||||
; clock_t _clocks_per_sec (void);
|
||||
; clock_t __clocks_per_sec (void);
|
||||
;
|
||||
|
||||
.export __clocks_per_sec
|
||||
.export ___clocks_per_sec
|
||||
|
||||
.import sreg: zp
|
||||
.import _paldetected
|
||||
@@ -17,7 +17,7 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Return the number of clock ticks in one second.
|
||||
;
|
||||
.proc __clocks_per_sec
|
||||
.proc ___clocks_per_sec
|
||||
|
||||
lda #0
|
||||
tax
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.export _clrscr
|
||||
|
||||
.import _screen
|
||||
.import pushax, __bzero
|
||||
.import pushax, ___bzero
|
||||
.include "extzp.inc"
|
||||
|
||||
.code
|
||||
@@ -16,7 +16,7 @@
|
||||
jsr pushax
|
||||
ldx #>(charsperline * screenrows)
|
||||
lda #<(charsperline * screenrows)
|
||||
jmp __bzero
|
||||
jmp ___bzero
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.export _mono_clrscr
|
||||
|
||||
.import _mono_screen
|
||||
.import pushax, __bzero
|
||||
.import pushax, ___bzero
|
||||
.include "extzp.inc"
|
||||
|
||||
.code
|
||||
@@ -16,7 +16,7 @@
|
||||
jsr pushax
|
||||
ldx #>(mono_charsperline * screenrows)
|
||||
lda #<(mono_charsperline * screenrows)
|
||||
jmp __bzero
|
||||
jmp ___bzero
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
;
|
||||
; Stefan Haubenthal, 2011-04-18
|
||||
;
|
||||
; int __fastcall__ _osmaperrno (unsigned char oserror);
|
||||
; int __fastcall__ __osmaperrno (unsigned char oserror);
|
||||
; /* Map a system specific error into a system independent code */
|
||||
;
|
||||
|
||||
.include "errno.inc"
|
||||
.export __osmaperrno
|
||||
.export ___osmaperrno
|
||||
|
||||
.proc __osmaperrno
|
||||
.proc ___osmaperrno
|
||||
|
||||
lda #<EUNKNOWN
|
||||
ldx #>EUNKNOWN
|
||||
|
||||
14
libsrc/atmos/ser_stat_stddrv.s
Normal file
14
libsrc/atmos/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.import _atmos_acia_ser
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_static_stddrv := _atmos_acia_ser
|
||||
13
libsrc/atmos/ser_stddrv.s
Normal file
13
libsrc/atmos/ser_stddrv.s
Normal file
@@ -0,0 +1,13 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv: .asciiz "atmos-acia.ser"
|
||||
@@ -2,16 +2,16 @@
|
||||
; 2002-11-05, Ullrich von Bassewitz
|
||||
; 2015-09-11, Greg King
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
|
||||
.include "c128.inc"
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx VIC_HLINE ; Use VIC rasterline as high byte
|
||||
lda TIME+2 ; Use 60HZ clock as low byte
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
14
libsrc/c128/ser_stat_stddrv.s
Normal file
14
libsrc/c128/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.import _c128_swlink_ser
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_static_stddrv := _c128_swlink_ser
|
||||
13
libsrc/c128/ser_stddrv.s
Normal file
13
libsrc/c128/ser_stddrv.s
Normal file
@@ -0,0 +1,13 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv: .asciiz "c128_swlink.ser"
|
||||
@@ -2,16 +2,16 @@
|
||||
; 2002-11-05, Ullrich von Bassewitz
|
||||
; 2015-09-11, Greg King
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
|
||||
.include "plus4.inc"
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx TED_VLINELO ; Use TED rasterline as high byte
|
||||
lda TIME+2 ; Use 60HZ clock as low byte
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
; 2002-11-05, Ullrich von Bassewitz
|
||||
; 2015-09-11, Greg King
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
|
||||
.include "c64.inc"
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx VIC_HLINE ; Use VIC rasterline as high byte
|
||||
lda TIME+2 ; Use 60HZ clock as low byte
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
14
libsrc/c64/ser_stat_stddrv.s
Normal file
14
libsrc/c64/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.import _c64_swlink_ser
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_static_stddrv := _c64_swlink_ser
|
||||
13
libsrc/c64/ser_stddrv.s
Normal file
13
libsrc/c64/ser_stddrv.s
Normal file
@@ -0,0 +1,13 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv: .asciiz "c64_swlink.ser"
|
||||
@@ -7,7 +7,7 @@
|
||||
.include "cbm.inc"
|
||||
|
||||
.export _cbm_k_load
|
||||
.import __oserror
|
||||
.import ___oserror
|
||||
.import popa
|
||||
.importzp ptr1
|
||||
|
||||
@@ -19,7 +19,7 @@ _cbm_k_load:
|
||||
ldy ptr1+1
|
||||
jsr LOAD
|
||||
bcc @Ok
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
ldx ptr1
|
||||
ldy ptr1+1
|
||||
@Ok: txa
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
; {
|
||||
; cbm_k_setlfs(lfn, device, sec_addr);
|
||||
; cbm_k_setnam(name);
|
||||
; return _oserror = cbm_k_open();
|
||||
; return __oserror = cbm_k_open();
|
||||
; }
|
||||
;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
.import popa
|
||||
.import _cbm_k_setlfs, _cbm_k_setnam, _cbm_k_open
|
||||
.import __oserror
|
||||
.import ___oserror
|
||||
|
||||
_cbm_open:
|
||||
jsr _cbm_k_setnam
|
||||
@@ -32,5 +32,5 @@ _cbm_open:
|
||||
jsr _cbm_k_setlfs ; Call SETLFS, pop all args
|
||||
|
||||
jsr _cbm_k_open
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
rts
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
; int __fastcall__ cbm_read (unsigned char lfn, void* buffer, unsigned int size)
|
||||
; /* Reads up to "size" bytes from a file to "buffer".
|
||||
; ** Returns the number of actually read bytes, 0 if there are no bytes left
|
||||
; ** (EOF) or -1 in case of an error. _oserror contains an errorcode then (see
|
||||
; ** (EOF) or -1 in case of an error. __oserror contains an errorcode then (see
|
||||
; ** table below).
|
||||
; */
|
||||
; {
|
||||
@@ -14,7 +14,7 @@
|
||||
; static unsigned char tmp;
|
||||
;
|
||||
; /* if we can't change to the inputchannel #lfn then return an error */
|
||||
; if (_oserror = cbm_k_chkin(lfn)) return -1;
|
||||
; if (__oserror = cbm_k_chkin(lfn)) return -1;
|
||||
;
|
||||
; bytesread = 0;
|
||||
;
|
||||
@@ -41,7 +41,7 @@
|
||||
.export _cbm_read
|
||||
.importzp ptr1, ptr2, ptr3, tmp1
|
||||
.import popax, popa
|
||||
.import __oserror
|
||||
.import ___oserror
|
||||
|
||||
|
||||
_cbm_read:
|
||||
@@ -106,7 +106,7 @@ _cbm_read:
|
||||
|
||||
; CHKIN failed
|
||||
|
||||
@E1: sta __oserror
|
||||
@E1: sta ___oserror
|
||||
lda #$FF
|
||||
tax
|
||||
rts ; return -1
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
; static unsigned int byteswritten;
|
||||
;
|
||||
; /* if we can't change to the outputchannel #lfn then return an error */
|
||||
; if (_oserror = cbm_k_ckout(lfn)) return -1;
|
||||
; if (__oserror = cbm_k_ckout(lfn)) return -1;
|
||||
;
|
||||
; byteswritten = 0;
|
||||
;
|
||||
@@ -18,7 +18,7 @@
|
||||
; }
|
||||
;
|
||||
; if (cbm_k_readst()) {
|
||||
; _oserror = 5; /* device not present */
|
||||
; __oserror = 5; /* device not present */
|
||||
; byteswritten = -1;
|
||||
; }
|
||||
;
|
||||
@@ -33,7 +33,7 @@
|
||||
.export _cbm_write
|
||||
.importzp ptr1, ptr2, ptr3
|
||||
.import popax, popa
|
||||
.import __oserror
|
||||
.import ___oserror
|
||||
|
||||
|
||||
_cbm_write:
|
||||
@@ -87,7 +87,7 @@ _cbm_write:
|
||||
|
||||
; Error entry, error code is in A
|
||||
|
||||
@E2: sta __oserror
|
||||
@E2: sta ___oserror
|
||||
lda #$FF
|
||||
tax
|
||||
rts ; return -1
|
||||
|
||||
@@ -54,12 +54,12 @@
|
||||
ldx unittab,y
|
||||
jsr closecmdchannel ; Close the disk command channel
|
||||
pla ; Get the error code from the disk
|
||||
jmp __mappederrno ; Set _oserror and _errno, return 0/-1
|
||||
jmp ___mappederrno ; Set __oserror and _errno, return 0/-1
|
||||
|
||||
; Error entry: The given file descriptor is not valid or not open
|
||||
|
||||
invalidfd:
|
||||
lda #EBADF
|
||||
jmp __directerrno ; Set _errno, clear _oserror, return -1
|
||||
jmp ___directerrno ; Set _errno, clear __oserror, return -1
|
||||
|
||||
.endproc
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
jsr popa
|
||||
jsr diskinit
|
||||
beq size
|
||||
jsr __mappederrno
|
||||
jsr ___mappederrno
|
||||
bne fail ; Branch always
|
||||
|
||||
; Check for sufficient buf size
|
||||
@@ -43,7 +43,7 @@ size: lda ptr3+1
|
||||
cmp #3
|
||||
bcs okay ; Buf >= 3
|
||||
lda #<ERANGE
|
||||
jsr __directerrno
|
||||
jsr ___directerrno
|
||||
fail: lda #0 ; Return NULL
|
||||
tax
|
||||
rts
|
||||
@@ -52,7 +52,7 @@ fail: lda #0 ; Return NULL
|
||||
|
||||
okay: lda fnunit ; Set by diskinit
|
||||
jsr devicestr ; Returns 0 in A
|
||||
sta __oserror ; Clear _oserror
|
||||
sta ___oserror ; Clear __oserror
|
||||
|
||||
; Success, return buf
|
||||
|
||||
|
||||
@@ -92,8 +92,8 @@ L3: sta tmp1 ; Save returned count
|
||||
; Didn't read enough bytes. This is an error for us, but errno is not set
|
||||
|
||||
lda #<EIO
|
||||
sta __errno
|
||||
stx __errno+1 ; X is zero
|
||||
sta ___errno
|
||||
stx ___errno+1 ; X is zero
|
||||
bne L1 ; Branch always
|
||||
|
||||
|
||||
|
||||
@@ -94,10 +94,10 @@ parmok: jsr popax ; Get flags
|
||||
|
||||
lda #EINVAL
|
||||
|
||||
; Error entry. Sets _errno, clears _oserror, returns -1
|
||||
; Error entry. Sets _errno, clears __oserror, returns -1
|
||||
|
||||
seterrno:
|
||||
jmp __directerrno
|
||||
jmp ___directerrno
|
||||
|
||||
; Error entry: Close the file and exit. OS error code is in A on entry
|
||||
|
||||
@@ -113,7 +113,7 @@ closeandexit:
|
||||
|
||||
; Error entry: Set oserror and errno using error code in A and return -1
|
||||
|
||||
oserror:jmp __mappederrno
|
||||
oserror:jmp ___mappederrno
|
||||
|
||||
; Read bit is set. Add an 'r' to the name
|
||||
|
||||
@@ -189,7 +189,7 @@ nofile: ; ... else use SA=0 (read)
|
||||
|
||||
txa ; Handle
|
||||
ldx #0
|
||||
stx __oserror ; Clear _oserror
|
||||
stx ___oserror ; Clear __oserror
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
; 2000-05-17, Ullrich von Bassewitz
|
||||
; 2014-05-28, Greg King
|
||||
;
|
||||
; int __fastcall__ _osmaperrno (unsigned char oserror);
|
||||
; int __fastcall__ __osmaperrno (unsigned char oserror);
|
||||
; /* Map a system-specific error into a system-independent code. */
|
||||
;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
.code
|
||||
|
||||
__osmaperrno:
|
||||
___osmaperrno:
|
||||
ldx #ErrTabSize
|
||||
@L1: cmp ErrTab-2,x ; Search for the error code
|
||||
beq @L2 ; Jump if found
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
jsr CHKIN
|
||||
bcc @L3 ; Branch if ok
|
||||
jmp __mappederrno ; Store into __oserror, map to errno, return -1
|
||||
jmp ___mappederrno ; Store into ___oserror, map to errno, return -1
|
||||
|
||||
; Read the next byte
|
||||
|
||||
@@ -123,10 +123,10 @@
|
||||
|
||||
done: jsr CLRCH
|
||||
|
||||
; Clear _oserror and return the number of chars read
|
||||
; Clear __oserror and return the number of chars read
|
||||
|
||||
eof: lda #0
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
lda ptr3
|
||||
ldx ptr3+1
|
||||
rts
|
||||
@@ -141,7 +141,7 @@ devnotpresent:
|
||||
|
||||
invalidfd:
|
||||
lda #EBADF
|
||||
jmp __directerrno ; Sets _errno, clears _oserror, returns -1
|
||||
jmp ___directerrno ; Sets _errno, clears __oserror, returns -1
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@ struct dirent* __fastcall__ readdir (register DIR* dir)
|
||||
}
|
||||
|
||||
/* Something went wrong when parsing the directory entry */
|
||||
_errno = EIO;
|
||||
__errno = EIO;
|
||||
exitpoint:
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
jsr CKOUT
|
||||
bcc @L2
|
||||
@error: jmp __mappederrno ; Store into __oserror, map to errno, return -1
|
||||
@error: jmp ___mappederrno ; Store into ___oserror, map to errno, return -1
|
||||
|
||||
; Output the next character from the buffer
|
||||
|
||||
@@ -92,10 +92,10 @@
|
||||
|
||||
@L3: jsr CLRCH
|
||||
|
||||
; Clear _oserror and return the number of chars written
|
||||
; Clear __oserror and return the number of chars written
|
||||
|
||||
lda #0
|
||||
sta __oserror
|
||||
sta ___oserror
|
||||
lda ptr3
|
||||
ldx ptr3+1
|
||||
rts
|
||||
@@ -112,6 +112,6 @@ devnotpresent:
|
||||
|
||||
invalidfd:
|
||||
lda #EBADF
|
||||
jmp __directerrno ; Sets _errno, clears _oserror, returns -1
|
||||
jmp ___directerrno ; Sets _errno, clears __oserror, returns -1
|
||||
|
||||
.endproc
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
; 2002-11-05, Ullrich von Bassewitz
|
||||
; 2015-09-11, Greg King
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
.importzp time
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx time+2 ; Use 50/60HZ clock
|
||||
lda time+1
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
14
libsrc/cbm510/ser_stat_stddrv.s
Normal file
14
libsrc/cbm510/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.import _cbm510_std_ser
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_static_stddrv := _cbm510_std_ser
|
||||
13
libsrc/cbm510/ser_stddrv.s
Normal file
13
libsrc/cbm510/ser_stddrv.s
Normal file
@@ -0,0 +1,13 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv: .asciiz "cbm510-std.ser"
|
||||
@@ -2,15 +2,15 @@
|
||||
; 2002-11-05, Ullrich von Bassewitz
|
||||
; 2015-09-11, Greg King
|
||||
;
|
||||
; void _randomize (void);
|
||||
; void __randomize (void);
|
||||
; /* Initialize the random number generator */
|
||||
;
|
||||
|
||||
.export __randomize
|
||||
.export ___randomize
|
||||
.import _srand
|
||||
.importzp time
|
||||
|
||||
__randomize:
|
||||
___randomize:
|
||||
ldx time+2 ; Use 50/60HZ clock
|
||||
lda time+1
|
||||
jmp _srand ; Initialize generator
|
||||
|
||||
14
libsrc/cbm610/ser_stat_stddrv.s
Normal file
14
libsrc/cbm610/ser_stat_stddrv.s
Normal file
@@ -0,0 +1,14 @@
|
||||
;
|
||||
; Address of the static standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const void ser_static_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_static_stddrv
|
||||
.import _cbm610_std_ser
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_static_stddrv := _cbm610_std_ser
|
||||
13
libsrc/cbm610/ser_stddrv.s
Normal file
13
libsrc/cbm610/ser_stddrv.s
Normal file
@@ -0,0 +1,13 @@
|
||||
;
|
||||
; Name of the standard serial driver
|
||||
;
|
||||
; Oliver Schmidt, 2022-12-22
|
||||
;
|
||||
; const char ser_stddrv[];
|
||||
;
|
||||
|
||||
.export _ser_stddrv
|
||||
|
||||
.rodata
|
||||
|
||||
_ser_stddrv: .asciiz "cbm610-std.ser"
|
||||
@@ -12,7 +12,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
void __fastcall__ _afailed (char* file, unsigned line)
|
||||
void __fastcall__ __afailed (char* file, unsigned line)
|
||||
{
|
||||
raise (SIGABRT);
|
||||
fprintf (stderr, "ASSERTION FAILED IN %s:%u\n", file, line);
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
.macpack cpu
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; int __fastcall__ _directerrno (unsigned char code);
|
||||
; /* Set errno to a specific error code, clear _oserror, and return -1. Used
|
||||
; int __fastcall__ __directerrno (unsigned char code);
|
||||
; /* Set errno to a specific error code, clear __oserror, and return -1. Used
|
||||
; ** by the library.
|
||||
; */
|
||||
|
||||
__directerrno:
|
||||
jsr __seterrno ; Set errno (returns with .A = 0)
|
||||
sta __oserror ; Clear __oserror
|
||||
___directerrno:
|
||||
jsr ___seterrno ; Set errno (returns with .A = 0)
|
||||
sta ___oserror ; Clear ___oserror
|
||||
.if (.cpu .bitand CPU_ISET_65SC02)
|
||||
dec a
|
||||
.else
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
invmode:
|
||||
lda #EINVAL
|
||||
jsr __seterrno ; Set __errno, returns zero in A
|
||||
jsr ___seterrno ; Set __errno, returns zero in A
|
||||
tax ; a/x = 0
|
||||
jmp incsp4
|
||||
|
||||
@@ -91,7 +91,7 @@ modeok: ldy #$00
|
||||
bne openok
|
||||
cmp #$FF
|
||||
bne openok
|
||||
jmp return0 ; Failure, errno/_oserror already set
|
||||
jmp return0 ; Failure, errno/__oserror already set
|
||||
|
||||
; Open call succeeded
|
||||
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
|
||||
.data
|
||||
|
||||
__heaporg:
|
||||
___heaporg:
|
||||
.word __BSS_RUN__+__BSS_SIZE__ ; Linker calculates this symbol
|
||||
__heapptr:
|
||||
___heapptr:
|
||||
.word __BSS_RUN__+__BSS_SIZE__ ; Dito
|
||||
__heapend:
|
||||
___heapend:
|
||||
.word __BSS_RUN__+__BSS_SIZE__
|
||||
__heapfirst:
|
||||
___heapfirst:
|
||||
.word 0
|
||||
__heaplast:
|
||||
___heaplast:
|
||||
.word 0
|
||||
|
||||
|
||||
@@ -33,10 +33,10 @@ initheap:
|
||||
sec
|
||||
lda sp
|
||||
sbc #<__STACKSIZE__
|
||||
sta __heapend
|
||||
sta ___heapend
|
||||
lda sp+1
|
||||
sbc #>__STACKSIZE__
|
||||
sta __heapend+1
|
||||
sta ___heapend+1
|
||||
rts
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
.importzp ptr1, ptr2
|
||||
.import popax
|
||||
.import heapadd
|
||||
.export __heapadd
|
||||
.export ___heapadd
|
||||
|
||||
.include "_heap.inc"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Code
|
||||
|
||||
__heapadd:
|
||||
___heapadd:
|
||||
sta ptr1 ; Store size in ptr1
|
||||
stx ptr1+1
|
||||
jsr popax ; Get the block pointer
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
;
|
||||
|
||||
.importzp ptr1, ptr2
|
||||
.export __heapblocksize
|
||||
.export ___heapblocksize
|
||||
|
||||
.include "_heap.inc"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Code
|
||||
|
||||
__heapblocksize:
|
||||
___heapblocksize:
|
||||
|
||||
; Below the user data is a pointer that points to the start of the real
|
||||
; (raw) memory block. The first word of this block is the size. To access
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
;
|
||||
|
||||
.importzp ptr1, ptr2
|
||||
.export __heapmaxavail
|
||||
.export ___heapmaxavail
|
||||
|
||||
.include "_heap.inc"
|
||||
|
||||
@@ -17,22 +17,22 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Code
|
||||
|
||||
__heapmaxavail:
|
||||
___heapmaxavail:
|
||||
|
||||
; size_t Size = (_heapend - _heapptr) * sizeof (*_heapend);
|
||||
|
||||
lda __heapend
|
||||
sub __heapptr
|
||||
lda ___heapend
|
||||
sub ___heapptr
|
||||
sta ptr2
|
||||
lda __heapend+1
|
||||
sbc __heapptr+1
|
||||
lda ___heapend+1
|
||||
sbc ___heapptr+1
|
||||
sta ptr2+1
|
||||
|
||||
; struct freeblock* F = _heapfirst;
|
||||
|
||||
lda __heapfirst
|
||||
lda ___heapfirst
|
||||
sta ptr1
|
||||
lda __heapfirst+1
|
||||
lda ___heapfirst+1
|
||||
@L1: sta ptr1+1
|
||||
|
||||
; while (F) {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
;
|
||||
|
||||
.importzp ptr1, ptr2
|
||||
.export __heapmemavail
|
||||
.export ___heapmemavail
|
||||
|
||||
.include "_heap.inc"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Code
|
||||
|
||||
__heapmemavail:
|
||||
___heapmemavail:
|
||||
|
||||
; size_t Size = 0;
|
||||
|
||||
@@ -27,9 +27,9 @@ __heapmemavail:
|
||||
|
||||
; struct freeblock* F = _heapfirst;
|
||||
|
||||
lda __heapfirst
|
||||
lda ___heapfirst
|
||||
sta ptr1
|
||||
lda __heapfirst+1
|
||||
lda ___heapfirst+1
|
||||
@L1: sta ptr1+1
|
||||
|
||||
; while (F) {
|
||||
@@ -61,17 +61,17 @@ __heapmemavail:
|
||||
; return Size + (_heapend - _heapptr) * sizeof (*_heapend);
|
||||
|
||||
@L2: lda ptr2
|
||||
add __heapend
|
||||
add ___heapend
|
||||
sta ptr2
|
||||
lda ptr2+1
|
||||
adc __heapend+1
|
||||
adc ___heapend+1
|
||||
tax
|
||||
|
||||
lda ptr2
|
||||
sub __heapptr
|
||||
sub ___heapptr
|
||||
sta ptr2
|
||||
txa
|
||||
sbc __heapptr+1
|
||||
sbc ___heapptr+1
|
||||
tax
|
||||
lda ptr2
|
||||
|
||||
|
||||
@@ -11,19 +11,19 @@
|
||||
.macpack cpu
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; int __fastcall__ _mappederrno (unsigned char code);
|
||||
; /* Set _oserror to the given platform-specific error code. If it is a real
|
||||
; int __fastcall__ __mappederrno (unsigned char code);
|
||||
; /* Set __oserror to the given platform-specific error code. If it is a real
|
||||
; ** error code (not zero), set errno to the corresponding system error code,
|
||||
; ** and return -1. Otherwise, return zero.
|
||||
; ** Used by the library.
|
||||
; */
|
||||
|
||||
__mappederrno:
|
||||
sta __oserror ; Store the error code
|
||||
___mappederrno:
|
||||
sta ___oserror ; Store the error code
|
||||
tax ; Did we have an error?
|
||||
bze ok ; Branch if no
|
||||
jsr __osmaperrno ; Map OS error into errno code
|
||||
jsr __seterrno ; Save in errno (returns with .A = 0)
|
||||
jsr ___osmaperrno ; Map OS error into errno code
|
||||
jsr ___seterrno ; Save in errno (returns with .A = 0)
|
||||
.if (.cpu .bitand CPU_ISET_65SC02)
|
||||
dec a
|
||||
.else
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 16.05.2000
|
||||
;
|
||||
; extern unsigned char _oserror;
|
||||
; extern unsigned char __oserror;
|
||||
; /* Operating system specific errors from the low level functions */
|
||||
|
||||
|
||||
.export __oserror
|
||||
.export ___oserror
|
||||
|
||||
.bss
|
||||
|
||||
__oserror:
|
||||
___oserror:
|
||||
.res 1
|
||||
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
|
||||
|
||||
|
||||
void __fastcall__ _poserror (const char* msg)
|
||||
void __fastcall__ __poserror (const char* msg)
|
||||
{
|
||||
/* Fetch the message that corresponds to _oserror */
|
||||
const char* errormsg = _stroserror (_oserror);
|
||||
const char* errormsg = __stroserror (_oserror);
|
||||
|
||||
/* Different output depending on msg */
|
||||
if (msg) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 2004-05-13
|
||||
;
|
||||
; __seterrno: Will set __errno to the value in A and return zero in A. Other
|
||||
; ___seterrno: Will set ___errno to the value in A and return zero in A. Other
|
||||
; registers aren't changed. The function is C callable, but
|
||||
; currently only called from asm code.
|
||||
;
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
.code
|
||||
|
||||
.proc __seterrno
|
||||
.proc ___seterrno
|
||||
|
||||
sta __errno
|
||||
sta ___errno
|
||||
lda #0
|
||||
sta __errno+1
|
||||
sta ___errno+1
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 1998-12-09, 2004-11-30
|
||||
;
|
||||
; void __fastcall__ _swap (void* p, void* q, size_t size);
|
||||
; void __fastcall__ __swap (void* p, void* q, size_t size);
|
||||
;
|
||||
|
||||
.export __swap
|
||||
.export ___swap
|
||||
.import popax, popptr1
|
||||
.importzp ptr1, ptr2, ptr3
|
||||
|
||||
|
||||
__swap: eor #$FF
|
||||
___swap: eor #$FF
|
||||
sta ptr3
|
||||
txa
|
||||
eor #$FF
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
; Error, no space left
|
||||
|
||||
@Error: lda #ENOSPC ; No space left
|
||||
jsr __seterrno
|
||||
jsr ___seterrno
|
||||
ldx #$FF ; Return -1
|
||||
txa
|
||||
rts
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
;
|
||||
|
||||
.export _calloc
|
||||
.import _malloc, __bzero
|
||||
.import _malloc, ___bzero
|
||||
.import tosumulax, pushax
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ ClearBlock:
|
||||
jsr pushax ; ptr
|
||||
lda Size
|
||||
ldx Size+1 ; Size
|
||||
jmp __bzero
|
||||
jmp ___bzero
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
.export _chdir
|
||||
|
||||
.import __syschdir
|
||||
.import __mappederrno
|
||||
.import ___mappederrno
|
||||
|
||||
|
||||
;--------------------------------------------------------------------------
|
||||
@@ -17,7 +17,7 @@
|
||||
.proc _chdir
|
||||
|
||||
jsr __syschdir ; Call the machine specific function
|
||||
jmp __mappederrno ; Store into _oserror, set errno, return 0/-1
|
||||
jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
; 2003-08-12, Ullrich von Bassewitz
|
||||
; 2015-09-24, Greg King
|
||||
;
|
||||
; extern int _errno;
|
||||
; extern int __errno;
|
||||
; /* Library errors go here. */
|
||||
;
|
||||
|
||||
@@ -10,5 +10,5 @@
|
||||
|
||||
.bss
|
||||
|
||||
__errno:
|
||||
___errno:
|
||||
.word 0
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
; File is not open
|
||||
|
||||
lda #EINVAL
|
||||
jsr __seterrno
|
||||
jsr ___seterrno
|
||||
lda #$FF ; Return -1
|
||||
tax
|
||||
rts
|
||||
|
||||
@@ -78,7 +78,7 @@ err: rts
|
||||
; If the file is not valid, fileno must set errno and return -1
|
||||
|
||||
error: lda #<EBADF
|
||||
jsr __seterrno
|
||||
jsr ___seterrno
|
||||
lda #$FF
|
||||
tax
|
||||
rts
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
; Failed to allocate a file stream
|
||||
|
||||
lda #EMFILE
|
||||
jsr __seterrno ; Set __errno, will return 0 in A
|
||||
jsr ___seterrno ; Set __errno, will return 0 in A
|
||||
tax
|
||||
rts ; Return zero
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
; File not open or in error state
|
||||
|
||||
@L1: lda #EINVAL
|
||||
jsr __seterrno ; Set __errno, return zero in A
|
||||
jsr ___seterrno ; Set __errno, return zero in A
|
||||
tax ; a/x = 0
|
||||
jmp @L99 ; Bail out
|
||||
|
||||
|
||||
@@ -105,27 +105,27 @@ _free: sta ptr2
|
||||
tay
|
||||
lda ptr2+1
|
||||
adc ptr1+1
|
||||
cpy __heapptr
|
||||
cpy ___heapptr
|
||||
bne heapadd ; Add to free list
|
||||
cmp __heapptr+1
|
||||
cmp ___heapptr+1
|
||||
bne heapadd
|
||||
|
||||
; The pointer is located at the heap top. Lower the heap top pointer to
|
||||
; release the block.
|
||||
|
||||
@L3: lda ptr2
|
||||
sta __heapptr
|
||||
sta ___heapptr
|
||||
lda ptr2+1
|
||||
sta __heapptr+1
|
||||
sta ___heapptr+1
|
||||
|
||||
; Check if the last block in the freelist is now at heap top. If so, remove
|
||||
; this block from the freelist.
|
||||
|
||||
lda __heaplast
|
||||
lda ___heaplast
|
||||
sta ptr1
|
||||
ora __heaplast+1
|
||||
ora ___heaplast+1
|
||||
beq @L9 ; Jump if free list empty
|
||||
lda __heaplast+1
|
||||
lda ___heaplast+1
|
||||
sta ptr1+1 ; Pointer to last block now in ptr1
|
||||
|
||||
ldy #freeblock::size
|
||||
@@ -136,35 +136,35 @@ _free: sta ptr2
|
||||
lda (ptr1),y
|
||||
adc ptr1+1
|
||||
|
||||
cmp __heapptr+1
|
||||
cmp ___heapptr+1
|
||||
bne @L9 ; Jump if last block not on top of heap
|
||||
cpx __heapptr
|
||||
cpx ___heapptr
|
||||
bne @L9 ; Jump if last block not on top of heap
|
||||
|
||||
; Remove the last block
|
||||
|
||||
lda ptr1
|
||||
sta __heapptr
|
||||
sta ___heapptr
|
||||
lda ptr1+1
|
||||
sta __heapptr+1
|
||||
sta ___heapptr+1
|
||||
|
||||
; Correct the next pointer of the now last block
|
||||
|
||||
ldy #freeblock::prev+1 ; Offset of ->prev field
|
||||
lda (ptr1),y
|
||||
sta ptr2+1 ; Remember f->prev in ptr2
|
||||
sta __heaplast+1
|
||||
sta ___heaplast+1
|
||||
dey
|
||||
lda (ptr1),y
|
||||
sta ptr2 ; Remember f->prev in ptr2
|
||||
sta __heaplast
|
||||
ora __heaplast+1 ; -> prev == 0?
|
||||
sta ___heaplast
|
||||
ora ___heaplast+1 ; -> prev == 0?
|
||||
bne @L8 ; Jump if free list not empty
|
||||
|
||||
; Free list is now empty (A = 0)
|
||||
|
||||
sta __heapfirst
|
||||
sta __heapfirst+1
|
||||
sta ___heapfirst
|
||||
sta ___heapfirst+1
|
||||
|
||||
; Done
|
||||
|
||||
@@ -283,9 +283,9 @@ _free: sta ptr2
|
||||
; Check if the free list is empty, storing _hfirst into ptr3 for later
|
||||
|
||||
heapadd:
|
||||
lda __heapfirst
|
||||
lda ___heapfirst
|
||||
sta ptr3
|
||||
lda __heapfirst+1
|
||||
lda ___heapfirst+1
|
||||
sta ptr3+1
|
||||
ora ptr3
|
||||
bne SearchFreeList
|
||||
@@ -301,10 +301,10 @@ heapadd:
|
||||
|
||||
lda ptr2
|
||||
ldx ptr2+1
|
||||
sta __heapfirst
|
||||
stx __heapfirst+1 ; _heapfirst = f;
|
||||
sta __heaplast
|
||||
stx __heaplast+1 ; _heaplast = f;
|
||||
sta ___heapfirst
|
||||
stx ___heapfirst+1 ; _heapfirst = f;
|
||||
sta ___heaplast
|
||||
stx ___heaplast+1 ; _heaplast = f;
|
||||
|
||||
rts ; Done
|
||||
|
||||
@@ -351,9 +351,9 @@ SearchFreeList:
|
||||
sta (ptr2),y ; Clear low byte of f->next
|
||||
|
||||
lda ptr2 ; _heaplast = f;
|
||||
sta __heaplast
|
||||
sta ___heaplast
|
||||
lda ptr2+1
|
||||
sta __heaplast+1
|
||||
sta ___heaplast+1
|
||||
|
||||
; Since we have checked the case that the freelist is empty before, if the
|
||||
; right pointer is NULL, the left *cannot* be NULL here. So skip the
|
||||
@@ -414,9 +414,9 @@ CheckRightMerge:
|
||||
; f->next is zero, this is now the last block
|
||||
|
||||
@L1: lda ptr2 ; _heaplast = f;
|
||||
sta __heaplast
|
||||
sta ___heaplast
|
||||
lda ptr2+1
|
||||
sta __heaplast+1
|
||||
sta ___heaplast+1
|
||||
jmp CheckLeftMerge
|
||||
|
||||
; No right merge, just set the link.
|
||||
@@ -451,9 +451,9 @@ CheckLeftMerge:
|
||||
sta (ptr2),y
|
||||
|
||||
lda ptr2 ; _heapfirst = f;
|
||||
sta __heapfirst
|
||||
sta ___heapfirst
|
||||
lda ptr2+1
|
||||
sta __heapfirst+1
|
||||
sta ___heapfirst+1
|
||||
|
||||
rts ; Done
|
||||
|
||||
@@ -510,9 +510,9 @@ CheckLeftMerge2:
|
||||
; This is now the last block, do _heaplast = left
|
||||
|
||||
@L1: lda ptr4
|
||||
sta __heaplast
|
||||
sta ___heaplast
|
||||
lda ptr4+1
|
||||
sta __heaplast+1
|
||||
sta ___heaplast+1
|
||||
rts ; Done
|
||||
|
||||
; No merge of the left block, just set the link. Y points to size+1 if
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
; File not open
|
||||
|
||||
@L1: lda #EBADF
|
||||
jsr __seterrno ; Returns with A = 0
|
||||
jsr ___seterrno ; Returns with A = 0
|
||||
tax ; A = X = 0
|
||||
jmp incsp6
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ loop: dec ptr2
|
||||
|
||||
overflow:
|
||||
lda #<ERANGE
|
||||
jsr __seterrno ; Returns 0 in A
|
||||
jsr ___seterrno ; Returns 0 in A
|
||||
tax ; Return zero
|
||||
rts
|
||||
|
||||
|
||||
@@ -140,9 +140,9 @@ _malloc:
|
||||
|
||||
; Load a pointer to the freelist into ptr2
|
||||
|
||||
@L2: lda __heapfirst
|
||||
@L2: lda ___heapfirst
|
||||
sta ptr2
|
||||
lda __heapfirst+1
|
||||
lda ___heapfirst+1
|
||||
sta ptr2+1
|
||||
|
||||
; Search the freelist for a block that is big enough. We will calculate
|
||||
@@ -173,16 +173,16 @@ _malloc:
|
||||
|
||||
; We did not find a block big enough. Try to use new space from the heap top.
|
||||
|
||||
lda __heapptr
|
||||
lda ___heapptr
|
||||
add ptr1 ; _heapptr + size
|
||||
tay
|
||||
lda __heapptr+1
|
||||
lda ___heapptr+1
|
||||
adc ptr1+1
|
||||
bcs OutOfHeapSpace ; On overflow, we're surely out of space
|
||||
|
||||
cmp __heapend+1
|
||||
cmp ___heapend+1
|
||||
bne @L5
|
||||
cpy __heapend
|
||||
cpy ___heapend
|
||||
@L5: bcc TakeFromTop
|
||||
beq TakeFromTop
|
||||
|
||||
@@ -196,13 +196,13 @@ Done: rts
|
||||
; There is enough space left, take it from the heap top
|
||||
|
||||
TakeFromTop:
|
||||
ldx __heapptr ; p = _heapptr;
|
||||
ldx ___heapptr ; p = _heapptr;
|
||||
stx ptr2
|
||||
ldx __heapptr+1
|
||||
ldx ___heapptr+1
|
||||
stx ptr2+1
|
||||
|
||||
sty __heapptr ; _heapptr += size;
|
||||
sta __heapptr+1
|
||||
sty ___heapptr ; _heapptr += size;
|
||||
sta ___heapptr+1
|
||||
jmp FillSizeAndRet ; Done
|
||||
|
||||
; We found a block big enough. If the block can hold just the
|
||||
@@ -245,10 +245,10 @@ BlockFound:
|
||||
; Do _hfirst = f->next
|
||||
|
||||
@L1: lda (ptr2),y ; Load high byte of f->next
|
||||
sta __heapfirst+1
|
||||
sta ___heapfirst+1
|
||||
dey ; Points to next
|
||||
lda (ptr2),y ; Load low byte of f->next
|
||||
sta __heapfirst
|
||||
sta ___heapfirst
|
||||
|
||||
; Check f->next. Y points always to next if we come here
|
||||
|
||||
@@ -275,10 +275,10 @@ BlockFound:
|
||||
; Do _hlast = f->prev
|
||||
|
||||
@L3: lda (ptr2),y ; Load low byte of f->prev
|
||||
sta __heaplast
|
||||
sta ___heaplast
|
||||
iny ; Points to prev+1
|
||||
lda (ptr2),y ; Load high byte of f->prev
|
||||
sta __heaplast+1
|
||||
sta ___heaplast+1
|
||||
jmp RetUserPtr ; Done
|
||||
|
||||
; We must slice the block found. Cut off space from the upper end, so we
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user