home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
language
/
f68k
/
qlf68k.asm
< prev
next >
Wrap
Assembly Source File
|
1993-10-23
|
37KB
|
991 lines
;Loader für F68K auf dem QL
;7.3.1991 by Dirk Kutscher
;mit VT52-Emulation und Druckerunterstuetzung
;Letzte Änderung: ---> Sat 1991 Aug 03 19:46:24 <---
;Dies ist die Version mit dem neuen Protokoll fuer die
;Uebergabe der Adressen an F68K duch die forthparas Tabelle.
DATA 2560
ORG 0
TIBlength EQU $1000 ;space between TIB and RO
syssize EQU $010000 ;total space for code
datasize EQU $020000 ;total space for data
;
;JobHeader
;
bra.s sstart
dc.l 0
dc.w $4afb
dc.w 13
dc.b 'F68K Ver. 1.b'
sstart bra start
;--------------------------------------------
;Fehlerabfangen:
Fehler tst.l d0
beq.s okay
Ciao move.w $ca,a4
jsr (a4)
move.l d0,d3
moveq #mt_frjob,d0
moveq #-1,d1
trap #1
okay rts
;-------------------------------------------------
GibMeldung move.w ut_err,a5 ; Error code in D0
sub.l a6,a6
move.l a0,a3
move.l ID,a0
jsr (a5)
move.l a3,a0
rts
;-----
Flush moveq #-1,d3 ; ID in A0
moveq #fs_flush,d0
trap #3
rts
Ink moveq #-1,d3 ; ID in A0
moveq #sd_setin,d0 ; Farbe in d1
trap #3
rts
Over moveq #-1,d3 ; ID in A0
moveq #sd_setmd,d0 ; Mode byte in d1
trap #3
rts
Newline moveq #-1,d3 ; ID in A0
moveq #sd_nl,d0
trap #3
rts
Csize moveq #-1,d3 ; ID in A0
moveq #sd_setsz,d0 ; Character width in d1.w
trap #3 ; Character height in d2.w
rts
Back moveq #-1,d3 ; ID in A0
moveq #sd_pcol,d0
trap #3
rts
;-----------------------------------------------
WennESC move.b #-1,d5
move.b Ypsilon,d3
tst.b d3
beq.s e0a
cmp.b #-1,d3
bne.s cp2
/cp1 lea Ypsilon,a4
move.b d1,(a4)
lea Escape,a4
move.b #27,(a4)
clr.l d1
rts
/cp2 clr.l d2
move.b Ypsilon,d2
sub.b #32,d2
sub.b #32,d1
lea Ypsilon,a4
move.b #0,(a4)
lea Escape,a4
move.b #0,(a4)
SetPos moveq #-1,d3 ; ID in A0
moveq #sd_pos,d0 ; Spalte in d1.w
trap #3 ; Zeile in d2.w
clr.l d1
rts
e0a cmp.b #65,d1
bne.s e0
CurUp moveq #-1,d3
moveq #sd_prow,d0
trap #3
rts
e0 cmp.b #66,d1
bne.s e1
CurDown moveq #-1,d3
moveq #sd_nrow,d0
trap #3
rts
e1 cmp.b #67,d1
bne.s e2
CurRight moveq #-1,d3
moveq #sd_ncol,d0
trap #3
rts
e2 cmp.b #68,d1
bne.s e3
CurLeft moveq #-1,d3
moveq #sd_pcol,d0
trap #3
rts
e3 cmp.b #69,d1
bne.s e4
Cls moveq #-1,d3
moveq #sd_clear,d0
trap #3
rts
e4 cmp.b #72,d1
bne.s e5
Home moveq #-1,d3
moveq #0,d1
moveq #0,d2
moveq #sd_pos,d0
trap #3
rts
e5 cmp.b #73,d1
bne.s e6
UpIns rts
e6 cmp.b #74,d1
bne.s e7
DelEop moveq #-1,d3
moveq #sd_clrbt,d0
trap #3
rts
e7 cmp.b #75,d1
bne.s e8
DelEol moveq #-1,d3
moveq #sd_clrrt,d0
trap #3
rts
e8 cmp.b #76,d0
bne.s e9
InsLine moveq #-1,d3
moveq #10,d1
moveq #sd_scrbt,d0
trap #3
rts
e9 cmp.b #77,d0
bne.s e10
DelLine moveq #-1,d3
move.w #-10,d1
moveq #sd_scrbt,d0
trap #3
rts
e10 cmp.b #100,d1
bne.s e11
DelSop rts
e11 cmp.b #101,d1
bne.s e12
curon moveq #-1,d3 ; ID in A0
moveq #sd_cure,d0
trap #3
rts
e12 cmp.b #102,d1
bne.s e13
curoff moveq #-1,d3 ; ID in A0
moveq #sd_curs,d0
trap #3
rts
e13 cmp.b #107,d1
bne.s e14
RestCursor lea CuPos,a2
move.w (a2),d2
move.w 2(a2),d1
exg d1,d2
bsr SetPos
rts
e14 cmp.b #108,d1
bne.s e15
EraseLine moveq #-1,d3
moveq #sd_clrln,d0
trap #3
rts
e15 cmp.b #89,d1
bne.s e17
AbsCursor lea Ypsilon,a4
lea Escape,a5
move.b #27,(a5)
move.b #-1,(a4)
rts
e17 cmp.b #106,d1
bne.s e18
StorePos lea InqBlock,a1
moveq #-1,d3
moveq #sd_chenq,d0
trap #3
rts
e18 cmp.b #112,d1
bne.s e19
InvON move.b #0,d1
bsr Ink
move.b #7,d1
Strip moveq #-1,d3 ; Strip colour in d1
moveq #sd_setst,d0
trap #3
rts
e19 cmp.b #113,d1
bne.s e20
InvOFF move.b #7,d1
bsr Ink
move.b #0,d1
bsr.s Strip
rts
e20 cmp.b #118,d1
bne.s e21
WrapON lea NoWrap,a4
move.b #0,(a4)
rts
e21 cmp.b #119,d1
bne.s e22
WrapOFF lea NoWrap,a4
move.b #-1,(a4)
rts
e22 move.b #0,d5
rts
;---------------------------------------------------
Control cmp.b #27,d1
bne.s co0
lea Escape,a4
move.b #27,(a4)
rts
co0 move.b Escape,d2
cmp.b #27,d2
bne.s co1
lea Escape,a4
move.b #0,(a4)
bsr WennESC
tst.b d5
beq.s co1
clr.l d1
rts
co1 cmp.b #08,d1 ; key in d1
bne.s co2
bsr CurLeft
clr.l d1
rts
co2 move.b NoWrap,d6
tst.b d6
beq.s co3
cmp.b #13,d1
beq.s co3
moveq #-1,d3
lea WrapBlock,a1
moveq #sd_chenq,d0
trap #3
lea WrapBlock,a1
move.w $04(a1),d2
cmp.w #79,d2
blt.s co3
clr.l d1
co3 rts
;-------
AufDev move.l a4,a0
moveq #0,d3
moveq #-1,d1
moveq #io_open,d0
trap #2
rts ; ID in A0
position move.l a1,a5 ; Buffer pointer retten
moveq #-1,d3 ; ID in A0
moveq #fs_posab,d0 ; position in D1
trap #3 ; New position in D1.l
move.l a5,a1
rts
ReadBlock bsr.s position ; File pointer positionieren
move.w #2048,d2 ; ID in A0
moveq #-1,d3 ; Adresse in A1
moveq #io_fstrg,d0
trap #3
rts
WriteBlock bsr.s position ; File pointer positionieren
move.w #2048,d2 ; ID in A0
moveq #-1,d3 ; Adresse in A1
moveq #io_sstrg,d0
trap #3
rts
PRTauf lea Drucker,a0
moveq #-1,d1
move.l #0,d3
moveq #io_open,d0
trap #2
lea prtID,a1
move.l a0,(a1)
rts
;-----------------------------------------------
EDITaLINE move.w #0,d1 ; Adresse in A1
swap d1 ; ID in A0
move.w (a1),d1
moveq #30,d2 ; Lenght of Buffer
moveq #-1,d3 ; A1 pointing to end
adda.w (a1),a1 ; of buffer
adda.l #2,a1
moveq #io_edlin,d0
trap #3
suba.w d1,a1
suba.l #2,a1
subq.w #1,d1
move.w d1,(a1)
rts
;-------------------------------------------------
start sub.l a6,a6 ; A6 loeschen
moveq #mt_inf,d0 ; Job ID
trap #1
move.l d1,d2 ; JOB ID in d2
move.l #syssize,d1 ; codespace reservieren
add.l #datasize,d1 ; und dataspace
add.l #40,d1 ; space for Returnstack
add.l #28,d1 ; 28 byte header
move.l d1,d4 ; nach d4 retten
moveq #mt_alchp,d0
trap #1 ; Adresse in A0
cmp.l d1,d4 ; Fehler auschliessen
bgt Ciao
bsr Fehler ;wirklich!
move.l a0,a2
add.l #28,a2
lea codeseg,a1
move.l a2,(a1)
add.l #datasize,a2
lea dataseg,a1
move.l a2,(a1)
;-----------------------------------------
;Eine Console fuer F68K:
ConOpen move.w ut_con,a4
lea console,a1
jsr (a4) ;ID in A0
bsr Fehler
bsr Cls
; Die ID soll jetzt gleich an die forthparas Tabelle angefuegt werden,
; damit sie F68K uebergeben werden kann.
lea Standarduebergabe,a5
move.l a0,2(A5)
;Eine kleine Botschaft:
move.w Kutscher,d2
lea Kutscher,a1
adda.l #2,a1
moveq #3,d3
moveq #io_sstrg,d0
trap #3
;Logo:
moveq #1,d1
bsr Over
moveq #2,d1
moveq #1,d2
bsr Csize
moveq #2,d1
bsr ink
move.w #20,d5
move.w #20,d6
moveq #-1,d3
lea hey,a4
move.w ut_mtext,a5
moveq #10,d4 ; 10mal
bra.s ewloop
/wloop addq.w #1,d5
addq.w #1,d6
move.w d5,d1
move.w d6,d2
moveq #-1,d3
moveq #sd_pixp,d0
trap #3
move.l a4,a1
jsr (a5)
/ewloop dbf d4,wloop
moveq #4,d1
bsr Ink
move.w d5,d1
move.w d6,d2
moveq #-1,d3
moveq #sd_pixp,d0
trap #3
move.l a4,a1
jsr (a5)
move.w #0,d1
bsr Over
clr.w d1
clr.w d2
bsr Csize
bsr Newline
bsr Newline
move.w Abfrage,d5
tst.w d5
beq.s NoAbfrage
lea file,a1
bsr EDITaLINE
lea f68kout,a1
bsr EDITaLINE
lea f68kin,a1
bsr EDITaLINE
lea sdev,a1
bsr EDITaLINE
lea rdev,a1
bsr EDITaLINE
noAbfrage moveq #7,d1
bsr ink
lea ID,a1
move.l a0,(a1)
;---------------------------------------------
Oeffnen moveq.l #-1,d1
moveq.l #0,d3
lea file,a0
moveq #io_open,d0
trap #2
bsr Fehler
moveq #64,d2 ; Read file header
moveq #-1,d3
lea header,a1
moveq #fs_headr,d0
trap #3
move.l header,d2 ; Load F68K_IMG
moveq #-1,d3
move.l codeseg,a1
sub.l #28,a1
moveq #fs_load,d0
trap #3
bsr Fehler
Close moveq #io_close,d0 ;flp1_F68K_IMG schliessen
trap #2
bsr Fehler
move.l codeseg,a0
move.l -22(a0),d0
add.l -26(a0),a0
move.l dataseg,a1
divu #48,d0
bra.s ealp
salp movem.l (a0)+,d1-d7/a2-a6
movem.l d1-d7/a2-a6,(a1)
adda.l #48,a1
ealp dbf d0,salp
clr.w d0
swap d0
divu #4,d0
bra.s eblp
sblp move.l (a0)+,d1
move.l d1,(a1)+
eblp dbf d0,sblp
clr.w d0
swap d0
bra.s eclp
sclp move.b (a0)+,d1
move.b d1,(a1)+
eclp dbf d0,sclp
;---------------------------------------------
;----------------------------------------------------------
lea ret,a1
move.l A7,(a1) ;save returnstackpointer
;push I/O-Adresses
lea key,a1 ; Adressen der
lea ksub,a0 ; Routinen in die
move.l a1,(a0) ; tables einsetzen
lea vt52emit,a1
lea vt52sub,a0
move.l a1,(a0)
lea emit,a1
move.l a1,4(a0)
lea pureEmit,a1
move.l a1,8(a0)
lea printerEmit,a1
move.l a1,12(a0)
lea keyquest,a1
lea qsub,a0
move.l a1,(a0)
lea rw,a1
lea rsub,a0
move.l a1,(a0)
lea readsys,a1
lea readsub,a0
move.l a1,(a0)
lea writesys,a1
lea writesub,a0
move.l a1,(a0)
;------------
lea t_roottable,a1 ; die Adressen der
lea roottable,a2 ; tables in die
move.l a1,(a2) ; forthparas Tabelle
lea t_WRITEsys,a1
move.l a1,-(a2)
lea t_READsys,a1
move.l a1,-(a2)
lea t_r_wtable,a1
move.l a1,-(a2)
lea t_keyqtable,a1
move.l a1,-(a2)
lea t_keytable,a1
move.l a1,-(a2)
lea t_emittable,a1
move.l a1,-(a2)
move.l #datasize,-(A2)
move.l #syssize,-(A2)
;push memory description
move.l dataseg,d1 ;start of data segment
addi.l #datasize,d1 ;end of data segment
move.l d1,-(A7) ;Returnstack
move.l d1,d2
subi.l #TIBlength,d2
move.l d2,-(A2) ;this is the TIB
move.l d1,-(A2) ; retstk
move.l d2,-(A2) ; data-stack base
move.l codeseg,-(A2) ;sysbot
move.l dataseg,-(A2) ;databot
;-------------------
; Okay:
; Die Adresse von forthparas auf den Stack
lea forthparas,a2
move.l a2,-(a7)
; Und dann F68K aufrufen:
move.l codeseg,a0
jsr (a0) ;toi toi toi
movea.l ret,A7 ;restore returnstack
move.l ID,a0 ; Channels schliessen
moveq #io_close,d0
trap #2
move.w first,d4
tst.w d4
beq.s cstream
move.l outhandle,a0
moveq #io_close,d0
trap #2
cstream move.l streamID,d1
tst.l d0
beq.s Crdev
move.l d1,a0
moveq #io_close,d0
trap #2
Crdev move.l rawID,d1
tst.l d1
beq.s inclose
move.l d1,a0
moveq #io_close,d0
trap #2
inclose move.l inhandle,d1
tst.l d1
beq.s Ende
move.l d1,a0
moveq #io_close,d0
trap #2
Ende bra Ciao ; und weg
;******************************
;******* I/O-routines *********
;******************************
; 1.) KEY ( -- char )
key move.l ID,a0
bsr curon
moveq #-1,d3
moveq #io_fbyte,d0
clr.l d1
trap #3
bsr curoff
lea ID,a1
move.l a0,(a1)
lea INuebersetz,a1
adda.l d1,a1
move.b (a1),d0
nix rts
; 2.) EMIT ( char -- )
vt52emit move.l ID,a0
clr.l d1
move.l 4(a7),d1
bsr Control
lea OUTuebersetz,a1
adda.l d1,a1
move.b (a1),d1
tst.b d1
beq.s vtnix2
moveq #-1,d3
moveq #io_sbyte,d0
trap #3
lea ID,a1
move.l a0,(a1)
vtnix2 rts
emit move.l ID,a0
clr.l d1
move.l 4(a7),d1
lea OUTuebersetz,a1
adda.l d1,a1
move.b (a1),d1
tst.b d1
beq.s nix2
moveq #-1,d3
moveq #io_sbyte,d0
trap #3
lea ID,a1
move.l a0,(a1)
nix2 rts
pureEmit move.l ID,a0
move.l 4(a7),d1
tst.b d1
beq.s purenix2
moveq #-1,d3
moveq #io_sbyte,d0
trap #3
lea ID,a1
move.l a0,(a1)
purenix2 rts
printerEmit move.l prtID,a0
move.l a0,d3
tst.l d3
bne.s Poffen
bsr PRTauf
Poffen move.l 4(a7),d1
tst.b d1
beq.s PRTnix2
moveq #-1,d3
moveq #io_sbyte,d0
trap #3
PRTnix2 rts
;-------------------------------------------
; 3.) KEY? ( -- flag )
keyquest move.l ID,a0
move.w #0,d3
moveq #io_pend,d0
trap #3
tst.l d0
beq.s jawoll
clr.l d0
rts
jawoll moveq #-1,d0
rts
; 4.) R/W ( addr block r/w-flag -- flag )
; 4(a7) 8(a7) 12(a7)
rw move.l 8(a7),d2 ; Block Nr
cmp.l #249,d2
bgt.s fn1
fn0 lea streamID,a3
lea sdev,a4
bra.s zu
fn1 lea rawID,a3
lea rdev,a4
subi.l #250,d2
zu move.l d2,8(a7)
move.l (a3),a0
;move.l a0,d5
;tst.l d5
;bne.s offen
bsr AufDev ; ID in A0, name adr in A4
tst.l d0
beq.s offen
move.l #0,(a3)
bsr GibMeldung
move.l #0,d0
rts
;move.l a0,(a3)
offen move.l 4(a7),a1 ; Block Buffer
move.l 8(a7),d1
;move.l d2,d1
muls #2048,d1
move.l $c(a7),d0
tst.l d0
beq.s BlLies
SchreibBlock bsr WriteBlock
bra.s FertigRW
BlLies bsr ReadBlock
FertigRW move.l a0,(a3)
moveq #2,d0 ; Neu:
trap #2 ; Jetzt immer Close
tst.l d0
bne.s falsch
noError moveq #1,d0
rts
falsch bsr GibMeldung
clr.l d0
rts
; 5.) READSYS ( addr count -- flag )
readsys move.l inhandle,a0
move.l a0,d1
tst.w d1
bne.s rnocreate
moveq.l #-1,d1
move.l #0,d3
lea f68kin,a0
moveq #io_open,d0
trap #2
lea inhandle,a1
move.l a0,(a1)
Rnocreate move.l 4(a7),a1
move.l 8(a7),d2
moveq #-1,d3
moveq #fs_load,d0
trap #3
tst.l d0
beq.s rOK
bsr GibMeldung
move.l #0,d0
rts
rOK moveq.l #-1,d0
rts
; 6.) WRITESYS ( addr count -- flag )
; offsets: 4(A7) 8(A7) d0
writesys move.l outhandle,a0
move.l a0,d1
tst.l d1
bne.s nocreate
moveq.l #-1,d1
move.l #2,d3
lea f68kout,a0
moveq #io_open,d0
trap #2
lea outhandle,a1
tst.l d0
beq.s opOK
move.l #0,(a1)
bsr GibMeldung
move.l #0,d0
rts
opOK move.l a0,(a1)
nocreate move.l 4(a7),a1
move.l 8(a7),d2
moveq #-1,d3
moveq #fs_save,d0
trap #3
tst.l d0
beq.s wOK
bsr GibMeldung
move.l #0,d0
rts
wOK moveq.l #-1,d0
;bsr Flush
rts
;----------------------------------------------------
;Data:
forthparas
registers ds.l 16
Fdata ds.l 1
code ds.l 1
datstk ds.l 1
retstk ds.l 1
TIBptr ds.l 1
codelen ds.l 1
datalen ds.l 1
emittable ds.l 1
keytable ds.l 1
keyqtable ds.l 1
r_wtable ds.l 1
tablereadsys ds.l 1
tablewritesys ds.l 1
roottable ds.l 1
;---------------------------------
; Ich habe hier jetzt den Versuch einer Standardparameteruebergabe
; eingefuegt:
; Es folgt ein word mit der Anzahl der fuer F68K geoeffneten Kanaele,
; gefolgt von der/den ID(s) (long). Danach sollen 128 Bytes fuer Strings
; etc. reserviert werden...
Standarduebergabe dc.w 1
ds.l 1
Teststring dc.w 24
dc.b 'Dies ist der Teststring!'
ds.b 104
;----------------------------------
t_roottable dc.l 2
dc.l 0
dc.l 250
dc.l 250
dc.l 49
t_keytable dc.l 1
ksub dc.l key
t_emittable dc.l 4
vt52sub dc.l vt52emit
esub dc.l emit
psub dc.l pureEmit
prtsub dc.l printerEmit
t_keyqtable dc.l 1
qsub dc.l keyquest
t_r_wtable dc.l 1
rsub dc.l rw
t_readsystable dc.l 1
readsub dc.l readsys
t_writesystable dc.l 1
writesub dc.l writesys
;------------------------
; Es folgt der Block für das Konfigurationsprogramm Config_exe
first dc.w 0
Kennung dc.b '⇩DK⇩'
file dc.w 13
dc.b 'flp1_f68k_img'
ds.b 17
f68kout dc.w 13
dc.b 'flp1_f68k_out'
ds.b 17
f68kin dc.w 12
dc.b 'flp1_f68k_in'
ds.b 18
sdev dc.w 12
dc.b 'flp1_DEV_SCR'
ds.b 18
rdev dc.w 12
dc.b 'flp1_RAW_SCR'
ds.b 18
Drucker dc.w 4
dc.b 'ser1'
ds.b 26
Abfrage dc.w -1 ; soll abgefragt werden
;---------------------
streamID dc.l 0
rawID dc.l 0
Kutscher dc.w 53
dc.b '*** F68K-Lader für Sinclair QL von Dirk Kutscher ***',10
hey dc.w 20
dc.b "Hey Ho - Let's Go !!"
console dc.b %11010111
dc.b 2,0,4
dc.w 490,254,11,1
ID ds.l 1 ;Channel ID
prtID dc.l 0
outhandle dc.l 0
inhandle dc.l 0
ret ds.l 1 ;Returnstack
fileheader ds.b 28 ;Programmheader
.codeseg ds.l 1
.dataseg ds.l 1
;ds.l 10
header ds.b 64
Escape dc.b 0
Ypsilon dc.b 0
InqBlock ds.w 2
CuPos ds.w 2
NoWrap dc.b 0
WrapBlock ds.w 4
;Uebersetzungstabelle:
;Hier stehen die Bytes für die Umwandlung
;von Eingabe (QL-code) nach F68K (Atari-code) --> KEY
INuebersetz dc.b 0,1,2,3,4,5,6,7,8,9
dc.b 13,11,12,13,14,15,16,17,18,19 ; 13 = RETURN
dc.b 20,21,22,23,24,25,26,27,'ß','¢' ; ^<, ^=
dc.b '¥',31,32,33,34,35,36,37,38,39 ; ^>
dc.b 40,41,42,43,44,45,46,47,48,49
dc.b 50,51,52,53,54,55,56,57,58,59
dc.b 60,61,62,63,64,65,66,67,68,69
dc.b 70,71,72,73,74,75,76,77,78,79
dc.b 80,81,82,83,84,85,86,87,88,89
dc.b 90,91,92,93,94,95,96,97,98,99
dc.b 100,101,102,103,104,105,106,107,108,109
dc.b 110,111,112,113,114,115,116,117,118,119
dc.b 120,121,122,123,124,125,126,127,132,129 ; 132 = 'ä'
dc.b 130,131,148,133,134,129,136,137,138,139 ; 129 = 'ü', 148 = 'ö'
dc.b 140,141,142,143,144,145,146,147,148,149
dc.b 150,151,152,153,154,155,158,157,158,159 ; 158 = 'ß'
dc.b 142,161,162,163,153,165,166,154,168,169 ; 142 = 'Ä', 153 = 'Ö', 154 = 'Ü'
dc.b 170,171,172,173,174,175,176,177,178,179
dc.b 180,181,182,183,184,185,186,187,188,189
dc.b 190,191,19,193,8,195,196,197,198,199 ; 8=Backspace, 19= <--
dc.b 4,201,202,203,204,205,206,207,5,209 ; 4 = -->, 5=Up
dc.b 210,211,212,213,214,215,24,217,218,219 ; 24= Down
dc.b 220,221,222,223,224,225,226,227,228,229
dc.b 230,231,232,233,234,235,236,237,238,239
dc.b 240,241,242,243,244,245,246,247,248,249
dc.b 250,251,252,253,254,255
;Hier stehen die Bytes für die Umwandlung
;von F68K (Atari-code) für die Ausgabe (QL-code) --> EMIT
OUTuebersetz dc.b 0,1,2,3,4,5,6,7,0,9 ; 8=Backspace
dc.b 0,11,12,10,14,15,16,17,18,19 ; 13 = RETURN
dc.b 20,21,22,23,24,25,26,0,28,29
dc.b 30,31,32,33,34,35,36,37,38,39
dc.b 40,41,42,43,44,45,46,47,48,49
dc.b 50,51,52,53,54,55,56,57,58,59
dc.b 60,61,62,63,64,65,66,67,68,69
dc.b 70,71,72,73,74,75,76,77,78,79
dc.b 80,81,82,83,84,85,86,87,88,89
dc.b 90,91,92,93,94,95,96,97,98,99
dc.b 100,101,102,103,104,105,106,107,108,109
dc.b 110,111,112,113,114,115,116,117,118,119
dc.b 120,121,122,123,124,125,126,127,128,'ü'
dc.b 130,131,'ä',133,134,135,136,137,138,139
dc.b 140,141,'Ä',143,144,145,146,147,'ö',149
dc.b 150,151,152,'Ö','Ü',155,156,157,'ß',159
dc.b 160,161,162,163,164,165,166,167,168,169
dc.b 170,171,172,173,174,175,176,177,178,179
dc.b 180,181,182,183,184,185,186,187,188,189
dc.b 190,191,192,193,194,195,196,197,198,199
dc.b 200,201,202,203,204,205,206,207,208,209
dc.b 210,211,212,213,214,215,216,217,218,219
dc.b 220,221,222,223,224,225,226,227,228,229
dc.b 230,231,232,233,234,235,236,237,238,239
dc.b 240,241,242,243,244,245,246,247,248,249
dc.b 250,251,252,253,254,255
END