Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Iambian

Pages: 1 2 [3] 4 5
31
ASM / Documentation dump
« on: January 05, 2011, 07:51:28 pm »
What I have here is for someone on the omni chat room. It explains a little about the VAT. If you find this useful, move this topic to some other place.

Code: [Select]
On the TI-83 Plus graphing calculator, there are three different tables used to
allocate memory to programs, or to determine the presence of each program or
variable to the calculator. For the reason the table exists, it's often times
called the "VAT", or "Variable Allocation Table". Usually, this name is given to
the second part of the entire table, or to be most specific, the first part of the
table, with a fixed beginning, is called the "Symbol VAT" and the next part is
called the "Program VAT", but some people would call it the "Symbol Table" and the
"VAT", respectively. The third part, which few people know about, is the Temporary
Variable section, which is pointed to by (pTemp). (pgmPtr) points to the Program
VAT.

All entries on any table are written in backwards, from high memory to low memory.

All entries on Program VAT vary depending on the name length

==============================================
| -(n+6)    -6    -5   -4    -3    -2  -1  0 |
==============================================
| VarName  N.Len Page DadrH DadrL Ver  T2  T |
==============================================

VarName can be up to 8 characters in length
T= first five bits are datatype,
   b5= graph equ selected
   b6= variable used during graphing
   b7= link transfer flag
T2=for future use [TI-OS keeps it at ZERO]
Ver= version code to not recieve if higher than current OS code
DadrL = data address, LSB
DadrH = data address, MSB
Page  = if archived, holds flash page. Otherwise, = 0
N.Len = following name's length. For lists, this includes token and formula #

For lists, the name can be up to 5 characters in length.
Preceding the name is the list token ($5D), and postceding it is the formula number, which is
set to zero if there is no formula attached. If there is, then a number will be given to point
to a corresponding unique name for an EQU variable in the Symbol VAT.

All entries on the Symbol VAT are fixed in size.

==============================================
| -8   -7   -6    -5   -4    -3    -2  -1  0 |
==============================================
|  0   Tok2 Tok1 Page DadrH DadrL Ver  T2  T |
==============================================
Tok1 = first token of name
Tok2 = second token of name

A symbol table entry for a formula would be where:
Tok1 = $3F
Tok2 = F, where "F" would be the corresponding function # found with the list.

If you want, here's some code that'll perform a sort on the program VAT. My hope is that it'll help you better understand code that works with the VAT:
Code: [Select]
#define equ .equ
#define EQU .equ
#define EQU .nostub

.org $9D93
.dw  $6DBB
;Program used to sort the Program/List VAT alphabetically
;(progPtr) is the start of the VAT. First order of business is to determine
;how many entries are in the VAT. Then we can go ahead and blindly sort the
;entire contents of the VAT.
;Checking against (pTemp) at the end of the run. Gets us this manieth entries
;
;
#define bcall(xxxx)     rst 28h         \ .dw xxxx
_DispHL EQU 4507h

pTemp                EQU  982Eh
progPtr              EQU  9830h
tempSwapArea         EQU  82A5h
curptr   equ tempswaparea   ;2 bytes, current location in the VAT
swaptemp equ curptr+32      ;up to 30 bytes for temporary swapping. Backwards

ProgramStart:
 ld ix,0
 ld bc,(ptemp)
 ld hl,(progPtr)
ProgramLoop1:
 call GetNextEntry
 inc ix
 push hl    ;preserve HL for the check.
  or a
  sbc hl,bc  ;checking to see if it's at the end.
 pop hl
 jr nz,ProgramLoop1 ;If end of VAT is not current pointer, keep going.
 push ix
 pop bc
ProgramLoop2:
 ld hl,(progPtr)  ;pointer to the start of the VAT, to start off with each run
 dec bc
 ld a,b
 or c
 ret z            ;Kill routine if there's no more entries to sort through
 push bc          ;saving this variable for later...
