Slang v1.2 updates: Bugfixes, new memory map, assembler updates (LUP, ]vars), pointers added to language, CORE library updated (routines, number input). Bugfixes: Mostly dull. (Arrays, subroutine regvars, editor/environment, etc.) New memory map: Slang now goes from $0801-$A800, with slangdef at $A800-$CE00 ($CE00-$CFFF are used for temp stuff) Assembler updates: First, reusable labels have been added. Any label which starts with the ] character is reusable, like: ]loop inc $c000 bne ]loop ;always backwards reference ]loop inc $d020 ;label has been re-defined to new location bne ]loop ;reference to redefined label Since it's always a backwards reference, in general a ]label must be defined before being used. Also, ]labels cannot be used as anchors for local labels. The second update is the addition of a pseudo-opcode, LUP: LUP 10 ;repeat following section of code 10 times inc $d020 asl --^ Put them together and you've got a nifty way of generating code: ]buf1 = $0400 ]buf2 = $2000 ldx #00 LUP 25 ;generate code to copy 25 rows from buf2 to buf1 lda ]buf2,x sta ]buf1,x ]buf1 = ]buf1+40 ;re-define labels... ]buf2 = ]buf2+40 --^ ;...and lup Pointers: Slang v1.2 now features pointers: ubyte ^byteptr ;create a 16-bit pointer to a ubyte int ^test2(20,30) ;create a 16-bit pointer to an array of ints ubyte ^^longptr ;create a 24-bit pointer to a ubyte To my mind, the easiest way to think of pointers (and to keep the syntax straight) is to think in terms of zero page with assembly: ubyte ^byteptr ;create a 2-byte (e.g. zp) location byteptr = $c000 ;set address: lda #00 sta zp lda #$c0 sta zp+1 ^byteptr = 10 ;set contents: lda #10 ldy #00 sta (zp),y Creating a pointer doesn't really create the pointer in zp; you can force it to zp however by using an @-var: ubyte ^byteptr@$fa ;really create a location in zp Note: I have not tested them extensively, so you might consider pointers as still a little experimental. CORE library update: Due to the changes with ]vars, the core libraries have been updated. The latest versions are .i (i.e. core.i, putcore.i.s). While I was at it I went ahead an added the "InputStr" routine to the putcore library (previously it was only in the linked library). InputStr is an upgraded input routine: you can limit the number of chars, the cursor keys are disabled, shift-clear will clear the current input string, etc. Also added are InputFloat and InputInt, which use the InputStr routine to input numbers.