Re: A85: A boggling interrupt question! :)


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

Re: A85: A boggling interrupt question! :)




In a message dated 4/25/99 6:15:29 PM MDT, DorkReMi@aol.com writes:

> Hey, all... it's been a while since I've asked you something, so I'll make 
up 
> 
>  for it here.  DON'T read this unless you want to be stuck here for a 
while. :
> )
>  
>  OK. Here's the deal: In my game Final Fantasy 7: The Calling, I have what 
I 
>  call an event queue, which is basically a line of events that is processed 
>  one by one, each after another.  Well, I have an interrupt routine that 
>  serves something like a cyclic timer, e.g. the interrupt routine 
decrements 
> a 
>  value each time it is called, and when the value is zero, the interrupt 
>  routine inserts a timer event into the event queue.  If you understood 
that, 
> 
>  then you can probably help now. :)  OK. Here's the problem.  I am running 
>  this program on the emulator one day, and I finally get it to work, but as 
>  soon as I try to do it on my calculator, the damned thing doesn't quite 
work.
>  
>   Now I have to elaborate on THAT. :)
>  
>  OK. Here's exactly what I'm doing.  In my game, each player has a "Time 
Bar."
>  
>   When this bar fills up, that player gets an action, whatever the action 
is. 
>  
>  Then, after they take the action, the bar resets to zero, and it starts 
>  filling up again.  OK.  Well, the interrupt routine increments every 
player'
> s 
>  Time Bar whenever it is called.  Here's the interrupt routine:
>  
>  ;---Interrupt Routine for Battles---
>  Battle_Interrupt:
>   di
>   PUSH HL
>   PUSH AF
>   PUSH BC
>   PUSH DE
>   LD HL, (C_Time_Bar_Timer) ;LD HL with Cloud's Time Bar
>   DEC HL ;Inc it.
>   LD (C_Time_Bar_Timer), HL ;put it back into holding space.
>   LD A, H ;next two lines -- check to see if HL = 0
>   CP L
>   CALL Z, &C_Inc_Time ;it does, so reset C_Time_Bar_Timer and insert timer 
>  event.
>   LD HL, (S_Time_Bar_Timer) ;Repeat for enemy, Sephiroth.
>   DEC HL
>   LD (S_Time_Bar_Timer), HL
>   LD A, H
>   CP L
>   CALL Z, &S_Inc_Time
>   POP DE
>   POP BC
>   POP AF
>   POP HL
>   ei
>   RET
>  
>  You see, when the timers each reach zero, I make FLINE draw a line the 
size 
>  of the player's Time Bar wide (in pixels) to show that the timer is 
getting 
>  bigger.  It works on the emulator, but not on the 85.  Could it be that 
the 
>  hardware on the 85 is slower?  ::confused::
>  The interrupt routine is run through fine, every time. I know it works.  
And 
> 
>  it knows when it should insert the event, but it doesn't do it on the 
TI-85. 
>  
>  It DOES on the emulator.  I'm wondering if the interrupt is getting called 
>  too often for regular stuff to go on outside of it.  Is that a 
possibility?  
> 
>  Did this make any sense? :P
>  
>  -Josh Morris
>   dorkremi@hotmail.com

Hmmm...I *don't* think you need the di/ei instructions if you're using 
Usgard's INT_INSTALL call...in fact, I'm sure you don't, because I've made a 
grayscale routine without that!  I can't say why it won't work on the regular 
85 and yet will on the emulator (what emu are you using?), but try that, and 
see if it works.

JL