Нужна помощь в поиске фрагмента кода в Hack ASM ROM - PullRequest
1 голос
/ 30 июня 2010

Это было / было для назначения четырех из From NAND для Tetris и OCW из Еврейского университета (я не посещаю, я просто делаю курс для ударов) Что он делает, когда какая-либо клавиша удерживается, он затемняет каждый пиксель. Когда ключ отпущен, «экран» очищается.

Вот само ПЗУ:

// Fill.asm

// Fills the 'screen' with black,
// one pixel at a time, when any 
// key is pressed and held.

// When the key is released, the 
// screen should clear.


// i = 0

@i
M=0

(LOOP)
 // color = 0xFFFF (black) = !0
 D=0
 D=!D
 @color
 M=D

 @KBD        // Location of keypress code
     // is RAM[24576] = RAM(0x600)
 D=M         // D != 0 if a key is pressed

 @SKIP_WHITE
 D;JNE


 // if (key == 0 )
 // {
 //   color = 0 (white)

 @color
 M=0

 // }


(SKIP_WHITE)
 // Ensure that the offset is 
 // within the screen's 8K
 // memory area
        @i
 M=M+1
 @8191
 D=A
 @i
 M=M&D


 @i
 D=M
 @SCREEN
 D=D+A     
 @target   
 M=D
 @color
 D=M
 @target   
 A=M      // GOTO Pixel specified by target
 M=D


 @LOOP // infinite loop, baby
 0;JMP

Что мне действительно любопытно, так это второй-последний блок кода, о смещении области памяти экрана. Я написал все остальное, но программа не работала, пока кто-то не предоставил мне этот блок кода. Может кто-нибудь объяснить мне, что он делает?

1 Ответ

1 голос
/ 01 июля 2010

Я понял это!

8191 - максимальное количество бит в области памяти виртуального экрана 8K. Используя итератор с максимальным значением, мы гарантируем, что не будем пытаться записывать в пиксели за пределами экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...