The Prince of Egypt (1998)
Director: Brenda Chapman, Steve Hickner, Simon Wells Cast: Val Kilmer, Ralph Fiennes, Sandra Bullock, Danny Glover, Jeff Goldblum, Steve Martin, Helen Mirren, Michelle Pfeiffer, Martin Short, Patrick Stewart Screenplay: Producers: Penney Finkelman Cox, Jeffrey Katzenberg, Sandra Rabins Runtime: 99 min. US Distribution: DreamWorks Rated PG: intense depiction of thematic elements
Copyright 1998 Nathaniel R. Atcheson
At the beginning of The Prince of Egypt, I was glad to see a few words regarding the origin of the story of Moses. First, it explains that the source text of the film is the book of Exodus; it then makes the point that this is the story behind the religion in which "millions of people believe." I like this statement because it doesn't explicitly say that the book of Exodus is factual, or that Christians are the only ones who are right. It's just too bad that the film itself does.
The Prince of Egypt is an energetic, visually masterful animated film of questionable morality. It depicts the doings of Moses -- his attempts to free his fellow Hebrews, who have been enslaved by the Egyptians. The story is a familiar one: as an infant, Moses (voiced by Val Kilmer) is sent down river by his slave mother, only to be rescued and raised by the Pharaoh (Patrick Stewart) and his wife (Helen Mirren). Moses grows up with his brother Ramses (Ralph Fiennes); but, as a young man, he learns of his true heredity. So, Moses heads off into the desert, rejecting his Princehood and vowing to free his people. When his father dies, and Ramses becomes the Pharaoh, Moses is forced to wage war on Ramses and the Egyptian people. Along the way, he talks to the burning bush, parts the Red Sea, and massacres thousands of people for the good of his own.
I realize that The Prince of Egypt has been adapted from another text, and that criticizing the material means that, transitively, I'm attacking the Bible. The difference between the book of Exodus and this particular film is that the source text is not so biased -- it shows both sides of Moses' doings; it explains the horrors of the plague that destroys the Egyptian people. The Prince of Egypt, however, is more interested in setting up a good guy-bad guy scenario, so that the Pharaoh is simply evil, and Moses is simply good. But never was I given a reason to think that Moses was any less sinister than Ramses.
I can't deny that the film is extremely powerful in its visual presentation. The animation, particularly in the scene in which Moses parts the Red Sea, is spectacular. (I might even go so far as to use the "jaw-dropping" cliche, because my jaw certainly did drop.) The film is lively and entertaining, and paced very well, and features a lot of talented actors: Kilmer does a good job sounding important, while Fiennes does an equally good job sounding sinister. The supporting cast is colored in familiar voices, with notable roles by Jeff Goldblum (present mostly for comic relief), Patrick Stewart, and Danny Glover (as Jethro). But I have a major problem with the way Moses and his actions are depicted. I know this isn't the first time this story has been done (anyone ever seen The Ten Commandments?), but this is the first time it's been geared towards kids. Are kids just supposed to overlook the scene in which the metaphorical hand of God comes down and slaughters children in their beds? Oh sure, the Egyptians are "bad," right? Yeah, they're just as "bad" as Southern slaveholders in the 19th century. I'll agree that slavery is "bad," but it's not a straightforward issue.
I'm not attacking religion or Christianity, nor do I think Moses was a bad guy. What I'm saying is that The Prince of Egypt is a powerful movie that would have been much more powerful if it had shown Moses in a questionable light. He killed a lot of people, and he did it in the name of God. If Moses had lived today, he would have been labeled a religious fanatic just before being sent to prison. There are good lessons to be learned in the Bible, but I think we could have overlooked the one that tells us that death in the name of God is beautiful.
Psychosis Rating: 6/10
Visit FILM PSYCHOSIS at http://www.pyramid.net/natesmovies
Nathaniel R. Atcheson
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Through this effect the action of the game stays stopped during the specified time. It serves to emphasize certain aspects of the game, for example, used in combination with changes of scene, you can give the user a previsualization of a scene without being able to do anything with the elements of the same.
Create a Wait Time effects:


The riverbank of which I speak was inhabited by glamorous moles. There were dozens of them, each more glamorous than the last, and the one who engages our attention on this damp Wednesday is the most glamorous mole of all. Her name is Hortense. Before you start complaining about the regrettable practice of anthropomorphising riverbank creatures, please bear in mind that not a jot of that is going on here. The mole was called Hortense and she was extremely glamorous. She wore a sort of mole version of a cloche hat, but there was nothing remotely human about her. She was just a mole, albeit one so glamorous that other moles swooned in her presence. Have you ever seen a mole swoon? It is quite a sight, and you will do well to have your camera at the ready. On the Wednesday of which I speak, there were many swooning moles to be seen by the riverbank. And we have not even begun to explore the marshes!


This week was my cohort's first chance to use Javascript. My first impression of Javascript was that it seemed nimble, by that I mean that the syntax by comparison to Ruby was less rigid. Ruby has a lot of explicit declarations for things such as classes and definition of methods. On top of this, there are explicit order of operations when using built in methods such as ".each" on arrays and enumerables. Javascript on the other hand seemed to be very permissive changing how and when to use functions (the equivelant of defining methods for Ruby). What does this mean? It means that functions seem to be the universal form of declaring a set of actions with no real order of operations like that of ".each" or formal declarations other then the calling of the function itself.
I'm going to try to use an example in both Ruby and Javascript on this one. This week we had an assignment to create a game on Javascript. I wanted to keep the game simple but applicable to a game in the real world. I chose to make a blackjack game. The first example I'll show you is how I created a blackjack game on Ruby then I'll compare that to my blackjackgame in Javascript.
In Ruby, the first thing I did was create a class to indicate that the object that I was creating was a "Game" class. I then stated that within that class I want 2 actions / methods to be called upon. I want the class to "play" to symbolize the action a player takes while playing Blackjack. For example the player will either "hit" or "hold". The other action is for the class to "deal". This symbolizes the actions of the players opponent "the dealer" to deal his hand for later comparison against "the player."
I then created a second class called "Winner" to determine the winner between the "player" and the "dealer". I used composition style development to initialize a new "Game" class object within my "Winner" class. This is in order to allow me access to "Game" class methods from with the "Winner" class.
I then created a method within the "Winner" class which compared the values returned from the method "game.play" representing "the players hand" and the method "game.deal" representing "the dealers hand". I then stored those values in instance variables and ran them through conditional statements to determine my winner.
The following are all the possible outcomes:
As promised below is my comparison of my blackjack game in Javascript:
In Javascript, instead of having to declare classes or methods I merely said that I want to create a function and in that function I want these commands to be executed. I then gave it similar conditions to my "play" and "deal" methods from Ruby. I then set them equal to a variable which I declared as variables called "play" and "deal". I will call upon these variables upon a later a point which will give me access to my functions.
Then similar to Ruby in design, I created a 3rd function. It accepts one argument which I'll show below.
I called upon the "play()" function above and set it as a parameter in my "winner()" function. It then ran through the conditionals set in my "winner()" function and used the variables outsdie the "winner()" function to determine a winner.
The reason I believe JS seems lighter is because my variables and functions can be called upon with needing to create a new object within my function to give me access to those variables and functions. This may seem confusing but bare with me on this one.
What I'm refering to is the un-necessity for me to create a new object that declares its class before I am able to access its methods. This is referring to my composition design. My "play()" function and "deal()" function were ran in my "winner()" function without needing to say "randomObject = thisClass.new". This also meant that I didn't have to create new variables to set equal to the other classes methods in order to return their values ie: "@phand = @game.play" or "@dhand = @game.deal". I merely had to call upon the variable that stored those values in this case "playerHand" or "dealerHand".
I think the agile coding in Javascript is nice for simplicity and ease of development however I do so see the virtues of creating explicit classes and methods that are only accessible within those confines. I would go on to say that Javascript while being more agile would require the programmer to mindful to foresee possible conflicting messages in their programs that Ruby developers may not have to think about due to the design of the language however in terms of agility and ease of use I would say Javascript currently holds that title.


---
layout: post
title: announcing events
tags: []
status: publish
type: post
published: true
meta: {}
---
There are two ways that you can announce events in the Mach-ii framework. The first way is inside a CFC (typically I believe a Listener) and that is by calling the announceEvent() method and passing in the event name and any arguments that you wish to pass along as well. For example:
[code][/code]
The other way is in the mach-ii.xml config file. Here you can make use of the following syntax to announce a new event
[code][/code]
Just make sure you have an event-handler set for "someEvent". And also do note that announcing events is not like re-directing to that event. This adds the event to the event queue.


Links
[
Вход
]
В начало
O
case that is lower
of
{O o}
o
has
code that is represented by sum of [one,4,8,16,64,128]
o
and
}
and
[o,}]
O
and
[ ,o,}]
o
and
[t, ,a]
n
and
[o,t, ,a]
and
[n,o,t, ,a]
o
and
f
string
that consists of
[o,f]
name
that is represented by
string that consists of [o,f]
and
[o,f]
s
and
[ ,o,f]
o
and
[n,s,i,s,t,s, ,o,f]
c
and
[o,n,s,i,s,t,s, ,o,f]
and
[c,o,n,s,i,s,t,s, ,o,f]
o
and
[n,e]
string
that consists of
[o,n,e]
name
that is represented by
string that consists of [o,n,e]
r
and
o
e
and
[r,o]
z
and
[e,r,o]
o
and
[u,p]
r
and
[o,u,p]
g
and
[r,o,u,p]
o
and
m
r
and
[o,m]
f
and
[r,o,m]
o
and
[r,e]
f
and
[o,r,e]
e
and
[f,o,r,e]
o
and
[n,t,e,n,t]
c
and
[o,n,t,e,n,t]
string
that consists of
[c,o,n,t,e,n,t]
and
[c,o,n,t,e,n,t]
o
and
[w,e,r]
l
and
[o,w,e,r]
string
that consists of
[l,o,w,e,r]
o
and
[d,e]
c
and
[o,d,e]
string
that consists of
[c,o,d,e]


Match Play. Red leads 2-1 to 5. How should Red play 63?
pips Red=150 White=171
(CorrectAnswer= 0/0, ErrorScore= 0)
When ahead in the race, race. A simple maxim which has stood the test of time. 24/15 is the best play.
White isn’t threatening anything so 11/5, 6/3*, which was played over the board, is the wrong game plan. When you can get the hell out of Dodge, do so!
White isn’t threatening anything so 11/5, 6/3*, which was played over the board, is the wrong game plan. When you can get the hell out of Dodge, do so!
1. Cubeful 2-ply 11/5 6/3* Eq.: +0.431 0.610 0.214 0.019 - 0.390 0.102 0.004 2. Cubeful 2-ply 13/10 11/5 Eq.: +0.430 (-0.001) 0.613 0.203 0.014 - 0.387 0.097 0.003 3. Cubeful 2-ply 24/15 Eq.: +0.423 (-0.008) 0.627 0.155 0.008 - 0.373 0.097 0.003 4. Cubeful 2-ply 24/21 11/5 Eq.: +0.411 (-0.020) 0.613 0.195 0.013 - 0.387 0.101 0.003 5. Cubeful 2-ply 24/18 11/8 Eq.: +0.408 (-0.024) 0.616 0.180 0.012 - 0.384 0.101 0.003


Ingredients
2 lbs pork belly
2 tbsp garlic, minced or crushed
5 pieces dried bay leaves
4 tbsp vinegar
½ cup soy sauce
1 tbsp whole pepper corn
1 cup water
salt to taste
Instructions
1.Combine the pork belly, soy sauce, and garlic
2. Marinade for at least 1 hour
3. Heat the pot and put-in the marinated pork belly then cook for a few minutes
4. Add water, whole pepper corn, and dried bay leaves then bring to a boil.
5. Simmer for 40 minutes to 1 hour
6.Put-in the vinegar and simmer for 12 to 15 minutes
7. Add salt to taste
8. Serve hot. Share and enjoy!


