I have an old 16bit com screen saver I would like to embed as bootloader in MBR, but it needs some conversion. I think most of the code below is fine to run as bootloader except for a couple calls to int 21 for memory allocs at start
             
[bits 16]
[org 100h]
             mov     bh, 10h
             mov     ah, 4Ah
             int     21h             ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
                                    ; ES = segment address of block to change
                                   ; BX = new size in paragraphs
               mov     ah, 48h
             int     21h             ; DOS - 2+ - ALLOCATE MEMORY
                                        ; BX = number of 16-byte paragraphs desired
                 mov     gs, ax
              mov     bh, 20h
             mov     ah, 48h
             int     21h             ; DOS - 2+ - ALLOCATE MEMORY
                                        ; BX = number of 16-byte paragraphs desired
                 mov     fs, ax
              mov     es, ax
              mov     bp, 1DDh
            mov     cl, 0C8h
 loop1:
             xor     di, di
              mov     bx, 0FF60h
 near_top_loop1:
              mov     ax, cx
              sub     ax, 64h
             mov     [bp+3], ax
          mov     [bp+5], bx
          fild    word [bp+5]
                 fild    word [bp+3]
                 fld     st0
                 fmul    st0, st0
            fld     st2
                 fmul    st0, st0
            faddp   st1, st0
            fsqrt
               fidivr  word [bp+1]
                 fistp   word [es:di]
            fpatan
              fimul   word [bp+0]
                 fistp   word [es:di+1]
          inc     di
          inc     di
          inc     bx
          cmp     bx, 9Fh
             jle     near_top_loop1
              mov     ax, es
              add     ax, 28h
             mov     es, ax
              loop    loop1
 loop2:
                mov     al, cl
              xor     al, ch
              mov     bx, cx
              mov     [gs:bx], al
             loop    loop2
               mov     cl, 10h
 loop_3:
                 mov     al, [gs:bx]
             dec     bl
          add     al, [gs:bx]
             inc     bl
          inc     bh
          add     al, [gs:bx]
             sub     bh, 2
               add     al, [gs:bx]
             inc     bh
          shr     ax, 2
               mov     [gs:bx], al
             inc     bx
          jnz     loop_3
              loop    loop_3
              mov     al, 13h
             int     10h             ; - VIDEO -
                 push    0A000h
              pop     es
 loop4:
           mov     al, cl
              mov     dx, 3C8h
            out     dx, al
              inc     dx
          out     dx, al
              out     dx, al
              out     dx, al
              loop    loop4
 no_key:
           inc     bp
          mov     dl, 0DAh
 loc_101A4:
                 in      al, dx          ; Video status bits:
                                    ; 0: retrace.  1=display is in vert or horiz retrace.
                                   ; 1: 1=light pen is triggered; 0=armed
                                  ; 2: 1=light pen switch is open; 0=closed
                                       ; 3: 1=vertical sync pulse is occurring.
                test    al, 8
               jz      loc_101A4
 loc_101A9:
                in      al, dx          ; Video status bits:
                                    ; 0: retrace.  1=display is in vert or horiz retrace.
                                   ; 1: 1=light pen is triggered; 0=armed
                                  ; 2: 1=light pen switch is open; 0=closed
                                       ; 3: 1=vertical sync pulse is occurring.
                test    al, 8
               jnz     loc_101A9
           push    fs
          xor     di, di
              mov     cl, 0C8h
 loop5:
             xor     si, si
 loc_101B6:
           mov     bx, [fs:si]
             add     bx, bp
              mov     al, [gs:bx]
             stosb
               lodsw
               cmp     si, 280h
            jl      loc_101B6
           mov     ax, fs
              add     ax, 28h
             mov     fs, ax
          loop    loop5
               pop     fs
              mov     ah, 11h
             int     16h             ; KEYBOARD - CHECK ENHANCED KEYSTROKE                                                           ; Return: ZF clear if keystroke available
                                       ; AH = scan code \ meaningless if ZF = 1
                                   ; AL = character /
                                  ; ZF set if kbd buffer empty
                jz      short no_key
                mov     ax, 3
               int     10h             ; - VIDEO - SET VIDEO MODE
                                  ; AL = mode
                 retn
db 29h, 0, 0Ah, 0Ah, 
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
Original:
B710B44ACD21B448CD218EE8B720B448CD218EE08EC0BDDD01B1C831FFBB
60FF89C82D6400894603895E05DF4605DF4603D9C0DCC8D9C2DCC8DEC1D9
FADE7E0126DF1DD9F3DE4E0026DF5D0147474381FB9F007ECB8CC0052800
8EC0E2BD88C830E889CB658807E2F5B110658A07FECB650207FEC3FEC765
020780EF02650207FEC7C1E8026588074375E0E2DEB013CD106800A00788
C8BAC803EE42EEEEEEE2F445B2DAECA80874FBECA80875FB0FA031FFB1C8
31F6648B1C01EB658A07AAAD81FE80027CF08CE00528008EE0E2E50FA1B4
11CD1674CAB80300CD10C329000A0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFF