1,885
edits
Changes
no edit summary
[[Category:6502]][[Category:Assembly Language]][[Category:SPO600]]This is a collection of simple examples of [[6502]] [[assembly language|assembly language]] code which will run in the [[6502 Emulator|emulator]]. To use this code, copy and paste one of these programs into the text box of the [http://6502.cdot.systemsemulator]. '''This code is Copyright ©2020-2022 Seneca College of Applied Arts and Technology. Each of these programs is free software; you can redistribute them and/or modify them under the terms of the [https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html|emulatorGNU General Public License]as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.'''
== Fill the Bitmapped Display ==
sta $11
ldx #$06 ; max value for $11, the high byte of the pointer
ldy #$00 ; index- this value is added to the pointer
lda #$07 ; colour code to be used to fill the display loop: sta ($10),y ; store colourto the value of the pointer + Y iny ; increment index- prepare to fill next pixel bne loop ; branch until overflowpage done - stops when Y==0
inc $11 ; increment hi high byte of pointer lda $11 ; load page number as colour
cpx $11 ; compare with max value
bne loop ; continue if not done
== Place a Message on the Character Display ==
=== Without using the ROM routines === define SCREEN $f000 ; location of screen memory ldy #$00 ; index value (character we're currently processing)
char: lda text,y ; get a character from address (text + Y) beq done ; if the character is NULL, branch to done sta SCREEN,y ; store character at (SCREEN + Y) iny ; increment Y (go to next character) bne char ; repeat loop
text: ; this is the text message
dcb "6","5","0","2",32,"w","a","s",32,"h","e","r","e",".",00
=== Using the ROM routines ===
; ROM routines
define SCINIT $ff81 ; initialize/clear screen
define CHRIN $ffcf ; input character from keyboard
define CHROUT $ffd2 ; output character to screen
define SCREEN $ffed ; get screen size
define PLOT $fff0 ; get/set cursor coordinates
jsr SCINIT ; initialize and clear the screen
ldy #$00
char: lda text,y
beq done
jsr CHROUT ; put the character in A on to the screen
iny
bne char
done: brk
text:
dcb "6","5","0","2",32,"w","a","s",32,"h","e","r","e",".",00
== Type on the Screen ==
; let the user type on the first page of character screen
; has blinking cursor!
; does not use ROM routines
; backspace works (non-destructive), arrows/ENTER don't
adc #$20 ; add 32 to drop one row
sta $10
lda $11 ; carry to high byte if needed
adc #$00
sta $11
done: brk ; stop when finished
data: ; graphic to be displayed
dcb 00,03,03,00
dcb 07,00,00,07
== Etch-a-Sketch<sup>tm</sup> Style Drawing ==