DEV Community 👩‍💻👨‍💻

Qiwen Yu
Qiwen Yu

Posted on

SPO600 Lab4(Option 4): Screen Colour Selector Part B

Summary

This dev blog is the second part of the previous one. In this part, I have figured out all the subroutines required and put together as the final scripts.

Final Implementation

; 

 lda #$00 
 sta COLOUR
 sta COLOUR_INDEX 

 jsr initialize_print ; jump to subroutine

; = get key input =
getKey:
 lda $ff
 sty $ff

 cmp #UP_KEY
 beq decrement_key

 cmp #DOWN_KEY 
 beq increment_key

 jmp getKey

decrement_key:
 lda COLOUR
 cmp #$01
 bpl decrement_colour

 jmp getKey

decrement_colour:
 dec COLOUR

 jsr initialize_print
 jsr initialize_paint
 jmp getKey

increment_key:
 lda COLOUR
 cmp #$0f
 bmi increment_colour

 jmp getKey

increment_colour:
 inc COLOUR
 jsr initialize_print
 jsr initialize_paint
 jmp getKey

; = print screen (Output) =
initialize_print:
 jsr SCINIT
        ldy #$00

title_write:
 lda title,y
        beq title_done
        jsr CHROUT
        iny
        bne title_write

title_done:
 lda #$00
 sta COLOUR_INDEX

write_colourStart:
 ora #$00
 ldy #$00

write_colourName:
 jsr select_colour
 beq write_done
 jsr toggle_highlight

 jsr CHROUT

 iny
 bne write_colourName

write_done:
 inc COLOUR_INDEX
 lda COLOUR_INDEX
 cmp #$10
 bne write_colourStart

select_colour:
 lda COLOUR_INDEX

 cmp #$00
 beq print_colour0

 cmp #$01
 beq print_colour1

 cmp #$02
 beq print_colour2

 cmp #$03
 beq print_colour3

 cmp #$04
 beq print_colour4

 cmp #$05
 beq print_colour5

 cmp #$06
 beq print_colour6

 cmp #$07
 beq print_colour7

 cmp #$08
 beq print_colour8

 cmp #$09
 beq print_colour9

 cmp #$0a
 beq print_colour10

 cmp #$0b
 beq print_colour11

 cmp #$0c
 beq print_colour12

 cmp #$0d
 beq print_colour13

 cmp #$0e
 beq print_colour14

 cmp #$0f
 beq print_colour15

 rts

print_colour0:
 lda colour0,y
 rts

print_colour1:
 lda colour1,y
 rts

print_colour2:
 lda colour2,y
 rts

print_colour3:
 lda colour3,y
 rts

print_colour4:
 lda colour4,y
 rts

print_colour5:
 lda colour5,y
 rts

print_colour6:
 lda colour6,y
 rts

print_colour7:
 lda colour7,y
 rts

print_colour8:
 lda colour8,y
 rts

print_colour9:
 lda colour9,y
 rts

print_colour10:
 lda colour10,y
 rts

print_colour11:
 lda colour11,y
 rts

print_colour12:
 lda colour12,y
 rts

print_colour13:
 lda colour13,y
 rts

print_colour14:
 lda colour14,y
 rts

print_colour15: 
 lda colour15,y
 rts

toggle_highlight:
 ldx COLOUR_INDEX
 cpx COLOUR
 beq highlight

 ora #$00
 rts

highlight:
 ora #$80
 rts

; = Screen Paint =
; = Initialize =
initialize_paint:
 lda #$00         ; set a pointer at $40 to point to $0200
        sta POINTER
        lda #$02
        sta POINTER_H

 ldy #$00

 lda COLOUR

draw_screen:
  sta ($40), y     ; set pixel

        iny              ; increment index
        bne draw_screen  ; continue until done the page

        inc $41          ; increment the page
        ldx $41          ; get the page
        cpx #$06         ; compare with 6
        bne draw_screen  ; continue until done all pages

 rts

; = for screen printing =
title:
dcb "C","o","l","o","u","r","s",13,00

colour0:
dcb "0",".",32,"B","l","a","c","k",13,00

colour1:
dcb "1",".",32,"W","h","i","t","e",13,00

colour2:
dcb "2",".",32,"R","e","d",13,00

colour3:
dcb "3",".",32,"C","y","a","n",13,00

colour4:
dcb "4",".",32,"P","u","r","p","l","e",13,00

colour5:
dcb "5",".",32","G","r","e","e","n",13,00

colour6:
dcb "6",".",32,"B","l","u","e",13,00

colour7:
dcb "7",".",32,"Y","e","l","l","o","w",13,00

colour8:
dcb "8",".",32,"O","r","a","n","g","e",13,00

colour9:
dcb "9",".",32,"B","r","o","w","n",13,00

colour10:
dcb "1","0",".",32,"L","i","g","h","t",32,"r","e","d",13,00

colour11:
dcb "1","1",".",32,"D","a","r","k",32,"g","r","e","y",13,00

colour12:
dcb "1","2",".",32,"G","r","e","y",13,00

colour13:
dcb "1","3",".",32,"L","i","g","h","t",32,"g","r","e","e","n",13,00

colour14:
dcb "1","4",".",32,"L","i","g","h","t",32,"b","l","u","e",13,00

colour15:
dcb "1","5",".",32,"L","i","g","h","t",32,"g","r","e","y",13,00
Enter fullscreen mode Exit fullscreen mode

What I have Learned

From this lab, I have learned how to work with strings in assembly language. Moreover, one need to use ROM, input and output key, and implement highlight characters as well.

Top comments (0)

Let's Get Hacking

Join the DEV x Linode Hackathon 2022 and use your ingenuity and creativity to build using Linode.

Join the Hackathon <-