Introduction: 65xx Technology-Assembly Language Programming With the W65C02SXB- Tutorial 1

The Western Design Center (WDC) has decided to write a series of tutorials on how to get started with our 65xx technology and how to write assembly language programs for the 65xx family of ICs. This tutorial will be based on using the W65C02 Standard chip Xxcelr8r Board (SXB) and utilizing a simple Hello World project.

The Hello World concept is to provide a simple program that when run provides a way to connect with the world around you. In this example, we will be manually blinking an LED light to represent our connection from the Software world to the physical world.

In this tutorial, you will be running WDCTools on a Windows-based system or emulated environment for IOS and connecting the W65C02SXB to a breadboard. We will be writing programs for the W65C02 Microprocessor connecting to the W65C22N VIA peripheral device. You should note that these same programs and techniques will work for the W65C816SXB.

The details of the W65C02SXB, Microprocessor, and I/O Peripheral device can be found in the WDC data sheets so you may want to keep a copy of them for reference. There are also some download links for items you will need for this project.

Downloads:

W65C02SXB Data Sheet: http://www.westerndesigncenter.com/wdc/documentat...

W65C02S Data Sheet: http://www.westerndesigncenter.com/wdc/documentat...

W65C22N Data Sheet: http://www.westerndesigncenter.com/wdc/documentat...

WDCTools Download: http://wdc65xx.com/Products/WDCTools/

Notepad ++: https://notepad-plus-plus.org/

Here is what you will need:

1. A breadboard and two wires with a male and a female connection on either end. These parts are included in the BB400 XKit. Where to Buy

2. W65C02SXB (02SXB) Where to Buy

3. A computer running Windows 7,8, or 10

4. WDCTools Suite

5. A Text Editor- We like the free NotePad ++

5. Micro USB to USB Cable. (This is a standard communication cable that you probably use to charge your cell phone)

Step 1: Knowing Your W65C02SXB (Standard Chip Xxcelr8r Board)

Becoming familiar with what is layout and connectivity capability of your W65C02SXB is a good idea. This board is designed with the intention to work directly with all WDC 65xx IC family of chips. It not only provides a great platform for education but also a powerful engineering development platform. This means that as your understanding and capabilities grow this board will be all the board you need.

Here is a link to the WDC Getting started for the W65C02SXB: http://wdc65xx.com/gettingstarted/ . This guide includes instructions to download WDCTools and the FTDI Drivers.

Step 2: Getting Familiar With the W65C02S Microprocessor

The W65C02S is a low cost, general-purpose 8-bit microprocessor (8-bit registers and data bus) with a 16-bit program counter and address bus. The variable length instruction set and manually optimized core size are intended to make the W65C02S well suited for low power system-on-chip (SoC) designs.

Features of the W65C02S

  • 8−bit data bus
  • 16−bit Address Bus 65Kbyte Memory and IO Space
  • 69 Variable Length Instructions
  • 16 Addressing Modes
  • 1.8−5V Operating Voltage
  • Fully Static for Power and Radiation Management Verilog

This diagram shows the basic pin functions for the W65C02S.

The W65C02S also comes in several package types including:

  • 40 Pin DIP
  • 44 Pin PLCC (Used on the 02SXB and 816SXB)
  • 44 Pin QFP

Step 3: Getting Familiar With the W65C22N and How It Is Connected to the W65C02SXB Header

Information about the W65C22:

The W65C22 (W65C22N and W65C22S) Versatile Interface Adapter (VIA) is a flexible I/O device for use with the 65xx series microprocessor family.

The W65C22 includes functions for programmed control of two peripheral ports (Ports A and B). Two program controlled 8-bit bidirectional peripheral I/O ports allow direct interfacing between the microprocessor and selected peripheral units. Each port has input data latching capability. Two programmable Data Direction Registers (A and B) allow selection of data direction (input or output) on an individual line basis.

Using this port for our project:

For this project we will be connecting from the VIA (J3) connector on your SXB board to a breadboard. The pin layout for this connector can be found in the illustration above.

  • Pin 1 is identified with a square on this PAD and with a small dot on the edge of the board of the J3 connector.
  • Pin layout information can be found in the W65C02SXB Data Sheet

Step 4: Setting Up Your Breadboard and Connecting It to the VIA Header

