소프트웨어 이식성 및 최적화

2682 단어

소개



오늘은 6502 Emulator 작업에 대한 첫 번째 경험에 대해 이야기하겠습니다.

6502은 16비트 주소 버스가 있는 8비트 프로세서입니다. 따라서 64킬로바이트(216바이트)에 액세스할 수 있습니다. 각 16비트 주소는 두 개의 8비트 바이트로 구성되므로 메모리는 각각 256바이트의 256페이지로 볼 수 있습니다.

두 가지 작업이 있습니다.

Calculate how long it takes for the code to execute, assuming a 1 MHz clock speed?

Calculate the execution time of the fastest version of this program that you can create?



1MHz 클럭 속도를 가정하여 코드를 실행하는 데 걸리는 시간을 계산해 보십시오.



우선 아래에서 작업하려는 코드를 볼 수 있고 실행하는 데 걸리는 시간을 계산할 수 있습니다.

    lda #$00    ; set a pointer at $40 to point to $0200
    sta $40
    lda #$02
    sta $41

    lda #$07    ; colour number

    ldy #$00    ; set index to 0

loop:   sta ($40),y ; set pixel at the address (pointer)+Y

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

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


이 코드를 계산하려면 각 명령 실행 시간이 포함된 문서special가 필요합니다.

더 많은 정보를 제공하는 것 같아서 Excel 사진을 통해 계산을 공유하기로 결정했습니다.

이 프로그램의 가장 빠른 버전의 실행 시간을 계산 하시겠습니까?



나는 코드를 최적화하려고 노력했고 우리 교수님이 수업에서 같은 작업을 얼마나 다른지 보기로 결정했습니다. 아래 코드.

    LDA #$00
    STA $10
    LDY #$02
    STA $11

    LDA #$07
    LDY #$00    

LOOP:   STA ($10),Y
    INY 
    BNE LOOP

    INC $11
    LDX #$06
    CPX $11
    BNE LOOP


첫 번째 코드를 더 빠르게 만들기 위해 무엇을 변경할 수 있는지 찾지 못했지만 약간의 계산을 수행한 후 이 코드를 더 적은 주기로 실행할 수 있다고 생각합니다.

결론



이 실험을 진행하는 동안 Assembly Compiler의 사소한 버그를 해결했습니다. 풀 요청에 대한 Link을 참조하십시오.

⚠️ Open Source For Developers Blog Post:



연결



🖇 git https://github.com/aserputov
🖇 twitter



p.s 이 글은 SPO 수업 Lab 2 과제로 작성되었습니다.

좋은 웹페이지 즐겨찾기