Author Topic: Assembly Programmers - Help Axe Optimize!  (Read 83004 times)

0 Members and 1 Guest are viewing this topic.

Offline calc84maniac

  • eZ80 Guru
  • Coder Of Tomorrow
  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2898
  • Rating: +467/-17
    • View Profile
    • TI-Boy CE
Re: Assembly Programmers - Help Axe Optimize!
« Reply #45 on: June 03, 2010, 12:46:22 am »
Hmm, did you try with ALCDFIX?
"Most people ask, 'What does a thing do?' Hackers ask, 'What can I make it do?'" - Pablos Holman

Offline DJ Omnimaga

  • Former TI programmer
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55881
  • Rating: +3151/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • DJ Omnimaga Music
Re: Assembly Programmers - Help Axe Optimize!
« Reply #46 on: June 03, 2010, 01:28:31 am »
Me or Qigubio?

Offline calc84maniac

  • eZ80 Guru
  • Coder Of Tomorrow
  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2898
  • Rating: +467/-17
    • View Profile
    • TI-Boy CE
Re: Assembly Programmers - Help Axe Optimize!
« Reply #47 on: June 03, 2010, 12:20:52 pm »
Quigibo, since he said he was having slight lcd problems with my routine
"Most people ask, 'What does a thing do?' Hackers ask, 'What can I make it do?'" - Pablos Holman

Offline DJ Omnimaga

  • Former TI programmer
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55881
  • Rating: +3151/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • DJ Omnimaga Music
Re: Assembly Programmers - Help Axe Optimize!
« Reply #48 on: June 03, 2010, 06:21:31 pm »
Aaah ok. Will the problems occurs only on certain calcs, btw?

Offline calc84maniac

  • eZ80 Guru
  • Coder Of Tomorrow
  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2898
  • Rating: +467/-17
    • View Profile
    • TI-Boy CE
Re: Assembly Programmers - Help Axe Optimize!
« Reply #49 on: June 03, 2010, 06:27:44 pm »
Well, this is probably just the same thing that caused problems with certain games on newer calcs (which require longer delays when interfacing with the LCD). I suppose it wouldn't hurt to add a little more delay to be safe.
"Most people ask, 'What does a thing do?' Hackers ask, 'What can I make it do?'" - Pablos Holman

Offline DJ Omnimaga

  • Former TI programmer
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55881
  • Rating: +3151/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • DJ Omnimaga Music
Re: Assembly Programmers - Help Axe Optimize!
« Reply #50 on: June 03, 2010, 06:43:33 pm »
Aaah ok. Wasn't it on random calcs, tho? I remember way back in 2004 as soon as the 84+ came out there were already people with LCD issues, including regular 83+

Offline Quigibo

  • The Executioner
  • CoT Emeritus
  • LV11 Super Veteran (Next: 3000)
  • *
  • Posts: 2031
  • Rating: +1075/-24
  • I wish real life had a "Save" and "Load" button...
    • View Profile
Re: Assembly Programmers - Help Axe Optimize!
« Reply #51 on: June 03, 2010, 07:09:15 pm »
I have the newer 84 with the slower LCD by the way.  I'll see if this fixes it.  Although, I would rather the user not need to do this when running axe games.
___Axe_Parser___
Today the calculator, tomorrow the world!

Offline DJ Omnimaga

  • Former TI programmer
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55881
  • Rating: +3151/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • DJ Omnimaga Music
Re: Assembly Programmers - Help Axe Optimize!
« Reply #52 on: June 03, 2010, 07:15:49 pm »
same here. I think this is a major hassle when you download a game for your new calc only to find out you will need an additional program.
* DJ Omnimaga stabs Texas Instruments x.x

They need to quit with their crappy LSD... er... LCDs
« Last Edit: June 03, 2010, 07:25:18 pm by DJ Omnimaga »

Offline TIfanx1999

  • ಠ_ಠ ( ͡° ͜ʖ ͡°)
  • CoT Emeritus
  • LV13 Extreme Addict (Next: 9001)
  • *
  • Posts: 6173
  • Rating: +191/-9
    • View Profile