In the previous post I wrote about building a Kubernetes Cluster with Terraform, I covered the bases of building a cluster in Google Cloud Platform. Today I’m going to tackle the Azure Platform. There are a lot of similarities being the same task, but there are some differences which I’ll take a look at. The repository to this write up is located in another_new_world on Github.
First things first, locally you’ll want to have the respective CLI tools installed for Azure, Terraform, and Kubernetes.
- Install the Azure CLI and get it configured with
az configure
command. - Install the latest Terraform
- With Azure CLI installed you can then easily install kubectl with
az acs kubernetes install-cli [--client-version] [--install-location]
command.
Dive in time!
Alright, first let’s take a look at the before, before we look at the after. In Azure, the user interface is very tablet oriented with a sideways scroll. Some people love it, some adamantly despise it. I’m kind of in the, “enjoy it but wouldn’t use it for work” camp. But it’s rather nice looking to show a demo, elaborate on where and what is located where within the cloud service, and provides a nice way to visualize resources.
Let’s take a look at what we start with before building anything. The initial dashboard as one would expect, empty.
If you click on the all resources button on the left hand menu. Hover over to see which is which, or the three bars to see the descriptions displayed for all of the icons. Here we can view any and all resources created. This is an extremely useful view to get an idea of all the resources that are setup and running.
The organizational structures of Azure’s Resource Groups can be found here, and is another section to note. Many resources can be grouped per Resource Group, per the meaning of the word itself.
It is also a good idea, if using Azure, the familiarize yourself with the screens, tabs, menus, and other related collateral that popup on the sides. Remember, when navigating this interface that it was designed for touch screens and tablet like devices, and everything will make sense. At least, it will make more sense, when trying to navigate and find various properties and features.
Alright. That’s the starting point, so let’s get started on building out a Kubernetes Cluster using Terraform. The first thing we’ll need is to setup our Azure connection for Terraform. I’ve created this in a file called connections.tf
.
provider "azurerm" {
subscription_id = "${var.subscription_id}"
client_id = "${var.client_id}"
client_secret = "${var.client_secret}"
tenant_id = "${var.tenant_id}"
}
The next thing I need now is a resource for an Azure Resource Group. That configuration looks like this.
resource "azurerm_resource_group" "zura_resource_group" {
name = "zuragroup"
location = "West US"
}
I added the above resource group to a file called kubernetes.tf
in the repository. Setting the name to what I wanted and assigning it to the West US location. After that I then added the Kubernetes configuration.
resource "azurerm_container_service" "bluekuby" {
name = "bluekubyhouse"
location = "${azurerm_resource_group.zura_resource_group.location}"
resource_group_name = "${azurerm_resource_group.zura_resource_group.name}"
orchestration_platform = "Kubernetes"
master_profile {
count = 1
dns_prefix = "${var.azure_cluster_prefix}"
}
linux_profile {
admin_username = "${var.linux_admin_username}"
ssh_key {
key_data = "${var.ssh_key}"
}
}
agent_pool_profile {
name = "default"
count = "${var.azure_node_count}"
dns_prefix = "kuby.house"
vm_size = "Standard_A0"
}
service_principal {
client_id = "${var.client_id}"
client_secret = "${var.client_secret}"
}
diagnostics_profile {
enabled = false
}
tags {
Environment = "Production"
}
}
In this file I setup the location
and resource_group_name
to the respective resource group parameters location
and name
. The dns_prefix
for the master_profile
I set to a variable called azure_cluster_prefix
which I’ll create and set in a variables.tf
file and the respective terraform.tfvars
file. The ssh key data is set to the ssh_key
variable, a variable I’ll declare in the variables.tf
file but assign via environment variable.
The terraform.tf
file then looks like this.
variable "linux_admin_username" {
type = "string"
description = "Linux admin username."
}
variable "ssh_key" {
type = "string"
description = "SSH Key for Kubernetes Clusters."
}
// Azure Variables
variable "azure_node_count" {
type = "string"
description = "Count of cluster instances to start."
}
variable "azure_cluster_prefix" {
type = "string"
description = "The prefix for the Azure cluster."
}
// Secrets variables
variable "subscription_id" {}
variable "client_id" {}
variable "client_secret" {}
variable "tenant_id" {}
// Output variables
output "get_credentials_command" {
value = "az acs kubernetes get-credentials --name=\"${azurerm_container_service.bluekuby.name}\" --resource-group=\"${azurerm_resource_group.zura_resource_group.name}\""
}
Note that I added an output variable that would take pertinent data and provide the get-credential command for azure, to connect and work with the Kubernetes cluster once it is created.
The secret variables are also assigned via environment variables to keep any secrets out of the repository.
Last, I created a terraform.tfvars
file with the following.
// Azure Variables
azure_node_count = 3
azure_cluster_prefix = "fancyclusters"
linux_admin_username = "frank"
Now I can run terraform init
to pull in dependencies for the provider. In this case, the command will pull in the azurerm provider.
Now run a terraform plan
to determine the change diff.
Everything looks good, so I’m clear to run terraform apply
. Note I changed from a Linux machine, did a git pull of the repo for state, and then actually ran terraform apply
. This is one of the huge advantages of using configuration based immutable infrastructure and respective git based workflow for your infrastructure. I needed to displace to a new location, and I was able to easily do that and continue writing this blog entry!
After about 6-10 minutes the Kubernetes cluster will be created in Azure. The output variable get_credentials_command
will print out the Azure CLI command something like this.
get_credentials_command = az acs kubernetes get-credentials --name="bluekubyhouse" --resource-group="zuragroup"
Now if I’m authenticated to Azure and have an unexpired working token I can issue this command then commence to work with az at the command line against the Kubernetes Cluster.
az login
az acs kubernetes get-credentials --name="bluekubyhouse" --resource-group="zuragroup"
Once this command is issued, then a proxy for the local admin site can be started with the following command.
az acs kubernetes browse --ssh-key-file ~/.ssh/id_rsa --name="bluekubyhouse" --resource-group="zuragroup"
The user interface is then available at <IP_ADDRESS>:8001/ui
That’s it for this round. More observations, ideas, and opinions (cuz I’ve got a load of those!) coming in the near future. Cheers!
References:


Hi! I'm Devon.
I am a Full-Stack Developer from Seattle. My interests are kind of all over the board from Tech related things to Anime. I picked up coding a few years back and with formal training, I've been able to develop a strong skillset. Ultimately, looking to make an impact and provide an incredible User Experience. I love to take on challenges and I am always improving. Check out my links below and connect with me!
Portfolio
One thing I love about Technology is the fact that it's both constantly growing and pushing us to grow. I want to continue this growth movement by building applications that inspires and provides a positive impact to my users.
Here is a group of previous projects.
About Me
After serving in the Air Force as medic, I found myself in search of that next challenge, that next step in life. The medical field was extremely fulfilling, and that was something vital to me to have in my next career. For the past couple of years, I’ve dove into learning various programming languages, have gone through rigorous training and from the challenges and triumphs, my love for programming was developed.
When I'm not coding, I like to spend my free time with friends and love ones and my adorable six year old corgi named Korra. My interests dwell in multiple directions, from playing video games to reading manga. I am also an avid follower of tech forums like Quora and Medium. Forums and sites like these are one of the many reasons that draws me to this field. I love the community and the collaborative aspect that comes from software development.


============================================================================
Everything You Always Wanted To Know About GAMEBOY *
============================================================================
* but were afraid to ask
Pan of -ATX- Document Updated by contributions from:
Marat Fayzullin, Pascal Felber, Paul Robson, Martin Korth
Last update 9-Mar-98 by kOOPa
Forward: The following was typed up for informational purposes regarding
the inner workings on the hand-held game machine known as
GameBoy, manufactured and designed by Nintendo Co., LTD.
This info is presented to inform a user on how their Game Boy
works and what makes it "tick". GameBoy is copyrighted by
Nintendo Co., LTD. Any reference to copyrighted material is
not presented for monetary gain, but for educational purposes
and higher learning.
Game Boy Specs
--------------
CPU: 8-bit (Similar to the Z80 processor.)
Main RAM: 8K Byte
Video RAM: 8K Byte
Screen Size 2.6"
Resolution: 160x144 (20x18 tiles)
Max # of sprites: 40
Max # sprites/line: 10
Max sprite size: 8x16
Min sprite size: 8x8
Clock Speed: 4.194304 MHz (4.295454 MHz for Super GB)
Horiz Sync: 9198 KHz (9420 KHz for Super GB)
Vert Sync: 59.73 Hz (61.17 Hz for Super GB)
Sound: 4 channels with stereo sound
Power: DC6V 0.7W (DC3V 0.7W for GB Pocket)
Processor
---------
The GameBoy uses a computer chip similar to an Intel 8080.
It contains all of the instructions of an 8080 except there
are no exchange instructions. In many ways the processor is
more similar to the Zilog Z80 processor. Compared to the
Z80, some instructions have been added and some have been
taken away.
The following are added instructions:
ADD SP,nn ;nn = signed byte
LDI (HL),A ;Write A to (HL) and increment HL
LDD (HL),A ;Write A to (HL) and decrement HL
LDI A,(HL) ;Write (HL) to A and increment HL
LDD A,(HL) ;Write (HL) to A and decrement HL
LD A,($FF00%20nn)
LD A,($FF00%20C)
LD ($FF00%20nn),A
LD ($FF00%20C),A
LD (nnnn),SP
LD HL,(SP%20nn) ;nn = signed byte
STOP ;?
SWAP r ;Rotate register r by 4 bits
The following instructions have been removed:
Any command that uses the IX or IY registers.
All IN/OUT instructions.
All exchange instructions.
All commands prefixed by ED (except remapped RETI).
All conditional jumps/calls/rets on parity/overflow and sign flag.
The following instructions have different opcodes:
LD A,[nnnn]
LD [nnnn],A
RETI
General Memory Map* Hardware Write Registers
------------------ ------------------------
Interrupt Enable Register
--------------------------- FFFF
Internal RAM
--------------------------- FF80
Empty but unusable for I/O
--------------------------- FF4C
I/O ports
--------------------------- FF00
Empty but unusable for I/O
--------------------------- FEA0
Sprite Attrib Memory (OAM)
--------------------------- FE00
Echo of 8kB Internal RAM
--------------------------- E000
8kB Internal RAM
--------------------------- C000 -------------------------
8kB switchable RAM bank / MBC1 ROM/RAM Select
--------------------------- A000 / ------------------------
8kB Video RAM / / RAM Bank Select
--------------------------- 8000 --/ / -----------------------
16kB switchable ROM bank 6000 ----/ / ROM Bank Select
--------------------------- 4000 ------/ ----------------------
16kB ROM bank #0 2000 --------/ RAM Bank enable
--------------------------- 0000 -------------------------------
* NOTE: b = bit, B = byte
Echo of 8kB Internal RAM
------------------------
The addresses E000-FE00 appear to access the internal RAM
the same as C000-DE00. (i.e. If you write a byte to address
E000 it will appear at C000 and E000. Similarly, writing a
byte to C000 will appear at C000 and E000.)
User I/O
--------
There are no empty spaces in the memory map for
implementing input ports except the switchable RAM bank
area (not an option on the Super Smart Card since it's
RAM bank is always enabled).
An output only port may be implemented anywhere between
A000-FDFF. If implemented in a RAM area care should be
taken to use an area of RAM not used for anything else.
(FE00 and above can't be used because the CPU doesn't
generate an external /WR for these locations.)
If you have a cart with an MBC1, a ROM 4Mbit or smaller,
and a RAM 8Kbyte or smaller (or no RAM) then you can use
pins 6 & 7 of the MBC1 for 2 digital output pins for
whatever purpose you wish. To use them you must first
put the MBC1 into 4MbitROM/32KbyteRAM mode by writing
01 to 6000. The two least significant bits you write
to 4000 will then be output to these pins.
 It contains the following values:
