]> git.sur5r.net Git - cc65/commitdiff
Correcting doc adding telemon 2.4 primitives
authorjede <jede@oric.org>
Sun, 22 Jan 2017 20:41:49 +0000 (21:41 +0100)
committerjede <jede@oric.org>
Sun, 22 Jan 2017 20:41:49 +0000 (21:41 +0100)
13 files changed:
doc/telemon24.sgml [new file with mode: 0644]
doc/telemon30.sgml [new file with mode: 0644]
libsrc/telemon24/_scrsize.s [new file with mode: 0644]
libsrc/telemon24/crt0.s [new file with mode: 0644]
libsrc/telemon24/ctype.s [new file with mode: 0644]
libsrc/telemon24/hires.s [new file with mode: 0644]
libsrc/telemon24/mainargs.s [new file with mode: 0644]
libsrc/telemon24/oserrlist.s [new file with mode: 0644]
libsrc/telemon24/oserror.s [new file with mode: 0644]
libsrc/telemon24/print.s [new file with mode: 0644]
libsrc/telemon24/sysuname.s [new file with mode: 0644]
libsrc/telemon24/tapehdr.s [new file with mode: 0644]
libsrc/telemon24/write.s [new file with mode: 0644]

diff --git a/doc/telemon24.sgml b/doc/telemon24.sgml
new file mode 100644 (file)
index 0000000..b4e1bef
--- /dev/null
@@ -0,0 +1,42 @@
+<!doctype linuxdoc system>
+
+<article>
+
+<title>Oric Telemon 2.4 -specific information for cc65
+<author>
+
+<url url="mailto:greg.king5@verizon.net" name="Greg King">
+<date>2017-01-22
+
+<abstract>
+An overview over the Telemon 3.0 runtime system as it is implemented for the cc65 C
+compiler.
+</abstract>
+
+<!-- Table of contents -->
+<toc>
+
+
+
+<sect>License<p>
+
+This software is provided 'as-is', without any expressed or implied
+warranty.  In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+<enum>
+<item> The origin of this software must not be misrepresented; you must not
+       claim that you wrote the original software. If you use this software
+       in a product, an acknowledgment in the product documentation would be
+       appreciated but is not required.
+<item> Altered source versions must be plainly marked as such, and must not
+       be misrepresented as being the original software.
+<item> This notice may not be removed or altered from any source
+       distribution.
+</enum>
+
+</article>
diff --git a/doc/telemon30.sgml b/doc/telemon30.sgml
new file mode 100644 (file)
index 0000000..ce9e044
--- /dev/null
@@ -0,0 +1,177 @@
+<!doctype linuxdoc system>
+
+<article>
+
+<title>Oric Telestrat-specific information for cc65
+<author>
+<url url="mailto:jede@oric.org" name="Jede">,<newline>
+
+<date>2017-01-22
+
+<abstract>
+An overview over the Telestrat (telemon 3.0 : http://orix.oric.org) runtime system as it is implemented for the cc65 C
+compiler.
+</abstract>
+
+<!-- Table of contents -->
+<toc>
+
+<!-- Begin the document -->
+
+<sect>Overview<p>
+
+This file contains an overview of the Telestrat runtime system as it comes with the
+cc65 C compiler. It describes the memory layout, Telemon3.0-specific header files,
+available drivers, and any pitfalls specific to that platform.
+
+Please note that Telemon3.0-specific functions are just mentioned here, they are
+described in detail in the separate <url url="funcref.html" name="function
+reference">. Even functions marked as "platform dependent" may be available on
+more than one platform. Please see the function reference for more
+information.
+
+
+
+<sect>Binary format<p>
+
+The standard binary output format generated by the linker for the Telemon 3.0 target
+is a machine language program with a 20 bytes header described here : http://orix.oric.org/doku.php?id=orix:header
+
+
+
+<sect>Memory layout<p>
+
+In the standard setup, cc65-generated programs use the memory from
+&dollar;0801 to &dollar;9800; so, nearly 37K of memory (including the stack) is
+available. ROM calls are possible without further precautions.
+
+
+
+Special locations:
+
+<descrip>
+  <tag/Stack/
+  The C runtime stack is located at &dollar;97FF (or &dollar;B3FF), and grows
+  downwards.
+
+  <tag/Heap/
+  The C heap is located at the end of the program, and grows towards the C
+  runtime stack.
+
+</descrip><p>
+
+
+
+<sect>Platform-specific header files<p>
+
+Programs containing Telemon 3.0 -specific code may use the <tt/telemon.h/ header file.
+
+
+<sect1>Telemon 3.0-specific functions<p>
+
+The functions listed below are special for the Telemon 3.0. See the <url
+url="funcref.html" name="function reference"> for declaration and usage.
+
+<itemize>
+<item>explode
+<item>ping
+<item>shoot
+<item>zap
+<item>oupsx
+</itemize>
+
+
+<sect1>Hardware access<p>
+
+The following pseudo variables declared in the <tt/atmos.h/ header file do allow
+access to hardware located in the address space. Some variables are
+structures; accessing the struct fields will access the chip registers.
+
+<descrip>
+
+  <tag><tt/VIA/</tag>
+  Access to the VIA (Versatile Interface Adapter) chip is available via the
+  <tt/VIA/ variable. The structure behind this variable is explained in <tt/_6522.h/.
+
+</descrip><p>
+
+
+
+<sect>Loadable drivers<p>
+
+<em>Note:</em> Since the Atmos doesn't have working disk I/O
+(see <ref id="limitations" name="section &quot;Limitations&quot;">), the
+available drivers cannot be loaded at runtime (so the term "loadable drivers"
+is somewhat misleading). Instead, the drivers have to be statically linked. While
+this may seem overhead, it has two advantages:
+
+
+<sect1>Extended memory drivers<p>
+
+No extended memory drivers are currently available for the Atmos.
+
+
+<sect1>Joystick drivers<p>
+
+<descrip>
+
+telemon 3.0 manages joysticks but it had been handled yet.
+
+</descrip><p>
+
+
+<sect1>Mouse drivers<p>
+
+Telemon 3.0 manages also mouse, but it had been no handled yet in this version.
+
+<sect1>RS232 device drivers<p>
+
+<descrip>
+
+not done
+
+</descrip><p>
+
+
+
+<sect>Limitations<label id="limitations"><p>
+
+<sect1>Disk I/O<p>
+
+This version handles fopen, fread, fclose primitives. Because Telemon 3.0 handles these two primitives. By the way, 
+it uses an extension "ch376 card" which handles sdcard and FAT 32 usb key.
+
+<itemize>
+<item>fclose
+<item>fopen
+<item>fread
+
+</itemize>
+
+
+
+<sect>Other hints<p>
+
+
+<sect>License<p>
+
+This software is provided 'as-is', without any expressed or implied
+warranty.  In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+<enum>
+<item> The origin of this software must not be misrepresented; you must not
+       claim that you wrote the original software. If you use this software
+       in a product, an acknowledgment in the product documentation would be
+       appreciated but is not required.
+<item> Altered source versions must be plainly marked as such, and must not
+       be misrepresented as being the original software.
+<item> This notice may not be removed or altered from any source
+       distribution.
+</enum>
+
+</article>
diff --git a/libsrc/telemon24/_scrsize.s b/libsrc/telemon24/_scrsize.s
new file mode 100644 (file)
index 0000000..305e41c
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; 2003-04-13, Ullrich von Bassewitz
+; 2013-07-16, Greg King
+;
+; Screen size variables
+;
+
+        .export         screensize
+        .include        "telemon24.inc"
+
+.proc   screensize
+
+        ldx     #SCREEN_XSIZE
+        ldy     #SCREEN_YSIZE
+        rts
+
+.endproc
+
+
diff --git a/libsrc/telemon24/crt0.s b/libsrc/telemon24/crt0.s
new file mode 100644 (file)
index 0000000..a3c92a3
--- /dev/null
@@ -0,0 +1,101 @@
+;
+; Startup code for cc65 (Oric version)
+;
+; By Debrune Jérôme <jede@oric.org> and Ullrich von Bassewitz <uz@cc65.org>
+; 2016-03-18, Greg King
+;
+
+        .export         _exit
+        .export         __STARTUP__ : absolute = 1      ; Mark as startup
+
+        .import         initlib, donelib
+        .import         callmain, zerobss
+        .import         __MAIN_START__, __MAIN_SIZE__
+
+        .include        "zeropage.inc"
+        .include        "telemon24.inc"
+
+; ------------------------------------------------------------------------
+; Place the startup code in a special segment.
+
+.segment        "STARTUP"
+
+        tsx
+        stx     spsave          ; Save system stk ptr
+
+; Save space by putting some of the start-up code in a segment
+; that will be re-used.
+
+        jsr     init
+
+; Clear the BSS variables (after the constructors have been run).
+
+        jsr     zerobss
+
+; Push the command-line arguments; and, call main().
+
+        jsr     callmain
+
+; Call the module destructors. This is also the exit() entry.
+
+_exit:  jsr     donelib
+
+; Restore the system stuff.
+
+        ldx     spsave
+        txs
+;        lda     stsave
+ ;       sta     STATUS
+
+; Copy back the zero-page stuff.
+
+        ldx     #zpspace - 1
+L2:     lda     zpsave,x
+        sta     sp,x
+        dex
+        bpl     L2
+
+; Back to BASIC.
+
+        rts
+
+; ------------------------------------------------------------------------
+; Put this code in a place that will be re-used by BSS, the heap,
+; and the C stack.
+
+.segment        "ONCE"
+
+; Save the zero-page area that we're about to use.
+
+init:   ldx     #zpspace - 1
+L1:     lda     sp,x
+        sta     zpsave,x
+        dex
+        bpl     L1
+
+; Currently, color isn't supported on the text screen.
+; Unprotect screen columns 0 and 1 (where each line's color codes would sit).
+
+      ;  lda     STATUS
+      ;  sta     stsave
+      ;  and     #%11011111
+      ;  sta     STATUS
+
+; Set up the C stack.
+
+        lda     #<(__MAIN_START__ + __MAIN_SIZE__)
+        ldx     #>(__MAIN_START__ + __MAIN_SIZE__)
+        sta     sp
+        stx     sp+1            ; Set argument stack ptr
+
+; Call the module constructors.
+
+        jmp     initlib
+
+; ------------------------------------------------------------------------
+
+.segment        "INIT"
+
+spsave: .res    1
+stsave: .res    1
+zpsave: .res    zpspace
diff --git a/libsrc/telemon24/ctype.s b/libsrc/telemon24/ctype.s
new file mode 100644 (file)
index 0000000..79edafb
--- /dev/null
@@ -0,0 +1,299 @@
+;
+; Ullrich von Bassewitz, 2003-04-13
+;
+; Character specification table.
+;
+
+; The tables are readonly, put them into the rodata segment
+
+.rodata
+
+; The following 256 byte wide table specifies attributes for the isxxx type
+; of functions. Doing it by a table means some overhead in space, but it
+; has major advantages:
+;
+;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
+;     could even define macros for the isxxx functions (this is usually
+;     done on other platforms).
+;
+;   * It is highly portable. The only unportable part is the table itself,
+;     all real code goes into the common library.
+;
+;   * We save some code in the isxxx functions.
+;
+;
+; Bit assignments:
+;
+;   0 - Lower case char
+;   1 - Upper case char
+;   2 - Numeric digit
+;   3 - Hex digit (both, lower and upper)
+;   4 - Control character
+;   5 - The space character itself
+;   6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
+;   7 - Space or tab character
+
+        .export         __ctype
+
+__ctype:
+        .byte   $10     ;   0/00 ___ctrl_@___
+        .byte   $10     ;   1/01 ___ctrl_A___
+        .byte   $10     ;   2/02 ___ctrl_B___
+        .byte   $10     ;   3/03 ___ctrl_C___
+        .byte   $10     ;   4/04 ___ctrl_D___
+        .byte   $10     ;   5/05 ___ctrl_E___
+        .byte   $10     ;   6/06 ___ctrl_F___
+        .byte   $10     ;   7/07 ___ctrl_G___
+        .byte   $10     ;   8/08 ___ctrl_H___
+        .byte   $D0     ;   9/09 ___ctrl_I___
+        .byte   $50     ;  10/0a ___ctrl_J___
+        .byte   $50     ;  11/0b ___ctrl_K___
+        .byte   $50     ;  12/0c ___ctrl_L___
+        .byte   $50     ;  13/0d ___ctrl_M___
+        .byte   $10     ;  14/0e ___ctrl_N___
+        .byte   $10     ;  15/0f ___ctrl_O___
+        .byte   $10     ;  16/10 ___ctrl_P___
+        .byte   $10     ;  17/11 ___ctrl_Q___
+        .byte   $10     ;  18/12 ___ctrl_R___
+        .byte   $10     ;  19/13 ___ctrl_S___
+        .byte   $10     ;  20/14 ___ctrl_T___
+        .byte   $10     ;  21/15 ___ctrl_U___
+        .byte   $10     ;  22/16 ___ctrl_V___
+        .byte   $10     ;  23/17 ___ctrl_W___
+        .byte   $10     ;  24/18 ___ctrl_X___
+        .byte   $10     ;  25/19 ___ctrl_Y___
+        .byte   $10     ;  26/1a ___ctrl_Z___
+        .byte   $10     ;  27/1b ___ctrl_[___
+        .byte   $10     ;  28/1c ___ctrl_\___
+        .byte   $10     ;  29/1d ___ctrl_]___
+        .byte   $10     ;  30/1e ___ctrl_^___
+        .byte   $10     ;  31/1f ___ctrl_____
+        .byte   $A0     ;  32/20 ___SPACE___
+        .byte   $00     ;  33/21 _____!_____
+        .byte   $00     ;  34/22 _____"_____
+        .byte   $00     ;  35/23 _____#_____
+        .byte   $00     ;  36/24 _____$_____
+        .byte   $00     ;  37/25 _____%_____
+        .byte   $00     ;  38/26 _____&_____
+        .byte   $00     ;  39/27 _____'_____
+        .byte   $00     ;  40/28 _____(_____
+        .byte   $00     ;  41/29 _____)_____
+        .byte   $00     ;  42/2a _____*_____
+        .byte   $00     ;  43/2b _____+_____
+        .byte   $00     ;  44/2c _____,_____
+        .byte   $00     ;  45/2d _____-_____
+        .byte   $00     ;  46/2e _____._____
+        .byte   $00     ;  47/2f _____/_____
+        .byte   $0C     ;  48/30 _____0_____
+        .byte   $0C     ;  49/31 _____1_____
+        .byte   $0C     ;  50/32 _____2_____
+        .byte   $0C     ;  51/33 _____3_____
+        .byte   $0C     ;  52/34 _____4_____
+        .byte   $0C     ;  53/35 _____5_____
+        .byte   $0C     ;  54/36 _____6_____
+        .byte   $0C     ;  55/37 _____7_____
+        .byte   $0C     ;  56/38 _____8_____
+        .byte   $0C     ;  57/39 _____9_____
+        .byte   $00     ;  58/3a _____:_____
+        .byte   $00     ;  59/3b _____;_____
+        .byte   $00     ;  60/3c _____<_____
+        .byte   $00     ;  61/3d _____=_____
+        .byte   $00     ;  62/3e _____>_____
+        .byte   $00     ;  63/3f _____?_____
+
+        .byte   $00     ;  64/40 _____@_____
+        .byte   $0A     ;  65/41 _____A_____
+        .byte   $0A     ;  66/42 _____B_____
+        .byte   $0A     ;  67/43 _____C_____
+        .byte   $0A     ;  68/44 _____D_____
+        .byte   $0A     ;  69/45 _____E_____
+        .byte   $0A     ;  70/46 _____F_____
+        .byte   $02     ;  71/47 _____G_____
+        .byte   $02     ;  72/48 _____H_____
+        .byte   $02     ;  73/49 _____I_____
+        .byte   $02     ;  74/4a _____J_____
+        .byte   $02     ;  75/4b _____K_____
+        .byte   $02     ;  76/4c _____L_____
+        .byte   $02     ;  77/4d _____M_____
+        .byte   $02     ;  78/4e _____N_____
+        .byte   $02     ;  79/4f _____O_____
+        .byte   $02     ;  80/50 _____P_____
+        .byte   $02     ;  81/51 _____Q_____
+        .byte   $02     ;  82/52 _____R_____
+        .byte   $02     ;  83/53 _____S_____
+        .byte   $02     ;  84/54 _____T_____
+        .byte   $02     ;  85/55 _____U_____
+        .byte   $02     ;  86/56 _____V_____
+        .byte   $02     ;  87/57 _____W_____
+        .byte   $02     ;  88/58 _____X_____
+        .byte   $02     ;  89/59 _____Y_____
+        .byte   $02     ;  90/5a _____Z_____
+        .byte   $00     ;  91/5b _____[_____
+        .byte   $00     ;  92/5c _____\_____
+        .byte   $00     ;  93/5d _____]_____
+        .byte   $00     ;  94/5e _____^_____
+        .byte   $00     ;  95/5f _UNDERLINE_
+        .byte   $00     ;  96/60 ___grave___
+        .byte   $09     ;  97/61 _____a_____
+        .byte   $09     ;  98/62 _____b_____
+        .byte   $09     ;  99/63 _____c_____
+        .byte   $09     ; 100/64 _____d_____
+        .byte   $09     ; 101/65 _____e_____
+        .byte   $09     ; 102/66 _____f_____
+        .byte   $01     ; 103/67 _____g_____
+        .byte   $01     ; 104/68 _____h_____
+        .byte   $01     ; 105/69 _____i_____
+        .byte   $01     ; 106/6a _____j_____
+        .byte   $01     ; 107/6b _____k_____
+        .byte   $01     ; 108/6c _____l_____
+        .byte   $01     ; 109/6d _____m_____
+        .byte   $01     ; 110/6e _____n_____
+        .byte   $01     ; 111/6f _____o_____
+        .byte   $01     ; 112/70 _____p_____
+        .byte   $01     ; 113/71 _____q_____
+        .byte   $01     ; 114/72 _____r_____
+        .byte   $01     ; 115/73 _____s_____
+        .byte   $01     ; 116/74 _____t_____
+        .byte   $01     ; 117/75 _____u_____
+        .byte   $01     ; 118/76 _____v_____
+        .byte   $01     ; 119/77 _____w_____
+        .byte   $01     ; 120/78 _____x_____
+        .byte   $01     ; 121/79 _____y_____
+        .byte   $01     ; 122/7a _____z_____
+        .byte   $00     ; 123/7b _____{_____
+        .byte   $00     ; 124/7c _____|_____
+        .byte   $00     ; 125/7d _____}_____
+        .byte   $00     ; 126/7e _____~_____
+        .byte   $40     ; 127/7f ____DEL____
+
+        .byte   $00     ; 128/80 ___________
+        .byte   $00     ; 129/81 ___________
+        .byte   $00     ; 130/82 ___________
+        .byte   $00     ; 131/83 ___________
+        .byte   $00     ; 132/84 ___________
+        .byte   $00     ; 133/85 ___________
+        .byte   $00     ; 134/86 ___________
+        .byte   $00     ; 135/87 ___________
+        .byte   $00     ; 136/88 ___________
+        .byte   $00     ; 137/89 ___________
+        .byte   $00     ; 138/8a ___________
+        .byte   $00     ; 139/8b ___________
+        .byte   $00     ; 140/8c ___________
+        .byte   $00     ; 141/8d ___________
+        .byte   $00     ; 142/8e ___________
+        .byte   $00     ; 143/8f ___________
+        .byte   $00     ; 144/90 ___________
+        .byte   $00     ; 145/91 ___________
+        .byte   $00     ; 146/92 ___________
+        .byte   $10     ; 147/93 ___________
+        .byte   $00     ; 148/94 ___________
+        .byte   $00     ; 149/95 ___________
+        .byte   $00     ; 150/96 ___________
+        .byte   $00     ; 151/97 ___________
+        .byte   $00     ; 152/98 ___________
+        .byte   $00     ; 153/99 ___________
+        .byte   $00     ; 154/9a ___________
+        .byte   $00     ; 155/9b ___________
+        .byte   $00     ; 156/9c ___________
+        .byte   $00     ; 157/9d ___________
+        .byte   $00     ; 158/9e ___________
+        .byte   $00     ; 159/9f ___________
+
+        .byte   $00     ; 160/a0 ___________
+        .byte   $00     ; 161/a1 ___________
+        .byte   $00     ; 162/a2 ___________
+        .byte   $00     ; 163/a3 ___________
+        .byte   $00     ; 164/a4 ___________
+        .byte   $00     ; 165/a5 ___________
+        .byte   $00     ; 166/a6 ___________
+        .byte   $00     ; 167/a7 ___________
+        .byte   $00     ; 168/a8 ___________
+        .byte   $00     ; 169/a9 ___________
+        .byte   $00     ; 170/aa ___________
+        .byte   $00     ; 171/ab ___________
+        .byte   $00     ; 172/ac ___________
+        .byte   $00     ; 173/ad ___________
+        .byte   $00     ; 174/ae ___________
+        .byte   $00     ; 175/af ___________
+        .byte   $00     ; 176/b0 ___________
+        .byte   $00     ; 177/b1 ___________
+        .byte   $00     ; 178/b2 ___________
+        .byte   $00     ; 179/b3 ___________
+        .byte   $00     ; 180/b4 ___________
+        .byte   $00     ; 181/b5 ___________
+        .byte   $00     ; 182/b6 ___________
+        .byte   $00     ; 183/b7 ___________
+        .byte   $00     ; 184/b8 ___________
+        .byte   $00     ; 185/b9 ___________
+        .byte   $00     ; 186/ba ___________
+        .byte   $00     ; 187/bb ___________
+        .byte   $00     ; 188/bc ___________
+        .byte   $00     ; 189/bd ___________
+        .byte   $00     ; 190/be ___________
+        .byte   $00     ; 191/bf ___________
+
+        .byte   $02     ; 192/c0 ___________
+        .byte   $02     ; 193/c1 ___________
+        .byte   $02     ; 194/c2 ___________
+        .byte   $02     ; 195/c3 ___________
+        .byte   $02     ; 196/c4 ___________
+        .byte   $02     ; 197/c5 ___________
+        .byte   $02     ; 198/c6 ___________
+        .byte   $02     ; 199/c7 ___________
+        .byte   $02     ; 200/c8 ___________
+        .byte   $02     ; 201/c9 ___________
+        .byte   $02     ; 202/ca ___________
+        .byte   $02     ; 203/cb ___________
+        .byte   $02     ; 204/cc ___________
+        .byte   $02     ; 205/cd ___________
+        .byte   $02     ; 206/ce ___________
+        .byte   $02     ; 207/cf ___________
+        .byte   $02     ; 208/d0 ___________
+        .byte   $02     ; 209/d1 ___________
+        .byte   $02     ; 210/d2 ___________
+        .byte   $02     ; 211/d3 ___________
+        .byte   $02     ; 212/d4 ___________
+        .byte   $02     ; 213/d5 ___________
+        .byte   $02     ; 214/d6 ___________
+        .byte   $02     ; 215/d7 ___________
+        .byte   $02     ; 216/d8 ___________
+        .byte   $02     ; 217/d9 ___________
+        .byte   $02     ; 218/da ___________
+        .byte   $02     ; 219/db ___________
+        .byte   $02     ; 220/dc ___________
+        .byte   $02     ; 221/dd ___________
+        .byte   $02     ; 222/de ___________
+        .byte   $00     ; 223/df ___________
+        .byte   $01     ; 224/e0 ___________
+        .byte   $01     ; 225/e1 ___________
+        .byte   $01     ; 226/e2 ___________
+        .byte   $01     ; 227/e3 ___________
+        .byte   $01     ; 228/e4 ___________
+        .byte   $01     ; 229/e5 ___________
+        .byte   $01     ; 230/e6 ___________
+        .byte   $01     ; 231/e7 ___________
+        .byte   $01     ; 232/e8 ___________
+        .byte   $01     ; 233/e9 ___________
+        .byte   $01     ; 234/ea ___________
+        .byte   $01     ; 235/eb ___________
+        .byte   $01     ; 236/ec ___________
+        .byte   $01     ; 237/ed ___________
+        .byte   $01     ; 238/ee ___________
+        .byte   $01     ; 239/ef ___________
+        .byte   $01     ; 240/f0 ___________
+        .byte   $01     ; 241/f1 ___________
+        .byte   $01     ; 242/f2 ___________
+        .byte   $01     ; 243/f3 ___________
+        .byte   $01     ; 244/f4 ___________
+        .byte   $01     ; 245/f5 ___________
+        .byte   $01     ; 246/f6 ___________
+        .byte   $01     ; 247/f7 ___________
+        .byte   $01     ; 248/f8 ___________
+        .byte   $01     ; 249/f9 ___________
+        .byte   $01     ; 250/fa ___________
+        .byte   $01     ; 251/fb ___________
+        .byte   $01     ; 252/fc ___________
+        .byte   $01     ; 253/fd ___________
+        .byte   $01     ; 254/fe ___________
+        .byte   $00     ; 255/ff ___________
+
diff --git a/libsrc/telemon24/hires.s b/libsrc/telemon24/hires.s
new file mode 100644 (file)
index 0000000..80d6782
--- /dev/null
@@ -0,0 +1,22 @@
+;
+; Ullrich von Bassewitz, 2003-04-13
+;
+; void hires(void);
+;
+; This function is a hack!
+;
+
+        .export         _hires
+
+
+        .include        "telemon24.inc"
+
+               
+; can be optimized with a macro                
+.proc   _hires
+       brk
+    .byt $1a
+       rts
+.endproc
+
+
diff --git a/libsrc/telemon24/mainargs.s b/libsrc/telemon24/mainargs.s
new file mode 100644 (file)
index 0000000..d8547e5
--- /dev/null
@@ -0,0 +1,36 @@
+;
+; 2003-03-07, Ullrich von Bassewitz
+; 2011-01-28, Stefan Haubenthal
+; 2014-09-10, Greg King
+;
+; Set up arguments for main
+;
+
+        .constructor    initmainargs, 24
+        .import         __argc, __argv
+
+        .include        "telemon24.inc"
+        .macpack        generic
+
+MAXARGS  = 10                   ; Maximum number of arguments allowed
+
+
+.segment        "ONCE"
+
+.proc   initmainargs
+
+.endproc
+
+.segment        "INIT"
+
+term:   .res    1
+name:   .res    FNAME_LEN + 1
+args:   .res    SCREEN_XSIZE * 2 - 1
+
+.data
+
+; This array has zeroes when initmainargs starts.
+; char* argv[MAXARGS+1]={name};
+
+argv:   .addr   name
+        .res    MAXARGS * 2
diff --git a/libsrc/telemon24/oserrlist.s b/libsrc/telemon24/oserrlist.s
new file mode 100644 (file)
index 0000000..8ec41de
--- /dev/null
@@ -0,0 +1,75 @@
+;
+; Stefan Haubenthal, 2004-05-25
+; Ullrich von Bassewitz, 18.07.2002
+;
+; Defines the platform specific error list.
+;
+; The table is built as a list of entries
+;
+;       .byte   entrylen
+;       .byte   errorcode
+;       .asciiz errormsg
+;
+; and terminated by an entry with length zero that is returned if the
+; error code could not be found.
+;
+
+        .export         __sys_oserrlist
+
+;----------------------------------------------------------------------------
+; Macros used to generate the list (may get moved to an include file?)
+
+; Regular entry
+.macro  sys_oserr_entry         code, msg
+        .local  Start, End
+Start:  .byte   End - Start
+        .byte   code
+        .asciiz msg
+End:
+.endmacro
+
+; Sentinel entry
+.macro  sys_oserr_sentinel      msg
+        .byte   0                       ; Length is always zero
+        .byte   0                       ; Code is unused
+        .asciiz msg
+.endmacro
+
+;----------------------------------------------------------------------------
+; The error message table
+
+.rodata
+
+__sys_oserrlist:
+        sys_oserr_entry          1, "File not found"
+        sys_oserr_entry          2, "Invalid command end"
+        sys_oserr_entry          3, "No drive number"
+        sys_oserr_entry          4, "Bad drive number"
+        sys_oserr_entry          5, "Invalid filename"
+        sys_oserr_entry          6, "fderr=(error  number)"
+        sys_oserr_entry          7, "Illegal attribute"
+        sys_oserr_entry          8, "Wildcard(s) not allowed"
+        sys_oserr_entry          9, "File already exists"
+        sys_oserr_entry         10, "Insufficient disc space"
+        sys_oserr_entry         11, "File open"
+        sys_oserr_entry         12, "Illegal quantity"
+        sys_oserr_entry         13, "End address missing"
+        sys_oserr_entry         14, "Start address > end address"
+        sys_oserr_entry         15, "Missing 'to'"
+        sys_oserr_entry         16, "Renamed file not on same disc"
+        sys_oserr_entry         17, "Unknown array"
+        sys_oserr_entry         18, "Target drive not source drive"
+        sys_oserr_entry         19, "Destination not specified"
+        sys_oserr_entry         20, "Cannot merge and overwrite"
+        sys_oserr_entry         21, "Single target file illegal"
+        sys_oserr_entry         22, "Syntax"
+        sys_oserr_entry         23, "Filename missing"
+        sys_oserr_entry         24, "Source file missing"
+        sys_oserr_entry         25, "Type mismatch"
+        sys_oserr_entry         26, "Disc write-protected"
+        sys_oserr_entry         27, "Incompatible drives"
+        sys_oserr_entry         28, "File not open"
+        sys_oserr_entry         29, "File end"
+        sys_oserr_sentinel      "Unknown error"
+
+
diff --git a/libsrc/telemon24/oserror.s b/libsrc/telemon24/oserror.s
new file mode 100644 (file)
index 0000000..37c9bd7
--- /dev/null
@@ -0,0 +1,17 @@
+;
+; Stefan Haubenthal, 2011-04-18
+;
+; int __fastcall__ _osmaperrno (unsigned char oserror);
+; /* Map a system specific error into a system independent code */
+;
+
+        .include        "errno.inc"
+        .export         __osmaperrno
+
+.proc   __osmaperrno
+
+        lda     #<EUNKNOWN
+        ldx     #>EUNKNOWN
+        rts
+
+.endproc
diff --git a/libsrc/telemon24/print.s b/libsrc/telemon24/print.s
new file mode 100644 (file)
index 0000000..a135cdd
--- /dev/null
@@ -0,0 +1,25 @@
+;
+; Jede
+;
+; print (char * str);
+;
+; This function is a hack!
+;
+
+        .export         _print
+        .import         popax
+       .importzp       tmp1
+        .include        "telemon24.inc"
+
+.proc   _print
+
+        jsr     popax           ; get buf
+       stx tmp1
+       ldy tmp1
+       brk
+       .byte $14
+        rts
+
+.endproc
+
+
diff --git a/libsrc/telemon24/sysuname.s b/libsrc/telemon24/sysuname.s
new file mode 100644 (file)
index 0000000..51af1d8
--- /dev/null
@@ -0,0 +1,46 @@
+;
+; Ullrich von Bassewitz, 2003-08-12
+;
+; unsigned char __fastcall__ _sysuname (struct utsname* buf);
+;
+
+        .export         __sysuname, utsdata
+
+        .import         utscopy
+
+        __sysuname = utscopy
+
+;--------------------------------------------------------------------------
+; Data. We define a fixed utsname struct here and just copy it.
+
+.rodata
+
+utsdata:
+        ; sysname
+        .asciiz         "cc65"
+
+        ; nodename
+        .asciiz         ""
+
+        ; release
+        .byte           ((.VERSION >> 8) & $0F) + '0'
+        .byte           '.'
+        .if             ((.VERSION >> 4) & $0F) > 9
+        .byte           ((.VERSION >> 4) & $0F) / 10 + '0'
+        .byte           ((.VERSION >> 4) & $0F) .MOD 10 + '0'
+        .else
+        .byte           ((.VERSION >> 4) & $0F) + '0'
+        .endif
+        .byte           $00
+
+        ; version
+        .if             (.VERSION & $0F) > 9
+        .byte           (.VERSION & $0F) / 10 + '0'
+        .byte           (.VERSION & $0F) .MOD 10 + '0'
+        .else
+        .byte           (.VERSION & $0F) + '0'
+        .endif
+        .byte           $00
+
+        ; machine
+        .asciiz         "Oric Telestrat"
diff --git a/libsrc/telemon24/tapehdr.s b/libsrc/telemon24/tapehdr.s
new file mode 100644 (file)
index 0000000..9b183e1
--- /dev/null
@@ -0,0 +1,36 @@
+;
+; Based on code by Debrune Jérôme <jede@oric.org>
+; 2016-03-17, Greg King
+;
+
+        ; The following symbol is used by the linker config. file
+        ; to force this module to be included into the output file.
+        .export __ORIXHDR__:abs = 1
+
+        ; These symbols, also, come from the configuration file.
+        .import __AUTORUN__, __PROGFLAG__
+        .import __BASHEAD_START__, __MAIN_LAST__
+
+
+; ------------------------------------------------------------------------
+; Oric cassette-tape header
+
+.segment        "ORIXHDR"
+
+        .byte   $01, $00          ; 
+
+       .byte "ORI"
+
+       .byte $01 ; version
+       .byte $00,$00 ; mode
+       .byte $00,$00 ; cpu type
+       .byte $00,$00 ; OS
+
+        .byte   $00                     ;  reserved
+        .byte   $00                     ; auto 
+
+
+       .dbyt   __BASHEAD_START__       ; Address of start of file
+       .dbyt   __MAIN_LAST__ - 1       ;  Address of end of file
+       .dbyt   __BASHEAD_START__       ;  Address of start of file
+
diff --git a/libsrc/telemon24/write.s b/libsrc/telemon24/write.s
new file mode 100644 (file)
index 0000000..32bbf61
--- /dev/null
@@ -0,0 +1,59 @@
+;
+; Ullrich von Bassewitz, 2003-04-13
+;
+; int write (int fd, const void* buf, int count);
+;
+; This function is a hack!
+;
+
+        .export         _write
+        .import         popax
+        .importzp       ptr1, ptr2, ptr3, tmp1
+
+        .include        "telemon24.inc"
+
+.proc   _write
+
+        sta     ptr3
+        stx     ptr3+1          ; save count as result
+
+        eor     #$FF
+        sta     ptr2
+        txa
+        eor     #$FF
+        sta     ptr2+1          ; Remember -count-1
+
+        jsr     popax           ; get buf
+        sta     ptr1
+        stx     ptr1+1
+        jsr     popax           ; get fd and discard
+L1:     inc     ptr2
+        bne     L2
+        inc     ptr2+1
+        beq     L9
+L2:     ldy     #0
+        lda     (ptr1),y
+        tax
+        cpx     #$0A            ; Check for \n
+        bne     L3
+       brk
+        .byt $10
+
+        ldx     #$0D
+L3:     
+       brk
+       .byt $10
+        inc     ptr1
+        bne     L1
+        inc     ptr1+1
+        jmp     L1
+
+; No error, return count
+
+L9:     lda     ptr3
+        ldx     ptr3+1
+        rts
+
+.endproc
+
+