Introduces the core architecture of the Atari 2600 graphics chip (TIA), its 6502 CPU and showcases a "Hello, World!" application that can be executed on an emulator or on the real console. Includes reference links for those who want to learn more. Originally presented in Brazil at events such as Dev in Sampa and Campus Party.
Palestra apresentada em 27/Ago/2011 no Dev in Sampa (http://devinsampa.com.br/), em 06/Nov/2011 no Dev In Vale e em 11/Fev/2012 no Campus Party Brasil (5a. edição, #cpbr5)
O vídeo da palestra no Dev In Sampa (filmada pelo @agaelebe) está disponível em: http://chester.blog.br/archives/2011/08/palestra-sobre-programacao-para-atari-2600-no-dev-in-sampa-2011.html
O objetivo da palestra é valorizar o esforço dos programadores que criaram os jogos clássicos do Atari 2600. Uma apresentação básica da arquitetura (em particular das limitações de CPU/memória e do chip TIA), montagem e rodagem, em um emulador, de um pequeno experimento, demonstrando a complexidade envolvida na criação de um jogo completo.
Palestrante
Carlos Duarte do Nascimento
Matemático pelo IME/USP e Gerente de Produto no Apontador, faz "artesanato" de software há 20 anos, defendendo plataformas e conteúdo livres.
These slides were used at Winter Nights 2015 Conference in Moscow (http://wnconf.com/) during the speech of Inna Ushakova, CEO ZENNA.
Video: https://youtu.be/yR-Vg23s7F4
http://zennaapps.com/
Palestra apresentada em 27/Ago/2011 no Dev in Sampa (http://devinsampa.com.br/), em 06/Nov/2011 no Dev In Vale e em 11/Fev/2012 no Campus Party Brasil (5a. edição, #cpbr5)
O vídeo da palestra no Dev In Sampa (filmada pelo @agaelebe) está disponível em: http://chester.blog.br/archives/2011/08/palestra-sobre-programacao-para-atari-2600-no-dev-in-sampa-2011.html
O objetivo da palestra é valorizar o esforço dos programadores que criaram os jogos clássicos do Atari 2600. Uma apresentação básica da arquitetura (em particular das limitações de CPU/memória e do chip TIA), montagem e rodagem, em um emulador, de um pequeno experimento, demonstrando a complexidade envolvida na criação de um jogo completo.
Palestrante
Carlos Duarte do Nascimento
Matemático pelo IME/USP e Gerente de Produto no Apontador, faz "artesanato" de software há 20 anos, defendendo plataformas e conteúdo livres.
These slides were used at Winter Nights 2015 Conference in Moscow (http://wnconf.com/) during the speech of Inna Ushakova, CEO ZENNA.
Video: https://youtu.be/yR-Vg23s7F4
http://zennaapps.com/
Neil Sarkar (AdHawk Microsystems): Ultra-Fast Eye Tracking Without Cameras fo...AugmentedWorldExpo
A talk from the Develop Track at AWE USA 2018 - the World's #1 XR Conference & Expo in Santa Clara, California May 30- June 1, 2018.
Neil Sarkar (AdHawk Microsystems): Ultra-Fast Eye Tracking Without Cameras for Mobile AR Headsets
This session showcases the first camera-free eye-tracking microsystem. A MEMS (microelectromechanical system) device on a tiny chip scans a beam of light across the eye 4,500 times every second. The latest specifications to be revealed at AWE are enabling foveated rendering in mobile platforms, endpoint prediction during saccades, and unprecedented insights into the state of the user.
http://AugmentedWorldExpo.com
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS GamesElectronic Arts / DICE
Master thesis from Chalmers University of Technology done at DICE in 2009.
Full thesis available on: http://publications.dice.se and http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=111921
The concept of immersion has been adapted by game developers and game critics to describe a deep and positive game experience. While the definition of this concept varies, the user interface of the game is often said to affect the degree to which players can immerse themselves in a game experience. In cooperation with game developer DICE, this master thesis aims to investigate how the notion of immersion affects, and is affected by, the user interface (UI) of first-person shooter games, with the ultimate purpose of delivering user interface guidelines for increased immersion. By conducting a study of contemporary first-person shooter (FPS) games, the current state of user interfaces in FPS games is documented. With the addition of a subjective study of FPS games as well as games of other genres, a design space for UI designers is mapped out in order to provide a structure upon which the guidelines can be built. A literature study of various resources within the fields of ludology, cognitive science and media studies is conducted in order to gain increased understanding of what immersion is and its relation to the game experience. The knowledge acquired is used to formulate various hypotheses of how player immersion is connected to the user interfaces of FPS games. These hypotheses are evaluated by user studies and user tests. Looking at the results of the user tests and the literature study, a final definition of immersion is proposed, upon which the guidelines are based. The first guideline, Know Your Design Space, explains the user interface design space of FPS games and encourages UI designers to look at it as a set of tools. Know Your Game discusses how the competitive focus of the game and the game fiction affects the user interface from an immersion point of view. The guideline Establish Player Agency focuses on how the player can be transferred into the game world by acting within it as an agent rather than simply a player of the game. Finally, Strengthen the Player-Avatar Perceptual Link suggests how the user interface can link the player closer to his in-game character on a perceptual level.
How to create good BI for UA activities? How we did it at Pixel Federation? How we structure our systems and our teams? What we can say based on our experience? Presentation run by Michal Grno at 8th edition of GameCamp (www.gamecamp.io).
Albion Online - A Cross-Platform MMO (Unite Europe 2016, Amsterdam)David Salz
Albion Online is a cross-platform sandbox MMO RPG game. This talk takes you behind the (technical) scenes. We will take a look at the structure of the server farm and its inner workings, the databases, the threading and message processing model and many other interesting implementation aspects. On the client side, Albion uses the well-known Unity game engine. The second part of the talk will describe how we use Unity (and which features we do not use, which is just as important!)
Leszek Szczepański, Gameplay programmer, Guerrilla Games
Horizon Zero Dawn was a long, almost 7-year project. But it had to start somewhere. This session will discuss the road Guerrilla Games has traveled during the prototyping stage of Horizon Zero Dawn.
A macro-level overview of the Japanese video game market, including history and a forecasts as to where things are headed.
Recommended for those interested in the mobile and social gaming space. When it comes to mobile in particular, trends that happen in Japan are often a bellwether indicator of where the entire industry is going once the global market matures.
The folks at App Annie recently claimed that Japan has become the top country for Google Play revenues, and GMO’s report points out that the nation is the fastest growing country (560 percent) in terms of revenue on Apple’s app store (citing Distimo, June). So it’s certainly a market that you want a piece of if you’re a mobile app or game developer.
If you are a game developer considering selling your game in Japan, please contact us via infous@gmocloud.com
Killzone Shadow Fall: Creating Art Tools For A New Generation Of GamesGuerrilla
This talk describes the tool improvements Guerrilla Games implemented to make Killzone Shadow Fall shine on the PlayStation 4. It highlights additions to the Maya pipeline, such as Viewport 2.0, Maya's coupling with in-game updates and in-engine deferred renderer features including real-time shadow-casting, volumetric lighting, hardware instancing, lens flares and color grading.
The emulator was presented to the public at RubyConfBr 2013. Its source code can be downloaded at http://github.com/chesterbr/ruby2600
The video is on YouTube: http://www.youtube.com/watch?v=S3qAOu41CxE
Neil Sarkar (AdHawk Microsystems): Ultra-Fast Eye Tracking Without Cameras fo...AugmentedWorldExpo
A talk from the Develop Track at AWE USA 2018 - the World's #1 XR Conference & Expo in Santa Clara, California May 30- June 1, 2018.
Neil Sarkar (AdHawk Microsystems): Ultra-Fast Eye Tracking Without Cameras for Mobile AR Headsets
This session showcases the first camera-free eye-tracking microsystem. A MEMS (microelectromechanical system) device on a tiny chip scans a beam of light across the eye 4,500 times every second. The latest specifications to be revealed at AWE are enabling foveated rendering in mobile platforms, endpoint prediction during saccades, and unprecedented insights into the state of the user.
http://AugmentedWorldExpo.com
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS GamesElectronic Arts / DICE
Master thesis from Chalmers University of Technology done at DICE in 2009.
Full thesis available on: http://publications.dice.se and http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=111921
The concept of immersion has been adapted by game developers and game critics to describe a deep and positive game experience. While the definition of this concept varies, the user interface of the game is often said to affect the degree to which players can immerse themselves in a game experience. In cooperation with game developer DICE, this master thesis aims to investigate how the notion of immersion affects, and is affected by, the user interface (UI) of first-person shooter games, with the ultimate purpose of delivering user interface guidelines for increased immersion. By conducting a study of contemporary first-person shooter (FPS) games, the current state of user interfaces in FPS games is documented. With the addition of a subjective study of FPS games as well as games of other genres, a design space for UI designers is mapped out in order to provide a structure upon which the guidelines can be built. A literature study of various resources within the fields of ludology, cognitive science and media studies is conducted in order to gain increased understanding of what immersion is and its relation to the game experience. The knowledge acquired is used to formulate various hypotheses of how player immersion is connected to the user interfaces of FPS games. These hypotheses are evaluated by user studies and user tests. Looking at the results of the user tests and the literature study, a final definition of immersion is proposed, upon which the guidelines are based. The first guideline, Know Your Design Space, explains the user interface design space of FPS games and encourages UI designers to look at it as a set of tools. Know Your Game discusses how the competitive focus of the game and the game fiction affects the user interface from an immersion point of view. The guideline Establish Player Agency focuses on how the player can be transferred into the game world by acting within it as an agent rather than simply a player of the game. Finally, Strengthen the Player-Avatar Perceptual Link suggests how the user interface can link the player closer to his in-game character on a perceptual level.
How to create good BI for UA activities? How we did it at Pixel Federation? How we structure our systems and our teams? What we can say based on our experience? Presentation run by Michal Grno at 8th edition of GameCamp (www.gamecamp.io).
Albion Online - A Cross-Platform MMO (Unite Europe 2016, Amsterdam)David Salz
Albion Online is a cross-platform sandbox MMO RPG game. This talk takes you behind the (technical) scenes. We will take a look at the structure of the server farm and its inner workings, the databases, the threading and message processing model and many other interesting implementation aspects. On the client side, Albion uses the well-known Unity game engine. The second part of the talk will describe how we use Unity (and which features we do not use, which is just as important!)
Leszek Szczepański, Gameplay programmer, Guerrilla Games
Horizon Zero Dawn was a long, almost 7-year project. But it had to start somewhere. This session will discuss the road Guerrilla Games has traveled during the prototyping stage of Horizon Zero Dawn.
A macro-level overview of the Japanese video game market, including history and a forecasts as to where things are headed.
Recommended for those interested in the mobile and social gaming space. When it comes to mobile in particular, trends that happen in Japan are often a bellwether indicator of where the entire industry is going once the global market matures.
The folks at App Annie recently claimed that Japan has become the top country for Google Play revenues, and GMO’s report points out that the nation is the fastest growing country (560 percent) in terms of revenue on Apple’s app store (citing Distimo, June). So it’s certainly a market that you want a piece of if you’re a mobile app or game developer.
If you are a game developer considering selling your game in Japan, please contact us via infous@gmocloud.com
Killzone Shadow Fall: Creating Art Tools For A New Generation Of GamesGuerrilla
This talk describes the tool improvements Guerrilla Games implemented to make Killzone Shadow Fall shine on the PlayStation 4. It highlights additions to the Maya pipeline, such as Viewport 2.0, Maya's coupling with in-game updates and in-engine deferred renderer features including real-time shadow-casting, volumetric lighting, hardware instancing, lens flares and color grading.
The emulator was presented to the public at RubyConfBr 2013. Its source code can be downloaded at http://github.com/chesterbr/ruby2600
The video is on YouTube: http://www.youtube.com/watch?v=S3qAOu41CxE
This is a lightning 5-minute talk given SyncHerts in Stevenage UK on 14 Jan 2016. It very quickly tells you what the 2600 can do, shows how we get something on the screen, and how we must count every single clock cycle to make our code work! Finally, we delve into *why* someone might want to try this..
Even seasoned developers get in trouble with Git, and fixing a botched branch/PR seems to require a deep understanding of Git's numerous concepts—a lot of theory just to get things done. This talk (originally presented at RubyConf Brazil 2016, then at Shopify) re-introduces Git (and GitHub) from the point of view of a pull request, going through tricky spots that show up time and time again, focusing on what we should know in order to avoid those problems—or at least to control the damage.
Идеи и результаты команды Skynet - 3-е место на Хакатоне DeepHack.Game. Задача: улучшить опубликованный Google DeepMind алгоритм обучения в играх Atari 2600
The ideas and results of Skynet team - 3rd place in the Hackathon DeepHack.Game. Task was to improve learning algorithm for playing Atari 2600 games, which was published by Google DeepMind
Идеи и результаты команды 5vision, занявшей 1-е место на Хакатоне DeepHack.Game. Задача: улучшить опубликованный Google DeepMind алгоритм обучения в играх Atari 2600
The ideas and results of 5vision team - 1st place in the Hackathon DeepHack.Game. Task was to improve learning algorithm for playing Atari 2600 games, which was published by Google DeepMind
Um passo a passo de como passar de Algoritmo para Pascal. Um algoritmo simples. Apenas para conhecer os comandos simples do Pascal e transformar o Algoritmo em algo real.
Abraço.
Introduction to emulator programming including source code of a Game Boy emulator written in Go: https://github.com/drhelius/demo-emulator
This was presented at Codemotion 2016 (Madrid, Spain): https://2016.codemotion.es
Apresentado na RubyConfBR 2016
Até mesmo desenvolvedores veteranos caem em armadilhas quando usam Git em seus projetos Ruby/Rails. Sair dessas ciladas costuma exigir conhecimento profundo das entranhas do Git - um objetivo nobre para quem pode investir o tempo e esforço.
Esta palestra é para nós - as outras pessoas.
Como um não-especialista em Git, o palestrante vai visitar alguns sufocos que aparecem de tempos em tempos, com foco no que é preciso saber para evitar estes problemas - ou pelo menos para limitar o prejuízo.
[Video: http://www.youtube.com/watch?feature=player_detailpage&v=nzo9dcCMi-4#t=1169s ] Palestra que introduz o desenvolvimento de aplicativos na plataforma do Google de forma pragmática, apresentada na 5a. edição (2012) do Campus Party (#cpbr5)
Apresentação de curta duração (20 minutos) feita na Campus Party Brasil 2011 (4a. edição), a convite da Vivo. Nela procuro mostrar algumas das dificuldades não-óbvias que eventualmente impedem os projetos independentes de irem da idéia até o produto final.
Palestra apresentada no PythonBrasil[6] (Out/2010), na qual a recém-lançada API do Apontador é apresentada para os desenvolvedores com foco particular no uso com Python (através da biblioteca própria de código livre).
Slides do mini-curso ministrado durante a SECCOMP 2010 (XVIII Semana da Ciência da Computação) no campus de Rio Claro da UNESP, na qual alunos de Ciência da Computação foram apresentados ao universo da criação de mashups, viram alguns cases e tecnologias relacionadas e fizeram exercícios usando Yahoo! Pipes (para integrar feeds RSS) e JavaScript (integrando a Apontador API com o Google Maps).
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
2. What
An overview of the Atari 2600
architecture, covering everything
needed to create a “Hello,World!”
program that can run on emulators
or even on a real Atari
http://slideshare.net/chesterbr
3. Why
● Pure nostalgia
● Homebrew games
● Demoscene
● Appreciate masterworks such as
Enduro, Pitfall! or River Raid
● Feel better about today's tools
and hardware limitations :-)
http://slideshare.net/chesterbr
13. Look ma, no O.S.!
Atari programs talk directly to the
hardware – there is no middle man!
Its 6502 CPU only “understands”
memory reads and writes, so all the
other chips are hard-wired to act as
memory (even those who aren't)
14. Memory Map
(very, very, very simplified*)
0000-002C – TIA (write)
0030-003D – TIA (read)
0080-00FF – RIOT (RAM)
0280-0297 – RIOT (I/O,Timer)
F000-FFFF – Cartridge (ROM)
*http://nocash.emubase.de/2k6specs.htm
19. VRAM
Screen resolution and color depth
are subject toVRAM size limits
Memory was expensive on the
70s/80s, leading to trade-offs
How muchVRAM does an Atari have?
22. Memory Map
0 bytes !!!!
????-???? – VRAM
right, now you
got a problem...
23. Racing the Beam
Since we can't just write pixels to
someVRAM frame buffer, our code
will need to work a bit closer to
the TV hardware, with a little help
from a very unique chip...
27. TIA is scanline-oriented
As the beam draws each scanline, the
game program must set TIA registers
to configure the objects drawn on it
Most of this objects have only one
color, making multiple colors on the
same scanline theoretically impossible...
30. Screen Objects
● Playfield (PF)
● Players (P0, P1)
● Missiles/Ball (M0, M1, BL)
Scanlines will be rendered based on
how we configure TIA's screen objects:
31. Playfield (PF)
20-bit pattern with a foreground and
a background color, rendered
over the left side of the scanline
The right side will either repeat or
refect the same pattern (the later
generating a symmetrical image)
44. Players (P0, P1)
Each one is an independent 8 bit pattern
(GRP0/GRP1) with a foreground color
(COLUP0 / COLUP1) that can be
positioned at any column of the scanline
e.g.: 10100001 → ████████
56. Missiles/Ball (M0/M1/BL)
Can be positioned just like players, but
no bit pattern, just a pixel (although it
can be horizontally stretched 2/4/8x)
M0/M1 use P0/P1colors, while
BL uses the PF foreground color
62. Master Plan
For each scanline, configure the
options for each object before the
beam reaches its intended position
The time slot is very short, forcing
programmers to pick and choose what
to change, reusing as much as they can
63. How short?
6502 ≈ 1,19Mhz (1.194.720 cycles/sec)
NTSC: 60 frames per second
1.194.720/60 ≅ 19.912 cycles per frame
64. How short?
CPU: 19.912 cyles per frame
NTSC: 262 scanlines per frame
19.912 / 262 = 76 cycles per scanline
65. How short?
CPU: 19.912 cyles per frame
NTSC: 262 scanlines per frame
19.912 / 262 = 76 cycles per scanline
and what can we do with 76 cycles?
(by the way:WTF is a “cycle”?)
69. 6502 (Atari-wise)
Reads a program from the cartridge
(ROM) composed of operations that
manipulate and transfer bytes between
cartridge, RIOT (RAM, I/O, timers) and
TIA, keeping state on internal registers
70. Operations
Each operation that composes a 6502
program in memory is identified by a
1-byte opcode and can be followed
by up to 2 bytes of parameters
An instruction can take up to 6
cycles to be executed
71. Registers
A = Accumulator (8 bits)
X,Y= Indexes (8 bits)
S = Stack Pointer (8 bits)
P = Status (fags, 8 bits)
PC = Program Counter (16 bits)
72. Example program
“add 2 to a value stored at a
memory position; store the result
into another memory position”
73. Implementation
● Read the byte stored on memory
position 0200 into register A
● Add 2 to register A's value
● Write register A's value into
memory position 0201
74. 6502 Machine Code
AD Opcode (Memory → A)
00 Last part of “0200”
02 First part of “0200”
69 Opcode (value + A → A)
02 Value to add
8D Opcode (A → Memory)
01 Last part of “0201”
02 First part of “0201”
77. 6502 Machine Code
AD Opcode (Memory → A)
00 Last part of “0200”
02 First part of “0200”
69 Opcode (value + A → A)
02 Value to add
8D Opcode (A → Memory)
01 Last part of “0201”
02 First part of “0201”
79. Assembler
Program that reads a text file
written in Assembly language and
assembles a binary file with the
corresponding machine code
foo.asm
LDA $0200
ADC #02
STA $0201
...
foo.bin
AD000269
028D0102
...
ASSEMBLER
80. Macro Assembler
ORG $0100 ; Start @ memory 0100
...
SomeLabel:
LDX #$10 ; No idea where this
DEX ; will be in memory,
BNE SomeLabel ; and don't need to!
...
81. DASM
● 6502 Macro Assembler
● Includes Atari headers
● Multiplataform
● Free and open-source (GPLv2)
http://dasm-dillon.sourceforge.net/
82. Notation (for today)
#... = decimal value
#$... = hex value
$... = hex address
$... , X = hex address + X
http://www.obelisk.demon.co.uk/6502/addressing.html
94. Hello,World!
Our display kernel will configure each
pair of visible scanlines with a byte
from a “hello world” bitmap (stored
on the card, just after the code)
Let's find which are visible, and how
we need to deal with TV timings
110. ...world
...
.BYTE %00000000 ; D
.BYTE %01111000
.BYTE %01000100
.BYTE %01000010
.BYTE %01000010
.BYTE %01000100
.BYTE %01111000
.BYTE %00000000 ; PF1 last value (!)
111. 6502 configuration
ORG $FFFA ; Located at the end
; of ROM (cart)
.WORD FrameStart ; NMI address
.WORD FrameStart ; BOOT address
.WORD FrameStart ; BRK address
END
119. Playfield-based score
Q: How can different patterns be
shown at each side of the playfield?
A: Change the pattern when the
beam is halfway through the scanline
(“race the beam”)
126. Pitfall!
Screen configuration (logs, vines,
trees, stairs, crocs) was squeezed
into a single byte, but 255 screens
(bytes) are still a huge ROM table
(for Atari standards)
http://pitfallharry.tripod.com/MapRoom/PitfallMap.html
127. Pitfall!
David Crane implemented a sequence
generator (LFSR), which, for a given
value, would give the previous/next
ones, replacing the 255-byte table
with a 50-byte piece of code
http://en.wikipedia.org/wiki/Linear_feedback_shift_register
129. River Raid
Carol Shaw had used a 16-bit generator,
resulting in thousands of non-repeating
river sectors (tweaking the interpreter
to make the first few ones easier)
When a player loses a life, rendering
restarts from the last generated number,
that is, back on the last bridge
131. Horizontal positioning
The horizontal position of a player /
missile / ball is not a writable register
Games must sync to with the beam and
write to the appropriate strobe register
when it is on the desired location
133. You can calculate...
1 CPU cycle = 3 “color clocks” (pixels)
Horizontal Blank = 22.6 cycles
horiz. position ≈ (cycles – 22.6) * 3
...but it is an estimate, because TIA only
reads its registers every 5 CPU cycles
Smooth ↔ movement is also hard
134. Alternatives
A 4-bit register allows moving a player,
missile or ball relative to its previous
position (adding -7 to +8 pixels)
The missile can also be reset to the
middle of its player, making it easy to
“fire” it over and over
138. Multi-digit score
The trick is the same of the playfield-
based score (change the registers while
the beam is drawing the scanline), but
timing is much more of an issue here
Let's say the score is 456789...
139. Multi-digit score
Begin the scanline with the bits for 4
on GRP0 and those for 5 on GRP1
Configure NUSIZ0 and NUSIZ1 for
a triple repetition:
4 4 4 5 5 5
Player 0 Player 1
140. Multi-digit score
Set player 1 position just to the right
of player 0, overlapping the triplets
454545
Player 0
Player 1
145. Multi-digit score
There are other hurdles: we can't load
replaced digits from memory, and we
only have 3 memory-writable registers
to store 6 bit patterns...
...and that is why it is fun!
147. A new look to the old school
Knowing what the Atari 2600 was
designed to do, we can appreciate
games that push it beyond its limits
by identifying “impossible” things
148. It is just the beginning!
The Atari homebrew scene is alive and
kicking, and these are the basics you
need to create your own games/demos
There are several uncovered topics
(sound, timers, collision, I/O...), but with
time and dedication, you can do it!
149. To learn more
Hello, World: https://gist.github.com/chesterbr/5864935
Sorteio 2600 http://github.com/chesterbr/sorteio2600
Racing The Beam (book): http://bit.ly/dSqhjS
David Crane's talk: http://youtu.be/MBT1OK6VAIU
David Crane's iOS tutorials: http://bit.ly/9pwYHs and http://bit.ly/qWBciZ
Stella Programmer's Guide: http://emu-docs.org/?page=Atari%202600
Classic games disassembled: http://classicdev.org/wiki/2600/Source_Code
Atari 2600 specs: http://nocash.emubase.de/2k6specs.htm
6502 reference: http://bit.ly/hxG5c6
In-browser emulator: http://jogosdeatari.com.br/
Andrew Dave's tutorial: http://bit.ly/ptQDdA (the whole site is great)
Harmony (SD-reader cart): http://harmony.atariage.com/
BAtari (BASIC compiler): http://bataribasic.com
TIA sound examples: http://bit.ly/tnbPrp
Bankswitching (more ROM/RAM): http://bit.ly/tqhLZk
151. Credits and License
This presentation is available under the
licença Creative Commons “by-nc” 3.0 l,
noticing the exceptions below
Images from third parties were included (with due credits) under
fair use assumption and/or under their respective licenses.
These are excluded from the license above.
Atari™,Adventure™, Donkey Kong™, Pitfall™, Super Mario™ and
likewise characters/games/systems are mentioned uniquely for
illustrative purposes, also under fair use assumption.They are property
of their rights holders, and are also excluded from the license above.