0100-0103 This is the begin code execution point in a
cart. Usually there is a NOP and a JP
instruction here but not always.
0104-0133 Scrolling Nintendo graphic:
CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D
00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99
BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E
( PROGRAM WON'T RUN IF CHANGED!!!)
0134-0142 Title of the game in UPPER CASE ASCII. If it
is less than 16 characters then the remaining
bytes are filled with 00's.
0143 $80 = Color GB, $00 or other = not Color GB
0144 Ascii hex digit, high nibble of licensee code (new).
0145 Ascii hex digit, low nibble of licensee code (new).
(These are normally $00 if [$014B] <> $33.)
0146 GB/SGB Indicator (00 = GameBoy, 03 = Super GameBoy functions)
(Super GameBoy functions won't work if <> $03.)
0147 Cartridge type:
0 - ROM ONLY 12 - ROM%20MBC3%20RAM
1 - ROM%20MBC1 13 - ROM%20MBC3%20RAM%20BATT
2 - ROM%20MBC1%20RAM 19 - ROM%20MBC5
3 - ROM%20MBC1%20RAM%20BATT 1A - ROM%20MBC5%20RAM
5 - ROM%20MBC 1B - ROM%20MBC5%20RAM%20BATT
6 - ROM%20MBC2%20BATTERY 1C - ROM%20MBC5%20RUMBLE
8 - ROM%20RAM 1D - ROM%20MBC5%20RUMBLE%20SRAM
9 - ROM%20RAM%20BATTERY 1E - ROM%20MBC5%20RUMBLE%20SRAM%20BATT
B - ROM%20MMM01 1F - Pocket Camera
C - ROM%20MMM01%20SRAM FD - Bandai TAMA5
D - ROM%20MMM01%20SRAM%20BATT FE - Hudson HuC-3
F - ROM%20MBC3%20TIMER%20BATT FF - Hudson HuC-1
10 - ROM%20MBC3%20TIMER%20RAM%20BATT
11 - ROM%20MBC3
0148 ROM size:
0 - 256Kbit = 32KByte = 2 banks
1 - 512Kbit = 64KByte = 4 banks
2 - 1Mbit = 128KByte = 8 banks
3 - 2Mbit = 256KByte = 16 banks
4 - 4Mbit = 512KByte = 32 banks
5 - 8Mbit = 1MByte = 64 banks
6 - 16Mbit = 2MByte = 128 banks
$52 - 9Mbit = 1.1MByte = 72 banks
$53 - 10Mbit = 1.2MByte = 80 banks
$54 - 12Mbit = 1.5MByte = 96 banks
0149 RAM size:
0 - None
1 - 16kBit = 2kB = 1 bank
2 - 64kBit = 8kB = 1 bank
3 - 256kBit = 32kB = 4 banks
4 - 1MBit =128kB =16 banks
014A Destination code:
0 - Japanese
1 - Non-Japanese
014B Licensee code (old):
33 - Check 0144/0145 for Licensee code.
79 - Accolade
A4 - Konami
(Super GameBoy function won't work if <> $33.)
014C Mask ROM Version number (Usually $00)
014D Complement check
(PROGRAM WON'T RUN ON GB IF NOT CORRECT!!!)
(It will run on Super GB, however, if incorrect.)
014E-014F Checksum (higher byte first) produced by
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result. (GameBoy ignores this value.)
Cartridge Types
---------------
The following define the byte at cart location 0147:
ROM ONLY
This is a 32kB (256kb) ROM and occupies 0000-7FFF.
MBC1 (Memory Bank Controller 1)
MBC1 has two different maximum memory modes:
16Mbit ROM/8KByte RAM or 4Mbit ROM/32KByte RAM.
The MBC1 defaults to 16Mbit ROM/8KByte RAM mode
on power up. Writing a value (XXXXXXXS - X = Don't
care, S = Memory model select) into 6000-7FFF area
will select the memory model to use. S = 0 selects
16/8 mode. S = 1 selects 4/32 mode.
Writing a value (XXXBBBBB - X = Don't cares, B =
bank select bits) into 2000-3FFF area will select an
appropriate ROM bank at 4000-7FFF. Values of 0 and 1
do the same thing and point to ROM bank 1. Rom bank 0
is not accessible from 4000-7FFF and can only be read
from 0000-3FFF.
If memory model is set to 4/32:
Writing a value (XXXXXXBB - X = Don't care, B =
bank select bits) into 4000-5FFF area will select an
appropriate RAM bank at A000-C000. Before you can
read or write to a RAM bank you have to enable it by
writing a XXXX1010 into 0000-1FFF area*. To disable
RAM bank operations write any value but XXXX1010
into 0000-1FFF area. Disabling a RAM bank probably
protects that bank from false writes during power
down of the GameBoy. (NOTE: Nintendo suggests values
$0A to enable and $00 to disable RAM bank!!)
If memory model is set to 16/8 mode:
Writing a value (XXXXXXBB - X = Don't care, B =
bank select bits) into 4000-5FFF area will set the
two most significant ROM address lines.
* NOTE: The Super Smart Card doesn't require this
operation because it's RAM bank is ALWAYS enabled.
Include this operation anyway to allow your code
to work with both.
MBC2 (Memory Bank Controller 2):
This memory controller works much like the MBC1
controller with the following exceptions:
MBC2 will work with ROM sizes up to 2Mbit.
Writing a value (XXXXBBBB - X = Don't cares, B =
bank select bits) into 2000-3FFF area will select an
appropriate ROM bank at 4000-7FFF.
RAM switching is not provided. Unlike the MBC1 which
uses external RAM, MBC2 has 512 x 4 bits of RAM which
is in the controller itself. It still requires an
external battery to save data during power-off though.
The least significant bit of the upper address byte
must be zero to enable/disable cart RAM. For example
the following addresses can be used to enable/disable
cart RAM:
0000-00FF, 0200-02FF, 0400-04FF, ..., 1E00-1EFF.
The suggested address range to use for MBC2 ram
enable/disable is 0000-00FF.
The least significant bit of the upper address byte
must be one to select a ROM bank. For example the
following addresses can be used to select a ROM bank:
2100-21FF, 2300-23FF, 2500-25FF, ..., 3F00-3FFF.
The suggested address range to use for MBC2 rom
bank selection is 2100-21FF.
HuC1 (Memory Bank / Infrared Controller):
This controller made by Hudson Soft appears to be
very similar to an MBC1 with the main difference
being that it supports infrared LED input / output.
The Japanese cart "Fighting Phoenix" (internal cart
name: SUPER B DAMAN) is known to contain this chip.
Power Up Sequence
-----------------
When the GameBoy is powered up, a 256 byte program
starting at memory location 0 is executed. This program
is located in a ROM inside the GameBoy. The first thing
the program does is read the cartridge locations from
$104 to $133 and place this graphic of a Nintendo logo
on the screen at the top. This image is then scrolled
until it is in the middle of the screen. Two musical
notes are then played on the internal speaker. Again,
the cartridge locations $104 to $133 are read but this
time they are compared with a table in the internal rom.
If any byte fails to compare, then the GameBoy stops
comparing bytes and simply halts all operations.
GB & GB Pocket:
Next, the GameBoy starts adding all of the bytes
in the cartridge from $134 to $14d. A value of 25
decimal is added to this total. If the least
significant byte of the result is a not a zero,
then the GameBoy will stop doing anything.
Super GB:
Even though the GB & GBP check the memory locations
from $134 to $14d, the SGB doesn't.
If the above checks pass then the internal ROM is
disabled and cartridge program execution begins at
location $100 with the following register values:
AF=$01-GB/SGB, $FF-GBP, $11-GBC
F =$B0
BC=$0013
DE=$00D8
HL=$014D
Stack Pointer=$FFFE
[$FF05] = $00 ; TIMA
[$FF06] = $00 ; TMA
[$FF07] = $00 ; TAC
[$FF10] = $80 ; NR10
[$FF11] = $BF ; NR11
[$FF12] = $F3 ; NR12
[$FF14] = $BF ; NR14
[$FF16] = $3F ; NR21
[$FF17] = $00 ; NR22
[$FF19] = $BF ; NR24
[$FF1A] = $7F ; NR30
[$FF1B] = $FF ; NR31
[$FF1C] = $9F ; NR32
[$FF1E] = $BF ; NR33
[$FF20] = $FF ; NR41
[$FF21] = $00 ; NR42
[$FF22] = $00 ; NR43
[$FF23] = $BF ; NR30
[$FF24] = $77 ; NR50
[$FF25] = $F3 ; NR51
[$FF26] = $F1-GB, $F0-SGB ; NR52
[$FF40] = $91 ; LCDC
[$FF42] = $00 ; SCY
[$FF43] = $00 ; SCX
[$FF45] = $00 ; LYC
[$FF47] = $FC ; BGP
[$FF48] = $FF ; OBP0
[$FF49] = $FF ; OBP1
[$FF4A] = $00 ; WY
[$FF4B] = $00 ; WX
[$FFFF] = $00 ; IE
It is not a good idea to assume the above values
will always exist. A later version GameBoy could
contain different values than these at reset.
Always set these registers on reset rather than
assume they are as above.
Please note that GameBoy internal RAM on power up
contains random data. All of the GameBoy emulators
tend to set all RAM to value $00 on entry.
Cart RAM the first time it is accessed on a real
GameBoy contains random data. It will only contain
known data if the GameBoy code initializes it to
some value.
Low-Power Mode
--------------
It is recommended that the HALT instruction be used
whenever possible to reduce power consumption & extend
the life of the batteries. This command stops the
system clock reducing the power consumption of both
the CPU and ROM.
The CPU will remain suspended until an interrupt
occurs at which point the interrupt is serviced and
then the instruction immediately following the HALT
is executed.
Depending on how much CPU time is required by a game,
the HALT instruction can extend battery life anywhere
from 5 to 50% or possibly more.
WARNING: On the Color GB (and possibly on the other
versions of GB as well) sometimes the instruction
immediately following the HALT instruction is skipped.
As a result, always put a NOP after the HALT instruction.
Below is suggested code for GameBoy programs:
; **** Main Game Loop ****
Main:
halt ; stop system clock
; return from halt when interrupted
nop ; (See WARNING above.)
ld a,(VblnkFlag)
or a ; V-Blank interrupt ?
jr z,Main ; No, some other interrupt
xor a
ld (VblnkFlag),a ; Clear V-Blank flag
call Controls ; button inputs
call Game ; game operation
jr Main
; **** V-Blank Interrupt Routine ****
Vblnk:
push af
push bc
push de
push hl
call SpriteDma ; Do sprite updates
ld a,1
ld (VblnkFlag),a
pop hl
pop de
pop bc
pop af
reti
Video
-----
The main GameBoy screen buffer (background) consists
of 256x256 pixels or 32x32 tiles (8x8 pixels each). Only
160x144 pixels can be displayed on the screen. Registers
SCROLLX and SCROLLY hold the coordinates of background to
be displayed in the left upper corner of the screen.
Background wraps around the screen (i.e. when part of it
goes off the screen, it appears on the opposite side.)
An area of VRAM known as Background Tile Map contains
the numbers of tiles to be displayed. It is organized as
32 rows of 32 bytes each. Each byte contains a number of
a tile to be displayed. Tile patterns are taken from the
Tile Data Table located either at $8000-8FFF or
$8800-97FF. In the first case, patterns are numbered with
unsigned numbers from 0 to 255 (i.e. pattern #0 lies at
address $8000). In the second case, patterns have signed
numbers from -128 to 127 (i.e. pattern #0 lies at address
$9000). The Tile Data Table address for the background
can be selected via LCDC register.
Besides background, there is also a "window" overlaying
the background. The window is not scrollable i.e. it is
always displayed starting from its left upper corner. The
location of a window on the screen can be adjusted via
WNDPOSX and WNDPOSY registers. Screen coordinates of the
top left corner of a window are WNDPOSX-7,WNDPOSY. The
tile numbers for the window are stored in the Tile Data
Table. None of the windows tiles are ever transparent.
Both the Background and the window share the same Tile
Data Table.
Both background and window can be disabled or enabled
separately via bits in the LCDC register.
If the window is used and a scan line interrupt disables
it (either by writing to LCDC or by setting WX > 166)
and a scan line interrupt a little later on enables it
then the window will resume appearing on the screen at the
exact position of the window where it left off earlier.
This way, even if there are only 16 lines of useful graphics
in the window, you could display the first 8 lines at the
top of the screen and the next 8 lines at the bottom if
you wanted to do so.
WX may be changed during a scan line interrupt (to either
cause a graphic distortion effect or to disable the window
(WX>166) ) but changes to WY are not dynamic and won't
be noticed until the next screen redraw.
The tile images are stored in the Tile Pattern Tables.
Each 8x8 image occupies 16 bytes, where each 2 bytes
represent a line:
Tile: Image:
.33333.. .33333.. -> 01111100 -> $7C
22...22. 01111100 -> $7C
11...11. 22...22. -> 00000000 -> $00
2222222. <-- digits 11000110 -> $C6
33...33. represent 11...11. -> 11000110 -> $C6
22...22. color 00000000 -> $00
11...11. numbers 2222222. -> 00000000 -> $00
........ 11111110 -> $FE
33...33. -> 11000110 -> $C6
11000110 -> $C6
22...22. -> 00000000 -> $00
11000110 -> $C6
11...11. -> 11000110 -> $C6
00000000 -> $00
........ -> 00000000 -> $00
00000000 -> $00
As it was said before, there are two Tile Pattern Tables
at $8000-8FFF and at $8800-97FF. The first one can be used
for sprites, the background, and the window display. Its
tiles are numbered from 0 to 255. The second table can be
used for the background and the window display and its tiles
are numbered from -128 to 127.
Sprites
------
GameBoy video controller can display up to 40 sprites
either in 8x8 or in 8x16 pixels. Because of a limitation
of hardware, only ten sprites can be displayed per scan
line. Sprite patterns have the same format as tiles, but
they are taken from the Sprite Pattern Table located at
$8000-8FFF and have unsigned numbering. Sprite
attributes reside in the Sprite Attribute Table (OAM
- Object Attribute Memory) at $FE00-FE9F. OAM is divided
into 40 4-byte blocks each of which corresponds to a sprite.
In 8x16 sprite mode, the least significant bit of the
sprite pattern number is ignored and treated as 0.
When sprites with different x coordinate values overlap,
the one with the smaller x coordinate (closer to the left)
will have priority and appear above any others.
When sprites with the same x coordinate values overlap,
they have priority according to table ordering. (i.e.
$FE00 - highest, $FE04 - next highest, etc.)
Please note that Sprite X=0, Y=0 hides a sprite. To
display a sprite use the following formulas:
SpriteScreenPositionX(Upper left corner of sprite) = SpriteX - 8
SpriteScreenPositionY(Upper left corner of sprite) = SpriteY - 16
To display a sprite in the upper left corner of the
screen set sprite X=8, Y=16.
Only 10 sprites can be displayed on any one line.
When this limit is exceeded, the lower priority sprites
(priorities listed above) won't be displayed. To keep
unused sprites from affecting onscreen sprites set their
Y coordinate to Y=0 or Y=>144%2016. Just setting the X
coordinate to X=0 or X=>160%208 on a sprite will hide it
but it will still affect other sprites sharing the same
lines.
Blocks have the following
format:
Byte0 Y position on the screen
Byte1 X position on the screen
Byte2 Pattern number 0-255 (Unlike some tile
numbers, sprite pattern numbers are unsigned.
LSB is ignored (treated as 0) in 8x16 mode.)
Byte3 Flags:
Bit7 Priority
If this bit is set to 0, sprite is displayed
on top of background & window. If this bit
is set to 1, then sprite will be hidden behind
colors 1, 2, and 3 of the background & window.
(Sprite only prevails over color 0 of BG & win.)
Bit6 Y flip
Sprite pattern is flipped vertically if
this bit is set to 1.
Bit5 X flip
Sprite pattern is flipped horizontally if
this bit is set to 1.
Bit4 Palette number
Sprite colors are taken from OBJ1PAL if
this bit is set to 1 and from OBJ0PAL
otherwise.
Sprite RAM Bug
--------------
There is a flaw in the GameBoy hardware that causes
trash to be written to OAM RAM if the following commands
are used while their 16-bit content is in the range
of $FE00 to $FEFF:
inc xx (xx = bc,de, or hl)
dec xx
ldi a,(hl)
ldd a,(hl)
ldi (hl),a
ldd (hl),a
Only sprites 1 & 2 ($FE00 & $FE04) are not affected
by these instructions.
Sound
-----
There are two sound channels connected to the output
terminals SO1 and SO2. There is also a input terminal Vin
connected to the cartridge. It can be routed to either of
both output terminals. GameBoy circuitry allows producing
sound in four different ways:
Quadrangular wave patterns with sweep and envelope functions.
Quadrangular wave patterns with envelope functions.
Voluntary wave patterns from wave RAM.
White noise with an envelope function.
These four sounds can be controlled independantly and
then mixed separately for each of the output terminals.
Sound registers may be set at all times while producing
sound.
When setting the initial value of the envelope and
restarting the length counter, set the initial flag to 1
and initialize the data.
Under the following situations the Sound ON flag is
reset and the sound output stops:
1. When the sound output is stopped by the length counter.
2. When overflow occurs at the addition mode while sweep
is operating at sound 1.
When the Sound OFF flag for sound 3 (bit 7 of NR30) is
set at 0, the cancellation of the OFF mode must be done
by setting the sound OFF flag to 1. By initializing
sound 3, it starts it's function.
When the All Sound OFF flag (bit 7 of NR52) is set to 0,
the mode registers for sounds 1,2,3, and 4 are reset and
the sound output stops. (NOTE: The setting of each sounds
mode register must be done after the All Sound OFF mode
is cancelled. During the All Sound OFF mode, each sound
mode register cannot be set.)
  IT DEFAULTS
TO 1 ON RESET.
These tend to be the two most important equations in
converting between Hertz and GB frequency registers:
(Sounds will have a 2.4% higher frequency on Super GB.)
gb = 2048 - (131072 / Hz)
Hz = 131072 / (2048 - gb)
Timer
-----
Sometimes it's useful to have a timer that interrupts at
regular intervals for routines that require periodic or
percise updates. The timer in the GameBoy has a selectable
frequency of 4096, 16384, 65536, or 262144 Hertz. This
frequency increments the Timer Counter (TIMA). When it
overflows, it generates an interrupt. It is then loaded
with the contents of Timer Modulo (TMA). The following
are examples:
;This interval timer interrupts 4096 times per second
ld a,-1
ld ($FF06),a ;Set TMA to divide clock by 1
ld a,4
ld ($FF07),a ;Set clock to 4096 Hertz
;This interval timer interrupts 65536 times per second
ld a,-4
ld ($FF06),a ;Set TMA to divide clock by 4
ld a,5
ld ($FF07),a ;Set clock to 262144 Hertz
Serial I/O
----------
The serial I/O port on the Gameboy is a very simple setup
and is crude compared to standard RS-232 (IBM-PC) or RS-485
(Macintosh) serial ports. There are no start or stop bits
so the programmer must be more creative when using this port.
During a transfer, a byte is shifted in at the same time
that a byte is shifted out. The rate of the shift is deter-
mined by whether the clock source is internal or external.
If internal, the bits are shifted out at a rate of 8192Hz
(122 microseconds) per bit. The most significant bit is
shifted in and out first.
When the internal clock is selected, it drives the clock
pin on the game link port and it stays high when not used.
During a transfer it will go low eight times to clock
in/out each bit.
A programmer initates a serial transfer by setting bit 7
of $FF02. This bit may be read and is automatically set
to 0 at the completion of transfer. After this bit is set,
an interrupt will then occur eight bit clocks later if the
serial interrupt is enabled.
If internal clock is selected and serial interrupt is
enabled, this interrupt occurs 122*8 microseconds later.
If external clock is selected and serial interrupt is
enabled, an interrupt will occur eight bit clocks later.
Initiating a serial transfer with external clock will
wait forever if no external clock is present. This allows
a certain amount of synchronization with each serial port.
The state of the last bit shifted out determines the
state of the output line until another transfer takes
place.
If a serial transfer with internal clock is performed
and no external GameBoy is present, a value of $FF will
be received in the transfer.
The following code causes $75 to be shifted out the
serial port and a byte to be shifted into $FF01:
ld a,$75
ld ($FF01),a
ld a,$81
ld ($FF02),a
Interrupt Procedure
-------------------
The IME (interrupt master enable) flag is reset by DI and
prohibits all interrupts. It is set by EI and acknowledges
the interrupt setting by the IE register.
1. When an interrupt is generated, the IF flag will be set.
2. If the IME flag is set & the corresponding IE flag is
set, the following 3 steps are performed.
3. Reset the IME flag and prevent all interrupts.
4. The PC (program counter) is pushed onto the stack.
5. Jump to the starting address of the interrupt.
Resetting of the IF register, which was the cause of the
interrupt, is done by hardware.
During the interrupt, pushing of registers to be used
should be performed by the interrupt routine.
Once the interrupt service is in progress, all the
interrupts will be prohibited. However, if the IME flag
and the IE flag are controlled, a number of interrupt
services can be made possible by nesting.
Return from an interrupt routine can be performed by
either RETI or RET instruction.
The RETI instruction enables interrupts after doing a
return operation.
If a RET is used as the final instruction in an interrupt
routine, interrupts will remain disabled unless a EI was
used in the interrupt routine or is used at a later time.
The interrupt will be acknowledged during opcode fetch
period of each instruction.
Interrupt Descriptions
----------------------
The following interrupts only occur if they have been
enabled in the Interrupt Enable register ($FFFF) and
if the interrupts have actually been enabled using the
EI instruction.
V-Blank -
The V-Blank interrupt occurs ~59.7 times a second
on a regular GB and ~61.1 times a second on a Super
GB (SGB). This interrupt occurs at the beginning of
the V-Blank period. During this period video hardware
is not using video ram so it may be freely accessed.
This period lasts approximately 1.1 milliseconds.
LCDC Status -
There are various reasons for this interrupt to occur
as described by the STAT register ($FF40). One very
popular reason is to indicate to the user when the
video hardware is about to redraw a given LCD line.
This can be useful for dynamically controlling the SCX/
SCY registers ($FF43/$FF42) to perform special video
effects.
Timer Overflow -
This interrupt occurs when the TIMA register ($FF05)
changes from $FF to $00.
Serial Transfer Completion -
This interrupt occurs when a serial transfer has
completed on the game link port.
High-to-Low of P10-P13 -
This interrupt occurs on a transition of any of the
keypad input lines from high to low. Due to the fact
that keypad "bounce"* is virtually always present,
software should expect this interrupt to occur one
or more times for every button press and one or more
times for every button release.
* - Bounce tends to be a side effect of any button
making or breaking a connection. During these
periods, it is very common for a small amount of
oscillation between high & low states to take place.
I/O Registers
-------------
FF00
Name - P1
Contents - Register for reading joy pad info
and determining system type. (R/W)
Bit 7 - Not used
Bit 6 - Not used
Bit 5 - P15 out port
Bit 4 - P14 out port
Bit 3 - P13 in port
Bit 2 - P12 in port
Bit 1 - P11 in port
Bit 0 - P10 in port
This is the matrix layout for register $FF00:
P14 P15
| |
P10-------O-Right----O-A
| |
P11-------O-Left-----O-B
| |
P12-------O-Up-------O-Select
| |
P13-------O-Down-----O-Start
| |
Example code:
Game: Ms. Pacman
Address: $3b1
LD A,$20 <- bit 5 = $20
LD ($FF00),A <- select P14 by setting it low
LD A,($FF00)
LD A,($FF00) <- wait a few cycles
CPL <- complement A
AND $0F <- get only first 4 bits
SWAP A <- swap it
LD B,A <- store A in B
LD A,$10
LD ($FF00),A <- select P15 by setting it low
LD A,($FF00)
LD A,($FF00)
LD A,($FF00)
LD A,($FF00)
LD A,($FF00)
LD A,($FF00) <- Wait a few MORE cycles
CPL <- complement (invert)
AND $0F <- get first 4 bits
OR B <- put A and B together
LD B,A <- store A in D
LD A,($FF8B) <- read old joy data from ram
XOR B <- toggle w/current button bit
AND B <- get current button bit back
LD ($FF8C),A <- save in new Joydata storage
LD A,B <- put original value in A
LD ($FF8B),A <- store it as old joy data
LD A,$30 <- deselect P14 and P15
LD ($FF00),A <- RESET Joypad
RET <- Return from Subroutine
The button values using the above method are such:
$80 - Start $8 - Down
$40 - Select $4 - Up
$20 - B $2 - Left
$10 - A $1 - Right
Let's say we held down A, Start, and Up.
The value returned in accumulator A would be $94
FF01
Name - SB
Contents - Serial transfer data (R/W)
8 Bits of data to be read/written
FF02
Name - SC
Contents - SIO control (R/W)
Bit 7 - Transfer Start Flag
0: Non transfer
1: Start transfer
Bit 0 - Shift Clock
0: External Clock (500KHz Max.)
1: Internal Clock (8192Hz)
Transfer is initiated by setting the
Transfer Start Flag. This bit may be read
and is automatically set to 0 at the end of
Transfer.
Transmitting and receiving serial data is
done simultaneously. The received data is
automatically stored in SB.
FF04
Name - DIV
Contents - Divider Register (R/W)
This register is incremented 16384 (~16779
on SGB) times a second. Writing any value
sets it to $00.
FF05
Name - TIMA
Contents - Timer counter (R/W)
This timer is incremented by a clock frequency
specified by the TAC register ($FF07). The timer
generates an interrupt when it overflows.
FF06
Name - TMA
Contents - Timer Modulo (R/W)
When the TIMA overflows, this data will be loaded.
FF07
Name - TAC
Contents - Timer Control (R/W)
Bit 2 - Timer Stop
0: Stop Timer
1: Start Timer
Bits 1%200 - Input Clock Select
00: 4.096 KHz (~4.194 KHz SGB)
01: 262.144 KHz (~268.4 KHz SGB)
10: 65.536 KHz (~67.11 KHz SGB)
11: 16.384 KHz (~16.78 KHz SGB)
FF0F
Name - IF
Contents - Interrupt Flag (R/W)
Bit 4: Transition from High to Low of Pin number P10-P13
Bit 3: Serial I/O transfer complete
Bit 2: Timer Overflow
Bit 1: LCDC (see STAT)
Bit 0: V-Blank
The priority and jump address for the above 5 interrupts are:
Interrupt Priority Start Address
V-Blank 1 $0040
LCDC Status 2 $0048 - Modes 0, 1, 2
LYC=LY coincide (selectable)
Timer Overflow 3 $0050
Serial Transfer 4 $0058 - when transfer is complete
Hi-Lo of P10-P13 5 $0060
* When more than 1 interrupts occur at the same time
only the interrupt with the highest priority can be
acknowledged. When an interrupt is used a '0' should
be stored in the IF register before the IE register
is set.
FF10
Name - NR 10
Contents - Sound Mode 1 register, Sweep register (R/W)
Bit 6-4 - Sweep Time
Bit 3 - Sweep Increase/Decrease
0: Addition (frequency increases)
1: Subtraction (frequency decreases)
Bit 2-0 - Number of sweep shift (n: 0-7)
Sweep Time: 000: sweep off - no freq change
001: 7.8 ms (1/128Hz)
010: 15.6 ms (2/128Hz)
011: 23.4 ms (3/128Hz)
100: 31.3 ms (4/128Hz)
101: 39.1 ms (5/128Hz)
110: 46.9 ms (6/128Hz)
111: 54.7 ms (7/128Hz)
The change of frequency (NR13,NR14) at each shift
is calculated by the following formula where
X(0) is initial freq & X(t-1) is last freq:
X(t) = X(t-1) %20/- X(t-1)/2^n
FF11
Name - NR 11
Contents - Sound Mode 1 register, Sound length/Wave pattern duty (R/W)
Only Bits 7-6 can be read.
Bit 7-6 - Wave Pattern Duty
Bit 5-0 - Sound length data (t1: 0-63)
Wave Duty: 00: 12.5% ( _--------_--------_-------- )
01: 25% ( __-------__-------__------- )
10: 50% ( ____-----____-----____----- ) (default)
11: 75% ( ______---______---______--- )
Sound Length = (64-t1)*(1/256) seconds
FF12
Name - NR 12
Contents - Sound Mode 1 register, Envelope (R/W)
Bit 7-4 - Initial volume of envelope
Bit 3 - Envelope UP/DOWN
0: Attenuate
1: Amplify
Bit 2-0 - Number of envelope sweep (n: 0-7)
(If zero, stop envelope operation.)
Initial volume of envelope is from 0 to $F.
Zero being no sound.
Length of 1 step = n*(1/64) seconds
FF13
Name - NR 13
Contents - Sound Mode 1 register, Frequency lo (W)
Lower 8 bits of 11 bit frequency (x).
Next 3 bit are in NR 14 ($FF14)
FF14
Name - NR 14
Contents - Sound Mode 1 register, Frequency hi (R/W)
Only Bit 6 can be read.
Bit 7 - Initial (when set, sound restarts)
Bit 6 - Counter/consecutive selection
Bit 2-0 - Frequency's higher 3 bits (x)
Frequency = 4194304/(32*(2048-x)) Hz
= 131072/(2048-x) Hz
Counter/consecutive Selection
0 = Regardless of the length data in NR11
sound can be produced consecutively.
1 = Sound is generated during the time period
set by the length data in NR11. After this
period the sound 1 ON flag (bit 0 of NR52)
is reset.
FF16
Name - NR 21
Contents - Sound Mode 2 register, Sound Length; Wave Pattern Duty (R/W)
Only bits 7-6 can be read.
Bit 7-6 - Wave pattern duty
Bit 5-0 - Sound length data (t1: 0-63)
Wave Duty: 00: 12.5% ( _--------_--------_-------- )
01: 25% ( __-------__-------__------- )
10: 50% ( ____-----____-----____----- ) (default)
11: 75% ( ______---______---______--- )
Sound Length = (64-t1)*(1/256) seconds
FF17
Name - NR 22
Contents - Sound Mode 2 register, envelope (R/W)
Bit 7-4 - Initial volume of envelope
Bit 3 - Envelope UP/DOWN
0: Attenuate
1: Amplify
Bit 2-0 - Number of envelope sweep (n: 0-7)
(If zero, stop envelope operation.)
Initial volume of envelope is from 0 to $F.
Zero being no sound.
Length of 1 step = n*(1/64) seconds
FF18
Name - NR 23
Contents - Sound Mode 2 register, frequency lo data (W)
Frequency's lower 8 bits of 11 bit data (x).
Next 3 bits are in NR 14 ($FF19).
FF19
Name - NR 24
Contents - Sound Mode 2 register, frequency hi data (R/W)
Only bit 6 can be read.
Bit 7 - Initial (when set, sound restarts)
Bit 6 - Counter/consecutive selection
Bit 2-0 - Frequency's higher 3 bits (x)
Frequency = 4194304/(32*(2048-x)) Hz
= 131072/(2048-x) Hz
Counter/consecutive Selection
0 = Regardless of the length data in NR21
sound can be produced consecutively.
1 = Sound is generated during the time period
set by the length data in NR21. After this
period the sound 2 ON flag (bit 1 of NR52)
is reset.
FF1A
Name - NR 30
Contents - Sound Mode 3 register, Sound on/off (R/W)
Only bit 7 can be read
Bit 7 - Sound OFF
0: Sound 3 output stop
1: Sound 3 output OK
FF1B
Name - NR 31
Contents - Sound Mode 3 register, sound length (R/W)
Bit 7-0 - Sound length (t1: 0 - 255)
Sound Length = (256-t1)*(1/2) seconds
FF1C
Name - NR 32
Contents - Sound Mode 3 register, Select output level (R/W)
Only bits 6-5 can be read
Bit 6-5 - Select output level
00: Mute
01: Produce Wave Pattern RAM Data as it is
(4 bit length)
10: Produce Wave Pattern RAM data shifted once
to the RIGHT (1/2) (4 bit length)
11: Produce Wave Pattern RAM data shifted twice
to the RIGHT (1/4) (4 bit length)
* - Wave Pattern RAM is located from $FF30-$FF3f.
FF1D
Name - NR 33
Contents - Sound Mode 3 register, frequency's lower data (W)
Lower 8 bits of an 11 bit frequency (x).
FF1E
Name - NR 34
Contents - Sound Mode 3 register, frequency's higher data (R/W)
Only bit 6 can be read.
Bit 7 - Initial (when set, sound restarts)
Bit 6 - Counter/consecutive flag
Bit 2-0 - Frequency's higher 3 bits (x).
Frequency = 4194304/(64*(2048-x)) Hz
= 65536/(2048-x) Hz
Counter/consecutive Selection
0 = Regardless of the length data in NR31
sound can be produced consecutively.
1 = Sound is generated during the time period
set by the length data in NR31. After this
period the sound 3 ON flag (bit 2 of NR52)
is reset.
FF20
Name - NR 41
Contents - Sound Mode 4 register, sound length (R/W)
Bit 5-0 - Sound length data (t1: 0-63)
Sound Length = (64-t1)*(1/256) seconds
FF21
Name - NR 42
Contents - Sound Mode 4 register, envelope (R/W)
Bit 7-4 - Initial volume of envelope
Bit 3 - Envelope UP/DOWN
0: Attenuate
1: Amplify
Bit 2-0 - Number of envelope sweep (n: 0-7)
(If zero, stop envelope operation.)
Initial volume of envelope is from 0 to $F.
Zero being no sound.
Length of 1 step = n*(1/64) seconds
FF22
Name - NR 43
Contents - Sound Mode 4 register, polynomial counter (R/W)
Bit 7-4 - Selection of the shift clock frequency of the
polynomial counter
Bit 3 - Selection of the polynomial counter's step
Bit 2-0 - Selection of the dividing ratio of frequencies
Selection of the dividing ratio of frequencies:
000: f * 1/2^3 * 2
001: f * 1/2^3 * 1
010: f * 1/2^3 * 1/2
011: f * 1/2^3 * 1/3
100: f * 1/2^3 * 1/4
101: f * 1/2^3 * 1/5
110: f * 1/2^3 * 1/6
111: f * 1/2^3 * 1/7 f = 4.194304 Mhz
Selection of the polynomial counter step:
0: 15 steps
1: 7 steps
Selection of the shift clock frequency of the polynomial
counter:
0000: dividing ratio of frequencies * 1/2
0001: dividing ratio of frequencies * 1/2^2
0010: dividing ratio of frequencies * 1/2^3
0011: dividing ratio of frequencies * 1/2^4
: :
: :
: :
0101: dividing ratio of frequencies * 1/2^14
1110: prohibited code
1111: prohibited code
FF23
Name - NR 44
Contents - Sound Mode 4 register, counter/consecutive; inital (R/W)
Only bit 6 can be read.
Bit 7 - Initial (when set, sound restarts)
Bit 6 - Counter/consecutive selection
Counter/consecutive Selection
0 = Regardless of the length data in NR41
sound can be produced consecutively.
1 = Sound is generated during the time period
set by the length data in NR41. After this
period the sound 4 ON flag (bit 3 of NR52)
is reset.
FF24
Name - NR 50
Contents - Channel control / ON-OFF / Volume (R/W)
Bit 7 - Vin->SO2 ON/OFF
Bit 6-4 - SO2 output level (volume) (# 0-7)
Bit 3 - Vin->SO1 ON/OFF
Bit 2-0 - SO1 output level (volume) (# 0-7)
Vin->SO1 (Vin->SO2)
By synthesizing the sound from sound 1
through 4, the voice input from Vin
terminal is put out.
0: no output
1: output OK
FF25
Name - NR 51
Contents - Selection of Sound output terminal (R/W)
Bit 7 - Output sound 4 to SO2 terminal
Bit 6 - Output sound 3 to SO2 terminal
Bit 5 - Output sound 2 to SO2 terminal
Bit 4 - Output sound 1 to SO2 terminal
Bit 3 - Output sound 4 to SO1 terminal
Bit 2 - Output sound 3 to SO1 terminal
Bit 1 - Output sound 2 to SO1 terminal
Bit 0 - Output sound 1 to SO1 terminal
FF26
Name - NR 52 (Value at reset: $F1-GB, $F0-SGB)
Contents - Sound on/off (R/W)
Bit 7 - All sound on/off
0: stop all sound circuits
1: operate all sound circuits
Bit 3 - Sound 4 ON flag
Bit 2 - Sound 3 ON flag
Bit 1 - Sound 2 ON flag
Bit 0 - Sound 1 ON flag
Bits 0 - 3 of this register are meant to
be status bits to be read. Writing to these
bits does NOT enable/disable sound.
If your GB programs don't use sound then
write $00 to this register to save 16% or
more on GB power consumption.
FF30 - FF3F
Name - Wave Pattern RAM
Contents - Waveform storage for arbitrary sound data
This storage area holds 32 4-bit samples
that are played back upper 4 bits first.
FF40
Name - LCDC (value $91 at reset)
Contents - LCD Control (R/W)
Bit 7 - LCD Control Operation *
0: Stop completely (no picture on screen)
1: operation
Bit 6 - Window Tile Map Display Select
0: $9800-$9BFF
1: $9C00-$9FFF
Bit 5 - Window Display
0: off
1: on
Bit 4 - BG & Window Tile Data Select
0: $8800-$97FF
1: $8000-$8FFF <- Same area as OBJ
Bit 3 - BG Tile Map Display Select
0: $9800-$9BFF
1: $9C00-$9FFF
Bit 2 - OBJ (Sprite) Size
0: 8*8
1: 8*16 (width*height)
Bit 1 - OBJ (Sprite) Display
0: off
1: on
Bit 0 - BG Display
0: off
1: on
* - Stopping LCD operation (bit 7 from 1 to 0)
must be performed during V-blank to work
properly. V-blank can be confirmed when the
value of LY is greater than or equal to 144.
FF41
Name - STAT
Contents - LCDC Status (R/W)
Bits 6-3 - Interrupt Selection By LCDC Status
Bit 6 - LYC=LY Coincidence (Selectable)
Bit 5 - Mode 10
Bit 4 - Mode 01
Bit 3 - Mode 00
0: Non Selection
1: Selection
Bit 2 - Coincidence Flag
0: LYC not equal to LCDC LY
1: LYC = LCDC LY
Bit 1-0 - Mode Flag
00: During H-Blank
01: During V-Blank
10: During Searching OAM-RAM
11: During Transfering Data to LCD Driver
STAT shows the current status of the LCD controller.
Mode 00: When the flag is 00 it is the H-Blank period
and the CPU can access the display RAM
($8000-$9FFF).
Mode 01: When the flag is 01 it is the V-Blank period
and the CPU can access the display RAM
($8000-$9FFF).
Mode 10: When the flag is 10 then the OAM is being
used ($FE00-$FE9F). The CPU cannot access
the OAM during this period
Mode 11: When the flag is 11 both the OAM and display
RAM are being used. The CPU cannot access
either during this period.
The following are typical when the display is enabled:
Mode 0 000___000___000___000___000___000___000________________
Mode 1 _______________________________________11111111111111__
Mode 2 ___2_____2_____2_____2_____2_____2___________________2_
Mode 3 ____33____33____33____33____33____33__________________3
The Mode Flag goes through the values 0, 2,
and 3 at a cycle of about 109uS. 0 is present
about 48.6uS, 2 about 19uS, and 3 about 41uS. This
is interrupted every 16.6ms by the VBlank (1).
The mode flag stays set at 1 for about 1.08 ms.
(Mode 0 is present between 201-207 clks, 2 about
77-83 clks, and 3 about 169-175 clks. A complete
cycle through these states takes 456 clks.
VBlank lasts 4560 clks. A complete screen refresh
occurs every 70224 clks.)
FF42
Name - SCY
Contents - Scroll Y (R/W)
8 Bit value $00-$FF to scroll BG Y screen
position.
FF43
Name - SCX
Contents - Scroll X (R/W)
8 Bit value $00-$FF to scroll BG X screen
position.
FF44
Name - LY
Contents - LCDC Y-Coordinate (R)
The LY indicates the vertical line to which
the present data is transferred to the LCD
Driver. The LY can take on any value between
0 through 153. The values between 144 and 153
indicate the V-Blank period. Writing will
reset the counter.
FF45
Name - LYC
Contents - LY Compare (R/W)
The LYC compares itself with the LY. If the
values are the same it causes the STAT to set
the coincident flag.
FF46
Name - DMA
Contents - DMA Transfer and Start Address (W)
The DMA Transfer (40*28 bit) from internal ROM or RAM
($0000-$F19F) to the OAM (address $FE00-$FE9F) can be
performed. It takes 160 microseconds for the transfer.
40*28 bit = #140 or #$8C. As you can see, it only
transfers $8C bytes of data. OAM data is $A0 bytes
long, from $0-$9F.
But if you examine the OAM data you see that 4 bits are
not in use.
40*32 bit = #$A0, but since 4 bits for each OAM is not
used it's 40*28 bit.
It transfers all the OAM data to OAM RAM.
The DMA transfer start address can be designated every
$100 from address $0000-$F100. That means $0000, $0100,
$0200, $0300....
As can be seen by looking at register $FF41 Sprite RAM
($FE00 - $FE9F) is not always available. A simple routine
that many games use to write data to Sprite memory is shown
below. Since it copies data to the sprite RAM at the appro-
priate times it removes that responsibility from the main
program.
All of the memory space, except high ram ($FF80-$FFFE),
is not accessible during DMA. Because of this, the routine
below must be copied & executed in high ram. It is usually
called from a V-blank Interrupt.
Example program:
org $40
jp VBlank
org $ff80
VBlank:
push af <- Save A reg & flags
ld a,BASE_ADRS <- transfer data from BASE_ADRS
ld ($ff46),a <- put A into DMA registers
ld a,28h <- loop length
Wait: <- We need to wait 160 microseconds.
dec a <- 4 cycles - decrease A by 1
jr nz,Wait <- 12 cycles - branch if Not Zero to Wait
pop af <- Restore A reg & flags
reti <- Return from interrupt
FF47
Name - BGP
Contents - BG & Window Palette Data (R/W)
Bit 7-6 - Data for Dot Data 11 (Normally darkest color)
Bit 5-4 - Data for Dot Data 10
Bit 3-2 - Data for Dot Data 01
Bit 1-0 - Data for Dot Data 00 (Normally lightest color)
This selects the shade of grays to use for
the background (BG) & window pixels. Since
each pixel uses 2 bits, the corresponding
shade will be selected from here.
FF48
Name - OBP0
Contents - Object Palette 0 Data (R/W)
This selects the colors for sprite palette 0.
It works exactly as BGP ($FF47) except each
each value of 0 is transparent.
FF49
Name - OBP1
Contents - Object Palette 1 Data (R/W)
This Selects the colors for sprite palette 1.
It works exactly as OBP0 ($FF48).
See BGP for details.
FF4A
Name - WY
Contents - Window Y Position (R/W)
0 <= WY <= 143
WY must be greater than or equal to 0 and
must be less than or equal to 143 for
window to be visible.
FF4B
Name - WX
Contents - Window X Position (R/W)
0 <= WX <= 166
WX must be greater than or equal to 0 and
must be less than or equal to 166 for
window to be visible.
WX is offset from absolute screen coordinates
by 7. Setting the window to WX=7, WY=0 will
put the upper left corner of the window at
absolute screen coordinates 0,0.
Lets say WY = 70 and WX = 87.
The window would be positioned as so:
0 80 159
______________________________________
0 | |
| | |
| |
| Background Display |
| Here |
| |
| |
70 | - %20------------------|
| | 80,70 |
| | |
| | Window Display |
| | Here |
| | |
| | |
143 |___________________|__________________|
OBJ Characters (Sprites) can still enter the
window. None of the window colors are
transparent so any background tiles under the
window are hidden.
FFFF
Name - IE
Contents - Interrupt Enable (R/W)
Bit 4: Transition from High to Low of Pin
number P10-P13.
Bit 3: Serial I/O transfer complete
Bit 2: Timer Overflow
Bit 1: LCDC (see STAT)
Bit 0: V-Blank
0: disable
1: enable


{{define "Head"}} {{ template "bootstrap-table" . }} {{end}} {{define "body"}}
Add entities that you wish to share data with.
Warning! Any character you add here will be visible to entity you share it with
and will share the scoped data you select.
| Character | Sharing | Shared With | Delete |
|---|


Events are used to trigger Actions. Events are dispatched either
by the form processor (xf-form
) or directly by the form author with xf-dispatch
.
| Event | Context Info | Description |
| actions-performed | none | fired after a block of actions has been executed. When using a server-side submission and the data have been mutated an update request will be send to the server. Otherwise (using client-side submission) no update request is send. |
| form-ready | none | dispatched when form is completely initialized |
| message | dispatched by xf-message action |
|
| level | the message level | |
| message | the message to display | |
| model-ready | none | fired after UI model has been loaded |
| no-template-error | dispatched by repeat when there's no template found | |
| message | text message with id of repeat | |
| refresh | none | fired when UI is about to be refreshed |
| refresh-done | none | fired when UI refresh has been completed |
| repeat-item-appended | fired when a new entry has been appended to a repeat | |
| bind | the bind id of the repeat | |
| appendLocation | the index of the newly appended item | |
| appendedItem | the bind object of the appended item | |
| path | the binding path of the newly appended item | |
| repeat-item-inserted | fired in response to an item being inserted into a repeat | |
| bind | the bind id of the repeat | |
| insertLocation | the index of the inserted item | |
| insertedItem | the binding object of the inserted item | |
| path | the binding path of the newly appended item | |
| repeat-item-deleted | fired in response to an item being deleted from a repeat | |
| bind | the bind id of the repeat | |
| deleteLocation | the index of the deleted item | |
| deleteItems | the delete binding object | |
| path | the binding path of the newly appended item | |
| value-change | dispatched in response to a control changing its value | |
| modelItem | the binding object being changed | |
| path | the binding path of the newly appended item | |
| target | the event target element |


THE IDIOTS (IDIOTERNE) (R). (Palace) Director: Lars Von Trier Stars: Bodil Jorgensen, Jens Albinus, Louise Hassing, Troels Lyby, Nikolaj Lie Kaas, Henrik Prip, Luis Mesonero, Louise Mieritz, Kund Romer Jorgenson Running time: 117 minutes (Danish, with English subtitles).
Pioneered by Danish enfant terrible Lars Von Trier, the Dogma manifesto represents a back to basics style of film making. The manifesto stipulates that films made under its guidelines are truly collaborative efforts, without individual recognition or credit given to cast and crew. Under this code of practice, films are shot on location using hand held cameras and natural lighting, and attempt to draw out the natural emotional elements of a specific scenario rather than rely on artificially created action. The Idiots (Idioterne) is the first film produced under this manifesto to reach Australian screens, and it is something of an eye opener.
The Idiots is a challenging, provocative and outrageous film about a group of middle class friends who "spass" - pretend to be mentally handicapped in public places. Spassing allows them to get free meals from restaurants and enables them to get away with behaviour that would normally be greeted with condemnation. People are prepared to tolerate and accept certain standards of behaviour, and make allowances for the handicapped, but this group callously trade on their generosity and faith. The group live in a communal arrangement in the house owned by Stoffer's uncle. The loosely structured plot follows them through a number of public encounters - a factory tour, a swimming lesson, a meeting with a couple of bikies - and explores the hypocrisy of society when it comes to dealing with mental illness. There are some hilarious sequences throughout, but there is also an uncomfortably vicious tone to some of the group's antics. In one scene, Stoffer introduces his friends to some potential buyers who have come to check out his uncle's house. While the couple profess to be comfortable with their handicaps, they can't wait to get away.
The lonely and troubled Karen (Bodil Jorgensen) briefly joins the group, and finds solace and escape from the harsh reality of her life. But slowly the group begins to fall apart as their spassing gets out of control. The Idiots explores the dynamics of group behaviour, and depicts how the selfish actions of one person can impact on the harmony and unity of the rest.
The film's content may well offend many in the audience, but one suspects this is what Von Trier deliberately set out to achieve. Some eight seconds worth of footage have been deleted from the climactic orgy scene. Von Trier has always been a provocative and challenging director, but here he is also pushing aesthetic and ethical boundaries to the limit. With its naturalistic, quasi-documentary style, Von Trier also seems to be deliberately turning his back on those earlier stylish films that established his reputation as one of Europe's finest and most inventive young directors (Europa, etc). Some scenes seem improvised, and the performances are natural and spontaneous. There is something of an amateurish look to the film as boom microphones keep dropping into the shot, and crew members can be seen walking around in the background on several occasions. The jerky, hand held camera movements and the fuzzy, out of focus shots eventually become irritating. Ultimately, this style of cinema verite becomes an artifice rather than a genuine advance in cinematic technique.
Von Trier gives The Idiots a sort of warts-and-all documentary-style feels, as he features talking heads interviews with the principal characters to disguise the technical blemishes.
Brimming with contentious ideas, The Idiots offers a challenging time at the cinema that many within the audience will not feel entirely comfortable with. The film will certainly polarise audiences, and many may not last the distance. While The Idiots lacks the raw emotional power of Von Trier's Breaking The Waves, it will still move audiences in other ways.
*** greg king http://www.netau.com.au/gregking
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


A Business Interaction is defined as a unit of behaviour performed as a collaboration between two or more Business Roles.
A Business Interaction is similar to a Business Process or Business Function, but while a process/function may be performed by a single role, an interaction is performed by multiple roles in collaboration.
A Business Interaction may be triggered by, or trigger, any other business behaviour element (Business Event, Business Process, Business Function, or Business Interaction).
A Business Interaction may access Business Objects.
A Business Interaction may realize one or more Business Services and may use (internal) Business Services or Application Services.
A Business Collaboration or an Application Collaboration may be assigned to a Business Interaction.
The name of a Business Interaction should preferably be a verb in the simple present tense.
Business. Behavioural.
Formalise Request, Check and Sign Contract, Take out Combined Insurance.


Arc90_Service_Twitter_Response represents a response to a Twitter API call.
In addition to the $_data property (accessible via $response->data or $response->getData()), an Arc90_Service_Twitter_Response provides the following read-only attributes related to the original HTTP request:
Located in /lib/Arc90/Service/Twitter/Response.php (line 61)
Creates a new Arc90_Service_Twitter_Response object.
Returns the content body (if any) returned by Twitter.
Checks the HTTP status code of the response for 4xx or 5xx class errors.
Returns response data (and metadata) as an associative array.
Overloads retrieval of object properties to allow read-only access.
Overloads checking for existence of object properties to allow read-only access.
Allows casting of this response object to a string; returns raw response data in native format.
Documentation generated on Tue, 08 Sep 2009 22:02:58 -0400 by phpDocumentor 1.4.3


Try cooking your spaghetti in sauce
by Frank KisakyeRegarded as the students’ and bachelors’ staple food because of how cheap and easy it is to prepare, the universal way of cooking spaghetti is by boiling it first on its own to achieve the al dente effect. Even the most novice cook in the world can boil water, add salt and drop in the spaghetti. Simple.
For those who make pasta, the sauce is logically cooked separately first and then add the half boiled spaghetti and cook for a few minutes. You don’t want to over boil the spaghetti, right?
You would not want your spaghetti to be a clump; it is fun to sip in each strand on its own, the reason many give for boiling it first. Well, next time, try cooking the sauce and spaghetti together. You will notice such a huge difference in the taste. The spaghetti won’t be detached from the sauce.
The trick is to cook the sauce to nearly ¾ or to almost ready with enough soup to boil the spaghetti. It doesn’t look easy on the eye at first with all the standing strands and can make stirring a bit harder, but in less than a minute, the moisture from the boiling sauce will ease the rest of your worries.
Spaghetti cooks at maximum eight minutes and it will be cooked with the juices of the sauce in this case. The taste is marvelous. Try it.
fkisakye@observer.ug


SquadShare
Free, Secure Way To Share Expenses
Home
Log In
Register
Transactions
Profile
Summary
About Us
Log Out
Joint Account Details
Account Number:
Balance:


|
N3 Library
A C library for building neural network.
|
| ▼ src | |
| n3_act.c | This file contains activation functions and their primitive |
| n3_act.h | |
| n3_backward.c | This file contains functions to backpropagate the error and adjusts the weights |
| n3_backward.h | |
| n3_file.c | This file contains functions to import and save a network state |
| n3_file.h | |
| n3_forward.c | This file contains functions to forward the inputs provided to the outputs |
| n3_forward.h | |
| n3_header.h | This file contains types, enums and structs definitions |
| n3_layer.c | This file contains functions to work with N3Layer type |
| n3_layer.h | |
| n3_misc.c | This file contains functions to simplify working with the library |
| n3_misc.h | |
| n3_network.c | This file contains functions to work with N3LNetwork type |
| n3_network.h | |
| n3_neuron.c | This file contains functions to work with N3LNeuron type |
| n3_neuron.h | |
| n3_threads.c | This file contains functions to work with threads |
| n3_threads.h | |
| n3lib.h |


--- title: abstractions keywords: fastai sidebar: home_sidebar summary: "abstract classes for MAB solvers" description: "abstract classes for MAB solvers" ---
a = AbstractContextualMAB(theta = [0.1,0.9], noise=0, linear = False)
a.activation(9)
b = AbstractContextualMAB(theta= [0.1,0.9], noise=0, linear = True)
b.activation(9)
from nbdev.export import *
notebook2script()


Bitcoin Price Faces Drop to $8.5K After Consecutive Weekly Losses
by Omkar GodboleView
- Bitcoin’s consecutive weekly losses and multiple failures at key resistance have shifted risk in favor of a drop to around $8,550 and perhaps as low as $8,000.
- Daily chart indicators have turned bearish for the first time in over a month, supporting the case for a deeper decline.
- A high-volume move above $9,335 (descending trendline from 2019 high) is needed to revive the bullish view.
Bitcoin is looking south after back-to-back weekly losses and multiple rejections at key price resistance.
The top cryptocurrency by market value fell 2.6 percent and 3 percent in the weeks ended Nov. 3 and 10, respectively.
Importantly, BTC has also failed for three straight weeks to close (Sunday, UTC) above the 3.5-month trendline sloping downwards from the 2019 high of $13,880. Acceptance above that hurdle would have meant a revival of the bull market set in motion by a solid break above $5,000 in early April.
The inability to pass that level (currently around $9,335) has weakened the bullish case put forward by the high-volume rise from $7,300 to $10,300 on Oct. 25–26.
Markets usually test dip demand after multiple rejections at key resistance and bitcoin is already feeling the pull of gravity. At press time, the cryptocurrency is trading at $8,680 on Bitstamp, representing a 1 percent drop on a 24-hour basis.
Losses could be extended further with the 200-day moving average support now breached. The barometer of long-term market trend is currently located at $9,236. Other technical indicators have also turned bearish over the weekend.
Weekly chart
BTC is losing altitude, having faced rejection at the descending trendline for three straight weeks.
The 14-week relative strength index (RSI) remains in bearish territory below resistance at 53.00. It’s worth noting that the 53.00–55.00 range acted as a strong support throughout the 2016–2017 bull run.
Hence, a move above 55.00, if and when it occurs, could be taken as a confirmation of bull market.
Monthly and daily charts
Bitcoin’s failure to hold above the descending, bearish 5-candle MA (above left), as represented by the November candle’s upper wick, is translating into a price drop, as expected.
The MACD histogram on the daily chart (right) has crossed below zero over the weekend and is currently signaling at its most bearish since Oct. 3 with a -59.00 reading. The RSI is currently bearish below 50.
BTC has also found acceptance below the 200-day MA – a level that acted as strong support in the nine days to Nov. 7.
All-in-all, BTC appears on track to test and possibly breach the 50-day MA at $8,552. A violation there would expose the psychological support of $8,000.
On the higher side, a convincing move above the 3.5-month descending trendline hurdle, currently at $9,335, is needed to confirm a bullish breakout.
Disclosure: The author holds no cryptocurrency assets at the time of writing.
Bitcoin image via Shutterstock; charts by Trading View


This is the offline version of the documentation. We recommend you to use the online documentation.
title: RoboDK
layout: default
RoboDK
Please note: the RoboDK Interface is only available in Game4Automation Professional.
The RoboDK Interface is currently in Beta. Some advanced functions like moving the Robot in Editor mode and setting targets
will be added later on.
RoboDK is a powerful and cost-effective simulator for industrial robots and robot programming. No programming skills are required with RoboDK’s intuitive interface. You can easily program any robot offline with just a few clicks and RoboDK has an extensive library with over 500 robot arms.
With the RoboDK Interface, you can use RoboDK to control the robots in your Game4Automation models and you can connect the RobotIO’s to Game4Automation behavior models. By modeling the full production line with Game4Automation and by connecting the real PLCs you can simulate and commission big robot cells including all PLCs and HMIs.
Here is a Youtube video showing the RoboDK interface in action:
https://youtu.be/C2ZngS9Lhck
RoboDK can be tested for free. You can download RoboDK from this website:
https://robodk.com/download
RoboDK Demo scene
Game4Automation includes a Demo scene with a RoboDK interface. You can find the Demo scene under Assets/game4automation/Scenes/DemoRoboDK or you can find the demo in the game4automation menu under additional demos.
If RoboDK is installed on your computer RoboDK will be started automatically as soon as the Demo scene is started. The RoboDK file is loaded into RoboDK automatically.
Using the RoboDK Interface
Setup
To use RoboDK to control your robots in Game4Automation you always need to configure in RoboDK the same robot as in Game4Automation. The kinematic of the Game4Automation robot needs to be prepared as usual. Each robot axis needs to have a Drive connected to the Geometry and the kinematic hierarchy needs to be prepared.
Please check the example in the demo scene or our Youtube tutorial about defining robot kinematics: https://youtu.be/AENF87zd56U
The RoboDK interface must be positioned in a parent Gameobject of the Robot. For connecting the RoboDK interface with the robot kinematic the 6 Robot Axis needs to be assigned to the RoboDK interface, starting with the first base axis. In Unity editor mode all robot axis must be positioned in the zero position of the robot controller and RoboDK.
The RoboDK application needs to be referenced by RoboDK Application as well as the RoboDK file. You can create a new RoboDK file by manually starting RoboDK or by pushing Open RoboDK file in the RoboDK interface.
RobotIOs
Inside RoboDK Input and Output signals can be defined. These signals can be used to wait for example for a start signal, to open the gripper of the robot or for sending other information about the robot status.
Inside RoboDK these signals can be defined under Options>Station.
In your Game4Automation scene, you can import these signals by pushing the Button Import Robot IOs. For all signals inside RoboDK the Game4Automation signals are created and you can use these signals in your PLC or Behavior scripts. This is how it is also possible to connect RoboDK with the PLCs inputs and outputs of Game4Automation.
Targets
By pushing on Get Targets you can get all RoboDK targets and show them inside unity. The Target Prefab must be connected to the RoboDK interface. Currently, the Targets must be defined inside RoboDK, for example by teaching the RoboDK during Unity simulation mode. In future releases, we plan also send back to RoboDK the target positions if they are changed inside Unity.
Robot Programs
Robot programs are defined inside RoboDK. You can select inside the RoboDK interface a program Robot Program which should be started automatically (Run Program On Start) when the Unity scene is starting. By selecting Loop Program the program is started automatically when it is finished. It is also possible to start and stop a program manually with the buttons.
© 2019 in2Sight GmbH https://game4automation.com - All rights reserved. No part of this publication may be reproduced, distributed, or transmitted in any form or by any means, including printing, saving, photocopying, recording, or other electronic or mechanical methods, without the prior written permission of the publisher.


We have a lot of social accounts that have been hacked before. Now we are going to help you to find that your account is hacked or not.


Home
Notebook
Documents
Site Contents
Recycle bin
Edit links
Name
Type
Items
Modified
Documents
Document library
0
7/8/2016 11:02AM
Form Templates
Document library
0
7/8/2016 1:02PM
Site Assets
Document library
6
9/9/2016 3:42PM
Site Collection Documents
Document library
0
9/11/2016 3:20 PM
Style Library
Document library
628
6/30/2016 4:10 PM
Content and Structure Reports
List
7
8/30/2016 4:10 PM
Reusable Content
List
3
8/30/2016 4:54 PM
Events
Event List
8
8/30/2016 4:54 PM
Images
List
0
8/30/2016 4:54 PM
MicroFeed
List
2
6/30/2016 11:02 AM
Pages
List
3
6/30/2016 11:02 AM
Power BI
App
9/21/2016 11:45 AM
Site Collection Images
List
6
5/22/2016 8:00 PM


Ford's China JV with Changan to return to sales growth in 2020-president
Auto sales at Ford Motor Co's China venture with Chongqing-based carmaker Changan are likely to turn positive next year, Changan’s president said on Friday.
GUANGZHOU, China/Beijing: Auto sales at Ford Motor Co's China venture with Chongqing-based carmaker Changan are likely to turn positive next year, Changan’s president said on Friday.
That points to a potential reversal in Ford's declining fortunes in the world's biggest auto market, as the U.S. auto maker has grappled with shrinking sales and problems such as an ageing model lineup.
The slide in Ford's sales has been unprecedented for a major global automaker in China. After a peak of 1.08 million vehicles in 2016, sales began faltering in late 2017, then nearly halved last year to 504,488, according to consultancy IHS Markit.
"There are good signs that Changan Ford's sales will get better," Changan president Zhu Huarong told Reuters on the sidelines of Guangzhou Autoshow.
"Changan, Ford and JMC are jointly discussing about future product planning," he said, referring to Jiangling Motors Corp (JMC) , in which Ford also has a stake.
When asked when sales might start growing again, he said "next year", without providing more details.
Changan Ford sold 147,276 vehicles in the first ten months this year, more than halving from 335,535 over the same period last year, according to its filing.
(Reporting by Yilei Sun in Guangzhou and Brenda Goh in Beijing; Editing by Shri Navaratnam)


Step 1 complete - user is logged in and enrollment complete.
Name of Individual Logged In
attributes provided from their BC Services Card
| Date Created | |
| Date Updated | |
| Last Login Date |


Are you an employer or employee?
Resume Upload
Profile Settings
-
First Name
-
Last Name
-
E-mail
-
Phone #
-
Gender
-
Birth date
-
Bio
-
What are some of your hobbies?
-
How do you handle a challenge?
-
Have you ever made a mistake? How did you handle it?
-
Did you ever make a risky decision? Why? How did you handle it?
-
Did you ever postpone making a decision? Why?
-
When you worked on multiple projects how did you prioritize?
-
How far are you willing to travel for employment?


The man who has taught me hardwork and mentors me on programming
Ezechukwu Emereuwaonu, third from right, at a challenge section organized by Goldman Sach in Lagos Nigeria.
Here's a time line of Ezechukwu Emereuwaonu:
1995 - born in Imo State
1998 - started nursery school at the prestigious alvan nursery school
2001 - started primary school
2007 - gained entrance to Alvana Model Secondary School
2009 - represented alvana at the cowbell matths competition
2013 - Got admission to study information technology at federal university of technology owerri
2014 - Became a Front End Web Developer
2015 - Launched the School Management System(SMS) web platform
2016 - PHP and JavaScript Developer
2017 - Wordpress and Shopify e-commerce developer
2018 - Participated in the Goldman Sach challenge and Google summer of codes.
"Ezechukwu's life and achievement so far is a testimony to the far-reaching contribution that one man's towering intellect, persistence and programming vision can motivate others progress."
If you have time, you should read more about this incredible human being on his Github account


|
mlpack
1.0.12
|
The base case and pruning rules for FastMKS (fast max-kernel search). More...
Public Types | |
| typedef neighbor::NeighborSearchTraversalInfo < TreeType > | TraversalInfoType |
Public Member Functions | |
| FastMKSRules (const arma::mat &referenceSet, const arma::mat &querySet, arma::Mat< size_t > &indices, arma::mat &products, KernelType &kernel) | |
| double | BaseCase (const size_t queryIndex, const size_t referenceIndex) |
| Compute the base case (kernel value) between two points. More... | |
| size_t | BaseCases () const |
| Get the number of times BaseCase() was called. More... | |
| size_t & | BaseCases () |
| Modify the number of times BaseCase() was called. More... | |
| double | Rescore (const size_t queryIndex, TreeType &referenceNode, const double oldScore) const |
| Re-evaluate the score for recursion order. More... | |
| double | Rescore (TreeType &queryNode, TreeType &referenceNode, const double oldScore) const |
| Re-evaluate the score for recursion order. More... | |
| double | Score (const size_t queryIndex, TreeType &referenceNode) |
| Get the score for recursion order. More... | |
| double | Score (TreeType &queryNode, TreeType &referenceNode) |
| Get the score for recursion order. More... | |
| size_t | Scores () const |
| Get the number of times Score() was called. More... | |
| size_t & | Scores () |
| Modify the number of times Score() was called. More... | |
| const TraversalInfoType & | TraversalInfo () const |
| TraversalInfoType & | TraversalInfo () |
Private Member Functions | |
| double | CalculateBound (TreeType &queryNode) const |
| Calculate the bound for a given query node. More... | |
| void | InsertNeighbor (const size_t queryIndex, const size_t pos, const size_t neighbor, const double distance) |
| Utility function to insert neighbor into list of results. More... | |
Private Attributes | |
| size_t | baseCases |
| For benchmarking. More... | |
| arma::Mat< size_t > & | indices |
| The indices of the maximum kernel results. More... | |
| KernelType & | kernel |
| The instantiated kernel. More... | |
| double | lastKernel |
| The last kernel evaluation resulting from BaseCase(). More... | |
| size_t | lastQueryIndex |
| The last query index BaseCase() was called with. More... | |
| size_t | lastReferenceIndex |
| The last reference index BaseCase() was called with. More... | |
| arma::mat & | products |
| The maximum kernels. More... | |
| arma::vec | queryKernels |
| Cached query set self-kernels (|| q || for each q). More... | |
| const arma::mat & | querySet |
| The query dataset. More... | |
| arma::vec | referenceKernels |
| Cached reference set self-kernels (|| r || for each r). More... | |
| const arma::mat & | referenceSet |
| The reference dataset. More... | |
| size_t | scores |
| For benchmarking. More... | |
| TraversalInfoType | traversalInfo |
The base case and pruning rules for FastMKS (fast max-kernel search).
Definition at line 29 of file fastmks_rules.hpp.
| typedef neighbor::NeighborSearchTraversalInfo<TreeType> mlpack::fastmks::FastMKSRules< KernelType, TreeType >::TraversalInfoType |
Definition at line 101 of file fastmks_rules.hpp.
| mlpack::fastmks::FastMKSRules< KernelType, TreeType >::FastMKSRules | ( | const arma::mat & | referenceSet, |
| const arma::mat & | querySet, | ||
| arma::Mat< size_t > & | indices, | ||
| arma::mat & | products, | ||
| KernelType & | kernel | ||
| ) |
| double mlpack::fastmks::FastMKSRules< KernelType, TreeType >::BaseCase | ( | const size_t | queryIndex, |
| const size_t | referenceIndex | ||
| ) |
Compute the base case (kernel value) between two points.
|
inline |
Get the number of times BaseCase() was called.
Definition at line 92 of file fastmks_rules.hpp.
References mlpack::fastmks::FastMKSRules< KernelType, TreeType >::baseCases.
|
inline |
Modify the number of times BaseCase() was called.
Definition at line 94 of file fastmks_rules.hpp.
References mlpack::fastmks::FastMKSRules< KernelType, TreeType >::baseCases.
|
private |
Calculate the bound for a given query node.
|
private |
Utility function to insert neighbor into list of results.
| double mlpack::fastmks::FastMKSRules< KernelType, TreeType >::Rescore | ( | const size_t | queryIndex, |
| TreeType & | referenceNode, | ||
| const double | oldScore | ||
| ) | const |
Re-evaluate the score for recursion order.
A low score indicates priority for recursion, while DBL_MAX indicates that a node should not be recursed into at all (it should be pruned). This is used when the score has already been calculated, but another recursion may have modified the bounds for pruning. So the old score is checked against the new pruning bound.
| double mlpack::fastmks::FastMKSRules< KernelType, TreeType >::Rescore | ( | TreeType & | queryNode, |
| TreeType & | referenceNode, | ||
| const double | oldScore | ||
| ) | const |
Re-evaluate the score for recursion order.
A low score indicates priority for recursion, while DBL_MAX indicates that a node should not be recursed into at all (it should be pruned). This is used when the score has already been calculated, but another recursion may have modified the bounds for pruning. So the old score is checked against the new pruning bound.
| double mlpack::fastmks::FastMKSRules< KernelType, TreeType >::Score | ( | const size_t | queryIndex, |
| TreeType & | referenceNode | ||
| ) |
Get the score for recursion order.
A low score indicates priority for recursion, while DBL_MAX indicates that the node should not be recursed into at all (it should be pruned).
| queryIndex | Index of query point. |
| referenceNode | Candidate to be recursed into. |
| double mlpack::fastmks::FastMKSRules< KernelType, TreeType >::Score | ( | TreeType & | queryNode, |
| TreeType & | referenceNode | ||
| ) |
Get the score for recursion order.
A low score indicates priority for recursion, while DBL_MAX indicates that the node should not be recursed into at all (it should be pruned).
| queryNode | Candidate query node to be recursed into. |
| referenceNode | Candidate reference node to be recursed into. |
|
inline |
Get the number of times Score() was called.
Definition at line 97 of file fastmks_rules.hpp.
References mlpack::fastmks::FastMKSRules< KernelType, TreeType >::scores.
|
inline |
Modify the number of times Score() was called.
Definition at line 99 of file fastmks_rules.hpp.
References mlpack::fastmks::FastMKSRules< KernelType, TreeType >::scores.
|
inline |
Definition at line 103 of file fastmks_rules.hpp.
References mlpack::fastmks::FastMKSRules< KernelType, TreeType >::traversalInfo.
|
inline |
Definition at line 104 of file fastmks_rules.hpp.
References mlpack::fastmks::FastMKSRules< KernelType, TreeType >::traversalInfo.
|
private |
For benchmarking.
Definition at line 142 of file fastmks_rules.hpp.
Referenced by mlpack::fastmks::FastMKSRules< KernelType, TreeType >::BaseCases().
|
private |
The indices of the maximum kernel results.
Definition at line 113 of file fastmks_rules.hpp.
|
private |
The instantiated kernel.
Definition at line 123 of file fastmks_rules.hpp.
|
private |
The last kernel evaluation resulting from BaseCase().
Definition at line 130 of file fastmks_rules.hpp.
|
private |
The last query index BaseCase() was called with.
Definition at line 126 of file fastmks_rules.hpp.
|
private |
The last reference index BaseCase() was called with.
Definition at line 128 of file fastmks_rules.hpp.
|
private |
The maximum kernels.
Definition at line 115 of file fastmks_rules.hpp.
|
private |
Cached query set self-kernels (|| q || for each q).
Definition at line 118 of file fastmks_rules.hpp.
|
private |
The query dataset.
Definition at line 110 of file fastmks_rules.hpp.
|
private |
Cached reference set self-kernels (|| r || for each r).
Definition at line 120 of file fastmks_rules.hpp.
|
private |
The reference dataset.
Definition at line 108 of file fastmks_rules.hpp.
|
private |
For benchmarking.
Definition at line 144 of file fastmks_rules.hpp.
Referenced by mlpack::fastmks::FastMKSRules< KernelType, TreeType >::Scores().
|
private |
Definition at line 146 of file fastmks_rules.hpp.
Referenced by mlpack::fastmks::FastMKSRules< KernelType, TreeType >::TraversalInfo().


one
two
three
Logo
Sass
Components
Dropdown
arrow_drop_down
This is our big Tagline!
Here's our small slogan.
Left Aligned Caption
Here's our small slogan.
Right Aligned Caption
Here's our small slogan.
This is our big Tagline!
Here's our small slogan.
Home
About Us
Course Structure
Faculty
Research
Events
Calender
{% csrf_token %} Email:
Subject:
Content:
The cat was playing in the garden.