SemiOT: Mourning for Classic Computing

From: Sean 'Captain Napalm' Conner <spc_at_conman.org>
Date: Wed Aug 15 18:25:36 2001

It was thus said that the Great Iggy Drougge once stated:
>
> Jeffrey S. Sharp skrev:
>
> >I've always thought that one of the more simple assembly languages would
> >be a great 'first language' for someone wanting to learn how to program.
> >Who's with me?
>
> Most assemblers haven't got a PRINT statement, so, no, I don't think so.

  Depends upon the environment. Under AmigaOS you have RawDoFmt(), which is
part of Exec and available to Assembly language programmers (and it works
similar to C's printf()). Under MS-DOS you have INT 21h, funtion 9, which
prints a text string (ended by a `$'). But all you really need is a way to
print out characters, leaving printing of numeric values as a programming
exercise. In fact, writing a printf()-like routine (no formatting, just
stuff like `%d' and `%s') is fairly simple (6809 code):

        **********************************************
        * PRINTF - a printf()-esque routine.
        * Entry: X - ASCIIZ string
        * U - user data stack
        * Exit: X - end of string
        * U - adjusted as data is used
        * A - 0
        ***********************************************

        PRFT50 LDA ,X+ ; get next character after %
                CMPA #'% ; %?
                BEQ PRTF20 ; if so, print it
                CMPA #'d ; print a decimal number?
                BNE PRTF51
                PULU D ; get value
                BSR DECOUT ; print it
                BRA PRINTF ; continue
        PRTF51 CMPA #'x ; print hex number?
                BNE PRTF52
                PULU D ; get value
                BSR HEXOUT ; print hex value
                BRA PRINTF
        PRTF52 CMPA #'s ; print string?
                BNE PRTF20
                PSHS X ; save current string
                PULU X ; get new string
                BSR PRINTF ; print it (oooh! recursion!)
                PULS X ; get old string
                BRA PRINTF
        PRTF10 CMPA #'% ; print data?
                BEQ PRFT50 ; if so, handle
        PRTF20 JSR CHROUT ; print character
        PRINTF LDA ,X+ ; get next character
                BNE PRTF10 ; if not NUL, continue
                RTS
          
  Now all that's left is writing CHROUT (or assume the system has such a
routine), DECOUT and HEXOUT (HEXOUT is trivial, DECOUT may make some work).
It's all a part of learning.

  -spc (Who wishes that Assembly was tought as a first language ... )
Received on Wed Aug 15 2001 - 18:25:36 BST

This archive was generated by hypermail 2.3.0 : Fri Oct 10 2014 - 23:33:33 BST