SPO600 스트링 랩 옵션 2: 색상 선택기

6192 단어

소개



안녕 내 친구, string lab의 두 번째 부분에 다시 오신 것을 환영합니다. 이 실습에서는 2개의 프로그램을 만들고 6502 어셈블리 언어를 사용하여 파트 2로 분할하기로 결정했습니다. 첫 번째 부분에서는 더하기 계산기를 만들었고 지금 읽고 있는 내용은 이 실습의 두 번째 부분입니다. 이 부분에서는 색상 선택기를 만들기로 했습니다. 이 프로그램은 사용자가 키 입력을 사용하여 오른쪽 화면에서 색상을 선택할 수 있도록 하고 프로그램은 화면에 특정 색상을 인쇄합니다.

단계


  • ROM을 만들어 화면에 색상 문자열을 인쇄합니다.
  • 위쪽 키와 아래쪽 키를 만든 다음 기능을 할당합니다. 사용자가 화면에서 색상 문자열을 선택할 수 있습니다.
  • 색상 문자열의 제목을 인쇄합니다.
  • 루프를 사용하여 15색 문자열 인쇄
  • 루프를 사용하여 사용자가 선택한 이름 문자열을 강조 표시합니다.
  • draw_screen 루프를 사용하여 픽셀 색상을 변경합니다.

  • 암호




    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 파트 2에서는 어셈블리 언어를 사용하여 색상 선택기를 만들었습니다. 우리에게는 새로운 도전입니다. 가장 지루한 것은 다른 루프를 사용하여 색상 문자열을 인쇄하고 사용자 선택을 강조 표시하는 것입니다. 그런 다음 루프를 사용하여 색상 픽셀을 변경해야 합니다. 어셈블리 언어는 초보자로서 4개의 서로 다른 랩에서 배우고 작업하기가 어렵습니다. 다른 고급 프로그래밍 언어와 같은 구문 및 코딩 논리에 100% 익숙하지 않기 때문에 내가 마스터라고 말할 수 없습니다. 하지만 거의 한 학기 내내 배우고 작업할 수 있어 기쁘고 전에 접해보지 못한 저급 프로그래밍 언어에 대한 시각을 보여주고, 스토리지에 대한 심도 있는 고급 프로그래밍 언어를 이해하는 데에도 도움이 됩니다. 그리고 램 뷰.

    좋은 웹페이지 즐겨찾기