Re: Assembly Programmers - Help Axe Optimize!
« Reply #53 on: June 03, 2010, 11:07:18 pm »
I have the newer 84 with the slower LCD by the way.  I'll see if this fixes it.  Although, I would rather the user not need to do this when running axe games.
If it's a shoddy LCD it really can't be helped. :( It's a shame that some of the hardware is low quality.

Offline Quigibo

  • The Executioner
  • CoT Emeritus
  • LV11 Super Veteran (Next: 3000)
  • *
  • Posts: 2031
  • Rating: +1075/-24
  • I wish real life had a "Save" and "Load" button...
    • View Profile
Re: Assembly Programmers - Help Axe Optimize!
« Reply #54 on: June 04, 2010, 01:14:54 am »
Alright, I made a big modification.  Its now only 7 bytes larger than the original routine now, still doesn't need to be initialized, and is significantly faster and better looking, but still just slow enough to work on any LCD without having to run fixer programs.

The only downside is that I use a shadow register.  That means this command should NEVER be used in an interrupt routine.  That's alright though becasue you should never have LCD commands inside of an interrupt anyway.  Its much better to just have the interrupt control a counter and then your drawing routine updates the LCD depending on the counter.

Let me know if this can be optimized more and still run on the slower LCDs.

Code: [Select]
p_Disp4Lvl:
di
ld a,$80
out ($10),a
ld (OP1),sp
ld sp,appbackupscreen - plotSScreen
ld e,(plotSScreen-appbackupscreen+12)&$ff
ld c,-$0C
ex af,af'
ld a,%11011011
inc (iy+asm_flag2)
jr z,__Disp4Lvlskip
add a,a
ld hl,(flags+asm_flag2)
inc l
jr z,__Disp4Lvlskip
rlca
ld (iy+asm_flag2),-2
__Disp4Lvlskip:
ld l,plotSScreen&$ff-1
ex af,af'
__Disp4Lvlentry:
ld a,c
add a,$2C
ld h,plotSScreen>>8
inc l
ld b,64
out ($10),a
__Disp4Lvlloop:
ld a,(hl)
add hl,sp
xor (hl)
ex af,af'
cp e                              <-- Epic coincidence that e just happened to be between 182 and 219
rra
ld d,a
ex af,af'
and d
xor (hl)
out ($11),a
ld d,(plotSScreen-appbackupscreen+12)>>8
add hl,de
djnz __Disp4Lvlloop
inc c
jr nz,__Disp4Lvlentry
__Disp4LvlDone:
ld sp,(OP1)
ei
ret
__Disp4LvlEnd:
___Axe_Parser___
Today the calculator, tomorrow the world!

Offline DJ Omnimaga

  • Former TI programmer
  • CoT Emeritus
  • LV15 Omnimagician (Next: --)
  • *
  • Posts: 55881
  • Rating: +3151/-232
  • CodeWalrus founder & retired Omnimaga founder
    • View Profile
    • DJ Omnimaga Music
Re: Assembly Programmers - Help Axe Optimize!
« Reply #55 on: June 04, 2010, 01:32:38 am »
altough I won't understand the code, I am glad you found a solution :D

Offline calc84maniac

  • eZ80 Guru
  • Coder Of Tomorrow
  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2898
  • Rating: +467/-17
    • View Profile
    • TI-Boy CE
Re: Assembly Programmers - Help Axe Optimize!
« Reply #56 on: June 09, 2010, 01:16:54 am »
Hmm, remember when I suggested you could use IX as a pointer to the variables for easier access when doing 8-bit operations? That would be too much of a hassle, we agreed. But what if you moved the variables to the END of savesscreen? Then they would be within the range of the IY register (which points 4 bytes after the end of savesscreen). Just something to consider :)
"Most people ask, 'What does a thing do?' Hackers ask, 'What can I make it do?'" - Pablos Holman

Offline ztrumpet

  • The Rarely Active One
  • CoT Emeritus
  • LV13 Extreme Addict (Next: 9001)
  • *
  • Posts: 5712
  • Rating: +364/-4
  • If you see this, send me a PM. Just for fun.
    • View Profile
Re: Assembly Programmers - Help Axe Optimize!
« Reply #57 on: June 09, 2010, 06:28:02 pm »
This is really cool!
Quigibo, is it possible to have the routine that's too fast, or is it way too fast? ;D

Offline Quigibo

  • The Executioner
  • CoT Emeritus
  • LV11 Super Veteran (Next: 3000)
  • *
  • Posts: 2031
  • Rating: +1075/-24
  • I wish real life had a "Save" and "Load" button...
    • View Profile
Re: Assembly Programmers - Help Axe Optimize!
« Reply #58 on: June 09, 2010, 09:59:04 pm »
Hmm, remember when I suggested you could use IX as a pointer to the variables for easier access when doing 8-bit operations? That would be too much of a hassle, we agreed. But what if you moved the variables to the END of savesscreen? Then they would be within the range of the IY register (which points 4 bytes after the end of savesscreen). Just something to consider :)
Hmm... interesting proposition.  Although it would optimize some operations like addition and subtraction, there is still one key advantage to using the existing variable slots.  By using only the least significant bytes of those variables, you never need to do "conversions" when you switch from word to byte mode.  You have to get input and output somehow otherwise there's not much advantage to the new mode.  By being able to skip the conversions, I think that will save more memory in the long run than by using the iy or ix registers.

By the way, I've further optimized that grayscale command and its basically the same size as my original now except way faster which is excellent.

@ztrumpet: I'm not sure if it actually works, I'm going to assume calc83manic tested it on his hardware and got it to work since he proposed it, but the main issue here is compatibility.  This isn't the only sacrifice I've had to make.  There are a few other places where undocumented commands could make routines more efficient, but that wouldn't please the Nspire users.  I could add waste instructions to the super fast routine, but it really adds a lot to the size since I have to add 3 times as many.
___Axe_Parser___
Today the calculator, tomorrow the world!

Offline calc84maniac

  • eZ80 Guru
  • Coder Of Tomorrow
  • LV11 Super Veteran (Next: 3000)
  • ***********
  • Posts: 2898
  • Rating: +467/-17
    • View Profile
    • TI-Boy CE
Re: Assembly Programmers - Help Axe Optimize!
« Reply #59 on: June 09, 2010, 11:08:09 pm »
Actually, I didn't test it oncalc. I've written things like this before, so this time I just typed it up.
"Most people ask, 'What does a thing do?' Hackers ask, 'What can I make it do?'" - Pablos Holman