From: jede Date: Tue, 31 Jan 2017 21:09:14 +0000 (+0100) Subject: Merge telemon24 and telemon30 into telestrat target. X-Git-Tag: V2.16~47^2~11 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b5fef66f37d3a6f8419f32177f27a01108091d48;p=cc65 Merge telemon24 and telemon30 into telestrat target. Cleaning, and replace tab to spaces Converting hex lowercase value into uppercase char. Changing := and = when it was needed --- diff --git a/asminc/telemon24.inc b/asminc/telemon24.inc deleted file mode 100644 index 0b58d63a6..000000000 --- a/asminc/telemon24.inc +++ /dev/null @@ -1,68 +0,0 @@ -; -; Oric Telemon definition -; Telemon 2.4 -; - - -; --------------------------------------------------------------------------- -; Constants - -SCREEN_XSIZE = 40 ; screen columns -SCREEN_YSIZE = 28 ; screen rows - -FUNCTKEY = $A5 - -FNAME_LEN = 11 ; maximum length of file-name - - -; --------------------------------------------------------------------------- -; Zero page - - - - -; --------------------------------------------------------------------------- -; Low memory - - - - -; --------------------------------------------------------------------------- -; I/O locations - -; 6522 -.struct VIA ; Versatile Interface Adapter - .res $0300 -PRB .byte ; Port Register B -PRA .byte ; Port Register A -DDRB .byte ; Data Direction Register B -DDRA .byte ; Data Direction Register A -T1 .word ; Timer 1 -T1L .word ; Timer 1 Latch -T2 .word ; Timer 2 -SR .byte ; Shift Register -ACR .byte ; Auxiliary Control Register -PCR .byte ; Peripheral Control Register -IFR .byte ; Interrupt Flags Register -IER .byte ; Interrupt Enable Register -PRA2 .byte ; Port Register A without handshaking -.endstruct - -; 6551 -.struct ACIA ; Asynchronous Communications Interface Adapter - .res $031C -DATA .byte -STATUS .byte -CMD .byte ; Command register -CTRL .byte ; Control register -.endstruct - -SCREEN := $BB80 - - -; --------------------------------------------------------------------------- -; ROM entries - -XWR0 := $10 -XWSTR0 := $14 - diff --git a/asminc/telemon30.inc b/asminc/telemon30.inc deleted file mode 100644 index acfd7e919..000000000 --- a/asminc/telemon30.inc +++ /dev/null @@ -1,150 +0,0 @@ -; -; Oric Telemon definition -; Telemon 2.4 -; - - -; --------------------------------------------------------------------------- -; Constants - -SCREEN_XSIZE = 40 ; screen columns -SCREEN_YSIZE = 28 ; screen rows - -FUNCTKEY = $A5 - -FNAME_LEN = 11 ; maximum length of file-name - - -; --------------------------------------------------------------------------- -; Zero page - - - - -; --------------------------------------------------------------------------- -; Low memory - - - - -; --------------------------------------------------------------------------- -; I/O locations - -; 6522 -.struct VIA ; Versatile Interface Adapter - .res $0300 -PRB .byte ; Port Register B -PRA .byte ; Port Register A -DDRB .byte ; Data Direction Register B -DDRA .byte ; Data Direction Register A -T1 .word ; Timer 1 -T1L .word ; Timer 1 Latch -T2 .word ; Timer 2 -SR .byte ; Shift Register -ACR .byte ; Auxiliary Control Register -PCR .byte ; Peripheral Control Register -IFR .byte ; Interrupt Flags Register -IER .byte ; Interrupt Enable Register -PRA2 .byte ; Port Register A without handshaking -.endstruct - - -.struct VIA2 ; Versatile Interface Adapter - .res $0320 -PRB .byte ; Port Register B -PRA .byte ; Port Register A -DDRB .byte ; Data Direction Register B -DDRA .byte ; Data Direction Register A -T1 .word ; Timer 1 -T1L .word ; Timer 1 Latch -T2 .word ; Timer 2 -SR .byte ; Shift Register -ACR .byte ; Auxiliary Control Register -PCR .byte ; Peripheral Control Register -IFR .byte ; Interrupt Flags Register -IER .byte ; Interrupt Enable Register -PRA2 .byte ; Port Register A without handshaking -.endstruct - -; 6551 -.struct ACIA ; Asynchronous Communications Interface Adapter - .res $031C -DATA .byte -STATUS .byte -CMD .byte ; Command register -CTRL .byte ; Control register -.endstruct - -SCREEN := $BB80 - - -; --------------------------------------------------------------------------- -; ROM entries - -; primitives telemon 2.4 -XRD0 := $08 -XRDW0 := $0c -XWR0 := $10 -XWSTR0 := $14 -XTEXT := $19 -XHIRES := $1A -XMINMA := $1f -XFREAD := $27 ; only in TELEMON 3.0 -XOPEN := $30 ; only in TELEMON 3.0 -XCOSCR := $34 ; switch off cursor -XCSSCR := $35 ; switch on cursor -XCLOSE := $3a ; Close file -XFWRITE:= $3b ; write - -XSONPS := $40 -XOUPS := $42 -XPLAY := $43 -XSOUND := $44 -XMUSIC := $45 -XZAP := $46 -XSHOOT := $47 -XCIRCL := $8f -XCURSE := $90 -XEXPLO := $9c -XPING := $9d -XPAPER := $92 -XINK := $93 - - -; --------------------------------------------------------------------------- -; Page 00 -RES := $00 -RESB := $02 - -TR0 := $0c -TR1 := $0d - -PTR_READ_DEST := $2c ; used for XFREAD and XWRITE - -HRSX := $46 -HRSY := $47 - -HRS1 := $4D -HRS2 := $4F -HRS3 := $51 -HRS4 := $53 -HRS5 := $55 - -; --------------------------------------------------------------------------- -; Page $500 - -BUFNOM := $517 -BUFEDT := $590 - -MAX_BUFEDT_LENGTH=110 - -; Hardware -CH376_DATA :=$340 -CH376_COMMAND :=$341 - -; MACRO - - -.macro BRK_TELEMON value - .byte $00,value -.endmacro diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc new file mode 100644 index 000000000..fedda1946 --- /dev/null +++ b/asminc/telestrat.inc @@ -0,0 +1,147 @@ +; +; Oric Telemon definition +; Telemon 2.4 & Telemon 3.0 +; For telemon 3.0 check http://orix.oric.org +; + + +; --------------------------------------------------------------------------- +; Constants + +SCREEN_XSIZE = 40 ; screen columns +SCREEN_YSIZE = 28 ; screen rows + +FUNCTKEY = $A5 + +FNAME_LEN = 11 ; maximum length of file-name + + +; --------------------------------------------------------------------------- +; Zero page + +; --------------------------------------------------------------------------- +; Page 00 +RES := $00 +RESB := $02 + +TR0 := $0C +TR1 := $0D + +PTR_READ_DEST := $2D ; used for XFREAD and XWRITE only in telemon 3.0 + +HRSX := $46 +HRSY := $47 + +HRS1 := $4D +HRS2 := $4F +HRS3 := $51 +HRS4 := $53 +HRS5 := $55 + + + +; --------------------------------------------------------------------------- +; Low memory + + + + +; --------------------------------------------------------------------------- +; I/O locations + +; 6522 +.struct VIA ; Versatile Interface Adapter + .res $0300 +PRB .byte ; Port Register B +PRA .byte ; Port Register A +DDRB .byte ; Data Direction Register B +DDRA .byte ; Data Direction Register A +T1 .word ; Timer 1 +T1L .word ; Timer 1 Latch +T2 .word ; Timer 2 +SR .byte ; Shift Register +ACR .byte ; Auxiliary Control Register +PCR .byte ; Peripheral Control Register +IFR .byte ; Interrupt Flags Register +IER .byte ; Interrupt Enable Register +PRA2 .byte ; Port Register A without handshaking +.endstruct + + +.struct VIA2 ; Versatile Interface Adapter + .res $0320 +PRB .byte ; Port Register B +PRA .byte ; Port Register A +DDRB .byte ; Data Direction Register B +DDRA .byte ; Data Direction Register A +T1 .word ; Timer 1 +T1L .word ; Timer 1 Latch +T2 .word ; Timer 2 +SR .byte ; Shift Register +ACR .byte ; Auxiliary Control Register +PCR .byte ; Peripheral Control Register +IFR .byte ; Interrupt Flags Register +IER .byte ; Interrupt Enable Register +PRA2 .byte ; Port Register A without handshaking +.endstruct + +; 6551 +.struct ACIA ; Asynchronous Communications Interface Adapter + .res $031C +DATA .byte +STATUS .byte +CMD .byte ; Command register +CTRL .byte ; Control register +.endstruct + +SCREEN := $BB80 + + +; --------------------------------------------------------------------------- +; ROM entries + +; primitives telemon 2.4 +XRD0 = $08 +XRDW0 = $0C +XWR0 = $10 +XWSTR0 = $14 +XTEXT = $19 +XHIRES = $1A +XMINMA = $1F +XFREAD = $27 ; only in TELEMON 3.0 +XOPEN = $30 ; only in TELEMON 3.0 +XCOSCR = $34 ; switch off cursor +XCSSCR = $35 ; switch on cursor +XCLOSE = $3A ; only in TELEMON 3.0 Close file +XFWRITE = $3B ; only in TELEMON 3.0 write file +XSONPS = $40 +XOUPS = $42 +XPLAY = $43 +XSOUND = $44 +XMUSIC = $45 +XZAP = $46 +XSHOOT = $47 +XCIRCL = $8F +XCURSE = $90 +XEXPLO = $9C +XPING = $9D +XPAPER = $92 +XINK = $93 + +; --------------------------------------------------------------------------- +; Page $500 + +BUFNOM := $517 +BUFEDT := $590 + +MAX_BUFEDT_LENGTH=110 + +; Hardware +CH376_DATA :=$340 +CH376_COMMAND :=$341 + +; MACRO + +.macro BRK_TELEMON value + .byte $00,value +.endmacro diff --git a/cfg/telemon24.cfg b/cfg/telemon24.cfg deleted file mode 100644 index b76350868..000000000 --- a/cfg/telemon24.cfg +++ /dev/null @@ -1,43 +0,0 @@ -SYMBOLS { - - __ORIXHDR__: type = import; - - __STACKSIZE__: type = weak, value = $0800; # 2K stack - - __RAMEND__: type = weak, value = $9800 + $1C00 ; -} -MEMORY { - ZP: file = "", define = yes, start = $00E2, size = $001A; - ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; - BASHEAD: file = %O, define = yes, start = $0801, size = $000D; - MAIN: file = %O, define = yes, start = __BASHEAD_LAST__, size = __RAMEND__ - __MAIN_START__; - BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; -} -SEGMENTS { - ZEROPAGE: load = ZP, type = zp; - ORIXHDR: load = ORIXHDR, type = ro; - STARTUP: load = MAIN, type = ro; - LOWCODE: load = MAIN, type = ro, optional = yes; - CODE: load = MAIN, type = ro; - RODATA: load = MAIN, type = ro; - DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; - ONCE: load = MAIN, type = ro, define = yes; - BASTAIL: load = MAIN, type = ro, optional = yes; - BSS: load = BSS, type = bss, define = yes; -} -FEATURES { - CONDES: type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__, - segment = ONCE; - CONDES: type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__, - segment = RODATA; - CONDES: type = interruptor, - label = __INTERRUPTOR_TABLE__, - count = __INTERRUPTOR_COUNT__, - segment = RODATA, - import = __CALLIRQ__; -} diff --git a/cfg/telemon30.cfg b/cfg/telemon30.cfg deleted file mode 100644 index b9f0b4026..000000000 --- a/cfg/telemon30.cfg +++ /dev/null @@ -1,43 +0,0 @@ -SYMBOLS { - - __ORIXHDR__: type = import; - - __STACKSIZE__: type = weak, value = $0800; # 2K stack - - __RAMEND__: type = weak, value = $9800; -} -MEMORY { - ZP: file = "", define = yes, start = $00E0, size = $001A; - ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; - BASHEAD: file = %O, define = yes, start = $0801, size = $000D; - MAIN: file = %O, define = yes, start = __BASHEAD_LAST__, size = __RAMEND__ - __MAIN_START__; - BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; -} -SEGMENTS { - ZEROPAGE: load = ZP, type = zp; - ORIXHDR: load = ORIXHDR, type = ro; - STARTUP: load = MAIN, type = ro; - LOWCODE: load = MAIN, type = ro, optional = yes; - CODE: load = MAIN, type = ro; - RODATA: load = MAIN, type = ro; - DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; - ONCE: load = MAIN, type = ro, define = yes; - BASTAIL: load = MAIN, type = ro, optional = yes; - BSS: load = BSS, type = bss, define = yes; -} -FEATURES { - CONDES: type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__, - segment = ONCE; - CONDES: type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__, - segment = RODATA; - CONDES: type = interruptor, - label = __INTERRUPTOR_TABLE__, - count = __INTERRUPTOR_COUNT__, - segment = RODATA, - import = __CALLIRQ__; -} diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg new file mode 100644 index 000000000..b9f0b4026 --- /dev/null +++ b/cfg/telestrat.cfg @@ -0,0 +1,43 @@ +SYMBOLS { + + __ORIXHDR__: type = import; + + __STACKSIZE__: type = weak, value = $0800; # 2K stack + + __RAMEND__: type = weak, value = $9800; +} +MEMORY { + ZP: file = "", define = yes, start = $00E0, size = $001A; + ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; + BASHEAD: file = %O, define = yes, start = $0801, size = $000D; + MAIN: file = %O, define = yes, start = __BASHEAD_LAST__, size = __RAMEND__ - __MAIN_START__; + BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + ORIXHDR: load = ORIXHDR, type = ro; + STARTUP: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + INIT: load = MAIN, type = rw; + ONCE: load = MAIN, type = ro, define = yes; + BASTAIL: load = MAIN, type = ro, optional = yes; + BSS: load = BSS, type = bss, define = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/doc/telemon24.sgml b/doc/telemon24.sgml deleted file mode 100644 index b4e1befa1..000000000 --- a/doc/telemon24.sgml +++ /dev/null @@ -1,42 +0,0 @@ - - -
- -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 deleted file mode 100644 index ce9e044b4..000000000 --- a/doc/telemon30.sgml +++ /dev/null @@ -1,177 +0,0 @@ -<!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 -$0801 to $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 $97FF (or $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 "Limitations"">), 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/doc/telestrat.sgml b/doc/telestrat.sgml new file mode 100644 index 000000000..ce9e044b4 --- /dev/null +++ b/doc/telestrat.sgml @@ -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 +$0801 to $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 $97FF (or $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 "Limitations"">), 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/include/telemon.h b/include/telemon.h deleted file mode 100644 index 70033a9ad..000000000 --- a/include/telemon.h +++ /dev/null @@ -1,58 +0,0 @@ - -void print (char *); - -void hires(); -void text(); -void oups(); -void ping(); -void zap(); -void shoot(); -void explode(); - -void paper(char color); -void ink(char color); - -void kbdclick1(); - - - -void curset(char x,char y); -void circle(char rayon); - -char key(void); - - -/* PEEK, POKE, DEEK, DOKE */ - -#define POKE(addr,val) (*(unsigned char*) (addr) = (val)) - - -#define PCHN_1 001 -#define PCHN_2 002 -#define PCHN_12 003 -#define PCHN_3 004 -#define PCHN_13 005 -#define PCHN_23 006 -#define PCHN_123 007 - -#define ENV_DECAY 001 /* \_________ envelope */ -#define ENV_ATTACK_CUT 002 /* /_________ envelope */ -#define ENV_SAW_DOWN 003 /* \\\\\\\\\\ envelope */ -#define ENV_WAVE 004 /* /\/\/\/\/\ envelope */ -#define ENV_DECAY_CONT 005 /* \~~~~~~~~~ envelope */ -#define ENV_SAW_UP 006 /* ////////// envelope */ -#define ENV_ATTACK_CONT 007 /* /~~~~~~~~~ envelope */ - -#define VOL_ENVELOPE 0x0 -#define VOL_QUIETEST 0x1 -#define VOL_LOUDEST 0xe - -extern int play(int soundchanels,int noisechanels,int envelop,int volume); - - -/* Play a musical tone through the selected channel. */ - -#define CHAN_1 1 -#define CHAN_2 2 -#define CHAN_3 3 - diff --git a/include/telemon30.h b/include/telemon30.h deleted file mode 100644 index 73b018444..000000000 --- a/include/telemon30.h +++ /dev/null @@ -1,21 +0,0 @@ - -void print (char *); - -void hires(); -void text(); -void oups(); -void ping(); -void zap(); -void shoot(); -void explode(); - -void paper(char color); -void ink(char color); - -void kbdclick1(); - -void curset(char x,char y, char display, char display); -void circle(char rayon); - - - diff --git a/include/telestrat.h b/include/telestrat.h new file mode 100644 index 000000000..73b018444 --- /dev/null +++ b/include/telestrat.h @@ -0,0 +1,21 @@ + +void print (char *); + +void hires(); +void text(); +void oups(); +void ping(); +void zap(); +void shoot(); +void explode(); + +void paper(char color); +void ink(char color); + +void kbdclick1(); + +void curset(char x,char y, char display, char display); +void circle(char rayon); + + + diff --git a/libsrc/Makefile b/libsrc/Makefile index 0342a8ca4..8bcbe4410 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -31,8 +31,7 @@ TARGETS = apple2 \ sim6502 \ sim65c02 \ supervision\ - telemon24\ - telemon30 + telestrat DRVTYPES = emd \ joy \ diff --git a/libsrc/telemon24/_scrsize.s b/libsrc/telemon24/_scrsize.s deleted file mode 100644 index 305e41c46..000000000 --- a/libsrc/telemon24/_scrsize.s +++ /dev/null @@ -1,19 +0,0 @@ -; -; 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 deleted file mode 100644 index a3c92a360..000000000 --- a/libsrc/telemon24/crt0.s +++ /dev/null @@ -1,101 +0,0 @@ -; -; 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 deleted file mode 100644 index 79edafbb2..000000000 --- a/libsrc/telemon24/ctype.s +++ /dev/null @@ -1,299 +0,0 @@ -; -; 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 deleted file mode 100644 index 80d67824c..000000000 --- a/libsrc/telemon24/hires.s +++ /dev/null @@ -1,22 +0,0 @@ -; -; 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 deleted file mode 100644 index d8547e500..000000000 --- a/libsrc/telemon24/mainargs.s +++ /dev/null @@ -1,36 +0,0 @@ -; -; 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 deleted file mode 100644 index 8ec41de6d..000000000 --- a/libsrc/telemon24/oserrlist.s +++ /dev/null @@ -1,75 +0,0 @@ -; -; 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 deleted file mode 100644 index 37c9bd7fc..000000000 --- a/libsrc/telemon24/oserror.s +++ /dev/null @@ -1,17 +0,0 @@ -; -; 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 deleted file mode 100644 index a135cdd18..000000000 --- a/libsrc/telemon24/print.s +++ /dev/null @@ -1,25 +0,0 @@ -; -; 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 deleted file mode 100644 index 51af1d8fe..000000000 --- a/libsrc/telemon24/sysuname.s +++ /dev/null @@ -1,46 +0,0 @@ -; -; 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 deleted file mode 100644 index 9b183e11e..000000000 --- a/libsrc/telemon24/tapehdr.s +++ /dev/null @@ -1,36 +0,0 @@ -; -; 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 deleted file mode 100644 index 32bbf617c..000000000 --- a/libsrc/telemon24/write.s +++ /dev/null @@ -1,59 +0,0 @@ -; -; 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 - - diff --git a/libsrc/telemon30/_close.s b/libsrc/telemon30/_close.s deleted file mode 100644 index 84bee3a1b..000000000 --- a/libsrc/telemon30/_close.s +++ /dev/null @@ -1,17 +0,0 @@ - .export _close - .import addysp,popax - .importzp sp,tmp2,tmp3,tmp1 - - ; int open (const char* name, int flags, ...); /* May take a mode argument */ - .include "telemon30.inc" - .include "errno.inc" - .include "fcntl.inc" - -.proc _close -; Throw away any additional parameters passed through the ellipsis - - BRK_TELEMON XCLOSE ; launch primitive ROM - rts -.endproc - - \ No newline at end of file diff --git a/libsrc/telemon30/_open.s b/libsrc/telemon30/_open.s deleted file mode 100644 index 7ea2d8310..000000000 --- a/libsrc/telemon30/_open.s +++ /dev/null @@ -1,32 +0,0 @@ - .export _open - .import addysp,popax - .importzp sp,tmp2,tmp3,tmp1 - - ; int open (const char* name, int flags, ...); /* May take a mode argument */ - .include "telemon30.inc" - .include "errno.inc" - .include "fcntl.inc" - -.proc _open -; Throw away any additional parameters passed through the ellipsis - - dey ; Parm count < 4 shouldn't be needed to be... - dey ; ...checked (it generates a c compiler warning) - dey - dey - beq parmok ; Branch if parameter count ok - jsr addysp ; Fix stack, throw away unused parameters - -; Parameters ok. Pop the flags and save them into tmp3 - -parmok: jsr popax ; Get flagss - sta tmp3 ; save flags -; Get the filename from stack and parse it. Bail out if is not ok - - jsr popax ; Get name - ldy tmp3 ; Get flags again - BRK_TELEMON XOPEN ; launch primitive ROM - rts -.endproc - - \ No newline at end of file diff --git a/libsrc/telemon30/_read.s b/libsrc/telemon30/_read.s deleted file mode 100644 index ee822f1fd..000000000 --- a/libsrc/telemon30/_read.s +++ /dev/null @@ -1,41 +0,0 @@ -; -; jede jede@oric.org 2017-01-22 -; - - - .FEATURE c_comments,labels_without_colons,pc_assignment, loose_char_term - .export _read - .import popax - - .include "zeropage.inc" - .include "telemon30.inc" -; int read (int fd, void* buf, unsigned count); - -.proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf - - sta PTR_READ_DEST - stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read - stx ptr2+1 ; - - ; jsr popax ; fp pointer don't care in this version - - lda ptr1 ; - ldy ptr1+1 ; - BRK_TELEMON XFREAD ; calls telemon30 routine - ; compute nb of bytes read - lda PTR_READ_DEST+1 - sec - sbc ptr2+1 - tax - lda PTR_READ_DEST - sec - sbc ptr2 - ; Here A and X contains number of bytes read - rts -.endproc - - diff --git a/libsrc/telemon30/_scrsize.s b/libsrc/telemon30/_scrsize.s deleted file mode 100644 index a929f97b1..000000000 --- a/libsrc/telemon30/_scrsize.s +++ /dev/null @@ -1,19 +0,0 @@ -; -; 2003-04-13, Ullrich von Bassewitz -; 2013-07-16, Greg King -; -; Screen size variables -; - - .export screensize - .include "telemon30.inc" - -.proc screensize - - ldx #SCREEN_XSIZE - ldy #SCREEN_YSIZE - rts - -.endproc - - diff --git a/libsrc/telemon30/ch376.s b/libsrc/telemon30/ch376.s deleted file mode 100644 index 460a70052..000000000 --- a/libsrc/telemon30/ch376.s +++ /dev/null @@ -1,366 +0,0 @@ - - ; For XA65 compatibily in the future - .FEATURE c_comments,labels_without_colons,pc_assignment, loose_char_term - .export _ch376_set_file_name - .export _ch376_file_open - .export _ch376_ic_get_version - .export _ch376_reset - .export _ch376_check_exist - .export _ch376_disk_mount - .export _ch376_set_usb_mode - - .export _ch376_file_close - .export _ch376_seek_file - .export _ch376_file_create - .export _ch376_fwrite - ; High level function - - - .import popax - .include "zeropage.inc" - .include "telemon30.inc" -/* - -*/ -; CODE FOR CH376_SET_USB_MODE ************************************************* - -CH376_SET_USB_MODE_CODE_USB_HOST_SOF_PACKAGE_AUTOMATICALLY := $06 - -CH376_USB_INT_SUCCESS := $14 -CH376_USB_INT_CONNECT := $15 -CH376_USB_INT_DISCONNECT := $16 -CH376_USB_INT_BUF_OVER := $17 -CH376_USB_INT_USB_READY := $18 -CH376_USB_INT_DISK_READ := $1D -CH376_USB_INT_DISK_WRITE := $1E -CH376_USB_INT_DISK_ERR := $1F - - -CH376_ERR_OPEN_DIR := $41 -CH376_ERR_MISS_FILE := $42 -CH376_ERR_FOUND_NAME := $43 -CH376_ERR_DISK_DISCON := $82 -CH376_ERR_LARGE_SECTOR := $84 -CH376_ERR_TYPE_ERROR := $92 -CH376_ERR_BPB_ERROR := $A1 -CH376_ERR_DISK_FULL := $B1 -CH376_ERR_FDT_OVER := $B2 -CH376_ERR_FILE_CLOSE := $B4 - - - -CH376_GET_IC_VER := $01 -CH376_SET_BAUDRATE := $02 -CH376_GET_ENTER_SLEEP := $03 -CH376_RESET_ALL := $05 -CH376_CHECK_EXIST := $06 -CH376_GET_FILE_SIZE := $0C - -CH376_SET_USB_MODE := $15 -CH376_GET_STATUS := $22 -CH376_RD_USB_DATA0 := $27 -CH376_CMD_WR_REQ_DATA := $2d -CH376_SET_FILE_NAME := $2F - -CH376_DISK_CONNECT := $30 ; check the disk connection status -CH376_DISK_MOUNT := $31 -CH376_FILE_OPEN := $32 -CH376_FILE_ENUM_GO := $33 -CH376_FILE_CREATE := $34 -CH376_FILE_CLOSE := $36 -CH376_BYTE_LOCATE := $39 -CH376_BYTE_READ := $3A -CH376_BYTE_RD_GO := $3B -CH376_BYTE_WRITE := $3C -CH376_BYTE_WR_GO := $3D -CH376_DISK_CAPACITY := $3E -CH376_DISK_RD_GO := $55 - -.proc _ch376_file_close - lda #CH376_FILE_CLOSE - sta CH376_COMMAND - jsr _ch376_wait_response - rts -.endproc - -.proc _ch376_seek_file - ldx #CH376_BYTE_LOCATE - stx CH376_COMMAND - sta CH376_DATA - sty CH376_DATA - lda #$00 ; Don't manage 32 bits length - sta CH376_DATA - sta CH376_DATA - jsr _ch376_wait_response - rts -.endproc - -; void ch376_set_file_name(char *filename) -.proc _ch376_set_file_name - sta ptr1 - stx ptr1+1 - lda #CH376_SET_FILE_NAME ;$2f - sta CH376_COMMAND - ldy #0 -loop: - lda (ptr1),y ; replace by bufnom - beq end ; we reached 0 value - BRK_TELEMON XMINMA - sta CH376_DATA - iny - cpy #13 ; because we don't manage longfilename shortname =11 - bne loop -end: - sta CH376_DATA - rts -.endproc - -; char _ch376_file_open(); - -.proc _ch376_file_open - lda #CH376_FILE_OPEN ; $32 - sta CH376_COMMAND - jsr _ch376_wait_response - rts -.endproc - - - -.proc _ch376_get_file_size - lda #CH376_GET_FILE_SIZE - sta CH376_COMMAND - lda #$68 - sta CH376_DATA - ; store file length 32 bits - lda CH376_DATA - sta tmp1 - lda CH376_DATA - sta tmp1+1 - lda CH376_DATA - sta tmp2 - lda CH376_DATA - sta tmp2+1 - rts -.endproc - -; void ch376_reset(); - -.proc _ch376_reset - lda #CH376_RESET_ALL ; 5 - sta CH376_COMMAND - ; waiting - ldy #0 - ldx #0 -loop: - nop - inx - bne loop - iny - bne loop - rts -.endproc - -; char ch376_check_exist(char value); - -.proc _ch376_check_exist - sta tmp1 - lda #CH376_CHECK_EXIST ; - sta CH376_COMMAND - lda tmp1 - sta CH376_DATA - lda CH376_DATA - rts -.endproc - -; char ch376_ic_get_version(void) -.proc _ch376_ic_get_version - lda #CH376_GET_IC_VER - sta CH376_COMMAND - ldx #0 - lda CH376_DATA - rts -.endproc - -; void ch376_set_usb_mode(char mode) - -.proc _ch376_set_usb_mode -; CH376_SET_USB_MODE_CODE_USB_HOST_SOF_PACKAGE_AUTOMATICALLY - ldx #CH376_SET_USB_MODE ; $15 - stx CH376_COMMAND - sta CH376_DATA - rts -.endproc - -; void ch376_set_bytes_write(int value); -.proc _ch376_set_bytes_write - ldy #CH376_BYTE_WRITE - sty CH376_COMMAND - sta CH376_DATA - stx CH376_DATA - lda #0 - sta CH376_DATA - sta CH376_DATA - jsr _ch376_wait_response - rts -.endproc - -.proc _ch376_set_bytes_read - ldy #CH376_BYTE_READ - sty CH376_COMMAND - ; Storing 32 bits value - sta CH376_DATA - stx CH376_DATA - lda #0 - sta CH376_DATA - sta CH376_DATA - jsr _ch376_wait_response - rts -.endproc - -; char ch376_disk_mount(); -.proc _ch376_disk_mount - lda #CH376_DISK_MOUNT ; $31 - sta CH376_COMMAND - jsr _ch376_wait_response - ; if we read data value, we have then length of the volume name - ldx #0 - rts -.endproc - - -; char ch376_wait_response(); -.proc _ch376_wait_response -; 1 return 1 if usb controller does not respond -; else A contains answer of the controller - ldy #$ff -loop3: - ldx #$ff ; don't decrease this counter. Because ch376 won't respond if there is a lower value -loop: - lda CH376_COMMAND - and #%10000000 - cmp #128 - bne no_error - dex - bne loop - dey - bne loop3 - ; error is here - rts -no_error: - lda #CH376_GET_STATUS - sta CH376_COMMAND - lda CH376_DATA - rts -.endproc - -.proc _ch376_fread - ; use ptr1 to count bytes - jsr _ch376_set_bytes_read - -continue: - cmp #CH376_USB_INT_DISK_READ ; something to read - beq we_read - cmp #CH376_USB_INT_SUCCESS ; finished - beq finished - ; TODO in A : $ff X: $ff - lda #0 - tax - rts -we_read: - lda #CH376_RD_USB_DATA0 - sta CH376_COMMAND - - lda CH376_DATA ; contains length read - sta tmp2; Number of bytes to read - - ldy #0 -loop: - lda CH376_DATA ; read the data - sta (PTR_READ_DEST),y - - iny - cpy tmp2 - bne loop - tya - clc - adc PTR_READ_DEST - bcc next - inc PTR_READ_DEST+1 -next: - sta PTR_READ_DEST - - lda #CH376_BYTE_RD_GO - sta CH376_COMMAND - jsr _ch376_wait_response - jmp continue -finished: - ; TODO return bytes read - lda tmp1 - ldx tmp1+1 - rts -.endproc - -; void _ch376_fwrite(void *ptr,int number) -.proc _ch376_fwrite - ; use ptr1 to count bytes - sta ptr2 - stx ptr2+1 - - jsr popax - sta PTR_READ_DEST - stx PTR_READ_DEST+1 - - lda ptr2 - ldx ptr2+1 - jsr _ch376_set_bytes_write - ;cmp #CH376_USB_INT_SUCCESS - ;beq finished - ;jsr popax - - ;jsr _ch376_wait_response - -continue: - cmp #CH376_USB_INT_DISK_WRITE ; something to read - beq we_read - cmp #CH376_USB_INT_SUCCESS ; finished - beq finished - ; TODO in A : $ff X: $ff - lda #0 - tax - rts -we_read: - lda #CH376_CMD_WR_REQ_DATA - sta CH376_COMMAND - - lda CH376_DATA ; contains length read - sta tmp2; Number of bytes to read - - - ;ldy #0 -loop: - ;lda (PTR_READ_DEST),y - lda #65 - sta CH376_DATA ; read the data - dec tmp2 - bne loop - - - lda #CH376_BYTE_WR_GO - sta CH376_COMMAND - jsr _ch376_wait_response - jmp continue -finished: - ; TODO return bytes read - lda tmp1 - ;lda #<8000 - ldx tmp1+1 - ;ldx #>8000 - rts -.endproc - -.proc _ch376_file_create - lda #CH376_FILE_CREATE - sta CH376_COMMAND - jsr _ch376_wait_response - rts -.endproc \ No newline at end of file diff --git a/libsrc/telemon30/crt0.s b/libsrc/telemon30/crt0.s deleted file mode 100644 index 72bad5f24..000000000 --- a/libsrc/telemon30/crt0.s +++ /dev/null @@ -1,101 +0,0 @@ -; -; 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 "telemon30.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/telemon30/ctype.s b/libsrc/telemon30/ctype.s deleted file mode 100644 index 79edafbb2..000000000 --- a/libsrc/telemon30/ctype.s +++ /dev/null @@ -1,299 +0,0 @@ -; -; 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/telemon30/graphics.s b/libsrc/telemon30/graphics.s deleted file mode 100644 index 4f2b09162..000000000 --- a/libsrc/telemon30/graphics.s +++ /dev/null @@ -1,54 +0,0 @@ - .export _paper,_hires,_text,_circle,_curset, _switchOffCursor - .importzp sp,tmp2,tmp3,tmp1 - .import popa - .include "telemon30.inc" - -.proc _paper - ldx #0 ; First window - ; A contains the paper - BRK_TELEMON XPAPER - rts -.endproc - -; XINK is bugged, it corrupt memory : removing from export -.proc _ink - ldx #0 ; First window - ; A contains the ink - BRK_TELEMON XINK - rts -.endproc - -; can be optimized with a macro -.proc _hires - BRK_TELEMON XHIRES - rts -.endproc - -.proc _text - BRK_TELEMON XTEXT - rts -.endproc - -.proc _curset - jsr popa ; Pixel - jsr popa - sta HRSX - jsr popa - sta HRSY - BRK_TELEMON XCURSE - rts -.endproc - -.proc _circle - sta HRS1 - BRK_TELEMON XCIRCL - rts -.endproc - -.proc _switchOffCursor - ldx #0 - BRK_TELEMON XCOSCR - rts -.endproc - - diff --git a/libsrc/telemon30/keyboard.s b/libsrc/telemon30/keyboard.s deleted file mode 100644 index 974f841e6..000000000 --- a/libsrc/telemon30/keyboard.s +++ /dev/null @@ -1,13 +0,0 @@ - .export _key - .importzp sp,tmp2,tmp3,tmp1 - - .include "telemon30.inc" - - -; char key(void); - -.proc _key - BRK_TELEMON XRDW0 ; read keyboard - rts -.endproc - diff --git a/libsrc/telemon30/mainargs.s b/libsrc/telemon30/mainargs.s deleted file mode 100644 index 452d0d6d6..000000000 --- a/libsrc/telemon30/mainargs.s +++ /dev/null @@ -1,137 +0,0 @@ -; -; 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 - .import ptr1 - .include "telemon30.inc" - .macpack generic - -MAXARGS = 10 ; Maximum number of arguments allowed - - - - - -; Assume that the program was loaded, a moment ago, by the traditional LOAD -; statement. Save the "most-recent filename" as argument #0. -initmainargs: - - ldx #0 ; Limit the length - ; lda #0 ; The terminating NUL character - ; beq L1 ; Branch always -L0: lda BUFEDT,x - beq L3 - cmp #' ' - bne L1 - lda #0 - beq L3 -L1: sta name,x - inx - cpx #FNAME_LEN - bne L0 - lda #0 -L3: - sta name,x - inc __argc ; argc always is equal to, at least, 1 - - - - - - ldy #1 * 2 ; Point to second argv slot - -next: lda BUFEDT,x - beq done ; End of line reached - inx - cmp #' ' ; Skip leading spaces - beq next - - - - - -found: cmp #'"' ; Is the argument quoted? - beq setterm ; Jump if so - dex ; Reset pointer to first argument character - - - lda #' ' ; A space ends the argument -setterm:sta term ; Set end of argument marker - -; Now, store a pointer, to the argument, into the next slot. - - txa ; Get low byte - clc - adc #<BUFEDT - bcc L4 - inc L5+1 -L4: - ;add #<args - sta argv,y ; argv[y]=&arg -L5: - lda #>BUFEDT - ;adc #>args - sta argv+1,y - iny - iny - inc __argc ; Found another arg - -; Search for the end of the argument - - - -argloop:lda BUFEDT,x - beq done - inx - cmp term - bne argloop - -; We've found the end of the argument. X points one character behind it, and -; A contains the terminating character. To make the argument a valid C string, -; replace the terminating character by a zero. - - lda #0 - sta BUFEDT-1,x - -; Check if the maximum number of command line arguments is reached. If not, -; parse the next one. - - lda __argc ; Get low byte of argument count - cmp #MAXARGS ; Maximum number of arguments reached? - bcc next ; Parse next one if not - - - - -done: lda #<argv - ldx #>argv - sta __argv - stx __argv + 1 - rts - - - -.segment "INIT" - -term: .res 1 - - -.data - -name: .res FNAME_LEN + 1 -args: .res SCREEN_XSIZE * 2 - 1 - -ptr_current: - .res 2 -param_found: - .res 1 -; char* argv[MAXARGS+1]={name}; -argv: - .addr name - .res MAXARGS * 2 diff --git a/libsrc/telemon30/mym.s b/libsrc/telemon30/mym.s deleted file mode 100644 index f387f9d64..000000000 --- a/libsrc/telemon30/mym.s +++ /dev/null @@ -1,626 +0,0 @@ - .export _Mym_MusicStart - .importzp sp,tmp2,tmp3,tmp1,ptr1 - - .include "telemon30.inc" - -; To check: AYC -; http://cpcwiki.eu/index.php/AYC - - - - -_DecodedByte :=$D0 ; Byte being currently decoded from the MYM stream -_DecodeBitCounter :=$D2 ; Number of bits we can read in the current byte -_DecodedResult :=$D3 ; What is returned by the 'read bits' function -_CurrentAYRegister :=$D4 ; Contains the number of the register being decoded -_RegisterBufferHigh :=$D5 ; Points to the high byte of the decoded register buffer, increment to move to the next register -_BufferFrameOffset :=$D6 ; From 0 to 127, used when filling the decoded register buffer -_MusicResetCounter :=$D7 ; 2 bytes Contains the number of rows to play before reseting -_CurrentFrame :=$D9 ; From 0 to 255 and then cycles... the index of the frame to play this vbl -_PlayerVbl :=$DA -_FrameLoadBalancer :=$DB ; We depack a new frame every 9 VBLs, this way the 14 registers are evenly depacked over 128 frames - - -VIA_1 := $30f -VIA_2 := $30c - -_MusicData := $c000 - -; mym(char *buf) - - - - -; -; Current PSG values during unpacking -; - - -.proc _Mym_MusicStart - - ; The two first bytes of the MYM music is the number of rows in the music - ; We decrement that at each frame, and when we reach zero, time to start again. - sta ptr1 - stx ptr1+1 - - ldy #0 - lda (ptr1),y - sta _MusicResetCounter+0 - iny - lda (ptr1),y - tax - inx - stx _MusicResetCounter+1 - - ;ldx _MusicData+0 - ;stx _MusicResetCounter+0 - ;ldx _MusicData+1 - ;inx - ;stx _MusicResetCounter+1 - - - ; Initialize the read bit counter - ldy #2 ; should be useless because we can do iny which earn 1 byte - - lda ptr1 - clc - adc #2 - bcc next20 - inc ptr1+1 - lda ptr1+1 - sta __auto_music_ptr+2 -next20: - sta ptr1 - sta __auto_music_ptr+1 - - - - ;lda #<(_MusicData+2) - ;sta __auto_music_ptr+1 - ;lda #>(_MusicData+2) - ;sta __auto_music_ptr+2 - - lda #1 - sta _DecodeBitCounter - - ; Clear all data - lda #0 - sta _DecodedResult - sta _DecodedByte - sta _PlayerVbl - sta _PlayerRegCurrentValue - sta _BufferFrameOffset - sta _PlayerCount - sta _CurrentAYRegister - sta _CurrentFrame - - ldx #14 -loop_init: - dex - sta _PlayerRegValues,x - bne loop_init - - - ; - ; Unpack the 128 first register frames - ; - - lda #>_PlayerBuffer - sta _RegisterBufferHigh - - ldx #0 -unpack_block_loop: - stx _CurrentAYRegister - - ; Unpack that register - jsr _PlayerUnpackRegister2 - - ; Next register - ldx _CurrentAYRegister - inx - cpx #14 - bne unpack_block_loop - - - lda #128 - sta _PlayerVbl+0 - - lda #0 - sta _PlayerCount - sta _CurrentAYRegister - sta _CurrentFrame - - lda #9 - sta _FrameLoadBalancer - - lda #1 - sta _MusicPlaying - - ; - ; Install the IRQ - ; - php - sei - lda #<_Mym_PlayFrame - sta _InterruptCallBack_3+1 - lda #>_Mym_PlayFrame - sta _InterruptCallBack_3+2 - plp - - rts - - -_Mym_MusicStop: - - ; Indicate the main code that the music is finished - lda #0 - sta _MusicPlaying - - ; Disable the IRQ so it does not conflict or cause weird things - php - sei - lda #<_DoNothing - sta _InterruptCallBack_3+1 - lda #>_DoNothing - sta _InterruptCallBack_3+2 - plp - - ; Cut the sound so it does not sounds like a dying cat - - ; y=register number - ; x=value to write - ldy #7 ; Control register - ldx #$FF - jsr _PsgPlayRegister - - ldy #8 ; Volume A - ldx #0 - jsr _PsgPlayRegister - - ldy #9 ; Volume B - ldx #0 - jsr _PsgPlayRegister - - ldy #10 ; Volume C - ldx #0 - jsr _PsgPlayRegister - rts - - -_Mym_PlayFrame: - - ; - ; Check for end of music - ; CountZero: $81,$0d - dec _MusicResetCounter+0 - bne music_contines - dec _MusicResetCounter+1 - bne music_contines - -music_resets: - jmp _Mym_MusicStop - -music_contines: - - ; - ; Play a frame of 14 registers - ; - - lda _CurrentFrame - sta _auto_psg_play_read+1 - lda #>_PlayerBuffer - sta _auto_psg_play_read+2 - - ldy #0 -register_loop: - -_auto_psg_play_read: - ldx _PlayerBuffer - - ; y=register number - ; x=value to write - jsr _PsgPlayRegister - - inc _auto_psg_play_read+2 - iny - cpy #14 - bne register_loop - - - - inc _CurrentFrame - inc _PlayerCount - - lda _CurrentAYRegister - cmp #14 - bcs end_reg - - - dec _FrameLoadBalancer - bne end - - jsr _PlayerUnpackRegister - inc _CurrentAYRegister - lda #9 - sta _FrameLoadBalancer -end: - rts - - -end_reg: - - lda _PlayerCount - cmp #128 - bcc skip2 - - lda #0 - sta _CurrentAYRegister - sta _PlayerCount - lda #9 - sta _FrameLoadBalancer - - clc - lda _PlayerVbl+0 - adc #128 - sta _PlayerVbl+0 -skip2: - - - rts - - - -; y=register number -; x=value to write -_PsgPlayRegister: - - sty VIA_1 - txa - - pha - lda VIA_2 - ora #$EE ; $EE 238 11101110 - sta VIA_2 - - and #$11 ; $11 17 00010001 - ora #$CC ; $CC 204 11001100 - sta VIA_2 - - tax - pla - sta VIA_1 - txa - ora #$EC ; $EC 236 11101100 - sta VIA_2 - - and #$11 ; $11 17 00010001 - ora #$CC ; $CC 204 11001100 - sta VIA_2 - - rts - - - - -; -; Initialise X with the number of bits to read -; Y is not modifier -; -_ReadBits: - - lda #0 - sta _DecodedResult - - ; Will iterate X times (number of bits to read) -loop_read_bits: - - dec _DecodeBitCounter - beq get_next_byte - -shift_bit: - asl _DecodedByte - rol _DecodedResult - - dex - bne loop_read_bits - rts - -get_next_byte: - ; reset mask - lda #8 - sta _DecodeBitCounter - - ; fetch a new byte, and increment the adress. -__auto_music_ptr: - lda _MusicData+2 - sta _DecodedByte - - inc __auto_music_ptr+1 - bne shift_bit - inc __auto_music_ptr+2 - jmp shift_bit - - - - - -_PlayerUnpackRegister: - lda #>_PlayerBuffer - clc - adc _CurrentAYRegister - sta _RegisterBufferHigh -_PlayerUnpackRegister2: - ; - ; Init register bit count and current value - ; - ldx _CurrentAYRegister - lda _PlayerRegValues,x - sta _PlayerRegCurrentValue - - - ; - ; Check if it's packed or not - ; and call adequate routine... - ; - ldx #1 - jsr _ReadBits - ldx _DecodedResult - bne DecompressFragment - - -UnchangedFragment: - - ; - ; No change at all, just repeat '_PlayerRegCurrentValue' 128 times - ; - lda _RegisterBufferHigh ; highpart of buffer adress + register number - sta __auto_copy_unchanged_write+2 - - ldx #128 ; 128 iterations - lda _PlayerRegCurrentValue ; Value to write - - ldy _PlayerVbl - -repeat_loop: -__auto_copy_unchanged_write: - sta _PlayerBuffer,y - iny - dex - bne repeat_loop - - - jmp player_main_return - - -player_main_return: - ; Write back register current value - ldx _CurrentAYRegister - lda _PlayerRegCurrentValue - sta _PlayerRegValues,x - - ; Move to the next register buffer - inc _RegisterBufferHigh - rts - - - - -DecompressFragment: - lda _PlayerVbl ; Either 0 or 128 at this point else we have a problem... - sta _BufferFrameOffset - -decompressFragmentLoop: - -player_copy_packed_loop: - ; Check packing method - ldx #1 - jsr _ReadBits - - ldx _DecodedResult - bne PlayerNotCopyLast - -UnchangedRegister: - - ; We just copy the current value 128 times - lda _RegisterBufferHigh ; highpart of buffer adress + register number - sta __auto_player_copy_last+2 - - ldx _BufferFrameOffset ; Value between 00 and 7f - lda _PlayerRegCurrentValue ; Value to copy -__auto_player_copy_last: - sta _PlayerBuffer,x - - inc _BufferFrameOffset - - - -player_return: - - ; Check end of loop - lda _BufferFrameOffset - and #127 - bne decompressFragmentLoop - - jmp player_main_return - - -PlayerNotCopyLast: - ; Check packing method - ldx #1 - jsr _ReadBits - - ldx _DecodedResult - beq DecompressWithOffset - -ReadNewRegisterValue: - ; Read new register value (variable bit count) - ldx _CurrentAYRegister - lda _PlayerRegBits,x - tax - jsr _ReadBits - ldx _DecodedResult - stx _PlayerRegCurrentValue - - ; Copy to stream - lda _RegisterBufferHigh ; highpart of buffer adress + register number - sta __auto_player_read_new+2 - - ldx _BufferFrameOffset ; Value between 00 and 7f - lda _PlayerRegCurrentValue ; New value to write -__auto_player_read_new: - sta _PlayerBuffer,x - - inc _BufferFrameOffset - jmp player_return - - - - -DecompressWithOffset: - - ; Read Offset (0 to 127) - ldx #7 - jsr _ReadBits - - lda _RegisterBufferHigh ; highpart of buffer adress + register number - sta __auto_write+2 ; Write adress - sta __auto_read+2 ; Read adress - - ; Compute wrap around offset... - lda _BufferFrameOffset ; between 0 and 255 - clc - adc _DecodedResult ; + Offset Between 00 and 7f - sec - sbc #128 ; -128 - tay - - ; Read count (7 bits) - ldx #7 - jsr _ReadBits - - inc _DecodedResult ; 1 to 129 - - - ldx _BufferFrameOffset - -player_copy_offset_loop: - -__auto_read: - lda _PlayerBuffer,y ; Y for reading - iny - -__auto_write: - sta _PlayerBuffer,x ; X for writing - - inx - dec _DecodedResult - bne player_copy_offset_loop - - stx _BufferFrameOffset - sta _PlayerRegCurrentValue - - jmp player_return - - - - -; -; Size in bits of each PSG register -; -_PlayerRegBits: - ; Chanel A Frequency - .byt 8 - .byt 4 - - ; Chanel B Frequency - .byt 8 - .byt 4 - - ; Chanel C Frequency - .byt 8 - .byt 4 - - ; Chanel sound generator - .byt 5 - - ; select - .byt 8 - - ; Volume A,B,C - .byt 5 - .byt 5 - .byt 5 - - ; Wave period - .byt 8 - .byt 8 - - ; Wave form - .byt 8 - -_PlayerCount: - .res 1,0 ; must be equal to 0 -_MusicPlaying: - .res 1,0 ; must be equal to 0 - - -_PlayerRegValues: -_RegisterChanAFrequency: - ; Chanel A Frequency - .res 1,8 - .res 1,4 - -_RegisterChanBFrequency: - ; Chanel B Frequency - .res 1,8 - .res 1,4 - -_RegisterChanCFrequency: - ; Chanel C Frequency - .res 1,8 - .res 1,4 - -_RegisterChanNoiseFrequency: - ; Chanel sound generator - .res 1,5 - - ; select - .res 1,8 - - ; Volume A,B,C -_RegisterChanAVolume: - .res 1,5 -_RegisterChanBVolume: - .res 1,5 -_RegisterChanCVolume: - .res 1,5 - - ; Wave period - .res 1,8 - .res 1,8 - - ; Wave form - .res 1,8 - -_PlayerRegCurrentValue: - .res 1,0 -_DoNothing: - rts - -_InterruptCallBack_3: ; Used by the music player - jsr _DoNothing ; Transformed to "jsr _Mym_PlayFrame" -> 12 cycles - -; jsr MiniScrollLoading ; -> 338 cycles - - pla - tay - pla - tax - pla - - rti -_PlayerBuffer: - .res 256*14 ; About 3.5 kilobytes somewhere in memory, we put the music file in overlay memory - -.endproc - diff --git a/libsrc/telemon30/orixhdr.s b/libsrc/telemon30/orixhdr.s deleted file mode 100644 index 1b0351885..000000000 --- a/libsrc/telemon30/orixhdr.s +++ /dev/null @@ -1,35 +0,0 @@ -; -; 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,%00000000 ; 6502 only - .byte $00,$00 ; Extends - .byte $00,$00 ; OS - - .byte $00 ; reserved - .byte $00 ; auto - - .word __BASHEAD_START__ ; Address of start of file - .word __MAIN_LAST__ - 1 ; Address of end of file - .word __BASHEAD_START__ ; Address of start of file - diff --git a/libsrc/telemon30/oserrlist.s b/libsrc/telemon30/oserrlist.s deleted file mode 100644 index 8ec41de6d..000000000 --- a/libsrc/telemon30/oserrlist.s +++ /dev/null @@ -1,75 +0,0 @@ -; -; 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/telemon30/oserror.s b/libsrc/telemon30/oserror.s deleted file mode 100644 index 37c9bd7fc..000000000 --- a/libsrc/telemon30/oserror.s +++ /dev/null @@ -1,17 +0,0 @@ -; -; 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/telemon30/print.s b/libsrc/telemon30/print.s deleted file mode 100644 index 56c513fd6..000000000 --- a/libsrc/telemon30/print.s +++ /dev/null @@ -1,21 +0,0 @@ -; -; Jede -; -; print (char * str); -; -; This function is a hack! -; - - .export _print - .import popax - .importzp tmp1 - .include "telemon30.inc" - -.proc _print - stx tmp1 - ldy tmp1 - BRK_TELEMON XWSTR0 - rts -.endproc - - diff --git a/libsrc/telemon30/sound.s b/libsrc/telemon30/sound.s deleted file mode 100644 index 2df18f4a0..000000000 --- a/libsrc/telemon30/sound.s +++ /dev/null @@ -1,45 +0,0 @@ - .export _kbdclick1,_oups,_ping,_explode,_shoot,_zap - .include "telemon30.inc" - -.proc _kbdclick1 - LDX #<sound_bip_keyboard - LDY #>sound_bip_keyboard - BRK_TELEMON XSONPS - rts -sound_bip_keyboard: - .byte $1f,$00,$00,$00,$00,$00,$00,$3e,$10,$00,$00,$1f,$00,$00 -.endproc - -.proc _explode - BRK_TELEMON XEXPLO - rts -.endproc - -.proc _oups - BRK_TELEMON XOUPS - rts -.endproc - -.proc _ping - BRK_TELEMON XPING - rts -.endproc - -.proc _shoot - BRK_TELEMON XSHOOT - rts -.endproc - -.proc _zap - BRK_TELEMON XZAP - rts -.endproc - - - -; XPLAY := $43 -; XSOUND := $44 -; XMUSIC := $45 - - - diff --git a/libsrc/telemon30/sysuname.s b/libsrc/telemon30/sysuname.s deleted file mode 100644 index 51af1d8fe..000000000 --- a/libsrc/telemon30/sysuname.s +++ /dev/null @@ -1,46 +0,0 @@ -; -; 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/telemon30/write.s b/libsrc/telemon30/write.s deleted file mode 100644 index d762eb92c..000000000 --- a/libsrc/telemon30/write.s +++ /dev/null @@ -1,83 +0,0 @@ -; -; 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 "telemon30.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 - - ; if fd=0001 then it stdout - - - cpx #0 - beq next - jmp L1 -next: - cmp #1 - beq L1 - - ; Here it's a file opened - lda ptr1 - sta PTR_READ_DEST - lda ptr1+1 - sta PTR_READ_DEST+1 - lda ptr3 - ldy ptr3+1 - BRK_TELEMON XFWRITE - rts - - -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_TELEMON XWR0 ; Macro - lda #$0d ; return to the beggining of the line - BRK_TELEMON XWR0 ; Macro ; - - - ldx #$0D -L3: - BRK_TELEMON XWR0 ; Macro - - inc ptr1 - bne L1 - inc ptr1+1 - jmp L1 - -; No error, return count - -L9: lda ptr3 - ldx ptr3+1 - rts - -.endproc - - diff --git a/libsrc/telestrat/ch376.s b/libsrc/telestrat/ch376.s new file mode 100644 index 000000000..fbfa16017 --- /dev/null +++ b/libsrc/telestrat/ch376.s @@ -0,0 +1,344 @@ + +; jede jede@oric.org 2017-01-22 + + ; For XA65 compatibily in the future + .FEATURE c_comments,labels_without_colons,pc_assignment, loose_char_term + .export _ch376_set_file_name + .export _ch376_file_open + .export _ch376_ic_get_version + .export _ch376_reset + .export _ch376_check_exist + .export _ch376_disk_mount + .export _ch376_set_usb_mode + .export _ch376_file_close + .export _ch376_seek_file + .export _ch376_file_create + .export _ch376_fwrite + + .import popax + .include "zeropage.inc" + .include "telestrat.inc" + + + + + +CH376_SET_USB_MODE_CODE_USB_HOST_SOF_PACKAGE_AUTOMATICALLY = $06 + +CH376_USB_INT_SUCCESS = $14 +CH376_USB_INT_CONNECT = $15 +CH376_USB_INT_DISCONNECT = $16 +CH376_USB_INT_BUF_OVER = $17 +CH376_USB_INT_USB_READY = $18 +CH376_USB_INT_DISK_READ = $1D +CH376_USB_INT_DISK_WRITE = $1E +CH376_USB_INT_DISK_ERR = $1F + + +CH376_ERR_OPEN_DIR = $41 +CH376_ERR_MISS_FILE = $42 +CH376_ERR_FOUND_NAME = $43 +CH376_ERR_DISK_DISCON = $82 +CH376_ERR_LARGE_SECTOR = $84 +CH376_ERR_TYPE_ERROR = $92 +CH376_ERR_BPB_ERROR = $A1 +CH376_ERR_DISK_FULL = $B1 +CH376_ERR_FDT_OVER = $B2 +CH376_ERR_FILE_CLOSE = $B4 + +CH376_GET_IC_VER = $01 +CH376_SET_BAUDRATE = $02 +CH376_GET_ENTER_SLEEP = $03 +CH376_RESET_ALL = $05 +CH376_CHECK_EXIST = $06 +CH376_GET_FILE_SIZE = $0C + +CH376_SET_USB_MODE = $15 +CH376_GET_STATUS = $22 +CH376_RD_USB_DATA0 = $27 +CH376_CMD_WR_REQ_DATA = $2D +CH376_SET_FILE_NAME = $2F + +CH376_DISK_CONNECT = $30 ; check the disk connection status +CH376_DISK_MOUNT = $31 +CH376_FILE_OPEN = $32 +CH376_FILE_ENUM_GO = $33 +CH376_FILE_CREATE = $34 +CH376_FILE_CLOSE = $36 +CH376_BYTE_LOCATE = $39 +CH376_BYTE_READ = $3A +CH376_BYTE_RD_GO = $3B +CH376_BYTE_WRITE = $3C +CH376_BYTE_WR_GO = $3D +CH376_DISK_CAPACITY = $3E +CH376_DISK_RD_GO = $55 + +.proc _ch376_file_close + lda #CH376_FILE_CLOSE + sta CH376_COMMAND + jsr _ch376_wait_response + rts +.endproc + +.proc _ch376_seek_file + ldx #CH376_BYTE_LOCATE + stx CH376_COMMAND + sta CH376_DATA + sty CH376_DATA + lda #$00 ; Don't manage 32 bits length + sta CH376_DATA + sta CH376_DATA + jsr _ch376_wait_response + rts +.endproc + +; void ch376_set_file_name(char *filename) +.proc _ch376_set_file_name + sta ptr1 + stx ptr1+1 + lda #CH376_SET_FILE_NAME ;$2f + sta CH376_COMMAND + ldy #0 +loop: + lda (ptr1),y ; replace by bufnom + beq end ; we reached 0 value + BRK_TELEMON XMINMA + sta CH376_DATA + iny + cpy #13 ; because we don't manage longfilename shortname =11 + bne loop +end: + sta CH376_DATA + rts +.endproc + +; char _ch376_file_open(); +.proc _ch376_file_open + lda #CH376_FILE_OPEN ; $32 + sta CH376_COMMAND + jsr _ch376_wait_response + rts +.endproc + +.proc _ch376_get_file_size + lda #CH376_GET_FILE_SIZE + sta CH376_COMMAND + lda #$68 + sta CH376_DATA + ; store file length 32 bits + lda CH376_DATA + sta tmp1 + lda CH376_DATA + sta tmp1+1 + lda CH376_DATA + sta tmp2 + lda CH376_DATA + sta tmp2+1 + rts +.endproc + +; void ch376_reset(); +.proc _ch376_reset + lda #CH376_RESET_ALL ; 5 + sta CH376_COMMAND + ; waiting + ldy #0 + ldx #0 +loop: + nop + inx + bne loop + iny + bne loop + rts +.endproc + +; char ch376_check_exist(char value); + +.proc _ch376_check_exist + sta tmp1 + lda #CH376_CHECK_EXIST ; + sta CH376_COMMAND + lda tmp1 + sta CH376_DATA + lda CH376_DATA + rts +.endproc + +; char ch376_ic_get_version(void) +.proc _ch376_ic_get_version + lda #CH376_GET_IC_VER + sta CH376_COMMAND + ldx #0 + lda CH376_DATA + rts +.endproc + +; void ch376_set_usb_mode(char mode) +.proc _ch376_set_usb_mode + ldx #CH376_SET_USB_MODE ; $15 + stx CH376_COMMAND + sta CH376_DATA + rts +.endproc + +; void ch376_set_bytes_write(int value); +.proc _ch376_set_bytes_write + ldy #CH376_BYTE_WRITE + sty CH376_COMMAND + sta CH376_DATA + stx CH376_DATA + lda #0 + sta CH376_DATA + sta CH376_DATA + jsr _ch376_wait_response + rts +.endproc + +.proc _ch376_set_bytes_read + ldy #CH376_BYTE_READ + sty CH376_COMMAND + ; Storing 32 bits value + sta CH376_DATA + stx CH376_DATA + lda #0 + sta CH376_DATA + sta CH376_DATA + jsr _ch376_wait_response + rts +.endproc + +; char ch376_disk_mount(); +.proc _ch376_disk_mount + lda #CH376_DISK_MOUNT ; $31 + sta CH376_COMMAND + jsr _ch376_wait_response + ; if we read data value, we have then length of the volume name + ldx #0 + rts +.endproc + + +; char ch376_wait_response(); +.proc _ch376_wait_response +; return 1 if usb controller does not respond +; else A contains answer of the controller + ldy #$FF ; We have to wait 35 ms, but well, this loop is broken when controler is OK +loop3: + ldx #$FF ; don't decrease this counter. Because ch376 won't respond if there is a lower value +loop: + lda CH376_COMMAND + and #%10000000 + cmp #128 + bne no_error + dex + bne loop + dey + bne loop3 + ; error is here + rts +no_error: + lda #CH376_GET_STATUS + sta CH376_COMMAND + lda CH376_DATA + rts +.endproc + +.proc _ch376_fread + ; use ptr1 to count bytes + jsr _ch376_set_bytes_read +continue: + cmp #CH376_USB_INT_DISK_READ ; something to read + beq we_read + cmp #CH376_USB_INT_SUCCESS ; finished + beq finished + ; TODO in A : $ff X: $ff + lda #0 + tax + rts +we_read: + lda #CH376_RD_USB_DATA0 + sta CH376_COMMAND + + lda CH376_DATA ; contains length read + sta tmp2; Number of bytes to read + + ldy #0 +loop: + lda CH376_DATA ; read the data + sta (PTR_READ_DEST),y + iny + cpy tmp2 + bne loop + tya + clc + adc PTR_READ_DEST + bcc next + inc PTR_READ_DEST+1 +next: + sta PTR_READ_DEST + + lda #CH376_BYTE_RD_GO + sta CH376_COMMAND + jsr _ch376_wait_response + jmp continue +finished: + ; TODO return bytes read + lda tmp1 + ldx tmp1+1 + rts +.endproc + +; void _ch376_fwrite(void *ptr,int number) +.proc _ch376_fwrite + ; use ptr1 to count bytes + sta ptr2 + stx ptr2+1 + + jsr popax + sta PTR_READ_DEST + stx PTR_READ_DEST+1 + + lda ptr2 + ldx ptr2+1 + jsr _ch376_set_bytes_write +continue: + cmp #CH376_USB_INT_DISK_WRITE ; something to read + beq we_read + cmp #CH376_USB_INT_SUCCESS ; finished + beq finished + + lda #0 + tax + rts +we_read: + lda #CH376_CMD_WR_REQ_DATA + sta CH376_COMMAND + + lda CH376_DATA ; contains length read + sta tmp2; Number of bytes to read + + ldy #0 +loop: + lda (PTR_READ_DEST),y + sta CH376_DATA ; read the data + dec tmp2 + bne loop + + + lda #CH376_BYTE_WR_GO + sta CH376_COMMAND + jsr _ch376_wait_response + jmp continue +finished: + lda tmp1 + ldx tmp1+1 + rts +.endproc + +.proc _ch376_file_create + lda #CH376_FILE_CREATE + sta CH376_COMMAND + jsr _ch376_wait_response + rts +.endproc diff --git a/libsrc/telestrat/close.s b/libsrc/telestrat/close.s new file mode 100644 index 000000000..881d0897f --- /dev/null +++ b/libsrc/telestrat/close.s @@ -0,0 +1,18 @@ +; jede jede@oric.org 2017-01-22 + + .export _close + + .import addysp,popax + + .include "zeropage.inc" + .include "telestrat.inc" + .include "errno.inc" + .include "fcntl.inc" + +; int open (const char* name, int flags, ...); /* May take a mode argument */ +.proc _close + BRK_TELEMON XCLOSE ; launch primitive ROM + rts +.endproc + + \ No newline at end of file diff --git a/libsrc/telestrat/crt0.s b/libsrc/telestrat/crt0.s new file mode 100644 index 000000000..59b1ea642 --- /dev/null +++ b/libsrc/telestrat/crt0.s @@ -0,0 +1,91 @@ +; +; Startup code for cc65 (Oric version) +; +; By Debrune Jérôme <jede@oric.org> and Ullrich von Bassewitz <uz@cc65.org> +; + + .export _exit + .export __STARTUP__ : absolute = 1 ; Mark as startup + + .import initlib, donelib + .import callmain, zerobss + .import __MAIN_START__, __MAIN_SIZE__ + + .include "zeropage.inc" + .include "telestrat.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 + +; 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 + + +; 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/telestrat/ctype.s b/libsrc/telestrat/ctype.s new file mode 100644 index 000000000..79edafbb2 --- /dev/null +++ b/libsrc/telestrat/ctype.s @@ -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/telestrat/graphics.s b/libsrc/telestrat/graphics.s new file mode 100644 index 000000000..9984036bb --- /dev/null +++ b/libsrc/telestrat/graphics.s @@ -0,0 +1,58 @@ +; jede jede@oric.org 2017-01-22 + + .export _paper,_hires,_text,_circle,_curset, _switchOffCursor + + .include "zeropage.inc" + .include "telestrat.inc" + .import popa + + +.proc _paper + ldx #0 ; First window + ; A contains the paper + BRK_TELEMON XPAPER + rts +.endproc + +; XINK is bugged, it corrupt memory : removing from export +.proc _ink + ldx #0 ; First window + ; A contains the ink + BRK_TELEMON XINK + rts +.endproc + +; can be optimized with a macro +.proc _hires + BRK_TELEMON XHIRES + rts +.endproc + +.proc _text + BRK_TELEMON XTEXT + rts +.endproc + +.proc _curset + jsr popa ; Pixel + jsr popa + sta HRSX + jsr popa + sta HRSY + BRK_TELEMON XCURSE + rts +.endproc + +.proc _circle + sta HRS1 + BRK_TELEMON XCIRCL + rts +.endproc + +.proc _switchOffCursor + ldx #0 + BRK_TELEMON XCOSCR + rts +.endproc + + diff --git a/libsrc/telestrat/keyboard.s b/libsrc/telestrat/keyboard.s new file mode 100644 index 000000000..7069d1003 --- /dev/null +++ b/libsrc/telestrat/keyboard.s @@ -0,0 +1,14 @@ +; jede jede@oric.org 2017-01-22 + + .export _key + + .include "zeropage.inc" + .include "telestrat.inc" + +; char key(void); + +.proc _key + BRK_TELEMON XRDW0 ; read keyboard + rts +.endproc + diff --git a/libsrc/telestrat/mainargs.s b/libsrc/telestrat/mainargs.s new file mode 100644 index 000000000..b41e2a96d --- /dev/null +++ b/libsrc/telestrat/mainargs.s @@ -0,0 +1,120 @@ +; +; 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 + .import ptr1 + .include "telestrat.inc" + .macpack generic + +MAXARGS = 10 ; Maximum number of arguments allowed + + + + + +; Assume that the program was loaded, a moment ago, by the traditional LOAD +; statement. Save the "most-recent filename" as argument #0. +initmainargs: + + ldx #0 ; Limit the length +L0: lda BUFEDT,x + beq L3 + cmp #' ' + bne L1 + lda #0 + beq L3 +L1: sta name,x + inx + cpx #FNAME_LEN + bne L0 + lda #0 +L3: + sta name,x + inc __argc ; argc always is equal to, at least, 1 + + + ldy #1 * 2 ; Point to second argv slot + +next: lda BUFEDT,x + beq done ; End of line reached + inx + cmp #' ' ; Skip leading spaces + beq next + +found: cmp #'"' ; Is the argument quoted? + beq setterm ; Jump if so + dex ; Reset pointer to first argument character + + lda #' ' ; A space ends the argument +setterm:sta term ; Set end of argument marker + +; Now, store a pointer, to the argument, into the next slot. + + txa ; Get low byte + clc + adc #<BUFEDT + bcc L4 + inc L5+1 +L4: + sta argv,y ; argv[y]=&arg +L5: + lda #>BUFEDT + sta argv+1,y + iny + iny + inc __argc ; Found another arg + +; Search for the end of the argument + + + +argloop:lda BUFEDT,x + beq done + inx + cmp term + bne argloop + +; We've found the end of the argument. X points one character behind it, and +; A contains the terminating character. To make the argument a valid C string, +; replace the terminating character by a zero. + + lda #0 + sta BUFEDT-1,x + +; Check if the maximum number of command line arguments is reached. If not, +; parse the next one. + + lda __argc ; Get low byte of argument count + cmp #MAXARGS ; Maximum number of arguments reached? + bcc next ; Parse next one if not + + +done: lda #<argv + ldx #>argv + sta __argv + stx __argv + 1 + rts + + +.segment "INIT" + +term: .res 1 + + +.data + +name: .res FNAME_LEN + 1 +args: .res SCREEN_XSIZE * 2 - 1 + +param_found: + .res 1 +; char* argv[MAXARGS+1]={name}; +argv: + .addr name + .res MAXARGS * 2 diff --git a/libsrc/telestrat/mym.s b/libsrc/telestrat/mym.s new file mode 100644 index 000000000..009ccf53b --- /dev/null +++ b/libsrc/telestrat/mym.s @@ -0,0 +1,626 @@ + .export _Mym_MusicStart + .importzp sp,tmp2,tmp3,tmp1,ptr1 + + .include "telestrat.inc" + +; To check: AYC +; http://cpcwiki.eu/index.php/AYC + + + + +_DecodedByte :=$D0 ; Byte being currently decoded from the MYM stream +_DecodeBitCounter :=$D2 ; Number of bits we can read in the current byte +_DecodedResult :=$D3 ; What is returned by the 'read bits' function +_CurrentAYRegister :=$D4 ; Contains the number of the register being decoded +_RegisterBufferHigh :=$D5 ; Points to the high byte of the decoded register buffer, increment to move to the next register +_BufferFrameOffset :=$D6 ; From 0 to 127, used when filling the decoded register buffer +_MusicResetCounter :=$D7 ; 2 bytes Contains the number of rows to play before reseting +_CurrentFrame :=$D9 ; From 0 to 255 and then cycles... the index of the frame to play this vbl +_PlayerVbl :=$DA +_FrameLoadBalancer :=$DB ; We depack a new frame every 9 VBLs, this way the 14 registers are evenly depacked over 128 frames + + +VIA_1 := $30f +VIA_2 := $30c + +_MusicData := $c000 + +; mym(char *buf) + + + + +; +; Current PSG values during unpacking +; + + +.proc _Mym_MusicStart + + ; The two first bytes of the MYM music is the number of rows in the music + ; We decrement that at each frame, and when we reach zero, time to start again. + sta ptr1 + stx ptr1+1 + + ldy #0 + lda (ptr1),y + sta _MusicResetCounter+0 + iny + lda (ptr1),y + tax + inx + stx _MusicResetCounter+1 + + ;ldx _MusicData+0 + ;stx _MusicResetCounter+0 + ;ldx _MusicData+1 + ;inx + ;stx _MusicResetCounter+1 + + + ; Initialize the read bit counter + ldy #2 ; should be useless because we can do iny which earn 1 byte + + lda ptr1 + clc + adc #2 + bcc next20 + inc ptr1+1 + lda ptr1+1 + sta __auto_music_ptr+2 +next20: + sta ptr1 + sta __auto_music_ptr+1 + + + + ;lda #<(_MusicData+2) + ;sta __auto_music_ptr+1 + ;lda #>(_MusicData+2) + ;sta __auto_music_ptr+2 + + lda #1 + sta _DecodeBitCounter + + ; Clear all data + lda #0 + sta _DecodedResult + sta _DecodedByte + sta _PlayerVbl + sta _PlayerRegCurrentValue + sta _BufferFrameOffset + sta _PlayerCount + sta _CurrentAYRegister + sta _CurrentFrame + + ldx #14 +loop_init: + dex + sta _PlayerRegValues,x + bne loop_init + + + ; + ; Unpack the 128 first register frames + ; + + lda #>_PlayerBuffer + sta _RegisterBufferHigh + + ldx #0 +unpack_block_loop: + stx _CurrentAYRegister + + ; Unpack that register + jsr _PlayerUnpackRegister2 + + ; Next register + ldx _CurrentAYRegister + inx + cpx #14 + bne unpack_block_loop + + + lda #128 + sta _PlayerVbl+0 + + lda #0 + sta _PlayerCount + sta _CurrentAYRegister + sta _CurrentFrame + + lda #9 + sta _FrameLoadBalancer + + lda #1 + sta _MusicPlaying + + ; + ; Install the IRQ + ; + php + sei + lda #<_Mym_PlayFrame + sta _InterruptCallBack_3+1 + lda #>_Mym_PlayFrame + sta _InterruptCallBack_3+2 + plp + + rts + + +_Mym_MusicStop: + + ; Indicate the main code that the music is finished + lda #0 + sta _MusicPlaying + + ; Disable the IRQ so it does not conflict or cause weird things + php + sei + lda #<_DoNothing + sta _InterruptCallBack_3+1 + lda #>_DoNothing + sta _InterruptCallBack_3+2 + plp + + ; Cut the sound so it does not sounds like a dying cat + + ; y=register number + ; x=value to write + ldy #7 ; Control register + ldx #$FF + jsr _PsgPlayRegister + + ldy #8 ; Volume A + ldx #0 + jsr _PsgPlayRegister + + ldy #9 ; Volume B + ldx #0 + jsr _PsgPlayRegister + + ldy #10 ; Volume C + ldx #0 + jsr _PsgPlayRegister + rts + + +_Mym_PlayFrame: + + ; + ; Check for end of music + ; CountZero: $81,$0d + dec _MusicResetCounter+0 + bne music_contines + dec _MusicResetCounter+1 + bne music_contines + +music_resets: + jmp _Mym_MusicStop + +music_contines: + + ; + ; Play a frame of 14 registers + ; + + lda _CurrentFrame + sta _auto_psg_play_read+1 + lda #>_PlayerBuffer + sta _auto_psg_play_read+2 + + ldy #0 +register_loop: + +_auto_psg_play_read: + ldx _PlayerBuffer + + ; y=register number + ; x=value to write + jsr _PsgPlayRegister + + inc _auto_psg_play_read+2 + iny + cpy #14 + bne register_loop + + + + inc _CurrentFrame + inc _PlayerCount + + lda _CurrentAYRegister + cmp #14 + bcs end_reg + + + dec _FrameLoadBalancer + bne end + + jsr _PlayerUnpackRegister + inc _CurrentAYRegister + lda #9 + sta _FrameLoadBalancer +end: + rts + + +end_reg: + + lda _PlayerCount + cmp #128 + bcc skip2 + + lda #0 + sta _CurrentAYRegister + sta _PlayerCount + lda #9 + sta _FrameLoadBalancer + + clc + lda _PlayerVbl+0 + adc #128 + sta _PlayerVbl+0 +skip2: + + + rts + + + +; y=register number +; x=value to write +_PsgPlayRegister: + + sty VIA_1 + txa + + pha + lda VIA_2 + ora #$EE ; $EE 238 11101110 + sta VIA_2 + + and #$11 ; $11 17 00010001 + ora #$CC ; $CC 204 11001100 + sta VIA_2 + + tax + pla + sta VIA_1 + txa + ora #$EC ; $EC 236 11101100 + sta VIA_2 + + and #$11 ; $11 17 00010001 + ora #$CC ; $CC 204 11001100 + sta VIA_2 + + rts + + + + +; +; Initialise X with the number of bits to read +; Y is not modifier +; +_ReadBits: + + lda #0 + sta _DecodedResult + + ; Will iterate X times (number of bits to read) +loop_read_bits: + + dec _DecodeBitCounter + beq get_next_byte + +shift_bit: + asl _DecodedByte + rol _DecodedResult + + dex + bne loop_read_bits + rts + +get_next_byte: + ; reset mask + lda #8 + sta _DecodeBitCounter + + ; fetch a new byte, and increment the adress. +__auto_music_ptr: + lda _MusicData+2 + sta _DecodedByte + + inc __auto_music_ptr+1 + bne shift_bit + inc __auto_music_ptr+2 + jmp shift_bit + + + + + +_PlayerUnpackRegister: + lda #>_PlayerBuffer + clc + adc _CurrentAYRegister + sta _RegisterBufferHigh +_PlayerUnpackRegister2: + ; + ; Init register bit count and current value + ; + ldx _CurrentAYRegister + lda _PlayerRegValues,x + sta _PlayerRegCurrentValue + + + ; + ; Check if it's packed or not + ; and call adequate routine... + ; + ldx #1 + jsr _ReadBits + ldx _DecodedResult + bne DecompressFragment + + +UnchangedFragment: + + ; + ; No change at all, just repeat '_PlayerRegCurrentValue' 128 times + ; + lda _RegisterBufferHigh ; highpart of buffer adress + register number + sta __auto_copy_unchanged_write+2 + + ldx #128 ; 128 iterations + lda _PlayerRegCurrentValue ; Value to write + + ldy _PlayerVbl + +repeat_loop: +__auto_copy_unchanged_write: + sta _PlayerBuffer,y + iny + dex + bne repeat_loop + + + jmp player_main_return + + +player_main_return: + ; Write back register current value + ldx _CurrentAYRegister + lda _PlayerRegCurrentValue + sta _PlayerRegValues,x + + ; Move to the next register buffer + inc _RegisterBufferHigh + rts + + + + +DecompressFragment: + lda _PlayerVbl ; Either 0 or 128 at this point else we have a problem... + sta _BufferFrameOffset + +decompressFragmentLoop: + +player_copy_packed_loop: + ; Check packing method + ldx #1 + jsr _ReadBits + + ldx _DecodedResult + bne PlayerNotCopyLast + +UnchangedRegister: + + ; We just copy the current value 128 times + lda _RegisterBufferHigh ; highpart of buffer adress + register number + sta __auto_player_copy_last+2 + + ldx _BufferFrameOffset ; Value between 00 and 7f + lda _PlayerRegCurrentValue ; Value to copy +__auto_player_copy_last: + sta _PlayerBuffer,x + + inc _BufferFrameOffset + + + +player_return: + + ; Check end of loop + lda _BufferFrameOffset + and #127 + bne decompressFragmentLoop + + jmp player_main_return + + +PlayerNotCopyLast: + ; Check packing method + ldx #1 + jsr _ReadBits + + ldx _DecodedResult + beq DecompressWithOffset + +ReadNewRegisterValue: + ; Read new register value (variable bit count) + ldx _CurrentAYRegister + lda _PlayerRegBits,x + tax + jsr _ReadBits + ldx _DecodedResult + stx _PlayerRegCurrentValue + + ; Copy to stream + lda _RegisterBufferHigh ; highpart of buffer adress + register number + sta __auto_player_read_new+2 + + ldx _BufferFrameOffset ; Value between 00 and 7f + lda _PlayerRegCurrentValue ; New value to write +__auto_player_read_new: + sta _PlayerBuffer,x + + inc _BufferFrameOffset + jmp player_return + + + + +DecompressWithOffset: + + ; Read Offset (0 to 127) + ldx #7 + jsr _ReadBits + + lda _RegisterBufferHigh ; highpart of buffer adress + register number + sta __auto_write+2 ; Write adress + sta __auto_read+2 ; Read adress + + ; Compute wrap around offset... + lda _BufferFrameOffset ; between 0 and 255 + clc + adc _DecodedResult ; + Offset Between 00 and 7f + sec + sbc #128 ; -128 + tay + + ; Read count (7 bits) + ldx #7 + jsr _ReadBits + + inc _DecodedResult ; 1 to 129 + + + ldx _BufferFrameOffset + +player_copy_offset_loop: + +__auto_read: + lda _PlayerBuffer,y ; Y for reading + iny + +__auto_write: + sta _PlayerBuffer,x ; X for writing + + inx + dec _DecodedResult + bne player_copy_offset_loop + + stx _BufferFrameOffset + sta _PlayerRegCurrentValue + + jmp player_return + + + + +; +; Size in bits of each PSG register +; +_PlayerRegBits: + ; Chanel A Frequency + .byt 8 + .byt 4 + + ; Chanel B Frequency + .byt 8 + .byt 4 + + ; Chanel C Frequency + .byt 8 + .byt 4 + + ; Chanel sound generator + .byt 5 + + ; select + .byt 8 + + ; Volume A,B,C + .byt 5 + .byt 5 + .byt 5 + + ; Wave period + .byt 8 + .byt 8 + + ; Wave form + .byt 8 + +_PlayerCount: + .res 1,0 ; must be equal to 0 +_MusicPlaying: + .res 1,0 ; must be equal to 0 + + +_PlayerRegValues: +_RegisterChanAFrequency: + ; Chanel A Frequency + .res 1,8 + .res 1,4 + +_RegisterChanBFrequency: + ; Chanel B Frequency + .res 1,8 + .res 1,4 + +_RegisterChanCFrequency: + ; Chanel C Frequency + .res 1,8 + .res 1,4 + +_RegisterChanNoiseFrequency: + ; Chanel sound generator + .res 1,5 + + ; select + .res 1,8 + + ; Volume A,B,C +_RegisterChanAVolume: + .res 1,5 +_RegisterChanBVolume: + .res 1,5 +_RegisterChanCVolume: + .res 1,5 + + ; Wave period + .res 1,8 + .res 1,8 + + ; Wave form + .res 1,8 + +_PlayerRegCurrentValue: + .res 1,0 +_DoNothing: + rts + +_InterruptCallBack_3: ; Used by the music player + jsr _DoNothing ; Transformed to "jsr _Mym_PlayFrame" -> 12 cycles + +; jsr MiniScrollLoading ; -> 338 cycles + + pla + tay + pla + tax + pla + + rti +_PlayerBuffer: + .res 256*14 ; About 3.5 kilobytes somewhere in memory, we put the music file in overlay memory + +.endproc + diff --git a/libsrc/telestrat/open.s b/libsrc/telestrat/open.s new file mode 100644 index 000000000..9455855da --- /dev/null +++ b/libsrc/telestrat/open.s @@ -0,0 +1,33 @@ + .export _open + .import addysp,popax + .importzp sp,tmp2,tmp3,tmp1 + + + .include "telestrat.inc" + .include "errno.inc" + .include "fcntl.inc" + +; int open (const char* name, int flags, ...); /* May take a mode argument */ +.proc _open +; Throw away any additional parameters passed through the ellipsis + + dey ; Parm count < 4 shouldn't be needed to be... + dey ; ...checked (it generates a c compiler warning) + dey + dey + beq parmok ; Branch if parameter count ok + jsr addysp ; Fix stack, throw away unused parameters + +; Parameters ok. Pop the flags and save them into tmp3 + +parmok: jsr popax ; Get flagss + sta tmp3 ; save flags +; Get the filename from stack and parse it. Bail out if is not ok + + jsr popax ; Get name + ldy tmp3 ; Get flags again + BRK_TELEMON XOPEN ; launch primitive ROM + rts +.endproc + + \ No newline at end of file diff --git a/libsrc/telestrat/orixhdr.s b/libsrc/telestrat/orixhdr.s new file mode 100644 index 000000000..c2a65d9fa --- /dev/null +++ b/libsrc/telestrat/orixhdr.s @@ -0,0 +1,35 @@ +; +; By Debrune Jérôme <jede@oric.org> + +; + + ; 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__ + + +; ------------------------------------------------------------------------ +; Orix header see http://orix.oric.org/doku.php?id=orix:header for specs + +.segment "ORIXHDR" + + .byte $01, $00 ; + + .byte "ori" + + .byte $01 ; version + .byte $00,%00000000 ; 6502 only + .byte $00,$00 ; Extends + .byte $00,$00 ; OS + + .byte $00 ; reserved + .byte $00 ; auto + + .word __BASHEAD_START__ ; Address of start of file + .word __MAIN_LAST__ - 1 ; Address of end of file + .word __BASHEAD_START__ ; Address of start of file + diff --git a/libsrc/telestrat/oserrlist.s b/libsrc/telestrat/oserrlist.s new file mode 100644 index 000000000..8ec41de6d --- /dev/null +++ b/libsrc/telestrat/oserrlist.s @@ -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/telestrat/oserror.s b/libsrc/telestrat/oserror.s new file mode 100644 index 000000000..37c9bd7fc --- /dev/null +++ b/libsrc/telestrat/oserror.s @@ -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/telestrat/print.s b/libsrc/telestrat/print.s new file mode 100644 index 000000000..9942e3ad9 --- /dev/null +++ b/libsrc/telestrat/print.s @@ -0,0 +1,16 @@ +; jede jede@oric.org 2017-01-22 + +; void print (char * str); + .export _print + .import popax + .importzp tmp1 + .include "telestrat.inc" + +.proc _print + stx tmp1 + ldy tmp1 + BRK_TELEMON XWSTR0 + rts +.endproc + + diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s new file mode 100644 index 000000000..4bccbfc48 --- /dev/null +++ b/libsrc/telestrat/read.s @@ -0,0 +1,43 @@ +; +; jede jede@oric.org 2017-01-22 +; + + + .FEATURE c_comments,labels_without_colons,pc_assignment, loose_char_term + .export _read + + .import popax + + .include "zeropage.inc" + .include "telestrat.inc" + +; int read (int fd, void* buf, unsigned count); + +.proc _read + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf + + sta PTR_READ_DEST + stx PTR_READ_DEST+1 + sta ptr2 ; in order to calculate nb of bytes read + stx ptr2+1 ; + + ; jsr popax ; fp pointer don't care in this version + + lda ptr1 ; + ldy ptr1+1 ; + BRK_TELEMON XFREAD ; calls telemon30 routine + ; compute nb of bytes read + lda PTR_READ_DEST+1 + sec + sbc ptr2+1 + tax + lda PTR_READ_DEST + sec + sbc ptr2 + ; Here A and X contains number of bytes read + rts +.endproc + + diff --git a/libsrc/telestrat/scrsize.s b/libsrc/telestrat/scrsize.s new file mode 100644 index 000000000..75bd456ce --- /dev/null +++ b/libsrc/telestrat/scrsize.s @@ -0,0 +1,19 @@ +; +; 2003-04-13, Ullrich von Bassewitz +; 2013-07-16, Greg King +; +; Screen size variables +; + + .export screensize + .include "telestrat.inc" + +.proc screensize + + ldx #SCREEN_XSIZE + ldy #SCREEN_YSIZE + rts + +.endproc + + diff --git a/libsrc/telestrat/sound.s b/libsrc/telestrat/sound.s new file mode 100644 index 000000000..3718debd4 --- /dev/null +++ b/libsrc/telestrat/sound.s @@ -0,0 +1,42 @@ +; +; jede jede@oric.org 2017-01-22 + + .export _kbdclick1,_oups,_ping,_explode,_shoot,_zap + .include "telestrat.inc" + +.proc _kbdclick1 + ldx #<sound_bip_keyboard + ldy #>sound_bip_keyboard + BRK_TELEMON XSONPS + rts +sound_bip_keyboard: + .byte $1f,$00,$00,$00,$00,$00,$00,$3e,$10,$00,$00,$1f,$00,$00 +.endproc + +.proc _explode + BRK_TELEMON XEXPLO + rts +.endproc + +.proc _oups + BRK_TELEMON XOUPS + rts +.endproc + +.proc _ping + BRK_TELEMON XPING + rts +.endproc + +.proc _shoot + BRK_TELEMON XSHOOT + rts +.endproc + +.proc _zap + BRK_TELEMON XZAP + rts +.endproc + + + diff --git a/libsrc/telestrat/sysuname.s b/libsrc/telestrat/sysuname.s new file mode 100644 index 000000000..51af1d8fe --- /dev/null +++ b/libsrc/telestrat/sysuname.s @@ -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/telestrat/write.s b/libsrc/telestrat/write.s new file mode 100644 index 000000000..1c0190531 --- /dev/null +++ b/libsrc/telestrat/write.s @@ -0,0 +1,79 @@ +; +; jede jede@oric.org 2017-01-22 + + .export _write + .import popax + .importzp ptr1, ptr2, ptr3, tmp1 + + .include "telestrat.inc" + +; int write (int fd, const void* buf, int count); +.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 + + ; if fd=0001 then it stdout + + + cpx #0 + beq next + jmp L1 +next: + cmp #1 + beq L1 + + ; Here it's a file opened + lda ptr1 + sta PTR_READ_DEST + lda ptr1+1 + sta PTR_READ_DEST+1 + lda ptr3 + ldy ptr3+1 + BRK_TELEMON XFWRITE + rts + + +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_TELEMON XWR0 ; Macro send char to screen (channel 0 in telemon terms) + lda #$0D ; return to the beggining of the line + BRK_TELEMON XWR0 ; Macro ; + + + ldx #$0D +L3: + BRK_TELEMON XWR0 ; Macro + + inc ptr1 + bne L1 + inc ptr1+1 + jmp L1 + +; No error, return count + +L9: lda ptr3 + ldx ptr3+1 + rts + +.endproc + + diff --git a/src/ca65/main.c b/src/ca65/main.c index 1e0c5996f..471afbbe8 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -291,12 +291,8 @@ static void SetSys (const char* Sys) NewSymbol ("__ATMOS__", 1); break; - case TGT_TELEMON24: - NewSymbol ("__TELEMON24__", 1); - break; - - case TGT_TELEMON30: - NewSymbol ("__TELEMON30__", 1); + case TGT_TELESTRAT: + NewSymbol ("__TELESTRAT__", 1); break; case TGT_NES: diff --git a/src/cc65/main.c b/src/cc65/main.c index b0c9261fe..872f66aff 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -243,14 +243,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__ATMOS__", 1); break; - case TGT_TELEMON24: - DefineNumericMacro ("__TELEMON24__", 1); + case TGT_TELESTRAT: + DefineNumericMacro ("__TELESTRAT__", 1); break; - case TGT_TELEMON30: - DefineNumericMacro ("__TELEMON30__", 1); - break; - case TGT_NES: DefineNumericMacro ("__NES__", 1); break; diff --git a/src/common/target.c b/src/common/target.c index 67e4ad51b..219afc809 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -171,8 +171,7 @@ static const TargetEntry TargetMap[] = { { "sim6502", TGT_SIM6502 }, { "sim65c02", TGT_SIM65C02 }, { "supervision", TGT_SUPERVISION }, - { "telemon24", TGT_TELEMON24 }, - { "telemon30", TGT_TELEMON30 }, + { "telestrat", TGT_TELESTRAT }, { "vic20", TGT_VIC20 }, }; #define MAP_ENTRY_COUNT (sizeof (TargetMap) / sizeof (TargetMap[0])) @@ -201,8 +200,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "geos-apple", CPU_65C02, BINFMT_BINARY, CTNone }, { "lunix", CPU_6502, BINFMT_O65, CTNone }, { "atmos", CPU_6502, BINFMT_BINARY, CTNone }, - { "telemon24", CPU_6502, BINFMT_BINARY, CTNone }, - { "telemon30", CPU_6502, BINFMT_BINARY, CTNone }, + { "telestrat", CPU_6502, BINFMT_BINARY, CTNone }, { "nes", CPU_6502, BINFMT_BINARY, CTNone }, { "supervision", CPU_65SC02, BINFMT_BINARY, CTNone }, { "lynx", CPU_65SC02, BINFMT_BINARY, CTNone }, diff --git a/src/common/target.h b/src/common/target.h index 68c0953fe..7409505bf 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -73,8 +73,7 @@ typedef enum { TGT_GEOS_APPLE, TGT_LUNIX, TGT_ATMOS, - TGT_TELEMON24, - TGT_TELEMON30, + TGT_TELESTRAT, TGT_NES, TGT_SUPERVISION, TGT_LYNX,