Spot 600文字列研究室オプション2 :色セレクタ

6351 ワード


導入
こんにちは私の友人、戻って戻って文字列研究室の2番目の部分に戻って、我々は2つのプログラムを作成し、6502アセンブリ言語を使用してパート2に分割することを決めた.最初の部分では、我々は追加計算機を作成し、今あなたが読んでいるものは、この研究室の第2部ですが、我々は色セレクタを作成することを決めた.このプログラムは、ユーザーが画面上の特定の色を印刷するキーストロークを使用して右側の画面上の色を選択することができます.

ステップ
  • は、スクリーン上のカラー文字列を印刷するためにROMをつくる.
  • アップキーとダウンキーを作成し、機能を割り当てます.これは、ユーザーが画面上の色文字列を選択できるようになります.
  • カラー文字列のタイトルを出力します.
  • プリント
  • を使用している15の色文字列を印刷してください
  • ユーザーが選択した名前文字列を強調するためにループを使用します.
  • ピクセルの色を変更するには、DrawRangeスクリーンループを使用します.

  • コード
    define SCINIT  $ff81 ; initialize/clear screen
    define CHROUT  $ffd2 ; output character to screen
    
    define COLOUR  $10
    define COLOUR_INDEX $11
    define POINTER  $40
    define POINTER_H $41
    define UP_KEY  $80
    define DOWN_KEY $82
    
     lda #$00 
     sta COLOUR
     sta COLOUR_INDEX 
    
     jsr initializePrint
    
    getKey:
     lda $ff
     sty $ff
    
     cmp #UP_KEY
     beq decrementKey
    
     cmp #DOWN_KEY 
     beq incrementKey
    
     jmp getKey
    
    decrementKey:
     lda COLOUR
     cmp #$01
     bpl decrementColour
    
     jmp getKey
    
    decrementColour:
     dec COLOUR
    
     jsr initializePrint
     jsr initializePaint
     jmp getKey
    
    incrementKey:
     lda COLOUR
     cmp #$0f
     bmi incrementColour
    
     jmp getKey
    
    incrementColour:
     inc COLOUR
     jsr initializePrint
     jsr initializePaint
     jmp getKey
    
    initializePrint:
     jsr SCINIT
            ldy #$00
    
    writeTitle:
     lda title,y
            beq titleDone
            jsr CHROUT
            iny
            bne writeTitle
    
    titleDone:
     lda #$00
     sta COLOUR_INDEX
    
    startColour:
     ora #$00
     ldy #$00
    
    colourName:
     jsr selectedColour
     beq afterWriting
     jsr highlightLine
    
     jsr CHROUT
    
     iny
     bne colourName
    
    afterWriting:
     inc COLOUR_INDEX
     lda COLOUR_INDEX
     cmp #$10
     bne startColour
    
    selectedColour:
     lda COLOUR_INDEX
    
     cmp #$00
     beq printColour0
    
     cmp #$01
     beq printColour1
    
     cmp #$02
     beq printColour2
    
     cmp #$03
     beq printColour3
    
     cmp #$04
     beq printColour4
    
     cmp #$05
     beq printColour5
    
     cmp #$06
     beq printColour6
    
     cmp #$07
     beq printColour7
    
     cmp #$08
     beq printColour8
    
     cmp #$09
     beq printColour9
    
     cmp #$0a
     beq printColour10
    
     cmp #$0b
     beq printColour11
    
     cmp #$0c
     beq printColour12
    
     cmp #$0d
     beq printColour13
    
     cmp #$0e
     beq printColour14
    
     cmp #$0f
     beq printColour15
    
     rts
    
    printColour0:
     lda colour0,y
     rts
    
    printColour1:
     lda colour1,y
     rts
    
    printColour2:
     lda colour2,y
     rts
    
    printColour3:
     lda colour3,y
     rts
    
    printColour4:
     lda colour4,y
     rts
    
    printColour5:
     lda colour5,y
     rts
    
    printColour6:
     lda colour6,y
     rts
    
    printColour7:
     lda colour7,y
     rts
    
    printColour8:
     lda colour8,y
     rts
    
    printColour9:
     lda colour9,y
     rts
    
    printColour10:
     lda colour10,y
     rts
    
    printColour11:
     lda colour11,y
     rts
    
    printColour12:
     lda colour12,y
     rts
    
    printColour13:
     lda colour13,y
     rts
    
    printColour14:
     lda colour14,y
     rts
    
    printColour15: 
     lda colour15,y
     rts
    
    highlightLine:
     ldx COLOUR_INDEX
     cpx COLOUR
     beq highlight
    
     ora #$00
     rts
    
    highlight:
     ora #$80
     rts
    
    initializePaint:
     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
    
    title:
    dcb "L","i","s","t",32,"o","f",32,"C","o","l","o","u","r","s",":",13
    dcb 00
    
    colour0:
    dcb "B","l","a","c","k",13
    dcb 00
    
    colour1:
    dcb "W","h","i","t","e",13
    dcb 00
    
    colour2:
    dcb "R","e","d",13
    dcb 00
    
    colour3:
    dcb "C","y","a","n",13
    dcb 00
    
    colour4:
    dcb "P","u","r","p","l","e",13
    dcb 00
    
    colour5:
    dcb "G","r","e","e","n",13
    dcb 00
    
    colour6:
    dcb "B","l","u","e",13
    dcb 00
    
    colour7:
    dcb "Y","e","l","l","o","w",13
    dcb 00
    
    colour8:
    dcb "O","r","a","n","g","e",13
    dcb 00
    
    colour9:
    dcb "B","r","o","w","n",13
    dcb 00
    
    colour10:
    dcb "L","i","g","h","t",32,"r","e","d",13
    dcb 00
    
    colour11:
    dcb "D","a","r","k",32,"g","r","e","y",13
    dcb 00
    
    colour12:
    dcb "G","r","e","y",13
    dcb 00
    
    colour13:
    dcb "L","i","g","h","t",32,"g","r","e","e","n",13
    dcb 00
    
    colour14:
    dcb "L","i","g","h","t",32,"b","l","u","e",13
    dcb 00
    
    colour15:
    dcb "L","i","g","h","t",32,"g","r","e","y",13
    dcb 00
    
    サンプル結果:




    反射
    研究室4部では,アセンブリ言語を用いたカラーセレクタを作成した.それは私たちにとって新しい挑戦です.最も退屈なことは、色文字列を印刷し、ユーザーの選択を強調するために別のループを使用することです.その後、カラーピクセルを変更するためにループを使用する必要があります.アセンブリ言語は、初心者として学ぶためには、4つの異なるラボでそれを勉強するのは難しいです.私は他のより高いプログラミング言語のような構文やコーディングロジックに精通していないので、私はそれのマスターだと言うことはできません.しかし、私はそれを学んで、ほぼ全体の学期のためにそれに取り組んでうれしいです、そして、それは私が以前に触れなかった低レベルのプログラミング言語の見方を示します、そして、記憶装置とRAM見解に深くより高いプログラミング言語を理解するのを助けます.