https://wikiti.brandonw.net/api.php?action=feedcontributions&user=Timendus&feedformat=atom
WikiTI - User contributions [en]
2024-03-28T22:20:43Z
User contributions
MediaWiki 1.23.5
https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives
83Plus:OS:TIOS Alternatives
2007-12-13T11:15:51Z
<p>Timendus: /* List of alternative operating systems */</p>
<hr />
<div>[[Category:83Plus:OS_Information|TIOS Alternatives]]<br />
<br />
== Introduction ==<br />
<br />
The TIOS is the official, standard operating system for the<br />
TI-83+ series of calculators (including the TI-83+ and TI-84+ and the respective Silver<br />
Editions of each). The vast majority of programs for such calculators run on top of the<br />
TIOS, or on top of some subsidiary program that runs from the TIOS, and thereby implicitly<br />
depend on its functionality. However, some people have researched writing alternative<br />
operating system code and sending it to the calculator to replace the TIOS.<br />
Several such alternative operating systems are available on the Web, though most of them are<br />
not yet at a production stage of development.<br />
<br />
== List of alternative operating systems ==<br />
<br />
*[http://michaelv.org/programs/calcs/ceptic.php CEPTIC], by Michael Vincent: a Control and Execute Program for TI Calculators. The current version of CEPTIC only runs on the TI-83+ SE, but can be modified to run on the TI-83+. Assembly source is available, but actually using the OS in its present state is considered non-practical, and the project has been discontinued for various reasons.<br />
*[http://pongos.sourceforge.net/ PongOS], by FloppusMaximus: a simple, proof-of-concept system whose namesake feature is an embedded Pong game. Some other system utilities, mostly inspired by Dan Englender's Calcsys, are also available in PongOS, including a hex editor, memory mover (with flash capability), flash sector eraser, and port monitor. Link support is not provided.<br />
*[[Vera]], by several members of different programming groups: dubbed the "true calc lover's OS". Vera is intended to consist of a very basic kernel which can be easily extended to include desired features. The original Vera project has been abandoned, but it has been picked up again in a different form, and seems to be progressing nicely.<br />
*[http://www.ticalc.org/archives/files/fileinfo/349/34973.html CSX], by Sean McLaughlin: a command-line-based operating system with a screen layout similar to that of the TI-89 calculators. CSX provides a simple filesystem, send and receive of files over a link cable, hex editing of memory, and running of Z80 machine code programs.<br />
*[http://forum.reaktix.com/viewtopic.php?pid=11 Nostalgy], originally by [http://katpro.xiondigital.net/ XDG Kat-Productions], now developed by [http://reaktix.com/ Reaktix Software]: an unofficial project started by XDG Kat-Productions, abandoned when the two main developers became involved in other projects, and later resumed by [[User:Saibot84|Saibot84]]. A pre-alpha working demo is available. Development is still underway, albeit extremely slowly. It currently features a task-switching environment inspired by [http://www.radicalsoft.org/ Radical Software's] TSE, although linking and a file system are not yet implemented.<br />
*[http://lifos.sourceforge.net/ LIFOS], by Peter Marheine: a similar project to Vera, designed to offer minimal functionality (linking, memory management, and machine code execution) in its basic incarnation but meant to be easily extended into a near-seamless infrastructure of various functions. Currently (5-28-07) in early alpha stages. The name comes from the memory allocation system (LIFO OS, or LIFOs).<br />
*[http://www.ticalc.org/archives/files/fileinfo/398/39863.html BAOS], by Erik van 't Wout: Basic Assembly Operating System. (excerpt from the ReadMe:) Being developed "to be a real Operating System for TI-83+ based calculators. It should turn your calculator into a real computer, which can be used for mathematical purposes, but not as main target. Additional functionality should be easy to implement trough the use of libraries."</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Vera
Vera
2007-12-13T11:13:25Z
<p>Timendus: </p>
<hr />
<div>Vera is an attempt at writing a community-based operating system for flashable Texas Instruments calculators using the z80 processor. A first forum oriented attempt at this project was abandoned, but the project was [http://kvince83.tengun.net/maxboard/viewtopic.php?t=2524 picked up again] and is now mailing list oriented.<br />
<br />
This is an animated screenshot of an interrupt test, showing the splash screen, the console font, and the ability to hook applications into interrupts:<br />
<br />
http://timendus.student.utwente.nl/docs/pics/vera_interrupts.gif<br />
<br />
== External links ==<br />
<br />
* [http://vera.sourceforge.net/ Former Vera project]<br />
* [http://vera.timendus.com/ Vera development wiki]<br />
* [http://groups.google.com/group/calc-lovers/topics?hl=en Mailing list archives]</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Vera
Vera
2007-12-13T11:09:58Z
<p>Timendus: </p>
<hr />
<div>Vera is an attempt at writing a community-based operating system for flashable Texas Instruments calculators using the z80 processor. A first forum oriented attempt at this project was abandoned, but the project was [http://kvince83.tengun.net/maxboard/viewtopic.php?t=2524 picked up again] and is now mailing list oriented.<br />
<br />
== External links ==<br />
<br />
* [http://vera.sourceforge.net/ Former Vera project]<br />
* [http://vera.timendus.com/ Vera development wiki]<br />
* [http://groups.google.com/group/calc-lovers/topics?hl=en Mailing list archives]</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Beginners
Beginners
2007-12-13T10:53:23Z
<p>Timendus: /* Getting emulator software */</p>
<hr />
<div>Starting with assembly programming can be quite a pain. You need to find yourself an assembler, preferably a nice emulator, and lots of documentation. While this wiki provides you with a lot of documentation, and many [[TI websites|websites]] and [[:Category:Teams|teams]] can provide you with links to good tutorials, people keep asking the community how to get started. I hope this will answer their questions once and for all :)<br />
<br />
== Emulating ==<br />
<br />
=== Getting a ROM dump ===<br />
<br />
Getting a ROM dump is the essential first step of running a calculator emulator. Because the calculator operating system is intellectual property of Texas Instruments, it is illegal to distribute ROM images, but you can extract your own ROM image from your own calculator under "Fair use" regulations.<br />
<br />
To download your own ROM image from your calculator to your PC you need some software. Your options are:<br />
* [http://www.ticalc.org/archives/files/fileinfo/373/37341.html Rom8x]<br />
* Uhm... need to find some more ;)<br />
<br />
Ticalc.org has an excellent howto page on getting a ROM image [http://www.ticalc.org/programming/emulators/romdump.html here]. Or, you could do a Google search on something like TI83.rom, and see what comes up.<br />
<br />
Of course, if you want to develop an operating system yourself (if you're working on [[Vera]] for example) you don't need a ROM image.<br />
<br />
=== Choice of Emulator ===<br />
<br />
The second step is selecting an [[:Category:Emulators|emulator]] that suits you:<br />
<br />
* [[:Emulators:Virtual TI|Virtual TI]] - Long time favourite, but mostly because it was the only one<br />
* [[:Emulators:PindurTI|PindurTI]] - Very basic emulator with very good hardware emulation and animated screenshotting<br />
* [[:Emulators:Wabbitemu|WabbitEmu]] - The newest breed, with a very nice GUI and a port to MAC, Linux is on the way<br />
<br />
There are a few more, but these are the most popular. Virtual TI's emulation is quite poor compared to the others, but the others are still under development. It's usually best to have a few around so that in case you run into something unexpected you can get a second opinion from another emulator.<br />
<br />
Please read the respective README's on how to get your ROM image running in these emulators.<br />
<br />
== Assembler ==<br />
<br />
An assembler -- sometimes referred to as "compiler", though formally it is no such thing -- can assemble your source code into binaries for the Z80 processor that runs our calculators.<br />
<br />
=== Choice of assembler ===<br />
<br />
Once again, you'll have to make a choice. A few years ago, things were simple; there was TASM and nothing else, so you'd use TASM. These days we have TASM, Brass and Spasm (and probably a few others), all with subtle little differences and improvements, but the latter two are clearly superior to the old TASM. Brass is written in C# for .NET, and can run under Linux using Mono. Spasm was written in C, and has been ported to Linux(?).<br />
<br />
* Brass [http://kvince83.tengun.net/maxboard/viewforum.php?f=25 subforum], [http://benryves.com/bin/brass/ website] and [http://benryves.com/bin/brass/Brass.exe latest download]<br />
* Spasm [http://www.revsoft.org/phpBB2/viewforum.php?f=21 subforum] and [http://www.revsoft.org/wabbitspasm.zip latest download]<br />
<br />
=== Assembling source to binaries ===<br />
<br />
The syntax for assembling input.asm to either output.8xp or output.83p is:<br />
<br />
Brass.exe input.asm output.8?p<br />
<br />
or<br />
<br />
wabbitspasm input.asm output.8?p<br />
<br />
Both modern assemblers can output files in TI calculator specific formats, which TASM can not. Spasm will do this automatically(?), and in the case of Brass you can [http://benryves.com/bin/brass/directives/binarymode.htm specify] your output format in your source code:<br />
<br />
.binarymode TI8X<br />
<br />
=== Include files ===<br />
<br />
Include files contain predefined memory locations, locations of TI OS calls and macro's to make your life easier. Strictly speaking you don't need any, but without them you'll have to type in every address by hand (and either memorize them or look them up each time).<br />
<br />
Depending on which calculator model and which shell you want to develop for (Ion, MirageOS, Venus, etc) you'll need to get some include files. For the sake of demonstration (and because most other shells can run them) we'll be choosing Ion for now. Developing for Ion also has the advantage that your applications can be compiled for Ti-83 and Ti-83+ (and relatives) without changing the source. Go [http://www.ticalc.org/archives/files/fileinfo/130/13058.html here] and download the zip file, which contains ion.inc. You'll also need the shell itself for testing.<br />
<br />
=== Hello World ===<br />
<br />
Save this file as hello.asm in the same directory as your assembler, for ease of testing:<br />
<br />
<pre>#define TI83P ; If you want to compile for Ti-83+ family calcs<br />
;#define TI83 ; If you want to compile for Ti-83, don't uncomment both!<br />
<br />
#include "ion.inc"<br />
<br />
; ====<br />
; Start of Ion header<br />
<br />
#ifdef TI83P<br />
.binarymode TI8X ; only required if you use Brass<br />
.org progstart-2<br />
.db $BB,$6D<br />
#else<br />
.binarymode TI83 ; only required if you use Brass<br />
.org progstart<br />
#endif<br />
ret<br />
jr nc,main<br />
title:<br />
.db "Hello World Test",0<br />
<br />
; End of Ion header<br />
; ====<br />
<br />
main:<br />
; Program execution starts here:<br />
bcall(_homeup)<br />
ld hl,string<br />
bcall(_puts)<br />
bcall(_getkey)<br />
ret<br />
<br />
string:<br />
.db "Hello world!",0<br />
</pre><br />
<br />
Open a console, cd to your directory and issue:<br />
<br />
<your assembler> hello.asm hello.8xp<br />
<br />
Now load hello.8xp into your emulator and try to run it with Ion.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Beginners
Beginners
2007-12-13T10:39:41Z
<p>Timendus: </p>
<hr />
<div>Starting with assembly programming can be quite a pain. You need to find yourself an assembler, preferably a nice emulator, and lots of documentation. While this wiki provides you with a lot of documentation, and many [[TI websites|websites]] and [[:Category:Teams|teams]] can provide you with links to good tutorials, people keep asking the community how to get started. I hope this will answer their questions once and for all :)<br />
<br />
== Emulating ==<br />
<br />
=== Getting a ROM dump ===<br />
<br />
Getting a ROM dump is the essential first step of running a calculator emulator. Because the calculator operating system is intellectual property of Texas Instruments, it is illegal to distribute ROM images, but you can extract your own ROM image from your own calculator under "Fair use" regulations.<br />
<br />
To download your own ROM image from your calculator to your PC you need some software. Your options are:<br />
* [http://www.ticalc.org/archives/files/fileinfo/373/37341.html Rom8x]<br />
* Uhm... need to find some more ;)<br />
<br />
Ticalc.org has an excellent howto page on getting a ROM image [http://www.ticalc.org/programming/emulators/romdump.html here]. Or, you could do a Google search on something like TI83.rom, and see what comes up.<br />
<br />
Of course, if you want to develop an operating system yourself (if you're working on [[Vera]] for example) you don't need a ROM image.<br />
<br />
=== Getting emulator software ===<br />
<br />
The second step is selecting an [[:Category:Emulators|emulator]] that suits you:<br />
<br />
* [[:Emulators:Virtual TI|Virtual TI]] - Long time favourite, but mostly because it was the only one<br />
* [[:Emulators:PindurTI|PindurTI]] - Very basic emulator with very good hardware emulation and animated screenshotting<br />
* [[:Emulators:Wabbitemu|WabbitEmu]] - The newest breed, with a very nice GUI and a port to MAC, Linux is on the way<br />
<br />
There are a few more, but these are the most popular. Virtual TI's emulation is quite poor compared to the others, but the others are still under development. It's usually best to have a few around so that in case you run into something unexpected you can get a second opinion from another emulator.<br />
<br />
Please read the respective README's on how to get your ROM image running in these emulators.<br />
<br />
== Assembler ==<br />
<br />
An assembler -- sometimes referred to as "compiler", though formally it is no such thing -- can assemble your source code into binaries for the Z80 processor that runs our calculators.<br />
<br />
=== Choice of assembler ===<br />
<br />
Once again, you'll have to make a choice. A few years ago, things were simple; there was TASM and nothing else, so you'd use TASM. These days we have TASM, Brass and Spasm (and probably a few others), all with subtle little differences and improvements, but the latter two are clearly superior to the old TASM. Brass is written in C# for .NET, and can run under Linux using Mono. Spasm was written in C, and has been ported to Linux(?).<br />
<br />
* Brass [http://kvince83.tengun.net/maxboard/viewforum.php?f=25 subforum], [http://benryves.com/bin/brass/ website] and [http://benryves.com/bin/brass/Brass.exe latest download]<br />
* Spasm [http://www.revsoft.org/phpBB2/viewforum.php?f=21 subforum] and [http://www.revsoft.org/wabbitspasm.zip latest download]<br />
<br />
=== Assembling source to binaries ===<br />
<br />
The syntax for assembling input.asm to either output.8xp or output.83p is:<br />
<br />
Brass.exe input.asm output.8?p<br />
<br />
or<br />
<br />
wabbitspasm input.asm output.8?p<br />
<br />
Both modern assemblers can output files in TI calculator specific formats, which TASM can not. Spasm will do this automatically(?), and in the case of Brass you can [http://benryves.com/bin/brass/directives/binarymode.htm specify] your output format in your source code:<br />
<br />
.binarymode TI8X<br />
<br />
=== Include files ===<br />
<br />
Include files contain predefined memory locations, locations of TI OS calls and macro's to make your life easier. Strictly speaking you don't need any, but without them you'll have to type in every address by hand (and either memorize them or look them up each time).<br />
<br />
Depending on which calculator model and which shell you want to develop for (Ion, MirageOS, Venus, etc) you'll need to get some include files. For the sake of demonstration (and because most other shells can run them) we'll be choosing Ion for now. Developing for Ion also has the advantage that your applications can be compiled for Ti-83 and Ti-83+ (and relatives) without changing the source. Go [http://www.ticalc.org/archives/files/fileinfo/130/13058.html here] and download the zip file, which contains ion.inc. You'll also need the shell itself for testing.<br />
<br />
=== Hello World ===<br />
<br />
Save this file as hello.asm in the same directory as your assembler, for ease of testing:<br />
<br />
<pre>#define TI83P ; If you want to compile for Ti-83+ family calcs<br />
;#define TI83 ; If you want to compile for Ti-83, don't uncomment both!<br />
<br />
#include "ion.inc"<br />
<br />
; ====<br />
; Start of Ion header<br />
<br />
#ifdef TI83P<br />
.binarymode TI8X ; only required if you use Brass<br />
.org progstart-2<br />
.db $BB,$6D<br />
#else<br />
.binarymode TI83 ; only required if you use Brass<br />
.org progstart<br />
#endif<br />
ret<br />
jr nc,main<br />
title:<br />
.db "Hello World Test",0<br />
<br />
; End of Ion header<br />
; ====<br />
<br />
main:<br />
; Program execution starts here:<br />
bcall(_homeup)<br />
ld hl,string<br />
bcall(_puts)<br />
bcall(_getkey)<br />
ret<br />
<br />
string:<br />
.db "Hello world!",0<br />
</pre><br />
<br />
Open a console, cd to your directory and issue:<br />
<br />
<your assembler> hello.asm hello.8xp<br />
<br />
Now load hello.8xp into your emulator and try to run it with Ion.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Beginners
Beginners
2007-12-13T10:24:30Z
<p>Timendus: /* Hello World */</p>
<hr />
<div>Starting with assembly programming can be quite a pain. You need to find yourself an assembler, preferably a nice emulator, and lots of documentation. While this wiki provides you with a lot of documentation, and many [[TI websites|websites]] and [[:Category:Teams|teams]] can provide you with links to good tutorials, people keep asking the community how to get started. I hope this will answer their questions once and for all :)<br />
<br />
== Emulating ==<br />
<br />
=== Getting a ROM dump ===<br />
<br />
Getting a ROM dump is the essential first step of running a calculator emulator. Because the calculator operating system is intellectual property of Texas Instruments, it is illegal to distribute ROM images, but you can extract your own ROM image from your own calculator under "Fair use" regulations.<br />
<br />
To download your own ROM image from your calculator to your PC you need some software. Your options are:<br />
* [http://www.ticalc.org/archives/files/fileinfo/373/37341.html Rom8x]<br />
* Uhm... need to find some more ;)<br />
<br />
Ticalc.org has an excellent howto page on getting a ROM image [http://www.ticalc.org/programming/emulators/romdump.html here]. Or, you could do a Google search on something like TI83.rom, and see what comes up.<br />
<br />
Of course, if you want to develop an operating system yourself (if you're working on [[Vera]] for example) you don't need a ROM image.<br />
<br />
=== Getting emulator software ===<br />
<br />
The second step is selecting an [[:Category:Emulators|emulator]] that suits you:<br />
<br />
* [[:Emulators:Virtual TI|Virtual TI]] - Long time favourite, but mostly because it was the only one<br />
* [[:Emulators:PindurTI|PindurTI]] - Very basic emulator with very good hardware emulation and animated screenshotting<br />
* [[:Emulators:Wabbitemu|WabbitEmu]] - The newest breed, with a very nice GUI and a port to MAC, Linux is on the way<br />
<br />
There are a few more, but these are the most popular. Virtual TI's emulation is quite poor compared to the others, but the others are still under development. It's usually best to have a few around so that in case you run into something unexpected you can get a second opinion from another emulator.<br />
<br />
Please read the respective README's on how to get your ROM image running in these emulators.<br />
<br />
== Assembler ==<br />
<br />
An assembler -- sometimes referred to as "compiler", though formally it is no such thing -- can assemble your source code into binaries for the Z80 processor that runs our calculators.<br />
<br />
=== Choice of assembler ===<br />
<br />
Once again, you'll have to make a choice. A few years ago, things were simple; there was TASM and nothing else, so you'd use TASM. These days we have TASM, Brass and Spasm (and probably a few others), all with subtle little differences and improvements, but the latter two are clearly superior to the old TASM. Brass is written in C# for .NET, and can run under Linux using Mono. Spasm was written in C, and has been ported to Linux(?).<br />
<br />
* Brass [http://kvince83.tengun.net/maxboard/viewforum.php?f=25 subforum], [http://benryves.com/bin/brass/ website] and [http://benryves.com/bin/brass/Brass.exe latest download]<br />
* Spasm [http://www.revsoft.org/phpBB2/viewforum.php?f=21 subforum] and [http://www.revsoft.org/wabbitspasm.zip latest download]<br />
<br />
=== Assembling source to binaries ===<br />
<br />
The syntax for assembling input.asm to either output.8xp or output.83p is:<br />
<br />
Brass.exe input.asm output.8?p<br />
<br />
or<br />
<br />
wabbitspasm input.asm output.8?p<br />
<br />
Both modern assemblers can output files in TI calculator specific formats, which TASM can not. Spasm will do this automatically(?), and in the case of Brass you can [http://benryves.com/bin/brass/directives/binarymode.htm specify] your output format in your source code:<br />
<br />
.binarymode TI8X<br />
<br />
=== Include files ===<br />
<br />
Whelp!<br />
<br />
=== Hello World ===<br />
<br />
Save this file as hello.asm in the same directory as your assembler, for ease of testing:<br />
<br />
<pre>.binarymode TI8X ; only required if you use Brass<br />
<br />
#include "ti83plus.inc"<br />
#include "ion.inc"<br />
<br />
; ====<br />
; Start of Ion header<br />
<br />
#ifdef TI83P<br />
.org progstart-2<br />
.db $BB,$6D<br />
#else<br />
.org progstart<br />
#endif<br />
ret<br />
jr nc,main<br />
title:<br />
.db "Hello World Test",0<br />
<br />
; End of Ion header<br />
; ====<br />
<br />
main:<br />
; Program execution starts here:<br />
ld hl,string<br />
bcall(_puts)<br />
bcall(_getkey)<br />
ret<br />
<br />
string:<br />
.db "Hello world!",0<br />
</pre><br />
<br />
Open a console, cd to your directory and issue:<br />
<br />
<your assembler> hello.asm hello.8xp<br />
<br />
Now load hello.8xp into your emulator and try to run it with Ion.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Beginners
Beginners
2007-12-13T10:15:24Z
<p>Timendus: /* Choice of assembler */</p>
<hr />
<div>Starting with assembly programming can be quite a pain. You need to find yourself an assembler, preferably a nice emulator, and lots of documentation. While this wiki provides you with a lot of documentation, and many [[TI websites|websites]] and [[:Category:Teams|teams]] can provide you with links to good tutorials, people keep asking the community how to get started. I hope this will answer their questions once and for all :)<br />
<br />
== Emulating ==<br />
<br />
=== Getting a ROM dump ===<br />
<br />
Getting a ROM dump is the essential first step of running a calculator emulator. Because the calculator operating system is intellectual property of Texas Instruments, it is illegal to distribute ROM images, but you can extract your own ROM image from your own calculator under "Fair use" regulations.<br />
<br />
To download your own ROM image from your calculator to your PC you need some software. Your options are:<br />
* [http://www.ticalc.org/archives/files/fileinfo/373/37341.html Rom8x]<br />
* Uhm... need to find some more ;)<br />
<br />
Ticalc.org has an excellent howto page on getting a ROM image [http://www.ticalc.org/programming/emulators/romdump.html here]. Or, you could do a Google search on something like TI83.rom, and see what comes up.<br />
<br />
Of course, if you want to develop an operating system yourself (if you're working on [[Vera]] for example) you don't need a ROM image.<br />
<br />
=== Getting emulator software ===<br />
<br />
The second step is selecting an [[:Category:Emulators|emulator]] that suits you:<br />
<br />
* [[:Emulators:Virtual TI|Virtual TI]] - Long time favourite, but mostly because it was the only one<br />
* [[:Emulators:PindurTI|PindurTI]] - Very basic emulator with very good hardware emulation and animated screenshotting<br />
* [[:Emulators:Wabbitemu|WabbitEmu]] - The newest breed, with a very nice GUI and a port to MAC, Linux is on the way<br />
<br />
There are a few more, but these are the most popular. Virtual TI's emulation is quite poor compared to the others, but the others are still under development. It's usually best to have a few around so that in case you run into something unexpected you can get a second opinion from another emulator.<br />
<br />
Please read the respective README's on how to get your ROM image running in these emulators.<br />
<br />
== Assembler ==<br />
<br />
An assembler -- sometimes referred to as "compiler", though formally it is no such thing -- can assemble your source code into binaries for the Z80 processor that runs our calculators.<br />
<br />
=== Choice of assembler ===<br />
<br />
Once again, you'll have to make a choice. A few years ago, things were simple; there was TASM and nothing else, so you'd use TASM. These days we have TASM, Brass and Spasm (and probably a few others), all with subtle little differences and improvements, but the latter two are clearly superior to the old TASM. Brass is written in C# for .NET, and can run under Linux using Mono. Spasm was written in C, and has been ported to Linux(?).<br />
<br />
* Brass [http://kvince83.tengun.net/maxboard/viewforum.php?f=25 subforum], [http://benryves.com/bin/brass/ website] and [http://benryves.com/bin/brass/Brass.exe latest download]<br />
* Spasm [http://www.revsoft.org/phpBB2/viewforum.php?f=21 subforum] and [http://www.revsoft.org/wabbitspasm.zip latest download]<br />
<br />
=== Assembling source to binaries ===<br />
<br />
The syntax for assembling input.asm to either output.8xp or output.83p is:<br />
<br />
Brass.exe input.asm output.8?p<br />
<br />
or<br />
<br />
wabbitspasm input.asm output.8?p<br />
<br />
Both modern assemblers can output files in TI calculator specific formats, which TASM can not. Spasm will do this automatically(?), and in the case of Brass you can [http://benryves.com/bin/brass/directives/binarymode.htm specify] your output format in your source code:<br />
<br />
.binarymode TI8X<br />
<br />
=== Include files ===<br />
<br />
Whelp!<br />
<br />
=== Hello World ===<br />
<br />
Save this file as hello.asm:<br />
<br />
<pre>#include "headers.inc"<br />
<br />
.org PROGSTART<br />
<br />
ld hl,string<br />
bcall(_puts)<br />
bcall(_getkey)<br />
ret<br />
<br />
string:<br />
.db "Hello world!",0<br />
</pre></div>
Timendus
https://wikiti.brandonw.net/index.php?title=Beginners
Beginners
2007-12-13T10:06:10Z
<p>Timendus: </p>
<hr />
<div>Starting with assembly programming can be quite a pain. You need to find yourself an assembler, preferably a nice emulator, and lots of documentation. While this wiki provides you with a lot of documentation, and many [[TI websites|websites]] and [[:Category:Teams|teams]] can provide you with links to good tutorials, people keep asking the community how to get started. I hope this will answer their questions once and for all :)<br />
<br />
== Emulating ==<br />
<br />
=== Getting a ROM dump ===<br />
<br />
Getting a ROM dump is the essential first step of running a calculator emulator. Because the calculator operating system is intellectual property of Texas Instruments, it is illegal to distribute ROM images, but you can extract your own ROM image from your own calculator under "Fair use" regulations.<br />
<br />
To download your own ROM image from your calculator to your PC you need some software. Your options are:<br />
* [http://www.ticalc.org/archives/files/fileinfo/373/37341.html Rom8x]<br />
* Uhm... need to find some more ;)<br />
<br />
Ticalc.org has an excellent howto page on getting a ROM image [http://www.ticalc.org/programming/emulators/romdump.html here]. Or, you could do a Google search on something like TI83.rom, and see what comes up.<br />
<br />
Of course, if you want to develop an operating system yourself (if you're working on [[Vera]] for example) you don't need a ROM image.<br />
<br />
=== Getting emulator software ===<br />
<br />
The second step is selecting an [[:Category:Emulators|emulator]] that suits you:<br />
<br />
* [[:Emulators:Virtual TI|Virtual TI]] - Long time favourite, but mostly because it was the only one<br />
* [[:Emulators:PindurTI|PindurTI]] - Very basic emulator with very good hardware emulation and animated screenshotting<br />
* [[:Emulators:Wabbitemu|WabbitEmu]] - The newest breed, with a very nice GUI and a port to MAC, Linux is on the way<br />
<br />
There are a few more, but these are the most popular. Virtual TI's emulation is quite poor compared to the others, but the others are still under development. It's usually best to have a few around so that in case you run into something unexpected you can get a second opinion from another emulator.<br />
<br />
Please read the respective README's on how to get your ROM image running in these emulators.<br />
<br />
== Assembler ==<br />
<br />
An assembler -- sometimes referred to as "compiler", though formally it is no such thing -- can assemble your source code into binaries for the Z80 processor that runs our calculators.<br />
<br />
=== Choice of assembler ===<br />
<br />
Once again, you'll have to make a choice. A few years ago, things were simple; there was TASM and nothing else, so you'd use TASM. These days we have TASM, Brass and Spasm, all with subtle little differences and improvements, but the latter two are clearly superior to the old TASM. Brass is written in C# for .NET, and can run under Linux using Mono. Spasm was written in C, and has been ported to Linux(?).<br />
<br />
* Brass [http://kvince83.tengun.net/maxboard/viewforum.php?f=25 subforum], [http://benryves.com/bin/brass/ website] and [http://benryves.com/bin/brass/Brass.exe latest download]<br />
* Spasm [http://www.revsoft.org/phpBB2/viewforum.php?f=21 subforum] and [http://www.revsoft.org/wabbitspasm.zip latest download]<br />
<br />
=== Assembling source to binaries ===<br />
<br />
The syntax for assembling input.asm to either output.8xp or output.83p is:<br />
<br />
Brass.exe input.asm output.8?p<br />
<br />
or<br />
<br />
wabbitspasm input.asm output.8?p<br />
<br />
Both modern assemblers can output files in TI calculator specific formats, which TASM can not. Spasm will do this automatically(?), and in the case of Brass you can [http://benryves.com/bin/brass/directives/binarymode.htm specify] your output format in your source code:<br />
<br />
.binarymode TI8X<br />
<br />
=== Include files ===<br />
<br />
Whelp!<br />
<br />
=== Hello World ===<br />
<br />
Save this file as hello.asm:<br />
<br />
<pre>#include "headers.inc"<br />
<br />
.org PROGSTART<br />
<br />
ld hl,string<br />
bcall(_puts)<br />
bcall(_getkey)<br />
ret<br />
<br />
string:<br />
.db "Hello world!",0<br />
</pre></div>
Timendus
https://wikiti.brandonw.net/index.php?title=Beginners
Beginners
2007-12-13T09:48:32Z
<p>Timendus: </p>
<hr />
<div>Starting with assembly programming can be quite a problem. You need to find yourself an assembler, preferably a nice emulator, and lots of documentation. While this wiki provides you with a lot of documentation, and many [[TI websites|websites]] and [[:Category:Teams|teams]] can provide you with links to good tutorials, people keep asking the community how to get started.<br />
<br />
== Emulating ==<br />
<br />
=== Getting a ROM dump ===<br />
<br />
Getting a ROM dump is the essential first step of running a calculator emulator. Because the calculator operating system is intellectual property of Texas Instruments, it is illegal to distribute ROM images, but you can extract your own ROM image from your own calculator under "Fair use" regulations.<br />
<br />
To download your own ROM image from your calculator to your PC you need some software. Your options are:<br />
* [http://www.ticalc.org/archives/files/fileinfo/373/37341.html Rom8x]<br />
* Uhm... need to find some more ;)<br />
<br />
Ticalc.org has an excellent howto page on getting a ROM image [http://www.ticalc.org/programming/emulators/romdump.html here]. Or, you could do a Google search on something like TI83.rom, and see what comes up.<br />
<br />
Of course, if you want to develop an operating system yourself (if you're working on [[Vera]] for example) you don't need a ROM image.<br />
<br />
=== Getting emulator software ===<br />
<br />
The second step is selecting an [[:Category:Emulators|emulator]] that suits you:<br />
<br />
* [[:Emulators:Virtual TI|Virtual TI]] - Long time favourite, but mostly because it was the only one<br />
* [[:Emulators:PindurTI|PindurTI]] - Very basic emulator with very good hardware emulation and animated screenshotting<br />
* [[:Emulators:Wabbitemu|WabbitEmu]] - The newest breed, with a very nice GUI and a port to MAC, Linux is on the way<br />
<br />
There are a few more, but these are the most popular. Virtual TI's emulation is quite poor compared to the others, but the others are still under development. It's usually best to have a few around so that in case you run into something unexpected you can get a second opinion from another emulator.<br />
<br />
Please read the respective README's on how to get your ROM image running in these emulators.<br />
<br />
== Assembler ==<br />
<br />
An assembler -- sometimes referred to as "compiler", though formally it is no such thing -- can assemble your source code into binaries for the Z80 processor that runs our calculators.<br />
<br />
=== Choice of assembler ===<br />
<br />
Once again, you'll have to make a choice. A few years ago, things were simple; there was TASM and nothing else, so you'd use TASM. These days we have TASM, Brass and Spasm, all with subtle little differences and improvements, but the latter two are clearly superior to the old TASM. Brass is written in C# for .NET, and can run under Linux using Mono. Spasm was written in C, and has been ported to Linux.<br />
<br />
* Brass [http://benryves.com/bin/brass/ website] and [http://benryves.com/bin/brass/Brass.exe download]<br />
* Brass version 3 (beta): [http://benryves.com/bin/brass3/ website and downloads]<br />
* Spasm [http://www.revsoft.org/phpBB2/viewforum.php?f=21 subforum] and [http://www.revsoft.org/wabbitspasm.zip download]</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Calculator_Documentation
Calculator Documentation
2007-12-13T09:16:50Z
<p>Timendus: /* TI Community */</p>
<hr />
<div>== TI-83 (Regular) ==<br />
<br />
* [[:Category:83:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]<br />
* [[:Category:83:Flags:By_Name|Flags]]<br />
* [[:Category:83:OS_Information|General OS Documentation]]<br />
* [[:Category:83:Ports:By_Address|Ports]]<br />
* [[:Category:83:RAM:By_Name|RAM Areas]]<br />
<br />
== TI-83 Plus Family ==<br />
<br />
* [[:Category:83Plus:BCALLs:By_Name|B_CALLs (System Entrypoints)]]<br />
* [[:Category:83Plus:Flags:By_Name|Flags]]<br />
* [[:Category:83Plus:OS_Information|General OS Documentation]]<br />
* [[:Category:83Plus:Hooks:By_Name|Hooks]]<br />
* [[:Category:83Plus:Ports:By_Address|Ports]]<br />
* [[:Category:83Plus:RAM:By_Name|RAM Areas]]<br />
* [[:Category:83Plus:Software|Software Documentation]]<br />
* [[:Category:83Plus:Basic|TI-83+ Basic]]<br />
<br />
== M68K Family ==<br />
<br />
* [[:Category:68k:Ports:By_Address|Ports]]<br />
<br />
== Z80 programming ==<br />
* [[Meta-tutorial]]<br />
* [[:Category:Z80_Routines|Z80 Routines]]<br />
* [[Z80 Instruction Set]]<br />
* [[Good programming practices]]<br />
* [[Programming under Unix-like operating systems]]<br />
<br />
== Software ==<br />
* [[Notable programs]]<br />
* [[:Category:Emulators|Emulators]]<br />
* [[83Plus:OS:TIOS Alternatives|TIOS Alternatives]]<br />
* [[Experiments]]<br />
<br />
== Linking ==<br />
* [[Link cables]]<br />
<br />
== TI Community ==<br />
<br />
* [[Beginners|Beginners manual]]<br />
* [[History of the TI Z80 community]]<br />
* [[:Category:Teams|Programming Teams]]<br />
* [[TI websites]]<br />
<br />
== Contributing ==<br />
<br />
Please read our page on [[Contributing]] before you start contributing to WikiTI.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=User:Timendus
User:Timendus
2007-10-03T14:01:31Z
<p>Timendus: </p>
<hr />
<div>Hello folks...<br><br />
If you would want to contact me for whatever reason: [mailto:mail@timendus.com mail@timendus.com] will do the trick :)</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Programming_under_Unix-like_operating_systems
Programming under Unix-like operating systems
2007-09-24T10:03:11Z
<p>Timendus: /* Emulators */</p>
<hr />
<div>Here are the different tools at your disposal:<br />
<br />
= General Overviews =<br />
<br />
==Emulators==<br />
* [http://lpg.ticalc.org/prj_tilem/ TilEm]<br />
* VirtualTI through wine<br />
* [[PindurTI]] through Wine<br />
* [[PindurTI]] in non-interactive mode (with or without [http://kvince83.tengun.net/maxboard/viewtopic.php?t=2466 PTI frontend])<br />
<br />
==Syntax highlighting==<br />
Several editors have native or extensional support for editing Z80 assembly code with syntax highlighting:<br />
* Kwrite and Kate can be made to syntax-highlight Z80 assembly with [http://www.ticalc.org/archives/files/fileinfo/391/39178.html the appropriate definition file]. The file must be placed in /usr/share/apps/katepart/syntax .<br />
* SciTE and Emacs both have native modes for assembly code. For Emacs, one must make sure to turn on Font Lock mode as well.<br />
* The [http://www.revsoft.org/phpBB2/viewforum.php?f=25 Z80 Assembly IDE] has simple syntax highlighting built-in.<br />
* Users of Vim and WLA DX can use [http://sigma.unitedti.org/files/misc/z80.vim.bz2 this syntax file].<br />
<br />
== Assembling ==<br />
<br />
=== SPASM ===<br />
<br />
'''Author''': Spencer Putt<br />
<br />
'''Home Page''': [http://www.revsoft.org/phpBB2/viewforum.php?f=21 http://www.revsoft.org/phpBB2/viewforum.php?f=21]<br />
<br />
SPASM is a portable Z80 assembler released under the GPL. Its distinguishing features are extremely fast assembly and powerful macro support. It can directly output .83p and .8xp binary files.<br />
<br />
spasm foo.asm foo.83p<br />
<br />
=== tpasm ===<br />
<br />
'''Author''': Todd Squires<br />
<br />
'''Home page''': [http://www.sqrt.com/ http://www.sqrt.com/]<br />
<br />
tpasm is a Free (GPL) assembler which supports the Z80 as well as the 6805, 6809, 68HC11, 6502, Sunplus, 8051, PIC, and AVR. It uses syntax very similar to ZMASM.<br />
<br />
tpasm 1.2 does not support binary file output, but you can use ''objcopy'' (from the GNU binutils package) to convert its Intel Hex output into binary; e.g.<br />
<br />
tpasm foo.asm -o intel foo.hex -l foo.lst<br />
objcopy -I ihex foo.hex -O binary foo.bin<br />
<br />
=== ASxxxx ===<br />
<br />
'''Author''': Alan R. Baldwin<br />
<br />
'''Home page''': [http://shop-pdp.kent.edu/ashtml/asxxxx.htm http://shop-pdp.kent.edu/ashtml/asxxxx.htm]<br />
<br />
ASxxxx is a freeware assembler which supports the Z80 along with a large variety of other processors. It more closely resembles a modern PC assembler than a typical Z80 assembler, as it assembles each file into a relocatable object format which can then be linked with other files to produce the complete program. The linking is done by a separate program called ASlink (included with the package.)<br />
<br />
To assemble and link a simple program you might do something like<br />
<br />
asz80 -plogff foo.asm<br />
aslink -u -b _CODE=0x9D95 -i foo.ihx foo.rel<br />
objcopy -I ihex foo.ihx -O binary foo.bin<br />
<br />
Note that the syntax is rather different from that of most Z80 assemblers. The important differences are<br />
* Immediate values are marked with #.<br />
* Indexed memory access is written as N(ix) rather than (ix+N).<br />
* Constants are written differently: 0xAA, 0hAA, or $$AA for hexadecimal; 0o252, 0q252, or $&252 for octal; 0b10101010 or $%10101010 for binary.<br />
<br />
For example,<br />
ld hl,#str_hello<br />
add a,3(ix)<br />
xor #0x0f<br />
<br />
There is also a modified version of ASxxxx distributed with the [http://sdcc.sf.net/ Small Device C Compiler]. This version is, if anything, more confusing to use due to the poorly-documented changes made by the SDCC team.<br />
<br />
=== TASM ===<br />
<br />
'''Author''': Thomas N. Anderson<br />
<br />
'''Home page''': [http://home.comcast.net/~tasm/ http://home.comcast.net/~tasm/]<br />
<br />
TASM is a shareware assembler which also supports a variety of processors.<br />
<br />
There are several ways that you can use tasm under Linux:<br />
* The TASM 3.1 for Linux shareware release is still in the wild. To use this you will need to enable "a.out" support in your kernel (it may be available as the module ''binfmt_aout''.) You will also need to obtain the ancient Linux libc version 4 (''not'' glibc) which can be found [http://ftp.linux.org.uk/pub/linux/libc/ here].<br />
* You can use TASM 3.2 for Windows with [http://www.winehq.com Wine].<br />
* You can pay the $40 and compile it yourself on the platform of your choice.<br />
<br />
=== Brass ===<br />
'''Author''': benryves<br />
<br />
'''Home page''': [http://benryves.com/bin/brass/ http://benryves.com/bin/brass/]<br />
<br />
Brass runs under Linux thanks to Mono.<br />
<br />
=== Zasm ===<br />
'''Author''': Steven Deprez<br />
<br />
'''Home page''': [http://lpg.ticalc.org/prj_zasm/index.html http://lpg.ticalc.org/prj_zasm/index.html]<br />
<br />
Zasm is an open source assembler that is almost fully compatible with Tasm and ZDS.<br />
<br />
=== WLA DX ===<br />
'''Author''': Ville Helin<br />
<br />
'''Home page''': [http://users.tkk.fi/~vhelin/wla.html http://users.tkk.fi/~vhelin/wla.html]<br />
<br />
WLA DX is another open-source (GNU GPL) cross-assembler with a primary focus on targeting video game consoles. It is a high-powered assembler with a wide variety of features such as, e.g. separate compilation, POSIX-like file I/O, and code sectioning. However it is cumbersome when assembling small projects, and semantics are unorthodox compared to other assemblers. (~ is the XOR operator, macro arguments are passed by value, etc.) Furthermore, development appears to have ceased since January 2006.<br />
<br />
WLA DX has had an influence in the development of Brass.<br />
<br />
=== Pasmo ===<br />
'''Author''': Juli&aacute;n Albo<br />
<br />
'''Home page''': [http://www.arrakis.es/~ninsesabe/pasmo/ http://www.arrakis.es/~ninsesabe/pasmo/]<br />
<br />
Pasmo is another standalone Z80 cross-assembler with basic macro support, but without the ability to generate<br />
relocatable object files. It is licensed under the GNU GPL, and exists as the package <tt>pasmo</tt> in the Debian pool.<br />
<br />
=== z80asm ===<br />
'''Author''': Bas Wijnen<br />
<br />
'''Home page''': [http://savannah.nongnu.org/projects/z80asm/ http://savannah.nongnu.org/projects/z80asm/]<br />
<br />
z80asm is a standalone Z80 cross-assembler similar in nature to Pasmo, in that it has macro support but cannot generate relocatable object files. It too is licensed under the GNU GPL (version 2 or later), and exists as the package <tt>z80asm</tt> in the Debian pool.<br />
<br />
=== GNU as ===<br />
'''Author''': the GNU binutils team<br />
<br />
'''Home page''': [http://www.gnu.org/software/binutils/ http://www.gnu.org/software/binutils/]<br />
<br />
Starting from version 2.17, the GNU assembler, part of the binutils package, is capable of cross-assembling Z80 code when configured for it at compile-time, such as with <tt>--target=z80-unknown-coff</tt>. binutils includes a powerful assembler and linker both, along with various utilities for handling object files, such as objcopy and objdump; for Z80, COFF is used for relocatable objects, with raw binary and Intel hex formats also supported. While this is probably one of the more powerful tools in the list for Z80 development, it also requires more work to start with, as the traditional way to get a cross-assembling binutils is to compile it oneself. Being a GNU package, binutils is naturally licensed under the GNU GPL (version 2 or later). Prepackaged binary versions of binutils are very common, but usually do not have cross-assembling capability.<br />
<br />
==Sending programs to the calc==<br />
* [http://www.ticalc.org/archives/files/fileinfo/374/37480.html TiLP-II] (requires [http://www.ticalc.org/archives/files/fileinfo/374/37479.html tilibs])<br />
* [http://www.ticalc.org/archives/files/fileinfo/75/7588.html titranz] : commandline tool, only works for TI-83/TI-83+<br />
<br />
= FreeBSD =<br />
Much of the aforementioned software should compile independently without problem or with minor tweaking under FreeBSD, but it is best to utilize the ports collection whenever possible. Unfortunately, the current state of calculator-related software in the FreeBSD Ports Collection is lacking in variety.<br />
<br />
* Development<br />
{| width="75%" class="wikitable" style="margin: 1em auto 1em auto"<br />
|- align="left"<br />
!Port !! Current Version !! Location<br />
|-<br />
|tpasm || 1.2_1 || /devel/tpasm<br />
|-<br />
|z80asm || 0.1_1 || /devel/z80-asm<br />
|-<br />
|TI-GCC || 0.96.b8 || /devel/tigcc<br />
|-<br />
|libtifiles2 || 1.0.1 || /devel/libtifiles2<br />
|}<br />
<br />
* Communications<br />
{| width="75%" class="wikitable" style="margin: 1em auto 1em auto"<br />
|- align="left"<br />
!Port !! Current Version !! Location<br />
|-<br />
|TiLP-II || 1.01 || /comms/tilp2<br />
|-<br />
|libticables2 || 1.0.2 || /comms/libticables2<br />
|-<br />
|libticalcs2 || 1.0.1 || /comms/libticalcs2<br />
|}<br />
<br />
* Converters<br />
{| width="75%" class="wikitable" style="margin: 1em auto 1em auto"<br />
|- align="left"<br />
!Port !! Current Version !! Location<br />
|-<br />
|libticonv || 1.0.0 || /converters/libticonv<br />
|}<br />
<br />
* Emulation<br />
{| width="75%" class="wikitable" style="margin: 1em auto 1em auto"<br />
|- align="left"<br />
!Port !! Current Version !! Location<br />
|-<br />
| TIEmu 2 || 2.08 || /emulators/tiemu2<br />
|}<br />
<br />
= Mac OS X =<br />
(Note that all of these assesments were made on a MacBook running 10.4.9 Intel. Mileage may vary on other versions and of course the Darwine stuff won't work on PPC.)<br />
<br />
TiLP-II is known to compile and work properly with SilverLink and Direct USB cables with the 83+, 84+SE, and 89Ti, so there is no reason to believe it will not work with the other calculators. TI Connect X works well enough on Intel Macs even though it is not officially supported, however it seems to be more strict with the format of .8xk files than TiLP or TI Connect (Windows).<br />
<br />
Brass works in Mono. Wabbitspasm compiles and works properly. ZDS works in Darwine.<br />
<br />
TilEm compiles but seems to have some issues with multiple ROM versions. It is unclear to me if this is a problem with the build or TilEm itself. PindurTI is somewhat usable in Darwine: You must use the send.exe utility to send the ROM image, then it will emulate properly. However, it makes extensive use of the F-keys, including the Exposé ones. Remapping the Exposé keys is the only solution. TI FLASH Debugger runs in Darwine but the calculator windows are unskinned: You must either use the keyboard or click blindly in the window. The display output is fine, and other debugger windows appear to function properly. VirtualTI (2.5) should run OK after putting the ROM files somewhere Darwine knows about (I was lazy).<br />
<br />
= Other Unixes =<br />
<!--Replace with specific distributions as appropriate --><br />
This section is a stub. Please add it it.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00
83Plus:Ports:00
2007-07-03T10:20:44Z
<p>Timendus: /* Data transfer */</p>
<hr />
<div>[[Category:83Plus:Ports:By_Address|00 - Link]] [[Category:83Plus:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link<br />
<br />
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).<br />
<br />
=== Read Values ===<br />
* Bits 0 and 1: These bits indicate the state of the link port's two lines. If a bit is set that indicates the line is high, and if it is reset that indicates the line is low. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high. When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low. Bit 0 is the tip and bit 1 is the ring.<br />
*'''83+ only:''' Bit 2: Set means link receive assist is active.<br />
*'''83+ only:''' Bit 3: Set when link assist has received a complete byte. The only way to reset this bit is to read [[83Plus:Ports:05|port 5]].<br />
* Bit 4 and 5: Bits 4 and 5 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.<br />
<br />
=== Write Values ===<br />
* Bits 0 and 1: Setting a bit will pull the line low. Resetting a bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low). Remember a low line will read as a bit being reset, but when writing setting a bit brings the line low.<br />
*'''83+ only:''' Bit 2: Set this bit to enable the link receive assist. After setting this bit, poll port 0 until bit 3 is high, at which point read from [[83Plus:Ports:05|port 5]] to get the byte.<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background of input routines. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. Even when the other calculator is running an assembly program that uses the getkey romcall. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :).<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol] and [http://bell.timendus.com/ Timendus' Bell library].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial] (note that this deals with the TI-83, not the 83 Plus, where the the hardware is [[83:Ports:00|somewhat different]].)<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
* [http://bell.timendus.com/ Bell] and [http://clap.timendus.com/ CLAP] projects<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<nowiki> ld a,0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,3 ; Set both low<br />
out (0),a</nowiki><br />
<br />
=== Receiving/Reading ===<br />
<nowiki> in a,(0) ; Get link port value<br />
<br />
bit 0,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 1,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00
83Plus:Ports:00
2007-07-03T10:19:04Z
<p>Timendus: /* Data transfer */</p>
<hr />
<div>[[Category:83Plus:Ports:By_Address|00 - Link]] [[Category:83Plus:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link<br />
<br />
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).<br />
<br />
=== Read Values ===<br />
* Bits 0 and 1: These bits indicate the state of the link port's two lines. If a bit is set that indicates the line is high, and if it is reset that indicates the line is low. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high. When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low. Bit 0 is the tip and bit 1 is the ring.<br />
*'''83+ only:''' Bit 2: Set means link receive assist is active.<br />
*'''83+ only:''' Bit 3: Set when link assist has received a complete byte. The only way to reset this bit is to read [[83Plus:Ports:05|port 5]].<br />
* Bit 4 and 5: Bits 4 and 5 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.<br />
<br />
=== Write Values ===<br />
* Bits 0 and 1: Setting a bit will pull the line low. Resetting a bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low). Remember a low line will read as a bit being reset, but when writing setting a bit brings the line low.<br />
*'''83+ only:''' Bit 2: Set this bit to enable the link receive assist. After setting this bit, poll port 0 until bit 3 is high, at which point read from [[83Plus:Ports:05|port 5]] to get the byte.<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background of input routines. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. Even when the other calculator is running an assembly program that uses the getkey romcall. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :).<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol] and [http://bell.timendus.com/ Timendus' Bell library].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
* [http://bell.timendus.com/ Bell] and [http://clap.timendus.com/ CLAP] projects<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<nowiki> ld a,0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,3 ; Set both low<br />
out (0),a</nowiki><br />
<br />
=== Receiving/Reading ===<br />
<nowiki> in a,(0) ; Get link port value<br />
<br />
bit 0,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 1,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Ports:00
83:Ports:00
2007-07-01T23:14:22Z
<p>Timendus: /* Data transfer */</p>
<hr />
<div>[[Category:83:Ports:By_Address|00 - Link]] [[Category:83:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link port and Rom page swapping<br />
<br />
This port has two functions. It controls the calculator's serial link port and together with [[83:Ports:02]], the ROM page that is swapped into 4000h-7FFFh.<br />
<br />
=== Read Values ===<br />
* Bit 0 and 1: The inverse of the values output to the link port.<br />
* Bit 2 and 3: These two bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
* Bit 4: Bit 3 of the current ROM page. See also [[83:Ports:02]].<br />
* Bit 5-7: Zero<br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bit 4: Bit 3 of the current ROM page. See also [[83:Ports:02]].<br />
* Bit 6 and 7: These bits should be 1 for unknown reasons.<br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background of input routines. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. Even when the other calculator is running an assembly program that uses the getkey romcall. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :).<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol] and [http://bell.timendus.com/ Timendus' Bell library].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
* [http://bell.timendus.com/ Bell] and [http://clap.timendus.com/ CLAP] projects<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<nowiki>ld a,$D0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,$D2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,$D1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,$D3 ; Set both low<br />
out (0),a</nowiki><br />
<br />
=== Receiving/Reading ===<br />
<nowiki>in a,(0) ; Get the link port value<br />
<br />
bit 2,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 3,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=Experiments
Experiments
2006-11-20T09:25:04Z
<p>Timendus: </p>
<hr />
<div>Here is a place for experiments, proof of concepts, surprising stuff made on TI-83(+):<br />
<br />
* [http://joepnet.com/hosted/maxcoderz/phpBB2/viewtopic.php?t=624&start=0 QuadPlayer - Four channel sound] by Benryves : stereo sound with 4 tracks on TI-83(+)<br />
* [http://www.revsoft.org/phpBB2/viewtopic.php?t=200 8bit/32khz sound] by Jim E on 84+SE.<br />
* [http://www.ticalc.org/archives/files/fileinfo/341/34172.html 7-level greyscale]<br />
* [http://clap.timendus.com/ CLAP - Linking more than two calculators]<br />
* [[3D engines]]<br />
* using LCD RAM as temporary RAM<br />
<br />
{{stub}}</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives
83Plus:OS:TIOS Alternatives
2006-07-15T22:22:28Z
<p>Timendus: </p>
<hr />
<div>[[Category:83Plus:OS_Information|TIOS Alternatives]]<br />
<br />
== Introduction ==<br />
<br />
The TIOS is the official, standard operating system for the<br />
TI-83+ series of calculators (including the TI-83+ and TI-84+ and the respective Silver<br />
Editions of each). The vast majority of programs for such calculators run on top of the<br />
TIOS, or on top of some subsidiary program that runs from the TIOS, and thereby implicitly<br />
depend on its functionality. However, some people have researched writing alternative<br />
operating system code and sending it to the calculator to replace the TIOS.<br />
Several such alternative operating systems are available on the Web, though most of them are<br />
not yet at a production stage of development.<br />
<br />
== List of alternative operating systems ==<br />
<br />
*[http://michaelv.org/programs/calcs/ceptic.php CEPTIC], by Michael Vincent: a Control and Execute Program for TI Calculators. The current version of CEPTIC only runs on the TI-83+ SE, but can be modified to run on the TI-83+. Assembly source is available, but actually using the OS in its present state is considered non-practical, and the project has been discontinued for various reasons.<br />
*[http://pongos.sourceforge.net/ PongOS], by FloppusMaximus: a simple, proof-of-concept system whose namesake feature is an embedded Pong game. Some other system utilities, mostly inspired by Dan Englender's Calcsys, are also available in PongOS, including a hex editor, memory mover (with flash capability), flash sector eraser, and port monitor. Link support is not provided.<br />
*[http://vera.sourceforge.net Vera], by several members of different programming groups: dubbed the "true calc lover's OS" on the website. Vera is intended to consist of a very basic kernel which can be easily extended to include desired features. Vera is still in the planning stage as of 2006-03-27.<br />
*[http://www.ticalc.org/archives/files/fileinfo/349/34973.html CSX], by Sean McLaughlin: a command-line-based operating system with a screen layout similar to that of the TI-89 calculators. CSX provides a simple filesystem, send and receive of files over a link cable, hex editing of memory, and running of Z80 machine code programs.<br />
*Nostalgy, by XDG Kat-Productions: an unofficial project by certain members of [http://katpro.xiondigital.net/ XDG Kat-Productions]. No working demo is available, but development is reportedly still underway, albeit very slowly.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00
83Plus:Ports:00
2006-04-27T14:30:50Z
<p>Timendus: /* Ti-OS interference */</p>
<hr />
<div>[[Category:83Plus:Ports:By_Address|00 - Link]] [[Category:83Plus:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link<br />
<br />
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).<br />
<br />
=== Read Values ===<br />
* Bits 0 and 1: The low 2 bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
*'''83+ only:''' Bit 2: Set means link receive assist is active.<br />
*'''83+ only:''' Bit 3: Set when link assist has received a complete byte. The only way to reset this bit is to read [[83Plus:Ports:05|port 5]].<br />
* Bit 4 and 5: Bits 4 and 5 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.<br />
<br />
=== Write Values ===<br />
* Bits 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
*'''83+ only:''' Bit 2: Set this bit to enable the link receive assist. After setting this bit, poll port 0 until bit 3 is high, at which point read from [[83Plus:Ports:05|port 5]] to get the byte.<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background of input routines. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. Even when the other calculator is running an assembly program that uses the getkey romcall. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :).<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<nowiki> ld a,0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,3 ; Set both low<br />
out (0),a</nowiki><br />
<br />
=== Receiving/Reading ===<br />
<nowiki> in a,(0) ; Get link port value<br />
<br />
bit 0,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 1,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Ports:00
83:Ports:00
2006-04-27T14:30:30Z
<p>Timendus: /* Ti-OS interference */</p>
<hr />
<div>[[Category:83:Ports:By_Address|00 - Link]] [[Category:83:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link port and Rom page swapping<br />
<br />
This port has two functions. It controls the calculator's serial link port and together with [[83:Ports:02]], the ROM page that is swapped into 4000h-7FFFh.<br />
<br />
=== Read Values ===<br />
* Bit 0 and 1: The inverse of the values output to the link port.<br />
* Bit 2 and 3: These two bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
* Bit 4: Bit 3 of the current ROM page. See also [[83:Ports:02]].<br />
* Bit 5-7: Zero<br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bit 4: Bit 3 of the current ROM page. See also [[83:Ports:02]].<br />
* Bit 6 and 7: These bits should be 1 for unknown reasons.<br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background of input routines. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. Even when the other calculator is running an assembly program that uses the getkey romcall. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :).<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<nowiki>ld a,$D0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,$D2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,$D1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,$D3 ; Set both low<br />
out (0),a</nowiki><br />
<br />
=== Receiving/Reading ===<br />
<nowiki>in a,(0) ; Get the link port value<br />
<br />
bit 2,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 3,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00
83Plus:Ports:00
2005-04-28T10:28:06Z
<p>Timendus: /* Data transfer */</p>
<hr />
<div>[[Category:83Plus:Ports:By_Address|00 - Link]] [[Category:83Plus:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link<br />
<br />
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).<br />
<br />
=== Read Values ===<br />
* Bit 0 and 1: The low 2 bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
* Bit 5 and 6: Bits 5 and 6 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.<br />
* Bit 2: I have absolutely no idea what this means or does... <br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bit 2: I have absolutely no idea what this means or does, except that any change of this bit causes both lines to be released, and writing with this bit set causes bit 2 to read 1, and the next write causes it to read 0 and both lines are released.<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Bit 2 ===<br />
As mentioned bit 2's effect is unknown. An example of it's behavior follows:<br />
<nowiki>Start, read 03.<br />
Write 02, read 01.<br />
Write 07, read 07.<br />
Write 07, read 03.<br />
Write 07, read 07.<br />
Write 00, read 03.<br />
Write 09, read 07.<br />
Write 01, read 03.</nowiki><br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :). It's unclear if this is only when the other calculator is in the homescreen, or if it is part of the default interrupt routine at $0038.<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<pre>ld a,0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,3 ; Set both low<br />
out (0),a</pre><br />
<br />
=== Receiving/Reading ===<br />
<pre>in a,(0) ; Get the link port value<br />
<br />
bit 0,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 1,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</pre></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Ports:00
83:Ports:00
2005-04-28T10:26:59Z
<p>Timendus: /* Data transfer */</p>
<hr />
<div>[[Category:83:Ports:By_Address|00 - Link]] [[Category:83:Ports:By_Name|Link]]<br />
== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
'''Function:''' Link port and Rom page swapping<br />
<br />
This port has two functions. It controls the calculator's serial link port and together with [[83:Ports:02]], the ROM page that is swapped into 4000h-7FFFh.<br />
<br />
=== Read Values ===<br />
* Bit 0 and 1: The inverse of the values output to the link port.<br />
* Bit 2 and 3: These two bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
* Bit 4: Bit 3 of the current ROM page. See also [[83:Ports:02]].<br />
* Bit 5-7: Zero<br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bit 4: Bit 3 of the current ROM page. See also [[83:Ports:02]].<br />
* Bit 6 and 7: These bits should be 1 for unknown reasons.<br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :). It's unclear if this is only when the other calculator is in the homescreen, or if it is part of the default interrupt routine at $0038.<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
Other useful information on linking in general:<br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
* [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]<br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<nowiki>ld a,$D0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,$D2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,$D1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,$D3 ; Set both low<br />
out (0),a</nowiki><br />
<br />
=== Receiving/Reading ===<br />
<nowiki>in a,(0) ; Get the link port value<br />
<br />
bit 2,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 3,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM:8265
83:RAM:8265
2005-03-28T11:09:15Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' APD Buffer<br />
<br />
'''Memory Address:''' 8265h<br />
<br />
'''Length:''' 768 bytes.<br />
<br />
This area of memory is only used when the calculator APDs, so it's very useful as a data buffer.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM:858F
83:RAM:858F
2005-03-28T11:07:44Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' statVars<br />
<br />
'''Memory Address:''' 858Fh<br />
<br />
'''Length:''' 531 bytes.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM:80C9
83:RAM:80C9
2005-03-28T11:06:58Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' textShadow<br />
<br />
'''Memory Address:''' 80C9h<br />
<br />
'''Length:''' 128 bytes.<br />
<br />
This area of memory is used to store the contents of the home screen.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM:8E29
83:RAM:8E29
2005-03-28T11:05:04Z
<p>Timendus: Who came up with those dumb comments..?</p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' plotSScreen<br />
<br />
'''Memory Address:''' 8E29h<br />
<br />
'''Length:''' 768 bytes.<br />
<br />
This area of memory stores the contents of the graph screen.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM:8E29
83:RAM:8E29
2005-03-28T11:04:42Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' plotSScreen<br />
<br />
'''Memory Address:''' 8E29h<br />
<br />
'''Length:''' 768 bytes.<br />
<br />
This area of memory stores the contents of the graph screen.<br />
<br />
== Comments ==<br />
This value can be recalculated by talking to the people inside the calculator (or that's what my math teacher says.)</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:RAM:9340
83Plus:RAM:9340
2005-03-28T11:04:21Z
<p>Timendus: sorry :)</p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' plotSScreen<br />
<br />
'''Memory Address:''' 9340h<br />
<br />
'''Length:''' 768 bytes.<br />
<br />
This area of memory stores the contents of the graph screen.<br />
<br />
== Comments ==<br />
<br />
The contents of this area can be copied to the LCD with [[83Plus:BCALLs:486A|GrBufCpy]] or cleared with [[83Plus:BCALLs:4BD0|GrBufClr]].</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:RAM:9340
83Plus:RAM:9340
2005-03-28T11:02:57Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' plotSScreen<br />
<br />
'''Memory Address:''' 9340h<br />
<br />
'''Length:''' 768 bytes.<br />
<br />
This area of memory stores the contents of the graph screen.</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM:8039
83:RAM:8039
2005-03-28T11:00:38Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' OP Registers<br />
<br />
'''Memory Address:''' 8039h<br />
<br />
'''Length:''' 66 bytes<br />
<br />
In this RAM area the value of op1 to op6 is stored</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM
83:RAM
2005-03-28T10:58:34Z
<p>Timendus: </p>
<hr />
<div>This is a list of all the TI-83 RAM areas and what they are used for.<br />
<br />
Please read our page on [[Contributing]] before editing these pages!<br />
----<br />
<br />
* [[83:RAM:8039|8039]] - OP Registers<br />
* [[83:RAM:80C9|80C9]] - textShadow<br />
* [[83:RAM:858F|858F]] - statVars<br />
* [[83:RAM:8E29|8E29]] - plotSScreen<br />
* [[83:RAM:8265|8265]] - APD Buffer</div>
Timendus
https://wikiti.brandonw.net/index.php?title=User:Timendus
User:Timendus
2005-03-27T17:55:18Z
<p>Timendus: </p>
<hr />
<div>Hello folks...<br><br />
If you would want to contact me for whatever reason: [mailto:Timendus@hotmail.com Timendus@hotmail.com] will do the trick :)</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:RAM
83:RAM
2005-03-27T17:38:41Z
<p>Timendus: </p>
<hr />
<div>This is a list of all the TI-83 RAM areas and what they are used for.<br />
<br />
Please read our page on [[Contributing]] before editing these pages!<br />
----<br />
<br />
* 8265 - saferam1 (apd buffer) - 768 bytes<br />
* 858F - saferam2 (statram) - 531 bytes<br />
* 80C9 - saferam3 (textmem) - 128 bytes<br />
* 8039 - saferam4 (ops) - 66 bytes</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Ports:00
83:Ports:00
2005-03-27T17:35:23Z
<p>Timendus: /* Write Values */</p>
<hr />
<div>== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
This port controls the calculator's serial link port.<br />
<br />
=== Read Values ===<br />
* Bit 2 and 3: These two bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bits 4, 6 and 7: These bits should be 1 for unknown reasons<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :). It's unclear if this is only when the other calculator is in the homescreen, or if it is part of the default interrupt routine at $0038.<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
<p>Other useful information on linking in general:<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
<br><br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<pre>ld a,$D0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,$D2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,$D1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,$D3 ; Set both low<br />
out (0),a</pre><br />
<br />
=== Receiving/Reading ===<br />
<pre>in a,(0) ; Get the link port value<br />
<br />
bit 2,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 3,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</pre></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Ports:00
83:Ports:00
2005-03-27T17:34:32Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
This port controls the calculator's serial link port.<br />
<br />
=== Read Values ===<br />
* Bit 2 and 3: These two bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bits 4, 6 and 7: These bits should be high for unknown reasons<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :). It's unclear if this is only when the other calculator is in the homescreen, or if it is part of the default interrupt routine at $0038.<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
<p>Other useful information on linking in general:<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
<br><br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<pre>ld a,$D0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,$D2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,$D1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,$D3 ; Set both low<br />
out (0),a</pre><br />
<br />
=== Receiving/Reading ===<br />
<pre>in a,(0) ; Get the link port value<br />
<br />
bit 2,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 3,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</pre></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Ports
83:Ports
2005-03-27T17:29:45Z
<p>Timendus: </p>
<hr />
<div>This is the documentation of the TI-83 IO ports, and how to interact with the calculator's hardware.<br />
<br />
Please read our page on [[Contributing]] before editing these pages!<br />
----<br />
* [[83:Ports:00|Port 00h]] - Link Port<br />
* [[83Plus:Ports:01|Port 01h]] - Keyboard Port (same as Ti-83+)</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:Flags
83:Flags
2005-03-27T17:25:47Z
<p>Timendus: </p>
<hr />
<div>This is a list of all the TI-83 system flags, and what they control.<br />
<br />
Please read our page on [[Contributing]] before editing these pages!<br />
----<br />
<br />
''There are no documented flags at this time.''</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:ROMCalls:4000
83:ROMCalls:4000
2005-03-27T17:24:06Z
<p>Timendus: </p>
<hr />
<div>== Synopsis ==<br />
'''Official Name:''' LdHLInd<br />
<br />
'''BCALL Address:''' 4000<br />
<br />
Stores the value at (HL) to register HL.<br />
<br />
=== Inputs ===<br />
* HL: pointer to bytes to load<br />
<br />
=== Outputs ===<br />
* HL: value located at input (HL)<br />
<br />
=== Registers Destroyed ===<br />
* AF<br />
<br />
== Comments ==<br />
Useful utility call. Equivilant code located in example.<br />
<br />
== Example ==<br />
<nowiki>LdHLInd:<br />
ld a,(hl)<br />
inc hl<br />
ld h,(hl)<br />
ld l,a<br />
ret</nowiki></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83:ROMCalls
83:ROMCalls
2005-03-27T17:23:16Z
<p>Timendus: </p>
<hr />
<div>This is a list of all the TI-83 system entrypoints, and their inputs, outputs, and usage.<br />
<br />
Please read our page on [[Contributing]] before editing these pages!<br />
----<br />
* [[83:BCALLs:4000|4000]] - LdHLInd</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Ports:00
Talk:83Plus:Ports:00
2005-03-27T17:07:54Z
<p>Timendus: You're welcome ;)</p>
<hr />
<div>Thanks for those links and that new section, whoever did that. That's what we're hoping for: To have our users expand on what we provide them.<br />
<br />
--[[User:AndyJ|AndyJ]] 06:52, 27 Mar 2005 (PST)<br />
<br />
== You're welcome ;) ==<br />
<br />
That would have been me before I discovered that you could make a user profile :)<br><br />
Thanks for the positive feedback!<br />
<br />
[mailto:Timendus@hotmail.com Timendus]</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Talk:WikiTI_Home
Talk:WikiTI Home
2005-03-27T13:04:58Z
<p>Timendus: /* More! */</p>
<hr />
<div>= Discussion =<br />
What do you think about this wiki?<br />
<br />
== More! ==<br />
<br />
I think it needs information on more calculators than just the Ti-83+ series, and general assembly information (like a good cathegorized tutorial overview for instance) wouldn't hurt either, I think :)<br />
<br />
Timendus</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Talk:WikiTI_Home
Talk:WikiTI Home
2005-03-27T13:01:38Z
<p>Timendus: /* Discussion */</p>
<hr />
<div>= Discussion =<br />
What do you think about this wiki?<br />
<br />
== More! ==<br />
<br />
I think it needs information on more calculators than just the Ti-83+ series, and general assembly information wouldn't hurt either, I think :)<br />
<br />
Timendus</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Talk:WikiTI_Home
Talk:WikiTI Home
2005-03-27T13:01:07Z
<p>Timendus: More!</p>
<hr />
<div>== Discussion ==<br />
What do you think about this wiki?<br />
<br />
== More! ==<br />
<br />
I think it needs information on more calculators than just the Ti-83+ series, and general assembly information wouldn't hurt either, I think :)<br />
<br />
Timendus</div>
Timendus
https://wikiti.brandonw.net/index.php?title=Talk:WikiTI_Home
Talk:WikiTI Home
2005-03-27T12:59:27Z
<p>Timendus: /* Discussion */</p>
<hr />
<div>== Discussion ==<br />
What do you think about this wiki?</div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00
83Plus:Ports:00
2005-03-27T12:49:57Z
<p>Timendus: /* Write Values */</p>
<hr />
<div>== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).<br />
<br />
=== Read Values ===<br />
* Bit 0 and 1: The low 2 bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
* Bit 5 and 6: Bits 5 and 6 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.<br />
* Bit 2: I have absolutely no idea what this means or does... <br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bit 2: I have absolutely no idea what this means or does, except that any change of this bit causes both lines to be released, and writing with this bit set causes bit 2 to read 1, and the next write causes it to read 0 and both lines are released.<br />
<br><br />
<br />
== Comments ==<br />
<br />
=== Bit 2 ===<br />
As mentioned bit 2's effect is unknown. An example of it's behavior follows:<br />
<nowiki>Start, read 03.<br />
Write 02, read 01.<br />
Write 07, read 07.<br />
Write 07, read 03.<br />
Write 07, read 07.<br />
Write 00, read 03.<br />
Write 09, read 07.<br />
Write 01, read 03.</nowiki><br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :). It's unclear if this is only when the other calculator is in the homescreen, or if it is part of the default interrupt routine at $0038.<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
<p>Other useful information on linking in general:<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
<br><br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<pre>ld a,0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,3 ; Set both low<br />
out (0),a</pre><br />
<br />
=== Receiving/Reading ===<br />
<pre>in a,(0) ; Get the link port value<br />
<br />
bit 0,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 1,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</pre></div>
Timendus
https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00
83Plus:Ports:00
2005-03-27T12:49:44Z
<p>Timendus: /* Data transfer */</p>
<hr />
<div>== Synopsis ==<br />
'''Port Number:''' 00h<br />
<br />
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).<br />
<br />
=== Read Values ===<br />
* Bit 0 and 1: The low 2 bits indicate the state of the link port's two lines. A 1 bit indicates a high line, and a 0 bit indicates a low line. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high (1). When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low.<br />
* Bit 5 and 6: Bits 5 and 6 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.<br />
* Bit 2: I have absolutely no idea what this means or does... <br />
<br />
=== Write Values ===<br />
* Bit 0 and 1: The low 2 bits indicate what state the lines should be put into. A 1 bit will pull the line low. A 0 bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low).<br />
* Bit 2: I have absolutely no idea what this means or does, except that any change of this bit causes both lines to be released, and writing with this bit set causes bit 2 to read 1, and the next write causes it to read 0 and both lines are released.<br />
<br />
== Comments ==<br />
<br />
=== Bit 2 ===<br />
As mentioned bit 2's effect is unknown. An example of it's behavior follows:<br />
<nowiki>Start, read 03.<br />
Write 02, read 01.<br />
Write 07, read 07.<br />
Write 07, read 03.<br />
Write 07, read 07.<br />
Write 00, read 03.<br />
Write 09, read 07.<br />
Write 01, read 03.</nowiki><br />
<br />
=== Ti-OS interference ===<br />
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :). It's unclear if this is only when the other calculator is in the homescreen, or if it is part of the default interrupt routine at $0038.<br />
<br />
=== Data transfer ===<br />
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, and [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol].<br />
<br />
<p>Other useful information on linking in general:<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol & File Format Guide]<br><br />
* [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial]<br />
<br><br />
<br />
== Example ==<br />
<br />
=== Sending/Setting ===<br />
<pre>ld a,0 ; Set both lines high<br />
out (0),a<br />
<br />
ld a,2 ; Set tip high, ring low<br />
out (0),a<br />
<br />
ld a,1 ; Set tip low, ring high<br />
out (0),a<br />
<br />
ld a,3 ; Set both low<br />
out (0),a</pre><br />
<br />
=== Receiving/Reading ===<br />
<pre>in a,(0) ; Get the link port value<br />
<br />
bit 0,a ; Check tip<br />
jr z,tip_low<br />
jr nz,tip_high<br />
<br />
bit 1,a ; Check ring<br />
jr z,ring_low<br />
jr nz,ring_high</pre></div>
Timendus