the code (first prog, again) kinda sucks
i promise i will make my next program better
comments are dutch btw... most of em
to draw a "box" the box is simpely inverted
Code: .nolist
#include "ti83plus.inc"
#include "ti83plusasm.inc"
#define ProgStart $9D95 -2
_GetKeyRetOff .EQU $500B
.list
.org ProgStart
.db t2ByteTok, tAsmCmp
savesp .equ appbackupscreen
#define yoffset 4;deze worden niet gebruikt.. maargoed
#define xoffset 8 ;not used btw...
;BCALL(_runindicoff)
BCALL(_clrLCDfull)
ld (savesp),SP
LD B,0
LD C,12*4
LD HL,plotsscreen
ADD HL,BC
LD C,8 ;this draws the field on the screen
horiz:
CALL lines
DEC C
JR Z,skip
CALL lines2
JR horiz
skip:
;
;
;
;making the user chose a level...
picklvl:
CALL b2b
LD C,0
CALL drawfield
getkeyfield:
BCALL(_grbufcpy)
LD HL,2
LD (penrow),HL
LD HL,80
LD (pencol),HL
LD A,(level)
bcall(_SetXXOP1)
LD A,3
bcall(_dispOP1a)
BCALL(_getkey)
push AF
LD C,0
CALL drawfield
POP AF
cp kENTER
JR Z,mainloopstart
CP kUP
JR Z,increase
CP kDOWN
JR Z,decrease
CP kCLEAR
JP Z,exit
jr getkeyfield
increase
LD A,(level)
CP 99
JR Z,picklvl
INC A
LD (level),A
JR picklvl
Decrease
LD A,(level)
CP 0
JR Z,picklvl
DEC A
LD (level),A
JR picklvl
; x-------------------------------------------x
; | bit -> byte conversion |
; x-------------------------------------------x
b2b:
LD A,(level);level nummer ...
LD H,0
LD L,A
LD D,0
LD E,A
ADD HL,DE;maal 7
ADD HL,DE
ADD HL,DE
ADD HL,DE
ADD HL,DE
ADD HL,DE
LD DE,leveldata
ADD HL,DE
EX DE,HL;DE bevat nu het adres van compressed lvl (in theorie.....)
ld B,7; hier aantal bytes die in binair zijn uitgedrukt
ld HL,map
Bytebinairloop:
ld A,(DE)
PUSH BC
ld B,8;8 bits in een byte
Bitshiftloop:
ld (HL),0
SLA A
JR NC,skip0;als de carry nul is, laat de byte dan ook maar nul; als de carry 1 is, maak de byte 1
INC (HL)
skip0:
INC HL
DJNZ Bitshiftloop
POP BC
INC DE
DJNZ Bytebinairloop
RET
;----------------------------------------
; ______________________________________
; | field drawing routine |
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
drawfield:
LD DE,map
LD B,7*8
LD HL,$0101
drawloop:
LD A,(DE)
CP 1
push DE
push BC
CALL z,invert
POP BC
POP DE
INC DE
INC H
LD A,H
CP 9
CALL Z,nextline
DJNZ drawloop
RET
nextline:
LD H,1
INC L
RET
; _____________________________
; | main loop |
; ***********************************
mainloopstart
CALL drawfield
;POP HL
LD H,1;TOP LEFT CORNER
LD L,1
mainloop:
PUSH HL
JR wincheck
wincheckret:
POP HL
PUSH HL
CALL muis;plaatsen
BCALL(_grbufcpy)
BCALL(_getkeyretoff)
POP HL
PUSH AF
CALL muis;wissen
POP AF
cp kup
jr Z,keyup
cp kdown
jr Z,keydown
cp kleft
jr Z,keyleft
cp kright
jr Z,keyright
CP kCLEAR
JP Z,exit
jr invert2;bij al het andere: veranderen
; _____________________________
; | wincheck |
; ************************************
wincheck:
LD HL,map-1
LD B,7*8+1
winloop:
DEC B;eerst controleren of b 0 is
LD A,B
CP 0
JR Z,exit0;als b 0 is, heeft hij alles gecheckt en is hij geen 1 tegengekomen
INC HL
LD A,(HL);daarna kijken of de bit 1 is
CP 1;als de bit 1 is, exiten naar main (RET)
JR Z,winloop
JR wincheckret
exit0:;dat houd in, exiten
;stack legen... prut sp
POP HL
JP exit;<s>stack hoeft niet leeg omdat sp is opgeslagen</s>
; _____________________________
; | key routines |
; ***********************************
;-------------up--------------
keyup:
LD A,L
CP 1
JR Z,fail1
DEC L
fail1:
JR mainloop
;------------down----------
keydown:
LD A,L
CP 7
JR Z,fail2
INC L
fail2:
JR mainloop
;---------------left-----------
keyleft:
LD A,H
CP 1
JR Z,fail3
DEC H
fail3:
JR mainloop
;-------------right--------
keyright:
LD A,H
CP 8
JR Z,fail4
INC H
fail4:
JR mainloop
; ___________________________________________________________
; | main invert routine (ik weet dat dit een slechte naam is..) |
; ************************************************************************
invert2: ;extreem onoverzichtelijk, maar ach....
PUSH HL
CALL invert
CALL updatemap
CALL UP; ___________
CALL LEFT; | < | |
CALL DOWN; | V |___ | ^ |
CALL DOWN; | > > |
CALL RE; ''''''''''''''''''''''''
CALL RE
CALL UP
CALL UP
POP HL
JP mainloop
; x___________________________x
; | updatemap |
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^
updatemap:;ik hoop dat hij bij 0 begint met tellen.... edit: niet dus...
PUSH DE;geen idee of er iets instaat..
push HL;hl moet natuurlijk niet gedelite worden...
DEC H
DEC L
SLA L;L=ycoord, maal 8 (is maximaal 7, dus er is nooit overflow)
SLA L
SLA L
LD A,H
ADD A,L
LD L,A
LD H,0
LD DE,map;40957---------------------------------------------------------------------
ADD HL,DE
LD A,(HL);lees de byte in map
CP 1
JR Z,map1
LD (HL),1
JR map0
map1:
LD (HL),0
map0:
POP HL
POP DE
RET
up:
DEC L
LD A,L
CP 0
RET Z
LD A,H
CP 9
RET Z
CALL updatemap
CALL invert
RET
left:
DEC H
LD A,H
CP 0
RET Z
LD A,L
CP 0
RET Z
CALL updatemap
CALL invert
RET
down:
INC L
LD A,L
CP 8
RET Z
LD A,H
CP 0
RET Z
CALL updatemap
CALL invert
RET
re:
INC H
LD A,H
CP 9
RET Z
LD A,L
CP 8
RET Z
CALL updatemap
CALL invert
RET
; ______________________
; | invert box at (H,L) |
; ***************************
muis:
LD C,2
invert: ;H=xpos L=ypos
PUSH HL
DEC H
DEC L
getbyte:
PUSH HL;save x
LD H,0;DE=y
ADD HL,HL;mult. by 12, then by 8, and add 5*12
ADD HL,HL;4
PUSH HL
POP DE
ADD HL,HL;8
ADD HL,DE;12, and repeat
ADD HL,HL;2
ADD HL,HL;4
ADD HL,HL;8
LD DE,5*12
ADD HL,DE
POP DE
LD A,D
LD D,0
LD E,A
ADD HL,DE
LD DE,plotsscreen
ADD HL,DE
;------------------------correct byte is now in HL----------
LD B,7
c:
LD DE,data2
LD A,C
CP 2
JR NZ,d
INC DE
INC DE
d:
CALL PUTXOR
INC DE
CALL PUTXOR
INC HL;10 times
INC HL
INC HL
INC HL
INC HL
INC HL
INC HL
INC HL
INC HL
INC HL
DJNZ c
POP HL
LD C,0
RET
putXOR:
LD A,(DE)
XOR (HL)
LD (HL),A
INC HL
RET
; ________________________________
; | line drawing routine |
; ***************************************
lines:
LD B,7
LD DE,data
CALL put
INC DE
a:
CALL put
DJNZ a
INC DE
CALL put
INC HL
INC HL
INC HL
RET
lines2:
LD B,7
INC DE
xxx:
CALL put
CALL put
CALL put
CALL put
CALL put
CALL put
CALL put
CALL put
CALL put
INC HL
INC HL
INC HL
DJNZ xxx
RET
put:
LD A, (DE)
LD (HL),A
INC HL
RET
win:
exit:
ld sp,(savesp)
RET
LD HL,map
LD B,7*8
exitloop:
push hl
LD HL,0
LD (currow),HL
LD (curcol),HL
pop hl
push hl
LD A,(HL)
LD L,A
LD H,0
BCALL(_DISPHL)
BCALL(_GETKEY)
pop hl
inc hl
DJNZ exitloop
ld sp,(savesp)
RET
; _____________________________
; | game |
; | data |
; '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
level:
.db 0; 0<x<100
data:
.db %00011111
.db %11111111
.db %11110000
.db %00010000
data2:
.db %00001111
.db %11100000
.db %00000100
.db %01000000
map:
.db 0,0,0,0,0,0,0,0
.db 0,0,0,0,0,0,0,0
.db 0,0,0,0,0,0,0,0
.db 0,0,0,0,0,0,0,0
.db 0,0,0,0,0,0,0,0
.db 0,0,0,0,0,0,0,0
.db 0,0,0,0,0,0,0,0
leveldata:
;data of levels, 7 bytes per level
.end
.end
data for levels (if you want to test the game
Code:
leveldata:
.db %11111111;helemaal zwart
.db %11111111
.db %11111111
.db %11111111
.db %11111111
.db %11111111
.db %11111111
.db %00100100;smiley
.db %00100100
.db %00100100
.db %00100100
.db %10100101
.db %10000001
.db %11111111
.db %01111110;zwat met wit hoekje
.db %11111111
.db %11111111
.db %11111111
.db %11111111
.db %11111111
.db %01111110
.db %01111110;idem, met wit midden
.db %11111111
.db %11111111
.db %11100111
.db %11111111
.db %11111111
.db %01111110
.db %10000001;een X
.db %01000010
.db %00100100
.db %00011000
.db %00100100
.db %01000010
.db %10000001
.db %10000001
.db %00000000
.db %01000010
.db %00100100
.db %01000010
.db %00000000
.db %10000001
.db %01111110;box
.db %10000001
.db %10000001
.db %10000001
.db %10000001
.db %10000001
.db %01111110
.db %00011000
.db %00011000
.db %00011000
.db %11111111
.db %00011000
.db %00011000
.db %00011000
.db %00000011
.db %00000110
.db %00001100
.db %00011000
.db %00110000
.db %01100000
.db %11000000
.db %00011000
.db %00000000
.db %10111101
.db %00100100
.db %10111101
.db %00000000
.db %00011000
.db %01111110
.db %11000011
.db %10100101
.db %10011001
.db %10100101
.db %11000011
.db %01111110
.db %11100111
.db %11100111
.db %11100111
.db %00000000
.db %11100111
.db %11100111
.db %11100111
.db %11111111
.db %01111110
.db %00111100
.db %00011000
.db %00111100
.db %01111110
.db %11111111
.db %00011000
.db %10000001
.db %11000011
.db %11100111
.db %11000011
.db %10000001
.db %00011000
.db %00011000
.db %00011000
.db %01111110
.db %10011001
.db %00111100
.db %01000010
.db %10000001
.db %11100111
.db %00011000
.db %00011000
.db %11111111
.db %00011000
.db %00011000
.db %11100111
.db %00000011
.db %00000110
.db %00111100
.db %00100100
.db %00111100
.db %01100000
.db %11000000
.db %11100111
.db %11111111
.db %10111101
.db %00100100
.db %10111101
.db %11111111
.db %11100111
.db %01111110
.db %11000011
.db %10000001
.db %10011001
.db %10000001
.db %11000011
.db %01111110
.db %10000001
.db %00000000
.db %00000000
.db %00011000
.db %00000000
.db %00000000
.db %10000001
.db %11111111
.db %01000010
.db %00100100
.db %00011000
.db %00100100
.db %01000010
.db %11111111
.db %01111110
.db %10000001
.db %10011001
.db %11111111
.db %10011001
.db %10000001
.db %01111110
.db %10001001
.db %00000000
.db %01000010
.db %11100111
.db %01000010
.db %00000000
.db %10010001
.db %01111000
.db %00011001
.db %00011001
.db %11111111
.db %10011000
.db %10011000
.db %00011110;ja dit lijkt op een hakenkruis, maar bedoel er niet mee :lol:
.db %11111111
.db %00000110
.db %00001100
.db %00011000
.db %00110000
.db %01100000
.db %11111111
.db %10011001
.db %10000001
.db %10111101
.db %00100100
.db %10111101
.db %10000001
.db %11111111
;-----------------------------------alfabet--------------
.db %00011000;A
.db %00100100
.db %01000010
.db %01111110
.db %01000010
.db %01000010
.db %01000010
.db %01111100;B
.db %01000010
.db %01000010
.db %01111100
.db %01000010
.db %01000010
.db %01111100
.db %00011100;C
.db %00100010
.db %01000000
.db %01000000
.db %01000000
.db %00100010
.db %00011100
.db %01111100;D
.db %01000010
.db %01000010
.db %01000010
.db %01000010
.db %01000010
.db %01111100
.db %01111110;E
.db %01000000
.db %01000000
.db %01111100
.db %01000000
.db %01000000
.db %01111110
.db %01111110;F
.db %01000000
.db %01000000
.db %01111000
.db %01000000
.db %01000000
.db %01000000
.db %00011100;G
.db %00100010
.db %01000000
.db %01000000
.db %01000110
.db %00100010
.db %00011100
.db %01000010;H
.db %01000010
.db %01000010
.db %01111110
.db %01000010
.db %01000010
.db %01000010
.db %00011000;I
.db %00000000
.db %00011000
.db %00011000
.db %00011000
.db %00011000
.db %00011000
.db %00000110;J
.db %00000000
.db %00000110
.db %00000110
.db %00000110
.db %00110110
.db %00011100
.db %01000100;K
.db %01001000
.db %01010000
.db %01100000
.db %01010000
.db %01001000
.db %01000100
.db %01000000;L
.db %01000000
.db %01000000
.db %01000000
.db %01000000
.db %01000000
.db %01111110
.db %00100100;M
.db %01011010
.db %01011010
.db %01000010
.db %01000010
.db %01000010
.db %01000010
.db %01100010;N
.db %01010010
.db %01010010
.db %01011010
.db %01001010
.db %01001010
.db %01000110
.db %00011000;O
.db %00100100
.db %01000010
.db %01000010
.db %01000010
.db %00100100
.db %00011000
.db %01111100;P
.db %01000010
.db %01000010
.db %01111100
.db %01000000
.db %01000000
.db %01000000
.db %00111110;Q
.db %01000010
.db %01000010
.db %00111110
.db %00000010
.db %00000010
.db %00000010
.db %01111100;R
.db %01000010
.db %01000010
.db %01111100
.db %01011000
.db %01001100
.db %01000110
.db %00111110;S
.db %01000000
.db %01000000
.db %00111100
.db %00000010
.db %00000010
.db %01111100
.db %01111110;T
.db %00011000
.db %00011000
.db %00011000
.db %00011000
.db %00011000
.db %00011000
.db %01000010;U
.db %01000010
.db %01000010
.db %01000010
.db %01000010
.db %01000010
.db %01111110
.db %01000010;V
.db %01000010
.db %01000010
.db %00100100
.db %00100100
.db %00100100
.db %00011000
.db %01000010;W
.db %01000010
.db %01000010
.db %01011010
.db %01011010
.db %01011010
.db %00111100
.db %01000010; X
.db %01000010
.db %00100100
.db %00011000
.db %00100100
.db %01000010
.db %01000010
.db %01000010; Y
.db %01000010
.db %00100100
.db %00011000
.db %00011000
.db %00011000
.db %00011000
.db %01111110; Z
.db %00000110
.db %00001100
.db %00011000
.db %00110000
.db %01100000
.db %01111110
.end
.end
edit: fix'd tag
yes i know my frog is a push/pop minefield lol
edit: no hide-able code blocks???
[codebox]-ified! –Goose
Last edited by Guest on 22 Oct 2008 01:05:48 am; edited 1 time in total |