mirror of
https://github.com/byteworksinc/ORCALib.git
synced 2024-06-01 09:41:34 +00:00
CR -> LF
This commit is contained in:
parent
954c3a02b5
commit
578bda8439
49
assert.asm
Executable file → Normal file
49
assert.asm
Executable file → Normal file
|
@ -1 +1,48 @@
|
||||||
keep obj/assert
mcopy assert.macros
case on
****************************************************************
*
* Assert - Condition assertion macro
*
* This code implements the subroutines needed to support the
* standard C library assert.
*
* October 1991
* Mike Westerfield
*
* Copyright 1991
* Byte Works, Inc.
*
****************************************************************
*
Assert start dummy routine
end
****************************************************************
*
* void __assert (char *f, int l)
*
* Inputs:
* f - pointer to the file name
* l - line number
*
****************************************************************
*
__assert start
csubroutine (4:f,2:l,4:s),0
ph4 s
ph2 l
ph4 f
ph4 #msg
ph4 >stderr
jsl fprintf
jsl abort
creturn
msg dc c'Assertion failed: file %s, line %d; assertion: %s',i1'10,0'
end
|
keep obj/assert
|
||||||
|
mcopy assert.macros
|
||||||
|
case on
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* Assert - Condition assertion macro
|
||||||
|
*
|
||||||
|
* This code implements the subroutines needed to support the
|
||||||
|
* standard C library assert.
|
||||||
|
*
|
||||||
|
* October 1991
|
||||||
|
* Mike Westerfield
|
||||||
|
*
|
||||||
|
* Copyright 1991
|
||||||
|
* Byte Works, Inc.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
Assert start dummy routine
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void __assert (char *f, int l)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* f - pointer to the file name
|
||||||
|
* l - line number
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
__assert start
|
||||||
|
|
||||||
|
csubroutine (4:f,2:l,4:s),0
|
||||||
|
|
||||||
|
ph4 s
|
||||||
|
ph2 l
|
||||||
|
ph4 f
|
||||||
|
ph4 #msg
|
||||||
|
ph4 >stderr
|
||||||
|
jsl fprintf
|
||||||
|
jsl abort
|
||||||
|
|
||||||
|
creturn
|
||||||
|
|
||||||
|
msg dc c'Assertion failed: file %s, line %d; assertion: %s',i1'10,0'
|
||||||
|
end
|
||||||
|
|
172
assert.macros
Executable file → Normal file
172
assert.macros
Executable file → Normal file
|
@ -1 +1,171 @@
|
||||||
MACRO
&LAB PH2 &N1
LCLC &C
&LAB ANOP
&C AMID &N1,1,1
AIF "&C"="#",.D
AIF S:LONGA=1,.A
REP #%00100000
.A
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.G
&N1 AMID &N1,2,L:&N1-2
LDA (&N1)
PHA
AGO .E
.B
LDA &N1
PHA
AGO .E
.D
&N1 AMID &N1,2,L:&N1-1
PEA &N1
AGO .F
.E
AIF S:LONGA=1,.F
SEP #%00100000
.F
MEXIT
.G
MNOTE "Missing closing '}'",16
MEND
MACRO
&LAB PH4 &N1
LCLC &C
&LAB ANOP
&C AMID &N1,1,1
AIF "&C"="#",.D
AIF S:LONGA=1,.A
REP #%00100000
.A
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.G
&N1 AMID &N1,2,L:&N1-2
LDY #2
LDA (&N1),Y
PHA
LDA (&N1)
PHA
AGO .E
.B
AIF "&C"<>"[",.C
LDY #2
LDA &N1,Y
PHA
LDA &N1
PHA
AGO .E
.C
LDA &N1+2
PHA
LDA &N1
PHA
AGO .E
.D
&N1 AMID &N1,2,L:&N1-1
PEA +(&N1)|-16
PEA &N1
AGO .F
.E
AIF S:LONGA=1,.F
SEP #%00100000
.F
MEXIT
.G
MNOTE "Missing closing '}'",16
MEND
MACRO
&lab csubroutine &parms,&work
&lab anop
aif c:&work,.a
lclc &work
&work setc 0
.a
gbla &totallen
gbla &worklen
&worklen seta &work
&totallen seta 0
aif c:&parms=0,.e
lclc &len
lclc &p
lcla &i
&i seta 1
.b
&p setc &parms(&i)
&len amid &p,2,1
aif "&len"=":",.c
&len amid &p,1,2
&p amid &p,4,l:&p-3
ago .d
.c
&len amid &p,1,1
&p amid &p,3,l:&p-2
.d
&p equ &totallen+4+&work
&totallen seta &totallen+&len
&i seta &i+1
aif &i<=c:&parms,^b
.e
tsc
aif &work=0,.f
sec
sbc #&work
tcs
.f
phd
tcd
mend
MACRO
&lab creturn &r
&lab anop
lclc &len
aif c:&r,.a
lclc &r
&r setc 0
&len setc 0
ago .h
.a
&len amid &r,2,1
aif "&len"=":",.b
&len amid &r,1,2
&r amid &r,4,l:&r-3
ago .c
.b
&len amid &r,1,1
&r amid &r,3,l:&r-2
.c
aif &len<>2,.d
ldy &r
ago .h
.d
aif &len<>4,.e
ldx &r+2
ldy &r
ago .h
.e
aif &len<>10,.g
ldy #&r
ldx #^&r
ago .h
.g
mnote 'Not a valid return length',16
mexit
.h
aif &totallen=0,.i
lda &worklen+2
sta &worklen+&totallen+2
lda &worklen+1
sta &worklen+&totallen+1
.i
pld
tsc
clc
adc #&worklen+&totallen
tcs
aif &len=0,.j
tya
.j
rtl
mend
|
MACRO
|
||||||
|
&LAB PH2 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"="#",.D
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.G
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
LDA (&N1)
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.B
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.D
|
||||||
|
&N1 AMID &N1,2,L:&N1-1
|
||||||
|
PEA &N1
|
||||||
|
AGO .F
|
||||||
|
.E
|
||||||
|
AIF S:LONGA=1,.F
|
||||||
|
SEP #%00100000
|
||||||
|
.F
|
||||||
|
MEXIT
|
||||||
|
.G
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB PH4 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"="#",.D
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.G
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
LDY #2
|
||||||
|
LDA (&N1),Y
|
||||||
|
PHA
|
||||||
|
LDA (&N1)
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.B
|
||||||
|
AIF "&C"<>"[",.C
|
||||||
|
LDY #2
|
||||||
|
LDA &N1,Y
|
||||||
|
PHA
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.C
|
||||||
|
LDA &N1+2
|
||||||
|
PHA
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.D
|
||||||
|
&N1 AMID &N1,2,L:&N1-1
|
||||||
|
PEA +(&N1)|-16
|
||||||
|
PEA &N1
|
||||||
|
AGO .F
|
||||||
|
.E
|
||||||
|
AIF S:LONGA=1,.F
|
||||||
|
SEP #%00100000
|
||||||
|
.F
|
||||||
|
MEXIT
|
||||||
|
.G
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&lab csubroutine &parms,&work
|
||||||
|
&lab anop
|
||||||
|
aif c:&work,.a
|
||||||
|
lclc &work
|
||||||
|
&work setc 0
|
||||||
|
.a
|
||||||
|
gbla &totallen
|
||||||
|
gbla &worklen
|
||||||
|
&worklen seta &work
|
||||||
|
&totallen seta 0
|
||||||
|
aif c:&parms=0,.e
|
||||||
|
lclc &len
|
||||||
|
lclc &p
|
||||||
|
lcla &i
|
||||||
|
&i seta 1
|
||||||
|
.b
|
||||||
|
&p setc &parms(&i)
|
||||||
|
&len amid &p,2,1
|
||||||
|
aif "&len"=":",.c
|
||||||
|
&len amid &p,1,2
|
||||||
|
&p amid &p,4,l:&p-3
|
||||||
|
ago .d
|
||||||
|
.c
|
||||||
|
&len amid &p,1,1
|
||||||
|
&p amid &p,3,l:&p-2
|
||||||
|
.d
|
||||||
|
&p equ &totallen+4+&work
|
||||||
|
&totallen seta &totallen+&len
|
||||||
|
&i seta &i+1
|
||||||
|
aif &i<=c:&parms,^b
|
||||||
|
.e
|
||||||
|
tsc
|
||||||
|
aif &work=0,.f
|
||||||
|
sec
|
||||||
|
sbc #&work
|
||||||
|
tcs
|
||||||
|
.f
|
||||||
|
phd
|
||||||
|
tcd
|
||||||
|
mend
|
||||||
|
MACRO
|
||||||
|
&lab creturn &r
|
||||||
|
&lab anop
|
||||||
|
lclc &len
|
||||||
|
aif c:&r,.a
|
||||||
|
lclc &r
|
||||||
|
&r setc 0
|
||||||
|
&len setc 0
|
||||||
|
ago .h
|
||||||
|
.a
|
||||||
|
&len amid &r,2,1
|
||||||
|
aif "&len"=":",.b
|
||||||
|
&len amid &r,1,2
|
||||||
|
&r amid &r,4,l:&r-3
|
||||||
|
ago .c
|
||||||
|
.b
|
||||||
|
&len amid &r,1,1
|
||||||
|
&r amid &r,3,l:&r-2
|
||||||
|
.c
|
||||||
|
aif &len<>2,.d
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.d
|
||||||
|
aif &len<>4,.e
|
||||||
|
ldx &r+2
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.e
|
||||||
|
aif &len<>10,.g
|
||||||
|
ldy #&r
|
||||||
|
ldx #^&r
|
||||||
|
ago .h
|
||||||
|
.g
|
||||||
|
mnote 'Not a valid return length',16
|
||||||
|
mexit
|
||||||
|
.h
|
||||||
|
aif &totallen=0,.i
|
||||||
|
lda &worklen+2
|
||||||
|
sta &worklen+&totallen+2
|
||||||
|
lda &worklen+1
|
||||||
|
sta &worklen+&totallen+1
|
||||||
|
.i
|
||||||
|
pld
|
||||||
|
tsc
|
||||||
|
clc
|
||||||
|
adc #&worklen+&totallen
|
||||||
|
tcs
|
||||||
|
aif &len=0,.j
|
||||||
|
tya
|
||||||
|
.j
|
||||||
|
rtl
|
||||||
|
mend
|
||||||
|
|
32
backup
Executable file → Normal file
32
backup
Executable file → Normal file
|
@ -1 +1,31 @@
|
||||||
if "{#}" != "1"
echo Form: backup [day]
exit 65535
end
set dest /library/mike/{1}/ORCALib
set list make backup smac equates.asm
set list {list} assert.asm assert.macros
set list {list} cc.asm cc.macros
set list {list} ctype.asm
set list {list} fcntl.asm fcntl.macros
set list {list} orca.asm orca.macros
set list {list} setjmp.asm
set list {list} signal.asm signal.macros
set list {list} ctype.asm
set list {list} stdio.asm stdio.macros
set list {list} stdlib.asm stdlib.macros
set list {list} string.asm string.macros
set list {list} time.asm time.macros
set list {list} toolglue.asm toolglue.macros
set list {list} vars.asm vars.macros
unset exit
create {dest} >.null >&.null
for i in {list}
newer {dest}/{i} {i}
if {Status} != 0
copy -c {i} {dest}/{i}
end
end
|
if "{#}" != "1"
|
||||||
|
echo Form: backup [day]
|
||||||
|
exit 65535
|
||||||
|
end
|
||||||
|
|
||||||
|
set dest /library/mike/{1}/ORCALib
|
||||||
|
|
||||||
|
set list make backup smac equates.asm
|
||||||
|
set list {list} assert.asm assert.macros
|
||||||
|
set list {list} cc.asm cc.macros
|
||||||
|
set list {list} ctype.asm
|
||||||
|
set list {list} fcntl.asm fcntl.macros
|
||||||
|
set list {list} orca.asm orca.macros
|
||||||
|
set list {list} setjmp.asm
|
||||||
|
set list {list} signal.asm signal.macros
|
||||||
|
set list {list} ctype.asm
|
||||||
|
set list {list} stdio.asm stdio.macros
|
||||||
|
set list {list} stdlib.asm stdlib.macros
|
||||||
|
set list {list} string.asm string.macros
|
||||||
|
set list {list} time.asm time.macros
|
||||||
|
set list {list} toolglue.asm toolglue.macros
|
||||||
|
set list {list} vars.asm vars.macros
|
||||||
|
|
||||||
|
unset exit
|
||||||
|
create {dest} >.null >&.null
|
||||||
|
for i in {list}
|
||||||
|
newer {dest}/{i} {i}
|
||||||
|
if {Status} != 0
|
||||||
|
copy -c {i} {dest}/{i}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
1021
cc.asm
Executable file → Normal file
1021
cc.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
542
cc.macros
Executable file → Normal file
542
cc.macros
Executable file → Normal file
File diff suppressed because one or more lines are too long
1091
ctype.asm
Executable file → Normal file
1091
ctype.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
114
equates.asm
Executable file → Normal file
114
equates.asm
Executable file → Normal file
|
@ -1 +1,113 @@
|
||||||
****************************************************************
*
* This file contains constant values defined in the C interfaces
* that are also used in the assembly language portion of the
* libraries.
*
****************************************************************
;
; error numbers
;
EDOM gequ 1 domain error
ERANGE gequ 2 # too large, too small, or illegal
ENOMEM gequ 3 Not enough memory
ENOENT gequ 4 No such file or directory
EIO gequ 5 I/O error
EINVAL gequ 6 Invalid argument
EBADF gequ 7 bad file descriptor
EMFILE gequ 8 too many files are open
EACCES gequ 9 access bits prevent the operation
EEXIST gequ 10 the file exists
ENOSPC gequ 11 the file is too large
;
; masks for the __ctype array
;
_digit gequ $01 ['0'..'9']
_upper gequ $02 ['A'..'Z']
_lower gequ $04 ['a'..'z']
_control gequ $08 [chr(0)..chr(31),chr(127)]
_punctuation gequ $10 [' ','!'..'/',':'..'@','['..'`','{'..'~']
_space gequ $20 [chr(9)..chr(13),' ']
_hex gequ $40 ['0'..'9','a'..'f','A'..'F']
_print gequ $80 [' '..'~']
;
; masks for the __ctype2 array
;
_csym gequ $01 ['0'..'9','A'..'Z','a'..'z','_']
_csymf gequ $02 ['A'..'Z','a'..'z'.'_']
_octal gequ $04 ['0'..'7']
;
; signal numbers
;
SIGABRT gequ 1
SIGFPE gequ 2
SIGILL gequ 3
SIGINT gequ 4
SIGSEGV gequ 5
SIGTERM gequ 6
;
; The FILE record
;
! flags
! -----
_IOFBF gequ $0001 full buffering
_IONBF gequ $0002 no buffering
_IOLBF gequ $0004 flush when a \n is written
_IOREAD gequ $0008 currently reading
_IOWRT gequ $0010 currently writing
_IORW gequ $0020 read/write enabled
_IOMYBUF gequ $0040 buffer was allocated by stdio
_IOEOF gequ $0080 has an EOF been found?
_IOERR gequ $0100 has an error occurred?
_IOTEXT gequ $0200 is this file a text file?
_IOTEMPFILE gequ $0400 was this file created by tmpfile()?
! record structure
! ----------------
FILE_next gequ 0 disp to next pointer (must stay 0!)
FILE_ptr gequ FILE_next+4 next location to write to
FILE_base gequ FILE_ptr+4 first byte of the buffer
FILE_end gequ FILE_base+4 end of the file buffer
FILE_size gequ FILE_end+4 size of the file buffer
FILE_cnt gequ FILE_size+4 # chars that can be read/writen to buffer
FILE_pbk gequ FILE_cnt+4 put back character
FILE_flag gequ FILE_pbk+4 buffer flags
FILE_file gequ FILE_flag+2 GS/OS file ID
sizeofFILE gequ FILE_file+2 size of the record
BUFSIZ gequ 1024 default file buffer size
_LBUFSIZ gequ 255 line buffer size
L_tmpnam gequ 9 size of a temp name
TMP_MAX gequ 10000 # of uniq temp names
;
; Seek codes for fseek
;
SEEK_SET gequ 0 seek from start of file
SEEK_CUR gequ 1 seek from current position
SEEK_END gequ 2 seek from end of file
;
; Values for fcntl.h
;
OPEN_MAX gequ 30 files in the file array
F_DUPFD gequ 1 dup file flag (fcntl)
O_RDONLY gequ $0001 file is read only
O_WRONLY gequ $0002 file is write only
O_RDWR gequ $0004 file is read/write
O_NDELAY gequ $0008 not used
O_APPEND gequ $0010 append to file on all writes
O_CREAT gequ $0020 create a new file if needed
O_TRUNC gequ $0040 erase old file
O_EXCL gequ $0080 don't create a new file
O_BINARY gequ $0100 file is binary
;
; Misc.
;
EOF gequ -1 end of file character
stdinID gequ -1 standard in file ID
stdoutID gequ -2 standard out file ID
stderrID gequ -3 error out file ID
|
****************************************************************
|
||||||
|
*
|
||||||
|
* This file contains constant values defined in the C interfaces
|
||||||
|
* that are also used in the assembly language portion of the
|
||||||
|
* libraries.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
;
|
||||||
|
; error numbers
|
||||||
|
;
|
||||||
|
EDOM gequ 1 domain error
|
||||||
|
ERANGE gequ 2 # too large, too small, or illegal
|
||||||
|
ENOMEM gequ 3 Not enough memory
|
||||||
|
ENOENT gequ 4 No such file or directory
|
||||||
|
EIO gequ 5 I/O error
|
||||||
|
EINVAL gequ 6 Invalid argument
|
||||||
|
EBADF gequ 7 bad file descriptor
|
||||||
|
EMFILE gequ 8 too many files are open
|
||||||
|
EACCES gequ 9 access bits prevent the operation
|
||||||
|
EEXIST gequ 10 the file exists
|
||||||
|
ENOSPC gequ 11 the file is too large
|
||||||
|
;
|
||||||
|
; masks for the __ctype array
|
||||||
|
;
|
||||||
|
_digit gequ $01 ['0'..'9']
|
||||||
|
_upper gequ $02 ['A'..'Z']
|
||||||
|
_lower gequ $04 ['a'..'z']
|
||||||
|
_control gequ $08 [chr(0)..chr(31),chr(127)]
|
||||||
|
_punctuation gequ $10 [' ','!'..'/',':'..'@','['..'`','{'..'~']
|
||||||
|
_space gequ $20 [chr(9)..chr(13),' ']
|
||||||
|
_hex gequ $40 ['0'..'9','a'..'f','A'..'F']
|
||||||
|
_print gequ $80 [' '..'~']
|
||||||
|
;
|
||||||
|
; masks for the __ctype2 array
|
||||||
|
;
|
||||||
|
_csym gequ $01 ['0'..'9','A'..'Z','a'..'z','_']
|
||||||
|
_csymf gequ $02 ['A'..'Z','a'..'z'.'_']
|
||||||
|
_octal gequ $04 ['0'..'7']
|
||||||
|
;
|
||||||
|
; signal numbers
|
||||||
|
;
|
||||||
|
SIGABRT gequ 1
|
||||||
|
SIGFPE gequ 2
|
||||||
|
SIGILL gequ 3
|
||||||
|
SIGINT gequ 4
|
||||||
|
SIGSEGV gequ 5
|
||||||
|
SIGTERM gequ 6
|
||||||
|
;
|
||||||
|
; The FILE record
|
||||||
|
;
|
||||||
|
! flags
|
||||||
|
! -----
|
||||||
|
_IOFBF gequ $0001 full buffering
|
||||||
|
_IONBF gequ $0002 no buffering
|
||||||
|
_IOLBF gequ $0004 flush when a \n is written
|
||||||
|
_IOREAD gequ $0008 currently reading
|
||||||
|
_IOWRT gequ $0010 currently writing
|
||||||
|
_IORW gequ $0020 read/write enabled
|
||||||
|
_IOMYBUF gequ $0040 buffer was allocated by stdio
|
||||||
|
_IOEOF gequ $0080 has an EOF been found?
|
||||||
|
_IOERR gequ $0100 has an error occurred?
|
||||||
|
_IOTEXT gequ $0200 is this file a text file?
|
||||||
|
_IOTEMPFILE gequ $0400 was this file created by tmpfile()?
|
||||||
|
|
||||||
|
! record structure
|
||||||
|
! ----------------
|
||||||
|
FILE_next gequ 0 disp to next pointer (must stay 0!)
|
||||||
|
FILE_ptr gequ FILE_next+4 next location to write to
|
||||||
|
FILE_base gequ FILE_ptr+4 first byte of the buffer
|
||||||
|
FILE_end gequ FILE_base+4 end of the file buffer
|
||||||
|
FILE_size gequ FILE_end+4 size of the file buffer
|
||||||
|
FILE_cnt gequ FILE_size+4 # chars that can be read/writen to buffer
|
||||||
|
FILE_pbk gequ FILE_cnt+4 put back character
|
||||||
|
FILE_flag gequ FILE_pbk+4 buffer flags
|
||||||
|
FILE_file gequ FILE_flag+2 GS/OS file ID
|
||||||
|
|
||||||
|
sizeofFILE gequ FILE_file+2 size of the record
|
||||||
|
|
||||||
|
BUFSIZ gequ 1024 default file buffer size
|
||||||
|
_LBUFSIZ gequ 255 line buffer size
|
||||||
|
|
||||||
|
L_tmpnam gequ 9 size of a temp name
|
||||||
|
TMP_MAX gequ 10000 # of uniq temp names
|
||||||
|
;
|
||||||
|
; Seek codes for fseek
|
||||||
|
;
|
||||||
|
SEEK_SET gequ 0 seek from start of file
|
||||||
|
SEEK_CUR gequ 1 seek from current position
|
||||||
|
SEEK_END gequ 2 seek from end of file
|
||||||
|
;
|
||||||
|
; Values for fcntl.h
|
||||||
|
;
|
||||||
|
OPEN_MAX gequ 30 files in the file array
|
||||||
|
|
||||||
|
F_DUPFD gequ 1 dup file flag (fcntl)
|
||||||
|
|
||||||
|
O_RDONLY gequ $0001 file is read only
|
||||||
|
O_WRONLY gequ $0002 file is write only
|
||||||
|
O_RDWR gequ $0004 file is read/write
|
||||||
|
O_NDELAY gequ $0008 not used
|
||||||
|
O_APPEND gequ $0010 append to file on all writes
|
||||||
|
O_CREAT gequ $0020 create a new file if needed
|
||||||
|
O_TRUNC gequ $0040 erase old file
|
||||||
|
O_EXCL gequ $0080 don't create a new file
|
||||||
|
O_BINARY gequ $0100 file is binary
|
||||||
|
;
|
||||||
|
; Misc.
|
||||||
|
;
|
||||||
|
EOF gequ -1 end of file character
|
||||||
|
|
||||||
|
stdinID gequ -1 standard in file ID
|
||||||
|
stdoutID gequ -2 standard out file ID
|
||||||
|
stderrID gequ -3 error out file ID
|
||||||
|
|
885
fcntl.asm
Executable file → Normal file
885
fcntl.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
509
fcntl.macros
Executable file → Normal file
509
fcntl.macros
Executable file → Normal file
File diff suppressed because one or more lines are too long
49
make
Executable file → Normal file
49
make
Executable file → Normal file
|
@ -1 +1,48 @@
|
||||||
unset exit
unset cc >&/work
unset cg >&/work
if {#} == 0
Newer obj/stdio.a stdio.asm equates.asm
if {Status} != 0
set exit on
echo assemble +e +t stdio.asm
assemble +e +t stdio.asm
unset exit
end
Newer obj/assert.a assert.asm
if {Status} != 0
set exit on
echo assemble +e +t assert.asm
assemble +e +t assert.asm
unset exit
end
for i in cc ctype string stdlib time setjmp orca fcntl vars toolglue signal
Newer obj/{i}.a {i}.asm
if {Status} != 0
set exit on
echo assemble +e +t {i}.asm
assemble +e +t {i}.asm
unset exit
end
end
else
set exit on
for i
assemble +e +t {i}.asm
end
end
echo delete orcalib
delete orcalib
set list vars.a assert.a cc.a setjmp.a ctype.a string.a stdlib.a
set list {list} time.a signal.a toolglue.a orca.a fcntl.a stdio.a
for i in {list}
echo makelib orcalib +obj/{i}
makelib orcalib +obj/{i}
end
set echo on
|
unset exit
|
||||||
|
unset cc >&/work
|
||||||
|
unset cg >&/work
|
||||||
|
|
||||||
|
if {#} == 0
|
||||||
|
Newer obj/stdio.a stdio.asm equates.asm
|
||||||
|
if {Status} != 0
|
||||||
|
set exit on
|
||||||
|
echo assemble +e +t stdio.asm
|
||||||
|
assemble +e +t stdio.asm
|
||||||
|
unset exit
|
||||||
|
end
|
||||||
|
|
||||||
|
Newer obj/assert.a assert.asm
|
||||||
|
if {Status} != 0
|
||||||
|
set exit on
|
||||||
|
echo assemble +e +t assert.asm
|
||||||
|
assemble +e +t assert.asm
|
||||||
|
unset exit
|
||||||
|
end
|
||||||
|
|
||||||
|
for i in cc ctype string stdlib time setjmp orca fcntl vars toolglue signal
|
||||||
|
Newer obj/{i}.a {i}.asm
|
||||||
|
if {Status} != 0
|
||||||
|
set exit on
|
||||||
|
echo assemble +e +t {i}.asm
|
||||||
|
assemble +e +t {i}.asm
|
||||||
|
unset exit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
set exit on
|
||||||
|
for i
|
||||||
|
assemble +e +t {i}.asm
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
echo delete orcalib
|
||||||
|
delete orcalib
|
||||||
|
|
||||||
|
set list vars.a assert.a cc.a setjmp.a ctype.a string.a stdlib.a
|
||||||
|
set list {list} time.a signal.a toolglue.a orca.a fcntl.a stdio.a
|
||||||
|
for i in {list}
|
||||||
|
echo makelib orcalib +obj/{i}
|
||||||
|
makelib orcalib +obj/{i}
|
||||||
|
end
|
||||||
|
|
||||||
|
set echo on
|
||||||
|
|
159
orca.asm
Executable file → Normal file
159
orca.asm
Executable file → Normal file
|
@ -1 +1,158 @@
|
||||||
keep obj/orca
mcopy orca.macros
case on
****************************************************************
*
* ORCA - ORCA/C specific libraries
*
* This code implements the tables and subroutines needed to
* support the ORCA/C library ORCA.
*
* March 1989
* Mike Westerfield
*
* Copyright 1989
* Byte Works, Inc.
*
****************************************************************
*
ORCA start dummy segment
end
****************************************************************
*
* char *commandline(void)
*
* Inputs:
* ~CommandLine - address of the command line
*
****************************************************************
*
commandline start
ldx #0
lda ~COMMANDLINE
ora ~COMMANDLINE+2
beq lb1
lda ~COMMANDLINE
ldx ~COMMANDLINE+2
clc
adc #8
bcc lb1
inx
lb1 rtl
end
****************************************************************
*
* void enddesk(void)
*
****************************************************************
*
enddesk start
jmp ~ENDDESK
end
****************************************************************
*
* void endgraph(void)
*
****************************************************************
*
endgraph start
jmp ~ENDGRAPH
end
****************************************************************
*
* char *shellid(void)
*
* Inputs:
* ~CommandLine - address of the command line
*
****************************************************************
*
shellid start
ldx #0 return NULL if there is no command line
lda >~COMMANDLINE
ora >~COMMANDLINE+2
bne lb1
rtl
lb1 lda >~COMMANDLINE+2
pha
lda >~COMMANDLINE
pha
phd
tsc
tcd
phb
phk
plb
ldy #6
lb2 lda [3],Y
sta id,Y
dey
dey
bpl lb2
plb
pld
pla
pla
lda #id
ldx #^id
rtl
id dc 8c' ',i1'0'
end
****************************************************************
*
* void startdesk(int width)
*
****************************************************************
*
startdesk start
jmp ~STARTDESK
end
****************************************************************
*
* void startgraph(int width)
*
****************************************************************
*
startgraph start
jmp ~STARTGRAPH
end
****************************************************************
*
* int toolerror(void)
*
****************************************************************
*
toolerror start
lda >~TOOLERROR
rtl
end
****************************************************************
*
* int userid(void)
*
****************************************************************
*
userid start
lda >~USER_ID
rtl
end
|
keep obj/orca
|
||||||
|
mcopy orca.macros
|
||||||
|
case on
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* ORCA - ORCA/C specific libraries
|
||||||
|
*
|
||||||
|
* This code implements the tables and subroutines needed to
|
||||||
|
* support the ORCA/C library ORCA.
|
||||||
|
*
|
||||||
|
* March 1989
|
||||||
|
* Mike Westerfield
|
||||||
|
*
|
||||||
|
* Copyright 1989
|
||||||
|
* Byte Works, Inc.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
ORCA start dummy segment
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* char *commandline(void)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* ~CommandLine - address of the command line
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
commandline start
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
lda ~COMMANDLINE
|
||||||
|
ora ~COMMANDLINE+2
|
||||||
|
beq lb1
|
||||||
|
|
||||||
|
lda ~COMMANDLINE
|
||||||
|
ldx ~COMMANDLINE+2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
bcc lb1
|
||||||
|
inx
|
||||||
|
lb1 rtl
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void enddesk(void)
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
enddesk start
|
||||||
|
|
||||||
|
jmp ~ENDDESK
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void endgraph(void)
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
endgraph start
|
||||||
|
|
||||||
|
jmp ~ENDGRAPH
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* char *shellid(void)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* ~CommandLine - address of the command line
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
shellid start
|
||||||
|
|
||||||
|
ldx #0 return NULL if there is no command line
|
||||||
|
lda >~COMMANDLINE
|
||||||
|
ora >~COMMANDLINE+2
|
||||||
|
bne lb1
|
||||||
|
rtl
|
||||||
|
|
||||||
|
lb1 lda >~COMMANDLINE+2
|
||||||
|
pha
|
||||||
|
lda >~COMMANDLINE
|
||||||
|
pha
|
||||||
|
phd
|
||||||
|
tsc
|
||||||
|
tcd
|
||||||
|
phb
|
||||||
|
phk
|
||||||
|
plb
|
||||||
|
ldy #6
|
||||||
|
lb2 lda [3],Y
|
||||||
|
sta id,Y
|
||||||
|
dey
|
||||||
|
dey
|
||||||
|
bpl lb2
|
||||||
|
plb
|
||||||
|
pld
|
||||||
|
pla
|
||||||
|
pla
|
||||||
|
lda #id
|
||||||
|
ldx #^id
|
||||||
|
rtl
|
||||||
|
|
||||||
|
id dc 8c' ',i1'0'
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void startdesk(int width)
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
startdesk start
|
||||||
|
|
||||||
|
jmp ~STARTDESK
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void startgraph(int width)
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
startgraph start
|
||||||
|
|
||||||
|
jmp ~STARTGRAPH
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* int toolerror(void)
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
toolerror start
|
||||||
|
|
||||||
|
lda >~TOOLERROR
|
||||||
|
rtl
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* int userid(void)
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
userid start
|
||||||
|
|
||||||
|
lda >~USER_ID
|
||||||
|
rtl
|
||||||
|
end
|
||||||
|
|
47
orca.macros
Executable file → Normal file
47
orca.macros
Executable file → Normal file
|
@ -1 +1,46 @@
|
||||||
MACRO
&LAB PH4 &N1
LCLC &C
&LAB ANOP
&C AMID &N1,1,1
AIF "&C"="#",.D
AIF S:LONGA=1,.A
REP #%00100000
.A
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.G
&N1 AMID &N1,2,L:&N1-2
LDY #2
LDA (&N1),Y
PHA
LDA (&N1)
PHA
AGO .E
.B
AIF "&C"<>"[",.C
LDY #2
LDA &N1,Y
PHA
LDA &N1
PHA
AGO .E
.C
LDA &N1+2
PHA
LDA &N1
PHA
AGO .E
.D
&N1 AMID &N1,2,L:&N1-1
PEA +(&N1)|-16
PEA &N1
AGO .F
.E
AIF S:LONGA=1,.F
SEP #%00100000
.F
MEXIT
.G
MNOTE "Missing closing '}'",16
MEND
|
MACRO
|
||||||
|
&LAB PH4 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"="#",.D
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.G
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
LDY #2
|
||||||
|
LDA (&N1),Y
|
||||||
|
PHA
|
||||||
|
LDA (&N1)
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.B
|
||||||
|
AIF "&C"<>"[",.C
|
||||||
|
LDY #2
|
||||||
|
LDA &N1,Y
|
||||||
|
PHA
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.C
|
||||||
|
LDA &N1+2
|
||||||
|
PHA
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.D
|
||||||
|
&N1 AMID &N1,2,L:&N1-1
|
||||||
|
PEA +(&N1)|-16
|
||||||
|
PEA &N1
|
||||||
|
AGO .F
|
||||||
|
.E
|
||||||
|
AIF S:LONGA=1,.F
|
||||||
|
SEP #%00100000
|
||||||
|
.F
|
||||||
|
MEXIT
|
||||||
|
.G
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
|
116
setjmp.asm
Executable file → Normal file
116
setjmp.asm
Executable file → Normal file
|
@ -1 +1,115 @@
|
||||||
keep obj/setjmp
case on
****************************************************************
*
* SetJmp - Set jump library
*
* This code implements the subroutines needed to support the
* standard C library SETJMP.
*
* January 1989
* Mike Westerfield
*
* Copyright 1989
* Byte Works, Inc.
*
****************************************************************
*
SetJmp start dummy segment
end
****************************************************************
*
* int setjmp(env)
* jmp_buf env;
*
* Inputs:
* env - pointer to the environment array
*
* Outputs:
* Returns 0.
*
****************************************************************
*
setjmp start
env equ 4 pointer to array
ret equ 1 return address
tsc set up addressing
phd
tcd
clc save the correct stack pointer
adc #4
sta [env]
ldy #2 save D
lda 1,S
sta [env],Y
ldy #4 save the return address
lda ret-1
sta [env],Y
iny
iny
lda ret+1
sta [env],Y
pld repair the stack
phb
plx
ply
pla
pla
phy
phx
plb
lda #0 return 0
rtl
end
****************************************************************
*
* void longjmp(env,status)
* jmp_buf env;
* int status;
*
* Inputs:
* env - pointer to the environment array
* status - status to return
*
****************************************************************
*
longjmp start
env equ 4 environment pointer
status equ 8 status to return
tsc set up the local stack frame
tcd
phb
phk
plb
ldx status get the status
bne lb1
inx
lb1 ldy #6 get the env record
lb2 lda [env],Y
sta lenv,Y
dey
dey
bpl lb2
plb
lda >stackPtr reset the stack pointer
tcs
lda >ret+2 reset the return address
sta 2,S
lda >ret
sta 0,S
lda >dp reset the dp
tcd
txa return the status
rtl
lenv anop local copy of *env
stackPtr ds 2
dp ds 2
ret ds 4
end
|
keep obj/setjmp
|
||||||
|
case on
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* SetJmp - Set jump library
|
||||||
|
*
|
||||||
|
* This code implements the subroutines needed to support the
|
||||||
|
* standard C library SETJMP.
|
||||||
|
*
|
||||||
|
* January 1989
|
||||||
|
* Mike Westerfield
|
||||||
|
*
|
||||||
|
* Copyright 1989
|
||||||
|
* Byte Works, Inc.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
SetJmp start dummy segment
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* int setjmp(env)
|
||||||
|
* jmp_buf env;
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* env - pointer to the environment array
|
||||||
|
*
|
||||||
|
* Outputs:
|
||||||
|
* Returns 0.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
setjmp start
|
||||||
|
env equ 4 pointer to array
|
||||||
|
ret equ 1 return address
|
||||||
|
|
||||||
|
tsc set up addressing
|
||||||
|
phd
|
||||||
|
tcd
|
||||||
|
clc save the correct stack pointer
|
||||||
|
adc #4
|
||||||
|
sta [env]
|
||||||
|
ldy #2 save D
|
||||||
|
lda 1,S
|
||||||
|
sta [env],Y
|
||||||
|
ldy #4 save the return address
|
||||||
|
lda ret-1
|
||||||
|
sta [env],Y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda ret+1
|
||||||
|
sta [env],Y
|
||||||
|
pld repair the stack
|
||||||
|
phb
|
||||||
|
plx
|
||||||
|
ply
|
||||||
|
pla
|
||||||
|
pla
|
||||||
|
phy
|
||||||
|
phx
|
||||||
|
plb
|
||||||
|
lda #0 return 0
|
||||||
|
rtl
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void longjmp(env,status)
|
||||||
|
* jmp_buf env;
|
||||||
|
* int status;
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* env - pointer to the environment array
|
||||||
|
* status - status to return
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
longjmp start
|
||||||
|
env equ 4 environment pointer
|
||||||
|
status equ 8 status to return
|
||||||
|
|
||||||
|
tsc set up the local stack frame
|
||||||
|
tcd
|
||||||
|
phb
|
||||||
|
phk
|
||||||
|
plb
|
||||||
|
ldx status get the status
|
||||||
|
bne lb1
|
||||||
|
inx
|
||||||
|
lb1 ldy #6 get the env record
|
||||||
|
lb2 lda [env],Y
|
||||||
|
sta lenv,Y
|
||||||
|
dey
|
||||||
|
dey
|
||||||
|
bpl lb2
|
||||||
|
plb
|
||||||
|
lda >stackPtr reset the stack pointer
|
||||||
|
tcs
|
||||||
|
lda >ret+2 reset the return address
|
||||||
|
sta 2,S
|
||||||
|
lda >ret
|
||||||
|
sta 0,S
|
||||||
|
lda >dp reset the dp
|
||||||
|
tcd
|
||||||
|
txa return the status
|
||||||
|
rtl
|
||||||
|
|
||||||
|
lenv anop local copy of *env
|
||||||
|
stackPtr ds 2
|
||||||
|
dp ds 2
|
||||||
|
ret ds 4
|
||||||
|
end
|
||||||
|
|
136
signal.asm
Executable file → Normal file
136
signal.asm
Executable file → Normal file
|
@ -1 +1,135 @@
|
||||||
keep obj/signal
mcopy signal.macros
case on
****************************************************************
*
* signal - Asyncronous event signal handler
*
* April 1990
* Mike Westerfield
*
* Copyright 1990
* Byte Works, Inc.
*
****************************************************************
*
SIGNAL start dummy segment
copy equates.asm
SIG_DFL gequ -3
SIG_IGN gequ -2
SIG_ERR gequ -1
SIGMAX gequ 6 maximum number of signals
end
****************************************************************
*
* void (*signal(int sig, void (*func) (int)))(int);
*
* Set the interupt handler
*
* Inputs:
* sig - signal number
* func - signal handler
*
* Returns:
* Pointer to the last signal handler; SIG_ERR if sig
* is out of range.
*
****************************************************************
*
signal start
using signalCommon
ptr equ 1 old sugnal handler
csubroutine (2:sig,4:func),4
lla ptr,SIG_ERR assume we will find an error
lda sig if (!sig in [1..6])
beq lb1
cmp #SIGMAX+1
blt lb2
lb1 lda #ERANGE errno = ERANGE
sta >errno
bra lb3
lb2 asl A get the old signal handler address
asl A
tax
lda >subABRT-4,X
sta ptr
lda >subABRT-2,X
sta ptr+2
lda func set the new signal handler address
sta >subABRT-4,X
lda func+2
sta >subABRT-2,X
lb3 creturn 4:ptr
end
****************************************************************
*
* int raise(int sig);
*
* Raise a signal.
*
* Inputs:
* sig - signal number
*
* Returns:
* 0 if successful, -1 if sig is out of range
*
****************************************************************
*
raise start
using signalCommon
val equ 1 value to return
csubroutine (2:sig),2
stz val no error
lda sig if (!sig in [1..6])
beq lb1
cmp #SIGMAX+1
blt lb2
lb1 lda #-1 val = -1
sta val
lda #ERANGE errno = ERANGE
sta >errno
bra lb3
lb2 asl A get the signal handler address
asl A
tax
lda >subABRT-4,X
tay
lda >subABRT-2,X
bmi lb3 skip if it is SIG_DFL or SIG_IGN
short M set up the call address
sta >jsl+3
long M
tya
sta >jsl+1
ph2 sig call the user signal handler
jsl jsl jsl
lb3 creturn 2:val
end
****************************************************************
*
* signalCommon - data area for the signal unit
*
****************************************************************
*
signalCommon privdata
subABRT dc a4'SIG_DFL'
subFPE dc a4'SIG_DFL'
subILL dc a4'SIG_DFL'
subINT dc a4'SIG_DFL'
subSEGV dc a4'SIG_DFL'
subTERM dc a4'SIG_DFL'
end
|
keep obj/signal
|
||||||
|
mcopy signal.macros
|
||||||
|
case on
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* signal - Asyncronous event signal handler
|
||||||
|
*
|
||||||
|
* April 1990
|
||||||
|
* Mike Westerfield
|
||||||
|
*
|
||||||
|
* Copyright 1990
|
||||||
|
* Byte Works, Inc.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
SIGNAL start dummy segment
|
||||||
|
copy equates.asm
|
||||||
|
SIG_DFL gequ -3
|
||||||
|
SIG_IGN gequ -2
|
||||||
|
SIG_ERR gequ -1
|
||||||
|
|
||||||
|
SIGMAX gequ 6 maximum number of signals
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* void (*signal(int sig, void (*func) (int)))(int);
|
||||||
|
*
|
||||||
|
* Set the interupt handler
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* sig - signal number
|
||||||
|
* func - signal handler
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* Pointer to the last signal handler; SIG_ERR if sig
|
||||||
|
* is out of range.
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
signal start
|
||||||
|
using signalCommon
|
||||||
|
ptr equ 1 old sugnal handler
|
||||||
|
|
||||||
|
csubroutine (2:sig,4:func),4
|
||||||
|
|
||||||
|
lla ptr,SIG_ERR assume we will find an error
|
||||||
|
lda sig if (!sig in [1..6])
|
||||||
|
beq lb1
|
||||||
|
cmp #SIGMAX+1
|
||||||
|
blt lb2
|
||||||
|
lb1 lda #ERANGE errno = ERANGE
|
||||||
|
sta >errno
|
||||||
|
bra lb3
|
||||||
|
|
||||||
|
lb2 asl A get the old signal handler address
|
||||||
|
asl A
|
||||||
|
tax
|
||||||
|
lda >subABRT-4,X
|
||||||
|
sta ptr
|
||||||
|
lda >subABRT-2,X
|
||||||
|
sta ptr+2
|
||||||
|
lda func set the new signal handler address
|
||||||
|
sta >subABRT-4,X
|
||||||
|
lda func+2
|
||||||
|
sta >subABRT-2,X
|
||||||
|
|
||||||
|
lb3 creturn 4:ptr
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* int raise(int sig);
|
||||||
|
*
|
||||||
|
* Raise a signal.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* sig - signal number
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 if successful, -1 if sig is out of range
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
raise start
|
||||||
|
using signalCommon
|
||||||
|
val equ 1 value to return
|
||||||
|
|
||||||
|
csubroutine (2:sig),2
|
||||||
|
|
||||||
|
stz val no error
|
||||||
|
lda sig if (!sig in [1..6])
|
||||||
|
beq lb1
|
||||||
|
cmp #SIGMAX+1
|
||||||
|
blt lb2
|
||||||
|
lb1 lda #-1 val = -1
|
||||||
|
sta val
|
||||||
|
lda #ERANGE errno = ERANGE
|
||||||
|
sta >errno
|
||||||
|
bra lb3
|
||||||
|
|
||||||
|
lb2 asl A get the signal handler address
|
||||||
|
asl A
|
||||||
|
tax
|
||||||
|
lda >subABRT-4,X
|
||||||
|
tay
|
||||||
|
lda >subABRT-2,X
|
||||||
|
bmi lb3 skip if it is SIG_DFL or SIG_IGN
|
||||||
|
short M set up the call address
|
||||||
|
sta >jsl+3
|
||||||
|
long M
|
||||||
|
tya
|
||||||
|
sta >jsl+1
|
||||||
|
ph2 sig call the user signal handler
|
||||||
|
jsl jsl jsl
|
||||||
|
|
||||||
|
lb3 creturn 2:val
|
||||||
|
end
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
* signalCommon - data area for the signal unit
|
||||||
|
*
|
||||||
|
****************************************************************
|
||||||
|
*
|
||||||
|
signalCommon privdata
|
||||||
|
|
||||||
|
subABRT dc a4'SIG_DFL'
|
||||||
|
subFPE dc a4'SIG_DFL'
|
||||||
|
subILL dc a4'SIG_DFL'
|
||||||
|
subINT dc a4'SIG_DFL'
|
||||||
|
subSEGV dc a4'SIG_DFL'
|
||||||
|
subTERM dc a4'SIG_DFL'
|
||||||
|
end
|
||||||
|
|
193
signal.macros
Executable file → Normal file
193
signal.macros
Executable file → Normal file
|
@ -1 +1,192 @@
|
||||||
MACRO
&lab csubroutine &parms,&work
&lab anop
aif c:&work,.a
lclc &work
&work setc 0
.a
gbla &totallen
gbla &worklen
&worklen seta &work
&totallen seta 0
aif c:&parms=0,.e
lclc &len
lclc &p
lcla &i
&i seta 1
.b
&p setc &parms(&i)
&len amid &p,2,1
aif "&len"=":",.c
&len amid &p,1,2
&p amid &p,4,l:&p-3
ago .d
.c
&len amid &p,1,1
&p amid &p,3,l:&p-2
.d
&p equ &totallen+4+&work
&totallen seta &totallen+&len
&i seta &i+1
aif &i<=c:&parms,^b
.e
tsc
aif &work=0,.f
sec
sbc #&work
tcs
.f
phd
tcd
mend
MACRO
&lab creturn &r
&lab anop
lclc &len
aif c:&r,.a
lclc &r
&r setc 0
&len setc 0
ago .h
.a
&len amid &r,2,1
aif "&len"=":",.b
&len amid &r,1,2
&r amid &r,4,l:&r-3
ago .c
.b
&len amid &r,1,1
&r amid &r,3,l:&r-2
.c
aif &len<>2,.d
ldy &r
ago .h
.d
aif &len<>4,.e
ldx &r+2
ldy &r
ago .h
.e
aif &len<>10,.g
ldy #&r
ldx #^&r
ago .h
.g
mnote 'Not a valid return length',16
mexit
.h
aif &totallen=0,.i
lda &worklen+2
sta &worklen+&totallen+2
lda &worklen+1
sta &worklen+&totallen+1
.i
pld
tsc
clc
adc #&worklen+&totallen
tcs
aif &len=0,.j
tya
.j
rtl
mend
MACRO
&LAB LLA &AD1,&AD2
&LAB ANOP
LCLA &L
LCLB &LA
AIF S:LONGA,.A
REP #%00100000
LONGA ON
&LA SETB 1
.A
LDA #&AD2
&L SETA C:&AD1
.B
STA &AD1(&L)
&L SETA &L-1
AIF &L,^B
LDA #^&AD2
&L SETA C:&AD1
.C
STA 2+&AD1(&L)
&L SETA &L-1
AIF &L,^C
AIF &LA=0,.D
SEP #%00100000
LONGA OFF
.D
MEND
MACRO
&LAB LONG &A,&B
LCLB &I
LCLB &M
&A AMID &A,1,1
&M SETB ("&A"="M").OR.("&A"="m")
&I SETB ("&A"="I").OR.("&A"="i")
AIF C:&B=0,.A
&B AMID &B,1,1
&M SETB ("&B"="M").OR.("&B"="m").OR.&M
&I SETB ("&B"="I").OR.("&B"="i").OR.&I
.A
&LAB REP #&M*32+&I*16
AIF .NOT.&M,.B
LONGA ON
.B
AIF .NOT.&I,.C
LONGI ON
.C
MEND
MACRO
&LAB PH2 &N1
LCLC &C
&LAB ANOP
&C AMID &N1,1,1
AIF "&C"="#",.D
AIF S:LONGA=1,.A
REP #%00100000
.A
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.G
&N1 AMID &N1,2,L:&N1-2
LDA (&N1)
PHA
AGO .E
.B
LDA &N1
PHA
AGO .E
.D
&N1 AMID &N1,2,L:&N1-1
PEA &N1
AGO .F
.E
AIF S:LONGA=1,.F
SEP #%00100000
.F
MEXIT
.G
MNOTE "Missing closing '}'",16
MEND
MACRO
&LAB SHORT &A,&B
LCLB &I
LCLB &M
&A AMID &A,1,1
&M SETB ("&A"="M").OR.("&A"="m")
&I SETB ("&A"="I").OR.("&A"="i")
AIF C:&B=0,.A
&B AMID &B,1,1
&M SETB ("&B"="M").OR.("&B"="m").OR.&M
&I SETB ("&B"="I").OR.("&B"="i").OR.&I
.A
&LAB SEP #&M*32+&I*16
AIF .NOT.&M,.B
LONGA OFF
.B
AIF .NOT.&I,.C
LONGI OFF
.C
MEND
|
MACRO
|
||||||
|
&lab csubroutine &parms,&work
|
||||||
|
&lab anop
|
||||||
|
aif c:&work,.a
|
||||||
|
lclc &work
|
||||||
|
&work setc 0
|
||||||
|
.a
|
||||||
|
gbla &totallen
|
||||||
|
gbla &worklen
|
||||||
|
&worklen seta &work
|
||||||
|
&totallen seta 0
|
||||||
|
aif c:&parms=0,.e
|
||||||
|
lclc &len
|
||||||
|
lclc &p
|
||||||
|
lcla &i
|
||||||
|
&i seta 1
|
||||||
|
.b
|
||||||
|
&p setc &parms(&i)
|
||||||
|
&len amid &p,2,1
|
||||||
|
aif "&len"=":",.c
|
||||||
|
&len amid &p,1,2
|
||||||
|
&p amid &p,4,l:&p-3
|
||||||
|
ago .d
|
||||||
|
.c
|
||||||
|
&len amid &p,1,1
|
||||||
|
&p amid &p,3,l:&p-2
|
||||||
|
.d
|
||||||
|
&p equ &totallen+4+&work
|
||||||
|
&totallen seta &totallen+&len
|
||||||
|
&i seta &i+1
|
||||||
|
aif &i<=c:&parms,^b
|
||||||
|
.e
|
||||||
|
tsc
|
||||||
|
aif &work=0,.f
|
||||||
|
sec
|
||||||
|
sbc #&work
|
||||||
|
tcs
|
||||||
|
.f
|
||||||
|
phd
|
||||||
|
tcd
|
||||||
|
mend
|
||||||
|
MACRO
|
||||||
|
&lab creturn &r
|
||||||
|
&lab anop
|
||||||
|
lclc &len
|
||||||
|
aif c:&r,.a
|
||||||
|
lclc &r
|
||||||
|
&r setc 0
|
||||||
|
&len setc 0
|
||||||
|
ago .h
|
||||||
|
.a
|
||||||
|
&len amid &r,2,1
|
||||||
|
aif "&len"=":",.b
|
||||||
|
&len amid &r,1,2
|
||||||
|
&r amid &r,4,l:&r-3
|
||||||
|
ago .c
|
||||||
|
.b
|
||||||
|
&len amid &r,1,1
|
||||||
|
&r amid &r,3,l:&r-2
|
||||||
|
.c
|
||||||
|
aif &len<>2,.d
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.d
|
||||||
|
aif &len<>4,.e
|
||||||
|
ldx &r+2
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.e
|
||||||
|
aif &len<>10,.g
|
||||||
|
ldy #&r
|
||||||
|
ldx #^&r
|
||||||
|
ago .h
|
||||||
|
.g
|
||||||
|
mnote 'Not a valid return length',16
|
||||||
|
mexit
|
||||||
|
.h
|
||||||
|
aif &totallen=0,.i
|
||||||
|
lda &worklen+2
|
||||||
|
sta &worklen+&totallen+2
|
||||||
|
lda &worklen+1
|
||||||
|
sta &worklen+&totallen+1
|
||||||
|
.i
|
||||||
|
pld
|
||||||
|
tsc
|
||||||
|
clc
|
||||||
|
adc #&worklen+&totallen
|
||||||
|
tcs
|
||||||
|
aif &len=0,.j
|
||||||
|
tya
|
||||||
|
.j
|
||||||
|
rtl
|
||||||
|
mend
|
||||||
|
MACRO
|
||||||
|
&LAB LLA &AD1,&AD2
|
||||||
|
&LAB ANOP
|
||||||
|
LCLA &L
|
||||||
|
LCLB &LA
|
||||||
|
AIF S:LONGA,.A
|
||||||
|
REP #%00100000
|
||||||
|
LONGA ON
|
||||||
|
&LA SETB 1
|
||||||
|
.A
|
||||||
|
LDA #&AD2
|
||||||
|
&L SETA C:&AD1
|
||||||
|
.B
|
||||||
|
STA &AD1(&L)
|
||||||
|
&L SETA &L-1
|
||||||
|
AIF &L,^B
|
||||||
|
LDA #^&AD2
|
||||||
|
&L SETA C:&AD1
|
||||||
|
.C
|
||||||
|
STA 2+&AD1(&L)
|
||||||
|
&L SETA &L-1
|
||||||
|
AIF &L,^C
|
||||||
|
AIF &LA=0,.D
|
||||||
|
SEP #%00100000
|
||||||
|
LONGA OFF
|
||||||
|
.D
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB LONG &A,&B
|
||||||
|
LCLB &I
|
||||||
|
LCLB &M
|
||||||
|
&A AMID &A,1,1
|
||||||
|
&M SETB ("&A"="M").OR.("&A"="m")
|
||||||
|
&I SETB ("&A"="I").OR.("&A"="i")
|
||||||
|
AIF C:&B=0,.A
|
||||||
|
&B AMID &B,1,1
|
||||||
|
&M SETB ("&B"="M").OR.("&B"="m").OR.&M
|
||||||
|
&I SETB ("&B"="I").OR.("&B"="i").OR.&I
|
||||||
|
.A
|
||||||
|
&LAB REP #&M*32+&I*16
|
||||||
|
AIF .NOT.&M,.B
|
||||||
|
LONGA ON
|
||||||
|
.B
|
||||||
|
AIF .NOT.&I,.C
|
||||||
|
LONGI ON
|
||||||
|
.C
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB PH2 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"="#",.D
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.G
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
LDA (&N1)
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.B
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.D
|
||||||
|
&N1 AMID &N1,2,L:&N1-1
|
||||||
|
PEA &N1
|
||||||
|
AGO .F
|
||||||
|
.E
|
||||||
|
AIF S:LONGA=1,.F
|
||||||
|
SEP #%00100000
|
||||||
|
.F
|
||||||
|
MEXIT
|
||||||
|
.G
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB SHORT &A,&B
|
||||||
|
LCLB &I
|
||||||
|
LCLB &M
|
||||||
|
&A AMID &A,1,1
|
||||||
|
&M SETB ("&A"="M").OR.("&A"="m")
|
||||||
|
&I SETB ("&A"="I").OR.("&A"="i")
|
||||||
|
AIF C:&B=0,.A
|
||||||
|
&B AMID &B,1,1
|
||||||
|
&M SETB ("&B"="M").OR.("&B"="m").OR.&M
|
||||||
|
&I SETB ("&B"="I").OR.("&B"="i").OR.&I
|
||||||
|
.A
|
||||||
|
&LAB SEP #&M*32+&I*16
|
||||||
|
AIF .NOT.&M,.B
|
||||||
|
LONGA OFF
|
||||||
|
.B
|
||||||
|
AIF .NOT.&I,.C
|
||||||
|
LONGI OFF
|
||||||
|
.C
|
||||||
|
MEND
|
||||||
|
|
111
smac
Executable file → Normal file
111
smac
Executable file → Normal file
|
@ -1 +1,110 @@
|
||||||
macro
&lab cstr &s
&lab dc c"&s",i1'0'
mend
MACRO
&LAB MOVE4 &F,&T
&LAB ~SETM
LDA 2+&F
STA 2+&T
LDA &F
STA &T
~RESTM
MEND
macro
&lab csubroutine &parms,&work
&lab anop
aif c:&work,.a
lclc &work
&work setc 0
.a
gbla &totallen
gbla &worklen
&worklen seta &work
&totallen seta 0
aif c:&parms=0,.e
lclc &len
lclc &p
lcla &i
&i seta 1
.b
&p setc &parms(&i)
&len amid &p,2,1
aif "&len"=":",.c
&len amid &p,1,2
&p amid &p,4,l:&p-3
ago .d
.c
&len amid &p,1,1
&p amid &p,3,l:&p-2
.d
&p equ &totallen+4+&work
&totallen seta &totallen+&len
&i seta &i+1
aif &i<=c:&parms,^b
.e
tsc
aif &work=0,.f
sec
sbc #&work
tcs
.f
phd
tcd
mend
macro
&lab creturn &r
&lab anop
lclc &len
aif c:&r,.a
lclc &r
&r setc 0
&len setc 0
ago .h
.a
&len amid &r,2,1
aif "&len"=":",.b
&len amid &r,1,2
&r amid &r,4,l:&r-3
ago .c
.b
&len amid &r,1,1
&r amid &r,3,l:&r-2
.c
aif &len<>2,.d
ldy &r
ago .h
.d
aif &len<>4,.e
ldx &r+2
ldy &r
ago .h
.e
aif &len<>10,.g
ldy #&r
ldx #^&r
ago .h
.g
mnote 'Not a valid return length',16
mexit
.h
aif &totallen=0,.i
lda &worklen+2
sta &worklen+&totallen+2
lda &worklen+1
sta &worklen+&totallen+1
.i
pld
tsc
clc
adc #&worklen+&totallen
tcs
aif &len=0,.j
tya
.j
rtl
mend
|
macro
|
||||||
|
&lab cstr &s
|
||||||
|
&lab dc c"&s",i1'0'
|
||||||
|
mend
|
||||||
|
|
||||||
|
MACRO
|
||||||
|
&LAB MOVE4 &F,&T
|
||||||
|
&LAB ~SETM
|
||||||
|
LDA 2+&F
|
||||||
|
STA 2+&T
|
||||||
|
LDA &F
|
||||||
|
STA &T
|
||||||
|
~RESTM
|
||||||
|
MEND
|
||||||
|
|
||||||
|
macro
|
||||||
|
&lab csubroutine &parms,&work
|
||||||
|
&lab anop
|
||||||
|
aif c:&work,.a
|
||||||
|
lclc &work
|
||||||
|
&work setc 0
|
||||||
|
.a
|
||||||
|
gbla &totallen
|
||||||
|
gbla &worklen
|
||||||
|
&worklen seta &work
|
||||||
|
&totallen seta 0
|
||||||
|
aif c:&parms=0,.e
|
||||||
|
lclc &len
|
||||||
|
lclc &p
|
||||||
|
lcla &i
|
||||||
|
&i seta 1
|
||||||
|
.b
|
||||||
|
&p setc &parms(&i)
|
||||||
|
&len amid &p,2,1
|
||||||
|
aif "&len"=":",.c
|
||||||
|
&len amid &p,1,2
|
||||||
|
&p amid &p,4,l:&p-3
|
||||||
|
ago .d
|
||||||
|
.c
|
||||||
|
&len amid &p,1,1
|
||||||
|
&p amid &p,3,l:&p-2
|
||||||
|
.d
|
||||||
|
&p equ &totallen+4+&work
|
||||||
|
&totallen seta &totallen+&len
|
||||||
|
&i seta &i+1
|
||||||
|
aif &i<=c:&parms,^b
|
||||||
|
.e
|
||||||
|
tsc
|
||||||
|
aif &work=0,.f
|
||||||
|
sec
|
||||||
|
sbc #&work
|
||||||
|
tcs
|
||||||
|
.f
|
||||||
|
phd
|
||||||
|
tcd
|
||||||
|
mend
|
||||||
|
|
||||||
|
|
||||||
|
macro
|
||||||
|
&lab creturn &r
|
||||||
|
&lab anop
|
||||||
|
lclc &len
|
||||||
|
aif c:&r,.a
|
||||||
|
lclc &r
|
||||||
|
&r setc 0
|
||||||
|
&len setc 0
|
||||||
|
ago .h
|
||||||
|
.a
|
||||||
|
&len amid &r,2,1
|
||||||
|
aif "&len"=":",.b
|
||||||
|
&len amid &r,1,2
|
||||||
|
&r amid &r,4,l:&r-3
|
||||||
|
ago .c
|
||||||
|
.b
|
||||||
|
&len amid &r,1,1
|
||||||
|
&r amid &r,3,l:&r-2
|
||||||
|
.c
|
||||||
|
aif &len<>2,.d
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.d
|
||||||
|
aif &len<>4,.e
|
||||||
|
ldx &r+2
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.e
|
||||||
|
aif &len<>10,.g
|
||||||
|
ldy #&r
|
||||||
|
ldx #^&r
|
||||||
|
ago .h
|
||||||
|
.g
|
||||||
|
mnote 'Not a valid return length',16
|
||||||
|
mexit
|
||||||
|
.h
|
||||||
|
aif &totallen=0,.i
|
||||||
|
lda &worklen+2
|
||||||
|
sta &worklen+&totallen+2
|
||||||
|
lda &worklen+1
|
||||||
|
sta &worklen+&totallen+1
|
||||||
|
.i
|
||||||
|
pld
|
||||||
|
tsc
|
||||||
|
clc
|
||||||
|
adc #&worklen+&totallen
|
||||||
|
tcs
|
||||||
|
aif &len=0,.j
|
||||||
|
tya
|
||||||
|
.j
|
||||||
|
rtl
|
||||||
|
mend
|
||||||
|
|
5238
stdio.asm
Executable file → Normal file
5238
stdio.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
778
stdio.macros
Executable file → Normal file
778
stdio.macros
Executable file → Normal file
File diff suppressed because one or more lines are too long
1050
stdlib.asm
Executable file → Normal file
1050
stdlib.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
588
stdlib.macros
Executable file → Normal file
588
stdlib.macros
Executable file → Normal file
File diff suppressed because one or more lines are too long
1788
string.asm
Executable file → Normal file
1788
string.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
558
string.macros
Executable file → Normal file
558
string.macros
Executable file → Normal file
File diff suppressed because one or more lines are too long
500
time.asm
Executable file → Normal file
500
time.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
563
time.macros
Executable file → Normal file
563
time.macros
Executable file → Normal file
File diff suppressed because one or more lines are too long
850
toolglue.asm
Executable file → Normal file
850
toolglue.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
374
toolglue.macros
Executable file → Normal file
374
toolglue.macros
Executable file → Normal file
|
@ -1 +1,373 @@
|
||||||
MACRO
&LAB LLA &AD1,&AD2
&LAB ANOP
LCLA &L
LCLB &LA
AIF S:LONGA,.A
REP #%00100000
LONGA ON
&LA SETB 1
.A
LDA #&AD2
&L SETA C:&AD1
.B
STA &AD1(&L)
&L SETA &L-1
AIF &L,^B
LDA #^&AD2
&L SETA C:&AD1
.C
STA 2+&AD1(&L)
&L SETA &L-1
AIF &L,^C
AIF &LA=0,.D
SEP #%00100000
LONGA OFF
.D
MEND
MACRO
&LAB PH2 &N1
LCLC &C
&LAB ANOP
&C AMID &N1,1,1
AIF "&C"="#",.D
AIF S:LONGA=1,.A
REP #%00100000
.A
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.G
&N1 AMID &N1,2,L:&N1-2
LDA (&N1)
PHA
AGO .E
.B
LDA &N1
PHA
AGO .E
.D
&N1 AMID &N1,2,L:&N1-1
PEA &N1
AGO .F
.E
AIF S:LONGA=1,.F
SEP #%00100000
.F
MEXIT
.G
MNOTE "Missing closing '}'",16
MEND
MACRO
&LAB PL2 &N1
LCLC &C
&LAB ANOP
AIF S:LONGA=1,.A
REP #%00100000
.A
&C AMID &N1,1,1
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.F
&N1 AMID &N1,2,L:&N1-2
PLA
STA (&N1)
AGO .D
.B
PLA
STA &N1
.D
AIF S:LONGA=1,.E
SEP #%00100000
.E
MEXIT
.F
MNOTE "Missing closing '}'",16
MEND
MACRO
&LAB _READTIMEHEX
&LAB LDX #$0D03
JSL $E10000
MEND
MACRO
&LAB _FWENTRY
&LAB LDX #$2403
JSL $E10000
MEND
MACRO
&LAB _GETMOUSECLAMP
&LAB LDX #$1D03
JSL $E10000
MEND
MACRO
&LAB _READMOUSE
&LAB LDX #$1703
JSL $E10000
MEND
MACRO
&LAB _GETABSCLAMP
&LAB LDX #$2B03
JSL $E10000
MEND
MACRO
&lab csubroutine &parms,&work
&lab anop
aif c:&work,.a
lclc &work
&work setc 0
.a
gbla &totallen
gbla &worklen
&worklen seta &work
&totallen seta 0
aif c:&parms=0,.e
lclc &len
lclc &p
lcla &i
&i seta 1
.b
&p setc &parms(&i)
&len amid &p,2,1
aif "&len"=":",.c
&len amid &p,1,2
&p amid &p,4,l:&p-3
ago .d
.c
&len amid &p,1,1
&p amid &p,3,l:&p-2
.d
&p equ &totallen+4+&work
&totallen seta &totallen+&len
&i seta &i+1
aif &i<=c:&parms,^b
.e
tsc
aif &work=0,.f
sec
sbc #&work
tcs
.f
phd
tcd
mend
MACRO
&lab creturn &r
&lab anop
lclc &len
aif c:&r,.a
lclc &r
&r setc 0
&len setc 0
ago .h
.a
&len amid &r,2,1
aif "&len"=":",.b
&len amid &r,1,2
&r amid &r,4,l:&r-3
ago .c
.b
&len amid &r,1,1
&r amid &r,3,l:&r-2
.c
aif &len<>2,.d
ldy &r
ago .h
.d
aif &len<>4,.e
ldx &r+2
ldy &r
ago .h
.e
aif &len<>10,.g
ldy #&r
ldx #^&r
ago .h
.g
mnote 'Not a valid return length',16
mexit
.h
aif &totallen=0,.i
lda &worklen+2
sta &worklen+&totallen+2
lda &worklen+1
sta &worklen+&totallen+1
.i
pld
tsc
clc
adc #&worklen+&totallen
tcs
aif &len=0,.j
tya
.j
rtl
mend
MACRO
&LAB PH4 &N1
LCLC &C
&LAB ANOP
&C AMID &N1,1,1
AIF "&C"="#",.D
AIF S:LONGA=1,.A
REP #%00100000
.A
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.G
&N1 AMID &N1,2,L:&N1-2
LDY #2
LDA (&N1),Y
PHA
LDA (&N1)
PHA
AGO .E
.B
AIF "&C"<>"[",.C
LDY #2
LDA &N1,Y
PHA
LDA &N1
PHA
AGO .E
.C
LDA &N1+2
PHA
LDA &N1
PHA
AGO .E
.D
&N1 AMID &N1,2,L:&N1-1
PEA +(&N1)|-16
PEA &N1
AGO .F
.E
AIF S:LONGA=1,.F
SEP #%00100000
.F
MEXIT
.G
MNOTE "Missing closing '}'",16
MEND
MACRO
&LAB PL4 &N1
LCLC &C
&LAB ANOP
AIF S:LONGA=1,.A
REP #%00100000
.A
&C AMID &N1,1,1
AIF "&C"<>"{",.B
&C AMID &N1,L:&N1,1
AIF "&C"<>"}",.F
&N1 AMID &N1,2,L:&N1-2
PLA
STA (&N1)
LDY #2
PLA
STA (&N1),Y
AGO .D
.B
AIF "&C"<>"[",.C
PLA
STA &N1
LDY #2
PLA
STA &N1,Y
AGO .D
.C
PLA
STA &N1
PLA
STA &N1+2
.D
AIF S:LONGA=1,.E
SEP #%00100000
.E
MEXIT
.F
MNOTE "Missing closing '}'",16
MEND
MACRO
&LAB _LONGDIVIDE
&LAB LDX #$0D0B
JSL $E10000
MEND
MACRO
&LAB _LONGMUL
&LAB LDX #$0C0B
JSL $E10000
MEND
MACRO
&LAB _SDIVIDE
&LAB LDX #$0A0B
JSL $E10000
MEND
MACRO
&LAB _UDIVIDE
&LAB LDX #$0B0B
JSL $E10000
MEND
MACRO
&LAB _INITIALLOAD
&LAB LDX #$0911
JSL $E10000
MEND
MACRO
&LAB _RESTART
&LAB LDX #$0A11
JSL $E10000
MEND
MACRO
&LAB _LOADSEGNAME
&LAB LDX #$0D11
JSL $E10000
MEND
MACRO
&LAB _UNLOADSEG
&LAB LDX #$0E11
JSL $E10000
MEND
MACRO
&LAB _GETLOC
&LAB LDX #$0C1A
JSL $E10000
MEND
MACRO
&LAB _GETERRGLOBALS
&LAB LDX #$0E0C
JSL $E10000
MEND
MACRO
&LAB _GETINGLOBALS
&LAB LDX #$0C0C
JSL $E10000
MEND
MACRO
&LAB _GETINPUTDEVICE
&LAB LDX #$120C
JSL $E10000
MEND
MACRO
&LAB _GETOUTGLOBALS
&LAB LDX #$0D0C
JSL $E10000
MEND
MACRO
&LAB _GETOUTPUTDEVICE
&LAB LDX #$130C
JSL $E10000
MEND
MACRO
&LAB _GETERRORDEVICE
&LAB LDX #$140C
JSL $E10000
MEND
MACRO
&LAB _INITIALLOAD2
&LAB LDX #$2011
JSL $E10000
MEND
MACRO
&lab _GetMSData
&lab ldx #$1F23
jsl $E10000
MEND
|
MACRO
|
||||||
|
&LAB LLA &AD1,&AD2
|
||||||
|
&LAB ANOP
|
||||||
|
LCLA &L
|
||||||
|
LCLB &LA
|
||||||
|
AIF S:LONGA,.A
|
||||||
|
REP #%00100000
|
||||||
|
LONGA ON
|
||||||
|
&LA SETB 1
|
||||||
|
.A
|
||||||
|
LDA #&AD2
|
||||||
|
&L SETA C:&AD1
|
||||||
|
.B
|
||||||
|
STA &AD1(&L)
|
||||||
|
&L SETA &L-1
|
||||||
|
AIF &L,^B
|
||||||
|
LDA #^&AD2
|
||||||
|
&L SETA C:&AD1
|
||||||
|
.C
|
||||||
|
STA 2+&AD1(&L)
|
||||||
|
&L SETA &L-1
|
||||||
|
AIF &L,^C
|
||||||
|
AIF &LA=0,.D
|
||||||
|
SEP #%00100000
|
||||||
|
LONGA OFF
|
||||||
|
.D
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB PH2 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"="#",.D
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.G
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
LDA (&N1)
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.B
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.D
|
||||||
|
&N1 AMID &N1,2,L:&N1-1
|
||||||
|
PEA &N1
|
||||||
|
AGO .F
|
||||||
|
.E
|
||||||
|
AIF S:LONGA=1,.F
|
||||||
|
SEP #%00100000
|
||||||
|
.F
|
||||||
|
MEXIT
|
||||||
|
.G
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB PL2 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.F
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
PLA
|
||||||
|
STA (&N1)
|
||||||
|
AGO .D
|
||||||
|
.B
|
||||||
|
PLA
|
||||||
|
STA &N1
|
||||||
|
.D
|
||||||
|
AIF S:LONGA=1,.E
|
||||||
|
SEP #%00100000
|
||||||
|
.E
|
||||||
|
MEXIT
|
||||||
|
.F
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _READTIMEHEX
|
||||||
|
&LAB LDX #$0D03
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _FWENTRY
|
||||||
|
&LAB LDX #$2403
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETMOUSECLAMP
|
||||||
|
&LAB LDX #$1D03
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _READMOUSE
|
||||||
|
&LAB LDX #$1703
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETABSCLAMP
|
||||||
|
&LAB LDX #$2B03
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&lab csubroutine &parms,&work
|
||||||
|
&lab anop
|
||||||
|
aif c:&work,.a
|
||||||
|
lclc &work
|
||||||
|
&work setc 0
|
||||||
|
.a
|
||||||
|
gbla &totallen
|
||||||
|
gbla &worklen
|
||||||
|
&worklen seta &work
|
||||||
|
&totallen seta 0
|
||||||
|
aif c:&parms=0,.e
|
||||||
|
lclc &len
|
||||||
|
lclc &p
|
||||||
|
lcla &i
|
||||||
|
&i seta 1
|
||||||
|
.b
|
||||||
|
&p setc &parms(&i)
|
||||||
|
&len amid &p,2,1
|
||||||
|
aif "&len"=":",.c
|
||||||
|
&len amid &p,1,2
|
||||||
|
&p amid &p,4,l:&p-3
|
||||||
|
ago .d
|
||||||
|
.c
|
||||||
|
&len amid &p,1,1
|
||||||
|
&p amid &p,3,l:&p-2
|
||||||
|
.d
|
||||||
|
&p equ &totallen+4+&work
|
||||||
|
&totallen seta &totallen+&len
|
||||||
|
&i seta &i+1
|
||||||
|
aif &i<=c:&parms,^b
|
||||||
|
.e
|
||||||
|
tsc
|
||||||
|
aif &work=0,.f
|
||||||
|
sec
|
||||||
|
sbc #&work
|
||||||
|
tcs
|
||||||
|
.f
|
||||||
|
phd
|
||||||
|
tcd
|
||||||
|
mend
|
||||||
|
MACRO
|
||||||
|
&lab creturn &r
|
||||||
|
&lab anop
|
||||||
|
lclc &len
|
||||||
|
aif c:&r,.a
|
||||||
|
lclc &r
|
||||||
|
&r setc 0
|
||||||
|
&len setc 0
|
||||||
|
ago .h
|
||||||
|
.a
|
||||||
|
&len amid &r,2,1
|
||||||
|
aif "&len"=":",.b
|
||||||
|
&len amid &r,1,2
|
||||||
|
&r amid &r,4,l:&r-3
|
||||||
|
ago .c
|
||||||
|
.b
|
||||||
|
&len amid &r,1,1
|
||||||
|
&r amid &r,3,l:&r-2
|
||||||
|
.c
|
||||||
|
aif &len<>2,.d
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.d
|
||||||
|
aif &len<>4,.e
|
||||||
|
ldx &r+2
|
||||||
|
ldy &r
|
||||||
|
ago .h
|
||||||
|
.e
|
||||||
|
aif &len<>10,.g
|
||||||
|
ldy #&r
|
||||||
|
ldx #^&r
|
||||||
|
ago .h
|
||||||
|
.g
|
||||||
|
mnote 'Not a valid return length',16
|
||||||
|
mexit
|
||||||
|
.h
|
||||||
|
aif &totallen=0,.i
|
||||||
|
lda &worklen+2
|
||||||
|
sta &worklen+&totallen+2
|
||||||
|
lda &worklen+1
|
||||||
|
sta &worklen+&totallen+1
|
||||||
|
.i
|
||||||
|
pld
|
||||||
|
tsc
|
||||||
|
clc
|
||||||
|
adc #&worklen+&totallen
|
||||||
|
tcs
|
||||||
|
aif &len=0,.j
|
||||||
|
tya
|
||||||
|
.j
|
||||||
|
rtl
|
||||||
|
mend
|
||||||
|
MACRO
|
||||||
|
&LAB PH4 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"="#",.D
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.G
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
LDY #2
|
||||||
|
LDA (&N1),Y
|
||||||
|
PHA
|
||||||
|
LDA (&N1)
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.B
|
||||||
|
AIF "&C"<>"[",.C
|
||||||
|
LDY #2
|
||||||
|
LDA &N1,Y
|
||||||
|
PHA
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.C
|
||||||
|
LDA &N1+2
|
||||||
|
PHA
|
||||||
|
LDA &N1
|
||||||
|
PHA
|
||||||
|
AGO .E
|
||||||
|
.D
|
||||||
|
&N1 AMID &N1,2,L:&N1-1
|
||||||
|
PEA +(&N1)|-16
|
||||||
|
PEA &N1
|
||||||
|
AGO .F
|
||||||
|
.E
|
||||||
|
AIF S:LONGA=1,.F
|
||||||
|
SEP #%00100000
|
||||||
|
.F
|
||||||
|
MEXIT
|
||||||
|
.G
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB PL4 &N1
|
||||||
|
LCLC &C
|
||||||
|
&LAB ANOP
|
||||||
|
AIF S:LONGA=1,.A
|
||||||
|
REP #%00100000
|
||||||
|
.A
|
||||||
|
&C AMID &N1,1,1
|
||||||
|
AIF "&C"<>"{",.B
|
||||||
|
&C AMID &N1,L:&N1,1
|
||||||
|
AIF "&C"<>"}",.F
|
||||||
|
&N1 AMID &N1,2,L:&N1-2
|
||||||
|
PLA
|
||||||
|
STA (&N1)
|
||||||
|
LDY #2
|
||||||
|
PLA
|
||||||
|
STA (&N1),Y
|
||||||
|
AGO .D
|
||||||
|
.B
|
||||||
|
AIF "&C"<>"[",.C
|
||||||
|
PLA
|
||||||
|
STA &N1
|
||||||
|
LDY #2
|
||||||
|
PLA
|
||||||
|
STA &N1,Y
|
||||||
|
AGO .D
|
||||||
|
.C
|
||||||
|
PLA
|
||||||
|
STA &N1
|
||||||
|
PLA
|
||||||
|
STA &N1+2
|
||||||
|
.D
|
||||||
|
AIF S:LONGA=1,.E
|
||||||
|
SEP #%00100000
|
||||||
|
.E
|
||||||
|
MEXIT
|
||||||
|
.F
|
||||||
|
MNOTE "Missing closing '}'",16
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _LONGDIVIDE
|
||||||
|
&LAB LDX #$0D0B
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _LONGMUL
|
||||||
|
&LAB LDX #$0C0B
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _SDIVIDE
|
||||||
|
&LAB LDX #$0A0B
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _UDIVIDE
|
||||||
|
&LAB LDX #$0B0B
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _INITIALLOAD
|
||||||
|
&LAB LDX #$0911
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _RESTART
|
||||||
|
&LAB LDX #$0A11
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _LOADSEGNAME
|
||||||
|
&LAB LDX #$0D11
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _UNLOADSEG
|
||||||
|
&LAB LDX #$0E11
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETLOC
|
||||||
|
&LAB LDX #$0C1A
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETERRGLOBALS
|
||||||
|
&LAB LDX #$0E0C
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETINGLOBALS
|
||||||
|
&LAB LDX #$0C0C
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETINPUTDEVICE
|
||||||
|
&LAB LDX #$120C
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETOUTGLOBALS
|
||||||
|
&LAB LDX #$0D0C
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETOUTPUTDEVICE
|
||||||
|
&LAB LDX #$130C
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _GETERRORDEVICE
|
||||||
|
&LAB LDX #$140C
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&LAB _INITIALLOAD2
|
||||||
|
&LAB LDX #$2011
|
||||||
|
JSL $E10000
|
||||||
|
MEND
|
||||||
|
MACRO
|
||||||
|
&lab _GetMSData
|
||||||
|
&lab ldx #$1F23
|
||||||
|
jsl $E10000
|
||||||
|
MEND
|
||||||
|
|
153
vars.asm
Executable file → Normal file
153
vars.asm
Executable file → Normal file
File diff suppressed because one or more lines are too long
28
vars.macros
Executable file → Normal file
28
vars.macros
Executable file → Normal file
|
@ -1 +1,27 @@
|
||||||
MACRO
&LAB LLA &AD1,&AD2
&LAB ANOP
LCLA &L
LCLB &LA
AIF S:LONGA,.A
REP #%00100000
LONGA ON
&LA SETB 1
.A
LDA #&AD2
&L SETA C:&AD1
.B
STA &AD1(&L)
&L SETA &L-1
AIF &L,^B
LDA #^&AD2
&L SETA C:&AD1
.C
STA 2+&AD1(&L)
&L SETA &L-1
AIF &L,^C
AIF &LA=0,.D
SEP #%00100000
LONGA OFF
.D
MEND
|
MACRO
|
||||||
|
&LAB LLA &AD1,&AD2
|
||||||
|
&LAB ANOP
|
||||||
|
LCLA &L
|
||||||
|
LCLB &LA
|
||||||
|
AIF S:LONGA,.A
|
||||||
|
REP #%00100000
|
||||||
|
LONGA ON
|
||||||
|
&LA SETB 1
|
||||||
|
.A
|
||||||
|
LDA #&AD2
|
||||||
|
&L SETA C:&AD1
|
||||||
|
.B
|
||||||
|
STA &AD1(&L)
|
||||||
|
&L SETA &L-1
|
||||||
|
AIF &L,^B
|
||||||
|
LDA #^&AD2
|
||||||
|
&L SETA C:&AD1
|
||||||
|
.C
|
||||||
|
STA 2+&AD1(&L)
|
||||||
|
&L SETA &L-1
|
||||||
|
AIF &L,^C
|
||||||
|
AIF &LA=0,.D
|
||||||
|
SEP #%00100000
|
||||||
|
LONGA OFF
|
||||||
|
.D
|
||||||
|
MEND
|
||||||
|
|
Loading…
Reference in New Issue
Block a user