... /* draw_char: draws an ASCII char at x/y loc in framebuffer using 5x13 font: * * params: * d0 - char value * d1 - x value * d2 - y value */ draw_char: movel %d0, -(%sp) movel %d7, -(%sp) movel %d2, -(%sp) movel %d1, -(%sp) movel %a0, -(%sp) movel %a1, -(%sp) movel %d3, -(%sp) movel %d4, -(%sp) movel %d5, -(%sp) movel %d6, -(%sp) movel (ScrnBase), %a0 mulsw #(13 * 64), %d2 movel %d1, %d5 mulsw #5, %d5 divuw #8, %d5 movew %d5, %d6 addal %d6, %a0 lsrl #8, %d5 lsrl #8, %d5 cmp #0, %d5 beq even_stevens even_stevens: addal %d2, %a0 sub #32, %d0 mulsw #64, %d0 /* Reset vars for image drawing: */ lea font_data(%pc), %a1 /* font data */ addal %d0, %a1 /* offset for font_data */ movel %d0, %d3 movew #13, %d1 fill_loop: movel (%a1)+, %d0 moveb (%a0), %d7 moveb #0x80, %d2 lsrb %d5, %d0 subb #1, %d5 asrb %d5, %d2 add #1, %d5 andb %d2, %d7 orb %d7, %d0 moveb %d0, (%a0)+ addal #63, %a0 /* Move to next line */ check_dec: subi #1, %d1 bne fill_loop check_overflow: cmp #3, %d5 blt draw_done movew #8, %d4 sub %d5, %d4 sub #((13 * 64) - 1), %a0 lea font_data(%pc), %a1 /* font data */ addal %d3, %a1 /* offset for font_data */ movew #13, %d1 fill_loop2: movel (%a1)+, %d0 moveb (%a0), %d7 moveb #1, %d2 aslb %d4, %d2 lslb %d4, %d0 andb %d2, %d7 orb %d7, %d0 moveb %d0, (%a0)+ addal #63, %a0 /* Move to next line */ check_dec2: subi #1, %d1 bne fill_loop2 draw_done: movel (%sp)+, %d6 movel (%sp)+, %d5 movel (%sp)+, %d4 movel (%sp)+, %d3 movel (%sp)+, %a1 movel (%sp)+, %a0 movel (%sp)+, %d1 movel (%sp)+, %d2 movel (%sp)+, %d7 movel (%sp)+, %d0 rts ... .