Project Project ComputersystemenComputersystemen
ByByNicolas TeirlinckxNicolas Teirlinckx
Ruben TytgatRuben TytgatNick Van den SteenNick Van den Steen
Space InvadersSpace InvadersIn ASM 8086In ASM 8086
InhoudInhoud Inleiding: Space InvadersInleiding: Space Invaders FeaturesFeatures Commando’sCommando’s Overzicht functies en macros:Overzicht functies en macros: -Graphics-Graphics
-Keyboard-Keyboard-Beweging-Beweging-Collision detection-Collision detection-Muziek-Muziek-Main code-Main code
DemoDemo
Space InvaderSpace Invader
Arcadespel, 1978, TaitoArcadespel, 1978, Taito Tomohiro NishikadoTomohiro Nishikado InvloedrijkInvloedrijk Guiness World Record RankGuiness World Record Rank IcoonIcoon
GameplayGameplay
Sciencefiction-actieSciencefiction-actie Twee dimensionele graphicsTwee dimensionele graphics Buitenaardse wezens vs. Buitenaardse wezens vs.
RuimteschipRuimteschip SchildenSchilden GeluidGeluid Moderne versies...Moderne versies...
Tomohiro NishikadoTomohiro Nishikado
Japanese video game ontwerper
Tokyo Denki University 1968 1969 Taito 1972 « Soccer » 1978 Space Invader Space Invader and morality 1996 Dreams
FeaturesFeatures
Keyboardcommando’sKeyboardcommando’s MuziekMuziek KleurenKleuren AchtergrondAchtergrond BewegingBeweging Random gedragRandom gedrag Een 2-D fixed shootergameEen 2-D fixed shootergame
Keyboardcommando’sKeyboardcommando’s
Besturing uitsluitend klavier.Oorspronkelijk Japan <->
America.
MuziekMuziek
Soundblaster aansturenSoundblaster aansturenVia DMA Via DMA Kloppend hartKloppend hartVrije keuze – SOME.wav (44100 Hz -Vrije keuze – SOME.wav (44100 Hz -
16 bits, stereo)16 bits, stereo)Player One – Space InvaderPlayer One – Space Invader
KleurenKleuren
Mode 13hMode 13h255 kleurenpalet255 kleurenpaletTransparantTransparantVb. backgroundVb. background
AchtergrondAchtergrond
100 kleuren uit paletRuimte2 achtergronden
BewegingBeweging
InvadersRuimteschip via keyboard
invoerKogels
RandomgedragRandomgedrag
Pick randomPick randomEen kogelEen kogel
2-D Fixed shootergame2-D Fixed shootergame
Fixed Fixed X-asX-as
Functies/macro’sFuncties/macro’s
Graphics (graphics.asm)Graphics (graphics.asm)
– setVideoModesetVideoMode
DOS interrupts aanroepen
0Fh get video mode
00h set video mode
Graphics (2)Graphics (2)
(graphics.asm)(graphics.asm)– restoreVideoModerestoreVideoMode
– displayVgaModedisplayVgaMode
Graphics (3)Graphics (3)
(graphics.asm)(graphics.asm)– displaySetOldModedisplaySetOldMode
– displayClearScreendisplayClearScreen
Graphics (4)Graphics (4)
(graphics.asm)(graphics.asm)– displayUpdateVramdisplayUpdateVram
(afzonderlijke file)(afzonderlijke file)
– displaySetPalettedisplaySetPalette
aantal registers die gezetmoeten worden
Tabel van 3*cl bytes
Graphics (5)Graphics (5)
(graphics.asm)(graphics.asm)– displaySetPaletteMdisplaySetPaletteM
– xyConvertToMemOffsetxyConvertToMemOffset
Segment en offset goed zetten
cScrWidth * y + x
Graphics (6)Graphics (6)
(graphics.asm)(graphics.asm)– xyConvertToMemOffsetSafexyConvertToMemOffsetSafe
– graphicsDrawSpritegraphicsDrawSprite
(afzonderlijke file)(afzonderlijke file)
Graphics (7)Graphics (7) (graphics.asm)(graphics.asm)
– graphicsDrawSpriteMgraphicsDrawSpriteM
– graphicsDrawSpriteFarMgraphicsDrawSpriteFarM
Graphics (8)Graphics (8)
(graphhlp.asm)(graphhlp.asm)– displayHelpersFillGrayScalePalettedisplayHelpersFillGrayScalePalette
(afzonderlijke file)(afzonderlijke file)– displayHelpersLoadPaletteFiledisplayHelpersLoadPaletteFile
(afzonderlijke file)(afzonderlijke file)
Graphics (9)Graphics (9)
(graphhlp.asm)(graphhlp.asm)– displayHelpersLoadBGdisplayHelpersLoadBG
Graphics (10)Graphics (10)
(graphhlp.asm)(graphhlp.asm)– displayHelpersLoadMenudisplayHelpersLoadMenu
Graphics (11)Graphics (11)
(dispdraw.asm)(dispdraw.asm)– monsterUpdateDisplaymonsterUpdateDisplay
(afzonderlijke file)(afzonderlijke file)
– bulletUpdateDisplaybulletUpdateDisplay
(afzonderlijke file)(afzonderlijke file)
Graphics (12)Graphics (12)
(dispdraw.asm)(dispdraw.asm)– drawLivesdrawLives
10 pixels van linkerzijde
ch wordt gebruikt door loop (not cl)
KeyboardhandlerKeyboardhandler
DataKeycodes.asm
Data keyboardhandlerData keyboardhandler
Used to define byte
Used to define dword
keyb.asmkeyb.asmSendcmd: procedure met distance =
near.Push gebruikte
registers op stack
Initialiseren van een counter
Send data naar poort 60
Stuurt gekregen flag terug naar
KbdFlags4And wait...
keyb.asm (2)keyb.asm (2)
SendCmd (2)
Jump if not equalDecrease counter
Zet error bit na 3 tries
keyb.asm (3)keyb.asm (3)SetCmd -> vergelijkbaar SendCmdSetCmd -> vergelijkbaar SendCmd64h -> microcontroller poort64h -> microcontroller poort
keyb.asm (4)keyb.asm (4)
Keyboard uitschakelen
keybInterruptHandler, plaats ontvangen toets in keyboardbufferkeybInterruptHandler, plaats ontvangen toets in keyboardbuffer
Get keyboard dataEcho response?
Zet acknowledge
bit.
Resend command?
keyb.asm (5)keyb.asm (5)keybInterruptHandler (2)keybInterruptHandler (2)
Schrijf scancode in cl in Buffer,
checkt buffer niet vol.
Insert alles en increment buffer
Return interrupt
keyb.asm (6)keyb.asm (6)keybInterruptInstall/UnistallkeybInterruptInstall/Unistall
Dos functie 35h, Set ES:BX op de waarde van de interruptvector.
Dos functie 25h,Set de interrupt
vector op de waarde in DS:DX.
Source 9 = keyboard
keyb.asm (7)keyb.asm (7)KeybBufferProcess (1)KeybBufferProcess (1)
Berekent bufferlengte
Checkt op arrow key
Laad eerste key in al
keyb.asm (8)keyb.asm (8)KeybBufferProcess (2)KeybBufferProcess (2)
Arrowflag op 0 zetten
Compare + Jump naar de juiste
label
Arrow flag is up?
keyb.asm (9)keyb.asm (9)KeybBufferProcess (end)KeybBufferProcess (end)
Zie ship movement...
Ondergrens opslaan.
BewegingBeweging
Shipmov.asm
Macro’s om flags op 1/0 te zetten
Ship beweging vervolgShip beweging vervolg
Grens kan niet verder
Go right
Go left
Beweging (3)Beweging (3)
(monstermov.asm) (2)(monstermov.asm) (2)– updateMonsterPositionupdateMonsterPosition
(afzonderlijke file)(afzonderlijke file)
Beweging (4)Beweging (4)
Fire.asmFire.asmfindEmptyBulletfindEmptyBulletfireBulletfireBulletupdateBulletPositionupdateBulletPosition
Themfire.asmThemfire.asmMoveToNextAliveMoveToNextAlivetheyTryToFiretheyTryToFireupdateTheirBulletPositionupdateTheirBulletPosition
Collision checkCollision check
Collisn.asm
collCheckHit
Data Data
DATA.asmBevat alle data. INCLUDEGraphic data als laatste… (FARDATA)
Data (2)Data (2)
gamedata.asm-Ship posities, ennemy posities.-Aantal ennemies-Lives (3)-Palettefile-Achtergrond files
Data (3)Data (3)
sprites.asm
Main codeMain code
spacei.asm
Main code (2)Main code (2)
spacei.asmspacei.asm
Main code (3)Main code (3)
spacei.asmspacei.asm
DEMODEMO