Now the map generates correctly, still shown

This commit is contained in:
José Carlos Cuevas 2020-06-08 20:10:53 +02:00
parent 5fcff2369b
commit c7325d6fbf
3 changed files with 41 additions and 45 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
*.com
*.exe
*.COM
*.tds

View file

@ -1,7 +1,8 @@
FASM = fasm
FLAGS = -s mine.tds
mine.exe: mine.asm
$(FASM) $? $@
$(FASM) $(FLAGS) $? $@
clean:
-rm *.exe

View file

@ -21,16 +21,16 @@ segment MainSeg
use16
start:
mov al,13h ;AX=0000 at program start
int 10h ;init mode 13h
push word 0A000h ;Requires 80186 or higher to PUSH IMMED
pop es ;ES now points to mode 13h screen segment
mov ax, DataSeg
mov ds, ax ;DS now points to our data segment
call createminefield ;Initialize the map with mines
call calculateminenumbers
call drawfield ;Draw the map
jmp mainloop ;Main event and game loop
mov al,13h ;AX=0000 at program start
int 10h ;init mode 13h
push word 0A000h ;Requires 80186 or higher to PUSH IMMED
pop es ;ES now points to mode 13h screen segment
mov ax, DataSeg
mov ds, ax ;DS now points to our data segment
call createminefield ;Initialize the map with mines
call calculateminenumbers ;Populate the numbers
call drawfield ;Draw the map
jmp mainloop ;Main event and game loop
; Draw the field
@ -57,36 +57,27 @@ drawfieldloop:
getbmp:
push cx ; Store the values before scr$%&ing them
push ax
mov bx, map ; Store the base of the map in BX
push ax ; Reserve AX
mov ax, COLUMNS ; How many columns in AX
mul cx ; So we now multiply CX (Y coord) by COLUMNS
mov cx, ax ; Store the line offset in CX
pop ax ; Recover AX (X coord)
add ax, cx ; Add the line offset and the X offset
mov cx, 2
mul cx ; Multiply by 2 the offset
add bx, cx ; Add the X coord to BX, now we can read
call peektable
pop ax ; Recover the values of AX and BX
pop cx
cmp word [ds:bx], 00009h ; There's a mine
cmp dx, 00009h ; There's a mine
je mine
cmp word [ds:bx], 00001h
je putone
cmp word [ds:bx], 00002h
je puttwo
cmp word [ds:bx], 00003h
je putthree
cmp word [ds:bx], 00004h
je putfour
cmp word [ds:bx], 00005h
je putfive
cmp word [ds:bx], 00006h
je putsix
cmp word [ds:bx], 00007h
je putseven
cmp word [ds:bx], 00008h
cmp dx, 00008h
je puteight
cmp dx, 00007h
je putseven
cmp dx, 00006h
je putsix
cmp dx, 00005h
je putfive
cmp dx, 00004h
je putfour
cmp dx, 00003h
je putthree
cmp dx, 00002h
je puttwo
cmp dx, 00001h
je putone
mov bx, covercell ; Point to the coveredcell bitmap
ret
mine:
@ -180,8 +171,8 @@ cmfloop:
call random ;This leaves a random num in AX
pop bx ;Recover our counters
pop dx
cmp al, 0FEh ;Compare if it's greater than 240
jg putmine ;Put a mine here
cmp al, 0FFh ;Compare if it's greater than 240
je putmine ;Put a mine here
continuecreateminefield:
add bx, 02h
inc dx
@ -227,13 +218,15 @@ peekend:
calcnumber:
push ax
push cx
call peekend
call peektable
pop cx
pop ax
cmp dx, 00009h
jne calcend
inc byte [tempnumber]
mov al, byte [tempnumber]
inc al
mov byte [tempnumber], al
calcend:
pop ax
ret
checksurroundings:
@ -280,7 +273,7 @@ checksurroundings:
mul dx
add bx, ax
pop ax
mov dx, 0000h
mov dx, 00000h
mov dl, byte [tempnumber]
mov word [ds:bx], dx
ret
@ -296,13 +289,14 @@ cmnloop:
call peektable
pop cx
pop ax
cmp dx, 000009h
cmp dx, 00009h
je cmncontinue
call checksurroundings
cmncontinue:
inc ax
cmp ax, COLUMNS
jl cmnloop
mov ax, 0
inc cx
cmp cx, LINES
jl cmnloop
@ -401,7 +395,7 @@ lalt:
segment DataSeg
use16
lastkeypressed: db 0
lastkeypressed: dw 0
seed: dw 0
minecount: db 0
tempnumber: db 0