I have an nvidia card, and that doesn't like vesa, old dos games won't work. I use programs like vbeplus to get round this though, and now i can play most old dos games OK.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menuformat PE console 4.0
include 'win32ax.inc'
;.code
start:
invoke GetCommandLine
mov [cmdline_str], eax
cinvoke strlen, [cmdline_str]
mov [cmdline_len], eax
mov [cmdline_pos], 0
call ReadChar
call SkipWhite
reeloo:
cmp [Look], -1
je reeloo_end
cmp [Look], '"'
jne nex
call ReadQuotedString
jmp endblo
nex:
call ReadUnQuotedString
endblo:
call SkipWhite
jmp reeloo
reeloo_end:
cinvoke printf, pri, [cmdline_pos]
cinvoke system, pau
exit:
invoke ExitProcess,0
proc ReadChar
mov eax, [cmdline_len]
cmp [cmdline_pos], eax
jl rea
mov [Look], -1
jmp rea_end
rea:
mov eax, [cmdline_str]
add eax, [cmdline_pos]
movzx eax, byte ptr eax
mov [Look], eax
inc [cmdline_pos]
rea_end:
ret
endp
proc ReadQuotedString
call ReadChar
rqsloop:
cmp [Look], -1
je rqsloop_end
cmp [Look], '"'
je rqsloop_end
cinvoke printf, "%c", [Look]
call ReadChar
jmp rqsloop
rqsloop_end:
call ReadChar
cinvoke printf, "%c", 10
ret
endp
proc ReadUnQuotedString
ruqsloop:
cmp [Look], -1
je ruqsloop_end
cmp [Look], ' '
je ruqsloop_end
cinvoke printf, "%c", [Look]
call ReadChar
jmp ruqsloop
ruqsloop_end:
call ReadChar
cinvoke printf, "%c", 10
ret
endp
proc SkipWhite
skloop:
cmp [Look], -1
je skloop_end
cmp [Look], ' '
jne skloop_end
call ReadChar
jmp skloop
skloop_end:
ret
endp
;.data
msg db "Hello World!", 0
pau db "PAUSE", 0
pri db "%i", 13, 10, 0
cmdline_str dd 0
cmdline_len dd 0
cmdline_pos dd 0
Look dd 0
data import
library kernel32, 'KERNEL32.DLL', \
msvcrt, 'MSVCRT.DLL'
import kernel32, \
ExitProcess, 'ExitProcess', \
GetCommandLine, 'GetCommandLineA'
import msvcrt, \
puts, 'puts', \
system, 'system', \
sleep, '_sleep', \
printf, 'printf', \
strlen, 'strlen'
end data
use32
format PE console 4.0
entry Start
include 'win32a.inc'
SEEK_SET equ 0
SEEK_CUR equ 1
SEEK_END equ 2
;-------------------------------------------------------------------------------
Align 4
Start:
call Init
cmp [Buffer], 0
je Failed
cinvoke puts, InFile
cinvoke printf, szformat, [InFileSize], szbytes
mov ecx, 0
mov eax, [Buffer]
printloop:
cmp ecx, [InFileSize]
je printloop_end
movzx edx, byte ptr eax+ecx
push eax ecx
;cinvoke printf, szformat2, edx
pop ecx eax
inc ecx
jmp printloop
printloop_end:
call Parse
call DeInit
Failed:
cinvoke system, szpause
invoke ExitProcess, 0
;-------------------------------------------------------------------------------
Align 4
ReadChar:
mov eax, [Buffer_Pos]
cmp eax, [Buffer_Len]
mov [Look], -1
jge ReadChar_End
mov ecx, [Buffer_Pos]
mov edx, [Buffer]
movzx eax, byte ptr edx+ecx
inc [Buffer_Pos]
mov [Look], eax
ReadChar_End:
ret
;-------------------------------------------------------------------------------
Align 4
IsComma:
cmp eax, ','
je IsComma_True
mov eax, 0
jmp IsComma_End
IsComma_True:
mov eax, -1
IsComma_End:
ret
;-------------------------------------------------------------------------------
Align 4
IsWhite:
cmp eax, ' '
je IsWhite_True
mov eax, 0
jmp IsWhite_End
IsWhite_True:
mov eax, -1
IsWhite_End:
ret
;-------------------------------------------------------------------------------
Align 4
IsNewLine:
cmp eax, 10
je IsNewLine_True
cmp eax, 13
je IsNewLine_True
mov eax, 0
jmp IsNewLine_End
IsNewLine_True:
mov eax, -1
IsNewLine_End:
ret
;-------------------------------------------------------------------------------
Align 4
SkipComma:
SkipComma_Loop:
cmp [Look], -1
je SkipComma_Loop_End
mov eax, [Look]
call IsComma
cmp eax, -1
jne SkipComma_Loop_End
call ReadChar
jmp SkipComma_Loop
SkipComma_Loop_End:
ret
;-------------------------------------------------------------------------------
Align 4
SkipWhite:
SkipWhite_Loop:
cmp [Look], -1
je SkipWhite_Loop_End
mov eax, [Look]
call IsWhite
cmp eax, -1
jne SkipWhite_Loop_End
call ReadChar
jmp SkipWhite_Loop
SkipWhite_Loop_End:
ret
;-------------------------------------------------------------------------------
Align 4
SkipNewLine:
SkipNewLine_Loop:
cmp [Look], -1
je SkipNewLine_Loop_End
mov eax, [Look]
call IsNewLine
cmp eax, -1
jne SkipNewLine_Loop_End
call ReadChar
jmp SkipNewLine_Loop
SkipNewLine_Loop_End:
ret
;-------------------------------------------------------------------------------
Align 4
Parse:
call ReadChar
call SkipWhite
parseloop:
cmp [Look], -1
je parseloop_end
call Symbol
call SkipComma
call SkipWhite
call SkipComma
call SkipNewLine
call SkipComma
call SkipWhite
call SkipComma
jmp parseloop
parseloop_end:
ret
;-------------------------------------------------------------------------------
Align 4
Symbol:
symbolloop:
cmp [Look], -1
je symbolloop_end
mov eax, [Look]
call IsWhite
cmp eax, -1
je symbolloop_end
mov eax, [Look]
call IsNewLine
cmp eax, -1
je symbolloop_end
mov eax, [Look]
call IsComma
cmp eax, -1
je symbolloop_end
cinvoke printf, szformat2, [Look]
call ReadChar
jmp symbolloop
symbolloop_end:
cinvoke printf, szformat2, 10
ret
;-------------------------------------------------------------------------------
Align 4
Init:
cinvoke fopen, InFile, file_rb
cmp eax, 0
mov [hInFile], eax
je File_Open_Error
cinvoke fseek, [hInFile], 0, SEEK_END
cinvoke ftell, [hInFile]
mov [InFileSize], eax
cinvoke fseek, [hInFile], 0, SEEK_SET
cinvoke malloc, [InFileSize]
mov [Buffer], eax
cmp eax, 0
je Allocate_Error
cinvoke fread, [Buffer], 1, [InFileSize], [hInFile]
cinvoke fclose, [hInFile]
mov eax, [InFileSize]
mov [Buffer_Len], eax
jmp Init_End
Allocate_Error:
cinvoke puts, errmsg2
cinvoke fclose, [hInFile]
jmp Init_End
File_Open_Error:
cinvoke puts, errmsg1
jmp Init_End
Init_End:
ret
;-------------------------------------------------------------------------------
Align 4
DeInit:
cinvoke free, [Buffer]
ret
;-------------------------------------------------------------------------------
Align 4
Look dd -1
Buffer_Len dd 0
Buffer_Pos dd 0
Buffer dd 0
hInFile dd 0
InFileSize dd 0
file_rb db "rb", 0
szformat db "%i%s", 10, 13, 0
szformat2 db "%c", 0
szbytes db " bytes.", 0
InFile db "test.asm", 0
errmsg1 db "Error opening file.", 0
errmsg2 db "Error allocating memory.", 0
szpause db "PAUSE", 0
data import
library kernel32, 'KERNEL32.DLL', \
msvcrt, 'MSVCRT.DLL'
import kernel32, \
ExitProcess, 'ExitProcess'
import msvcrt, \
fopen, 'fopen', \
fread, 'fread', \
fwrite, 'fwrite', \
fseek, 'fseek', \
ftell, 'ftell', \
fclose, 'fclose', \
puts, 'puts', \
system, 'system', \
malloc, 'malloc', \
free, 'free', \
printf, 'printf'
end dataPage created in 0.144 seconds with 14 queries.