So, as you might not know, I’ve been following along with a tutorials by George Janssen on YouTube. USER: GBJanssen 6809
Using his examples as a staring point, I’ve been getting my feet wet in coding for the COCO3.
For example:
;------------------------------------------------------------------
; Program name: HIRESTEST.ASM
; Author: Pete Willard
; Date: March 29, 2024
; Description: tests using the Color Computer 3
;------------------------------------------------------------------
; Register usage: 6809 (6309 HAS MORE REGISTERS)
; A - Accumulator
; B - Accumulator
; D - Accumulator (A&B)
; X - Index register
; Y - Index register
; U - Stack pointer
; S - Status register
; PC - Program counter
; DP - Direct Page register
;------------------------------------------------------------------
;------------------------------------------------------------------
; GENERAL CONSTANTS
;------------------------------------------------------------------
BS EQU $08 ;BACKSPACE
CR EQU $0D ;ENTER KEY
ESC EQU $1B ;ESCAPE CODE
LF EQU $0A ;LINE FEED
FORMF EQU $0C ;FORM FEED
SPACE EQU $20 ;SPACE (BLANK)
NULL EQU $00 ;NULL, END OF STRING INDICATOR
TRUE EQU $FF ;TRUE VALUE
FALSE EQU $00 ;FALSE VALUE
BREAK EQU $03 ;BREAK KEY
;------------------------------------------------------------------
; MACROS
;------------------------------------------------------------------
; 6309 has a `clrd` instruction, but it is not supported by the
; 6809 CPU. This macro is used to clear the D register for the 6809
; COMMENT OUT AND UNCOMMENT AS NEEDED IF USING A 6309 OR 6809 CPU
;CLEARD MACRO ; Clears D Data Register
; clra ; by clearing the A register
; clrb ; then clearing the B register
; ENDM
;-----------------------------------------------------------------
; ROM ROUTINES
;-----------------------------------------------------------------
GETCHR equ $A000 ; GET 1 Char jsr[GETCHR]
GETLIN equ $A390 ; GET A LINE - in BUFBEG
DELAY equ $A7D3 ; DELAY ROUTINE
PUTCR equ $B958 ; PUT A Carriage Return $0D
PUTSP equ $B9AC ; PUT A SPACE to screen
PUTLIN equ $B99C ; PUT A LINE Msg in X-1
RGB_PAL equ $E5FA ; RGB Palette reset
CMP_PAL equ $E606 ; CMP Palette reset
COL32 equ $F652 ; Switch to 32 char screen
COL40 equ $F65C ; Switch to 40 char screen
COL80 equ $F679 ; Switch to 80 char screen
CLRHI equ $F6E0 ; Clear Hi-Res "TEXT" Screen
LOCATE equ $F8F3 ; HI-Res locate cursor A=COL B=ROW
SLOW equ $FFD8 ; Clear cpu rate (0.89 MHz)
FAST equ $FFD9 ; Set cpu rate (1.78 MHz)
;-----------------------------------------------------------------
SETUP:
org $1000
START:
;-------------------------------------------------------------------
jsr RGB_PAL ; rgb palette reset
jsr COL40 ; width 80
jsr CLRHI ; clear hires screen
;-------------------------------------------------------------------
; setup complete
;-------------------------------------------------------------------
COLUMN equ 7
ROW equ 2
ROW_SPACE equ 2
;------------------------------------------------------------------
MAIN:
;------------------------------------------------------------------
lda #COLUMN ; set column
ldb #ROW ; set row
jsr LOCATE ; set cursor
ldx #message1-1 ; load message address
jsr PUTLIN
DONE:
rts ; back to basic
message1:
fcn "abcdefghijklmnopqrstuvwxyz"
messsage2:
fcn "abcdefghijklmnopqrstuvwxyz"
end START
Next, using the following commands, I can test things out with XROAR emulator.
lwasm -9bl -o test1.bin test1.asm decb copy -2 test1.bin hires.dsk,TEST1.BIN -r xroar.exe -machine coco3 -tv-input rgb -machine-cpu 6809 -kbd-translate
and then loading the “hires.dsk” into XROAR and using ‘LOADM “TEST1.BIN”‘ to run it.

