;ETCH-A-SCETCH version 1.1 for TI-83 by Andrew Von Dollen ;Updated on: 11/8/96 #DEFINE kLeft 02h ;Rather than use TI's messed #DEFINE kRight 01h ;up ones :) #DEFINE kUp 03h #DEFINE kDown 04h #DEFINE kEnter 05h #DEFINE kClear 09h #DEFINE kQuit 40h #DEFINE PROGSTART 9327h #DEFINE GETKEY 4CFEh #DEFINE CLRLCDFULL 4755h #DEFINE GRBUFCLR 515Bh #DEFINE IPOINT 4AE8h #DEFINE XCOORD 8265h #DEFINE YCOORD 8275h .org PROGSTART Initialize: call GRBUFCLR ;clear backup graph buffer call CLRLCDFULL ;clear screen ld a,47 ld (XCOORD),a ;initialize XCOORD and YCOORD ld a,31 ;to pretty near the center ld (YCOORD),a ;of the screen Start: call GETKEY ;get a key cp kLeft ;left arrow pressed? jr z,left ;if yes, go to "left" cp kRight ;right arrow pressed? jr z,right ;if yes, go to "right" cp kUp ;up arrow pressed? jr z,up ;if yes, go to "up" cp kDown ;down arrow? jr z,down ;if yes, go to "down" cp kEnter ;Enter key? jr z,exit ;exit this program cp kQuit jr z,exit cp kClear jr z,clear jr Start ;keys that don't work or no key? try again! left: ld a,(XCOORD) ;put the value stored at XCOORD into register a dec a ;decrement register a ld (XCOORD),a ;put value in a back into XCOORD jr Plot ;plot it!! right: ld a,(XCOORD) ;put XCOORD into register a inc a ;increment a ld (XCOORD),a ;put it back jr Plot ;plot the point up: ld a,(YCOORD) ;put YCOORD into register a inc a ;increment a ld (YCOORD),a ;put it back jr Plot ;plot down: ld a,(YCOORD) ;put YCOORD into register a dec a ;decrement register a ld (YCOORD),a ;put it back into YCOORD jr Plot ;plot it Plot: ld a,(XCOORD) ;put value at XCOORD into register a ld b,a ;put value in reg. a into reg. b ld a,(YCOORD) ;put YCOORD into reg. a ld c,a ;put a into c ld d,1 ;put 1 into reg. d (to set the point on) call IPOINT ;call IPOINT (routine that plots a point) jr Start ;back to the top clear: call CLRLCDFULL call GRBUFCLR jr Start exit: call CLRLCDFULL ;clear screen ret ;return from ASM program .end