Converting BASIC to assembler

 

It is always seen as a fairly major thing to port BASIC programs to assembler; while it is a rather deep and irksome thing to do, it must be remembered that the operating system is more than willing to help out.

Here are some examples...

GET

... SWI "OS_ReadC"

 

INKEY

Look at OS_Byte 129 to check for a specific key or to read a key within a given time.

 

INPUT var$

    ; read the input
    ADR     R0, buffer
    MOV     R1, #128       ; max. line length is 128 characters
    MOV     R2, #32        ; min. ascii allowed is space (32)
    MOV     R3, #126       ; max. ascii allowed is 126
    SWI     "OS_ReadLine"

    ; echo the string (optional)
    ADR     R3, buffer
  .echo_loop
    LDRB    R0, [R3], #1   ; BASIC's INPUT does an echo of the
    SWI     "OS_WriteC"    ; data entered, but you may prefer
    CMP     R0, #13        ; not to do this. Up to you.
    BNE     echo_loop
    SWI     "OS_NewLine"

    MOV     PC, R14        ; now return to caller

  .buffer
    EQUS    STRING$(128, CHR$(0))

 

SPC

Simply loop while outputting spaces 'n' times.
A quick way to output a space is SWI 256+32.

 

TAB(x,y)

Use VDU 31, x, y, like:
    MOV     R1, #100       ; X
    MOV     R2, #200       ; Y

    ; do it
    SWI     256 + 31       ; VDU 31
    MOV     R0, R1
    SWI     "OS_WriteC"   ; output X
    MOV     R0, R2
    SWI     "OS_WriteC"   ; output Y

 

That simply scratches the surface. You need to stop thinking of 'integers' and 'strings' and instead think of them as units. For example, a string is simply a sequence of bytes starting at a given location and continuing until a certain condition (such as a terminator byte or length count) is met.

 


Return to assembler index
Copyright © 2002 Richard Murray