Overview
For those of you who have had experience with TI-83 Asm
programming, you will note that the below program looks familiar. That's because
it is the exact same program from tutorial 7 in James Matthew's Asmguru! This
proves that TI-83 Asm programs will run on a TI-83 Plus with just a few minor
changes. Therefore I assume no responsibility for writing this program,
just porting it. This program takes user input from the TI's key pad to
move a dot about the screen. Sort of like a small sprite! This program uses
Getkey (Tutorial 8) call. Only this time we've narrowed
the area in which getkey scans the keyboard to the Arrow keys and the clear key.
Programming
Here
we go...
#define
B_CALL(xxxx) rst 28h \ .dw xxxx
#define
B_JUMP(xxxx) call 50h \ .dw xxxx
_RunIndicOff = 4570h
_IPoint = 47E3h
_getkey = 4972h
_clrlcdfull = 4540h
_homeup = 4558h
#DEFINE
kLeft> 02h
#DEFINE
kRight 01h
#DEFINE
kUp 03h
#DEFINE
kDown 04h ;All these guys are hex
codes
#DEFINE
kEnter 05h ;for keys on the
Ti-keyboard.
#DEFINE
kClear 09h
.org 9D95h
B_CALL(_clrLCDFull) ;Clear the screen.
ld b,47
ld c,47
ld d,1 ;Set
D to
1.
B_CALL(_IPoint)
B_CALL(_runIndicOff) ;Turn
off run indicatorDésactive
l'indicateur d'exécution.
GetKey:
B_CALL(_getKey)
;Asked for a key.
cp kLeft
;Compare ky with code for left
jp z,Left ;If
equale 0, go to left.
cp kRight
jp z,Right
cp kUp
jp z,Up
cp kDown
jp z,Down
cp kClear
jp z,Quit
jp GetKey
Left:
ld d,0 ;Set
D to 0.
B_CALL(_IPoint)>
dec b ;Decrement B
jp Draw
Right:
ld d,0
B_CALL(_IPoint)
inc b
jp Draw
Up:
ld d,0
B_CALL(_IPoint)
inc c
jp Draw
Down:
ld d,0
B_CALL(_IPoint)
dec c
jp Draw
Draw:
ld d,1
B_CALL(_IPoint)
jp GetKey ;Repeat
Quit:
ret ;Return
to OS.
.end
END
Note: You may want to set your calc's graph to ZInteger because ZStandard may interfere with the axis.
New Commands
cp - Compares with accumulator.
jr - The ASM equivalent to If xx
then jump to xxxxxx
jp - Same as above, except very
different
_ipoint - Turns a point
on/off/switch or tests.
What's the difference between Call
and jp/jr? Call is a z80 instruction that jumps to a sub-routine, a label with
specified calls and instructions. What about jp/jr? Well I'm going to let James
Matthews explain that.
"What is the difference
between jr and jp? There is one massive difference. JR is a relative jump - meaning, when TASM compiles it, the
instruction for the Z80 simply tells it how many bytes forward or backward to
jump. Thus, jr has a limited
range. jp on the other hand is an
absolute jump - tells the Z80 the address to jump to. The advantage of JR over JP is the file size is smaller and
faster once compiled. (Thank you to
Mindless Productions for this information.)
Harper told me that jr is a small jump (up to 128 bytes), and jp is a
large jump (up to 32K- the whole RAM, basically!)."
- James Matthews
Conclusion
Not yet comfortable with Registers?
Take a look at Andy S.' 83 Asm tutorials in Tutorial 4! Or look in
tutorial 17
in this help file. Now let's get moving!
Click to return to the site's menu... or here to get back to the tutorial's menu.