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...
SWI "OS_ReadC"
OS_Byte 129
to check for a specific key or to read a key within a
given time.
; 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))
SWI 256+32
.
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.