Mail has been fixed; you should now be able to confirm your e-mail address, watch pages, and the like.
Please report any issues on Discord.

Notes:Dr. Mario (Game Boy)

From The Cutting Room Floor
Jump to navigation Jump to search

This page contains notes for the game Dr. Mario (Game Boy).


Cut code

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.