Hello old programmers !

UPDATE January 2021

I had a request to extract the Editor/Assembler from the original program to be used with different R6502 platforms, actually with the AIM 65.
I made a sort of it and I published a new dedicated page here.
Now, let's continue with the 'old' page.

...for those who loved the 6502 CPU inside the mytical Apple ][ & Commodore
...for those who wrote in the easy and productive 6502 Assembly
...for those who want to learn programming in a visual way is my answer.

My name is Giacomo.
I started programming the 6502 assembly in the far 1980, with my fantastic Apple ][ (not 'e', not '+' and not 'C' !).
I did not know anything about programming and my only source of information (no Internet at that time!) was the Apple Monitor booklet, where a smart guy called Steve Wozniak (maybe someone remembers him!), co-founder and friend of the other Steve (Jobs), wrote few essential guides on the CPU, the language and the D.O.S. monitor. It was a masterpiece!
Later on I understood how clever was his programming and how many tricks he inserted into the code.
I spent nights in studying and testing, until the my very first program decided to complete its job without errors...great time!

With months and then years, the knowledge grow-up and a lot of floppy diskettes (the real floppy ones), with their enormeous content of 140KB accumulated on my desk: few completed programs, a quantity of investigation tests and some useful tools.
There was an Assembler/DisAssembler, a Monitor Tool, a Disk Access Tool, and so on.

When I was conviced to migrate to other platforms - from the MAC Classic to, lately, the Intel [:-(] - I kept the Apple ][ to remember my past, went broken!
No way to recover it with my limited expenses capability...sigh

I still had some diskettes, even if a lot of them disappeared during an home change.
One day, in 2002, those diskettes came to my eyes and I thought how nice it was programming in assembly... why not write something to exercise my mind with that old mindgame?
From that thought, this program was born.

Most of implementation was done with the 'real' Apple ][ in mind - terms & architecture mostly - but it can be used to emulate any other 6502 based PC, or even a different CPU wishing to change the core 'Instruction Execute' routine.

What is it?

The basic initial idea was to have a sort of didactical tools to present the beauty of assembly to someone.
Originally, it should have been just something able to execute the assembly code and, maybe, interact in some way with me (some switches and some leds)...but the requirements increased and, at the end, the current projects includes:

  • A very rudimental Editor to write source codes
  • An Assembler, to compile sources into executable files
  • A Symulator which executes and traces the program
  • An Input/Output panel, including a 'poor man' video monitor
  • Other Auxiliary tools and windows
  • An Options panel to customize the appearance

To understand how everything is tied, this is the General Architecture of the Emulator.


It is now the Spring 2018 and digging in my folders I was stuck by the date of my original project: how long ago!
I decided that is now time, for my own pleasure, to give it some sort of refurbishment; thinking and thinking, I realized that it was to complex and with too many limitations to apply only few cosmetical I rewrote it totally!
The process is still on its way and I expect to complete the version 2.0 within the currente year, somewhere around September.
The V2 is still in Visual Basic 6, but the entire structure is completely different. The major change is that the memory has now two main zones: User Area (program and data) and Kernel (program and data).
This is because with V1 all the I/O and HW functions was executed by the VB program, not by the emulated 6502 CPU.
This means that they were much faster, but of little interest for the user. Porting them into the CPU codes realizes the 'didactical' scope of the program: is an user's responsability to create the 'best' HW interface and control the I/O devices.
The I/O panel now incorporates an interactive keyboard, a 20x4 character LCD module, two 256x128 graphical displays, a monochrome one and a color one.
To manage the keyboard and the switches is mandatory to have an interrupt handler, not so easy to implement. This justify the develpemt time.
I hope to present the V2 asap, with a rich help and documentation area.


The complete package, including sources, are available HERE to download
To run the executable you need to heve the MS Visual Basic Runtime on your>


The program is completely FREEWARE or, better, it is PostcardWare. I mean: I would really be pleased to receive a postacard from users - I do not recieve them since years (someone still uses them?).
Should you decide to send the postcard, please send me an email and I will replay with my home address (sorry, but it can not be public, you know why...).
As always, everything is released without any warranty; I really think it will never create any PC malfunction, but should it happen, I can not be responsible.

Known bugs

A lot...too many to remember ! I might try to fix some, hopefully, if someone reports them.
As any programmers knows, I like to introduce new features and enhance them; this always leads to new bugs...

Limitations (and wish list)

* Video graphics:

Originally I implemented a 256x256 graphic display, but it was so slow to be useless.
I might think to use VB6 APIs to read/modify/write pixels using Copymemory and Safearray.

* Monitor (characters display)

Updated in version 1.07 now the resolution is 16x12; a totally new way of displaying characters allows to change fonts and sizes (these not implemented yet); furthermore, using Blitting, it is now faster.

* Unimplemented instructions:

The only instruction not implemented is [RTI] since it would not have any sense; the associated [SEI] does only set the flag bit into Status.
The decimal operation mode is not implemented since I do now how to do it! Again the flags [SED] and [CLD] are supported.

* Multi Origins

It would be nice (and useful) to have multiple origin addresses (ORGs); I tried but no way to have them working.
Possibly the way I thought addressing and branches does not permit it. I will think again.

Click su qualsiasi immagine per ingrandire

In memory of Steven Jobs

Jobs and Wozniak in the garage