Setting up your Breadboard:

  1. Place an LED of your color choice to your breadboard so that the short leg is connected to the power row and the long leg is connected to a row on the board. I chose row 20 on my board.

NOTE: In this project you do not need to place a resistor to limit power to your LED because the W65C22N has a built in current limiting resistor.

Connecting to your SXB board:

  1. Pin two is directly behind pin one which is identified on the header with a small dot at the edge of the board. Pin 2 is identified as VSS or POWER.
  2. Connect the female end of your wire to the VSS location on the J3 connector
  3. Connect the male end of your wire to the Power row on your breadboard
  4. Then connect the female end of a new wire to pin 17 or PB0 on the J3 Header
  5. Connect the male end in line (left to right) with your LED. Given your board is connected to your computer and powered you should see your LED light up!

Step 5: Getting Ready for Assembly Language Programming

There are some key concepts that must be understood prior to learning to program a computer in assembly language. These concepts include the use of the binary and hexadecimal number systems, and how memory is addressed as bytes of data.

This introduction will not address most of these things and will assume that you have some level of understanding and thus are wanting to become more acquainted with more recent 65xx technology and associated products such as the Xxcelr8r Board line.

Assembly Language

Writing long strings of hexadecimal or binary instructions to program a computer is obviously not something you would want to do if you could at all avoid it. Assembly language and programs which translate assembly language to machine code (called assemblers) were devised to simplify the task of machine programming.

Assembly language substitutes a short word – known as a mnemonic (which means memory aid) – for each binary machine code instruction. So while the machine code instruction 1010 1010, which instructs the 65x processor to transfer the contents of the A accumulator to the X index register, may be hard to remember, its assembler mnemonic TAX (for “Transfer A to X”) is much easier.

Writing in Assembly Language

In addition to understanding the processor you’re working with, you will also have a good knowledge of the particular assembler you are using to program in assembly language.

Most microcomputer assemblers have a great deal in common. They generally provide four columns, or fields, for different types of information about an operation: a label that can be used to symbolically identify the location of the code; the opcode; the operand; and space for comments.

While an opcode or directive appears in every assembler statement, the operand field may or may not be required by any particular opcode, since there are several one-byte instructions that consist solely of an opcode. The label and comment field is optional, added to make the program easier to read, write, debug, and modify later.

During assembly, the assembler checks the fields to be sure the information there is complete, of the proper type, and not out of order, and issues error messages to warn you of problems. It also checks to be sure you have not tried to define the same label twice, and that you have not used a label you did not define.

Lessons and More regarding 6502 Assembly and getting started can be found in the WDC Programming Manual which is available on Amazon!

Note: WDCTools has a simulator as well so playing with a project is easy

Step 6: Programming Your Project

NOTE: The steps below have been updated as of September 2022.

Ok, now you must be ready to get this project started with your SXB board!

Below is a list of steps to get your projects working with your WDCTools. We have provided a basic program that is missing parts of the program such as memory location and your values for the accumulator. There are comments in the program which will help walk you through where these things need to be programmed but we left that all up to you.

Steps:

  1. Plug your board into your PC
  2. Download the Hello World project Click this link: WDC Hello World project
  3. Save the Hello World project folder in your C drive under C:/WDC/W65C02SXB/. You will want to be sure that this project lives in your W65C02SXB projects folder so that when you open this project your path from your tools to your board is ready to go.
  4. Go to the Hello World Project folder and open the ASM file in your text editor. Here is where you will edit your program and save it. Once saved, it will always live in your projects folder location. So be sure that you make modifications and just hit save. This will make things pretty easy.
  5. Within Windows Explorer, double click on the mk02_HelloWorld.bat BATch file to launch the Tools (Assembler, Linker, Debugger) that are called within the file. Each time you want to assemble and link changes, you can go back and run the BATch file.
  6. A window will pop up asking you to select your USB device location. Select the device in the box and click the "Okay" button.
  7. Your WDCDB window should launch and if your code window is blue you are ready to go!
  8. Push the F7 (Single Step) button to walk through your code if you did everything right then you should see your light blink On and Off.

Troubleshoot if necessary.

Remember failure is a big part of Engineering. Improving your skills in troubleshooting problems is a big deal.