Programmiersprache SPL


Fujiama Lengenfeld

6 August 2011

22:00 Uhr

SPL

Historie

Warum SPL

Architektur

Status

Zukunft

Historie





ATR Copy Center

erste Version in VolksForth (17kb)

SIO Copy Routine in (Forth-)Assembler

'SPL'





SPL = Simple Programming Language

von RON KNEUSEL für den Apple 2

CrossCompiler in Python (Linux, BSD, MacOS X, Windows, DOS ...)

SPL -> Assembler -> COM-Programm

'SPL'





Stackbasierte Sprache

sehr ähnlich wie Forth, aber kein Forth im technischen Sinne

nicht interaktiv

schnell und kompakt (ACC in SPL ist 6kb)

'sub-routine threaded'

'SPL'





Assembler (Zwischen-) Code kann angechaut werden

Assembler lernen

SPL-Compiler ist simpel zu verstehen

Library/Runtime





SPL Befehlesbibliothek besteht aus einer Sammlung kleiner Assembler-Schnipsel

neue SPL Primitiv-Befehle können hinzugefügt werden

SPL Befehle können optimiert werden

Beispiele





SPL Unterroutine

: getstatus ( -- rc )
  preparesio
  $53 dcmnd c!
  drvstat dbuf !
  4 dbyt !
  readcmd
;
	 

Beispiele





Variablen / Konstanten

var buf   $100
var dpath $100
var secbuf 2
var secbuforg 2

const ddevic $300
const dunit  $301
const dcmnd  $302
const dstats $303
const dbuf   $304
const dtimlo $306
const dbyt   $308
const daux   $30A
	

Beispiele





Zeichenketten (Strings)

	   str hallo "Hallo Welt"

	   : hallofujiama
             "Willkommen in Lengenfeld" disp
           ;

           : main 
             hallo disp
             hallofujiama
           ;
	 

Beispiele





Kompilieren

 ./spl.py src/example.spl 
ATasm 1.07 (A mostly Mac65 compatible 6502 cross-assembler)
Pass 1: Success. (0 warnings)
Pass 2: Success. (0 warnings)

Assembly successful
  Compiled 187 bytes (~0k)
    Block: 2100-21ba (187 bytes)

Compiled to binary file 'out.65o'
 

Beispiele


erstellter Assembler Code

; 
; Output from SPL compiler version 1.0atari
; Generated on Sat Aug  6 13:21:13 2011
; 
        *= $2100

op1     = $0087
op2     = $008B
ea      = $0083
sign    = $009F
ey      = $0082
ex      = $0081
stack   = $2000
inbuf   = $0400
tmp     = $009A
outbuf  = $00A0
res     = $008F
sp      = $0080
rem     = $0096
tb      = $0086
ta      = $0084


        lda #0
        sta sp
        jmp main

	 

Beispiele


erstellter Assembler Code

black    
             lda #0 
             sta 710 
             rts 

STR_0000        .byte 24,"Willkommen in Lengenfeld",$9B
hallo   .byte 10,"Hallo Welt",$9B

;**********************************************
;  get_ta
get_ta 
    jsr pop
    sta ta
    stx ta+1
    rts
;**********************************************
;  pop  -  pop the stack to AX
pop 
    dec sp
    ldy sp
    ldx stack+$80,y
    lda stack,y
    rts
	 

Beispiele


erstellter Assembler Code

STR_0000        .byte 24,"Willkommen in Lengenfeld",$9B
hallo   .byte 10,"Hallo Welt",$9B

;**********************************************
;  get_ta
;
get_ta 
    jsr pop
    sta ta
    stx ta+1
    rts

;**********************************************
;  pop  -  pop the stack to AX
;
pop 
    dec sp
    ldy sp
    ldx stack+$80,y
    lda stack,y
    rts

	 

Beispiele


erstellter Assembler Code

main     
        jsr black
        lda #hallo
        jsr push
        jsr disp
        jsr hallofujiama
        rts 
hallofujiama     
        lda #STR_0000
        jsr push
        jsr disp
        rts 
	 

Status




SPL kann heute benutzt werden ...

... aber noch viele Baustellen und Fehler

Bibliotheksroutinen noch unvollständig

Apple 2 und Atari Routinen müssen getrennt werden

Zukunft




Cross-Platform (Apple 2, Atari, Commodore, Oric, BBC ...)

einfache Erweiterung mit neuen Befehlen (automatisches Auflösen der Abhängigkeiten)

Unterstützung mehrerer Assembler (CA65, xasm, mads (SpartaDOS X))

Optimizer (SuperInstructions, Peephole Optimizer, 65C02 ...)

Fragen?