Исследование Iron Horse cracktro


 Давно у меня валялся файл игры с кряктро. Я решил посмотреть, как это работает, 1988 год это вам не в пузырьки пердеть. Например, так задаются цвета:


loc_961:
LDY #0
STY $43
loc_965:
LDY $43
LDA unk_9AA,Y
TAX
LDA unk_9AB,Y
STA $44
LDA unk_9AC,Y
LDY $44
JSR sub_994 ; fill line
INC $43
INC $43
INC $43
LDA $43
CMP #$18
BNE loc_965
LDA #1 ; character counter
STA $3F5
LDA #L0A54&255;$54 ; 'T'      ; text pointer
STA $21
LDA #L0A54/256;$A
STA $22
JMP loc_9CA
sub_994:

STX $44
STY $45
LDY #0
loc_99A:
STA ($44),Y
INY
CPY #$28 ; '('
BNE loc_99A
LDA #0
STA $D020 ; Border color (only bits #0-#3)
STA $D021 ; Background color (only bits #0-#3)
RTS
; End of function sub_994
; ---------------------------------------------------------------------------
; color RAM d800-dbff
unk_9AA: !byte $58
unk_9AB: !byte $DA
unk_9AC: !byte 1
!byte $80
!byte $DA
!byte 1
!byte $A8 
!byte $DA
!byte  $F
!byte $D0 
!byte $DA
!byte  $F
!byte $F8 
!byte $DA
!byte  $C
!byte $20
!byte $DB
!byte  $C
!byte $48 
!byte $DB
!byte  $B
!byte $70
!byte $DB
!byte  $B

Здесь задается таблица Адрес Color RAM, значение. Цвета тут. Ясно, что можно переписать короче.Теперь процедура сдвига для символов:
sub_8ED:
CLC
ROL $38
BCC loc_8F7
LDA #$FA ; 'ъ'
STA $67F
loc_8F7:
CLC
ROL $39
BCC loc_901
LDA #$FA ; 'ъ'
STA $6A7
loc_901:
CLC
ROL $3A
BCC loc_90B
LDA #$FA ; 'ъ'
STA $6CF
loc_90B:
CLC
ROL $3B
BCC loc_915
LDA #$FA ; 'ъ'
STA $6F7

loc_915:
CLC
ROL $3C
BCC loc_91F
LDA #$FA ; 'ъ'
STA $71F
loc_91F:
CLC
ROL $3D
BCC loc_929
LDA #$FA ; 'ъ'
STA $747
loc_929:
CLC
ROL $3E
BCC loc_933
LDA #$FA ; 'ъ'
STA $76F
loc_933:
CLC
ROL $3F
BCC locret_93D
LDA #$FA ; 'ъ'
STA $797
locret_93D:
RTS

Такое комментировать, только портить. 
В общем, больше времени уходит на понимание такого замысловатого кода. Хоть в чем-то разобрался.Исходник+.PRG, не выложил игру по понятным причинам.

Комментарии