Notes:Dr. Mario (Game Boy)
This page contains notes for the game Dr. Mario (Game Boy).
This cut code has something to do with when the game is playing played. This appears to be early code for rendering some early version of the HUD.
$FFEF hWaitFrames $FFE1 hGameStatus $FFB1 hIsOnPlayerSelect $FF85 hVBlankStatus $C4F1 wIsGameStarted VBLANK_COMPLETE %00000001 GAME_STARTED %00000011 0:01A6 VBlank: push af push bc push de push hl ldh a, hIsOnPlayerSelect ; Also true during 2 player. and a jr z, .renderSprites ld a, wIsGameStarted and a jr z, .renderSprites ldh a, hWaitFrames and a jr nz, .renderGameBoard .renderSprites ldh a, hGameStatus cp a, GAME_STARTED jr z, .renderGameBoard call RenderSprites .renderGameBoard call RenderGameBoard ldh a, isOnPlayerSelect and a jr nz, .renderCutOutContent ld de, $C0A3 ; CHR data to place ld hl, $984C ; CHRRAM - Scoreboard call DrawScoreDigits ; maybe copy routine. .renderCutOutContent ldh a, hIsOnPlayerSelect ; Also true during 2 player. and a jr z, .l4 ld a, wIsGameStarted and a jr z, .l4 ;; Cut out code. Probably some UI component. ;; Maybe some old magazines/screenshots could shine some light here. .l4 ld a, VBLANK_COMPLETE ldh hVBlankStatus, a pop hl pop de pop bc pop af reti 0:257B DrawScoreDigits: ret 0:2E2D RenderGameBoard: ret 0:FFB6 RenderSprites: ret
Virus placement algorithm
The algorithm is:
b = t1[lvl] c = t2[lvl] a = [$FF04] (divisor register, aka "random number generator" but not truly.) swap_nibbles_in(a) b = b and a (and is used as a cheap max() function) c = c and a d = 0x7F - (b + c) position_on_board = 0xC800 + d
This board is filled with 0xFF, 0xE0, 0xE1 and 0xE2.