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 - willrandship

Pages: [1] 2 3 ... 5
TI Z80 / TI-OS Optimizations
« on: April 11, 2015, 07:58:56 am »
I've had this project sitting in a folder for over a year now, and I decided to pick it back up. I'm posting now because I'm actually making progress that I would consider release-worthy, rather than just a toy.

Everyone knows TI-OS is horribly bloated and slow, but we've built so much software into the existing system that no one's too anxious to leave. So, why not fix the problems and keep the OS as it is?

That's what I'm doing. Reprogramming bits and pieces of TI-OS to be faster, better, smarter, stronger, etc.

All the work is being done based on OS 2.41 for 84+SE at the moment. (Although, currently it's all taking place in page 00, so that's pretty much moot) Some of the optimizations will definitely be ported to the other models, but others (like improved USB) obviously wouldn't apply. Ideally, though, the modifications would converge to a single OS version that works on ALL the models in the 83+/84+SE range. (No, I'm not planning to support the CSE or CE. At least, not for now.)

If I release anything, to avoid copyright concerns, it will be patches against the ROMs I specify. It's a historically non-grey method of distributing hacked and modded software, so I hope I can avoid any nasty legal letters with this.

So, without further ado, here's what I've done so far: (I will edit this list with updates)

* Optimized LCD_Delay routine in Page00. It saves a minimum of 260 cycles per screen command on all models, for any software that uses the built in routines. (Not Axe, or most Asm). This results in roughly a 10% improvement in display-heavy routines in TI-BASIC, for example.

Here's what else I want to look into, but haven't done yet:

* The TI-BASIC interpreter (I bet this is loaded with goodies)
* Floating point optimizations
* Various frequently used system bcalls
* Improved Graphing (mostly through optimized fp and draw commands, but also ideally by not updating the screen until it's drawn fully)

Let me know of any suggestions, ideas, discouragements, etc. you may have.

TI Z80 / 84+ OS 2.41 Asm Source
« on: March 23, 2014, 06:42:27 pm »

Goal: A complete set of files which you can build in order to obtain a complete OS ROM, with proper labels and equates, so modifications are easy.

I'm basing it on OS 2.41, primarily because of BrandonW's extensive work on a disassembly of that particular version. Without that, this would be much harder.

The code is made to be compilable with Brass, benryyves' assembler. This means it can be compiled with any x86 OS that supports mono, and if you can get the DCS SDK you should be all set.

The easiest mods that would have a directly beneficial effect would be optimizations to bcalls. This would directly increase the performance of the system as a whole.

Code: [Select]
Page | Status
00   | Succesful Build
01   | Pending
02   | Pending
03   | Pending
04   | Pending
05   | Pending
06   | Pending
07   | Pending
08-6e| Empty
6f   | Pending
70-73| Empty
74   | Pending
75   | Pending
76   | Pending
77   | Pending
78   | Pending
79   | Pending
7a   | Pending
7b   | Pending
7c   | Pending
7d   | Pending
7e   | Empty
7f   | Pending

Miscellaneous / Willrandship's upcoming 2 Year Absence
« on: December 10, 2013, 02:09:41 am »
I am going to be gone for approximately two years, starting Wednesday.

I'll be on an LDS mission, in Mexico City, Mexico.

Any questions should be asked relatively quickly. :P

If it helps, just pretend I'm lurking more than usual.

TI Z80 / [contest 2013 / BASIC] Toy Wars - Willrandship
« on: October 16, 2013, 10:49:14 pm »
Here's my contest entry so far.

Toy Wars
A simple, easy to play turn based strategy game.

I've been working on the map system. The plans right now are up to 5 players, with each being selectable as AI or a player. Teams cannot be allies. If you want to be allies, then be the same team. ;)

Each unit can move one square, attack, or use an item. An order is in the form of a direction only. Teams move all their units simultaneously, so a turn may have you making upwards of 20 actions.

Each unit represents six soldiers, each with their own health bar and attack. Attacks are non-random in terms of damage, but random in terms of which soldier they hit. Thus, battles, while predictable and fair, are still never quite the same. (One team loses a soldier early, dealing less damage)

Shelters restore each soldier left in the unit by 1 HP, consuming one use in the process.

There will also be various forms of ranged weapons including lasers (straight line away from user), cannons (explosion away from user), and other items.

Other non-unit items include breakable and non-breakable barricades, one-time health packs, etc. (I am taking suggestions as long as they're reasonable)

The editor is already mostly finished. Changing a unit type takes some time, unfortunately, but I can't think of a way to make it any faster than it is. (it already does dirty unit checks so it doesn't redraw the whole map) Changing health is much faster.

The map generator is extremely simple right now. It generates random numbers and places them in the map if they're valid. Health is always 999999 (full) for soldiers, and a random int from 5 to 15 for houses.

I figure with 5 teams and a fair amount of terrain, the replay value should be quite high.

The screenie is a little slow, since it's running in an 83+ on the emu. On an 84+ it runs a fair amount faster (but never as fast as I'd like: The cursor is reasonable instead of unbearable, but not really fast)

