Are there any good assembly guides out there? I have tried
https://ez80.readthedocs.io/en/latest/ but it is incomplete and
http://media.taricorp.net/83pa28d/lesson/day01.html which says to use the Spasm assembler but later uses TASM and DEVPAC8X which some people say will work and other people say will not work.
Alternativerly, I could use the these, if you could help me with the software issues, i.e. TASM and DEVPAC8X.
Use
the original asm in 28 days and
spasm-ng. The original tutorial has a couple factual issues and you should mostly ignore day 1 because of its references to out of date tools, but in general it is presented much more nicely than the "modernized" version. And spasm-ng is the simplest assembler to use and is basically fully compatible with code written for TASM (as the tutorial is). You can just run
spasm-ng src.asm PROG.8xp from the command line (assuming spasm-ng and src.asm are properly located) to assemble your code into a 83+ program file.
You should also download
this TI-83+ include file, open it in a text editor, find these lines near the top:
Code: #define bcall(xxxx) rst 28h \ .dw xxxx
#define bjump(xxxx) call 50h \ .dw xxxx
Add these lines with alternate names below:
Code: #define b_call(xxxx) rst 28h \ .dw xxxx
#define b_jump(xxxx) call 50h \ .dw xxxx
And finally save the file as ti83plus.inc (note the change in file extension from .txt to .inc).
I actually have a 84+. I found a list of include files, but I don't know if I need to change anything. Also how compatible is the assembly guide with the 84+?
http://www.ti-84-plus.com/ti-84-plus-download-includes.php
The ti83plus.inc file I linked contains the contents of a number of the files in the link you gave, all aggregated into one file. It also includes TI-84+ stuff. It's the most complete/correct include file available for the monochrome 83+ and 84+ calculators.
EDIT: And the asm in 28 days tutorial is fully compatible with the 84+. It just misses out on documenting some of the extra things you can do with the 84+, but none of them are really must-know things.
Ok thanks, anything else I should know?
You should now just try following the tutorial, and if you have any questions, you can ask them here. Perhaps one thing I'd mention is that Wabbitemu is a great tool for testing your programs; specifically, the debugger. You can open it from the menu with "Debug" > "Open debugger...". If you then click on the disassembly pane (the big part in the middle with assembly code), press G to go to an address, enter 9D95, and then click "Toggle Breakpoint", emulation will pause and the disassembler will pop open whenever you run an assembly program. From here, you can step through it and monitor register and memory values to debug your programs.
EDIT: To make debugging even nicer, when you assemble your program with spasm, add the -L flag to produce a symbol table output as well (ex. spasm-ng -L src.asm PROG.8xp). If you transfer the .lab file to Wabbitemu, then you should see your labels appear in the disassembly as well.
OK, final thing, how do I tell spasm where to find the ti83plus.inc file?
If you run spasm from the command line with no arguments, it prints out the help. It's a useful reference; even as an experienced user, I refer to it sometimes.
Anyway, this is the relevant part for you:
Quote:
-I [directory] = Add include directory
Alternatively, when you #include the file, provide the relative path from the current source file instead of just the filename.
I'm sorry I have very limited experience with the command line. Could you recommend a course or something on it. I tried one on udacity which was helpful but it was for linux.
I did manage to get it to assemble though, but when I sent it to my calculator and ran it, I received a syntax error instead of "Hello World!". I know you said to pretty much skip the first lesson, but I do want to run a program on the calculator, just so I know I am on the right track.
So to clarify what I have done so far is:
1. Made the necessary edits to ti84plus.inc
2. Copy and pasted the following from the guide into source.asm
.nolist
#include "ti83plus.inc"
#define ProgStart $9D95
.list
.org ProgStart - 2
.db t2ByteTok, tAsmCmp
b_call(_ClrLCDFull)
ld a, 0
ld (CurRow), a
ld (CurCol), a
ld hl, msg
b_call(_PutS) ; Display the text
b_call(_NewLine)
ret
msg:
.db "Hello world!", 0
.end
3. Ran "C:\Users\deoxa\Documents\Calculator\Programs\asm\Spasm>spasm.exe -I ti83plus.inc source.asm PROG.8xp"
Are you running the program from the home screen? If so, are you running it with Asm(prgmPROG rather than just prgmPROG? Alternatively, launching the program from any shell program should work.
OK that worked, I've ran assembly programs written by other people before but I don't think I'll ever remember to do that. Thank you for all your help [:
You can install a shell that handles stuff like that for you. I would recommend
NoShell as once it is installed, you can run archived and assembly programs the same as BASIC programs, from the homescreen without unarchiving or adding Asm().
EDIT: You can also find a whole plethora of z80 guides
on ticalc.org. I have used
Hot Dogs Guide to Assembly for Beginners and it is great for, as it says, those with little to no concept of assembly type programmimg. It is a great prelude into Learn z80 Assembly in 28 Days.
It's been a while but I don't think I need to create a new thread for my question.
Why does this work:
Spasm/spasm.exe -I ti83plus.inc source.asm assembled.8xp
but not this:
Spasm/spasm.exe -I Source/ti83plus.inc Source/source.asm a.8xp
With the second one all I did was move ti83plus.inc and source.asm to another folder.
The second one says this:
Pass one...
Source/source.asm:2: error: "ti83plus.inc: No such file or directory
Source/source.asm:2: error SE001: Could not find the file '"ti83plus.inc'
Source/source.asm:8: error SE113: Unknown opcode 'b_call'
Source/source.asm:13: error SE113: Unknown opcode 'b_call'
Source/source.asm:14: error SE113: Unknown opcode 'b_call'
You pass the folder/directory containing the include files to -I, not the include files themselves, so you want Spasm/spasm -I Source Source/source.asm a.8xp. The reason it worked the other way is that spasm automatically checks the current directory for include files, and ignored the -I ti83plus.inc part.