Source code to Dave's Garage video discussing a complete application in 6502 assembly.
In the settings.inc
file, a number of symbols are defined that can be used to configure the build:
Name | Possible values | Mandatory | Meaning |
---|---|---|---|
C64 | 0 or 1 | No | Configure build for the Commodore 64. Exactly one of C64 or PET must be defined to equal 1. |
COLOR | 1 to 15 | On C64 | Color code to use for the characters of the clock. Only used and needed on the Commodore 64. A reference for the color C64 codes can be found here. |
COLUMNS | 40 or 80 | Yes | Screen width of the target machine, in columns. |
DEBUG | 0 or 1 | Yes | Set to 1 to enable code that only is included for debug builds. |
DEVICE_NUM | 8 to 15 | With petSD+ | Device number of the petSD+. Only used if PETSDPLUS=1. |
EPROM | 0 or 1 | Yes | When set to 1, the BASIC stub and load address will not be included in the build output. |
JIFFYLAGCOMP | Integer | Yes | Jiffy timer lag compensation for the PET; this value is deducted from the "official" number of jiffies per minute (i.e. 3600) when deciding if a minute has passed. The default value of 28 is based on the finding that the clock loses slightly less than a minute per two hours on the MiniPET. |
PET | 0 or 1 | No | Configure build for the PET. Exactly one of C64 or PET must be defined to equal 1. |
PETSDPLUS | 0 or 1 | Yes | When set to 1, the clock will read RTC from petSD+ instead of the jiffy timer. Currently, the petSD+ is only supported on the PET. |
SHOWAMDEFAULT | 0 or 1 | Yes | Set to 1 to use a dot separator for AM and colon for PM. Otherwise, the separator is a colon at all times. |
Note that the PET and C64 symbols are not set by default. The reason is that the assembly target is a prime candidate to be set via the command line.
This repository's code targets the ca65 assembler and cl65 linker that are part of the cc65 GitHub project. You will need a fairly recent build of cc65 for assembly of this repository's contents to work.
With the cc65 toolkit installed and in your PATH, you can build the application using any of the following commands:
-
If the assembly target is set in
settings.inc
:cl65 -o petclock.prg -t none petclock.asm
-
For the PET:
cl65 -o petclock.prg --asm-define PET=1 -t none petclock.asm
-
For the Commodore 64:
cl65 -o petclock.prg --asm-define C64=1 -t none petclock.asm
Assuming the petclock.prg file is on a disk in device 8, the clock can be loaded using the following command:
LOAD "PETCLOCK.PRG",8
If the clock has been assembled without petSD+ support, the clock's time will be loaded from the system clock (jiffy timer). The system clock can be set in BASIC using the following command, replacing HH
, MM
and SS
with hours, minutes and seconds respectively:
TI$="HHMMSS"
The hours can/should be specified in 24-hour time. The clock will always show 12-hour notation. Upon exit, the system clock will be set to the time that is then on the clock. The AM/PM state of the clock will then be considered.
The clock can be started with:
RUN
When the clock is running, some actions can be taken by pressing certain keys on the keyboard:
Key(s) | Action |
---|---|
H | Increment hours |
SHIFT+H | Decrement hours |
M | Increment minutes |
SHIFT+M | Decrement minutes |
Z | Set (hidden) second counter to 0 |
U | Update clock immediately |
S | Toggle showing whether it's AM or PM. When this setting is ON, the number separator will be a dot in AM, and a colon in PM. When the setting is OFF, the separator is a colon at all times. |
L | Load the current time from the petSD+ (on petSD+ builds, only) |
T | Show the current exact time as registered in the CIA clock (on C64 builds, only) |
C | Switch to the next character color in the palette (on C64 builds, only) |
SHIFT-C | Switch to the previous character color in the palette (on C64 builds, only) |
You can stop the clock and return to BASIC by pressing RUN/STOP.
A summary of this section will be shown if a key is pressed that is not recognized.
For those who would like more information about the 6502 CPU and/or about writing assembly code for it, the folks at 6502.org have compiled a lot of resources on the topic. Amongst others, there is a page that contains links to tutorials and primers, which itself links to a detailed description of the 6502 opcodes used in the PET clock source code.