Other / z80-like portable computer for <$30! (If you build one)
« on: June 25, 2013, 09:31:05 am »
First off, here's the parts list, with digikey links, and price breakdowns.

Now, to the fun part!

This is a simple design for an ez8-based computer. The ez8 is, like the ez80, a modern chip based off of an old zilog chip. However, instead of being based on the z80, which we all know and love, it is based on the z8. This chip was designed to be similar to the z80 in syntactical programming, but the architecture itself is quite different. There is also a C compiler provided by Atmel for the non-gurus.

The computer has 2 ez8 chips, each running at 20 MHz, with 16 KB of flash, 2 KB of RAM, and 29 I/O ports. One of these acts as the primary CPU, for general tasks, while the other is slaved, doing tasks as it is polled, such as managing the included sound system (speaker and headphone port) as well as other routines.

The computer uses a B/W 128x64 display, with a built-in driver chip that makes interfacing it extremely simple. An 8-bit bus for data and instructions, with a few other bits on the side. Duty Cycle is adjustable, so greyscale should be easier than on the TI series.

The main method of input is intended to be a PS/2 keyboard. Also included is a MicroSD card slot, which will interface to the main chip via SPI.

For power, an LM237 regulator hooked to a 4xAA battery holder is also included.

Some notes:

For the most part, this project should be relatively easy to work with. The ez8 chips are 40-pin DIP, with sockets. Most (not all) of the components involved are thru-hole, and most of those that are not can be easily substituted with materials on hand. (For example, I plan to use a floppy connector for the prototype's SD card slot) As of yet, I have no plans to make boards for this, or any other manufacturing arrangements. If there's enough interest later, then maybe that can change ;).

Here's Zilog's page on the exact chip.

Minecraft Discussion / Willrandship's Minecraft Server
« on: February 08, 2013, 12:16:29 am »
So, I've set up a minecraft server. It runs 24/7 as of now.

It has a mod that gives a console-based shop, but all offers are player to player.

The currency is flint-based, and is kept in chests marked by signs. No protection on those chests, so players can just take the money out!

There's a multi-home plugin, with unlimited named homes.

Raiding is allowed, Griefing is not. Difference is that one is for personal profit, the other is for antagonistic/destructive/trolling purposes. ie there's no reason to blow up someone's house, but you are perfectly justified to take their diamond statue. :P

Anyway, the IP is:

We need more players to get a stable economy going! There's already enough stuff at the shop that you won't want for materials, and the world is mostly untouched.

tl;dr: Mostly Vanilla, player-based economy, pvp/raiding allowed, griefing not allowed.

ROM Hacking and Console Homebrew / My First SNES Rom Hack
« on: January 12, 2013, 08:10:04 am »
So, I decided I want to start messing around with SNES rom hacking, and I think I found a good game for the job. Uncharted Waters: New Horizons.

I'm feeling more confident ever since I noticed that the dialogue is in standard ascii, not in some weird 'A is 0' setup that's dictated by the graphical tile layout. That gives me hope about more of the ROM.

So far the ROM map looks like this:

Code: [Select]
Start Address End Address Size Description

0x000000 0x0B1E36 B1E37 Unknown

0x0B1E37 0x0B2377 541 People Names (Crew?)

0x0B2378 0x0B24A3 12B Unknown

0x0B24A4 0x0B29F0 54D Item Names

0x0B29F1 0x0B2A2C 3B Unknown

0x0B2A2D 0x0B2B29 FD Names of Some people (Royals?)

0x0B2B2A 0x0B5986 2E5D Unknown

0x0B5987 0x0BFB9B A215 Dialogue

0x0BFB9C 0x0E5A6D 25ED2 Unknown

0x0E5A6E 0x0EBE61 63F4 Tip/Tutorial Dialogue

0x0EBE62 0x0EBF8D 12C Unknown

0x0EBF8E 0x0EF346 33B9 Some kind of encyclopedia entries

0x0EF347 0x0EF474 12E Unknown

0x0EF475 0x0EF917 4A3 Discoveries Listing?

0x0EF918 0x0F7445 7B2E Unknown

0x0F7446 0x0FB3B3 3F6E Task-related Town Dialogue (Ship Traders, Kings, Whatnot)

0x0FB3B4 0x1FFFFF 104C4C Unknown - End of ROM

I don't actually know how to check for sprites and whatnot, or how to set up an emulator with a debugger. Those would help.

Other Calc-Related Projects and Ideas / OmniRPG - Coding
« on: December 06, 2012, 12:11:45 am »
So, here's the topic where we'll discuss the coding of the game.

