
Originally Posted by
ParkinT
To those who have said, "DOS is dead!", you have proven them Dead Wrong!
Thanks to tools like DOSBox and jDOSBox, it's even had an unexpected side effect...
My games are cross-platform.
In addition to jDOSBox opening the door to anything that can run JAVA, there are native ports of DOSBox to almost every platform out there... and not just the versions on the official site. There's even ports for iPhone and Android.
Who needs fancy VM's for cross platform development, when you can just write a DOS game and run it in a open source emulator?
Oh, my next game I'm hoping to have done within the next month -- it's a mashup of several of the "invaders" clones; Phoenix, Gorf, Defense Command, Demon Attack -- taking the best bits from each and putting my own spin on them.
Preview pic of my WIP sprites for the next game

It's actually quite challenging at this oddball 160x100 resolution to make sprites -- I'm basically working in a 8x6 area where only 7x6 of it is actually "useable" due to how I have to map the sprites to memory. This new game is going to be pushing 16 sprites around the screen at once WITH 32 single pixel 'stars' scrolling in the background -- which is right on the edge of the physical limit a 4.77mhz XT could handle!
It's actually where slower machines with less capable CPU's like the TI-99/4a or Commodore 64 had a slight advantage; their video generators had hardware sprites meant for making games. The original CGA in a 1982 PC? Not so much... gotta do everything by hand from software... REAL fun in a pixel-packed format.
See the sprite write to backbuffer routine I'm currently working with:
Code:
function buffer_write8(tile:pPixelData; x,y:byte; height:word):word; assembler;
asm
les di,backBuffer
mov ah,y
xor al,al
shr ax,1
mov bx,ax
shr ax,1
shr ax,1
add bx,ax
mov al,x
xor ah,ah
add bx,ax
shr bx,1
push bx { our return value and buffer offset all in one }
add di,bx
mov cx,height { do this before we screw with SI! }
mov dx,76
push ds
lds si,tile
and al,1
jnz @oddTile
add si,48
@oddTile:
@loop:
mov bx,es:[di]
lodsw
and bx,ax
lodsw
or ax,bx
stosw
mov bx,es:[di]
lodsw
and bx,ax
lodsw
or ax,bx
stosw
add di,dx
loop @loop
pop ds
pop ax { the buffer offset is our return value! }
end;
or even blitting that backbuffer tile to the screen (backbuffer prevents flicker).
Code:
procedure buffer_show8(buffer:pointer; screenOffset,height:word); assembler;
asm
mov ax,$B800
mov es,ax
mov di,screenOffset
shl di,1
inc di
mov dx,ds
mov cx,height
mov bx,153
mov ax,76
lds si,buffer
@loop:
movsb
inc di
movsb
inc di
movsb
inc di
movsb
add di,bx
add si,ax
loop @loop
mov ds,dx
end;
Ah, the joys of working in Assembler; even if I am cheating and using Turbo Pascal as glue... a lesson I learned from working with PHP. Optimize what needs to be fast (like a database) then glue it together with a high level language (like PHP or ASP)
Bookmarks