ProgramLoop3:
  push bc          ;save loop counter for VAT traversal
   push hl         ;save current address to the VAT location
    ld de,-6       ;to get to...
    add hl,de      ;...file name size of this VAT entry
    ld c,(hl)      ;getting size of entry #1 into C
    push hl        ;saving first address point   
     ld a,c        ;
     cpl           ;getting past name and first decrement
     add a,e       ;-6+-1+-sizeofcurrenname = entry #2 name size
     ld e,a        ;Hehe. Loading this back into DE
     add hl,de     ;now at size of second file
     ld b,(hl)     ;And putting filename size #2 into B
     dec hl        ;moving HL to the filename's start (#2)
    pop de         ;DE is 1st file, HL is second file. Starting at their names.
    dec de         ;moving DE to the filename's start (#1)
    ld a,c         ;Start comparison of namelength fields.
    cp b           ;C=(#1) B=(#2); C-B. Carry if C is shorter
    ld a,1         ;If first name is longer, then perform swap if all is equal
    jr nc,$+4      ;If B(#1) is shorter (NC), skip. Else, set B to short and...
    dec a          ;...reset A to indicate no swap.
    ld b,c         ;Set B to the lowest possible
    ld c,a         ;Resetting C to function as a flag. Should it swap is the anser.
ProgramLoop4:
    ld a,(de)      ;1st file
    cp (hl)        ;2nd file.
    dec de         ;get next characters in the file names.
    dec hl
    jr nz,$+6      ;if the names do not match, jump past to continuation...
    djnz ProgramLoop4  ;only iterating for shortest number of characters.
    jr ProgramSkip5    ;If no more chars, do default swap action from last rtn.
    ld c,0             ;Remove flag from previous routine. Diff in name means...
    jr c,ProgramSkip5  ;(1f)-(2f) If carry, no swap needed.
    inc c              ;else, start up the routine used for swapping.
Programskip5:         ;we have our flags now. 0 for noswap, 1 for swap
   pop hl              ;get back current VAT address (starting)
   ld (curptr),hl      ;save this for future reference.
   call GetNextEntry   ;getting the next entry from HL
   dec c               ;checking for zero. If so, a swap is in order...
   jr nz,ProgramSkip6  ;if jump is taken, skip the swapping business
   ld de,swaptemp     ;loading the temporary writeout address
   call CopyEntry     ;copy second entry
   ld hl,(curptr)     ;get back the first entry location
   push hl            ;Save it as the location to write back to.
    call CopyEntry    ;copy the first entry as second into the buffer
    ld hl,swaptemp    ;loading higher address to HL and prepare for subtraction
    or a              ;clear out carry flag so sbc isn't affected.
    sbc hl,de         ;Subtract to get the size difference (number of bytes)
    ld b,h            ;number of bytes total to copy
    ld c,L
   pop de             ;back to first entry location
   push de            ;save that sucker again.
    ld hl,swaptemp    ;point to the start of the temporary buffer location
    lddr
   pop hl
   call GetNextEntry   ;getting the NEW next entry
ProgramSkip6:
  pop bc
  dec bc
  ld a,c
  or a
  jr nz,ProgramLoop3
 pop bc
 jr ProgramLoop2
 
CopyEntry:
 ld bc,6   ;write and decrement HL and DE the first 5 bytes of VAT entry.
 lddr      ;Uh. yeah.
 ld a,(hl) ;Get that sixth byte, which is size field
 inc a     ;Another for this byte as well...
 ldd       ;Perform one LDD for each byte of the name and the size field as...
 dec a     ;...indicated by this number.
 jr nz,$-3 ;And loop until the entire things is written out into the buffer
 ret
GetNextEntry:
 ld de,-6            ;go ahead and skip past current entry...
 add hl,de           ;
 ld a,(hl)           ;get those size bytes.
 cpl                 ;and as we did before
 ld e,a              ;add them together with the CPL's autodecrement
 add hl,de           ;and we're at the start of entry #2.
 ret

.end

The following bit of source comes right out of Celtic III. It searches the VAT for some given variable in Op1. It's supposed to be a replica of the ChkFindSym romcall, but I wrote it because I wanted something faster than a romcall. I believe this code searches both the Symbol Table and the Program/List VAT structures.
Code: [Select]
SearchVAT:
 ld hl,(Op1)
 ld h,$00
 ld de,SearchVTbl
 add hl,de
 ld a,(hl)
 or a
 jr nz,SearchVP
SearchVS:
 ld hl,(progptr)
 ld de,-6
 add hl,de
 ex de,hl
 ld hl,symtable-6
 ld bc,-9
SearchVSL:
 push hl
  ld a,(Op1+1)
  cp (hl)
  dec hl
  jp nz,SearchVSN
  ld a,(Op1+2)
  cp (hl)
  dec hl
  jp nz,SearchVSN
  ld a,(Op1+3)
  cp (hl)
  dec hl
  jp nz,SearchVSN
  ld bc,4
  add hl,bc
  ld b,(hl)
  inc hl
  ld d,(hl)
  inc hl
  ld e,(hl)
  jr SearchVSE
SearchVSN:
 pop hl
 add hl,bc
 or a
 sbc hl,de
 add hl,de
 jp nz,SearchVSL
 scf
 ret
SearchVSE:
 pop hl
 ld a,(Op1)
 or a
 ret
SearchVP:
 ld hl,Op1+1
 xor a
 ld c,a
 cp (hl)
 jr z,$+8
 inc hl
 inc c
 bit 3,c
 jr z,$-7
 ld hl,(progptr)
 ld de,-6
SearchVPL:
 ld a,(Op1)
 cp (hl)
 jr nz,SearchVPS
 push hl
  ld de,Op1+1
  ld b,c
  ld a,(de)
  cp (hl)
  jr nz,SearchVPSP
  inc de
  inc hl
  djnz $-6
 pop hl
 push hl
  dec hl
  dec hl
  dec hl
  ld e,(hl)
  dec hl
  ld d,(hl)
  dec hl
  ld b,(hl)
 pop hl
 or a
 ret
SearchVPSP:
  ld de,-6
 pop hl
SearchVPS:
 add hl,de
 push de
  ld a,(hl)
  neg
  ld e,a
  add hl,de
  ld de,(ptemp)
  or a
  sbc hl,de
  add hl,de
 pop de
 jr nz,SearchVPL
 scf
 ret

SearchVTbl:
.db 0  ;00 real
.db 1  ;01 list
.db 0  ;02 matrix
.db 0  ;03 equation
.db 0  ;04 string
.db 1  ;05 program
.db 1  ;06 protected program
.db 0  ;07 picture
.db 0  ;08 graph database
.db 0  ;09 unused
.db 0  ;0A unused
.db 0  ;0B new equation
.db 0  ;0C complex
.db 1  ;0D complex list
.db 0  ;0E unused
.db 0  ;0F unused
.db 0  ;10 unused
.db 0  ;11 unused
.db 0  ;12 unused
.db 0  ;13 unused
.db 0  ;14 application. Passthrough.
.db 1  ;15 appvar
.db 1  ;16 temporary program
.db 1  ;17 group

32
Other Calculators / Athena Packager / Installer
« on: December 30, 2010, 04:52:45 pm »
Athena Packager / Installer



http://www.omnimaga.org/index.php?action=downloads;sa=view;down=612

The packager / installer pair Athena is here to make distributing really large BASIC games a bit easier. Features on-computer packaging abilities which compresses and consolidates the vast amount of subprograms, pictures, and whatnots into an archive.

From the calculator side, send prgmATHENA, along with the files that the PC program generates and it will unpack these files to either your FlashROM or RAM, depending on how the file was generated. Once installation is under way, it's mostly automatic.

Make it easy on the end user to install large games! Pick Athena for your packaging / installing needs!

( Please, for the love of all that is good, read ALL the readme files )

EDIT1: Fixed checksum error problem.

33
Other Calculators / Athena Packager / Installer
« on: December 22, 2010, 01:54:58 am »
Athena Packager / Installer



http://www.omnimaga.org/index.php?action=downloads;sa=view;down=612

The packager / installer pair Athena is here to make distributing really large BASIC games a bit easier. Features on-computer packaging abilities which compresses and consolidates the vast amount of subprograms, pictures, and whatnots into an archive.

From the calculator side, send prgmATHENA, along with the files that the PC program generates and it will unpack these files to either your FlashROM or RAM, depending on how the file was generated. Once installation is under way, it's mostly automatic.

Make it easy on the end user to install large games! Pick Athena for your packaging / installing needs!

( Please, for the love of all that is good, read ALL the readme files )

34
TI Z80 / Athena: Calculator project installer
« on: December 08, 2010, 04:16:49 pm »
Originally started on Cemetech (since there's a load of C coders there who are pretty willing to help), but I'm bringing the idea here too.

As stated in the title, "Athena" is a project to help simplify the installation of large BASIC games. It started when I was reading some thread on Cemetech and DJ Omnimaga mentioned something about me building a RoL3 installer in TI-Basic/CIII. So I figured I would try my hand at building something better. Something that could possibly be used by just about anyone. The project is targeted for the TI-83+SE/TI-84+(SE) users, since they've got crazy-insane archive space for which this is possible.

For users who will be installing these games, you will only need prgmATHENA and some number of data files that are distributed. These data files act as compressed group files. Once you get all that stuff to your graphing calculator (at least read the ReadME.txt that the developer will most likely have put in), run Asm(prgmATHENA) and it will guide you through the installation process. Once it starts, no further user interaction will be needed unless you have to do stuff like garbage collect. No longer do you have to sit in front of a computer and have to send each and every individual file and possibly have to manually archive them. No longer will you have to send group files just to extract then archive the variables. Athena will perform much of this management for you!

If you accidentally delete a few of the files used by the game and if you still have both prgmATHENA and its data files, you may repair the installation by running prgmATHENA again.

Planned is the ability to install files to work with DCS. Which is to say, it will be folder-aware and let you install files in any folder of your choosing (or create your own right then and there if you don't have the folder).

Since the data files are compressed, you'll be able to have multiple large BASIC games on your calculator at the same time. Just uninstall one and install the other if you really want to.

More information will be made available for developers interested in using Athena for their projects. So... tell me what you think.

35
Other Calculators / Picross 0.01
« on: November 02, 2010, 02:30:56 am »
Picross 0.01



http://www.omnimaga.org/index.php?action=downloads;sa=view;down=593

Your good old picross game. Please read the ReadME and figure it out.

36
Escheron: Shadow over Ragnoth / Picross (Clone)
« on: October 24, 2010, 09:32:41 pm »
So, me and geekboy have been talking on IRC about making a 2D Picross clone. For those who are unfamiliar with it, you can find results by either Googling "Picross" or "Nonogram" (which seems to be what it's supposed to be called). He said something about making his entry in Axe and my entry as an App.

So, if you're looking at the breadcrumbs above the topic, you're probably gonna wonder why I posted this under the E:SoR subforum. The reason behind this move is a bit of a stretch, but bear with me.

I intend on using a modified version of E:SoR to build the game. This modified version was originally built for a rickroller, found here: http://ourl.ca/4114/75957

Source is included in it so if you know what you're doing, you can beat me to the punch. So... what do you think?

EDIT: To clarify, I'm only intending on doing this thing. The link to source was what I'm working with to make this game.

EDIT2: For a download link, find the attachment on this post: http://ourl.ca/7598/135642

37
CaDan SHMUP / CaDanITE
« on: September 04, 2010, 01:36:27 am »
Calculator Danmaku Integrated Test Environment.

An idea for a rather hefty level editor for whenever CaDan will support external levels. With this utility you should be able to:
  • Create, modify, or import stage backgrounds
  • Adjust scroll and graphic loop settings
  • Draw new boss graphics, edit boss properties, and set special attacks
  • Place enemies and assign scripts to them, be it ones you made or those that come with CaDan
  • Write text for character/boss interactions. Great for storybuilding!

A few problems need to be worked out with CaDan before I can write CaDanITE, but it's a serious thought I'm thinking of. I mean, it would be pretty awesome to build your own levels for CaDan right on your calc, then test out those levels from the editor if you have a compatible version of CaDan on-calc.

Still. Just a thought at this stage. With a few sheets of paper serving as notes.

38
Escheron: Shadow over Ragnoth / Escheron revolts against bad coder
« on: July 07, 2010, 11:46:22 pm »
So, how do you measure the worth of one's coding ability? One could do that by how poorly the coder's program responds to their continuous meddling. Observe.
Spoiler For Coder's Comments:
No, not really. I just wanted to show you guys for s***s and giggles. It let me save the corrupted data and I reloaded the end result of that. Thought it was pretty funny. Also, if you're wondering about the strange description text, I'm using OS ver 1.16 and that text is found somewhere in the $2800-ish range.

39
Other Calculators / Old PicArc project
« on: April 08, 2010, 12:02:36 am »
I found this archive on my computer and someone on IRC wants it. So, here it is.

You MUST understand that the archives that are generated by this program are *not* compatible with Celtic III's version of PicArc, though a few modifications to the database can be made to make it compatible. Not sure how well that would work, but it might be something for someone to try.

40
CaDan SHMUP / Calculator Danmaku 83+ : Progress summary
« on: March 17, 2010, 01:10:25 am »
Whee! It's been AGES since I've posted *anything* about this game. But the main reason why is because I'm working on E:SoR. But, I can take a break and outline a few of the accomplishments that has happened since the start of CaDan.


This post contains the most recent stable edition of CaDan, for those interested in just downloading it

Sept 10, 2008 : Started the project. Trying to pick a name for the project.
Sept 16, 2008 : Threw together linear bullet patterns. Still trying to pick a name.
Sept 22, 2008 : Added character and "cherry flavouring"
Oct 01, 2008 : First working demo. Playable.
Nov 08, 2008 : Enemies are now rendered on the screen.
Nov 13, 2008 : Enemies are now able to shoot AT you.
Nov 20, 2008 : It's starting to take shape now.
Nov 26, 2008 : Second working demo. See a little later in that topic on a protip.
Dec 11, 2008 : Another working demo of the game. Post says the menu system "works".
Dec 13, 2008 : More cosmetic effects.
Dec 17, 2008 : A nearly complete demo version of the project.
Jan 21, 2009 : Tweaked engine. Exploring image compression for graphics. Another demo.
Jan 23, 2009 : Version I uploaded to ticalc.org.
Jan 28, 2009 : Bugfixed version of CaDan. This is what is linked at the top of this post.
Feb 19, 2009 : Spanned the application to two pages.
Mar 11, 2009 : Dedicated spellcard backgrounds are enabled.
Mar 23, 2009 : Enemy clipping problem fixed.
Apr 22, 2009 : Rolled out a new scripting system for enemies. Broke the old one :(
Apr 29, 2009 : Tightened up enemy aiming.

And after that, I did some cleanups and kinda grew a little away from the project. Then, E:SoR popped in and I started *that* project on  this post.

tl;dr: A brief history of CaDan.

EDIT: Cleaned up this post. Looks way better.
EDIT2: Added the current build of CaDan. I think it works. It still builds. For someone on IRC.
EDIT3: Documentation about bullet scripting has been added.
EDIT4: Added background editing information.

41
Other Calculators / Super Secret E:SoR Transition
« on: February 14, 2010, 06:22:19 pm »
Why'd I place this here? Because it's not really *part* of E:SoR anymore! Just enough of its engine has been used in this funky little app to give you the effect of the last transition in the real E:SoR voting thread. Except this time, it's the full version since I had the space to do it!

Unfortunately, timing issues aren't resolved, but that's okay coz you're probably not gonna have the backup assets to fully present this. Still, you've got enough, and it *is* grayscale.

Suggestions and comments appreciated. This snippet is copy and paste style open-source.

42
Escheron: Shadow over Ragnoth / Pick the best transition!
« on: February 13, 2010, 10:24:46 pm »
So, pick from the options. Poll options are respective to the images posted below.

If I did the poll right, you'll be able to pick three options. In the end, I'm gonna just tally them up and pick the ones with the highest votes.

The last poll option is there in case you have a transition that isn't there but would like to see. If you choose that, you absolutely MUST have an animated file to go along with it. Somewhat serious entries, please.

43
... as long as it doesn't require 3KB or more of dedicated memory.
(j/k).
But seriously. Zera was halfway worried that what I had done was taking up the majority of the page dedicated to the engine. If anything, I can probably move the code off to another page, but still. Can't have something like transition code taking up half a page by itself.

I planned on making a poll but I don't have enough entries yet to justify it. So here's what I've got.

That having been said, suggestions are welcome.

EDIT: Added an earlier screenshot. That diamond wipe was a little too fast and I remember DJ Omnimaga asking me to slow it down. The latter image is of that.

EDIT2: Added a rough spiral effect.

EDIT3: Added a finer spiral effect.

EDIT4: Added a pre-transition effect pack here: http://ourl.ca/4092/75757

44
When I searched for "XCOPY" in the Omnimaga search tool, I found a page worth of results for a program that I never publicly released. That I find hilarious. Well, it's released now. Give the ReadME a stiff read. It'll prove useful, especially since it's missing a function that xLIB had.

At least, I *think* this is the version I had.

It is. I already posted it after reading about how much strife it took to get such a little program to work. Cross posting: http://ourl.ca/3261/60574

EDIT: Okay. So I *did* publicly release it. I must've forgotten since it took me a little sleuthing to figure out why XCPY7.zip wouldn't upload. (Complained of duplicate file)

45
Escheron: Shadow over Ragnoth / E:SoR Images
« on: January 14, 2010, 12:03:39 am »
I'm gonna go ahead and use this thread to post varying images that have been produced for this game. They may be screenshots. They may be other things. This post will be updated each time I have something to add, though I will (if legit) bump the topic and let it be known.

( 1 ) The first contribution I've got to add is a map of Escheron in all its goodness, with markings that show all the important parts. The small airship symbol next to the names means you need to fly to get there. Courtesy of Zera.

Pages: 1 2 [3] 4 5