Other Calc-Related Projects and Ideas / OmniRPG - Storyline Discussion
« on: December 05, 2012, 06:14:55 pm »
This is the topic for discussion of the plot of the game.

Current Wiki: Here

Other Calc-Related Projects and Ideas / OmniRPG - Main Topic
« on: December 05, 2012, 04:42:04 am »
Omni-RPG Main Thread
This thread is for discussing pretty much anything relating the the Omni-RPG community game. Sub threads currently are:

The Omnimaga RPG project is intended to be a community-created large scale project. That means anyone is eligible to help. There is some management by specific members to keep things organized, but there are still tons of things that other members can do.

Computer Programming / Change the font in a terminal
« on: October 29, 2012, 11:06:54 am »
So, I'm working on a project where I use a custom font to render all my graphics, but I know that the terminals set the font differently, and that the python console has no control over it. My thought was to use a standalone terminal with my program, but I'm having a hard time finding a portable linux terminal, and it needs to support TTF fonts.

Any suggestions?

Other Calc-Related Projects and Ideas / Weekly Programming Challenges
« on: October 12, 2012, 01:50:46 am »
So, this is an idea that would help boost activity, while also helping members get more acquanted with programming.

Programming Challenges

Community based programming events seem to have boosted activity in the past. Ie, portal X, the Summer programming contests, ndless, etc. so I figure we could get a more stabilized activity base by having continuous events.

Types of Events

Team [Up to 2, Up to 4, etc.]
Super Co-Op (The whole community contributes to one project, excepting one impartial person who then judges each person's contributions for points. It's mostly for the awesomeness of doing something, though)


Easy [expected <24 hrs]
Medium [expected <3 days]
Hard [expected <1 Week]
Insane [>1 week]
Lunatic [>1 month] (go Touhou :P)

You start a new Easy and Medium challenge every week, and one Hard, Lunatic and Insane challenge after 1 month.


We should have randomly chosen teams, but each would contain a certain amount from different pools. As in, there would be a pool of users good at graphics, a pool good at the programming, map design, etc.

