Re: A89: Another easy one


[Prev][Next][Index][Thread]

Re: A89: Another easy one




There is a TI-OS function called kbhit() which returnes the current key. You
should use that function instead of kb_vars because it is compatible with
all ROM versions. Using variables like kb_vars is a bad programming style
and is the main cause of incompatibilities between ROM versions. Always use
TI-OS functions whenever you can and is this case you can (use hbhit()).

PS. Whenever you have problems with crashes you can use the VTI debugger. It
is really helpful. Just set a breakpoint at all exceptions. Also, the new
version of LexOS will display some useful debugging information in case of a
crash. It will be released in the next couple of days.

-----Original Message-----
From: KeysDezes@aol.com <KeysDezes@aol.com>
To: assembly-89@lists.ticalc.org <assembly-89@lists.ticalc.org>
Date: Thursday, December 30, 1999 02:11
Subject: Re: A89: Another easy one


>
>Ok, I fixed the 1111 error (I don't know why, but it stopped.)  Now, I've
got
>a different problem.  I can't seem to read keys.  I've tried a few
different
>methods; I can't get any to work.  Here's the source as it is now.  The
>problems: It fires immediately when I start the prgm, after I press a key
on
>the "You Lost" screen, it returns to moving the target, when the target
>reaches the bottom, the "You lost" screen freezes, and I get address errors
>and illegal instructions periodically.  I must be doing something really,
>really wrong... Please help me!
>
>;libraries
>    include "doorsos.h"
>    include "userlib.h"
>    include "graphlib.h"
>
>;definitions
>    xdef    _main
>    xdef    _comment
>    xdef    _ti89
>
>;main program
>_main:
>    move.l  $300000,d0
>    cmp.l   #$4E56FFCC,d0
>    beq v1_00_rom
>    cmp.l   #$77044EB9,d0
>    beq v1_05_rom
>    bra other_rom
>
>Go:
>    move.l  #3840,-(a7)
>    jsr doorsos::HeapAlloc  ;Allocate 3840 bytes
>    addq.l  #4,a7
>    or.w    d0,d0
>    beq exit_prgm       ;Check that memory was allocated
>    move.w  d0,vid_handle
>    doorsos::DEREF  d0,a0
>    move.l  a0,vid_addr
>    eor.l   d0,d0       ;clear d0
>    move.l  d0,x_pos
>    move.l  d0,y_pos
>    move.l  #88,Bullet
>    bsr anim_sprite
>    bra IOH
>
>v1_00_rom:
>    move.b  #$00,d0
>    bra found_rom
>
>v1_05_rom:
>    move.b  #$01,d0
>    bra found_rom
>
>other_rom:
>    bra err
>
>found_rom
>    move.b  d0,rom_ver
>    bra Go
>
>err:
>    jsr graphlib::clr_scr
>    move.w  #4,-(a7)
>    pea rom(pc)
>    move.w  #0,-(a7)
>    move.w  #0,-(a7)
>    jsr doorsos::DrawStrXY
>    lea 10(a7),a7
>    jsr userlib::idle_loop
>    bra IOH
>
>anim_sprite:
>    bsr ClearBuffer
>    move.l  y_pos,d1
>    move.l  x_pos,d0
>    lea target(pc),a0
>    bsr PutSprite       ;draw target
>    move.l  Bullet,d1
>    move.l  #76,d0
>    lea shot(pc),a0
>    bsr PutSprite       ;draw bullet
>    bsr CopyBufferToScreen
>    bsr Updatex
>    bsr UpdateBullet
>    cmp #88,Bullet
>    beq Checkkeys
>    bra anim_sprite
>    rts
>
>Updatex:
>    move.l  x_pos,d0
>    addq.l  #1,d0
>    move.l  d0,x_pos
>    cmp #152,d0
>    beq Updatey
>    rts
>
>Updatey:
>    move.l  y_pos,d1
>    addq.l  #8,d1
>    move.l  d1,y_pos
>    move.l  #0,x_pos
>    cmp #88,d1
>    beq Lose
>    rts
>
>UpdateBullet:
>    move.l  Bullet,d1
>    cmp #92,d1
>    bne MoveBullet
>    rts
>
>MoveBullet:
>    subq.l  #1,d1
>    move.l  d1,Bullet
>    move.l  y_pos,d2
>    addq.l  #7,d2
>    cmp d1,d2
>    beq CheckHit
>    cmp #0,d1
>    beq Lose
>    rts
>
>CheckHit:
>    cmp #76,x_pos
>    ble Checkhitb
>    rts
>
>Checkhitb:
>    cmp #76,x_pos
>    bge win
>    rts
>
>Checkkeys:
>    move.b  rom_ver,d0
>    cmp.b   #$00,d0
>    beq v1_00_key
>    cmp #13,d0
>    beq Fire
>    rts
>
>v1_05_key:
>    eor.w   d0,d0
>    tst.w   doorsos::kb_vars+$1c+4
>    beq done_check
>    move.w  doorsos::kb_vars+$1e+4,d0
>    clr.w   doorsos::kb_vars+$1c+4
>    bsr done_check
>    rts
>
>v1_00_key
>    eor.w   d0,d0
>    tst.w   doorsos::kb_vars+$1c
>    beq done_check
>    move.w  doorsos::kb_vars+$1e,d0
>    clr.w   doorsos::kb_vars+$1c
>    bsr done_check
>    rts
>
>done_check
>    rts
>
>Fire:
>    move.l  #87,Bullet
>    rts
>
>exit_prgm:
>    jsr graphlib::clr_scr
>    move.w  #4,-(a7)
>    pea mem(pc)
>    move.w  #0,-(a7)
>    move.w  #0,-(a7)
>    jsr doorsos::DrawStrXY
>    lea 10(a7),a7
>    jsr userlib::idle_loop
>    bra IOH
>
>Lose:
>    jsr graphlib::clr_scr
>    move.w  #4,-(a7)
>    pea lost(pc)
>    move.w  #0,-(a7)
>    move.w  #0,-(a7)
>    jsr doorsos::DrawStrXY
>    lea 10(a7),a7
>    jsr userlib::idle_loop
>    bra IOH
>
>win:
>    jsr graphlib::clr_scr
>    move.w  #4,-(a7)
>    pea won(pc)
>    move.w  #0,-(a7)
>    move.w  #0,-(a7)
>    jsr doorsos::DrawStrXY
>    lea 10(a7),a7
>    jsr userlib::idle_loop
>    bra IOH
>
>ClearBuffer:
>    move.l  vid_addr,a0
>    eor.l   d0,d0
>    move.l  #959,d1
>
>clear_buffer:
>    move.l  d0,(a0)
>    addq    #4,a0
>    dbra    d1,clear_buffer
>    rts
>
>CopyBufferToScreen:
>    move.l  vid_addr,a0
>    lea doorsos::main_lcd,a1
>    move.l  #3839,d1
>
>copy_buffer:
>    move.b  (a0),d0
>    move.b  d0,(a1)
>    addq    #1,a0
>    addq    #1,a1
>    dbra    d1,copy_buffer
>    rts
>
>PutSprite:
>    move.l  vid_addr,a1
>    mulu    #30,d1
>    adda.l  d1,a1
>    move.w  d0,d1
>    lsr.w   #3,d1
>    adda.l  d1,a1
>    andi.l  #%111,d0
>    moveq   #7,d2
>
>draw_a_row:
>    eor d1,d1
>    move.b  (a0),d1
>    ror.w   d0,d1
>    or.b    d1,(a1)
>    addq    #1,a1
>    rol.w   #8,d1
>    or.b    d1,(a1)
>    adda.l  #29,a1
>    addq    #1,a0
>    dbra    d2,draw_a_row
>    rts
>
>IOH:
>    move.w  vid_handle,-(a7)
>    jsr doorsos::HeapFree
>    addq.l  #2,a7
>    rts
>
>;strings
>_comment:
>    dc.b "Archer By Grant Elliott",0
>won:
>    dc.b "Congratulations",0
>lost:
>    dc.b "You Lost",0
>mem:
>    dc.b "Not Enough Memory",0
>rom:
>    dc.b "Invalid Rom",0
>
>;variables
>rom_ver:
>    dc.b    0
>Bullet:
>    dc.w    88
>y_pos:
>    dc.l    0
>x_pos:
>    dc.l    0
>vid_addr:
>    dc.l    0
>vid_handle:
>    dc.w    0
>
>
>;sprites
>target:
>    dc.b    %11111111
>    dc.b    %10000001
>    dc.b    %10011001
>    dc.b    %10111101
>    dc.b    %10111101
>    dc.b    %10011001
>    dc.b    %10000001
>    dc.b    %11111111
>
>shot:
>    dc.b    %00011000
>    dc.b    %00111100
>    dc.b    %00111100
>    dc.b    %00111100
>    dc.b    %00111100
>    dc.b    %00111100
>    dc.b    %00111100
>    dc.b    %00111100
>
>    end
>
>                                            Grant Elliott
>                                            <A
>HREF="http://www.crosswinds.net/~proganon">Programmers Anonymous</A>
>
>
>