compudanzas/src/uxn_tutorial.gmo

137 lines
3.4 KiB
Plaintext
Raw Normal View History

2021-07-22 00:22:54 +00:00
# uxn tutorial
2021-07-31 21:10:56 +00:00
a beginner's guide for programming the varvara computer based on the {uxn} core, and a slow-paced companion to the official documentation.
2021-07-22 00:22:54 +00:00
2021-07-23 21:21:47 +00:00
=> https://wiki.xxiivv.com/site/uxn.html uxn technical documentation
2021-07-22 00:22:54 +00:00
2021-07-23 18:33:07 +00:00
the tutorial is divided in 8 days (or sections), as it can be followed along with a workshop.
(as of today, this is a work in progress)
2021-07-28 23:19:22 +00:00
there's a collaborative translation to spanish also in progress: {tutorial de uxn}
2021-07-23 18:33:07 +00:00
# day 1
2021-07-31 19:06:25 +00:00
in this first section of the tutorial we talk about the basics of the uxn computer called varvara, its programming paradigm in a language called uxntal, its architecture, and why you would want to learn to program it.
2021-07-23 18:33:07 +00:00
we also jump right in into our first simple programs to demonstrate fundamental concepts that we will develop further in the following days.
2021-07-22 00:22:54 +00:00
2021-07-23 18:33:07 +00:00
=> ./uxn_tutorial_day_1.gmi {uxn tutorial day 1}
# day 2
2021-07-31 19:06:25 +00:00
in this section we start exploring the visual aspects of the varvara computer: we talk about the fundamentals of the screen device so that we can start drawing on it!
2021-07-26 22:43:05 +00:00
2021-07-31 19:06:25 +00:00
we also discuss working with shorts (2-bytes) besides single bytes in uxntal.
2021-07-26 22:43:05 +00:00
=> ./uxn_tutorial_day_2.gmi {uxn tutorial day 2}
# day 3
2021-07-31 21:10:56 +00:00
here we introduce the use of the controller device in the varvara computer: this allows us to add interactivity to our programs, and to start implementing control flow in uxntal.
2021-07-31 19:06:25 +00:00
we also talk about logic and stack manipulation instructions in uxntal.
=> ./uxn_tutorial_day_3.gmi {uxn tutorial day 3}
# day 4
2021-07-23 18:33:07 +00:00
coming soon!
# draft outline
this outline is here and now as a reference of the overall structure of the tutorial.
2021-07-22 00:22:54 +00:00
2021-07-31 19:06:25 +00:00
changes are expected to happen.
2021-07-22 00:22:54 +00:00
## day 1: the basics
* why uxn?
* {postfix} notation
* uxn computer architecture
* installation and toolchain
* a very basic hello world
* labels, macros, and runes
* an improved hello world
* print a digit
new instructions: LIT, DEO, ADD, SUB
=> https://git.sr.ht/~rabbits/uxn/ uxn repo
## day 2: the screen
* short mode
* system colors
* draw pixels
* sprites: chr format, nasu
* draw sprites
* stack operations
* practice: manual repetition of sprite
new instructions: DEI, MUL, DIV, SWP, OVR, ROT, DUP, POP
new mode: short mode
=> https://wiki.xxiivv.com/site/nasu.html nasu
## day 3: interactivity with the keyboard
* controller vector
* flow control: conditionals, relative and absolute jumps
* runes for addresses
* button and key
* bitwise masks
* practice: move/change sprite with keyboard
new instructions: EQU, NEQ, JCN, JMP, AND, ORA, EOR, SFT
## day 4: loops and animation
* flow control: repetition of a sprite
* screen vector
* variables: zero page, relative, absolute
* offsets in addresses
* animation timing
* practice: animated sprite
new instructions: LTH, GTH, STZ, STR, STA, LDZ, LDR, LDA
## day 5: interactivity with mouse
* mouse device and vector
* return stack and mode
* subroutines: parameters, calling, returning
* practice: sprite as pointer
* practice: simple drawing tool
new instructions: STH, JSR
new mode: return mode
## day 6: audio
* the audio device
* samples as audio sprites
* adsr
* pitch
* practice: small music instrument
## day 7: keep mode and other devices
* keep mode
* re-writing code with keep mode
* file device: saving and loading a simple state
* datetime device: reading the date and time
* practice: visualization of time
new mode: keep mode
## day 8: demo time
* share what you created :)
# support
2021-07-23 18:33:07 +00:00
if you found this tutorial to be helpful, consider sharing it and giving it your {support} :)