My code allegedly generates 99 numbers and either displays an arrow in a random column 1-4 or waits 1-4 counts.
Barely anything happens. I'm at a complete loss because i didn't bother debugging until i had finished.
Ready...set...GO!!
Code: .nolist
#include "ti83plus.inc"
#define ProgStart $9D95
.list
.org ProgStart - 2
.db t2ByteTok, tAsmCmp
;DE=COUNTER
;$8200=POINTER
;$8000-$8099=X POSITIONS
;$8100-$8199=Y POSITIONS
b_call(_ClrScrnFull)
LD HL, $8000
RANDOM:
LD B, A
LD A, R
ADD A, B
AND %11;3
LD R, A
INC A;4 is now possible, 0 is not
LD (HL), A
INC HL
LD A, L
AND A;if L is not 0
JR NZ, RANDOM
LD A, H
CP $81;if H is not $81
JR NZ, RANDOM
;following code is for debugging
;DISP:
; LD DE, $8000
; b_call(_HomeUp)
; LD H, 0
; LD A, (DE)
; LD L, A
; PUSH DE
; b_call(_DispHL)
; b_call(_getkey)
; b_call(_ClrScrnFull)
; POP DE
; INC DE
; LD A, E
; AND A;if E is not 0
; JR NZ, DISP
; LD A, D
; CP $81;if D is not $81
; JR NZ, DISP
; ret
LD BC, $8100
LD DE, $8000
MAIN:
LD BC, ($8200)
LD A, E
AND %01;check to see if odd or even
JR Z, ARROW
LD A, (DE)
DEC A
JR C, INC_DE;if wait is over, then advance DE
LD (DE), A
INC_DE:
LD A, (DE)
INC A
LD (DE), A
JR MAIN
ARROW:
LD A, 63
PUSH DE
INC D;adds $100 to DE
LD (DE), A
POP DE
GLOBALMOVE:
LD A, (BC)
LD L, A
PUSH BC
DEC B;B used to be $81, now $80, so it's subracting $100 from BC
LD A, (BC);get the column
CP 4
JR Z, SETRIGHT
CP 3
JR Z, SETDOWN
CP 2
JR Z, SETUP
CP 1
JR Z, SETLEFT
SETRIGHT:
LD IX, RIGHT
JR SETBUFFER
SETDOWN:
LD IX, DOWN
JR SETBUFFER
SETUP:
LD IX, UP
JR SETBUFFER
SETLEFT:
LD IX, LEFT
JR SETBUFFER
SETBUFFER:
ADD A, A
LD B, 8
CALL PutSpriteXOR
POP BC
LD A, (BC);saving y position of arrow
DEC A
LD (BC), A
AND A;can delete this line, want to make sure LD will set off Z
CALL Z, INC8200
INC BC
INC BC
LD A, C;if C is greater than E then do not loop
CP E;checks to see if E is greater than to C
JR C, ENDLOOP
JR Z, ENDLOOP
JR GLOBALMOVE
ENDLOOP:
INC DE
CALL SafeCopy
JR MAIN
INC8200:
LD A, ($8200)
INC A
LD ($8200), A
RET
PutSpriteXOR:
; A = x coordinate
; L = y coordinate
; B = number of rows
; IX = address of sprite
LD H, 0
LD D, H
LD E, L
ADD HL, HL
ADD HL, DE
ADD HL, HL
ADD HL, HL
LD E, A
SRL E
SRL E
SRL E
ADD HL, DE
LD DE, PlotSScreen
ADD HL, DE
LD DE, 12
_PutLoop
LD A, (IX)
XOR (HL)
LD (HL), A
INC IX
ADD HL, DE
DJNZ _PutLoop
RET
SafeCopy:
di
ld c,$10
setrow:
in a,(c)
rla;test 7th bit
jr c,setrow
ld a,$80
out ($10),a
ld hl,PLOTSSCREEN
ld de,12
ld a,$20
col:
push af;the push and pop are wasted clocks
colwait:;but this only occurs 12 times
in a,(c)
rla
jr c,colwait
pop af
out ($10),a
push af
ld b,64
row:
in a,(c)
rla
jr c,row
ld a,(hl)
out ($11),a
add hl,de
djnz row
pop af
dec h
dec h
dec h
inc hl
inc a
cp $2c
jr nz,col
ret
UP:
.DB %00011000
.DB %00100100
.DB %01000010
.DB %11100111
.DB %00100100
.DB %00100100
.DB %00100100
.DB %00111100
RIGHT:
.DB %00001000
.DB %00001100
.DB %11111010
.DB %10000001
.DB %11000001
.DB %11111010
.DB %00001100
.DB %00001000
DOWN:
.DB %00111100
.DB %00100100
.DB %00100100
.DB %00100100
.DB %11100111
.DB %01000010
.DB %00100100
.DB %00011000
LEFT:
.DB %00010000
.DB %00110000
.DB %01011111
.DB %10000001
.DB %10000001
.DB %01011111
.DB %00110000
.end
.end
|