Merge branch 'master' into coniopeek

This commit is contained in:
mrdudz
2023-07-08 15:23:42 +02:00
621 changed files with 17752 additions and 5798 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -41,7 +41,7 @@ _clock_getres:
enosys: lda #ENOSYS
; Set __errno
jmp __directerrno
jmp ___directerrno
;----------------------------------------------------------------------------
; timespec struct with tv_sec set to 1 second

View File

@@ -105,7 +105,7 @@ errexit:jsr incsp3 ; Preserves A
; set __errno
jmp __directerrno
jmp ___directerrno
; -------

View File

@@ -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

View File

@@ -7,4 +7,4 @@
__inviocb:
lda #<EINVAL
jmp __directerrno
jmp ___directerrno

View File

@@ -69,7 +69,8 @@ INSTALL:
lda #$34
sta PACTL
lda #JOY_ERR_OK
ldx #0
.assert JOY_ERR_OK = 0, error
tax
; rts ; Run into UNINSTALL instead
; ------------------------------------------------------------------------

View File

@@ -62,7 +62,8 @@ JOY_COUNT = 4 ; Number of joysticks we support
INSTALL:
lda #JOY_ERR_OK
ldx #0
.assert JOY_ERR_OK = 0, error
tax
; rts ; Run into UNINSTALL instead
; ------------------------------------------------------------------------

View File

@@ -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

View File

@@ -137,9 +137,10 @@ INSTALL:
ldx YPos+1
jsr CMOVEY
; Done, return zero (= MOUSE_ERR_OK)
; Done
ldx #$00
ldx #MOUSE_ERR_OK
.assert MOUSE_ERR_OK = 0, error
txa
rts

View File

@@ -268,9 +268,10 @@ INSTALL:
and #$0f
sta old_porta_vbi
; Done, return zero (= MOUSE_ERR_OK)
; Done
ldx #$00
ldx #MOUSE_ERR_OK
.assert MOUSE_ERR_OK = 0, error
txa
rts

View File

@@ -132,9 +132,10 @@ INSTALL:
ldx YPos+1
jsr CMOVEY
; Done, return zero (= MOUSE_ERR_OK)
; Done
ldx #$00
ldx #MOUSE_ERR_OK
.assert MOUSE_ERR_OK = 0, error
txa
rts

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -135,8 +135,8 @@ my_CIOV:
.code
invbaud:
lda #<SER_ERR_BAUD_UNAVAIL
ldx #>SER_ERR_BAUD_UNAVAIL
lda #SER_ERR_BAUD_UNAVAIL
ldx #0 ; return value is char
openerr:
rts
@@ -229,8 +229,9 @@ SER_OPEN:
jsr my_CIOV
bmi cioerr
lda #<SER_ERR_OK
tax ; A is zero
lda #SER_ERR_OK
.assert SER_ERR_OK = 0, error
tax
rts
inverr: jmp my___inviocb
@@ -240,8 +241,8 @@ cioerr:
jsr my_fddecusage ; decrement usage counter of fd as open failed
init_err:
ldx #0
lda #SER_ERR_INIT_FAILED
ldx #0 ; return value is char
rts
;---- open the device
@@ -313,8 +314,9 @@ SER_CLOSE:
stx rshand+1
inx
stx cm_run
@done: lda #<SER_ERR_OK
ldx #>SER_ERR_OK
@done: lda #SER_ERR_OK
.assert SER_ERR_OK = 0, error
tax
rts
;----------------------------------------------------------------------------
@@ -365,16 +367,16 @@ SER_GET:
rts
@nix_da:lda #SER_ERR_NO_DATA
ldx #0
ldx #0 ; return value is char
rts
ser_error:
lda #SER_ERR_OVERFLOW ; there is no large selection of serial error codes... :-/
ldx #0
ldx #0 ; return value is char
rts
ni_err: lda #SER_ERR_NOT_OPEN
ldx #0
ldx #0 ; return value is char
rts
;----------------------------------------------------------------------------
@@ -427,8 +429,8 @@ SER_STATUS:
;
SER_IOCTL:
lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now
ldx #>SER_ERR_INV_IOCTL
lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now
ldx #0 ; return value is char
rts
;----------------------------------------------------------------------------
@@ -456,8 +458,8 @@ search: lda HATABS,y ; get device name
; R: device not found, return error
lda #<SER_ERR_NO_DEVICE
ldx #0
lda #SER_ERR_NO_DEVICE
ldx #0 ; return value is char
rts
; R: device found, initialize jump table into main program
@@ -554,8 +556,9 @@ found: lda ptr3
pla
sta ptr3
lda #<SER_ERR_OK
tax ; A is zero
lda #SER_ERR_OK
.assert SER_ERR_OK = 0, error
tax
rts

View 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
View 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

View File

@@ -96,4 +96,4 @@ done: jmp return0
; load errno code
enosys: lda #ENOSYS
drcter: jmp __directerrno
drcter: jmp ___directerrno

View File

@@ -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:

39
libsrc/atari/sound.s Normal file
View File

@@ -0,0 +1,39 @@
;
; Mariano Domínguez
; 2022-12-4
;
; this file provides an equivalent to the BASIC SOUND function
;
; void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume);
;
.include "atari.inc"
.export __sound
.import popa
.importzp tmp1,tmp2
; play sound, arguments: voice, pitch, distortion, volume
.proc __sound
sta tmp2 ;save volume
jsr popa ;get distortion
sta tmp1 ;save distortion
jsr popa ;get pitch
pha ;save in stack
jsr popa ;get voice
asl a ;adjust voice *2 for offset in x
tax
pla ;get pitch from stack
sta AUDF1,x ;store pitch
lda #0
sta AUDCTL
lda #3
sta SKCTL ;init sound
lda tmp1 ;get distortion
asl a ;ignore the high nibble
asl a
asl a
asl a
clc ;setup for adding volume
adc tmp2 ;add volume
sta AUDC1,x ;volume + distortion in control channel
rts
.endproc

View File

@@ -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