Example scoring system (I'm coming up with it on the spot. Criticism is welcome. )

100 points for every hour after it has been announced. (you do percentages of hours rounded to 1 point)
24000 points for not working 100% (This is for those Lunatic Challenges. It would give people 10 days to beat a nonworking entry)
1 point for each byte in the runtime file. This gives an advantage to Axe/Asm over BASIC/Grammer.
1 point for every frame/millisecond/whatever it takes to run, past the execution point. (pressing enter)
-(A fair amount) for creativity, etc. (If someone mimics another person's program, they would get less creativity, so they would have to come up with a big optimization to compensate. I don't think basing off another's program is bad this way, since they'd also be behind on time.)

What counts for the bytes is any non-language based (grammer, Axe Fusion) requirement for a program to run. If it needs external variables defined BEFORE execution, then those variables count as well.
(I'm looking at basic here: Defining 10->A where A is unknown does NOT count A)
Basically, if you need to send it to the calc for your program, and not for any other program, it counts.

Points are BAD.

Asm programs should be run with Asm(prgmNAME), and Axe programs should be compiled so they can run the same way. This is because timing problems would result from running MirageOS/DoorsCS/Ion start methods.

There should be a website with a live-updating countdown method of some sort, so it shows the challenge to everyone at the same time regardless of refreshes.


Since they're weekly, there shouldn't be IRL prizes (money is expensive!) but maybe we should bring back the trophy system, but for this. Clicking on the trophy would take you to their zip in the file archives.

Oh, and the entries should be open source. We should have the community development skill increase as people see others' methods for running programs faster. These programs aren't going to be massive games or anything, and it's not a huge deal if someone undercuts you.

[size=24]Some Details[/size]

Reentries are allowed, but invalidate previous entries. If it's the same entry twice, then you just add to your time score.
Entering code that is not all yours is fine. (Axioms, Grammer Libs, Someone else's source) If you have the resources to find something for this contest that fast, then the community will benefit from it. If you rip off someone's entry, you're behind them on both time AND creativity.

A few example challenges: [stuff] means replace with specifics.
* make a program that displays the result of [some (hard) math operation]
* make a program that can draw [3d, lots of grey, etc.]
* make a program that [does something] in an especially creative way.

One potential problem is the time delay between the different time zones we are in. I believe we have 3 separate general regions to deal with (americas, europe, eastern asia) and I have a few thoughts on that as well.
* Have the start base on local time, so everyone starts at 5:00 PM in their area.
* Ignore the problem, and make the challenges hard enough that it's negligible. (ie they take 3-4 days)
* Cycle through starting times, so everyone gets a head start at some point.

The Axe Parser Project / How closely tied is Axe to the TI-OS?
« on: September 10, 2012, 01:27:42 am »
I had a bit of a crazy thought: What if there was an OS that had a similar memory layout to TI-OS, but removed a lot of useless 'features' and had a lot of optimizations for speed/space, as well as being better for axe runtimes? (Ie have the same effect as Axe Fuzion, and have management menus for axioms, etc.

Legally, as long as only a patch is released, there's no illegal file sharing (aka warez :P)

However, this is where I get curious: Just how closely does Axe Parser interact with the OS? Does it, for example, use any bcalls? IIRC, getkeyr is an example.

Computer Projects and Ideas / brainfsck in python by willrandship
« on: August 17, 2012, 12:43:18 am »
Code: [Select]
Just a little project I'm working on. It's not working yet, but it should be  :banghead:

[code]#!/usr/bin/env python2
# -*- coding: utf-8 -*-

#  Copyright 2012 Unknown <[email protected]>

#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.

#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  GNU General Public License for more details.

#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.

import sys

prog = open(sys.argv[1],'r')
except IndexError:
print ("Usage: python script program")
except IOError:
print("File Not Found")

BYTE_MAX = 255 #These values are the default for an 8-bit implementation.
ARRAY_MAX = 29999

loops = {}
ptr = 0

array = []
for a in range(30000): #Give array the proper dimensions
array += [0]

#These are the executing functions for the commands.

def inc_ptr():
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
ptr += 1
if ptr > ARRAY_MAX:
ptr = 0

def dec_ptr():
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
ptr += -1
if ptr == -1:

def inc_byte():
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
array[ptr] += 1
if array[ptr] > BYTE_MAX:
array[ptr] = 0

def dec_byte():
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
array[ptr] += -1
if array[ptr] == -1:
array[ptr] = BYTE_MAX

def out_byte():
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
print (chr(array[ptr]))

def in_byte():
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
array[ptr] = ord(input("In: ")[0:1]) #Python3 uses input, python2 uses raw_input. change if it nameErrors. (2 because of unrecognized chars, 3 because raw_input is meaningless.)

def in_loop(run_line):
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
if array[ptr] == 0:
run_line = loops[run_line]
print ("Jumped to "+str(run_line))

def out_loop(run_line):
global ptr,ARRAY_MAX,BYTE_MAX,loops,array
if array[ptr] != 0:
run_line = loops[run_line]
print ("Returned to "+str(run_line))

#These are other functions, mostly for startup prep.

def find_loops():
global loops
global prog
op_num = 0
in_loops = []
out_loops = []
for line in prog:
for char in line:
if char == "[":
in_loops += [op_num]
if char == "]":
out_loops += [op_num]
op_num += 1

if len(in_loops) != len(out_loops):
print ("Error: Nonmatching bracket count.")

for a in range(len(in_loops)):
loops[in_loops[a]]  = out_loops[a]
loops[out_loops[a]] =  in_loops[a]
print ("Found "+str(len(in_loops))+" loops")

def filter_prog(): #Currently unused
global prog
op_str = ""
for line in prog:
for char in line:
if char in "><+-.,[]": #Eliminate useless characters
op_str += char
op_str += "!" #Signals an EOF. Don't worry, you can still have ! in the file elsewhere.
return op_str

def exec_op_str(op_str):
op = ''
op_num = 0
while op != '!':
op = op_str[op_num]

#Contains the if statements for all the commands, executing them.
if True: #For grouping purposes
if op == ">":

if op == "<":

if op == "+":

if op == "-":

if op == ".":
print ("Printed a char")

if op == ",":

if op == "[":

if op == "]":
op_num += 1

def main():
global array, prog
op_str =
print (array[0:100])
return 0

if __name__ == '__main__':

Oh btw {code} turned my tabs into spaces, but the code should still work fine.[/code]

Minecraft Discussion / Hunger Games Tourneys (Minecraft)
« on: May 08, 2012, 07:04:16 pm »
So, I was thinking of having some Minecraft Hunger Games matches on Omnimaga. Interested? Post below. I can host them.

I was thinking of just having a Bedrock-enclosed (lowest height to highest, but no ceilings) arena (maybe glass roof), with the spawn outside it. You get tele'd to the inside of the arena, at a "Cornucopia", and the games begin.

*No Exiting the arena. Auto-forfeit on breaking this rule. (ie leaving = death in the competition's eyes)

*No Interfering with the "Tributes" while in the competition (for spectators)

*While on the starting platforms by the cornucopia, you must wait for the "Game Master" to declare the start of the competition.

*You may bring one item, or one Item stack in stackables' case. You are NOT allowed to have the following:
-Equipment above Stone
-Nonexistent Items

I'll try to make sure the map can sustain life.

I'm taking suggestions on rules, scheduling, etc.

Pages: [1] 2 3 ... 5