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?