Well I have sum assembly homework to do... its supposed to be the snake game. I managed to make a program using parts of others ones, since Im lazy.. anyhow I got the program almost ready but I get only 1 error when assembling:
Fatal C:\TASM\emu8086\M3\M3.asm(243) Unexpected end of file encountered ...
The line 243 is last one of the program but I cant figure out whats wrong, can sum1 please check out the code and see if you can find out? PLease... txs ; The comments are in portuguese but I dont think that'll bother..
.model small
.stack 100h
;org 100h
; pular seção de dados:
;jmp inicio
; ------ data section ------
.data
s_tamanho equ 7
; coordenadas da cobra
; (da cauda à cabeça)
; low byte à esquerda, high byte
; no top - [top, esquerda]
cobra dw s_tamanho dup(0)
cauda dw ?
; direcao
; (codigos de tecla da bios):
esquerda equ 4bh
direita equ 4dh
up equ 48h
baixo equ 50h
; direçao atual da cobra:
cur_dir db direita
espera_tempo dw 0
; mensagem inicial
msg db "==== como jogar ====", 0dh,0ah
db "controle a cobra utilizando as setas direcionais", 0dh,0ah
db "qualquer outra tecla fará a cobra parar.", 0dh,0ah, 0ah
db "aperte ESC para sair.", 0dh,0ah
db "====================", 0dh,0ah, 0ah
db "aperte qualquer tecla para iniciar...$"
; ------ seção de codigo ------
.code
inicio:
; imprime msg inicial:
mov dx, offset msg
mov ah, 9
int 21h
; espera teclado:
mov ah, 00h
int 16h
; esconde o cursor:
mov ah, 1
mov ch, 2bh
mov cl, 0bh
int 10h
jogo_loop:
; escolhe primeira tela do video
mov al, 0 ; numero da tela.
mov ah, 05h
int 10h
; mostra nova cabeça:
mov dx, cobra[0]
; posiciona cursor em dl,dh
mov ah, 02h
int 10h
; imprime '*' no local:
mov al, '*'
mov ah, 09h
mov bl, 0eh ; attribute.
mov cx, 1 ; single char.
int 10h
; mantem a cauda:
mov ax, cobra[s_tamanho * 2 - 2]
mov cauda, ax
call movimento_cobra
; esconde a cauda velha:
mov dx, cauda
; posiciona o curso em dl,dh
mov ah, 02h
int 10h
; imprime ' ' no local:
mov al, ' '
mov ah, 09h
mov bl, 0eh ; atribuir.
mov cx, 1 ; único char.
int 10h
aguarda_entrada_teclado:
; buscar comando:
mov ah, 01h
int 16h
jz no_key
mov ah, 00h
int 16h
cmp al, 1bh ; tecla - ESC?
je parar_jogo ;
mov cur_dir, ah
no_key:
; aguardar:
; pegar intervalos do relogio
; (aprox 18 por segundo)
; desde 00:00 ateh cx:dx
mov ah, 00h
int 1ah
cmp dx, espera_tempo
jb aguarda_entrada_teclado
add dx, 4
mov espera_tempo, dx
; loop infinito:
jmp jogo_loop
parar_jogo:
; mostrar cursor:
mov ah, 1
mov ch, 0bh
mov cl, 0bh
int 10h
ret
; ------ seção das funções ------
; este procedimento cria a
; animação movimentando todas as
; partes ateh a cauda,
; a ultima parte da cauda some:
; [ultima parte (cauda)]-> some
; [parte i] -> [parte i+1]
;------------------------------------------------------------------
movimento_cobra proc near
; seta es para o segmento de informação da bios:
mov ax, 40h
mov es, ax
; aponta di para a cauda
mov di, s_tamanho * 2 - 2
; movimenta todo o corpo
; (ultima parte some)
mov cx, s_tamanho-1
movimento_array:
mov ax, cobra[di-2]
mov cobra[di], ax
sub di, 2
loop movimento_array
cmp cur_dir, esquerda
je movimento_esquerda
cmp cur_dir, direita
je movimento_direita
cmp cur_dir, up
je movimento_up
cmp cur_dir, baixo
je movimento_baixo
jmp parar_movimento ; sem direção.
movimento_esquerda:
mov al, b.cobra[0]
dec al
mov b.cobra[0], al
cmp al, -1
jne parar_movimento
mov al, es:[4ah] ; numero da coluna.
dec al
mov b.cobra[0], al ; retornar a direita.
jmp parar_movimento
movimento_direita:
mov al, b.cobra[0]
inc al
mov b.cobra[0], al
cmp al, es:[4ah] ; col number.
jb parar_movimento
mov b.cobra[0], 0 ; return to esquerda.
jmp parar_movimento
movimento_up:
mov al, b.cobra[1]
dec al
mov b.cobra[1], al
cmp al, -1
jne parar_movimento
mov al, es:[84h] ; numero da fileira -1.
mov b.cobra[1], al ; voltar para baixo.
jmp parar_movimento
movimento_baixo:
mov al, b.cobra[1]
inc al
mov b.cobra[1], al
cmp al, es:[84h] ; numero da fileira -1.
jbe parar_movimento
mov b.cobra[1], 0 ; voltar ao topo.
jmp parar_movimento
parar_movimento:
ret
movimento_cobra endp
;------------------------------------------------------------------
mov ah,4ch
int 21h