User Tools

Site Tools


sd:part_ii_writing_games_in_assembly_language

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sd:part_ii_writing_games_in_assembly_language [2026/04/02 20:03] appledogsd:part_ii_writing_games_in_assembly_language [2026/04/03 05:30] (current) appledog
Line 3: Line 3:
  
 == Introduction == Introduction
-At the end of [[SD-8516 Stellar BASIC]] we wrote a game called [[sdb:robots|ROBOTS.BAS]]. This was a fun little take on the classic CHASE or 'robots' game from the bsd games collection. Now, for our study of Assembly Language, let's write a similar game: 'robots.asm'.+At the end of [[SD-8516 Stellar BASIC]] we wrote a game called [[sdb:robots|ROBOTS.BAS]]. This was a fun little take on the classic CHASE or 'robots' game from the bsd games collection. Now, for our study of Assembly Language, let's write a similar game: 'robots.asm'. Don't worry if you're not familiar with the BASIC version of this program; everything will be explained here.
  
 == Part 1: Assembling and Running a Program == Part 1: Assembling and Running a Program
-An assembly language program should start with an .address the bytes will be compiled fromOur program therefore begins:+Just like BASIC programs have line numbers, or C programs have #include statements, an assembly language program should start with an ''.address'' statementThis will tell the assembler where to start assembling the program. This enables us to use labels like ''start:'' and ''message:''. The assembler can calculate the exact address of the label in relative to the ''.address'' when assembling the program.
  
 <codify armasm> <codify armasm>
Line 318: Line 318:
  
 This is easy enough; after a CMP, if the values are equal then the zero flag is set. We will use JZ (jump if zero flag is set) to go to the correct routine. This is easy enough; after a CMP, if the values are equal then the zero flag is set. We will use JZ (jump if zero flag is set) to go to the correct routine.
 +
 +=== processing each command
 +<codify armasm>
 +move_left:
 +    LDAL [@PX]        ; load variable PX into register AL.
 +    DEC AL            ; X = X - 1 (move to the left!)
 +    
 +    CMP AL, #1        ; bounds check. Is the player on the border?
 +    JC @ml_ok         ; AL >= 1, so it's ok. skip to ml_ok,
 +    
 +    LDAL #1           ; If  we reach here the player was on the border; set position to 1.
 +    
 +ml_ok:
 +    STAL [@PX]        ; pass! Save the player's location.
 +    RET
 +</codify>
 +
 +This is the move_left command. We begin by loading the player's X location into AL and executing the move. After a bounds check, we save the variable. All of the other moves operate this way.
sd/part_ii_writing_games_in_assembly_language.1775160237.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki