We have implemented a newsletter signup form into a static non-drupal page by using profiles. The profile generator actually works quite well (using CiviCRM 4.4) but the resulting form is kind of overloaded. But you can break down the markup to a simple form:
<form method="post" action="https://example.com/civicrm/profile/create?gid=12&reset=1">
<div>
<input type="hidden" value="" name="postURL"> <input type="hidden" value="https://example.com/civicrm/profile?reset=1&gid=16" name="cancelURL"> <input type="hidden" value="Edit:cancel" name="_qf_default">
</div>
<ol>
<li>
<label for="email-Primary">E-Mail: *</label> <input type="text" class="email required" id="email-Primary" name="email-Primary" size="20" maxlength="64">
</li>
<li>
<label>Newsletter: *</label>
<div class="input-group">
<input type="hidden" value="" name="group[8]"> <input type="checkbox" value="1" name="group[8]" id="group_8"> Cooking recieps<br>
<input type="hidden" value="" name="group[7]"> <input type="checkbox" value="1" name="group[7]" id="group_7"> Cats<br>
<input type="hidden" value="" name="group[9]"> <input type="checkbox" value="1" name="group[9]" id="group_9"> Dogs<br>
</div>
</li>
</ol>
<div class="actions">
<p>
<input type="submit" value="Sign up" name="_qf_Edit_next" class="button">
</p>
<p>
<small>* required</small>
</p>
</div>
</form>
The group inputs are part of a checkbox list and the index inside the name array represents the CiviCRM group id (e.g name="group[8]"). The form action url and the hidden cancelURL input are containing the profile id "gid", which you have created in CiviCRM before.
The profile itself has to be a "Standalone Form or Directory" and be marked as "active". Of course it is containing active fields for contact groups and primary e-mail. The groups have to be of type "mailing list" and visible for public pages.
<div>
or similar although I couldn't find it.